@agi-fans/dsh-tui 0.16.0 → 0.18.0
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/lib/CHANGELOG.md +53 -1
- package/lib/chrome/status-config.d.ts +4 -1
- package/lib/chrome/status-config.js.map +1 -1
- package/lib/chrome/tool-args.d.ts +9 -0
- package/lib/chrome/tool-args.js +20 -0
- package/lib/chrome/tool-args.js.map +1 -0
- package/lib/chrome/tool-renderers.js +4 -15
- package/lib/chrome/tool-renderers.js.map +1 -1
- package/lib/commands/auth.js +4 -2
- package/lib/commands/auth.js.map +1 -1
- package/lib/commands/jobs.d.ts +2 -2
- package/lib/commands/jobs.js +2 -2
- package/lib/commands/jobs.js.map +1 -1
- package/lib/commands/session.js +2 -4
- package/lib/commands/session.js.map +1 -1
- package/lib/definition.d.ts +3 -0
- package/lib/definition.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/runtime/composer-images.d.ts +44 -0
- package/lib/runtime/composer-images.js +149 -0
- package/lib/runtime/composer-images.js.map +1 -0
- package/lib/runtime/herdr-agent.d.ts +95 -0
- package/lib/runtime/herdr-agent.js +258 -0
- package/lib/runtime/herdr-agent.js.map +1 -0
- package/lib/runtime/plain-tui.d.ts +34 -0
- package/lib/runtime/plain-tui.js +119 -0
- package/lib/runtime/plain-tui.js.map +1 -0
- package/lib/runtime/provider-local.d.ts +46 -7
- package/lib/runtime/provider-local.js +181 -299
- package/lib/runtime/provider-local.js.map +1 -1
- package/lib/runtime/session-runtime.d.ts +9 -1
- package/lib/runtime/session-runtime.js +2 -2
- package/lib/runtime/session-runtime.js.map +1 -1
- package/lib/runtime/startup-notices.js +6 -9
- package/lib/runtime/startup-notices.js.map +1 -1
- package/lib/runtime/tool-presentation.js +18 -3
- package/lib/runtime/tool-presentation.js.map +1 -1
- package/lib/session/content-text.d.ts +12 -0
- package/lib/session/content-text.js +13 -0
- package/lib/session/content-text.js.map +1 -0
- package/lib/session/history-store.js.map +1 -0
- package/lib/session/job-notice.d.ts +2 -2
- package/lib/session/job-notice.js.map +1 -1
- package/lib/session/json-file.d.ts +5 -0
- package/lib/session/json-file.js +21 -0
- package/lib/session/json-file.js.map +1 -0
- package/lib/session/model-favorites.js +15 -25
- package/lib/session/model-favorites.js.map +1 -1
- package/lib/session/release-notes.js +1 -18
- package/lib/session/release-notes.js.map +1 -1
- package/lib/session/session-configuration.d.ts +0 -3
- package/lib/session/session-configuration.js +0 -4
- package/lib/session/session-configuration.js.map +1 -1
- package/lib/session/session-controller.d.ts +6 -4
- package/lib/session/session-controller.js +160 -182
- package/lib/session/session-controller.js.map +1 -1
- package/lib/session/session-library.d.ts +20 -0
- package/lib/session/session-library.js +55 -13
- package/lib/session/session-library.js.map +1 -1
- package/lib/session/subagent-roster.js +16 -46
- package/lib/session/subagent-roster.js.map +1 -1
- package/lib/session/subagent-tracker.d.ts +51 -0
- package/lib/session/subagent-tracker.js +128 -0
- package/lib/session/subagent-tracker.js.map +1 -0
- package/lib/session/tui-settings.d.ts +41 -18
- package/lib/session/tui-settings.js +57 -39
- package/lib/session/tui-settings.js.map +1 -1
- package/lib/session/update-check.js +2 -15
- package/lib/session/update-check.js.map +1 -1
- package/lib/session/version-compare.d.ts +3 -0
- package/lib/session/version-compare.js +21 -0
- package/lib/session/version-compare.js.map +1 -0
- package/lib/views/at-complete.d.ts +2 -0
- package/lib/views/at-complete.js +2 -2
- package/lib/views/at-complete.js.map +1 -1
- package/lib/views/event-views.d.ts +11 -270
- package/lib/views/event-views.js +21 -976
- package/lib/views/event-views.js.map +1 -1
- package/lib/views/settings-list.d.ts +2 -2
- package/lib/views/settings-list.js +12 -11
- package/lib/views/settings-list.js.map +1 -1
- package/lib/views/transcript-export.js +0 -2
- package/lib/views/transcript-export.js.map +1 -1
- package/lib/views/transcript-render.d.ts +179 -0
- package/lib/views/transcript-render.js +916 -0
- package/lib/views/transcript-render.js.map +1 -0
- package/lib/views/transcript-types.d.ts +104 -0
- package/lib/views/transcript-types.js +53 -0
- package/lib/views/transcript-types.js.map +1 -0
- package/package.json +39 -37
- package/lib/views/history-store.js.map +0 -1
- /package/lib/{views → session}/history-store.d.ts +0 -0
- /package/lib/{views → session}/history-store.js +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubagentTracker — Session/SessionEvent stream -> published TuiSubagentRoster.
|
|
3
|
+
*
|
|
4
|
+
* Owns the live SubagentRoster, the epoch that fences the async catalog
|
|
5
|
+
* listing, and the snapshot-identity dedup that keeps unchanged rosters off
|
|
6
|
+
* the wire. The controller supplies Harness lookups (depth, agent status,
|
|
7
|
+
* session list, durable children) and owns where the snapshot lands.
|
|
8
|
+
*/
|
|
9
|
+
import type { Session, SessionEvent } from '@deepseek-ai/dsh-session';
|
|
10
|
+
import type { SubagentCatalogEntry } from '@deepseek-ai/dsh-subagent';
|
|
11
|
+
import type { TuiSubagentRoster } from '../definition.ts';
|
|
12
|
+
export interface SubagentTrackerDeps {
|
|
13
|
+
/** Id of the active root agent's session, if a session is active. */
|
|
14
|
+
rootId(): string | undefined;
|
|
15
|
+
/** Depth of `session` under the active root, or undefined when unrelated. */
|
|
16
|
+
depth(session: Session): number | undefined;
|
|
17
|
+
/** Live status the agents service reports for a session, when loaded. */
|
|
18
|
+
agentStatus(id: string): 'idle' | 'running' | undefined;
|
|
19
|
+
/** Loaded sessions, consulted on a full resync. */
|
|
20
|
+
sessions(): readonly Session[];
|
|
21
|
+
/** Durable children of the root, when the subagents runtime is mounted. */
|
|
22
|
+
listChildren(rootId: string): Promise<readonly SubagentCatalogEntry[]> | undefined;
|
|
23
|
+
/** Publish the latest roster snapshot after the dedup check passes. */
|
|
24
|
+
publish(roster: TuiSubagentRoster | undefined): void;
|
|
25
|
+
}
|
|
26
|
+
export declare class SubagentTracker {
|
|
27
|
+
#private;
|
|
28
|
+
constructor(deps: SubagentTrackerDeps);
|
|
29
|
+
/** Whether the roster already tracks this session id. */
|
|
30
|
+
owns(id: string): boolean;
|
|
31
|
+
/** The current published snapshot, or undefined for an empty roster. */
|
|
32
|
+
snapshot(): TuiSubagentRoster | undefined;
|
|
33
|
+
/** Drop all tracked children and invalidate any in-flight catalog listing. */
|
|
34
|
+
reset(): void;
|
|
35
|
+
/** Remember a freshly created session when it descends from the root. */
|
|
36
|
+
noteSession(session: Session): void;
|
|
37
|
+
/** Fold one durable child event into its roster row. */
|
|
38
|
+
noteEvent(session: Session, event: SessionEvent): void;
|
|
39
|
+
/** Add the direct children a Session's durable catalog declares. */
|
|
40
|
+
observeCatalog(session: Session, events: readonly SessionEvent[]): void;
|
|
41
|
+
/** Apply a live agent-status change, hydrating cold children on first sight. */
|
|
42
|
+
noteStatus(session: Session, status: 'idle' | 'running'): void;
|
|
43
|
+
/** Mark a disposed session gone so its running tools settle. */
|
|
44
|
+
noteGone(session: Session): void;
|
|
45
|
+
/**
|
|
46
|
+
* Rebuild the roster around the active root: live sessions hydrate from
|
|
47
|
+
* their own events, then the durable catalog lists children that are not
|
|
48
|
+
* loaded. A stale listing is fenced by the epoch and a root re-check.
|
|
49
|
+
*/
|
|
50
|
+
sync(): void;
|
|
51
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubagentTracker — Session/SessionEvent stream -> published TuiSubagentRoster.
|
|
3
|
+
*
|
|
4
|
+
* Owns the live SubagentRoster, the epoch that fences the async catalog
|
|
5
|
+
* listing, and the snapshot-identity dedup that keeps unchanged rosters off
|
|
6
|
+
* the wire. The controller supplies Harness lookups (depth, agent status,
|
|
7
|
+
* session list, durable children) and owns where the snapshot lands.
|
|
8
|
+
*/
|
|
9
|
+
import { SubagentRoster } from "./subagent-roster.js";
|
|
10
|
+
export class SubagentTracker {
|
|
11
|
+
#deps;
|
|
12
|
+
#roster = new SubagentRoster();
|
|
13
|
+
#published;
|
|
14
|
+
#epoch = 0;
|
|
15
|
+
constructor(deps) {
|
|
16
|
+
this.#deps = deps;
|
|
17
|
+
}
|
|
18
|
+
/** Whether the roster already tracks this session id. */
|
|
19
|
+
owns(id) {
|
|
20
|
+
return this.#roster.owns(id);
|
|
21
|
+
}
|
|
22
|
+
/** The current published snapshot, or undefined for an empty roster. */
|
|
23
|
+
snapshot() {
|
|
24
|
+
return this.#roster.snapshot();
|
|
25
|
+
}
|
|
26
|
+
/** Drop all tracked children and invalidate any in-flight catalog listing. */
|
|
27
|
+
reset() {
|
|
28
|
+
this.#epoch += 1;
|
|
29
|
+
this.#roster.reset();
|
|
30
|
+
}
|
|
31
|
+
/** Remember a freshly created session when it descends from the root. */
|
|
32
|
+
noteSession(session) {
|
|
33
|
+
const depth = this.#deps.depth(session);
|
|
34
|
+
if (depth === undefined)
|
|
35
|
+
return;
|
|
36
|
+
const parentId = session.header.parentSession;
|
|
37
|
+
this.#roster.remember({
|
|
38
|
+
id: session.id,
|
|
39
|
+
...(parentId === undefined ? {} : { parentId }),
|
|
40
|
+
depth,
|
|
41
|
+
phase: this.#deps.agentStatus(session.id) === 'running' ? 'running' : 'starting',
|
|
42
|
+
});
|
|
43
|
+
this.#publish();
|
|
44
|
+
}
|
|
45
|
+
/** Fold one durable child event into its roster row. */
|
|
46
|
+
noteEvent(session, event) {
|
|
47
|
+
const depth = this.#deps.depth(session);
|
|
48
|
+
if (depth === undefined)
|
|
49
|
+
return;
|
|
50
|
+
this.#roster.apply(session, depth, event, this.#deps.agentStatus(session.id));
|
|
51
|
+
this.#publish();
|
|
52
|
+
}
|
|
53
|
+
/** Add the direct children a Session's durable catalog declares. */
|
|
54
|
+
observeCatalog(session, events) {
|
|
55
|
+
if (this.#roster.observeCatalog(session.id, events))
|
|
56
|
+
this.#publish();
|
|
57
|
+
}
|
|
58
|
+
/** Apply a live agent-status change, hydrating cold children on first sight. */
|
|
59
|
+
noteStatus(session, status) {
|
|
60
|
+
if (this.#roster.owns(session.id)) {
|
|
61
|
+
this.#roster.setAgentStatus(session.id, status);
|
|
62
|
+
this.#publish();
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const depth = this.#deps.depth(session);
|
|
66
|
+
if (depth === undefined)
|
|
67
|
+
return;
|
|
68
|
+
this.#roster.hydrate(session, depth, this.#deps.agentStatus(session.id) ?? status);
|
|
69
|
+
this.#publish();
|
|
70
|
+
}
|
|
71
|
+
/** Mark a disposed session gone so its running tools settle. */
|
|
72
|
+
noteGone(session) {
|
|
73
|
+
if (!this.#roster.owns(session.id))
|
|
74
|
+
return;
|
|
75
|
+
this.#roster.setAgentStatus(session.id, 'gone');
|
|
76
|
+
this.#publish();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Rebuild the roster around the active root: live sessions hydrate from
|
|
80
|
+
* their own events, then the durable catalog lists children that are not
|
|
81
|
+
* loaded. A stale listing is fenced by the epoch and a root re-check.
|
|
82
|
+
*/
|
|
83
|
+
sync() {
|
|
84
|
+
const rootId = this.#deps.rootId();
|
|
85
|
+
const epoch = this.#epoch + 1;
|
|
86
|
+
this.#epoch = epoch;
|
|
87
|
+
if (rootId === undefined) {
|
|
88
|
+
this.#roster.reset();
|
|
89
|
+
this.#publish();
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.#roster.reset(rootId);
|
|
93
|
+
for (const session of this.#deps.sessions()) {
|
|
94
|
+
const depth = this.#deps.depth(session);
|
|
95
|
+
if (depth === undefined)
|
|
96
|
+
continue;
|
|
97
|
+
this.#roster.hydrate(session, depth, this.#deps.agentStatus(session.id));
|
|
98
|
+
}
|
|
99
|
+
this.#publish();
|
|
100
|
+
const listed = this.#deps.listChildren(rootId);
|
|
101
|
+
if (listed === undefined)
|
|
102
|
+
return;
|
|
103
|
+
void listed.then((entries) => {
|
|
104
|
+
if (epoch !== this.#epoch || this.#deps.rootId() !== rootId)
|
|
105
|
+
return;
|
|
106
|
+
for (const entry of entries) {
|
|
107
|
+
this.#roster.remember({
|
|
108
|
+
id: entry.id,
|
|
109
|
+
depth: 1,
|
|
110
|
+
// A listing may declare that it does not know the child's mode.
|
|
111
|
+
...(entry.mode === 'unknown' ? {} : { mode: entry.mode }),
|
|
112
|
+
...(entry.label === undefined ? {} : { label: entry.label }),
|
|
113
|
+
phase: this.#deps.agentStatus(entry.id) === 'running' ? 'running' : 'waiting',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
this.#publish();
|
|
117
|
+
}, () => undefined);
|
|
118
|
+
}
|
|
119
|
+
/** Push the roster when its snapshot identity changed since the last push. */
|
|
120
|
+
#publish() {
|
|
121
|
+
const roster = this.#roster.snapshot();
|
|
122
|
+
if (roster === this.#published)
|
|
123
|
+
return;
|
|
124
|
+
this.#published = roster;
|
|
125
|
+
this.#deps.publish(roster);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=subagent-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagent-tracker.js","sourceRoot":"","sources":["../../src/session/subagent-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAiBrD,MAAM,OAAO,eAAe;IACjB,KAAK,CAAqB;IAC1B,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IACvC,UAAU,CAA+B;IACzC,MAAM,GAAG,CAAC,CAAA;IAEV,YAAY,IAAyB;QACnC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IACnB,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC,EAAU;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,wEAAwE;IACxE,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;IAED,8EAA8E;IAC9E,KAAK;QACH,IAAI,CAAC,MAAM,IAAI,CAAC,CAAA;QAChB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,yEAAyE;IACzE,WAAW,CAAC,OAAgB;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAA;QAC7C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YACpB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC/C,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;SACjF,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,wDAAwD;IACxD,SAAS,CAAC,OAAgB,EAAE,KAAmB;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7E,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,oEAAoE;IACpE,cAAc,CAAC,OAAgB,EAAE,MAA+B;QAC9D,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;IACtE,CAAC;IAED,gFAAgF;IAChF,UAAU,CAAC,OAAgB,EAAE,MAA0B;QACrD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAC/C,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,CAAA;QAClF,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,gEAAgE;IAChE,QAAQ,CAAC,OAAgB;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAM;QAC1C,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;YACpB,IAAI,CAAC,QAAQ,EAAE,CAAA;YACf,OAAM;QACR,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC1B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAQ;YACjC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1E,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAA;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAM;QAChC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,MAAM;gBAAE,OAAM;YACnE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;oBACpB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,KAAK,EAAE,CAAC;oBACR,gEAAgE;oBAChE,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;oBACzD,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;oBAC5D,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;iBAC9E,CAAC,CAAA;YACJ,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAA;QACjB,CAAC,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IACrB,CAAC;IAED,8EAA8E;IAC9E,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAA;QACtC,IAAI,MAAM,KAAK,IAAI,CAAC,UAAU;YAAE,OAAM;QACtC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5B,CAAC;CACF"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Durable TUI appearance and status-line preferences
|
|
2
|
+
* Durable TUI appearance and status-line preferences as volatile plugin config.
|
|
3
3
|
* @module @agi-fans/dsh-tui
|
|
4
4
|
*/
|
|
5
|
+
import type { Volatile } from '@deepseek-ai/cordis';
|
|
5
6
|
import z from '@deepseek-ai/schemastery';
|
|
6
7
|
import { type StartupChangelogMode } from './release-notes.ts';
|
|
7
8
|
import { type StatusBarConfig, type StatusPreset } from '../chrome/status-config.ts';
|
|
@@ -9,22 +10,44 @@ import { type ThemeName } from '../chrome/theme.ts';
|
|
|
9
10
|
/** Available terminal animation policies. */
|
|
10
11
|
export declare const MOTION_MODES: readonly ["full", "reduced", "off"];
|
|
11
12
|
export type MotionMode = typeof MOTION_MODES[number];
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Profile entry id owning these preferences. A form edit is addressed to the
|
|
15
|
+
* entry, so this is the id of the `@agi-fans/dsh-tui` row in the composition,
|
|
16
|
+
* never a section of a separate settings document.
|
|
17
|
+
*/
|
|
18
|
+
export declare const TUI_SETTINGS_ENTRY = "tui";
|
|
19
|
+
/** Durable TUI preferences as live references on the owning entry's config. */
|
|
15
20
|
export interface TuiSettings {
|
|
16
|
-
theme: ThemeName
|
|
17
|
-
colors: boolean
|
|
18
|
-
motion: MotionMode
|
|
19
|
-
terminalProgress: boolean
|
|
20
|
-
expandTools: boolean
|
|
21
|
-
checkUpdates: boolean
|
|
22
|
-
startupChangelog: StartupChangelogMode
|
|
23
|
-
notifications: 'off' | 'long-running' | 'always'
|
|
24
|
-
notificationThreshold: '15s' | '30s' | '1m' | '2m'
|
|
25
|
-
statusBar
|
|
26
|
-
/** Legacy input retained so older
|
|
27
|
-
statusPreset
|
|
21
|
+
theme: Volatile<ThemeName>;
|
|
22
|
+
colors: Volatile<boolean | undefined>;
|
|
23
|
+
motion: Volatile<MotionMode>;
|
|
24
|
+
terminalProgress: Volatile<boolean>;
|
|
25
|
+
expandTools: Volatile<boolean>;
|
|
26
|
+
checkUpdates: Volatile<boolean>;
|
|
27
|
+
startupChangelog: Volatile<StartupChangelogMode>;
|
|
28
|
+
notifications: Volatile<'off' | 'long-running' | 'always'>;
|
|
29
|
+
notificationThreshold: Volatile<'15s' | '30s' | '1m' | '2m'>;
|
|
30
|
+
statusBar: Volatile<StatusBarConfig | undefined>;
|
|
31
|
+
/** Legacy input retained so older documents can be migrated. */
|
|
32
|
+
statusPreset: Volatile<StatusPreset | undefined>;
|
|
28
33
|
}
|
|
29
|
-
/**
|
|
30
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Schema: palette, SGR, tool expansion, and status-line detail. Every field is
|
|
36
|
+
* volatile, so a settings edit commits into these references and the provider
|
|
37
|
+
* re-reads them instead of remounting. `colors` stays undefined until the
|
|
38
|
+
* provider resolves it against the output stream, and the two migration inputs
|
|
39
|
+
* stay undefined unless a value was written.
|
|
40
|
+
*/
|
|
41
|
+
export declare const TUI_SETTINGS_FIELDS: {
|
|
42
|
+
readonly theme: z<"dark" | "light" | "midnight" | "solarized" | "catppuccin" | "dracula" | "nord" | "gruvbox" | "rose-pine" | "mono", "dark" | "light" | "midnight" | "solarized" | "catppuccin" | "dracula" | "nord" | "gruvbox" | "rose-pine" | "mono", "volatile-defined">;
|
|
43
|
+
readonly colors: z<boolean, boolean, "volatile">;
|
|
44
|
+
readonly motion: z<"full" | "reduced" | "off", "full" | "reduced" | "off", "volatile-defined">;
|
|
45
|
+
readonly terminalProgress: z<boolean, boolean, "volatile-defined">;
|
|
46
|
+
readonly expandTools: z<boolean, boolean, "volatile-defined">;
|
|
47
|
+
readonly checkUpdates: z<boolean, boolean, "volatile-defined">;
|
|
48
|
+
readonly startupChangelog: z<"summary" | "expanded" | "hidden", "summary" | "expanded" | "hidden", "volatile-defined">;
|
|
49
|
+
readonly notifications: z<"off" | "long-running" | "always", "off" | "long-running" | "always", "volatile-defined">;
|
|
50
|
+
readonly notificationThreshold: z<"15s" | "30s" | "1m" | "2m", "15s" | "30s" | "1m" | "2m", "volatile-defined">;
|
|
51
|
+
readonly statusBar: z<any, any, "volatile" | "volatile-defined">;
|
|
52
|
+
readonly statusPreset: z<"minimal" | "compact" | "full", "minimal" | "compact" | "full", "volatile">;
|
|
53
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Durable TUI appearance and status-line preferences
|
|
2
|
+
* Durable TUI appearance and status-line preferences as volatile plugin config.
|
|
3
3
|
* @module @agi-fans/dsh-tui
|
|
4
4
|
*/
|
|
5
5
|
import z from '@deepseek-ai/schemastery';
|
|
@@ -8,42 +8,60 @@ import { STATUS_COLOR_TOKENS, STATUS_GROUP_IDS, STATUS_ITEM_IDS, STATUS_META_IDS
|
|
|
8
8
|
import { THEME_NAMES } from "../chrome/theme.js";
|
|
9
9
|
/** Available terminal animation policies. */
|
|
10
10
|
export const MOTION_MODES = ['full', 'reduced', 'off'];
|
|
11
|
-
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Profile entry id owning these preferences. A form edit is addressed to the
|
|
13
|
+
* entry, so this is the id of the `@agi-fans/dsh-tui` row in the composition,
|
|
14
|
+
* never a section of a separate settings document.
|
|
15
|
+
*/
|
|
16
|
+
export const TUI_SETTINGS_ENTRY = 'tui';
|
|
17
|
+
/**
|
|
18
|
+
* Present-or-absent live object. The single-member union is what keeps an
|
|
19
|
+
* omitted `statusBar` undefined instead of materializing every default, so
|
|
20
|
+
* `resolveStatusBarConfig` still falls back to the legacy preset or the
|
|
21
|
+
* shipped default; the explicit annotation keeps the emitted declaration
|
|
22
|
+
* portable.
|
|
23
|
+
*/
|
|
24
|
+
const STATUS_BAR_SCHEMA = z.union([z.object({
|
|
25
|
+
enabled: z.boolean().default(true),
|
|
26
|
+
labels: z.union([...STATUS_LABEL_STYLES]).default('compact'),
|
|
27
|
+
groups: z.array(z.union([...STATUS_GROUP_IDS])).default([...STATUS_GROUP_IDS]),
|
|
28
|
+
order: z.array(z.union([...STATUS_GROUP_IDS])),
|
|
29
|
+
meta: z.array(z.union([...STATUS_META_IDS])),
|
|
30
|
+
metaOrder: z.array(z.union([...STATUS_META_IDS])),
|
|
31
|
+
colors: z.object({
|
|
32
|
+
model: z.union([...STATUS_COLOR_TOKENS]),
|
|
33
|
+
effort: z.union([...STATUS_COLOR_TOKENS]),
|
|
34
|
+
path: z.union([...STATUS_COLOR_TOKENS]),
|
|
35
|
+
git: z.union([...STATUS_COLOR_TOKENS]),
|
|
36
|
+
session: z.union([...STATUS_COLOR_TOKENS]),
|
|
37
|
+
metrics: z.union([...STATUS_COLOR_TOKENS]),
|
|
38
|
+
context: z.union([...STATUS_COLOR_TOKENS]),
|
|
39
|
+
cache: z.union([...STATUS_COLOR_TOKENS]),
|
|
40
|
+
tokens: z.union([...STATUS_COLOR_TOKENS]),
|
|
41
|
+
speed: z.union([...STATUS_COLOR_TOKENS]),
|
|
42
|
+
durations: z.union([...STATUS_COLOR_TOKENS]),
|
|
43
|
+
counts: z.union([...STATUS_COLOR_TOKENS]),
|
|
44
|
+
}),
|
|
45
|
+
sides: z.object(Object.fromEntries(STATUS_ITEM_IDS.map(id => [id, z.union([...STATUS_SIDES])]))),
|
|
46
|
+
})]);
|
|
47
|
+
/**
|
|
48
|
+
* Schema: palette, SGR, tool expansion, and status-line detail. Every field is
|
|
49
|
+
* volatile, so a settings edit commits into these references and the provider
|
|
50
|
+
* re-reads them instead of remounting. `colors` stays undefined until the
|
|
51
|
+
* provider resolves it against the output stream, and the two migration inputs
|
|
52
|
+
* stay undefined unless a value was written.
|
|
53
|
+
*/
|
|
54
|
+
export const TUI_SETTINGS_FIELDS = {
|
|
55
|
+
theme: z.union([...THEME_NAMES]).default('dark').volatile(),
|
|
56
|
+
colors: z.boolean().volatile(),
|
|
57
|
+
motion: z.union([...MOTION_MODES]).default('full').volatile(),
|
|
58
|
+
terminalProgress: z.boolean().default(false).volatile(),
|
|
59
|
+
expandTools: z.boolean().default(false).volatile(),
|
|
60
|
+
checkUpdates: z.boolean().default(true).volatile(),
|
|
61
|
+
startupChangelog: z.union([...STARTUP_CHANGELOG_MODES]).default('summary').volatile(),
|
|
62
|
+
notifications: z.union(['off', 'long-running', 'always']).default('off').volatile(),
|
|
63
|
+
notificationThreshold: z.union(['15s', '30s', '1m', '2m']).default('30s').volatile(),
|
|
64
|
+
statusBar: STATUS_BAR_SCHEMA.volatile(),
|
|
65
|
+
statusPreset: z.union([...STATUS_PRESETS]).volatile(),
|
|
66
|
+
};
|
|
49
67
|
//# sourceMappingURL=tui-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui-settings.js","sourceRoot":"","sources":["../../src/session/tui-settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"tui-settings.js","sourceRoot":"","sources":["../../src/session/tui-settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,uBAAuB,EAA6B,MAAM,oBAAoB,CAAA;AACvF,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,cAAc,GAGf,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAA;AAEhE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAU,CAAA;AAG/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAA;AAkBvC;;;;;;GAMG;AACH,MAAM,iBAAiB,GAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5D,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC5D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAC9E,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAC9C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;QAC5C,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACzC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACvC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACtC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YAC1C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YAC1C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACzC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YACxC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC;SAC1C,CAAC;QACF,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACjG,CAAC,CAAC,CAAC,CAAA;AAEJ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC3D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC7D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACvD,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAClD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAClD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACrF,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAC5F,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAC7F,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACvC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAA"}
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
/** Cached, transport-neutral npm update decision. */
|
|
2
|
-
|
|
3
|
-
const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/u.exec(version);
|
|
4
|
-
if (match?.[1] === undefined || match[2] === undefined || match[3] === undefined)
|
|
5
|
-
return undefined;
|
|
6
|
-
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
7
|
-
}
|
|
2
|
+
import { compareVersions } from "./version-compare.js";
|
|
8
3
|
/** Whether a registry version is newer than the running package. */
|
|
9
4
|
export function isNewerVersion(candidate, current) {
|
|
10
|
-
|
|
11
|
-
const right = numericVersion(current);
|
|
12
|
-
if (left === undefined || right === undefined)
|
|
13
|
-
return false;
|
|
14
|
-
for (let index = 0; index < left.length; index += 1) {
|
|
15
|
-
if ((left[index] ?? 0) !== (right[index] ?? 0))
|
|
16
|
-
return (left[index] ?? 0) > (right[index] ?? 0);
|
|
17
|
-
}
|
|
18
|
-
return false;
|
|
5
|
+
return compareVersions(candidate, current) > 0;
|
|
19
6
|
}
|
|
20
7
|
/** Resolve the latest version through a bounded cache and return only actionable updates. */
|
|
21
8
|
export async function checkForUpdate(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/session/update-check.ts"],"names":[],"mappings":"AAAA,qDAAqD;
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/session/update-check.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAOtD,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAe;IAC/D,OAAO,eAAe,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAA;AAChD,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAOpC;IACC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAA;IACxC,IAAI,aAAqB,CAAA;IACzB,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC/E,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IACtC,CAAC;SAAM,CAAC;QACN,aAAa,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAA;QAC3C,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,EAAE,CAAC,CAAA;IACrE,CAAC;IACD,OAAO,cAAc,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1F,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Three-part numeric version comparison shared by update checks and release notes. */
|
|
2
|
+
function versionParts(version) {
|
|
3
|
+
const match = /^(\d+)\.(\d+)\.(\d+)(?:[-+].*)?$/u.exec(version);
|
|
4
|
+
if (match?.[1] === undefined || match[2] === undefined || match[3] === undefined)
|
|
5
|
+
return undefined;
|
|
6
|
+
return [Number(match[1]), Number(match[2]), Number(match[3])];
|
|
7
|
+
}
|
|
8
|
+
/** Compare two `major.minor.patch` versions; unparsable inputs compare equal. */
|
|
9
|
+
export function compareVersions(left, right) {
|
|
10
|
+
const a = versionParts(left);
|
|
11
|
+
const b = versionParts(right);
|
|
12
|
+
if (a === undefined || b === undefined)
|
|
13
|
+
return 0;
|
|
14
|
+
for (let index = 0; index < a.length; index += 1) {
|
|
15
|
+
const difference = (a[index] ?? 0) - (b[index] ?? 0);
|
|
16
|
+
if (difference !== 0)
|
|
17
|
+
return difference;
|
|
18
|
+
}
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=version-compare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-compare.js","sourceRoot":"","sources":["../../src/session/version-compare.ts"],"names":[],"mappings":"AAAA,uFAAuF;AAEvF,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,mCAAmC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAClG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/D,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAC7B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,CAAA;IACzC,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -5,6 +5,8 @@ import { type DirReader, type PathSearcher } from './path-complete.ts';
|
|
|
5
5
|
export interface SessionMentionCandidate {
|
|
6
6
|
sessionId: string;
|
|
7
7
|
label: string;
|
|
8
|
+
/** Presentation title preferred over {@link label}, e.g. a subagent's durable creation label. */
|
|
9
|
+
displayTitle?: string;
|
|
8
10
|
cwd?: string;
|
|
9
11
|
}
|
|
10
12
|
/** List other sessions for the live `@` token. */
|
package/lib/views/at-complete.js
CHANGED
|
@@ -35,9 +35,9 @@ function sessionItems(candidates) {
|
|
|
35
35
|
return candidates.map((candidate) => ({
|
|
36
36
|
value: formatSessionReferenceMention({
|
|
37
37
|
sessionId: SessionId(candidate.sessionId),
|
|
38
|
-
label: candidate.label,
|
|
38
|
+
label: candidate.displayTitle ?? candidate.label,
|
|
39
39
|
}),
|
|
40
|
-
label: candidate.label,
|
|
40
|
+
label: candidate.displayTitle ?? candidate.label,
|
|
41
41
|
...(candidate.cwd === undefined ? {} : { description: candidate.cwd }),
|
|
42
42
|
kind: 'session',
|
|
43
43
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"at-complete.js","sourceRoot":"","sources":["../../src/views/at-complete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAA;AAElF,OAAO,EACL,YAAY,EACZ,qBAAqB,GAGtB,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"at-complete.js","sourceRoot":"","sources":["../../src/views/at-complete.ts"],"names":[],"mappings":"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"}
|