@pentoshi/clai 4.13.1 → 4.14.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 (89) hide show
  1. package/CONTRIBUTING.md +5 -3
  2. package/PROVIDERS.md +2 -0
  3. package/README.md +8 -4
  4. package/dist/agent/stream-recovery.d.ts +1 -1
  5. package/dist/agent/stream-recovery.js +5 -1
  6. package/dist/agent/stream-recovery.js.map +1 -1
  7. package/dist/classic/bootstrap/runtime-view.d.ts +6 -0
  8. package/dist/classic/bootstrap/runtime-view.js +46 -0
  9. package/dist/classic/bootstrap/runtime-view.js.map +1 -0
  10. package/dist/classic/bootstrap/terminal-session.d.ts +3 -0
  11. package/dist/classic/bootstrap/terminal-session.js +3 -0
  12. package/dist/classic/bootstrap/terminal-session.js.map +1 -1
  13. package/dist/index.js +7 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/llm/http.d.ts +2 -1
  16. package/dist/llm/http.js +3 -1
  17. package/dist/llm/http.js.map +1 -1
  18. package/dist/llm/provider-info-text.js +7 -0
  19. package/dist/llm/provider-info-text.js.map +1 -1
  20. package/dist/llm/qoder/qoder-catalog.d.ts +15 -0
  21. package/dist/llm/qoder/qoder-catalog.js +56 -0
  22. package/dist/llm/qoder/qoder-catalog.js.map +1 -0
  23. package/dist/llm/qoder/qoder-http.d.ts +13 -0
  24. package/dist/llm/qoder/qoder-http.js +55 -0
  25. package/dist/llm/qoder/qoder-http.js.map +1 -0
  26. package/dist/llm/qoder/qoder-queue.d.ts +15 -0
  27. package/dist/llm/qoder/qoder-queue.js +169 -0
  28. package/dist/llm/qoder/qoder-queue.js.map +1 -0
  29. package/dist/llm/qoder/qoder-response.d.ts +19 -0
  30. package/dist/llm/qoder/qoder-response.js +98 -0
  31. package/dist/llm/qoder/qoder-response.js.map +1 -0
  32. package/dist/llm/qoder/qoder-stream.d.ts +23 -0
  33. package/dist/llm/qoder/qoder-stream.js +75 -0
  34. package/dist/llm/qoder/qoder-stream.js.map +1 -0
  35. package/dist/llm/qoder/qoder.d.ts +4 -4
  36. package/dist/llm/qoder/qoder.js +71 -189
  37. package/dist/llm/qoder/qoder.js.map +1 -1
  38. package/dist/llm/routing/error-classification.js +2 -0
  39. package/dist/llm/routing/error-classification.js.map +1 -1
  40. package/dist/llm/routing/failure-report.d.ts +1 -1
  41. package/dist/llm/routing/failure-report.js +5 -3
  42. package/dist/llm/routing/failure-report.js.map +1 -1
  43. package/dist/llm/wire/response-errors.d.ts +1 -0
  44. package/dist/llm/wire/response-errors.js +1 -1
  45. package/dist/llm/wire/response-errors.js.map +1 -1
  46. package/dist/session-runtime/child-bridge.d.ts +10 -4
  47. package/dist/session-runtime/child-bridge.js +34 -6
  48. package/dist/session-runtime/child-bridge.js.map +1 -1
  49. package/dist/session-runtime/client.d.ts +3 -2
  50. package/dist/session-runtime/client.js +22 -9
  51. package/dist/session-runtime/client.js.map +1 -1
  52. package/dist/session-runtime/host.d.ts +4 -0
  53. package/dist/session-runtime/host.js +108 -16
  54. package/dist/session-runtime/host.js.map +1 -1
  55. package/dist/session-runtime/launch.d.ts +1 -0
  56. package/dist/session-runtime/launch.js +3 -1
  57. package/dist/session-runtime/launch.js.map +1 -1
  58. package/dist/session-runtime/start-runtime.d.ts +12 -0
  59. package/dist/session-runtime/start-runtime.js +69 -0
  60. package/dist/session-runtime/start-runtime.js.map +1 -0
  61. package/dist/session-runtime/store.js +1 -0
  62. package/dist/session-runtime/store.js.map +1 -1
  63. package/dist/session-runtime/terminal-options.d.ts +4 -0
  64. package/dist/session-runtime/terminal-options.js +49 -0
  65. package/dist/session-runtime/terminal-options.js.map +1 -0
  66. package/dist/session-runtime/types.d.ts +38 -1
  67. package/dist/session-runtime/view-manager.d.ts +38 -0
  68. package/dist/session-runtime/view-manager.js +189 -0
  69. package/dist/session-runtime/view-manager.js.map +1 -0
  70. package/dist/session-runtime/view-services.d.ts +14 -0
  71. package/dist/session-runtime/view-services.js +83 -0
  72. package/dist/session-runtime/view-services.js.map +1 -0
  73. package/dist/session-runtime/view-terminal.d.ts +29 -0
  74. package/dist/session-runtime/view-terminal.js +51 -0
  75. package/dist/session-runtime/view-terminal.js.map +1 -0
  76. package/dist/tui-v2/bootstrap/runtime-view.d.ts +6 -0
  77. package/dist/tui-v2/bootstrap/runtime-view.js +54 -0
  78. package/dist/tui-v2/bootstrap/runtime-view.js.map +1 -0
  79. package/dist/ui-core/bootstrap/composition-root.d.ts +4 -1
  80. package/dist/ui-core/bootstrap/composition-root.js +5 -4
  81. package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
  82. package/dist/ui-core/commands/session-commands.js +1 -1
  83. package/dist/ui-core/commands/session-commands.js.map +1 -1
  84. package/dist/ui-core/state/transcript-store.d.ts +7 -0
  85. package/dist/ui-core/state/transcript-store.js +53 -0
  86. package/dist/ui-core/state/transcript-store.js.map +1 -1
  87. package/dist/version.generated.d.ts +2 -2
  88. package/dist/version.generated.js +2 -2
  89. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-runtime.js","sourceRoot":"","sources":["../../src/session-runtime/start-runtime.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,7 @@ function isRuntimeMetadata(value) {
27
27
  ["starting", "running", "stopping", "failed"].includes(String(record.phase)) &&
28
28
  typeof record.busy === "boolean" &&
29
29
  (record.active === undefined || typeof record.active === "boolean") &&
30
+ (record.independentViews === undefined || typeof record.independentViews === "boolean") &&
30
31
  typeof record.attached === "boolean");
31
32
  }
32
33
  async function readMetadataPath(path) {
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/session-runtime/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/session-runtime/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RuntimeTerminalOptions, RuntimeViewFrame } from "./types.js";
2
+ export declare function runtimeTerminalOptions(ui?: RuntimeTerminalOptions["ui"], env?: NodeJS.ProcessEnv): RuntimeTerminalOptions;
3
+ export declare function parseRuntimeTerminalOptions(value: unknown): RuntimeTerminalOptions | undefined;
4
+ export declare function runtimeViewFrame(value: unknown): RuntimeViewFrame | undefined;
@@ -0,0 +1,49 @@
1
+ const TERMINAL_ENV_KEYS = new Set([
2
+ "TERM", "COLORTERM", "TERM_PROGRAM", "TERM_PROGRAM_VERSION", "COLORFGBG",
3
+ "NO_COLOR", "FORCE_COLOR", "CLAI_CLASSIC_MOUSE", "CLAI_KITTY_KEYBOARD", "TMUX",
4
+ ]);
5
+ export function runtimeTerminalOptions(ui = "auto", env = process.env) {
6
+ return {
7
+ ui,
8
+ env: Object.fromEntries([...TERMINAL_ENV_KEYS].flatMap((key) => {
9
+ const value = env[key];
10
+ return typeof value === "string" && value.length <= 256 ? [[key, value]] : [];
11
+ })),
12
+ };
13
+ }
14
+ export function parseRuntimeTerminalOptions(value) {
15
+ if (!value || typeof value !== "object")
16
+ return undefined;
17
+ const terminal = value;
18
+ if (!["auto", "classic", "tui"].includes(String(terminal.ui)) || !terminal.env || typeof terminal.env !== "object" || Array.isArray(terminal.env))
19
+ return undefined;
20
+ const entries = Object.entries(terminal.env);
21
+ if (entries.length > TERMINAL_ENV_KEYS.size || entries.some(([key, entry]) => !TERMINAL_ENV_KEYS.has(key) || typeof entry !== "string" || entry.length > 256))
22
+ return undefined;
23
+ return { ui: terminal.ui, env: Object.fromEntries(entries) };
24
+ }
25
+ export function runtimeViewFrame(value) {
26
+ if (!value || typeof value !== "object")
27
+ return undefined;
28
+ const frame = value;
29
+ if (typeof frame.clientId !== "string" || !frame.clientId || frame.clientId.length > 128)
30
+ return undefined;
31
+ if (frame.type === "view-detach")
32
+ return frame;
33
+ if (frame.type === "view-input") {
34
+ if (typeof frame.data !== "string" || frame.data.length > 44 * 1024 || !frame.data || frame.data.length % 4 !== 0 || !/^[A-Za-z0-9+/]+={0,2}$/.test(frame.data))
35
+ return undefined;
36
+ return frame;
37
+ }
38
+ if (frame.type !== "view-attach" && frame.type !== "view-resize")
39
+ return undefined;
40
+ if (!Number.isInteger(frame.columns) || !Number.isInteger(frame.rows) || frame.columns < 20 || frame.columns > 1_000 || frame.rows < 5 || frame.rows > 500)
41
+ return undefined;
42
+ if (frame.type === "view-resize")
43
+ return frame;
44
+ if (frame.type !== "view-attach")
45
+ return undefined;
46
+ const terminal = parseRuntimeTerminalOptions(frame.terminal);
47
+ return terminal ? { ...frame, terminal } : undefined;
48
+ }
49
+ //# sourceMappingURL=terminal-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-options.js","sourceRoot":"","sources":["../../src/session-runtime/terminal-options.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ export interface RuntimeMetadata {
17
17
  readonly busy: boolean;
18
18
  readonly active?: boolean | undefined;
19
19
  readonly attached: boolean;
20
+ readonly independentViews?: boolean | undefined;
20
21
  readonly error?: string | undefined;
21
22
  }
22
23
  export interface RuntimeView {
@@ -42,6 +43,11 @@ export interface RuntimeHostPayload {
42
43
  readonly columns: number;
43
44
  readonly rows: number;
44
45
  readonly idleTimeoutMs: number;
46
+ readonly independentViews?: boolean | undefined;
47
+ }
48
+ export interface RuntimeTerminalOptions {
49
+ readonly ui: "auto" | "classic" | "tui";
50
+ readonly env: Readonly<Record<string, string>>;
45
51
  }
46
52
  export type RuntimeChannelRole = "probe" | "client-control" | "client-terminal" | "child";
47
53
  export interface RuntimeAuthFrame {
@@ -53,12 +59,15 @@ export interface RuntimeAuthFrame {
53
59
  readonly columns?: number | undefined;
54
60
  readonly rows?: number | undefined;
55
61
  readonly supportsRepaint?: boolean | undefined;
62
+ readonly independentViews?: boolean | undefined;
63
+ readonly terminal?: RuntimeTerminalOptions | undefined;
56
64
  }
57
65
  export interface RuntimeAckFrame {
58
66
  readonly version: typeof RUNTIME_PROTOCOL_VERSION;
59
67
  readonly type: "ack";
60
68
  readonly sessionId: string;
61
69
  readonly sharedInput?: boolean | undefined;
70
+ readonly independentViews?: boolean | undefined;
62
71
  }
63
72
  export interface RuntimeErrorFrame {
64
73
  readonly version: typeof RUNTIME_PROTOCOL_VERSION;
@@ -88,6 +97,14 @@ export type RuntimeChildFrame = {
88
97
  readonly title?: string | undefined;
89
98
  } | {
90
99
  readonly type: "minimise";
100
+ readonly clientId?: string | undefined;
101
+ } | {
102
+ readonly type: "view-output";
103
+ readonly clientId: string;
104
+ readonly data: string;
105
+ } | {
106
+ readonly type: "view-closed";
107
+ readonly clientId: string;
91
108
  } | {
92
109
  readonly type: "exiting";
93
110
  readonly exitCode: number;
@@ -100,8 +117,28 @@ export type RuntimeChildFrame = {
100
117
  readonly sessionId: string;
101
118
  readonly closeCurrent: boolean;
102
119
  readonly fresh?: boolean | undefined;
120
+ readonly clientId?: string | undefined;
121
+ };
122
+ export type RuntimeViewFrame = {
123
+ readonly type: "view-attach";
124
+ readonly clientId: string;
125
+ readonly columns: number;
126
+ readonly rows: number;
127
+ readonly terminal: RuntimeTerminalOptions;
128
+ } | {
129
+ readonly type: "view-input";
130
+ readonly clientId: string;
131
+ readonly data: string;
132
+ } | {
133
+ readonly type: "view-resize";
134
+ readonly clientId: string;
135
+ readonly columns: number;
136
+ readonly rows: number;
137
+ } | {
138
+ readonly type: "view-detach";
139
+ readonly clientId: string;
103
140
  };
104
- export type RuntimeHostFrame = {
141
+ export type RuntimeHostFrame = RuntimeViewFrame | {
105
142
  readonly type: "pong";
106
143
  } | {
107
144
  readonly type: "input-owner";
@@ -0,0 +1,38 @@
1
+ import type { AppServices } from "../ui-core/bootstrap/composition-root.js";
2
+ import type { ConfirmationPort } from "../app/ports/confirm-port.js";
3
+ import type { SecretPort } from "../app/ports/secret-port.js";
4
+ import type { RuntimeChildBridge } from "./child-bridge.js";
5
+ import type { RuntimeTerminalOptions, RuntimeViewFrame } from "./types.js";
6
+ import { RuntimeViewTerminal } from "./view-terminal.js";
7
+ export interface RuntimeViewRenderer {
8
+ repaint(): boolean;
9
+ dispose(): Promise<void>;
10
+ }
11
+ export type RuntimeViewMount = (services: AppServices, terminal: RuntimeViewTerminal, options: RuntimeTerminalOptions) => Promise<RuntimeViewRenderer>;
12
+ export declare class RuntimeViewManager {
13
+ private readonly bridge;
14
+ private readonly mount;
15
+ private readonly views;
16
+ private readonly context;
17
+ private readonly waiting;
18
+ private readonly pending;
19
+ private readonly teardowns;
20
+ private generation;
21
+ private requests;
22
+ private currentId;
23
+ private closing;
24
+ private disposal;
25
+ private shared;
26
+ readonly confirm: ConfirmationPort;
27
+ readonly requestSecret: SecretPort["request"];
28
+ constructor(bridge: Pick<RuntimeChildBridge, "writeView" | "closeView" | "minimise" | "switchSession">, mount?: RuntimeViewMount);
29
+ bind(services: AppServices): void;
30
+ current(): AppServices | undefined;
31
+ ask<T>(request: (view: AppServices) => Promise<T>, fallback: T): Promise<T>;
32
+ receive(frame: RuntimeViewFrame): void;
33
+ private attach;
34
+ private wakeWaiting;
35
+ private cancelRequests;
36
+ detach(id: string): Promise<void>;
37
+ dispose(): Promise<void>;
38
+ }
@@ -0,0 +1,189 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { evaluateTui } from "../ui-core/bootstrap/can-use-tui.js";
3
+ import { isBunRuntime, isOpenTuiFfiError } from "../os/bun-runtime.js";
4
+ import { RuntimeViewTerminal } from "./view-terminal.js";
5
+ import { createRuntimeViewServices } from "./view-services.js";
6
+ async function mountView(services, terminal, options) {
7
+ const tui = options.ui !== "classic" && process.platform !== "win32" && isBunRuntime() && evaluateTui({ stdoutIsTTY: true, stdinIsTTY: true, columns: terminal.stdout.columns, rows: terminal.stdout.rows }).ok;
8
+ if (tui) {
9
+ try {
10
+ const { mountOpenTuiRuntimeView } = await import("../tui-v2/bootstrap/runtime-view.js");
11
+ return await mountOpenTuiRuntimeView(services, terminal, options.env);
12
+ }
13
+ catch (error) {
14
+ if (!isOpenTuiFfiError(error))
15
+ throw error;
16
+ services.toast.show("OpenTUI unavailable; using Classic", { level: "warn" });
17
+ }
18
+ }
19
+ const { mountClassicRuntimeView } = await import("../classic/bootstrap/runtime-view.js");
20
+ return await mountClassicRuntimeView(services, terminal, options.env);
21
+ }
22
+ export class RuntimeViewManager {
23
+ bridge;
24
+ mount;
25
+ views = new Map();
26
+ context = new AsyncLocalStorage();
27
+ waiting = new Set();
28
+ pending = new Set();
29
+ teardowns = new Set();
30
+ generation = 0;
31
+ requests = Promise.resolve();
32
+ currentId;
33
+ closing = false;
34
+ disposal;
35
+ shared;
36
+ confirm = {
37
+ confirmTool: (call) => this.ask((view) => view.ports.confirm.confirmTool(call), false),
38
+ confirmPentest: (call) => this.ask((view) => view.ports.confirm.confirmPentest(call), false),
39
+ confirmAgentSwitch: (info) => this.ask((view) => view.ports.confirm.confirmAgentSwitch(info), false),
40
+ };
41
+ requestSecret = (request) => this.ask((view) => view.ports.requestSecret(request), undefined);
42
+ constructor(bridge, mount = mountView) {
43
+ this.bridge = bridge;
44
+ this.mount = mount;
45
+ }
46
+ bind(services) { this.shared = services; }
47
+ current() {
48
+ const id = this.context.getStore() ?? this.currentId;
49
+ return (id ? this.views.get(id) : undefined)?.services ?? [...this.views.values()].at(-1)?.services;
50
+ }
51
+ async ask(request, fallback) {
52
+ const origin = this.context.getStore();
53
+ const generation = this.generation;
54
+ const task = this.requests.catch(() => undefined).then(async () => {
55
+ while (!this.closing && generation === this.generation) {
56
+ const view = (origin ? this.views.get(origin) : undefined) ?? (this.currentId ? this.views.get(this.currentId) : undefined) ?? [...this.views.values()].at(-1);
57
+ if (!view) {
58
+ await new Promise((resolve) => this.waiting.add(resolve));
59
+ continue;
60
+ }
61
+ this.pending.add(view);
62
+ try {
63
+ const answer = await request(view.services);
64
+ if (this.closing || generation !== this.generation)
65
+ return fallback;
66
+ if (!view.closed)
67
+ return answer;
68
+ }
69
+ finally {
70
+ this.pending.delete(view);
71
+ }
72
+ }
73
+ return fallback;
74
+ });
75
+ this.requests = task.catch(() => undefined);
76
+ return await task;
77
+ }
78
+ receive(frame) {
79
+ if (this.closing)
80
+ return;
81
+ if (frame.type === "view-attach") {
82
+ this.attach(frame);
83
+ return;
84
+ }
85
+ const view = this.views.get(frame.clientId);
86
+ if (!view)
87
+ return;
88
+ if (frame.type === "view-detach") {
89
+ void this.detach(view.id);
90
+ return;
91
+ }
92
+ if (frame.type === "view-resize") {
93
+ view.terminal.resize(frame);
94
+ return;
95
+ }
96
+ const bytes = Buffer.from(frame.data, "base64");
97
+ if (bytes.toString("base64") !== frame.data)
98
+ return;
99
+ this.currentId = view.id;
100
+ if (view.terminal.stdin.writableLength + view.terminal.stdin.readableLength + bytes.length > 1024 * 1024) {
101
+ this.bridge.closeView(view.id);
102
+ void this.detach(view.id);
103
+ return;
104
+ }
105
+ view.terminal.stdin.write(bytes);
106
+ }
107
+ attach(frame) {
108
+ const existing = this.views.get(frame.clientId);
109
+ if (existing) {
110
+ existing.terminal.resize(frame);
111
+ existing.renderer?.repaint();
112
+ return;
113
+ }
114
+ if (!this.shared || this.views.size >= 16) {
115
+ this.bridge.closeView(frame.clientId);
116
+ return;
117
+ }
118
+ const terminal = new RuntimeViewTerminal(frame, (bytes) => this.bridge.writeView(frame.clientId, bytes));
119
+ let view;
120
+ const services = createRuntimeViewServices({
121
+ shared: this.shared, terminal, options: frame.terminal,
122
+ runSession: (method, action) => {
123
+ if (method === "abort" || method === "cancelAll")
124
+ this.cancelRequests();
125
+ return this.context.run(frame.clientId, action);
126
+ },
127
+ minimise: () => this.bridge.minimise(frame.clientId),
128
+ switchSession: (sessionId, closeCurrent, fresh) => this.bridge.switchSession(sessionId, closeCurrent, fresh, frame.clientId),
129
+ repaint: () => view?.renderer?.repaint() ?? false,
130
+ hasOtherViews: () => this.views.size > 1,
131
+ });
132
+ view = { id: frame.clientId, services, terminal, closed: false, ready: Promise.resolve().then(() => this.mount(services, terminal, frame.terminal)) };
133
+ this.views.set(view.id, view);
134
+ this.currentId = view.id;
135
+ terminal.stdout.on("error", () => { if (!view.closed) {
136
+ this.bridge.closeView(view.id);
137
+ void this.detach(view.id);
138
+ } });
139
+ void view.ready.then((renderer) => { view.renderer = renderer; }, (error) => {
140
+ if (view.closed)
141
+ return;
142
+ services.toast.show(error instanceof Error ? error.message : String(error), { level: "error" });
143
+ this.bridge.closeView(view.id);
144
+ void this.detach(view.id);
145
+ });
146
+ this.wakeWaiting();
147
+ }
148
+ wakeWaiting() { for (const wake of this.waiting)
149
+ wake(); this.waiting.clear(); }
150
+ cancelRequests() {
151
+ this.generation += 1;
152
+ for (const view of this.pending)
153
+ view.services.overlay.cancelBlockingPrompt();
154
+ this.wakeWaiting();
155
+ }
156
+ detach(id) {
157
+ const view = this.views.get(id);
158
+ if (!view)
159
+ return Promise.resolve();
160
+ this.views.delete(id);
161
+ view.closed = true;
162
+ view.services.overlay.cancelBlockingPrompt();
163
+ const teardown = (async () => {
164
+ try {
165
+ const renderer = await view.ready;
166
+ await renderer.dispose();
167
+ }
168
+ catch { }
169
+ finally {
170
+ view.services.dispose();
171
+ view.terminal.dispose();
172
+ }
173
+ })();
174
+ this.teardowns.add(teardown);
175
+ void teardown.finally(() => this.teardowns.delete(teardown));
176
+ return teardown;
177
+ }
178
+ dispose() {
179
+ if (this.disposal)
180
+ return this.disposal;
181
+ this.closing = true;
182
+ this.cancelRequests();
183
+ for (const id of this.views.keys())
184
+ void this.detach(id);
185
+ this.disposal = Promise.all([...this.teardowns]).then(() => undefined);
186
+ return this.disposal;
187
+ }
188
+ }
189
+ //# sourceMappingURL=view-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-manager.js","sourceRoot":"","sources":["../../src/session-runtime/view-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { AppServices } from "../ui-core/bootstrap/composition-root.js";
2
+ import type { RuntimeTerminalOptions } from "./types.js";
3
+ import type { RuntimeViewTerminal } from "./view-terminal.js";
4
+ export interface RuntimeViewServicesOptions {
5
+ readonly shared: AppServices;
6
+ readonly terminal: RuntimeViewTerminal;
7
+ readonly options: RuntimeTerminalOptions;
8
+ readonly runSession: <T>(method: string, action: () => T) => T;
9
+ readonly minimise: () => boolean;
10
+ readonly switchSession: AppServices["requestSessionSwitch"];
11
+ readonly repaint: () => boolean;
12
+ readonly hasOtherViews: () => boolean;
13
+ }
14
+ export declare function createRuntimeViewServices(options: RuntimeViewServicesOptions): AppServices;
@@ -0,0 +1,83 @@
1
+ import { buildDefaultCommandRegistry } from "../app/commands/registry.js";
2
+ import { CancelCoordinator } from "../app/controllers/cancel-coordinator.js";
3
+ import { createSystemClipboardPort } from "../app/adapters/in-memory-clipboard-adapter.js";
4
+ import { ActionRouter } from "../ui-core/actions/action-router.js";
5
+ import { FocusController } from "../ui-core/controllers/focus-controller.js";
6
+ import { OverlayController } from "../ui-core/controllers/overlay-controller.js";
7
+ import { SelectionController } from "../ui-core/controllers/selection-controller.js";
8
+ import { ToastController } from "../ui-core/controllers/toast-controller.js";
9
+ import { InterruptibleController } from "../ui-core/controllers/interruptible-controller.js";
10
+ import { detectCapabilities } from "../ui-core/bootstrap/capabilities.js";
11
+ import { createOverlayConfirmPort, createOverlaySecretPort } from "../ui-core/bootstrap/overlay-ports.js";
12
+ import { createOsc52ClipboardPort } from "../ui-core/ports/clipboard-osc52.js";
13
+ import { createOsc52Renderer } from "../classic/bootstrap/osc52-renderer.js";
14
+ import { attachCommandHandlers } from "../ui-core/commands/command-handlers.js";
15
+ export function createRuntimeViewServices(options) {
16
+ const shared = options.shared;
17
+ const capabilities = detectCapabilities({
18
+ env: options.options.env, stdoutIsTTY: true, stdinIsTTY: true,
19
+ columns: options.terminal.stdout.columns, rows: options.terminal.stdout.rows,
20
+ platform: process.platform,
21
+ });
22
+ const focus = new FocusController();
23
+ const overlay = new OverlayController(focus);
24
+ const toast = new ToastController();
25
+ const interruptible = new InterruptibleController();
26
+ const clipboard = createOsc52ClipboardPort({
27
+ renderer: createOsc52Renderer({ session: { write: (text) => { options.terminal.stdout.write(text); } }, supported: capabilities.osc52, env: options.options.env }),
28
+ fallback: createSystemClipboardPort(), enabled: capabilities.osc52,
29
+ });
30
+ const selection = new SelectionController(clipboard);
31
+ const methods = new Map();
32
+ const session = new Proxy(shared.session, {
33
+ get(target, key) {
34
+ const value = Reflect.get(target, key, target);
35
+ if (typeof value !== "function")
36
+ return value;
37
+ if (!methods.has(key))
38
+ methods.set(key, (...args) => options.runSession(String(key), () => Reflect.apply(value, target, args)));
39
+ return methods.get(key);
40
+ },
41
+ });
42
+ const transcript = shared.transcript.fork();
43
+ let mirrored = new Map();
44
+ const mirrorToasts = () => {
45
+ const latest = shared.toast.getToasts();
46
+ const next = new Map();
47
+ for (const item of latest) {
48
+ const previous = mirrored.get(item.id);
49
+ const localId = previous?.item === item ? previous.localId : toast.show(item.message, { level: item.level, key: `runtime-${item.id}`, durationMs: item.durationMs, sticky: item.sticky });
50
+ next.set(item.id, { item, localId });
51
+ }
52
+ for (const [id, value] of mirrored)
53
+ if (!next.has(id))
54
+ toast.dismiss(value.localId);
55
+ mirrored = next;
56
+ };
57
+ const unsubscribeToasts = shared.toast.subscribe(mirrorToasts);
58
+ mirrorToasts();
59
+ let disposed = false;
60
+ const services = {
61
+ ...shared, session, focus, overlay, toast, interruptible, selection,
62
+ router: new ActionRouter(), commands: buildDefaultCommandRegistry(),
63
+ transcript: transcript.transcript,
64
+ ports: { ...shared.ports, clipboard, confirm: createOverlayConfirmPort(overlay), requestSecret: createOverlaySecretPort(overlay) },
65
+ cancel: new CancelCoordinator({ session, sessionId: () => session.sessionId, jobs: shared.ports.jobs, interruptible }),
66
+ requestMinimise: options.minimise, requestSessionSwitch: options.switchSession,
67
+ requestRedraw: options.repaint, hasOtherViews: options.hasOtherViews, capabilities,
68
+ dispose() {
69
+ if (disposed)
70
+ return;
71
+ disposed = true;
72
+ unsubscribeToasts();
73
+ transcript.dispose();
74
+ interruptible.cancelAll();
75
+ overlay.dispose();
76
+ selection.dispose();
77
+ toast.dispose();
78
+ },
79
+ };
80
+ attachCommandHandlers(services);
81
+ return services;
82
+ }
83
+ //# sourceMappingURL=view-services.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-services.js","sourceRoot":"","sources":["../../src/session-runtime/view-services.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { PassThrough, Writable } from "node:stream";
3
+ import type { TerminalDimensions } from "../interactive-session/types.js";
4
+ export declare class RuntimeViewInput extends PassThrough {
5
+ readonly isTTY = true;
6
+ isRaw: boolean;
7
+ setRawMode(mode: boolean): this;
8
+ ref(): this;
9
+ unref(): this;
10
+ }
11
+ export declare class RuntimeViewOutput extends Writable {
12
+ private readonly send;
13
+ readonly isTTY = true;
14
+ columns: number;
15
+ rows: number;
16
+ constructor(dimensions: TerminalDimensions, send: (bytes: Uint8Array) => boolean);
17
+ _write(bytes: Buffer, _encoding: BufferEncoding, done: (error?: Error | null) => void): void;
18
+ resize(dimensions: TerminalDimensions): void;
19
+ getWindowSize(): [number, number];
20
+ getColorDepth(): number;
21
+ hasColors(): boolean;
22
+ }
23
+ export declare class RuntimeViewTerminal extends EventEmitter {
24
+ readonly stdin: RuntimeViewInput;
25
+ readonly stdout: RuntimeViewOutput;
26
+ constructor(dimensions: TerminalDimensions, send: (bytes: Uint8Array) => boolean);
27
+ resize(dimensions: TerminalDimensions): void;
28
+ dispose(): void;
29
+ }
@@ -0,0 +1,51 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { PassThrough, Writable } from "node:stream";
3
+ export class RuntimeViewInput extends PassThrough {
4
+ isTTY = true;
5
+ isRaw = false;
6
+ setRawMode(mode) { this.isRaw = mode; return this; }
7
+ ref() { return this; }
8
+ unref() { return this; }
9
+ }
10
+ export class RuntimeViewOutput extends Writable {
11
+ send;
12
+ isTTY = true;
13
+ columns;
14
+ rows;
15
+ constructor(dimensions, send) {
16
+ super();
17
+ this.send = send;
18
+ this.columns = dimensions.columns;
19
+ this.rows = dimensions.rows;
20
+ }
21
+ _write(bytes, _encoding, done) {
22
+ done(this.send(bytes) ? undefined : new Error("terminal attachment closed"));
23
+ }
24
+ resize(dimensions) {
25
+ if (this.columns === dimensions.columns && this.rows === dimensions.rows)
26
+ return;
27
+ this.columns = dimensions.columns;
28
+ this.rows = dimensions.rows;
29
+ this.emit("SIGWINCH");
30
+ this.emit("resize");
31
+ }
32
+ getWindowSize() { return [this.columns, this.rows]; }
33
+ getColorDepth() { return 24; }
34
+ hasColors() { return true; }
35
+ }
36
+ export class RuntimeViewTerminal extends EventEmitter {
37
+ stdin = new RuntimeViewInput();
38
+ stdout;
39
+ constructor(dimensions, send) {
40
+ super();
41
+ this.stdout = new RuntimeViewOutput(dimensions, send);
42
+ }
43
+ resize(dimensions) { this.stdout.resize(dimensions); }
44
+ dispose() {
45
+ this.emit("exit", 0);
46
+ this.stdin.destroy();
47
+ this.stdout.destroy();
48
+ this.removeAllListeners();
49
+ }
50
+ }
51
+ //# sourceMappingURL=view-terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-terminal.js","sourceRoot":"","sources":["../../src/session-runtime/view-terminal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACtC,KAAK,GAAG,IAAI,CAAC;IACtB,KAAK,GAAG,KAAK,CAAC;IACd,UAAU,CAAC,IAAa,IAAU,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACnE,GAAG,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;IAC5B,KAAK,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;CAC/B;AAED,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAKgB;IAJpD,KAAK,GAAG,IAAI,CAAC;IACtB,OAAO,CAAS;IAChB,IAAI,CAAS;IAEb,YAAY,UAA8B,EAAmB,IAAoC;QAC/F,KAAK,EAAE,CAAC;QADmD,SAAI,GAAJ,IAAI,CAAgC;QAE/F,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAEQ,MAAM,CAAC,KAAa,EAAE,SAAyB,EAAE,IAAoC;QAC5F,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,UAA8B;QACnC,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;YAAE,OAAO;QACjF,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,aAAa,KAAuB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvE,aAAa,KAAa,OAAO,EAAE,CAAC,CAAC,CAAC;IACtC,SAAS,KAAc,OAAO,IAAI,CAAC,CAAC,CAAC;CACtC;AAED,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IAC1C,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC/B,MAAM,CAAoB;IAEnC,YAAY,UAA8B,EAAE,IAAoC;QAC9E,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,UAA8B,IAAU,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChF,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import type { AppServices } from "../../ui-core/bootstrap/composition-root.js";
2
+ import type { RuntimeViewTerminal } from "../../session-runtime/view-terminal.js";
3
+ export declare function mountOpenTuiRuntimeView(services: AppServices, terminal: RuntimeViewTerminal, env: Readonly<Record<string, string>>): Promise<{
4
+ repaint(): boolean;
5
+ dispose(): Promise<void>;
6
+ }>;