agentgui 1.0.1066 → 1.0.1068

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-1a148cf9c3126df5-3963
3
+ ns: default
4
+ created: 1784278257475
5
+ updated: 1784278257475
6
+ ---
7
+
8
+ {"key":"agentgui-42nd-run-gui-practicality-sweep","value":"agentgui 42nd run (2026-07-17): user-driven cwd-practicality complaint plus a mid-run docstudio design-cue directive. cwd practicality: added an inline browse popover (reuses existing confined /api/list into an independent state.cwdBrowse), always-visible allowed-roots chips (prefetched on editor open), a small localStorage recent-cwd MRU (capped 6), relative-subpath resolution against the current cwd, and fixed a real bug where Escape did nothing to close the cwd editor (global keydown typing-guard blurred+returned before the Escape ladder - added a targeted exception + nested browse-then-editor ladder). History's directory fact gained a one-click 'use as chat cwd' action (kit SessionMeta gained generic onAction/actionLabel). REAL INFRASTRUCTURE BUG found+fixed: the cwd browse popover inherited a previously-undiscovered production bug where this env's nginx proxy_pass URI normalization silently collapses an encoded %2F path-segment slash back to a literal / before forwarding, 403ing any /api/list/<abs-path>-shaped request - this ALSO meant the pre-existing Files tab drill-down navigation had been broken in production the whole time. Fixed by switching /api/list,/api/stat,/api/file,/api/download,/api/image to ?dir=/?path= query params (immune to that normalization) via a new resolveConfinedPath() helper; validate-mutations.mjs confirmed byte-identical confinement semantics. gui-completion workflow (wf_bcf46a89-739, 29 agents, 17 confirmed): rename/mkdir 409 suggested-alternate-name prefill; bulk-move roots picker (kit PromptDialog gained roots/onPickRoot); DELETE IS NOW SOFT - moves into a confined per-root .agentgui-trash/ (10min retention, purge-on-delete + 200-entry eviction cap) with a real undo toast via new POST /api/restore, not just confirm-before; search-hit event anchors now carried in the URL hash (ets=); Settings gained a scroll-position scrollspy; truncation banners state actual turn count+cost; cross-tab reload banner warns about+confirms discarding an unsent draft; History gained persistent next/prev error nav; session header shows agent/model (sess.model, not the nonexistent sess.agent - caught a wrong-field bug mid-implementation); backend.js's onSessionExpired() was exported but NEVER subscribed - a mid-session 401 failed every fetch completely silently, now shows a persistent reload banner; offline banner gained a manual retry-now button; search-term highlighting now extends into expanded event bodies; History search results gained a JSON export button; Settings gained navigator.storage.estimate(). REAL KIT CRASH found+fixed mid-implementation: passing a VElement/extra prop through ConversationList's caption prop (which is separately used as aria-label:caption||'Conversations', requiring a plain string) caused an intermittent webjsx 'reading key' crash - confirmed via 3 before/after browser runs, re-implemented as a fully separate sibling element outside ConversationList entirely, re-verified crash-free across 3 more runs. Standing lesson: when extending what a caller passes through an existing kit prop, grep every OTHER use site of that prop inside the component first - a prop's contract can be narrower than it looks from the one call site you're touching. docstudio design-cue pass: a subagent found docstudio (vanilla-ESM Material/Gemini-styled) architecturally LESS mature than the kit in every systemic dimension; only 1 of 6 candidate cues was a real gap (session-group eyebrow labels used the generic --tr-caps token instead of the canonical --tr-label token .t-label/.t-micro already establish) - fixed. Two upstream-diverged kit rebases handled cleanly (one single-conflict, one 35-commits-diverged) by rebuilding dist/ fresh from merged sources, never hand-merging generated code. Kit pushed 7c27e9c->fb11176->acd5fd2, agentgui pushed 71d7352->56b865f->2fecd75->a1a394a->5496ec8, all CI green throughout both repos."}
@@ -0,0 +1,8 @@
1
+ ---
2
+ key: mem-8af7980a92e09959-891
3
+ ns: default
4
+ created: 1784278284245
5
+ updated: 1784278284245
6
+ ---
7
+
8
+ {"key":"agentgui-37th-run-punchlist-cleanup-detail","value":"agentgui 37th-run confirming pass (2026-07-12): removed the 10 standing PUNCHLIST-*.md files (COHESION/COMPLETION/DENSITY/DESIGN/DESIGN-14/DESIGN-15/LOGIC/PARITY/POLISH/UX, ~440KB) plus AUDIT-PUNCHLIST.md (found in a follow-up confirming pass) - all their findings had already landed and merged in earlier commits, and their content duplicated what AGENTS.md already recorded in denser, current form, violating the project's own Documentation Policy (history belongs in git log/CHANGELOG, never a standing doc). Four .claude/workflows/*.js scripts (gui-logic-predictability.js, gui-completion.js, gui-claude-code-parity.js, gui-screen-realestate.js) referenced the punch-list filenames by name in agent prompts as the 'don't re-report already-fixed findings' grounding source - all four were updated to point at AGENTS.md alone."}
package/.gm/prd.yml CHANGED
@@ -3076,3 +3076,45 @@
3076
3076
  - gm-plugkit/playwriter browser verb dom=/capture eval context defect - requires an upstream tool fix outside agentgui/design
3077
3077
  status: completed
3078
3078
  witness: 'External tool defect, not resolvable from this repo/session: the gm-plugkit/playwriter browser verb''s dom= and capture prefixes evaluate in a Node vm context with no page/document binding (ReferenceError on every attempt this session), unlike the screenshot= and url=<target> paths which do reach the real page. This is a defect in the upstream gm-plugkit/playwriter tool package itself, outside agentgui and design repo scope. Recorded per the false-completion rule as blockedBy:external rather than marked done - screenshots remain the working witness fallback and were used for all browser verification in this sweep.'
3079
+ - id: docstudio-cue-typography-depth-review
3080
+ subject: 'Re-examine typography maturity: font pairing sophistication, weight/size hierarchy richness, line-height rhythm across real rendered content (not just token existence)'
3081
+ status: pending
3082
+ - id: docstudio-cue-color-depth-review
3083
+ subject: 'Re-examine color maturity: does the kit''s palette read as considered/branded or generic-neutral; check docstudio''s actual color usage patterns for anything genuinely more sophisticated'
3084
+ status: pending
3085
+ - id: docstudio-cue-motion-depth-review
3086
+ subject: Re-examine motion/microinteraction maturity beyond the single streaming-caret check - hover states, transition timing, loading choreography, page-transition polish
3087
+ status: pending
3088
+ - id: docstudio-cue-empty-loading-error-states
3089
+ subject: Deep-dive every empty/loading/error state across chat/history/files/settings/live - compare polish level against docstudio's equivalents concretely
3090
+ status: pending
3091
+ - id: docstudio-cue-information-density-review
3092
+ subject: Compare real information density and layout sophistication - does content breathe correctly, is whitespace purposeful vs accidental
3093
+ status: pending
3094
+ - id: docstudio-cue-visual-identity-review
3095
+ subject: Does the kit read as a cohesive, intentional brand/product, or a generic component-library default look - honest assessment
3096
+ status: pending
3097
+ - id: docstudio-cue-forms-dialogs-review
3098
+ subject: 'Compare form/dialog polish: validation feedback, multi-step flows, modal treatment, input affordances'
3099
+ status: pending
3100
+ - id: docstudio-cue-navigation-review
3101
+ subject: 'Compare navigation/wayfinding sophistication: sidebar treatment, breadcrumbs, tab/section transitions'
3102
+ status: pending
3103
+ - id: docstudio-cue-data-display-review
3104
+ subject: Compare data-table/list/card display patterns for real polish differences
3105
+ status: pending
3106
+ - id: docstudio-implement-confirmed-gaps
3107
+ subject: Implement every genuinely confirmed maturity gap found this pass into the design kit (../design), never as an agentgui override
3108
+ status: pending
3109
+ - id: docstudio-verify-buildesk-live-2
3110
+ subject: Live-verify every implemented change on https://buildesk.acc.l-inc.co.za/gm via browser witness
3111
+ status: pending
3112
+ - id: docstudio-kit-build-vendor-2
3113
+ subject: Build+test the kit, re-vendor into agentgui
3114
+ status: pending
3115
+ - id: docstudio-push-ci-green-2
3116
+ subject: Push kit and agentgui changes, verify CI green
3117
+ status: pending
3118
+ - id: docstudio-agents-md-record-2
3119
+ subject: Record this run's findings in AGENTS.md
3120
+ status: pending
package/AGENTS.md CHANGED
@@ -22,7 +22,7 @@ User-driven ask ("setting the cwd is not nearly practical enough... go over ever
22
22
 
23
23
  ## Punch-list document cleanup (2026-07-12) — 37th-run confirming pass
24
24
 
25
- The 10 standing `PUNCHLIST-*.md` files (COHESION/COMPLETION/DENSITY/DESIGN/DESIGN-14/DESIGN-15/LOGIC/PARITY/POLISH/UX, ~440KB) plus `AUDIT-PUNCHLIST.md` (found in a follow-up confirming pass) are removed — all their findings landed and merged in earlier commits, and their content duplicated what AGENTS.md already records in denser, current form, violating the project's own Documentation Policy (history belongs in git log/CHANGELOG, never a standing doc). Four `.claude/workflows/*.js` scripts (`gui-logic-predictability.js`, `gui-completion.js`, `gui-claude-code-parity.js`, `gui-screen-realestate.js`) referenced the punch-list filenames by name in agent prompts as the "don't re-report already-fixed findings" grounding source all four now point at `AGENTS.md` alone. **Standing rule for future sweeps: no new `PUNCHLIST-*.md`/`AUDIT-PUNCHLIST.md` (or similarly-named) file should be checked into the repo as a durable artifact — a workflow's punch-list is a transient working document for that run's synthesis step; the run's outcome belongs in AGENTS.md (or drains to rs-learn), never a standing file.**
25
+ Removed 11 standing `PUNCHLIST-*.md`/`AUDIT-PUNCHLIST.md` files (all findings already merged, content duplicated AGENTS.md). Full detail in rs-learn (recall "agentgui 37th run punchlist cleanup detail"). **Standing rule for future sweeps: no new `PUNCHLIST-*.md`/`AUDIT-PUNCHLIST.md` (or similarly-named) file should be checked into the repo as a durable artifact — a workflow's punch-list is a transient working document for that run's synthesis step; the run's outcome belongs in AGENTS.md (or drains to rs-learn), never a standing file.**
26
26
 
27
27
  ## GUI logic+predictability sweep (2026-07-12) — thirty-seventh run
28
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.1066",
3
+ "version": "1.0.1068",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "electron/main.js",
@@ -5278,6 +5278,19 @@
5278
5278
  max-width: 100%;
5279
5279
  }
5280
5280
  .ds-247420 .ds-table-wrap > table { min-width: 100%; }
5281
+ /* Sortable column headers (Table's opt-in sortable prop) — a docstudio-cue
5282
+ addition: color stays neutral at rest (this is a structural control, not a
5283
+ brand moment) and only the active sort direction gets the accent tint,
5284
+ matching the "color reserved for meaning, not decoration" pattern seen in
5285
+ docstudio's admin table. */
5286
+ .ds-247420 .ds-table-sort-btn {
5287
+ display: inline-flex; align-items: center; gap: 4px;
5288
+ background: none; border: none; padding: 0; margin: 0;
5289
+ font: inherit; font-weight: inherit; color: inherit; cursor: pointer;
5290
+ }
5291
+ .ds-247420 .ds-table-sort-btn:hover { color: var(--fg); }
5292
+ .ds-247420 .ds-table-sort-btn:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: 2px; }
5293
+ .ds-247420 .ds-table-sort-btn.is-active { color: var(--accent-ink, var(--accent)); }
5281
5294
 
5282
5295
 
5283
5296
  /* == appended: settings kit cleanup == */
@@ -7208,6 +7221,35 @@
7208
7221
  }
7209
7222
  .ds-247420 .agentchat-title { font-size: 1em; margin: 0; }
7210
7223
  .ds-247420 .agentchat-sub { font-size: var(--fs-tiny); color: var(--fg-3); }
7224
+ /* Optional inline content viewer beside the thread (sidePanel prop) - a
7225
+ docstudio-cue addition (its chat view keeps a document/PDF preview open
7226
+ next to the conversation rather than in a separate tab). SplitPanel (an
7227
+ existing kit primitive) owns the resizable layout; these rules only shape
7228
+ the two panes' internal structure. */
7229
+ .ds-247420 .agentchat.has-side-panel { gap: 0; }
7230
+ .ds-247420 .agentchat.has-side-panel > .ds-ep-split { flex: 1; min-height: 0; }
7231
+ .ds-247420 .agentchat-main-col { display: flex; flex-direction: column; min-height: 0; height: 100%; gap: var(--space-2, 8px); }
7232
+ .ds-247420 .agentchat-side-panel { display: flex; flex-direction: column; height: 100%; min-height: 0; border-left: var(--bw-hair) solid var(--bg-3); }
7233
+ .ds-247420 .agentchat-side-panel-head {
7234
+ display: flex; align-items: center; justify-content: space-between;
7235
+ padding: var(--space-2, 8px) var(--space-3, 12px); border-bottom: var(--bw-hair) solid var(--bg-3);
7236
+ flex: 0 0 auto;
7237
+ }
7238
+ .ds-247420 .agentchat-side-panel-title { font-size: var(--fs-tiny); font-weight: 600; color: var(--fg-2); text-transform: uppercase; letter-spacing: var(--tr-label); }
7239
+ .ds-247420 .agentchat-side-panel-close {
7240
+ display: inline-flex; align-items: center; justify-content: center;
7241
+ background: none; border: none; color: var(--fg-3); cursor: pointer;
7242
+ padding: 4px; border-radius: var(--r-1);
7243
+ }
7244
+ .ds-247420 .agentchat-side-panel-close:hover { background: var(--bg-2); color: var(--fg); }
7245
+ .ds-247420 .agentchat-side-panel-close:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
7246
+ .ds-247420 .agentchat-side-panel-body { flex: 1; min-height: 0; overflow: auto; }
7247
+ @media (max-width: 900px) {
7248
+ /* A resizable side-by-side split is impractical below tablet width - stack
7249
+ the preview under the thread instead of horizontally squeezing both. */
7250
+ .ds-247420 .agentchat.has-side-panel > .ds-ep-split.horiz { flex-direction: column; }
7251
+ .ds-247420 .agentchat-side-panel { border-left: none; border-top: var(--bw-hair) solid var(--bg-3); max-height: 45vh; }
7252
+ }
7211
7253
  /* Thread wrapper hosts the absolutely-positioned jump-to-latest button. */
7212
7254
  .ds-247420 .agentchat-thread-wrap { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; }
7213
7255
  .ds-247420 .agentchat-thread {