@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 @@
1
+ {"version":3,"file":"herdr-agent.js","sourceRoot":"","sources":["../../src/runtime/herdr-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /** Non-TTY line input and incremental transcript printing. */
2
+ import type { TuiPrompt, TuiSubmission } from '../definition.ts';
3
+ import type { Block } from '../views/event-views.ts';
4
+ import type { TerminalLike } from './provider-local.ts';
5
+ export type PendingRead = {
6
+ resolve: (submission: TuiSubmission | null) => void;
7
+ signal?: AbortSignal | null;
8
+ /** Detaches this read's abort listener once the read settles. */
9
+ offAbort?: () => void;
10
+ };
11
+ export interface PlainTuiDeps {
12
+ readonly term: TerminalLike;
13
+ /** Transcript blocks, read live so `print()` always flushes the newest tail. */
14
+ blocks(): readonly Block[];
15
+ /** The in-flight human prompt's request, if one is waiting on an answer. */
16
+ promptRequest(): TuiPrompt | undefined;
17
+ /** Resolve the in-flight prompt; the provider owns prompt bookkeeping. */
18
+ finishPrompt(answer: string | null): void;
19
+ }
20
+ /**
21
+ * Pipe-mode counterpart of the TTY reader: a readline queue that buffers lines
22
+ * until the runner asks for the next submission, plus incremental transcript
23
+ * printing that emits each settled block exactly once.
24
+ */
25
+ export declare class PlainTui {
26
+ #private;
27
+ constructor(deps: PlainTuiDeps);
28
+ readline(signal?: AbortSignal): Promise<TuiSubmission | null>;
29
+ /** Print blocks that settled since the last flush. */
30
+ print(): void;
31
+ /** Forget the print cursor so a replaced transcript reprints in full. */
32
+ resetPrinted(): void;
33
+ dispose(): void;
34
+ }
@@ -0,0 +1,119 @@
1
+ /** Non-TTY line input and incremental transcript printing. */
2
+ import { createInterface } from 'node:readline';
3
+ import { blockLines } from "../views/event-views.js";
4
+ import { createTheme } from "../chrome/theme.js";
5
+ /**
6
+ * Pipe-mode counterpart of the TTY reader: a readline queue that buffers lines
7
+ * until the runner asks for the next submission, plus incremental transcript
8
+ * printing that emits each settled block exactly once.
9
+ */
10
+ export class PlainTui {
11
+ #deps;
12
+ #lineReader = null;
13
+ #pending = null;
14
+ #queue = [];
15
+ #closed = false;
16
+ #printed = 0;
17
+ constructor(deps) {
18
+ this.#deps = deps;
19
+ }
20
+ readline(signal) {
21
+ return new Promise((resolve) => {
22
+ if (this.#lineReader === null) {
23
+ this.#lineReader = createInterface({ input: this.#deps.term.input });
24
+ // Permanent listeners: once() handlers would auto-pause the input
25
+ // stream after one line and miss the EOF close.
26
+ this.#lineReader.on('line', (line) => { this.#resolveLine(line); });
27
+ this.#lineReader.on('close', () => {
28
+ this.#closed = true;
29
+ this.#resolveLine(null);
30
+ });
31
+ }
32
+ const pending = { resolve, signal: signal ?? null };
33
+ this.#pending = pending;
34
+ if (signal !== undefined) {
35
+ const onAbort = () => {
36
+ if (this.#pending !== pending)
37
+ return;
38
+ this.#pending = null;
39
+ resolve(null);
40
+ };
41
+ signal.addEventListener('abort', onAbort, { once: true });
42
+ pending.offAbort = () => { signal.removeEventListener('abort', onAbort); };
43
+ }
44
+ this.#pump();
45
+ });
46
+ }
47
+ /**
48
+ * Queue one readline delivery, then drain. A single stream chunk can carry
49
+ * several lines; every line is buffered until the runner asks for the next
50
+ * read, and EOF waits for the queue before closing the reader.
51
+ */
52
+ #resolveLine(line) {
53
+ const request = this.#deps.promptRequest();
54
+ if (request !== undefined && line !== null) {
55
+ const value = line.trim();
56
+ if (value === '') {
57
+ this.#deps.finishPrompt(null);
58
+ }
59
+ else if (request.allowCustom === false) {
60
+ const options = request.options ?? [];
61
+ const numeric = /^\d+$/u.test(value) ? Number(value) - 1 : -1;
62
+ const option = numeric >= 0
63
+ ? options[numeric]
64
+ : options.find(item => item.label.toLowerCase() === value.toLowerCase());
65
+ this.#deps.finishPrompt(option?.value ?? option?.label ?? null);
66
+ }
67
+ else {
68
+ this.#deps.finishPrompt(value);
69
+ }
70
+ return;
71
+ }
72
+ if (request !== undefined)
73
+ this.#deps.finishPrompt(null);
74
+ if (line !== null)
75
+ this.#queue.push(line);
76
+ this.#pump();
77
+ }
78
+ /** Resolve the pending read from the queue, or close it after EOF drained. */
79
+ #pump() {
80
+ const pending = this.#pending;
81
+ if (pending === null)
82
+ return;
83
+ const line = this.#queue.shift();
84
+ if (line !== undefined) {
85
+ pending.offAbort?.();
86
+ this.#pending = null;
87
+ pending.resolve({ text: line, images: [] });
88
+ return;
89
+ }
90
+ if (this.#closed) {
91
+ pending.offAbort?.();
92
+ this.#pending = null;
93
+ pending.resolve(null);
94
+ }
95
+ }
96
+ /** Print blocks that settled since the last flush. */
97
+ print() {
98
+ const theme = createTheme(false, false);
99
+ const width = this.#deps.term.width();
100
+ const blocks = this.#deps.blocks();
101
+ let out = '';
102
+ for (const block of blocks.slice(this.#printed)) {
103
+ // Pipe / CI output is not a viewport: print the full tool body.
104
+ for (const line of blockLines(block, theme, width, 0, true))
105
+ out += line + '\n';
106
+ }
107
+ this.#printed = blocks.length;
108
+ if (out !== '')
109
+ this.#deps.term.output.write(out);
110
+ }
111
+ /** Forget the print cursor so a replaced transcript reprints in full. */
112
+ resetPrinted() {
113
+ this.#printed = 0;
114
+ }
115
+ dispose() {
116
+ this.#lineReader?.close();
117
+ }
118
+ }
119
+ //# sourceMappingURL=plain-tui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-tui.js","sourceRoot":"","sources":["../../src/runtime/plain-tui.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@
10
10
  * printing of settled blocks.
11
11
  * @module @agi-fans/dsh-tui
12
12
  */
13
+ import { HerdrAgentReporter } from './herdr-agent.ts';
13
14
  import type { Context } from '@deepseek-ai/cordis';
14
15
  import type { SessionEvent } from '@deepseek-ai/dsh-session';
15
16
  import { type TuiAgentBehaviorSettingsBinding, type TuiCommand, type TuiPrompt, type TuiNoticeOptions, type TuiRecentSession, type TuiService, type TuiSessionControls, type TuiSessionStats, type TuiStatus, type TuiInputImage, type TuiInspectedSubagent, type TuiLoopStatus, type TuiSubagentRoster, type TuiSubmission } from '../definition.ts';
@@ -22,21 +23,55 @@ import { type RenderSink } from '../chrome/renderer.ts';
22
23
  import { type ThemeName } from '../chrome/theme.ts';
23
24
  import type { ToolInfo } from '../chrome/tools-list.ts';
24
25
  import { type TuiToolPresentation } from '../chrome/tool-renderers.ts';
26
+ import { type TuiSettings } from '../session/tui-settings.ts';
27
+ import z from '@deepseek-ai/schemastery';
25
28
  import { type ClipboardFileReader, type ClipboardImageReader, type ImagePathReader } from '../input/image-paste.ts';
26
29
  export declare const name = "omdsh-tui";
27
- /** Plugin config: the model label shown on the status line. */
28
- export interface Config {
30
+ /** Plugin config: the model label, event paths, and the live TUI preferences. */
31
+ export interface Config extends TuiSettings {
29
32
  /** Model name for the status line. */
30
33
  model: string;
31
- /** Emit SGR color sequences; defaults to the output stream's tty-ness, minus `NO_COLOR` / `FORCE_COLOR=0`. */
32
- colors?: boolean;
33
- /** Shipped palette; defaults to dark. */
34
- theme?: string;
35
34
  /** Optional JSONL prompt-history path. */
36
35
  historyPath?: string;
37
36
  /** Optional `{ key-id: action }` JSON file. */
38
37
  keybindingsPath?: string;
39
38
  }
39
+ /**
40
+ * Row schema. The durable preferences ride as volatile fields, so a settings
41
+ * form edit commits into their references and reaches this fiber through
42
+ * `loader/volatile-update` without remounting the terminal provider.
43
+ */
44
+ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
45
+ 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">;
46
+ colors: z<boolean, boolean, "volatile">;
47
+ motion: z<"full" | "reduced" | "off", "full" | "reduced" | "off", "volatile-defined">;
48
+ terminalProgress: z<boolean, boolean, "volatile-defined">;
49
+ expandTools: z<boolean, boolean, "volatile-defined">;
50
+ checkUpdates: z<boolean, boolean, "volatile-defined">;
51
+ startupChangelog: z<"summary" | "expanded" | "hidden", "summary" | "expanded" | "hidden", "volatile-defined">;
52
+ notifications: z<"off" | "long-running" | "always", "off" | "long-running" | "always", "volatile-defined">;
53
+ notificationThreshold: z<"15s" | "30s" | "1m" | "2m", "15s" | "30s" | "1m" | "2m", "volatile-defined">;
54
+ statusBar: z<any, any, "volatile" | "volatile-defined">;
55
+ statusPreset: z<"minimal" | "compact" | "full", "minimal" | "compact" | "full", "volatile">;
56
+ model: z<string, string, "plain">;
57
+ historyPath: z<string, string, "plain">;
58
+ keybindingsPath: z<string, string, "plain">;
59
+ }>>, Schemastery.ObjectT<NoInfer<{
60
+ 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">;
61
+ colors: z<boolean, boolean, "volatile">;
62
+ motion: z<"full" | "reduced" | "off", "full" | "reduced" | "off", "volatile-defined">;
63
+ terminalProgress: z<boolean, boolean, "volatile-defined">;
64
+ expandTools: z<boolean, boolean, "volatile-defined">;
65
+ checkUpdates: z<boolean, boolean, "volatile-defined">;
66
+ startupChangelog: z<"summary" | "expanded" | "hidden", "summary" | "expanded" | "hidden", "volatile-defined">;
67
+ notifications: z<"off" | "long-running" | "always", "off" | "long-running" | "always", "volatile-defined">;
68
+ notificationThreshold: z<"15s" | "30s" | "1m" | "2m", "15s" | "30s" | "1m" | "2m", "volatile-defined">;
69
+ statusBar: z<any, any, "volatile" | "volatile-defined">;
70
+ statusPreset: z<"minimal" | "compact" | "full", "minimal" | "compact" | "full", "volatile">;
71
+ model: z<string, string, "plain">;
72
+ historyPath: z<string, string, "plain">;
73
+ keybindingsPath: z<string, string, "plain">;
74
+ }>>, "plain">;
40
75
  /** The minimal terminal surface a LocalTui drives (process streams satisfy it). */
41
76
  export interface TerminalLike {
42
77
  output: RenderSink & {
@@ -85,6 +120,8 @@ export declare class LocalTui implements TuiService {
85
120
  alternateScreenOverlays?: boolean;
86
121
  resizeDebounceMs?: number;
87
122
  streamRenderMs?: number;
123
+ /** Herdr lifecycle reporter; production injects an environment-aware one. */
124
+ herdrReporter?: HerdrAgentReporter;
88
125
  });
89
126
  event(event: SessionEvent, presentation?: TuiToolPresentation): void;
90
127
  /**
@@ -116,8 +153,10 @@ export declare class LocalTui implements TuiService {
116
153
  stats?: TuiSessionStats;
117
154
  controls?: TuiSessionControls;
118
155
  }): void;
119
- /** Apply prefs loaded from the settings document (does not persist). */
156
+ /** Apply prefs loaded from this entry's config (does not persist). */
120
157
  applyStoredPrefs(prefs: TuiPrefs): void;
158
+ /** Currently applied preferences; sibling rows read these instead of the config references. */
159
+ prefs(): TuiPrefs;
121
160
  /** Called after a live `/settings` change. */
122
161
  setPrefsPersist(persist: (prefs: TuiPrefs) => void): void;
123
162
  bindAgentBehaviorSettings(binding: TuiAgentBehaviorSettingsBinding): () => void;