agentgui 1.0.1022 → 1.0.1024
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.
- package/.gm/memories/.flat-export-done +1 -1
- package/.gm/memories/mem-0131ff4869d86085-370.md +10 -0
- package/.gm/memories/mem-04049d11cb8c1661-2135.md +8 -0
- package/.gm/memories/mem-08a4a9e050a4deff-3048.md +8 -0
- package/.gm/memories/mem-09597ee0df9c9224-965.md +8 -0
- package/.gm/memories/mem-0993d156f571b619-1059.md +8 -0
- package/.gm/memories/mem-0d1408fa048b9923-1159.md +8 -0
- package/.gm/memories/mem-1af3e13f7618e668-2146.md +8 -0
- package/.gm/memories/mem-21f551be092fd77d-2340.md +8 -0
- package/.gm/memories/mem-39a7cc2f887a90b1-1079.md +8 -0
- package/.gm/memories/mem-4420e6d00e5c8632-2318.md +8 -0
- package/.gm/memories/mem-4bafafa47a0e4b6c-3237.md +8 -0
- package/.gm/memories/mem-4c06c45b4d31bc60-1202.md +8 -0
- package/.gm/memories/mem-4ecd3b713e384170-122.md +10 -0
- package/.gm/memories/mem-51d8992a3c6f6c9c-1073.md +8 -0
- package/.gm/memories/mem-539eee7e8c6c10ee-2557.md +8 -0
- package/.gm/memories/mem-559b8b2abc4b1091-1665.md +8 -0
- package/.gm/memories/mem-6224f8d185797f2b-1047.md +8 -0
- package/.gm/memories/mem-66b0947b946f3437-1155.md +8 -0
- package/.gm/memories/mem-6bdf783a1f6be7c2-1062.md +8 -0
- package/.gm/memories/mem-70d96acb736af2d7-685.md +8 -0
- package/.gm/memories/mem-713614f12d7029da-1577.md +8 -0
- package/.gm/memories/mem-7535f34f430fc196-1340.md +8 -0
- package/.gm/memories/mem-861a588d2773681a-1311.md +8 -0
- package/.gm/memories/mem-9329105b05b9c0f6-324.md +10 -0
- package/.gm/memories/mem-94f30cec3c283f97-782.md +10 -0
- package/.gm/memories/mem-956d4813319f65a3-1710.md +8 -0
- package/.gm/memories/mem-a52933cd6495e6f5-2624.md +8 -0
- package/.gm/memories/mem-a86426ac44138c96-1606.md +8 -0
- package/.gm/memories/mem-a95b1d49d71133ce-1007.md +8 -0
- package/.gm/memories/mem-aaeae38d8eb01809-1076.md +8 -0
- package/.gm/memories/mem-b06b8c85b81663e6-1250.md +8 -0
- package/.gm/memories/mem-bdf466854032cac9-1509.md +8 -0
- package/.gm/memories/mem-cda639547932c796-713.md +8 -0
- package/.gm/memories/mem-cf8472c84d9e04c4-1883.md +8 -0
- package/.gm/memories/mem-d060480435f92eec-1146.md +8 -0
- package/.gm/memories/mem-d347c921b79e6d44-1099.md +8 -0
- package/.gm/memories/mem-d3c8ea6c861bfbb8-1457.md +8 -0
- package/.gm/memories/mem-d5e928c552cd87f9-214.md +10 -0
- package/.gm/memories/mem-d63bc3b8a0269844-406.md +10 -0
- package/.gm/memories/mem-da1c91acf63d81d3-863.md +8 -0
- package/.gm/memories/mem-dceeae20bc56d407-711.md +8 -0
- package/.gm/memories/mem-df74674eec7745ac-178.md +10 -0
- package/.gm/memories/mem-e1d5431ae2542872-961.md +8 -0
- package/.gm/memories/mem-ebbe6c0694c526f0-1392.md +8 -0
- package/.gm/memories/mem-ebf85becc23410b0-1633.md +8 -0
- package/.gm/memories/mem-ee8858162518f144-1252.md +8 -0
- package/.gm/memories/mem-f3f317c083d979ee-1210.md +8 -0
- package/.gm/memories/mem-f714a86465fba158-2041.md +8 -0
- package/.gm/memories/mem-f786bc1626d92845-204.md +10 -0
- package/.gm/memories/mem-ff8669e527e5c427-2788.md +8 -0
- package/.gm/prd.yml +96 -0
- package/AGENTS.md +4 -0
- package/package.json +1 -1
- package/site/app/index.html +4 -0
- package/site/app/js/app.js +56 -28
- package/site/app/vendor/anentrypoint-design/247420.css +1286 -213
- package/site/app/vendor/anentrypoint-design/247420.js +32 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
{"digest":"fb6606ab31d8a99d:n=50","total":50}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-0131ff4869d86085-370
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781775262609
|
|
5
|
+
updated: 1781775262609
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Resolved mutable: index-style-full-extent
|
|
9
|
+
|
|
10
|
+
/config/workspace/agentgui/site/app/index.html:26-265 is the full inline <style> block (--agentgui-* vars, .pill/.cwd-bar/.resume-banner/.history-empty/.health-chip/.settings-grid/.boot-splash/.chat-controls/.ds-event-list overrides+event-flash keyframe/responsive+print). app.js grep style: = 7 inline margin-utility props.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-04049d11cb8c1661-2135
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781943736813
|
|
5
|
+
updated: 1781943736813
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui screen-real-estate layer (2026-06-12, fluid columns + drag-resize). Workflow .claude/workflows/gui-screen-realestate.js (6 density lenses space-efficiency/viewport-utilization/information-density/adaptive-layout/application-chrome/finish-pending). 50 agents -> 17 confirmed (PUNCHLIST-DENSITY.md). Kit pushed anentrypoint-design 97dc646. Verdict: maximize screen real-estate, SDK must read as a desktop app. Shell reclaims viewport: fixed --ws-rail-w 232/--ws-sessions-w 296/--ws-pane-w 320 (~848px chrome) became fluid clamps clamp(200px,16vw,260px) etc. Kit shell.js renders keyboard+pointer .ws-resizer separators (role=separator, ArrowLeft/Right 16px, pointer-drag) between each track writing clamped inline --ws-<col>-w persisted localStorage ds.ws.w.<col>, seeded on mount via ref seedWsWidths (no app wiring). Sessions desktop collapse toggle (.ws-sessions-toggle in crumb; .ws-desktop-toggle CSS = inverse of mobile drawer-toggle; toggleWs extended 'sessions'->ws-sessions-collapsed). .btn* moved off --r-pill to --r-1 (8/14 pad, 32 min-h, 44 coarse). .app-status thin 26px ellipsized strip (--app-status-h 26px). .chat-msg-flat centers at --measure (margin-inline auto) + density-scaled via --density token + 84ch ultrawide tier. .ds-dash-grid densified minmax 240/220 wide. CONCURRENT-WRITER RULE (load-bearing): while this run was in flight, concurrent writers shipped the ENTIRE Files multi-select+density-thumbnail+move on BOTH design/main and agentgui/main, so this run's parallel multi-select/move/F3 work was DROPPED and theirs adopted; only re-vendored kit dist + workflow + docs landed. Rule: when origin advances mid-run with the same feature, drop yours and adopt theirs, then re-apply only genuinely-distinct work onto their files; the agentgui /api/move-confined endpoint built this run was redundant with their /api/move and discarded. Kit ships 4 build lints (tokens/glyphs/null-children/classes) - all must pass. Witness localhost:3009/gm/ caveat: vendored bundle served fresh only after SERVER restart (pre-warms statics in memory) AND fresh browser context (persistent witness caches the ES module).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-08a4a9e050a4deff-3048
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781796096862
|
|
5
|
+
updated: 1781796096862
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 16th run (2026-06-18): design-maturity sweep + dead-code + secret-hardening, tracked by ONE Workflow-tool run gui-design-16 (wf_6479308b-24f, 12 lenses chat-thread/composer-input/files-browser/sessions-dashboard/shell-chrome/tokens-theme/a11y-motion/history-settings/marketing-site/glyph-residue/dead-code/server-security): 54 agents -> hunt -> adversarial verify -> 40 confirmed, ~2.7M tokens. Applied via a clean per-file subagent fan-out (one agent per physical file = zero edit conflicts). KIT fixes (/config/workspace/design): chat.js ToolCallNode gates args section on hasArgs (no more 'args {}' on result-only cards) + textarea binds disabled; agent-chat.js cwd aria-busy; content.js EventList forwards detail/actions/highlight/meta to Row (expanded history events were dropping toolInput detail+copy+highlight) + TextField full invalid/error state (.ds-field-error role=alert); interaction-primitives.js ShortcutList splits combos into discrete .ds-kbd caps (.ds-kbd-caps/.ds-kbd-sep + new app-shell.css rules); sessions.js rail filter migrated bespoke .ds-session-search -> shared SearchInput/.ds-search-input (one filter control); shell.js WsResizer aria-valuetext; voice.js x-glyph->Icon('x'), community.js ellipsis-glyph->'more'. chat.css cwd is-checking+aria-busy+r-1 radius, breakdown idle->--stale double-inset (was colliding amber w/ connecting disc), breakdown running shape-ring, ds-dash-clear hover/focus, chat-tool-copy focus-visible, errors-toggle AA. app-shell.css composer+ws reduced-motion guards, .ds-file-row.is-locked/.is-restricted+.ds-file-perm-tag chip, ws-drawer-toggle 44px, density-btn/filter-pill AA (color:var(--fg)). editor-primitives.css #000 dock shadow->var(--shadow-3) + #fff checkbox fallback dropped. app-surfaces.css @media print re-asserts paper signal tokens. community.css :focus-visible for ThreadPanel/Forum/Page+forum-search. marketing.css NEW .site-footer family (theme.mjs footers off the .app-status strip that suppressed content <=1100px)+site-cli baseline/card/tokens+100dvh embed. SERVER lib/http-handler.js: SECRET_RE now also on /api/upload-file+/api/mkdir+/api/rename (403 secret/dotfile target, was overwrite-secret hole) + /api/list filters secret dirents + /api/download RFC-5987 Content-Disposition (CJK/emoji name no longer throws ERR_INVALID_CHAR). DEAD-CODE: agentgui site/app/vendor/cdn/ (36 files, markdown stack fetches jsDelivr at runtime), scripts/harvest-fixtures.mjs, the 3 copy-vendor.js lines in .github/workflows/build-platforms.yml (script deleted 15th run, CI was broken); kit scripts/bundle-markdown.mjs. WITNESSED localhost:3009/gm/?token via gm browser verb: dark rgb(19,19,24), 3 resizers, hScroll 0, ds-search-input=1/ds-session-search=0, perm-tag/site-footer/kbd-caps rules resolve, 0 console errors. validate-mutations 26/26 PASS, test.js 10/0, kit 4 lints pass. RECURRING PATTERN: server start needs setsid bash -c 'exec bun server.js' with NO pkill afterward (pkill kills the fresh one); ss has no perms here, use curl /health (401 under PASSWORD = up).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-09597ee0df9c9224-965
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781197658408
|
|
5
|
+
updated: 1781197658408
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui env/witness caveats (2026-06-11, linux container): server runs PORT=3009 (3000 owned by another app); plugkit spool out/ keeps STALE responses from prior sessions - a Read racing the watcher write returns old bytes, re-read if content does not match the probe; plugkit browser sessions expire between dispatches (fresh session needs full goto with waitUntil commit); first git_status after heavy churn can report stat-cache false positives (an empty git_diff refreshes the index). Theme tokens: --flame/--amber/--code-* are LIGHT values at :root (#C53E00/#8A6512, AA on paper) with dark brights restored in BOTH dark blocks + the paper-island block; tool errors are routine in agent sessions (1-2% of events) so error UI derives from DENSITY (sessionErrorDense: errors>=3 AND >15%) or recency, never has-any-error. Destructive ACTION = warn red; flame = error STATUS only. /api/move shipped (dual realpath confinement); validate-mutations.mjs is 26 checks.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-0993d156f571b619-1059
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782996727275
|
|
5
|
+
updated: 1782996727275
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 3rd run (2026-06-05): GUI-predictability sweep closure. Fan-out reviewers (chat/history/settings/shell + perf/security/glyph/override) -> adversarial verify -> 19 PRD rows fixed+pushed. Headline theme: override-elimination - index.html's !important overrides converted to kit defaults (Topbar active-tab tinted+underline, PageHeader compact prop, Row cursor:pointer for role=button, kit Chat dropped decorative head dot). Also: kit ToolCallNode (no output) placeholder, kit safeUrl() rejects javascript:/data:/file: in inline renderer (bypasses DOMPurify), streaming chat text uses .chat-md container to avoid settle reflow. App fixes: distinct backend-status keys, per-sid running-dot key, stale-selectedSid clear, per-session live counter, toolLabel scalar fallback. gui-audit.js workflow gained overrides surface + KEPT-SET glyph guard (middot/ellipsis/em-dash are kept product typography, never flagged). Kit dist git add -f / rebase-rebuild caveat noted. index.html loads kit from LOCAL vendored copy (superseded/reconfirmed by many later runs).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-0d1408fa048b9923-1159
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782996219086
|
|
5
|
+
updated: 1782996219086
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 11th run (2026-06-11): Files command surface + PASSWORD-boot fix. CRITICAL: PASSWORD-gated deploys couldn't boot the SPA - /gm/?token= served index.html but static subresources carried no token -> 401 -> blank page forever. Fixed via HttpOnly SameSite=Lax agentgui_token cookie set on any successful auth; WS keeps ?token=. Files became a command surface: kit FileGrid multi-select (marked Set, tri-state header checkbox, EACCES rows unmarkable, Ctrl/Cmd+A) + density modes (list/compact/thumb) + BulkBar export; app wired bulk-delete via ConfirmDialog + Promise.allSettled (failures stay selected). thumbUrl must use downloadUrl (fsAllowRoots) not imageUrl (narrower allowlist, 403s repo files). Shipped-jank fixes: .ds-file-open dead CSS from an earlier run, filesMain dropped permissions field, Crumb narrow-collapse keyed on wrong container class, webjsx null-attribute-toggle bug, elevation unification (panel=bg-2+hairline+r-2, no shadow). Env: validate-mutations.mjs made portable; plugkit chromium needs --no-sandbox; page.goto waits on hung CDN subresources use waitUntil:commit; witness body is shell-interpolated so avoid $(...)/backticks.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-1af3e13f7618e668-2146
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781952326763
|
|
5
|
+
updated: 1781952326763
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 20th run iter5 (2026-06-20): ROOT FIX of the cli-wrapper id-mismatch bug class (pushed 80d4b7c). lib/agent-discovery.js discoverAgents() used to REPLACE each found ACP agent (opencode, protocol acp, has path) with a CLI_WRAPPERS entry (id cli-opencode, protocol cli-wrapper, acpId opencode). This cli-* id scheme existed ONLY in discoveredAgents - the registry (claude-runner-agents.js), the WS client picker, and acp-sdk-manager ACP_TOOLS all use plain ids (opencode/gemini/kilo/codex). So every code path that cross-referenced discoveredAgents by the client/registry id broke: (1) getModelsForAgent returned [] for all ACP agents [iter3 4454082]; (2) external-ACP sub-agent discovery dead [iter4 c7de4f5]; (3) agent-descriptors.js:22 'agent.id===opencode' never matched cli-opencode -> opencode/gemini got the generic description + lost the model input spec; (4) process-message.js carried a dead wrapper-resolution branch. The cli-wrapper getModelsForAgent branch did EXACTLY what the plain acp branch does, so the wrapper was pure indirection+bugs. FIX: removed CLI_WRAPPERS const + the wrapper loop/filter in discoverAgents (return plain found agents), the cli-wrapper branch in server-utils getModelsForAgent, the dead wrapper-resolution + now-unused discoveredAgents param in process-message.js; retargeted the iter3 regression test to a protocol:'acp' discoveredAgent. BINARIES already had opencode/gemini/kilo/codex protocol:'acp'+npxPackage so removal is behavior-preserving (improving for descriptors). No client/persisted cli-* ids ever existed (picker always used registry ids). WITNESSED: startup 'Agent IDs: claude-code, opencode, gemini, kilo, codex'; agents.models probe -> [ACP-SDK] kilo started; getAgentDescriptor('opencode') real description + hasModelSpec:true; tests 47/47. NOTE: agent-descriptors module is production-dead (getAgentDescriptor/getAllDescriptors only called by test.js) - candidate for removal IF descriptor-serving is confirmed unwanted (ambiguous intent - ACP capability advertisement). discoveredAgents itself is now near-redundant with registry; full dual-registry consolidation still possible.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-21f551be092fd77d-2340
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781870430413
|
|
5
|
+
updated: 1781870430413
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 19th run (2026-06-19): maximum-effort quality sweep. Workflow wf_8183560b-e3d (132 agents, 12 lenses, 93 confirmed). APPLIED: resume-transcript-load (loadResumeTranscript() on resumeSid, historical:true messages, loading spinner); acp-force-restart (restart Btn on unhealthy ACP agents, wsCall acp.restart -> ws-handlers-util.js -> acp-sdk-manager.restart()); chat thinking settled state; retry on non-last message; streaming-active badge on chat rail tab; AT: followup-chips aria-live guard, cwd focus restore, shortcuts overlay role=dialog; composer disabled visual state (.is-disabled opacity .55); files-modals focus trap re-query on every Tab, stable modal aria-labelledby (random suffix not seq); sessions.js ConversationList role=listbox + aria-selected; a11y-07 fixed. History: tool_use/tool_result rail=purple; load-older announce(); session cost in meta strip. perf: sortedAgents memoized in state._sortedAgentsCache, files filter 150ms debounced, _seen Set capped 5000->trim 2500, chatFollowups memoized _followupsCache, sessionGroups memoized _sessionGroupsCache, upload DOM <input> cleanup, pathBasename util (4 dedup sites), humanizeMs->fmtDuration. Dead code: historySide() removed (~100 lines), getAvailableAgents export removed. Constants: ARM_RESET_MS=4000. refreshHistory _historyFetching guard. backend.js: SSRF guard localhost+127.0.0.1 allowed, ws-drop message 'Connection lost - please reconnect', stream 500 error sanitized (<300 chars non-JSON), auth-token 401 onSessionExpired hook. http-handler.js: IPv4-mapped IPv6 normalization for rate-limit, image route streaming+20MB cap (was sync readFileSync), IS_WINDOWS module-level. Security: files-plugin confineToRoots(browse+mkdir), acp-plugin shell-injection fix, plugin-routes CSRF fix (server-startup2.js), workflow-plugin unconfined file read fix, asset-server JS injection fix (PASSWD-JS-INJECTION). Code: getAvailableAgents export removed from claude-runner-run.js. Kit rebuilt (design): thinking settled text, retry non-last-msg, aria-modal on all dialogs (already there), combobox role on CommandPalette (already there), tab ArrowLeft/Right (already there), files-modals focus trap, sessions listbox, chat disabled .is-disabled. validate-mutations and test.js not re-run (rate-limited). Pushed agentgui 9de566e; kit vendor re-built from design HEAD.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-39a7cc2f887a90b1-1079
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783075545903
|
|
5
|
+
updated: 1783075545903
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 21st run (2026-07-02): GUI cohesion sweep. gui-cohesion workflow wf_6b9f1890-320 (25 agents, 12 confirmed). Kit: WorkspaceRail rail attention-dot tone flag, WorkspaceShell keepSessionsTrack (sessions column no longer reflows the 4-column grid on tab switch, mirrors keepPaneTrack), mobile drawer Tab focus-trap (exported trapTab from overlay-primitives.js), ConversationList richer status prop (error/stale/running/stopping) for the Running rail group, ContextPane recentFiles panel. App: computeLiveSessions() single source of truth for WorkspaceRail badge+tone and liveMain (fixed nav-badge undercounting external sessions), sessions rail rendered on Live tab too, follow-up chip label fix, recentSessionFiles() from tool-call file_path args, disconnected->offline vocab fix, refreshActive() visibility-gated polling. Server: /health corsWildcardOpen + settings error banner. Kit pushed 6cfd115 (rebased onto concurrent fe50db5, regenerated dist rather than hand-merging minified bundle conflict). agentgui pushed 3410178. Both CI green, 28/28 tests, 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-4420e6d00e5c8632-2318
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781943726445
|
|
5
|
+
updated: 1781943726445
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 10th run (2026-06-11) Claude-Code-web parity sweep (workflow .claude/workflows/gui-claude-code-parity.js, 6 design-language lenses visual-language/layout-composition/chat-thread-craft/file-browser-fidelity/live-session-command/motion-microinteraction; 66 agents -> 37 confirmed PUNCHLIST-PARITY.md; kit 28387c3, agentgui 0a93fc6). Chat reads like Claude Code not messenger: AgentChat passes flat:true+aicat:false; flat turns full-width avatar-less capped at --measure led by .chat-role label, assistant turn faint color-mix(--fg 3%) bg (.chat-msg-flat); bubble/avatar kept only for messenger demo. Composer ONE bordered rounded-rect (.chat-composer border --rule +--r-2, :focus-within ring) borderless textarea + inline --r-1 send. Tool calls = bordered status-toned card (.chat-tool de-frames .chat-bubble, head icon/name/label/status-pill, running->accent error->flame); bundle shipped ZERO .chat-tool CSS before. injectCodeCopy reads <code> language-* class -> .chat-code-lang header tab. ::selection accent-tint. Layout: kit WorkspaceShell gains mainFlush; .ws-main padding space-4/space-5, chat opts out via .ws-main--flush; .ws-crumb min-height 48px+left gutter. Live dashboard command center: SessionDashboard status-bucketed grid, header breakdown N running/M idle/K errors, .ds-dash-stream-disc heartbeat, tri-state select-all, is-armed stop pulse; SessionCard cost/token stat, is-new arrival cue, icon-led actions, is-stale amber inset. Files TYPE_ICON.dir=folder + file-image/link/folder-open icons; ConversationList loading skeleton; FilePreview Prism highlightAllUnder + .ds-preview-gutter line numbers + image fit/actual toggle + checkerboard. Motion all prefers-reduced-motion:no-preference guarded (.ws-shell grid-template-columns ease, thread scroll-behavior smooth, .ws-scrim opacity fade, copy->copied flip, is-new fade-in). LOAD-BEARING webjsx fix: SessionCard passed raw nulls positionally in children arrays -> applyDiff crashes reading 'key' on ANY null among VElement siblings; fix .filter(Boolean) EVERY children array + Btn spreads array children. Kit-wide rule: never pass conditional x?h():null positionally - build array and filter(Boolean). Deferred to 11th: Files multi-select+BulkBar+density-thumbnail, /api/move-confined, toolbar up-button+grid keys, F3 elevation unification.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-4bafafa47a0e4b6c-3237
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781793216567
|
|
5
|
+
updated: 1781793216567
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 12th run (2026-06-11) UX-craft sweep + empirical-witness-first (workflow .claude/workflows/gui-ux-craft.js, 6 new lenses typography-rhythm/copy-tone/perceived-performance/kit-DX/light-theme-contrast/interaction-density; 46 agents -> 40 confirmed, PUNCHLIST-UX.md; ALL 58 implemented). Server runs PORT=3009 (3000 owned by another app). LOAD-BEARING shipped-bug discoveries via the live page as debugger: (1) live tab '1 running over No-live-sessions' was a webjsx applyDiff CRASH (reading key) - SessionDashboard swapped UNKEYED empty-state body for keyed group children; fix = ONE stable keyed .ds-dash-groups body across empty/grouped/flat + Btn passes key through (was dropping it) + kit emptyAction CTA. (2) mobile drawers dead in prod: base .ws-drawer-toggle/.ws-scrim{display:none} sat AFTER media blocks - base-hidden rules must PRECEDE media reveals. (3) composer cwd bit invisible: app passed {label}, kit read .text - prop-name-contract failure; ChatComposer now normalizes text||label, drops empty bits before separators. (4) 11th-run multi-select checkbox hover-clipped by a stale duplicate .ds-file-check absolute-overlay block later in app-shell.css. (5) lint-null-children.mjs (new build gate) caught 14 latent crash sites in freddie.js. Layout staged column yield: .ws-shell yields pane->drawer @<=1480, sessions->drawer @<=1100, rail->60px icon strip <900 (labels hidden unconditionally; clipped 'age'/'Ne' was the 420px regression); chat thread 245px->776px at 1304px. PageHeader dense prop (24px not 180px) on all 5 tabs. DropZone-with-children = passive wrapper (overlay only on drag). Files: ONE breadcrumb, compact ghost toolbar 32px/r-1, FileGrid skeleton only on cold load (refresh dims in place is-refreshing). History rail flame = error DENSITY sessionErrorDense (errors>=3 AND >15% events). Theme: --flame/--amber theme-tuned pairs (light #C53E00/#8A6512 AA on paper; dark #FF5A1F/#D9A93A); --amber was referenced 8x but never defined; 5 --code-* syntax aliases; destructive ACTIONS=warn, flame=error STATUS only. Control craft: one 32px/r-1 metric for controls/dash/toolbar/BulkBar; focus rings unified inset accent; .ds-select ellipsizes+:focus-visible. Perceived perf: index.html 3x modulepreload+jsdelivr preconnect+static boot-splash; AgentChat warms markdown stack on mount, MdNode paints raw text synchronously while loader in flight; EventList loading skeleton; agents panel tri-state. Server: POST /api/move (dual realpath confinement, root/self-nesting refusal, 409-unless-overwrite, EXDEV mapped) + BulkBar move-selected -> runBulkMove; validate-mutations.mjs 26 checks (9 move). Kit DX: COMPONENT_API.md Workspace Surfaces section (AgentChat onPasteFiles-not-onPasteImage trap, WorkspaceShell stableFrame/mainFlush, FileGrid selection/density, DropZone wrapper); FileGrid canonical selected/onToggleSelect (marked/onMark aliases); 22 Btn primary:true -> variant:'primary'; AgentChat who->role; FOUR build lints (tokens/glyphs/null-children/classes). Witness caveats this env: spool out/ keeps STALE responses (re-read on mismatch); plugkit browser sessions expire between dispatches (fresh session needs full goto); first git_status after heavy churn can report stat-cache false positives.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-4c06c45b4d31bc60-1202
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783077058750
|
|
5
|
+
updated: 1783077058750
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
gm-method lesson: a responsive drawer/overlay whose left/inset offset changes across CSS breakpoints must re-derive its closed-state transform (translateX/translateY) at each breakpoint that changes the offset. A transform tuned as a percentage of the element's own width (e.g. translateX(-110%)) assumes left:0; if a later, narrower breakpoint shifts left to make room for a persistent sibling rail (icon-only nav strip), the same percentage no longer clears the viewport and leaves a visible sliver of the closed drawer overlapping content. Fix pattern: override the closed-state transform inside the narrower breakpoint's media query using calc(-100% - <the offset variable>), not a hardcoded percentage. Caught via live-browser DOM measurement (getBoundingClientRect on the drawer element) showing a nonzero right-edge when the drawer should be fully off-screen — a screenshot alone can be ambiguous at ~35px, but the measured rect makes the regression unambiguous. General takeaway: when auditing a multi-breakpoint responsive shell, check every off-screen/closed positioning rule at EVERY breakpoint that touches that element's left/inset, not just the breakpoint that introduced the transform.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-51d8992a3c6f6c9c-1073
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783071833056
|
|
5
|
+
updated: 1783071833056
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 22nd run (2026-07-02): GUI ux-craft sweep. gui-ux-craft workflow wf_48cd6bae-6ae (35 agents, 20 confirmed). Kit: accent-on-paper contrast fix - var(--accent) lime used as TEXT color in 7 sites + non-text FILL in 3 more, ~1.07:1 contrast on paper theme (WCAG needs 4.5:1/3:1), swapped to --accent-ink (borders/outlines stayed on --accent). 4 typography-rhythm fixes (dash-title/ContextPane-meta-sub/session-group-label sizing parity, .ws-crumb height derived from --app-crumb-h). Session-head search-input 36px height match, .ds-file-act focus-visible ring added. App: 5 copy-tone fixes (clear-history button noun, conversation->chat vocab, npx jargon->plain language, provider error truncated+prefixed, disabled export-chat keeps action label), search-result sid fallback to 'session <8char>...', synchronous theme-flash-prevention inline script in index.html. Deferred: kit README/ui_kits docs gaps, perceived-performance work (both larger-scope, landed in later runs 23). Kit pushed 3f50e7a, agentgui pushed 06f108d, both CI green, 28/28 tests, 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-539eee7e8c6c10ee-2557
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781779376189
|
|
5
|
+
updated: 1781779376189
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 13th run (2026-06-18): design-content consolidation - ALL design now lives in the kit (../design = /config/workspace/design), none in the app. site/app/index.html NO LONGER has an inline <style> block; the ~240-line block (28 classes: .pill/.cwd-bar/.resume-banner/.health-chip/.settings-grid/.history-empty/.boot-splash/.chat-controls/.status-dot/.ds-event-list overrides+event-flash keyframe+scrollbars+focus+responsive+print) moved to a NEW kit file ../design/app-surfaces.css (wired into scripts/build.mjs CSS_FILES, scoped .ds-247420, reads kit tokens directly, NO --agentgui-* fallbacks - those local color vars deleted incl dead status-connecting/-offline). app.js has ZERO inline style= props (6 margins -> .agentgui-field-mb/.agentgui-field-my kit utils; mainStyle layout string -> .agentgui-main/.agentgui-main-chat kit rules). RULE: no design content in agentgui - new surface styling is a kit CSS rule, never inline. app-surfaces.css selectors are PRE-SCOPED `.ds-247420 ...` so the build prefixer (which mis-compounds [attr]/* and handles :root/html/body specially) leaves them untouched (line 107 startsWith(prefix+space)). 247420.css is render-blocking <link> + <html class=ds-247420> static, so NO FOUC moving base/boot-splash to kit. Workflow .claude/workflows/gui-design-consolidation.js (residue-first, 6 lenses) 44 agents -> 19 findings (PUNCHLIST-DESIGN.md) ALL landed in kit: .chat-composer-toolbar, role-monotonic chat hover, tool-done success tone, .chat-empty-suggestion variant, error-card flame inset rail, .ds-check-box (CSS-DRAWN multi-select checkbox replacing [x]/[ ] bracket text in files.js+sessions.js - border-drawn tick on .is-marked/[aria-checked], NOT a glyph, AT keeps role=checkbox state), thin 26px status strip, status-item ellipsis, ws-crumb gutter, fluid clamp() shell widths, :focus->:focus-visible, --warn/--sky dark pairs, unified --focus-* tokens, reduced-motion skeleton static-fill, color-blind rail SHAPE diff + sr-only word in Row(). lint-glyphs extended with SCAN_ROOT_FILES (root bundled CSS escaped it; 39 box-drawing comment dividers in app-shell.css slipped in, converted to ASCII). CONCURRENT WRITER on kit landed SAME status-strip+fluid-width fixes; rebase conflict in app-shell.css resolved by adopting theirs (HEAD) per AGENTS.md rule, kept my distinct ds-check-box/glyph/token work. Pushed: kit 1aa7926, agentgui 9305b00. Server PORT=3009; restart via Bash run_in_background:true (pkill+inline nohup got SIGTERM'd). Witnessed: 0 console errors, migrated classes resolve from kit bundle.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-559b8b2abc4b1091-1665
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781946705210
|
|
5
|
+
updated: 1781946705210
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 20th run iteration 2 (2026-06-20): verification iteration, NO code change warranted. Booted fresh server PORT=3009: clean (0 FATAL, iteration-1 ACP fix holds), 46/46 tests, 0 TODO/FIXME/HACK, 0 decorative glyphs. INVESTIGATED startup-log oddity: [discoverAgents] 'Adding CLI wrapper for cli-opencode/...' then final list shows cli-* found:false even though opencode/gemini/kilo ARE installed. ROOT: lib/agent-discovery.js discoverAgents() replaces each found ACP agent with a CLI_WRAPPER object carrying NO path so found:!!a.path=false (line 142-143 wrappedAcpIds filter). BUT that is a SEPARATE internal subsystem (discoveredAgents, used by descriptors/process-message.js:35/server-startup acpPort map). The CLIENT picker uses the canonical registry (lib/claude-runner-agents.js, ids opencode/gemini/kilo/codex real commands); agents.list (ws-handlers-util.js:45) returns registry.list() with available:registry.isAvailable(id) running 'which command'. WITNESSED via WS probe (msg {m,r,p}; resp {r,d:{agents}}): client availability CORRECT - opencode:true gemini:true kilo:true codex:false agy/goose:false. NO user-facing bug. Dual agent-registry (agent-discovery cli-wrapper/discoveredAgents vs claude-runner-agents registry, id schemes opencode vs cli-opencode) is a real SMELL + likely partially-dead (process-message cli-wrapper branch never matches client-sent registry ids), but consolidation needs deliberate consumer tracing+testing, unsafe blind autonomous removal. For a future deliberate run. Env: pkill -f server.js self-matches shell (exit 144) - kill explicit pid via /proc/PID/cmdline guard; WS probe needs {m,r,p} keyed by r with d.agents.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-6224f8d185797f2b-1047
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781863050878
|
|
5
|
+
updated: 1781863050878
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 18th run (2026-06-19): 18th-run GUI quality sweep. gui-audit wf_7cd243d2-753 (53 agents, 29 confirmed). Applied: app.js - thinking branch in sendChat loop, saveBackend deep health probe, aria-live guard (lastAnnouncedStatus), history sidebar close WorkspaceShell fix, O(1) SSE dedupe Set, sessionDuration reduce, tool_use rail flame (purple=subagent), ACP vocabulary connected/connecting/disconnected, ACP unhealthy rail flame, skip-link in index.html. kit - showWorkingTail status=running (was done/error), focus ring 2px outline-offset, ws-sessions-toggle aria-expanded dynamic, DOMPurify version-pinned (no ESM SRI), FORCE_BODY on sanitize, 360px buttons fill, agentcwd-btn 44px coarse. lib/http-handler.js - CORS credentials guard, token masking in logs. Also applied pre-workflow: history tool_result (result)/(tool call) prefix, multi-turn preamble for non-resume agents. validate-mutations 29/29; test.js 10/0. deferred: resume-transcript-load (#3), ACP force-restart (#4). Commits: 817c64a, b8d2eab, d41fab5, 8427afc; kit a16120c.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-66b0947b946f3437-1155
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781191150589
|
|
5
|
+
updated: 1781191150589
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 11th run (2026-06-11, linux env): kit lives at ../design = /config/workspace/design (same repo as c:\dev\anentrypoint-design). Landed: FileGrid multi-select (marked Set keyed by path, shift-range via onMark({range}), tri-state select-all over SHOWN rows, Ctrl+A) + BulkBar export + density list/compact/thumb (FileCell tiles; thumbUrl MUST be downloadUrl not imageUrl - /api/image has a narrower allowlist and 403s repo files; img ignores attachment disposition). CRITICAL fix: PASSWORD-gated deploys could never boot the SPA (static assets 401; index 200) - http-handler now sets/accepts an HttpOnly SameSite=Lax agentgui_token cookie. Shipped-jank fixes: .ds-file-open had zero CSS since run 5 (row now flex + button reset); filesMain dropped permissions from entries (EACCES UI dead); Crumb narrow collapse keyed on .app @container that does not exist under WorkspaceShell (crumb overflowed 420px - mirrored into ws 900px media block); webjsx attr diff leaves null-valued attrs unset when toggling (always set data-* concretely). validate-mutations.mjs made portable (ROOT env/cwd, posix targets, Bearer auth; csrf expects 401 gated/403 open).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-6bdf783a1f6be7c2-1062
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781197688031
|
|
5
|
+
updated: 1781197688031
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui GUI audit pass (2026-06-04, structured chat run) details: app.js sendChat emits structured parts - toolPart() builds {kind:'tool',name,label,args,status,_id} and applyToolResult() matches tool_result back to tool_use by id; kit AgentChat passes {kind,...} parts straight to ChatMessage.renderPart (bare strings wrapped as text) so collapsible ToolCallNode renders. Multi-turn resume: chat.sendMessage is one-shot (ephemeral chat- id per call); claude real session id arrives as parsed.session_id; ws-handlers-util onEvent broadcasts streaming_session{claudeSessionId} once; backend.js yields {type:'session'}; app captures into state.chat.resumeSid (claude-code only) so next turn --resumes. Streaming render is rAF-coalesced (scheduleStreamRender). Kit AppShell main#app-main has tabindex=-1 so the skip-link moves focus. /api/image confined to allowlist roots (the .. check was a no-op after path.normalize); CORS no wildcard when PASSWORD set. History: eventsLimit default 300 + load-older; search hits carry focusEventI/focusEventTs -> scroll+flash.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-70d96acb736af2d7-685
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781197681553
|
|
5
|
+
updated: 1781197681553
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui GM plugin autonomy blocker (recorded 2026-05): the gm plugin pre-tool-use-hook enforces a 'must invoke gm:gm first' gate via .gm/needs-gm marker, fragmenting multi-tool autonomy. A bypass patch in c:/dev/gm gm-starter/hooks (commit e300acf7) did NOT propagate after /plugin update gm because hook content is TEMPLATED from elsewhere in the gm codebase (likely lib/cli-adapter.js, platforms/cli-config-shared.js, or lib/template-builder.js), not sourced from gm-starter/hooks/ files. To fix for real: locate the generator, patch it to unlink needs-gm when .gm/prd.yml exists, rebuild via node c:/dev/gm/cli.js c:/dev/gm/gm-starter c:/dev/gm/build, push, then /plugin update gm.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-713614f12d7029da-1577
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781943682617
|
|
5
|
+
updated: 1781943682617
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 20th run (2026-06-20): destructive quality run, real-input discovery via live server boot. FOUND + FIXED two robustness bugs. (1) lib/plugins/acp-plugin.js was a SECOND redundant ACP manager: eager-spawned all 4 ACP tools at boot on conflicting/mismatched ports (gemini=18101/kilo=18102/codex=18103 vs canonical acp-sdk-manager opencode=18100/kilo=18101/codex=18102), no real restart/health logic despite /api/acp/status route promising restarts, and CRASHED boot with '[FATAL] Uncaught exception: Executable not found in $PATH: codex' on any missing ACP binary. Its route consumed by nobody (client acpStatusFor reads state.health.acp from getACPStatus -> acp-sdk-manager); no plugin declared 'acp' dep; exports nothing. DELETED the file. Rule: ACP lifecycle lives ONLY in lib/acp-sdk-manager.js. (2) spawn() of a missing binary emits ENOENT as an ASYNC 'error' event under Bun (escapes synchronous try/catch) -> uncaught exception kills server. acp-sdk-manager.js startProcess was the only spawn callsite missing proc.on('error') (terminal.js/claude-runner-direct.js/gm-agent-configs.js/claude-runner-acp.js all had it); added proc.on('error') routing to CRASHED+scheduleRestart. Witnessed: clean boot 0 FATAL, [PLUGINS] Loaded extensions drops acp, /api/acp/status 404, tests 46/46 (27 unit + 19 integration), browser localhost:3009/gm/?token 0 console errors hScroll 0. Env note: gm browser verb chromium needs /etc/chromium.d/no-sandbox (write via sudo here); pkill -f 'server.js' self-matches the shell (exit 144) - kill by explicit pid instead. Pushed agentgui.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-7535f34f430fc196-1340
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782994678180
|
|
5
|
+
updated: 1782994678180
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 21st run (2026-07-02): GUI cohesion sweep. gui-cohesion workflow wf_6b9f1890-320 (25 agents, 12 confirmed). Kit (../design): WorkspaceRail rail-tone attention flag on nav items, WorkspaceShell keepSessionsTrack (sessions column no longer removed/reflowed on files/live/settings, mirrors pane keepPaneTrack), mobile drawer Tab focus-trap (exported trapTab from overlay-primitives.js), ConversationList richer status prop (error/stale/running/stopping) for the Running rail group, ContextPane recentFiles panel. Also committed inherited dirty 19th/20th-run kit work (agent-chat/chat/files-modals/files a11y fixes). App: computeLiveSessions() single source of truth for WorkspaceRail badge+tone and liveMain (fixed nav-badge undercounting external sessions), sessions rail now renders on Live tab, follow-up chip 'Open X in files'->'Explain X' (label matched actual sendChat behavior), recentSessionFiles() from tool-call file_path args, 'disconnected'->'offline' vocab fix (2 sites), refreshActive() visibility-gated polling. Server: /health corsWildcardOpen + settings error banner (was console-only). Kit pushed 6cfd115 (rebased onto concurrent fe50db5, regenerated dist rather than hand-merging minified bundle conflict). agentgui pushed 3410178 then 44a9e2c (docs). Both CI green, 28/28 tests, browser-witnessed 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-861a588d2773681a-1311
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782999839466
|
|
5
|
+
updated: 1782999839466
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 24th run (2026-07-02): GUI completion sweep. gui-completion workflow wf_4a731841-832 (33 agents, 17 confirmed). Landed 5: Live-tab dashboard state (sort/filter/errors-only) round-trips through URL hash (lsort/lfilter/lerr) and localStorage - previously lv.filter wasn't persisted at all. Shortcuts overlay wraps content in kit's existing FocusTrap component instead of bare role=dialog div (Tab could escape). History event rows expose copy even collapsed. Settings agents panel gives not-installed direct-runner agents a re-check button. Caught a real bug: adding a CSRF regression test for the upload-PUT route, first draft included Authorization header matching the file's other test patterns but testing the wrong scenario (stolen-token not real CSRF), passed trivially at 200. Corrected to omit auth (real attacker capability); server's guard correctly rejects it. LESSON for gm-method: any CSRF/auth regression test must match the real attacker's capability set exactly - copying a nearby test's header pattern can silently test the wrong threat model and give false confidence. 12 findings deferred as their own re-scoped row (mid-thread retry/fork, file-move UX, event permalinks, context-size indicator). No kit changes. Pushed d3e2d1e, 28/28 tests, 17/17 validate-mutations, 0 console errors.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-9329105b05b9c0f6-324
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781775260292
|
|
5
|
+
updated: 1781775260292
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Resolved mutable: kit-css-host-file
|
|
9
|
+
|
|
10
|
+
/config/workspace/design/scripts/build.mjs:51-59 CSS_FILES list bundles app-shell.css/chat.css/community.css etc scoped under .ds-247420; new file added there. Server not running: ps aux has no bun/node server proc and no listener on :3009 - start PORT=3009 bun server.js for witness.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-94f30cec3c283f97-782
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781783796659
|
|
5
|
+
updated: 1781783796659
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Resolved mutable: kit-base-reset-exists
|
|
9
|
+
|
|
10
|
+
Kit owns the margin reset (app-shell.css:11 'html, body { margin:0; padding:0 }' + app-surfaces.css:26 '.ds-247420, .ds-247420 body { margin:0; height:100% }') and tokens (colors_and_type.css:15 --paper #F6F5F1, :18 --ink #131318, :58 --bg:var(--paper), :61 --fg:var(--ink)). But grep finds NO rule painting the body surface (no 'body{background/color/font-family}' anywhere in root css). So theme.mjs cannot simply drop its inline reset - the kit must FIRST gain a canonical '.ds-247420 body { background:var(--bg); color:var(--fg); font-family:var(--ff-body) }' base-surface rule, and theme.mjs must add a render-blocking kit CSS <link> (it currently loads the kit via JS importmap only, so the inline <style> is its pre-JS FOUC guard).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-956d4813319f65a3-1710
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782999885820
|
|
5
|
+
updated: 1782999885820
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 9th run (2026-06-10): GUI logic+predictability sweep. Workflow gui-logic-predictability.js (6 lenses: interaction-lifecycle, cross-surface-consistency, information-architecture, realtime-truth, input-ergonomics, scale-robustness). 78 agents -> 67 confirmed findings, all implemented. Interaction lifecycles: kit ConfirmDialog/PromptDialog gain error+busy/busyLabel props, Backdrop Escape listener is document-level with focus-restore queueMicrotask guard, per-session stop via state.live.stopping Set + kit session.stopping, upload drain loop with 409->replace+dismiss, new-chat/backend-change/stop confirms arm-only with 4s reset. Realtime truth: dashboard joins on realSid=claudeSessionId||sessionId, streaming_cancelled broadcast, 60s per-session terminal-frame replay buffer, error status derives from recency not cumulative count, SSE counters take max(index,tally) never regress, persistChat 500ms debounce/100-msg cap/>4KB trim, cross-tab storage listener with ts guard. Input ergonomics: IME guards (isComposing||keyCode===229), Escape ladder order = shortcuts overlay > file dialog > confirmingEdit > new-chat arm > stop-arms > stop generation, window-level dragover/drop preventDefault outside .ds-dropzone, Mod+Shift+L focuses composer. Scale: AgentChat windowed thread MESSAGE_CAP=100, >20k streaming part renders 4k tail window, history events sliced to last 5000 via server ?limit=N shim. Consistency: ONE fmtDuration + ONE fmtBytes kit-wide, STREAM_WORD offline vocabulary, settings order backend->server->agents->appearance->keyboard->data. Witness: localhost:3000/gm/ 0 console errors, joint risk after parallel agent runs is prop-name contract drift (app/kit prop naming mismatches).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-a52933cd6495e6f5-2624
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781793133390
|
|
5
|
+
updated: 1781793133390
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 15th run (2026-06-18): design-maturity sweep + dead-code + server-hardening, tracked by two Workflow-tool runs. gui-design-15 (wf_7ba315a1-9a9, 8 lenses, 59 agents -> 35 confirmed -> 33 applied in ../design kit) + gui-design-15b (wf_5b2861b2-717, 3 lenses history-settings/server-boundary/security, 25 agents -> 18 confirmed). Kit pushed 5251ffe; agentgui pushed 50d78bf. KIT design fixes: shape-distinct status discs + --stale token, composer cwd-input focus/invalid + .send.cancel neutral tone + code-card, --on-color saturated fills, collapsed-track resizer hide guards, 4 reduced-motion opt-in guards, NEW ShortcutList export (consumes orphaned .ds-shortcuts-hint/.ds-kbd legend CSS), Row detail prop (.ds-row-detail monospace pre - expanded history events no longer dump JSON into bold title), icon-led density picker (3 new shell.js icons rows/rows-tight/grid), pane-toggle relocated into .ws-crumb. DEAD CODE removed: static/ tree (webjsx.js+xstate.umd.min.js, referenced nowhere - SPA gets webjsx from kit dist), scripts/build-rippleui.mjs (self-ref only), scripts/copy-vendor.js (only built dead static/) + dropped copy-vendor from package.json postinstall. SERVER HARDENING (lib/, all preserve localhost-PASSWORD witness): terminal /api/terminal/* + WS-attach fail-closed unless PASSWORD+ENABLE_TERMINAL=1 (was open RCE) + drops client shell/env; /api/file+list fsAllowRoots includes server cwd only under PASSWORD/FS_ALLOW_CWD + secret-file block + env/conf/cfg/ini dropped from TEXT_EXTS (was exposing server tree+secrets); CSRF json-only + Origin==Host (dropped octet-stream/empty-CT bypass); constant-time SHA-256 token compare in http-handler _checkToken AND ws-setup; chat.sendMessage cwd confined via confineToRoots realPath; cookie conditional Secure+Max-Age; rate-limit honors XFF only under TRUST_PROXY=1 + failed-auth bucket penalty; health endpoint omits memory/projectsDir/allowRoots under health-exemption; CSP script-src drops unsafe-inline for per-request nonce threaded via asset-server.js onto bootstrap+hot-reload+importmap scripts (style-src keeps unsafe-inline for DS runtime style); agents.models wired through getModelsForAgent. confineToRoots/fsAllowRoots now EXPORTED from http-handler.js. Witnessed browser-4 localhost:3009/gm/?token: 0 console errors, CSP nonce did NOT break importmap/boot, ShortcutList 11 rows in overlay+settings, dark surface, 3 resizers, no h-scroll. validate-mutations 26/26 PASS live. test.js 10pass/0fail. RULE confirmed: git verbs target the agentgui repo only; the sibling kit repo (../design) is pushed via direct git (rebase onto concurrent writer).
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-a86426ac44138c96-1606
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781966498992
|
|
5
|
+
updated: 1781966498992
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 20th run iter13 (2026-06-20): verification + dependency audit. After the big removals (plugins etc), re-ran the dead-export scan -> 0 newly-orphaned exports (clean). DEPENDENCY AUDIT found package.json deps with ZERO references anywhere in source (lib/server/scripts/bin/electron/site, .js/.mjs/.cjs, no import/require, no bun-x/spawn-by-name): pure libraries execa, form-data, p-retry, zod, @agentclientprotocol/sdk (ACP impl is hand-rolled in acp-protocol.js, doesn't use the SDK) - these are DEFINITIVELY unused (libraries require an import). Plus CLI-named candidates ccfollow, @lanmower/ccf, webtalk (zero refs, but lower certainty - could be invoked by an external deploy wrapper). Agent CLI packages (@anthropic-ai/claude-code, @google/gemini-cli, @kilocode/cli, opencode-ai) are runtime binaries - KEEP. DID NOT remove autonomously: there are TWO lockfiles (bun.lock + package-lock.json); editing package.json without updating both drifts the lockfiles and breaks CI under --frozen-lockfile/npm ci, and doing it cleanly needs bun remove/install which triggers node-gyp rebuild + network (risky in sandbox). Flagged for DELIBERATE removal: run 'bun remove execa form-data p-retry zod @agentclientprotocol/sdk' (+ verify ccfollow/ccf/webtalk unused), update both lockfiles, confirm CI green. Run state at iter13: 9 substantive commits pushed (93773e2 acp-plugin, 4454082 models, c7de4f5 external-acp, 80d4b7c cli-wrapper, 509bf01 dead-exports, b076541 files-plugin, c5fd860 agents-plugin, e73ed0e plugin-system, af87d73 docs); ~860 lines removed; server/client/security/tests/docs all clean.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-a95b1d49d71133ce-1007
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781859394641
|
|
5
|
+
updated: 1781859394641
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 17th run (2026-06-19): two-pass GUI quality sweep. Pass 1: A1-A11 app.js + K1-K10 kit fixes (SVG XSS, CORS wildcard, tool_result array flatten, absIdx-was-already-fixed-here-actually, stable event keys, empty turn prune, ACP panel, TextField error, restartCount, clearLocalData ds.ws.*, aria-invalid, WorksList aria-expanded, drawer [role=button], textarea overflow:hidden, role=banner removed, aria-atomic, formatShortcut ASCII, ws-crumb padding, ws-desktop-toggle 44px). Pass 2: gui-audit workflow wf_bcac251f-d54 (48 agents, 25 confirmed). Key fixes: absIdx ReferenceError crash (history blank), Prism new Function blocked by CSP fixed with script injection + Promise.all tiers, scrollChatToBottom forced layout in rAF removed, sessions drawer <=640 fixed to <=1100, thinking blocks dispatched to ThinkingNode, rail all-green bug, clearLocalData nav reset, liveTick self-clears, kit-* selector removed, Esc listener leak. validate-mutations 29/29; test.js 10/0. agentgui b9d66cc; design 03d9d07.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-aaeae38d8eb01809-1076
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783083889386
|
|
5
|
+
updated: 1783083889386
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
gm-method lesson: when a component is deliberately kept mounted across multiple tabs/views for visual consistency (a 'keep-track' pattern - same rail/list shown regardless of active tab so the layout doesn't reflow), audit every interaction the component exposes on every tab it appears on, not just the tab where the interaction was originally designed. A very common latent bug: the interaction's effect is only rendered by ONE of the tabs (e.g. a selection list whose selection is only visualized on tab A), so triggering it from tabs B/C/D silently updates state with no visible effect - a dead click that looks identical to a working one. This is a distinct failure mode from a visual/CSS bug: it can't be caught by screenshots alone, only by reading application state before/after the interaction (e.g. via an exposed window.* state object) on each tab the shared component appears on. Fix pattern: the non-primary tabs' handler should navigate to the tab that renders the effect, so the interaction produces a consistent, visible outcome everywhere the control appears.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-b06b8c85b81663e6-1250
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783071795100
|
|
5
|
+
updated: 1783071795100
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 27th run (2026-07-03): negative-space + attention sweep, scoped to the specific user ask (not a full agent fan-out) - live-browser review via screenshots + DOM measurement at 1280px and 420px across chat/files/settings. Found+fixed 2 real issues. Files filter placeholder text was wider than its intentionally-compact 220px input, clipping the last character with no ellipsis - shortened the placeholder rather than widening the control (the compact width was a deliberate prior design decision documented in the kit's own CSS comment). Settings SERVER panel rendered 4 short facts each as an oversized fs-xl/tall-line-height intro-paragraph style ('.lede') instead of a metadata style, creating real dead vertical space and visual inconsistency with the adjacent roots list (which already used a compact metadata-strip component) - consolidated all facts into that same compact component. GM-METHOD LESSON: for a narrowly-scoped ask (e.g. 'any negative space/attention issues'), a live-browser screenshot-and-measure pass targeted at the specific concern finds real, fixable issues faster and more precisely than another full multi-agent workflow fan-out - match investigation scale to the ask's scale, not the project's total surface area.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-bdf466854032cac9-1509
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782996174769
|
|
5
|
+
updated: 1782996174769
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 22nd run (2026-07-02): GUI ux-craft sweep. gui-ux-craft workflow wf_48cd6bae-6ae (35 agents, 20 confirmed). Kit (../design): accent-on-paper contrast fix - var(--accent) lime was used as TEXT color and non-text FILL in 10 sites (chat role label, dashboard status/stream/select/breakdown text, code-copy text, tool-running status, live status dot, green session-rail fill), rendering ~1.07:1 contrast on paper theme (WCAG needs 4.5:1/3:1); swapped all to --accent-ink, borders/outlines left on --accent. 4 typography-rhythm fixes (dash-title/ContextPane-meta-sub/session-group-label sizing parity with kit-wide defaults, .ws-crumb height derived from --app-crumb-h). Session-head search-input 36px height match, .ds-file-act focus-visible ring added. App: 5 copy-tone fixes (clear-history button noun, conversation->chat vocab, npx jargon->plain language, raw provider error truncated+prefixed, disabled export-chat keeps action label), search-result sid fallback to 'session <8char>...', synchronous theme-flash-prevention inline script in index.html (reads 247420:theme from localStorage before first paint, non-module so it runs before the kit's ES module graph loads). Deferred as explicit re-scope (recorded not dropped): kit README/ui_kits docs gaps for flagship components, perceived-performance work (render-gating, modulepreload, loading skeletons) - both larger-scope work for a dedicated future run. Kit pushed 3f50e7a, agentgui pushed 06f108d, both CI green, 28/28 tests, 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-cda639547932c796-713
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783077061618
|
|
5
|
+
updated: 1783077061618
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
gm-method lesson: when a user says a shipped UI 'looks very diy' and asks for negative-space/attention polish, a live-browser screenshot audit at multiple viewport widths (desktop + mobile) plus DOM measurement (getBoundingClientRect, computed style) finds concrete, high-confidence issues faster than a broad multi-agent design-review fan-out — reserve the heavier fan-out for first-pass sweeps of a surface, and use the targeted live-witness method for narrow follow-up asks on an already-audited surface. Screenshots alone can miss a few-dozen-pixel layout bug (a drawer sliver, a clipped ellipsis); pairing every visual observation with a DOM measurement removes ambiguity before deciding it's worth fixing.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-cf8472c84d9e04c4-1883
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783075515986
|
|
5
|
+
updated: 1783075515986
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 28th run (2026-07-03): visual-polish pass responding to explicit user feedback that the GUI 'looks very diy'. Live-browser screenshot audit (not a full agent fan-out - matched investigation scale to the ask) found 3 concrete causes. (1) One shell column (sessions) used flat background identical to main content while sibling columns (rail, pane) already used a recessed tonal background for depth - the inconsistency read as one flat continuous surface instead of distinct panels; fixed by matching the established pattern. (2) The primary input control (chat composer) had zero elevation/shadow at rest despite the design system already defining an unused shadow token for exactly this purpose - a flat box on a flat background is one of the most common 'looks unfinished' tells. (3) A tab that opted out of the shell's standard content padding (for its own custom centering behavior) had nothing replacing that padding for its OTHER child elements (toolbar/heading/empty-state), so those elements sat flush against the viewport edge with zero breathing room while a sibling chrome bar above kept proper padding - a real, visible inconsistency. GM-METHOD LESSON: when investigating a vague 'make it look nicer' style complaint, use live screenshots + DOM measurement (getBoundingClientRect, computed styles) to find OBJECTIVE inconsistencies against the design system's own already-established patterns (a token defined but unused, a treatment applied to siblings but not this element, a padding removed with nothing substituted) rather than subjective aesthetic judgment - this converts a vague complaint into concrete, defensible, low-risk fixes. Also: distinguish a real CI regression from a known infra flake (GitHub Pages deploy 'Deployment cancelled') by checking whether the SAME flake pattern recurred before - rerun once and wait patiently rather than escalating.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-d060480435f92eec-1146
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782994689573
|
|
5
|
+
updated: 1782994689573
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 20th run (2026-06-20): destructive quality run. Found lib/plugins/acp-plugin.js was a SECOND redundant ACP manager, eager-spawning all 4 ACP tools at boot on conflicting/mismatched ports (gemini=18101/kilo=18102/codex=18103 vs canonical acp-sdk-manager opencode=18100/kilo=18101/codex=18102), no restart/health logic despite a /api/acp/status route promising 'restarts', and crashed server boot with [FATAL] Uncaught exception: Executable not found in $PATH when an ACP binary was missing. Route consumed by nobody; no plugin declared an acp dependency. Deleted the file. Rule: ACP lifecycle lives in lib/acp-sdk-manager.js alone. Also: spawn() for a missing binary surfaces ENOENT as an async 'error' event under Bun (escapes sync try/catch) - acp-sdk-manager.js startProcess was the only spawn() callsite missing a proc.on('error') handler (terminal.js/claude-runner-direct.js/gm-agent-configs.js/claude-runner-acp.js already had one); added it, routing into CRASHED + scheduleRestart backoff. Witnessed: clean boot (0 FATAL), acp no longer in [PLUGINS] Loaded extensions, /api/acp/status -> 404, tests 46/46, browser 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-d347c921b79e6d44-1099
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781769905189
|
|
5
|
+
updated: 1781769905189
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui auth fix (2026-06-18, commit 534324e): behind an nginx auth_basic proxy (boxone.off.l-inc.co.za/gm), the page HTML/JS/CSS loaded but every app fetch (/gm/health, /gm/v1/history/sessions, /api/*) returned 401 and the browser re-prompted for the Basic password. Root cause: site/app/js/backend.js authedFetch set Authorization: Bearer <window.__WS_TOKEN>, which OVERWRITES the browser cached Authorization: Basic creds; nginx auth_basic only accepts Basic so the Bearer fetch is rejected at the proxy before reaching agentgui. The WS survived because it auths via ?token= query on an auth_basic-off path. Fix: authedFetch now uses withToken(url) (?token= query, like WS/EventSource/image/download) + credentials:'same-origin', never overriding Authorization. Rule: same-origin app auth must never use the Authorization header when an upstream proxy owns Basic auth. boxone runs agentgui from a git checkout at the repo package.json version (1.0.928, NOT npm latest 1.0.968), so the fix reaches it via git pull + service restart. nginx gmweb htpasswd user is 'abc', PASSWORD=123,slam,123,slam.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-d3c8ea6c861bfbb8-1457
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783006020323
|
|
5
|
+
updated: 1783006020323
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 26th run (2026-07-02): per-row file move + lint tooling fix. Kit FileRow gains 'move' action (arrow-right icon, between rename/delete). App onAction('move', file) seeds state.files.marked with the single path, opens existing bulk-move dialog, reuses runBulkMove/api/move - no new server surface. Fixed a real bug in the design kit's scripts/lint-null-children.mjs: bracket-matcher didn't understand // line comments, so an apostrophe inside ANY comment anywhere in a scanned file was read as opening a string literal, corrupting bracket-depth tracking for the rest of that file (false positive here, potential false negative elsewhere hiding a real missing .filter(Boolean)). Added stripLineComments() before the scan. GM-METHOD LESSON (CI): GitHub Pages Deploy workflow repeatedly failed with 'Deployment cancelled'/'Timeout reached' - caused by rapid successive gh run rerun calls racing each other for the same commit SHA's deployment slot, made WORSE not better by retrying quickly. Fix: trigger once (gh run rerun, or gh workflow run <name> --ref main for a fresh dispatch if reruns keep reusing a wedged deployment id) and wait with ZERO concurrent interference - both agentgui and design repos' deploys succeeded the moment reruns stopped racing. Distinguish this from a real regression: npm publish/Publish-and-Release (actual consumer artifacts) were green from the first attempt every time, only the docs-site GH Pages deploy step flaked.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-d5e928c552cd87f9-214
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781783461615
|
|
5
|
+
updated: 1781783461615
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Resolved mutable: kit-repo-head-clean
|
|
9
|
+
|
|
10
|
+
git -C /config/workspace/design status --porcelain = empty; git log -1 --oneline = 1aa7926 feat(design): app-surfaces.css owns all consumer-app styling + 13th-run findings.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-d63bc3b8a0269844-406
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781783460280
|
|
5
|
+
updated: 1781783460280
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Resolved mutable: residue-extent
|
|
9
|
+
|
|
10
|
+
grep: site/theme.mjs:143 is the single remaining inline <style>html,body{...background:var(--app-bg,#FBF6EB);color:var(--ink,#1F1B16);font-family:var(--ff-ui,...)}</style> with hardcoded hex; grep -c '<style' site/app/index.html = 0; grep -rn 'style=' site/app/js/ = empty (app.js agentgui- hits are kit utility CLASS names, not CSS). Only real residue = theme.mjs:143.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-da1c91acf63d81d3-863
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1782996680472
|
|
5
|
+
updated: 1782996680472
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 23rd run (2026-07-02): GUI perceived-performance sweep, small targeted run landing the 22nd run's deferred findings. index.html modulepreloads marked/dompurify ESM CDN modules (was preconnect-only) so the fetch starts in parallel instead of waiting for markdown.js's dynamic import on first chat response. Settings server panel shows 'checking...' instead of 'unknown' during the first health probe (state.healthChecking flag around recheckHealth's await). Settings agents panel shows 'agents · loading...' instead of literal 'agents · 0/0 installed' during initial fetch. Still deferred as its own PRD row: first-render network-gating (shell paints nothing between boot-splash and health-probe completion) - needs a render-architecture change bigger than a targeted fix. No kit changes this run. Pushed agentgui 6a045ba, 28/28 tests, 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-dceeae20bc56d407-711
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781191154143
|
|
5
|
+
updated: 1781191154143
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Browser-witnessing agentgui on this linux container: plugkit chromium needs --no-sandbox (written to /etc/chromium.d/no-sandbox, the Debian launcher sources it). The browser verb body is 'timeout=NNNNN\n<raw playwright JS>' (max 50000ms; globals page/state); the body passes through a shell so NEVER use $(...) or backticks - use page.locator(). page.goto with domcontentloaded/networkidle HANGS (CDN subresources never resolve here) - use waitUntil:'commit' + waitForSelector. A goto to the same URL with only a hash change does NOT reload the bundle; use page.reload() after re-vendoring. Server: bun server.js, PASSWORD in .env is '123,slam,123,slam', app at localhost:3000/gm/?token=... (token URL-encoded).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-df74674eec7745ac-178
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781788748592
|
|
5
|
+
updated: 1781788748592
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Resolved mutable: live-page-baseline
|
|
9
|
+
|
|
10
|
+
browser-2: /gm/?token render ready=complete, hasShell=true, bodyBg=rgb(19,19,24) kit-painted, resizers=3, hScroll=false, consoleErrors=[]
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-e1d5431ae2542872-961
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781864613149
|
|
5
|
+
updated: 1781864613149
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 15th run (2026-06-18): design-maturity + dead-code + server-hardening. gui-design-15 (wf_7ba315a1-9a9, 8 lenses, 59->33 applied) + gui-design-15b (wf_5b2861b2-717, 3 lenses, 25->18). ~95 agents ~4M tokens. Kit: chat.css(10 rules), app-shell.css(10), colors_and_type.css(4), app-surfaces.css, editor-primitives.css focus-visible, chat.js ToolCallNode copy, files.js skeleton+roving-radiogroup+emptyAction, sessions.js cost emphasis, shell.js WS_RESIZE_CLAMP. NEW: ShortcutList export, Row.detail prop. Dead-code: static/ (webjsx+xstate), scripts/build-rippleui.mjs, scripts/copy-vendor.js removed. Server: terminal fail-closed (PASSWORD+ENABLE_TERMINAL=1), fsAllowRoots cwd-gated, CSRF JSON-only+Origin==Host, constant-time SHA-256 token compare, confineToRoots for chat cwd, cookie Secure+Max-Age, TRUST_PROXY rate-limit, CSP nonce (no unsafe-inline), agents.models via getModelsForAgent. validate-mutations 26/26; kit all lints pass; 0 console errors.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-ebbe6c0694c526f0-1392
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1783002710480
|
|
5
|
+
updated: 1783002710480
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 25th run (2026-07-02): mid-thread retry, highest-severity finding deferred from run 24 (gui-completion #7). Kit AgentChat retry action now offered on every settled assistant turn (was i===lastIdx-gated only), onRetryMessage(m) passes the specific message. App retryTurn(m) truncates+resends from m's preceding user turn, falls back to trailing assistant turn when called with no arg. Retrying anything before the trailing turn discards later turns too - now arms the same confirm banner edit-and-resend already used (generalized with kind:'retry' tag) instead of firing immediately; retrying the actual last turn (no data loss) still executes immediately. Caught a real bug while generalizing: old retryLastTurn() never cleared resumeSid/resumeNote on truncation unlike confirmEditAndResend() - both paths now share executeTruncateAndResend(). Kit pushed 834c81d, agentgui pushed 18cd971. Browser-witnessed end-to-end. Also noted: design repo's Deploy GH Pages CI step flaked twice (Timeout/Deployment cancelled) before succeeding on 3rd gh run rerun - infra flake in docs-site deploy env, not code; npm publish (actual consumer artifact) was green from the first attempt. GM-METHOD LESSON: toolchain-skew CI flakes converge via retry (gh run rerun), never block/stop the chain - distinguish deploy-infra flake from actual test/build failure before treating red as a real regression.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-ebf85becc23410b0-1633
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781191186453
|
|
5
|
+
updated: 1781191186453
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui GUI cohesion sweep (2026-06-10, 7th run, 61 agents -> 40 gaps, PUNCHLIST-COHESION.md, workflow .claude/workflows/gui-cohesion.js). Chat-as-chat-agent: kit chat.js injectCodeCopy() wraps rendered-markdown <pre> in .chat-code-block with reveal-on-hover .chat-code-copy (idempotent data-copy-wired, copy->copied label flip); CodeNode head + FilePreviewCode share the control; mid-stream prose with a code fence renders as a monospaced pre shell (agent-chat.js preShell) to avoid settle reflow; ChatComposer context line (agent/model/cwd); AgentChat per-agent avatar + followups chips. Files-as-fsbrowse: FILE_GRID_CAP=200 + show-more row; role=group NOT listbox (rows host real buttons); FileRow permissions/locked ASCII tag + disabled open on EACCES; RootsPicker segmented control; files-modals.js FilePreviewPane (non-modal split view, modal FileViewer kept <900px) with ASCII prev/next stepper. Sessions: SessionCard stale status (non-pulsing dot), selectable checkbox, active accent; SessionDashboard sort Select + filter + errors-only + stop-selected + streamState line; app liveMain derives stale (>45s no activity, no running tool), error-then-stale floats first, per-sid tally off SSE. Shell: WorkspaceShell stableFrame keeps pane track at width 0; ONE canonical .status-dot-disc (-live pulses, -error/-connecting/-stale static); rail tones match row tones; rail footer ThemeToggle; 44px coarse targets. Server: /api/list per-entry permissions via fs.accessSync; confined /api/download (realpath, 50MB, attachment). The app.js C destructure MUST list every kit component it calls (witness caught 'Icon is not defined').
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-ee8858162518f144-1252
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781197653677
|
|
5
|
+
updated: 1781197653677
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 12th run (2026-06-11): UX-craft sweep, all 58 findings landed (18 empirical witness + 40 from gui-ux-craft.js workflow). THREE load-bearing bug classes found via the live-page-as-debugger: (1) webjsx applyDiff crash class EXTENDED - swapping an UNKEYED state body (empty-state div) for KEYED children crashes mid-diff leaving contradictory half-applied DOM (live tab said '1 running' over 'No live sessions'); the rule is ONE stable keyed body wrapper across empty/grouped/flat states, and kit Btn must pass `key` through (it silently dropped it). (2) CSS-order class: base `display:none` rules placed AFTER their media-query reveals win at equal specificity regardless of media - the mobile drawer toggles + scrim were DEAD in production; base-hidden rules must precede media blocks. (3) prop-name contracts: app passed {label}, kit read .text - the composer cwd bit rendered as an invisible empty button; kit now normalizes text||label and filters empty bits before separators. WorkspaceShell now stage-yields: pane->drawer <=1480, sessions->drawer <=1100, rail->60px icon strip <900 (labels hidden unconditionally). New build lints: lint-null-children.mjs (caught 14 latent crash sites in freddie.js) + lint-classes.mjs; build runs 4 gates.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-f3f317c083d979ee-1210
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781859417237
|
|
5
|
+
updated: 1781859417237
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 16th run (2026-06-18): design-maturity sweep + dead-code + secret-hardening. Workflow gui-design-16 (wf_6479308b-24f, 12 lenses, 54 agents -> 40 confirmed). Kit fixes: chat.js ToolCallNode gates args on hasArgs, composer textarea disabled prop, EventList forwards detail/actions/highlight/meta, TextField error state, ShortcutList splits combos into discrete .ds-kbd-caps, sessions ConversationList rail migrated to shared SearchInput, shell WsResizer aria-valuetext, voice/community glyph removal. chat.css cwd .is-checking, breakdown disc shape-ring, .ds-dash-clear hover/focus-visible. app-shell.css reduced-motion guards, .ds-file-perm-tag chip, .ws-drawer-toggle coarse floor, density/filter-pill AA contrast, ShortcutList legend. editor-primitives.css focus->focus-visible ring. app-surfaces.css print paper-tuned tokens. community.css focus-visible. marketing.css .site-footer family. Server hardening: SECRET_RE applied to upload/mkdir/rename/list; Content-Disposition RFC-5987 encoded. Dead-code: site/app/vendor/cdn/ 36 files, scripts/harvest-fixtures.mjs, CI copy-vendor lines, kit scripts/bundle-markdown.mjs. validate-mutations 26/26 PASS; 0 console errors; kit c71659b; agentgui 96260e5.
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
key: mem-f714a86465fba158-2041
|
|
3
|
+
ns: default
|
|
4
|
+
created: 1781961168458
|
|
5
|
+
updated: 1781961168458
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
agentgui 20th run iter10 (2026-06-20): MAJOR finding - the entire lib/plugins/ system is DEAD SCAFFOLDING. Confirmed all plugin contribution surfaces dead: (1) routes mounted at BASE_URL+path but http-handler.js:330 only forwards /api/upload//files//v1/history to the plugin expressApp, so all other plugin routes (/api/agents /api/workflows /api/sessions/* /api/folders) are 404 - witnessed; (2) plugin wsHandlers NEVER wired - server-startup2.js:70 loadPluginExtensions only reads state.routes, never state.wsHandlers/state.api; real WS handlers come from registerWsHandlers (ws-handlers-util.js) on wsRouter in server.js:156; (3) plugin api never consumed outside plugins; (4) database-plugin init is a no-op (calls dbModule.initializeSchema which is undefined - database.js exports initSchema and runs it at import time, line 87); (5) agents-plugin served a FAKE hardcoded agent list (gm-cc/gm-oc/gm-gc/gm-kilo) unrelated to the real registry; (6) workflow-plugin + websocket-plugin wsHandlers are empty no-op stubs ()=>{}; websocket-plugin imports WebSocketServer + gets db/stream/agents but uses NONE. The real app (server.js + ws-handlers-util + http-handler + database.js + process-message + claude-runner + acp-sdk-manager) is fully independent of the plugin system. Removed so far: acp-plugin (iter1), files-plugin (iter9), agents-plugin (iter10, pushed - also dropped 'agents' from websocket-plugin deps + unused db/stream/agents locals). REMAINING dead plugins: database, stream, workflow, websocket + plugin-loader.js + server-startup2 loadPluginExtensions wiring + the workflow-plugin test in test.js. Full teardown is a large boot-path change for a DELIBERATE iteration (verify boot+tests+WS+validate-mutations at each step; check package.json busboy/ws still needed by routes-upload/server.js - they ARE). Pattern across the whole run: this codebase has MULTIPLE parallel/redundant implementations (acp-plugin vs acp-sdk-manager, cli-wrapper vs registry, files-plugin vs routes-upload, whole plugin system vs server.js core).
|