Commit Graph
29 Commits
Author SHA1 Message Date
adrianbonpin f8acfce792 feat: the approval dialog and its per-answer ledger
The wording lives beside the dialog rather than beside the paths, which is what
keeps files.ts free of UI and lets every refusal path be tested without a
launcher. Vicinae's rememberUserChoice is declared in the API but not implemented
in the server, so the ledger is the only memory and it lasts one answer.

A dialog that cannot be shown is a refusal, not consent.
2026-10-07 16:59:06 +08:00
adrianbonpin 674327ec20 feat: the file path policy and its operations
One module with no Vicinae import, so the whole boundary tests headlessly: the
roots, the credential denylist, resolution that follows symlinks before judging
containment, and the seven operations, each returning a result rather than
throwing, so a refusal and an I/O failure reach the model in the same shape.

The mutating operations take an approval callback rather than importing a dialog,
which is what keeps this file free of UI and lets every refusal path be tested.

52 tests, including a symlink out of a root, a sibling whose name merely starts
like a root, and a temporary home with its own symlinks resolved first, because
mkdtemp on macOS hands back a path under /var.
2026-10-07 16:58:43 +08:00
adrianbonpin c9036389e3 docs: implementation plan for file system access
Ten tasks: the path policy and its operations, the approval dialog and its ledger,
seven tools, three preferences, what the model is told, the hook and setup screen
wiring, the README, and a verification task that mutation checks the policy rather
than trusting the suite.
2026-10-07 16:57:22 +08:00
adrianbonpin 2b09cc84e9 docs: spec file system access for Lam
Seven file tools behind a path policy and an approval step, with the platform
findings that shaped it: extensions are unsandboxed Node, confirmAlert exists,
rememberUserChoice does not, and environment.supportPath is the one directory an
extension is invited to write to.

Records the decisions taken with the user (read, write, edit and destructive
tools; one approval per path per answer; home minus a credential denylist; extra
roots in preferences) and the assumptions that follow from them, including the
two that go beyond the questions asked: delete and move asking every time, and
file access being off until switched on.
2026-10-07 16:51:41 +08:00
adrianbonpin 34c4383428 fix: order a citation run ascending, and name each page once (#24) 2026-10-07 08:29:33 +00:00
adrianbonpin ade6145425 fix: separate raised citation markers with a space, not a comma (#23) 2026-10-07 08:24:07 +00:00
adrianbonpin 0705d5ec2f fix: raise citation markers and stop adjacent ones merging (#22) 2026-10-07 08:19:58 +00:00
adrianbonpin fcc6d26c9d feat: source citations with footnotes in the transcript (#21) 2026-10-07 08:12:48 +00:00
adrianbonpin 72a63e69e6 fix: bracket a fraction only where the slash would split it (#20) 2026-10-07 07:36:38 +00:00
adrianbonpin a804afd56a feat: render LaTeX, custom HTML and diagrams in the transcript (#19) 2026-10-07 07:26:40 +00:00
adrianbonpin 550a2bbefe fix: name each tool once, and stream the reasoning live (#18) 2026-10-06 14:18:50 +00:00
adrianbonpin ff99778e5d fix: print the running tool once, not twice (#17) 2026-10-05 09:49:39 +00:00
adrianbonpin 26e05dea5b feat: Ollama models command, with load/pull/delete and unload (#16) 2026-10-05 09:43:00 +00:00
adrianbonpin 05fd9ff13b feat: auto-delete old conversations, and stop a tool call that repeats (#15) 2026-10-05 09:05:15 +00:00
adrianbonpin 576c5946f7 feat: snip a region into chat, and make links clickable (#14) 2026-10-05 08:38:50 +00:00
adrianbonpin f5d1ced4d6 chore: sweep em dashes from our own source and README (#13) 2026-10-03 22:03:00 +00:00
adrianbonpin 95edbcd20b fix: fence lone commands and give the prompt some warmth (#12) 2026-10-03 22:00:38 +00:00
adrianbonpin 75fc914eca feat: cmd+shift+delete deletes the highlighted conversation (#11) 2026-10-03 21:45:09 +00:00
adrianbonpin ac2da73669 feat: label code fences so Vicinae can colour them (#10) 2026-10-03 21:37:11 +00:00
adrianbonpin c49ffeb274 feat: strip speaker labels from the transcript, add a plain-prose prompt (#9) 2026-10-03 21:28:38 +00:00
adrianbonpin ee96f1ee61 feat: display toggles, smart session resume, fix stale transcript pane (#8) 2026-10-03 21:22:04 +00:00
adrianbonpin ffe2c6b7ed feat: newest message first, Raycast-style conversation sidebar (#7) 2026-10-03 21:15:44 +00:00
adrianbonpin 9b35fcef11 feat: conversations on the left, the transcript on the right (#6) 2026-10-03 21:09:36 +00:00
adrianbonpin d448a4377b feat: mark each speaker with a role icon in the transcript (#5) 2026-10-03 21:03:26 +00:00
adrianbonpin 31eb688455 feat: message-per-row transcript, session resume, drop the composer (#4) 2026-10-03 20:59:01 +00:00
adrianbonpin af0c75a65d style: strip the multi-line composer down to a bare editor (#3) 2026-10-03 20:45:29 +00:00
adrianbonpin 7afafdaf32 test: cover the Ollama web tools, mark trimmed snippets, new icon (#2) 2026-10-03 20:36:38 +00:00
adrianbonpin 8b507e7953 feat: initial Lam Agent extension (#1) 2026-10-03 20:32:40 +00:00
adrianbonpin 1d39aabb50 Initial commit 2026-10-03 20:11:02 +00:00