@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.
Files changed (95) hide show
  1. package/lib/CHANGELOG.md +53 -1
  2. package/lib/chrome/status-config.d.ts +4 -1
  3. package/lib/chrome/status-config.js.map +1 -1
  4. package/lib/chrome/tool-args.d.ts +9 -0
  5. package/lib/chrome/tool-args.js +20 -0
  6. package/lib/chrome/tool-args.js.map +1 -0
  7. package/lib/chrome/tool-renderers.js +4 -15
  8. package/lib/chrome/tool-renderers.js.map +1 -1
  9. package/lib/commands/auth.js +4 -2
  10. package/lib/commands/auth.js.map +1 -1
  11. package/lib/commands/jobs.d.ts +2 -2
  12. package/lib/commands/jobs.js +2 -2
  13. package/lib/commands/jobs.js.map +1 -1
  14. package/lib/commands/session.js +2 -4
  15. package/lib/commands/session.js.map +1 -1
  16. package/lib/definition.d.ts +3 -0
  17. package/lib/definition.js.map +1 -1
  18. package/lib/index.d.ts +1 -1
  19. package/lib/index.js +1 -1
  20. package/lib/index.js.map +1 -1
  21. package/lib/runtime/composer-images.d.ts +44 -0
  22. package/lib/runtime/composer-images.js +149 -0
  23. package/lib/runtime/composer-images.js.map +1 -0
  24. package/lib/runtime/herdr-agent.d.ts +95 -0
  25. package/lib/runtime/herdr-agent.js +258 -0
  26. package/lib/runtime/herdr-agent.js.map +1 -0
  27. package/lib/runtime/plain-tui.d.ts +34 -0
  28. package/lib/runtime/plain-tui.js +119 -0
  29. package/lib/runtime/plain-tui.js.map +1 -0
  30. package/lib/runtime/provider-local.d.ts +46 -7
  31. package/lib/runtime/provider-local.js +181 -299
  32. package/lib/runtime/provider-local.js.map +1 -1
  33. package/lib/runtime/session-runtime.d.ts +9 -1
  34. package/lib/runtime/session-runtime.js +2 -2
  35. package/lib/runtime/session-runtime.js.map +1 -1
  36. package/lib/runtime/startup-notices.js +6 -9
  37. package/lib/runtime/startup-notices.js.map +1 -1
  38. package/lib/runtime/tool-presentation.js +18 -3
  39. package/lib/runtime/tool-presentation.js.map +1 -1
  40. package/lib/session/content-text.d.ts +12 -0
  41. package/lib/session/content-text.js +13 -0
  42. package/lib/session/content-text.js.map +1 -0
  43. package/lib/session/history-store.js.map +1 -0
  44. package/lib/session/job-notice.d.ts +2 -2
  45. package/lib/session/job-notice.js.map +1 -1
  46. package/lib/session/json-file.d.ts +5 -0
  47. package/lib/session/json-file.js +21 -0
  48. package/lib/session/json-file.js.map +1 -0
  49. package/lib/session/model-favorites.js +15 -25
  50. package/lib/session/model-favorites.js.map +1 -1
  51. package/lib/session/release-notes.js +1 -18
  52. package/lib/session/release-notes.js.map +1 -1
  53. package/lib/session/session-configuration.d.ts +0 -3
  54. package/lib/session/session-configuration.js +0 -4
  55. package/lib/session/session-configuration.js.map +1 -1
  56. package/lib/session/session-controller.d.ts +6 -4
  57. package/lib/session/session-controller.js +160 -182
  58. package/lib/session/session-controller.js.map +1 -1
  59. package/lib/session/session-library.d.ts +20 -0
  60. package/lib/session/session-library.js +55 -13
  61. package/lib/session/session-library.js.map +1 -1
  62. package/lib/session/subagent-roster.js +16 -46
  63. package/lib/session/subagent-roster.js.map +1 -1
  64. package/lib/session/subagent-tracker.d.ts +51 -0
  65. package/lib/session/subagent-tracker.js +128 -0
  66. package/lib/session/subagent-tracker.js.map +1 -0
  67. package/lib/session/tui-settings.d.ts +41 -18
  68. package/lib/session/tui-settings.js +57 -39
  69. package/lib/session/tui-settings.js.map +1 -1
  70. package/lib/session/update-check.js +2 -15
  71. package/lib/session/update-check.js.map +1 -1
  72. package/lib/session/version-compare.d.ts +3 -0
  73. package/lib/session/version-compare.js +21 -0
  74. package/lib/session/version-compare.js.map +1 -0
  75. package/lib/views/at-complete.d.ts +2 -0
  76. package/lib/views/at-complete.js +2 -2
  77. package/lib/views/at-complete.js.map +1 -1
  78. package/lib/views/event-views.d.ts +11 -270
  79. package/lib/views/event-views.js +21 -976
  80. package/lib/views/event-views.js.map +1 -1
  81. package/lib/views/settings-list.d.ts +2 -2
  82. package/lib/views/settings-list.js +12 -11
  83. package/lib/views/settings-list.js.map +1 -1
  84. package/lib/views/transcript-export.js +0 -2
  85. package/lib/views/transcript-export.js.map +1 -1
  86. package/lib/views/transcript-render.d.ts +179 -0
  87. package/lib/views/transcript-render.js +916 -0
  88. package/lib/views/transcript-render.js.map +1 -0
  89. package/lib/views/transcript-types.d.ts +104 -0
  90. package/lib/views/transcript-types.js +53 -0
  91. package/lib/views/transcript-types.js.map +1 -0
  92. package/package.json +39 -37
  93. package/lib/views/history-store.js.map +0 -1
  94. /package/lib/{views → session}/history-store.d.ts +0 -0
  95. /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":"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"}
@@ -1,7 +1,8 @@
1
1
  /**
2
- * Durable TUI appearance and status-line preferences on the user-settings seam.
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
- /** Settings namespace owned by the local TUI provider. */
13
- export declare const TUI_SETTINGS_NAMESPACE = "omdsh-tui";
14
- /** Durable TUI section stored in the user settings document. */
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?: StatusBarConfig;
26
- /** Legacy input retained so older settings documents can be migrated. */
27
- statusPreset?: 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
- /** Schema: palette, SGR, tool expansion, and status-line detail. */
30
- export declare const TuiSettingsSchema: z<TuiSettings>;
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 on the user-settings seam.
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
- /** Settings namespace owned by the local TUI provider. */
12
- export const TUI_SETTINGS_NAMESPACE = 'omdsh-tui';
13
- /** Schema: palette, SGR, tool expansion, and status-line detail. */
14
- export const TuiSettingsSchema = z.object({
15
- theme: z.union([...THEME_NAMES]).default('dark'),
16
- colors: z.boolean().default(true),
17
- motion: z.union([...MOTION_MODES]).default('full'),
18
- terminalProgress: z.boolean().default(false),
19
- expandTools: z.boolean().default(false),
20
- checkUpdates: z.boolean().default(true),
21
- startupChangelog: z.union([...STARTUP_CHANGELOG_MODES]).default('summary'),
22
- notifications: z.union(['off', 'long-running', 'always']).default('off'),
23
- notificationThreshold: z.union(['15s', '30s', '1m', '2m']).default('30s'),
24
- statusBar: 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
- statusPreset: z.union([...STATUS_PRESETS]),
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":"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"}
1
+ {"version":3,"file":"tui-settings.js","sourceRoot":"","sources":["../../src/session/tui-settings.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,8 @@
1
1
  /** Cached, transport-neutral npm update decision. */
2
- function numericVersion(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
- }
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
- const left = numericVersion(candidate);
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;AAOrD,SAAS,cAAc,CAAC,OAAe;IACrC,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,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,SAAiB,EAAE,OAAe;IAC/D,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAC3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IACjG,CAAC;IACD,OAAO,KAAK,CAAA;AACd,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"}
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,3 @@
1
+ /** Three-part numeric version comparison shared by update checks and release notes. */
2
+ /** Compare two `major.minor.patch` versions; unparsable inputs compare equal. */
3
+ export declare function compareVersions(left: string, right: string): number;
@@ -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. */
@@ -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":"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"}
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;AAuB3B,MAAM,YAAY,GAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AAC/F,MAAM,eAAe,GAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AAExG,oEAAoE;AACpE,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,MAAM,GAAG,KAAK;IAC1D,OAAO,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AAClF,CAAC;AAED,SAAS,QAAQ,CAAC,SAAiB;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9D,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,gBAAgB,CACvB,UAA6C,EAC7C,MAAe;IAEf,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAA;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,KAAK,WAAW,CAAA;QAChD,OAAO,CAAC;gBACN,KAAK;gBACL,KAAK,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnE,IAAI,EAAE,MAAe;aACtB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,UAA8C;IAClE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpC,KAAK,EAAE,6BAA6B,CAAC;YACnC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC;YACzC,KAAK,EAAE,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,KAAK;SACjD,CAAC;QACF,KAAK,EAAE,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,KAAK;QAChD,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC;QACtE,IAAI,EAAE,SAAS;KAChB,CAAC,CAAC,CAAA;AACL,CAAC;AAED,SAAS,YAAY,CACnB,KAAkC,EAClC,QAAqC;IAErC,MAAM,KAAK,GAAuB,EAAE,CAAA;IACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,CAAA;IACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,QAAQ,CAAC,CAAA;IACjE,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAQ,KAA4B,CAAC,IAAI,KAAK,YAAY,CAAA;AAC5D,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,MAAc,EACd,IASC,EACD,WAAoC,EAAE;IAEtC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAChD,MAAM,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACnC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;IAChF,IAAI,KAAK,GAAuB,EAAE,CAAA;IAClC,IAAI,IAAI,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,KAAK,GAAG,gBAAgB,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAA;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,YAAY,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YACpC,KAAK,GAAG,EAAE,CAAA;QACZ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,CAAC,MAAM,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAA;IAClF,CAAC;IACD,IAAI,QAAQ,GAAuB,EAAE,CAAA;IACrC,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAChF,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,YAAY,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YACpC,QAAQ,GAAG,EAAE,CAAA;QACf,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAA;AACrC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,+BAA+B,CAC7C,KAAkC,EAClC,IAAY,EACZ,MAAc,CAAC;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAChC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;IACnE,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;QACpE,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;IACpD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}