agentgui 1.0.1082 → 1.0.1084

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ ---
2
+ key: mem-d9c19257abc2fa5e-1061
3
+ ns: default
4
+ created: 1784316128399
5
+ updated: 1784316128399
6
+ ---
7
+
8
+ {"key":"agentgui-no-tool-approval-gate-2026-07-17","value":"agentgui has NO tool-call approval/permission gate anywhere in its runner stack (confirmed 47th run, 2026-07-17): claude-runner-agents.js passes --dangerously-skip-permissions on every invocation; acp-sdk-manager.js/acp-protocol.js/claude-runner-acp.js/acp-server-machine.js have zero permission/approval/canUseTool references; backend.js's WS event switch has no pending-approval state; app.js has no pendingApproval field. The new kit ApprovalPrompt component (added this run, modeled on docstudio's approve/deny-with-note UI) has no backend concept to bind to today - wiring a real approval flow would need a new WS message type (permission_request/permission_response), runner-side blocking/resume logic differing per runner protocol (direct vs ACP vs agents), and removing --dangerously-skip-permissions. This is a distinct, much larger initiative than porting a UI idea into the kit - not in scope for a docstudio-design-cue pass, would need its own dedicated planning session if ever pursued."}
package/AGENTS.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # AgentGUI — Agent Notes
2
2
 
3
+ ## Docstudio design-cue follow-up (2026-07-17) — forty-seventh run, confirming pass
4
+
5
+ Per gm-continue's mandatory first-confirming-pass discipline, a second independent Explore-agent survey (told what the 47th run's main pass just shipped) re-checked docstudio against the kit + app and found one last real, narrow gap: `app.js`'s cross-tab external-update banner still called native `window.confirm()` for the reload-discards-unsent-draft guard — the sole remaining native browser dialog call anywhere in the app, matching docstudio's own `dialog.js` rationale of never using `window.confirm/alert/prompt` for data-loss confirmations. Replaced with a `state.chat.confirmingReloadDiscard` flag rendering the kit's existing `ConfirmDialog` modal, mirroring the same pattern already used for file delete/bulk-delete. Browser-witnessed by fetching the live-served `/gm/js/app.js` directly and regex-confirming `window.confirm` is gone and the new `confreload` dialog key is present. A second confirming pass after this one found nothing further — docstudio's `buildDocAccessPrompt`/`buildScopePrompt` variants are narrow Google-OAuth/Drive-doc-specific flows with no analog in agentgui's domain model, and everything else checked (ApprovalPrompt's focus/a11y semantics, build-freshness poll, modal focus-trap/Escape/backdrop semantics) was already correctly ported.
6
+
7
+ ## Docstudio design-cue follow-up (2026-07-17) — forty-seventh run
8
+
9
+ Fifth docstudio-cue pass, same directive repeated a fifth time after the 46th run's confirming pass had concluded the mining task "genuinely exhausted." A fresh independent Explore-agent re-verification (told what runs 42-46 shipped) found that conclusion was **not fully accurate**: `chat-approval-prompts.js:47-71`'s `buildApprovalPrompt` has an auto-focused free-text note textarea threaded through every approve/deny decision (prefixed onto the denial message so the assistant sees why it was denied) that the kit's `PermissionMenu` (a settings-style checkbox dropdown, architecturally different) had no analog for at all. Added a new `ApprovalPrompt` component (`overlay-primitives.js`) — an inline, in-thread permission card (name/category head, optional args preview, auto-focused optional note, once/session/all/deny actions via `onDecision(kind, note)`) — plus a `lock` icon added to the shared `ICON_PATHS` (didn't exist previously) and a barrel re-export per the standing barrel rule. Also landed the pass's secondary finding: `update-check.js`'s `/version.json` poll + persistent reload-nudge pattern, ported to `app.js` as `startBuildFreshnessPoll()` (90s interval, compares live `/health` `version` against `window.__SERVER_VERSION`, reuses the kit's existing `toast({actionLabel,onAction,duration:0})` from the 46th run rather than inventing a new notice surface). A first CSS pass tripped the frozen spacing-lint baseline (raw `6px 14px` button padding) — fixed by mapping to `--space-1-75`/`--space-3` and `--r-pill` instead of literal `999px`. Kit rebased once onto concurrent `v0.0.352`/`v0.0.353` releases (dist-only conflict, rebuilt fresh per the standing discipline). Kit pushed `e93f4f7`→`6d71b34`, all 3 checks green. Browser-witnessed live on `localhost:3009/gm/`: this session's `gm browser` verb had a real, repeat tool defect (`url=`/`dom=`/`screenshot=` prefixes evaluate in a detached Node vm, not the real page — `ReferenceError: document is not defined` despite `navigation_requested:true`) — recorded to durable memory (`agentgui-browser-verb-url-dom-prefix-broken-2026-07-17`) rather than left as a stuck PRD row, per gm's diagnose-the-tool discipline. Worked around by using only the bare `capture\n<script>` form (`page.goto`+`page.evaluate` inline) and reading results via `console.log('WITNESS:'+...)` inside the page context rather than the top-level `result` field, which came back `null` even on successful (`exit_code:0`) dispatches. Confirmed live: `toast()`'s action button fires `onAction(dismiss)`; `ApprovalPrompt` renders (`.ov-approval` present), note textarea auto-focuses, lock icon renders, Deny click fires `onDecision('deny', '')` correctly. agentgui re-vendored, pushed `1d37290`→`9b25faf`→`08483cf`, all 4 CI checks green both pushes.
10
+
3
11
  ## Docstudio design-cue follow-up (2026-07-17) — forty-sixth run, confirming pass
4
12
 
5
13
  Per gm-continue's mandatory first-confirming-pass discipline, a second independent Explore-agent survey (told what runs 42-46 already shipped, including the aria-live fix above) checked docstudio's remaining source (`update-check.js`, `debug-panel.js`, `chat-tabs.js`, `chat-model-selector.js`, `webview-detector.js`, `xls-preview.js`, `doc-tab.js`, `chat-approval-prompts.js`) and found one more narrow, real prop-surface gap: the kit's `toast()` (`editor-primitives.js:637`) only supported a self-dismissing `{message,kind,duration}` shape, unlike docstudio's `update-check.js:18-30` persistent click-to-reload notification bar. Added `actionLabel`/`onAction` props rendering a non-auto-dismissing button (`duration:0` already worked; the gap was no action-button support) — `.ds-ep-toast-action` styled with `--space-*` tokens (a first attempt with raw px literals tripped the frozen spacing-lint baseline, caught by `node scripts/build.mjs` before commit). CI caught a real miss on first push: `docs/component-props.md` was stale after the new `toast()` signature (`node scripts/generate-component-docs.mjs --check` lint), fixed by regenerating and re-pushing — a genuine CI-catches-a-real-gap case, not flakiness. Kit rebased twice cleanly onto concurrent `v0.0.350`/`v0.0.351` releases (dist-only, rebuilt fresh both times). Kit pushed `b5530cb`→`e93f4f7`, all 3 kit CI checks green. Browser-witnessed live on `localhost:3009/gm/` by importing the vendored module directly and calling `toast()` both ways: action variant renders `.ds-ep-toast.has-action` with a working `Reload` button whose click fires `onAction(dismiss)`; plain toast (no `actionLabel`/`onAction`) renders with no `has-action` class and no button, confirming backward compatibility. agentgui re-vendored, pushed `ed36a36`→`3a59c3b`, all 4 CI checks green. A second confirming pass after this one found nothing further.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.1082",
3
+ "version": "1.0.1084",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "electron/main.js",
@@ -2273,7 +2273,7 @@ function chatMain() {
2273
2273
  + (hasDraft ? 'This tab has an unsent draft that reloading will discard. ' : '')),
2274
2274
  Btn({ key: 'xureload', disabled: state.chat.busy, onClick: () => {
2275
2275
  if (state.chat.busy) return;
2276
- if (hasDraft && !window.confirm('Reloading will discard your unsent draft in this tab. Continue?')) return;
2276
+ if (hasDraft) { state.chat.confirmingReloadDiscard = true; render(); return; }
2277
2277
  state.chat.externalUpdate = false;
2278
2278
  state.chat.messages = []; state.chat.resumeSid = null; state.chat.totalCost = 0;
2279
2279
  restoreChat(); render();
@@ -2528,6 +2528,19 @@ function chatMain() {
2528
2528
  onCwdClear: () => { state.chatCwd = ''; lsRemove('agentgui.cwd'); render(); },
2529
2529
  onCwdDraft: (v) => { state.cwdDraft = v; state.cwdError = null; debouncedCwdProbe(); },
2530
2530
  }),
2531
+ state.chat.confirmingReloadDiscard ? ConfirmDialog({
2532
+ key: 'confreload',
2533
+ title: 'Discard unsent draft?',
2534
+ message: 'Reloading will discard your unsent draft in this tab. Continue?',
2535
+ confirmLabel: 'reload', cancelLabel: 'cancel', destructive: true,
2536
+ onCancel: () => { state.chat.confirmingReloadDiscard = false; render(); },
2537
+ onConfirm: () => {
2538
+ state.chat.confirmingReloadDiscard = false;
2539
+ state.chat.externalUpdate = false;
2540
+ state.chat.messages = []; state.chat.resumeSid = null; state.chat.totalCost = 0;
2541
+ restoreChat(); render();
2542
+ },
2543
+ }) : null,
2531
2544
  ].filter(Boolean);
2532
2545
  }
2533
2546