@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.
- package/CONTRIBUTING.md +5 -3
- package/PROVIDERS.md +2 -0
- package/README.md +8 -4
- package/dist/agent/stream-recovery.d.ts +1 -1
- package/dist/agent/stream-recovery.js +5 -1
- package/dist/agent/stream-recovery.js.map +1 -1
- package/dist/classic/bootstrap/runtime-view.d.ts +6 -0
- package/dist/classic/bootstrap/runtime-view.js +46 -0
- package/dist/classic/bootstrap/runtime-view.js.map +1 -0
- package/dist/classic/bootstrap/terminal-session.d.ts +3 -0
- package/dist/classic/bootstrap/terminal-session.js +3 -0
- package/dist/classic/bootstrap/terminal-session.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/http.d.ts +2 -1
- package/dist/llm/http.js +3 -1
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/provider-info-text.js +7 -0
- package/dist/llm/provider-info-text.js.map +1 -1
- package/dist/llm/qoder/qoder-catalog.d.ts +15 -0
- package/dist/llm/qoder/qoder-catalog.js +56 -0
- package/dist/llm/qoder/qoder-catalog.js.map +1 -0
- package/dist/llm/qoder/qoder-http.d.ts +13 -0
- package/dist/llm/qoder/qoder-http.js +55 -0
- package/dist/llm/qoder/qoder-http.js.map +1 -0
- package/dist/llm/qoder/qoder-queue.d.ts +15 -0
- package/dist/llm/qoder/qoder-queue.js +169 -0
- package/dist/llm/qoder/qoder-queue.js.map +1 -0
- package/dist/llm/qoder/qoder-response.d.ts +19 -0
- package/dist/llm/qoder/qoder-response.js +98 -0
- package/dist/llm/qoder/qoder-response.js.map +1 -0
- package/dist/llm/qoder/qoder-stream.d.ts +23 -0
- package/dist/llm/qoder/qoder-stream.js +75 -0
- package/dist/llm/qoder/qoder-stream.js.map +1 -0
- package/dist/llm/qoder/qoder.d.ts +4 -4
- package/dist/llm/qoder/qoder.js +71 -189
- package/dist/llm/qoder/qoder.js.map +1 -1
- package/dist/llm/routing/error-classification.js +2 -0
- package/dist/llm/routing/error-classification.js.map +1 -1
- package/dist/llm/routing/failure-report.d.ts +1 -1
- package/dist/llm/routing/failure-report.js +5 -3
- package/dist/llm/routing/failure-report.js.map +1 -1
- package/dist/llm/wire/response-errors.d.ts +1 -0
- package/dist/llm/wire/response-errors.js +1 -1
- package/dist/llm/wire/response-errors.js.map +1 -1
- package/dist/session-runtime/child-bridge.d.ts +10 -4
- package/dist/session-runtime/child-bridge.js +34 -6
- package/dist/session-runtime/child-bridge.js.map +1 -1
- package/dist/session-runtime/client.d.ts +3 -2
- package/dist/session-runtime/client.js +22 -9
- package/dist/session-runtime/client.js.map +1 -1
- package/dist/session-runtime/host.d.ts +4 -0
- package/dist/session-runtime/host.js +108 -16
- package/dist/session-runtime/host.js.map +1 -1
- package/dist/session-runtime/launch.d.ts +1 -0
- package/dist/session-runtime/launch.js +3 -1
- package/dist/session-runtime/launch.js.map +1 -1
- package/dist/session-runtime/start-runtime.d.ts +12 -0
- package/dist/session-runtime/start-runtime.js +69 -0
- package/dist/session-runtime/start-runtime.js.map +1 -0
- package/dist/session-runtime/store.js +1 -0
- package/dist/session-runtime/store.js.map +1 -1
- package/dist/session-runtime/terminal-options.d.ts +4 -0
- package/dist/session-runtime/terminal-options.js +49 -0
- package/dist/session-runtime/terminal-options.js.map +1 -0
- package/dist/session-runtime/types.d.ts +38 -1
- package/dist/session-runtime/view-manager.d.ts +38 -0
- package/dist/session-runtime/view-manager.js +189 -0
- package/dist/session-runtime/view-manager.js.map +1 -0
- package/dist/session-runtime/view-services.d.ts +14 -0
- package/dist/session-runtime/view-services.js +83 -0
- package/dist/session-runtime/view-services.js.map +1 -0
- package/dist/session-runtime/view-terminal.d.ts +29 -0
- package/dist/session-runtime/view-terminal.js +51 -0
- package/dist/session-runtime/view-terminal.js.map +1 -0
- package/dist/tui-v2/bootstrap/runtime-view.d.ts +6 -0
- package/dist/tui-v2/bootstrap/runtime-view.js +54 -0
- package/dist/tui-v2/bootstrap/runtime-view.js.map +1 -0
- package/dist/ui-core/bootstrap/composition-root.d.ts +4 -1
- package/dist/ui-core/bootstrap/composition-root.js +5 -4
- package/dist/ui-core/bootstrap/composition-root.js.map +1 -1
- package/dist/ui-core/commands/session-commands.js +1 -1
- package/dist/ui-core/commands/session-commands.js.map +1 -1
- package/dist/ui-core/state/transcript-store.d.ts +7 -0
- package/dist/ui-core/state/transcript-store.js +53 -0
- package/dist/ui-core/state/transcript-store.js.map +1 -1
- package/dist/version.generated.d.ts +2 -2
- package/dist/version.generated.js +2 -2
- 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":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAwB,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAQ9B,SAAS,QAAQ,CAAC,KAAc,EAAE,GAAG,GAAG,IAAI;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;AAC9E,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAiC,CAAC;IACjD,OAAO,CACL,MAAM,CAAC,OAAO,KAAK,wBAAwB;QAC3C,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC;QAC/B,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3B,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QACpB,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;QAC9B,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,IAAI,KAAK,SAAS;QAChC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC;QACnE,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CACrC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,GAAG,kBAAkB;YAAE,OAAO,SAAS,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,CAAC;QAC3D,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAyB;IAClE,MAAM,wBAAwB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,CACpB,aAAa,EAAE,EACf,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAC1F,CAAC;IACF,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC9B,MAAM,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB;IAEjB,OAAO,MAAM,gBAAgB,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,wBAAwB,EAAE,CAAC;IACjC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,KAAK;SAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpD,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC;SAC3B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAA6B,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IAC3D,MAAM,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,SAAiB;IAC1D,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,KAA4C,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA0C,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACjE,MAAM,KAAK,GACT,UAAU,KAAK,MAAM;QACrB,UAAU,KAAK,UAAU;QACzB,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,SAAiB;IAEjB,MAAM,wBAAwB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,MAAkB,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,MAAM,CAAC,SAAS,CACpB,GAAG,IAAI,CAAC,SAAS,CAAC;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACxE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC,IAAI,EACN,MAAM,CACP,CAAC;IACF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,OAAO;QACL,SAAS;QACT,IAAI;QACJ,KAAK,CAAC,OAAO;YACX,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
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
|
+
}>;
|