# 0.8.2 — cross-platform setup + native backends (2026-09-11)

- Adds local-owner `juju setup`, `--check`, `--plan` and component selection. Setup can prepare and deep-probe Git, ripgrep, FFmpeg/ffprobe, whisper.cpp + pinned model, Playwright Chromium, external LSPs, speech, desktop and the command sandbox on Windows/macOS/Linux. Web access and Desktop app consent remain explicit, separate owner permissions.
- Adds Windows SAPI/eSpeak speech, native Windows desktop capture/UI Automation/input and Linux X11/X-Resource/XTEST/AT-SPI desktop support. Pure Wayland portal-only sessions are not claimed.
- Adds a Windows command sandbox through pinned `@anthropic-ai/sandbox-runtime@0.0.75`: dedicated `srt-sandbox` identity, WFP network fence, scoped filesystem grants and a mandatory real confinement receipt. A required sandbox still fails closed when setup/probes are incomplete.
- Fixes Windows Server integration issues found by native acceptance: `ProgramData` preservation in child environments, exact snake_case `srt-win status` parsing, explicit `srt-win` API wiring, RX-only helper ACLs for the sandbox group, common-parent sandbox scratch placement, avoiding ACL writes to protected `System32`, and RX-only AppContainer access to the exact Playwright Chromium revision while keeping the Chromium sandbox enabled.
- Candidate acceptance on real Windows Server x64 / Node v24.21.0 reached 10/10 setup components ready, real desktop capture/focus/UIA, five Windows sandbox confinement checks, and MCP STDIO with 74 tools + managed Git + sandboxed workspace write/outside-write denial. Linux Debian arm64 / Node 22 acceptance exercised setup, bubblewrap and X11/AT-SPI; macOS arm64 / Node 22 runs the full repository gate.
- Historical 0.8.0/0.8.1 evidence remains below. Manual scenarios that were not executed (for example external ChatGPT custom-MCP, second-Windows-user, 8.3/Defender/OneDrive and pure Wayland-only behavior) remain unclaimed.

See [RELEASE_0.8.2](RELEASE_0.8.2.md), [TEST_REPORT](TEST_REPORT.md), [SECURITY](SECURITY.md) and [COMPATIBILITY](COMPATIBILITY.md).

# 0.8.1 — Windows Administrators-owned state ACL fix (2026-09-10)

Fixes the owner-reported Windows Server / built-in Administrator startup failure
in 0.8.0: a freshly created state directory could be owned by the Administrators
group, causing the old owner check to fail before SetOwner could run.

`ensurePrivateDirectory` now admits only the current user SID, or exactly
S-1-5-32-544 with an enabled Administrators token, then sets the user owner and
rereads owner/DACL. `assertPrivatePath` handles the same group-owner default for
new files and directories, including IPC descriptors, but only after their
existing DACL is verified private. Owner repair preserves the DACL exactly;
permissive DACLs and foreign owners still fail closed. Reparse-point checks,
constant PowerShell source, environment-only path data and hard ACL errors remain.

Adds native protect/verify/IPC/foreign-owner/Everyone-ACE/junction tests and
separate source-contract tests. Local POSIX results and skips are recorded in
`release-evidence/0.8.1/verification.json`; they are not Windows-native passes.
Publication is owner-authorized after the local gate; its actual outcome and
fresh registry-install evidence are recorded separately in this release directory.
The original Windows Server retest remains OWNER_PENDING; broader Windows support
status and the existing sandbox/desktop/speech limitations are unchanged.

See [RELEASE_0.8.1](RELEASE_0.8.1.md), [Windows status](WINDOWS_0.8.0.md) and
[TEST_REPORT](TEST_REPORT.md). No Git commit or push is part of this release task.

# 0.8.0 — Windows native candidate (2026-09-10)

**Local implementation candidate; Windows EXPERIMENTAL; not published by this task.**

- Authenticated owner IPC on Unix sockets / Windows named pipes; private
  per-listener credentials and fresh challenge/HMAC proofs in both directions.
- Shared Windows helpers for trusted absolute executables, PATHEXT, Git Bash /
  cmd, native argv limits, child environments, live process-tree hard kills,
  private-state DACLs and bounded filesystem retries.
- NTFS lexical/canonical guards, BOM/CRLF preservation, and existing OAuth,
  workspace ACL, trust and journal protections retained.
- New runtime, IPC authentication and native NTFS regression tests; Windows
  Node 22/24 CI is a phase-0 evidence workflow, not yet executed here.
- Windows command sandbox / desktop / macOS speech remain unsupported;
  requested sandbox protection is not silently downgraded.
- **Upgrade:** stop old 0.7.x processes with their matching old CLI/terminal
  before replacing the installation. The new IPC has no unauthenticated
  legacy fallback. OAuth grants are not erased.

Actual local results and native gates: [TEST_REPORT](TEST_REPORT.md).
Package and implementation guide: [RELEASE_0.8.0](RELEASE_0.8.0.md) and
[WINDOWS_0.8.0](WINDOWS_0.8.0.md). Older entries below retain their historical
publication/test evidence and do not certify this candidate.

# 0.7.2 — Hybrid 49-tool surface (2026-09-10)

Upgrade with `npm install -g juju-mcp@0.7.2`, restart the process and rescan
the client's tools. No OAuth/ACL/trust/desktop/schedule state changes.

- New opt-in `hybrid` tool surface for clients that cap the catalog near ~50
  tools: exactly 49 — the full compact coverage core FIRST (overview,
  juju_discover, all 17 gateways, so client-side truncation can never remove a
  capability), then the 30 most-used direct coding tools with their original
  names and schemas. Select with `juju start --tools hybrid` or config
  `toolSurface: "hybrid"`. Defaults are unchanged (HTTP compact, STDIO full).
- tools/list payload: full ≈ 237.8 KB, hybrid ≈ 113.3 KB, compact ≈ 46.8 KB.
- `schemas/tools.hybrid.json` ships beside tools.json/tools.compact.json;
  `project_overview` reports `toolSurface: "hybrid"` + `hybridToolCount`.
- Same single invocation pipeline as 0.7.1: direct and gateway paths enforce
  the target operation's scope/ACL/epoch/schema/trust/approvals/guards
  identically. Release gate: 414/414 tests in 50 files, exit 0.

# 0.7.1 — Compact Tool Surface (2026-09-10)

Upgrade with `npm install -g juju-mcp@0.7.1`, restart the HTTP/STDIO process
and make the client rescan its tools. No OAuth, ACL, trust, desktop or
schedule state changes.

- HTTP now defaults to a compact 19-tool surface: project_overview,
  juju_discover and 17 domain gateways reaching all 74 capabilities through
  the unchanged per-operation contract. Serialized tool list ~236 KB → ~47 KB (−80.3%).
- STDIO keeps the full 74-tool catalog by default. Override either way with
  config `toolSurface` or `--tools compact|full` (exposure only, never
  permissions).
- Gateways route through the same invocation pipeline as direct calls: target
  scope, workspace ACL/epoch, strict original schemas, trust/approvals bound
  to the target operation, guards, idempotency, audit and error codes are
  identical; image/audio content blocks pass through. juju_discover returns
  per-operation JSON Schemas with deterministic hashes and never reveals
  tokens/grants/owner state.
- Startup diagnostic `[juju] mcp tool surface | transport=… | surface=… |
  tools=… | schemaBytes=…` on both transports; `schemas/tools.compact.json`
  ships beside the unchanged `schemas/tools.json`.
- Server-side write/edit on 0.7.0 was verified healthy (real fixtures + live
  audit evidence); the compact surface addresses remote-client catalog ingest.
  No hard per-client tool limit is claimed. Live ChatGPT rescan remains a
  manual gate.
- Release gate: 412/412 tests in 50 files (400 core + 12 packaging),
  typecheck/lint/build clean on macOS arm64 / Node 22.23.2; no skips in the
  recorded run. Guides: [RELEASE_0.7.1](RELEASE_0.7.1.md), [ADR-029](adr/029-compact-tool-surface.md).

# 0.7.0 — Coding Assistance + Multimodal (2026-09-10)

Upgrade with `npm install -g juju-mcp@0.7.0`, restart the intended HTTP/STDIO
process and reload the client's tool catalog. No reset of OAuth, workspace ACLs,
trust, sandbox, desktop consent or signing state is required.

- Add five coding-assistance tools: task context, static impact analysis, symbol
  reads, preview-only block-body refactors and explicit verification plan/run/report.
- Add 20 multimodal tools: bounded screen/image views, local video/audio evidence,
  local Whisper ASR, subtitle search, macOS speech synthesis, isolated Chromium,
  step-based visual games and revisioned demonstration workflows. Catalog: 74 tools;
  original 49 entries retain their order. Tools return evidence; the client model
  provides interpretation/planning. No always-on agent or automatic training.
- Pin new dependencies `sharp@0.35.4` and `playwright@1.63.0`; retain current SDK/OAuth
  dependency versions. FFmpeg, whisper-cli, Chromium and models remain explicit
  optional installations, never JUJU install hooks.
- Ship `juju-media-setup` for read-only readiness checks and explicit, separately
  requested Chromium/model setup. Model download is SHA-256/size verified and is
  not included in the tarball. The setup command never changes JUJU permissions.
- Keep existing exec approval and configured sandbox for media/browser execution;
  retain principal/workspace/epoch ownership, source limits, fresh UI observations,
  bounded caches and conservative idempotency for uncertain actions.
- Correct browser video controls to invoke a real Playwright callback and support
  byte ranges for local media. Regression checks actual seek/play/pause state.
- Include explicit `IdToken: 600` TTL and the bounded socket-retry helper in the
  same-port OAuth test; Access Token TTL remains separately configured.
- Release gate: 374/374 tests in 44 files (363 core + 11 packaging), typecheck,
  lint and build passed on macOS arm64 / Node 22.23.2; no skipped tests in that run.
  Live external-client/tunnel and new native desktop-input acceptance remain manual.

Guides: [0.7.0 start/upgrade](RELEASE_0.7.0.md), [Assistance](ASSISTANCE.md),
[Multimodal](MULTIMODAL.md), [Test report](TEST_REPORT.md).
Earlier entries below are historical and retain their original test/tool counts.

# 0.6.3 — copyable OAuth approval commands

Upgrade with `npm install -g juju-mcp@0.6.3`, then restart JUJU/STDIO to load
the corrected instructions. No new client registration, scope or dependency
change is required. See [README upgrade steps](../README.md#อัปเกรดเป็น-063).

- Terminal and browser consent instructions include `--` before the request ID.
  Provider-generated IDs beginning with `-` or `--` are now passed as literal
  arguments instead of CLI options. Approvals still require owner action and
  the existing pending-request checks. The same `--` syntax already works in
  installed 0.6.2; no restart or reinstall is needed to use the workaround.

# 0.6.2 — clear unused client registrations

Upgrade with `npm install -g juju-mcp@0.6.2`, restart JUJU/STDIO and reload
the AI client's tools and Local Config page. This release includes the 0.6.0
and 0.6.1 changes below: direct MCP access without per-chat confirmation and
Client access scoped to the active folder. Existing OAuth registrations and
settings are retained during upgrade; deletion is a separate owner action.
See [README upgrade steps](../README.md#อัปเกรดเป็น-063) and
[confirmation migration](CONFIRMATION.md).

- Add a collapsed owner-only manager under Client access, with individual or
  select-all-in-list selection, review dialog and cancellation. Main folder list
  stays scoped; the manager explicitly shows installation-wide registrations.
- Delete selected registrations plus workspace ACLs and revoke associated
  grants/provider credentials/pending approvals in one audited transaction.
- Stale/changed review, duplicate/empty selections, foreign-origin/proxy and
  unauthenticated requests are refused. Other clients and project files remain.
- Deleted connections require new registration/authorization. No global install
  or deletion of real owner clients occurred during development.

# 0.6.1 — Client access for the current folder (included in 0.6.2)

- Main client list/count now include only clients authorized for the current root.
  Empty/revoked/corrupt ACL entries and other-project clients are hidden there.
- Add existing registrations through a collapsed, on-demand picker. Same-name
  clients include their IDs; adding requires an explicit scope selection/save.
- Retain OAuth registrations/login and other workspace permissions. Revoke only
  removes the current folder's card. Workspace changes clear stale picker state.
- No MCP/dependency/migration change. Restart JUJU and reload Local Config.

# 0.6.0 — direct MCP use (included in 0.6.2)

- Removed per-chat confirmation/whitelist and all common chat/usageId inputs.
  Connected clients operate directly under existing OAuth/workspace/trust rules.
- Removed usage_request, usage_status, usage_end; catalog now has 49 tools.
- Removed owner chat/usage/reset commands and corresponding Local Config forms,
  API and IPC routes. Reload cached tools and restart JUJU after upgrading.
- Kept OAuth/login state, path ACLs, action approvals, Desktop permissions and
  separately approved schedules. Old chat/usage database rows remain inert.
- See CONFIRMATION.md for upgrade steps and TEST_REPORT.md for actual results.

The entries below are historical; 0.5.x chat instructions no longer apply.

# JUJU 0.5.0

- Usage confirmation required for every operation in HTTP/STDIO, including read-only tools.
  New usage_request / usage_status / usage_end; local owner approval only, default 60 minutes.
- Explicit limitation: owner-approved usage rounds, not verified ChatGPT conversation identities.
  Client must request a new round per conversation; restart/root switch invalidates the old round.
- Separate immutable scheduled command proposals, local digest approval, cron/timezone/expiry,
  bounded jobs, durable occurrence claims, skip missed/overlapping ticks and owner revocation.
  `juju schedule` / `juju cron`; runs only while HTTP JUJU serves the active root.
- Four new tools, 52 total. UI sections and CLI controls for both permission types.
- Valid identity OAuth with no workspace ACL returns WORKSPACE_ACCESS_REQUIRED from tools
  instead of invalid_token. Actual token expiry/revocation/audience checks remain unchanged.
- Existing OAuth/state survives migration. Usage consent is mandatory after upgrading;
  saved Desktop/trust settings do not bypass it. No automatic system cron installation.
- Guides: [CONFIRMATION](CONFIRMATION.md), [SCHEDULES](SCHEDULES.md).

# JUJU 0.4.3

- เพิ่ม `juju limits --profile standard|large` สำหรับขนาดข้อมูล โดยไม่เปลี่ยนสิทธิ์
  large: คำสั่ง 8 MiB, ไฟล์ 16 MiB, request และแผน 32 MiB; ต้อง restart หลังตั้ง
- Shell source เกิน 16 KiB ใช้สคริปต์ส่วนตัวแทนการส่ง source ผ่าน argv
  รองรับ stdin, parallel jobs, cancel และ idempotent retry ตามเดิม
- ยกเพดาน schema ของเครื่องมือเขียน/แก้/patch พร้อมตรวจ UTF-8 byte budgets
  และป้องกันการแทนที่ข้อความที่ขยายขนาดเกินกำหนดก่อนสร้าง string
- HTTP ตรวจ OAuth ก่อน parse body; STDIO ใช้ buffer cap จาก config ผ่าน official SDK
  project_overview แสดงเพดานจริง พร้อมแนะนำ AI ให้เขียนไฟล์ตรงสำหรับโค้ดยาว
- คงขนาด logs/output จำกัดข้อความคำสั่ง/argv ที่ส่งกลับ และงบคำนวณ diff
  งานไฟล์ใหญ่ยังมี full hashes, journal, backup และ rollback
- รวมฟีเจอร์จากรุ่น local 0.4.0–0.4.2: Desktop capture/OCR/control ที่ต้องอนุญาตรายแอป, `--persist` และ `juju kill` ที่เก็บ OAuth ไว้
- อัปเดตด้วย `npm install -g juju-mcp@0.4.3` แล้ว restart JUJU/STDIO subprocess
  โหมดข้อมูลใหญ่ตั้งด้วย `juju limits --profile large` ก่อน restart
- คู่มือ: [LARGE_INPUTS](LARGE_INPUTS.md), [DESKTOP](DESKTOP.md), [README](../README.md)

# JUJU 0.4.2 — source/local

- เพิ่ม `juju kill` เรียกจากโฟลเดอร์ใดก็ได้ เพื่อหยุดเซิร์ฟเวอร์ JUJU และงานลูก
  ใน state/config ของบัญชีนี้ พร้อมคืนพอร์ต โดยไม่ปิดแอป Terminal หรือโปรแกรมอื่น
- เก็บ OAuth clients, signing/cookie keys, access/refresh grants, public URL,
  client/path ACL และสิทธิ์ Desktop ที่บันทึกไว้ เปิดใหม่ด้วย endpoint/config เดิม
  เพื่อใช้ credentials ที่ยัง valid ต่อ ไม่เพิ่มสิทธิ์ให้พาธใหม่อัตโนมัติ
- หยุดผ่าน private IPC ที่ตรวจ identity เท่านั้น รองรับ instance records
  แยกแต่ละ process (รวม STDIO หลายตัวใช้พาธเดียวกัน) และ root sockets ของรุ่นเก่า
  ไม่ไล่ฆ่า PID จากชื่อ Node/Terminal หรือผู้ครอบครองพอร์ต
- ยกเลิก owned jobs ก่อน drain tool handlers และรอ shutdown ให้เสร็จ
  ใช้ `--timeout 30` ปรับเวลารอ หรือ `--json` ดูรายงาน ถ้าไม่ตอบ/ปิดไม่เสร็จ
  รายงานล้มเหลว ไม่บังคับ SIGKILL ใส่เซิร์ฟเวอร์โดยไม่มีหลักฐาน
- การ reconnect ของ ChatGPT/STDIO client จริงยังเป็น manual gate;
  การหยุด server ทำให้ปลายทางหยุดรับงานชั่วคราว ไม่มีการลบ connector หรือ logout

# JUJU 0.4.1 — source/local

- เพิ่ม `juju desktop allow --app com.google.Chrome --mode control --persist --yes`
  ตั้งครั้งเดียวในพาธโปรเจกต์ ใช้ได้แม้เซิร์ฟเวอร์หยุดอยู่ แล้วครั้งต่อไปพิมพ์ `juju`
- สิทธิ์ที่จำไว้ไม่หมดอายุและกลับมาเมื่อเปิดพาธเดิม ค่าเริ่มต้นยังเป็นแบบชั่วคราว
  หากใช้ `--minutes`; ใช้สอง flag พร้อมกันไม่ได้
- `juju desktop disable` ปิดและลืมสิทธิ์ได้แม้ไม่มีเซิร์ฟเวอร์ หน้า Local Config
  แสดงว่าเป็นสิทธิ์ที่จำไว้และมีปุ่มปิด/ลืม
- snapshots, OAuth scopes, workspace/client binding, trust/approval และ macOS
  permissions ยังตรวจตามเดิม ไม่เพิ่มสิทธิ์ข้ามโปรเจกต์หรือเปิด listener ระหว่างตั้งค่า
- ติดตั้งจาก `juju-mcp-0.4.1.tgz` ตาม [คู่มือ Desktop](DESKTOP.md)
  ยังไม่มีการ publish npm รุ่นนี้จากงานเพิ่ม persistent consent

# JUJU 0.3.1

Release prepared: 2026-09-09. Package: `juju-mcp`; command: `juju`.

## สิ่งที่เพิ่มจากรุ่น npm 0.1.2

- พิมพ์ `juju` เพื่อเปิด HTTP MCP ของโฟลเดอร์ปัจจุบัน พร้อมหน้า Local Config ส่วนตัวที่ `127.0.0.1:21731`
- Dashboard ภาษาไทย มีธีมมืด/สว่าง/ตามระบบ แสดง workspace, สิทธิ์ที่บันทึกและสิทธิ์ที่มีผล, การเชื่อมต่อ และ client access
- เจ้าของสลับโปรเจกต์จากหน้าเว็บได้โดยไม่ restart หนึ่ง process ยังคงให้บริการหนึ่ง workspace ณ เวลาใดเวลาหนึ่ง AI ต้องเรียก `project_overview` ใหม่หลังสลับ
- OAuth identity ของ JUJU แยกจากสิทธิ์ read/write/exec ของแต่ละ client และ path จึงใช้การล็อกอินเดิมกับโปรเจกต์ที่เจ้าของอนุญาตเพิ่มได้
- `juju start --allow --all` ให้ trusted actions และ fetch_url เฉพาะรอบนั้น; `juju --bypass` ปิด default job sandbox เพิ่มด้วย ทั้งสองแบบยังตรวจ OAuth, client/path access และ file guards
- Terminal มีสีตามประเภทข้อมูลและรองรับ `NO_COLOR` การส่ง STDIO/JSON ไม่ใส่สี
- Migration ซ่อม scopes แบบเก่าที่ทำให้หน้า config ขึ้น `Unexpected token 'j'` โดยรักษาการถอนสิทธิ์เดิม

เครื่องมือ coding ยังคงครบ 43 tools: อ่าน/ค้นหา/แก้ไฟล์, preview/apply/rollback, Git, TS/JS semantics, LSP adapter, รันคำสั่งพร้อมกันได้สูงสุด 8 คำสั่ง, background jobs, diagnostics, todos และ handoff ดู [catalog และตัวอย่าง](../README.md#tools)

## แพตช์ความปลอดภัยใน 0.3.1

- ทุกการบันทึกจาก Local Config ตรวจ workspace ID และ epoch แท็บเก่าได้รับ HTTP 409 `STALE_WORKSPACE` แทนการเปลี่ยนสิทธิ์ผิดโปรเจกต์ หน้าเว็บล้างค่าที่ยังไม่บันทึกเมื่อพบว่า workspace เปลี่ยน
- การสลับ workspace รอ tool handler รวมถึง audit ให้จบ แม้ HTTP connection ของ client หลุดแล้ว
- Shutdown ปิด HTTP connections เก่าก่อนปิด OAuth state และรอ handlers ก่อนปิด workspace resources การทดสอบ restart ตรวจทั้ง token ที่ยังใช้ได้และ token ที่ถูกถอนสิทธิ์

## ติดตั้งหรืออัปเกรด

รอ jobs ให้เสร็จและหยุด JUJU ตัวเก่าก่อน แล้วรัน:

```bash
npm install -g juju-mcp@0.3.1
juju --version
cd "/absolute/path/to/project"
juju
```

เปิด Private config URL ของ process ใหม่ หากใช้ STDIO ให้ client เปิด `juju stdio --root "/absolute/path/to/project"` และ reconnect หลังติดตั้ง รายละเอียด: [คู่มืออัปเดต](../README.md#operations), [STDIO](../README.md#stdio), [HTTP/OAuth](../README.md#chatgpt)

**การเปลี่ยนแปลงที่ต้องตั้งค่า:** bare `juju` เปิด HTTP เสมอตั้งแต่ 0.2 แม้ stdin เป็น pipe ให้แก้ MCP subprocess ที่เคยเรียกแบบไม่มี arguments เป็น `juju stdio` ส่วน token จาก 0.1.x ยังผูก root เดิม ต้องล็อกอินใหม่หนึ่งครั้งเพื่อรับ identity grant รุ่น 2 การเพิ่ม root ไม่เพิ่มสิทธิ์ client ให้อัตโนมัติ

## ผลทดสอบและข้อจำกัด

- macOS 26.3.1 arm64, Node 22.23.2, npm 10.9.8: `npm run test:all` exit 0, **216/216 tests ใน 26 ไฟล์** รวม typecheck/lint และติดตั้ง tarball ใน fixture
- Browser fixture สองแท็บ: สลับ A→B แล้วบันทึกสิทธิ์จากแท็บ A เก่าถูกปฏิเสธ
- ChatGPT/tunnel จริงหลังแพตช์: **MANUAL_NOT_RUN**; Linux และ macOS Intel ยังไม่มีผล full-suite ของรุ่นนี้; Windows ยังไม่รองรับ
- Directory guard ไม่ใช่ OS sandbox การรัน test/install/shell รันโค้ดด้วยสิทธิ์ของผู้ใช้ ไฟล์ที่ shell เปลี่ยนไม่ได้ถูก journal เหมือน file tools
- Handler ที่ค้างอาจทำให้ graceful shutdown ต้องรอ ไม่มีการปิดฐานข้อมูลใต้ handler ด้วยเวลาตัดคงที่

ดู [TEST_REPORT](TEST_REPORT.md), [COMPATIBILITY](COMPATIBILITY.md), [SECURITY](SECURITY.md) และ [MANUAL_ACCEPTANCE](MANUAL_ACCEPTANCE.md) สำหรับรายละเอียดและขั้นตอนตรวจซ้ำ

MIT License — Copyright (c) 2026 JuJu org, uminoe, and poundchan.

## 0.4.0 — source/local desktop extension (not yet published)

Adds five desktop tools (48 total) for macOS 14+: status, permitted windows,
window screenshot with optional local OCR, bounded Accessibility text, and
focus/move/click/drag/scroll/key/type actions. The owner compiles the bundled
Swift helper explicitly and authorizes exact apps with a deadline for the
current workspace/epoch. Desktop is off under trusted/bypass until this separate
permission is granted. Local Config shows the grant and can revoke it.

Snapshots are principal-bound and expire within 30 seconds; native input checks
window identity/geometry/frontmost state. Durable receipts prevent duplicate
or uncertain automatic retries. Screenshots/typed text are not written to audit
or state. This feature may access information outside workspace file guards.
Read [DESKTOP.md](DESKTOP.md) for setup, scope and residual limitations.

Native capture/OCR and denial without Accessibility passed on macOS arm64;
positive OS input/AX remain MANUAL_NOT_RUN. No publication is implied by this
source change; install the local `juju-mcp-0.4.0.tgz` for this feature.

## 0.5.1 — local package, not published in this turn

- Paste a ChatGPT conversation URL/UUID in Local Config to allow it before any
  AI request, or use `juju chat allow`. Select client explicitly if ambiguous.
- Remember consent per client/project/directory identity until reset or optional
  expiry. AI must send `chat`; it is not a verified ChatGPT conversation identity.
- `juju chat reset [URL_OR_UUID]` and `juju reset` cancel related owned jobs and
  invalidate old usage rounds, preserving OAuth and separately approved Cron.
- CLI/STDIO, private web controls, schema-5 migration and fresh package verified.
  `npm run test:all`: 312/312, 37 files. See TEST_REPORT and CONFIRMATION.

## 0.5.2 — local WEB: chat-reference compatibility fix

Accept the reported `https://chatgpt.com/c/WEB:UUID` format and bare `WEB:UUID`
through owner CLI, private Local Config and MCP. Keep WEB uppercase and UUID
lowercase; do not conflate namespaced and plain references. Existing plain-UUID
permissions remain unchanged. Only the explicit WEB namespace is accepted;
other domains, traversal, nested prefixes, query strings and fragments still fail.
No database migration or OAuth re-registration needed. Re-allow the WEB reference
if an earlier version was worked around using a plain UUID.
See CONFIRMATION.md and TEST_REPORT.md. Not published in this turn.

## 0.5.3 — local chat-list folder context

`juju chat list` now includes current `workspace` (name, root, workspaceId) and
`clients[].workspaces` with folder name/path/ID and current marker. HTTP folders
come from saved read ACLs; revoked or malformed entries are excluded. STDIO
lists only its active root. This is local owner metadata, not a filesystem scan,
active-connection detector, remote MCP response or automatic client choice.
No migration, scope or OAuth change. Not published in this turn.
