agentgui 1.0.971 → 1.0.973
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/AGENTS.md +13 -20
- package/PUNCHLIST-DESIGN-15.md +37 -0
- package/lib/asset-server.js +17 -5
- package/lib/http-handler.js +100 -27
- package/lib/ws-handlers-util.js +24 -11
- package/lib/ws-setup.js +15 -2
- package/package.json +2 -2
- package/server.js +2 -2
- package/site/app/js/app.js +10 -9
- package/site/app/vendor/anentrypoint-design/247420.css +185 -73
- package/site/app/vendor/anentrypoint-design/247420.js +13 -13
- package/scripts/build-rippleui.mjs +0 -84
- package/scripts/copy-vendor.js +0 -50
- package/static/lib/webjsx.js +0 -700
- package/static/lib/xstate.umd.min.js +0 -2
package/site/app/js/app.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as B from './backend.js';
|
|
|
3
3
|
|
|
4
4
|
installStyles().catch(() => {});
|
|
5
5
|
|
|
6
|
-
const { AppShell, WorkspaceShell, WorkspaceRail, Topbar, Crumb, Side, Status, Chat, ChatComposer, AgentChat, ConversationList, SessionDashboard, Row, Panel, PageHeader, SearchInput, TextField, Select, Btn, Icon, EventList, Spinner, Alert, FileGrid, FileSkeleton, sortFiles, FileToolbar, RootsPicker, BreadcrumbPath, EmptyState, FileViewer, FilePreviewPane, FilePreviewCode, FilePreviewText, FilePreviewMedia, ThemeToggle, ContextPane, PromptDialog, ConfirmDialog, DropZone, UploadProgress, FilterPills, SessionMeta, BulkBar, Checkbox } = C;
|
|
6
|
+
const { AppShell, WorkspaceShell, WorkspaceRail, Topbar, Crumb, Side, Status, Chat, ChatComposer, AgentChat, ConversationList, SessionDashboard, Row, Panel, PageHeader, SearchInput, TextField, Select, Btn, Icon, EventList, Spinner, Alert, FileGrid, FileSkeleton, sortFiles, FileToolbar, RootsPicker, BreadcrumbPath, EmptyState, FileViewer, FilePreviewPane, FilePreviewCode, FilePreviewText, FilePreviewMedia, ThemeToggle, ContextPane, PromptDialog, ConfirmDialog, DropZone, UploadProgress, FilterPills, SessionMeta, BulkBar, Checkbox, ShortcutList } = C;
|
|
7
7
|
|
|
8
8
|
// One duration/bytes vocabulary across every surface: prefer the kit's shared
|
|
9
9
|
// formatters (exported alongside the components), fall back to the local
|
|
@@ -564,7 +564,7 @@ function view() {
|
|
|
564
564
|
|
|
565
565
|
const shortcutsHint = state.showShortcuts
|
|
566
566
|
? Alert({ key: 'sc', kind: 'info', title: 'Keyboard shortcuts',
|
|
567
|
-
children:
|
|
567
|
+
children: ShortcutList({ shortcuts: SHORTCUTS }) })
|
|
568
568
|
: null;
|
|
569
569
|
const main = h('div', { id: 'agentgui-main', role: 'region', 'aria-label': 'main content', 'data-chat-scroll': '', class: 'agentgui-main agentgui-main-' + state.tab }, [shortcutsHint, ...mainContent()].filter(Boolean));
|
|
570
570
|
|
|
@@ -2570,7 +2570,8 @@ function historyMain() {
|
|
|
2570
2570
|
label: 'copy', title: 'copy event',
|
|
2571
2571
|
onClick: () => copyText(full || raw || ('(' + type + ')'), 'event copied'),
|
|
2572
2572
|
}] : undefined,
|
|
2573
|
-
title: expanded ? (
|
|
2573
|
+
title: expanded ? (text || '(' + type + ')') : (collapsedTitle || '(' + type + ')'),
|
|
2574
|
+
detail: expanded && e.toolInput ? JSON.stringify(e.toolInput, null, 2) : undefined,
|
|
2574
2575
|
// Guard ts: a missing/zero timestamp renders "Invalid Date" otherwise.
|
|
2575
2576
|
// Every row is click-to-expand, so always show the affordance word
|
|
2576
2577
|
// (not only when text overflows 220 chars).
|
|
@@ -2710,6 +2711,7 @@ function historySide() {
|
|
|
2710
2711
|
key: 'sr-' + (r.sid || '?') + '-' + i,
|
|
2711
2712
|
rank: String(i + 1).padStart(3, '0'),
|
|
2712
2713
|
title: r.snippet || '(no snippet)',
|
|
2714
|
+
highlight: state.searchQ || undefined,
|
|
2713
2715
|
sub: (projectLabel(r.project) || '?') + ' · ' + (r.role || '?') + (r.tool ? ' · ' + r.tool : '') + (r.ts ? ' · ' + fmtRelTime(r.ts) : ''),
|
|
2714
2716
|
// Rail carries the same semantics as session rows: error > subagent > normal.
|
|
2715
2717
|
rail: r.isError ? 'flame' : (r.isSubagent ? 'purple' : 'green'),
|
|
@@ -2752,16 +2754,16 @@ function historySide() {
|
|
|
2752
2754
|
onInput: (v) => { state.searchQ = v; debouncedSearch(); },
|
|
2753
2755
|
}),
|
|
2754
2756
|
state.searchBusy
|
|
2755
|
-
? h('div', { key: 'searchbusy', class: 'lede empty-state', role: 'status' }, Spinner({ key: 'ss', size: 'sm' }), 'searching…')
|
|
2757
|
+
? h('div', { key: 'searchbusy', class: 'lede empty-state empty-state--inline', role: 'status' }, Spinner({ key: 'ss', size: 'sm' }), 'searching…')
|
|
2756
2758
|
: null,
|
|
2757
2759
|
searching && state.searchHits.error
|
|
2758
2760
|
? Alert({ key: 'searcherr', kind: 'error', title: 'Search failed', children: state.searchHits.error })
|
|
2759
2761
|
: null,
|
|
2760
2762
|
searching && !state.searchBusy && !state.searchHits.error && (state.searchHits.results || []).length === 0
|
|
2761
|
-
? h('p', { key: 'nomatch', class: 'lede empty-state' }, 'no matches for "' + state.searchQ + '"')
|
|
2763
|
+
? h('p', { key: 'nomatch', class: 'lede empty-state empty-state--inline' }, 'no matches for "' + state.searchQ + '"')
|
|
2762
2764
|
: null,
|
|
2763
2765
|
state.searchQ.trim().length === 1
|
|
2764
|
-
? h('p', { key: 'min2', class: 'lede empty-state' }, 'type at least 2 characters to search')
|
|
2766
|
+
? h('p', { key: 'min2', class: 'lede empty-state empty-state--inline' }, 'type at least 2 characters to search')
|
|
2765
2767
|
: null,
|
|
2766
2768
|
state.searchQ
|
|
2767
2769
|
? Btn({ key: 'clearq', onClick: () => { state.searchQ = ''; state.searchHits = null; state.searchBusy = false; writeHash(); render(); }, children: 'clear search' })
|
|
@@ -2961,8 +2963,7 @@ function keyboardPanel() {
|
|
|
2961
2963
|
return Panel({
|
|
2962
2964
|
id: 'keyboard',
|
|
2963
2965
|
title: 'keyboard',
|
|
2964
|
-
children:
|
|
2965
|
-
h('div', { key: 'kb' + i, class: 'lede' }, s.keys + ' - ' + s.desc)),
|
|
2966
|
+
children: ShortcutList({ shortcuts: SHORTCUTS }),
|
|
2966
2967
|
});
|
|
2967
2968
|
}
|
|
2968
2969
|
|
|
@@ -3008,7 +3009,7 @@ function preferencesPanel() {
|
|
|
3008
3009
|
onClick: savedChat ? () => downloadBlob(savedChat, 'agentgui-chat-' + dateStamp() + '.json', 'application/json') : undefined,
|
|
3009
3010
|
children: savedChat ? 'export chat' : 'no saved chat' })),
|
|
3010
3011
|
h('div', { key: 'cwdnote', class: 'lede agentgui-field-my' },
|
|
3011
|
-
'working directory: set per-chat in the chat composer
|
|
3012
|
+
'working directory: set per-chat in the chat composer\'s cwd bar' + (state.chatCwd ? ' (current: ' + state.chatCwd + ')' : ' (currently: server default)')),
|
|
3012
3013
|
state.confirmingClearData
|
|
3013
3014
|
? Alert({ key: 'cld', kind: 'warn', title: 'Clear all local data?',
|
|
3014
3015
|
children: [
|