@adhdev/daemon-core 0.9.82-rc.32 → 0.9.82-rc.321
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/dist/boot/daemon-lifecycle.d.ts +8 -0
- package/dist/boot/process-hardening.d.ts +50 -0
- package/dist/build-info.d.ts +37 -0
- package/dist/chat/source-machine.d.ts +166 -0
- package/dist/chat/source-resolver.d.ts +104 -0
- package/dist/chat/subscription-updates.d.ts +1 -0
- package/dist/cli-adapter-types.d.ts +46 -2
- package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
- package/dist/cli-adapters/cli-state-engine.d.ts +198 -0
- package/dist/cli-adapters/provider-cli-adapter.d.ts +115 -64
- package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
- package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
- package/dist/cli-adapters/provider-cli-shared.d.ts +38 -0
- package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
- package/dist/cli-adapters/resolve-executable.d.ts +14 -0
- package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
- package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
- package/dist/cli-adapters/terminal-screen.d.ts +4 -11
- package/dist/commands/cli-manager.d.ts +2 -1
- package/dist/commands/handler.d.ts +110 -0
- package/dist/commands/mesh-coordinator.d.ts +85 -1
- package/dist/commands/router.d.ts +229 -1
- package/dist/commands/upgrade-helper.d.ts +12 -0
- package/dist/config/chat-history.d.ts +9 -0
- package/dist/config/config.d.ts +5 -0
- package/dist/config/mesh-config.d.ts +72 -1
- package/dist/detection/ide-detector.d.ts +13 -0
- package/dist/detection/win32-ide-version.d.ts +37 -0
- package/dist/git/git-commands.d.ts +9 -1
- package/dist/git/git-diff.d.ts +6 -0
- package/dist/git/git-executor.d.ts +11 -0
- package/dist/git/git-status.d.ts +9 -0
- package/dist/git/git-types.d.ts +2 -50
- package/dist/index.d.ts +51 -12
- package/dist/index.js +35378 -11873
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +38854 -15461
- package/dist/index.mjs.map +1 -1
- package/dist/installer.d.ts +1 -4
- package/dist/ipc/local-ipc-server.d.ts +91 -0
- package/dist/launch.d.ts +1 -1
- package/dist/logging/async-batch-writer.d.ts +10 -0
- package/dist/logging/log-redactor.d.ts +24 -0
- package/dist/logging/log-tail-reader.d.ts +46 -0
- package/dist/mesh/contracts.d.ts +164 -0
- package/dist/mesh/coordinator-prompt.d.ts +36 -0
- package/dist/mesh/coordinator-registry.d.ts +59 -0
- package/dist/mesh/mesh-active-work.d.ts +108 -0
- package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
- package/dist/mesh/mesh-events-coordinator.d.ts +169 -0
- package/dist/mesh/mesh-events-pending.d.ts +45 -0
- package/dist/mesh/mesh-events-stale.d.ts +40 -0
- package/dist/mesh/mesh-events-utils.d.ts +47 -0
- package/dist/mesh/mesh-events.d.ts +6 -49
- package/dist/mesh/mesh-fast-forward.d.ts +81 -0
- package/dist/mesh/mesh-host-ownership.d.ts +9 -0
- package/dist/mesh/mesh-init.d.ts +86 -0
- package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -3
- package/dist/mesh/mesh-ledger.d.ts +77 -1
- package/dist/mesh/mesh-missions.d.ts +116 -0
- package/dist/mesh/mesh-reconcile-loop.d.ts +7 -0
- package/dist/mesh/mesh-refine-batch.d.ts +68 -0
- package/dist/mesh/mesh-refine-status.d.ts +62 -0
- package/dist/mesh/mesh-review-inbox.d.ts +90 -0
- package/dist/mesh/mesh-routing.d.ts +70 -0
- package/dist/mesh/mesh-runtime-store.d.ts +401 -0
- package/dist/mesh/mesh-task-stats.d.ts +49 -0
- package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +30 -0
- package/dist/mesh/mesh-work-queue.d.ts +204 -5
- package/dist/mesh/preview-freshness.d.ts +18 -0
- package/dist/mesh/refine-config.d.ts +215 -0
- package/dist/mesh/worktree-bootstrap-config.d.ts +135 -0
- package/dist/providers/acp-provider-instance.d.ts +2 -0
- package/dist/providers/approval-utils.d.ts +13 -0
- package/dist/providers/cli-provider-instance.d.ts +61 -3
- package/dist/providers/contracts.d.ts +130 -6
- package/dist/providers/external-sources.d.ts +71 -0
- package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
- package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
- package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
- package/dist/providers/native-history/dispatcher.d.ts +27 -0
- package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
- package/dist/providers/native-history/index.d.ts +13 -0
- package/dist/providers/provider-instance-manager.d.ts +13 -0
- package/dist/providers/provider-instance.d.ts +13 -1
- package/dist/providers/provider-loader.d.ts +26 -4
- package/dist/providers/provider-trust.d.ts +31 -0
- package/dist/providers/read-chat-contract.d.ts +29 -0
- package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
- package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
- package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
- package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
- package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
- package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
- package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
- package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
- package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
- package/dist/providers/sdk/v1/index.d.ts +30 -0
- package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
- package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
- package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
- package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
- package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
- package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
- package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
- package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
- package/dist/providers/spec/adapter.d.ts +69 -0
- package/dist/providers/spec/cli-adapter.d.ts +217 -0
- package/dist/providers/spec/evaluator.d.ts +23 -0
- package/dist/providers/spec/fsm-driver.d.ts +278 -0
- package/dist/providers/spec/fsm-evaluator.d.ts +72 -0
- package/dist/providers/spec/fsm-loader.d.ts +14 -0
- package/dist/providers/spec/fsm-types.d.ts +128 -0
- package/dist/providers/spec/native-history-executor.d.ts +41 -0
- package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
- package/dist/providers/spec/route.d.ts +4 -0
- package/dist/providers/spec/types.d.ts +180 -0
- package/dist/providers/transcript-v2.d.ts +176 -0
- package/dist/providers/types/interactive-prompt.d.ts +84 -0
- package/dist/providers/working-dir.d.ts +17 -0
- package/dist/repo-mesh-types.d.ts +277 -13
- package/dist/sessions/registry.d.ts +6 -0
- package/dist/shared-types-extra.d.ts +2 -4
- package/dist/shared-types.d.ts +42 -1
- package/dist/status/normalize.d.ts +1 -1
- package/dist/status/normalize.js +1 -0
- package/dist/status/normalize.js.map +1 -1
- package/dist/status/normalize.mjs +1 -0
- package/dist/status/normalize.mjs.map +1 -1
- package/dist/status/reporter.d.ts +2 -0
- package/dist/status/snapshot.d.ts +1 -0
- package/dist/types.d.ts +5 -0
- package/package.json +7 -3
- package/src/agent-stream/poller.ts +2 -3
- package/src/boot/daemon-lifecycle.ts +55 -12
- package/src/boot/process-hardening.ts +89 -0
- package/src/build-info.ts +73 -0
- package/src/chat/source-machine.ts +534 -0
- package/src/chat/source-resolver.ts +0 -0
- package/src/chat/subscription-updates.ts +20 -1
- package/src/cli-adapter-types.d.ts +1 -0
- package/src/cli-adapter-types.ts +47 -2
- package/src/cli-adapters/cli-script-runner.ts +421 -0
- package/src/cli-adapters/cli-state-engine.ts +1215 -0
- package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
- package/src/cli-adapters/provider-cli-adapter.ts +710 -1140
- package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
- package/src/cli-adapters/provider-cli-parse.ts +13 -0
- package/src/cli-adapters/provider-cli-runtime.ts +56 -7
- package/src/cli-adapters/provider-cli-shared.d.ts +2 -0
- package/src/cli-adapters/provider-cli-shared.ts +85 -11
- package/src/cli-adapters/pty-transport.ts +2 -1
- package/src/cli-adapters/raw-terminal-io.ts +252 -0
- package/src/cli-adapters/resolve-executable.ts +90 -0
- package/src/cli-adapters/session-host-transport.ts +2 -1
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +53 -29
- package/src/cli-adapters/terminal-backends/types.ts +10 -3
- package/src/cli-adapters/terminal-screen.ts +16 -81
- package/src/commands/chat-commands.ts +1822 -61
- package/src/commands/cli-manager.ts +286 -14
- package/src/commands/handler.ts +809 -2
- package/src/commands/mesh-coordinator.ts +332 -122
- package/src/commands/router.ts +6369 -704
- package/src/commands/stream-commands.ts +8 -0
- package/src/commands/upgrade-helper.ts +81 -30
- package/src/config/chat-history.ts +483 -24
- package/src/config/config.ts +12 -0
- package/src/config/mesh-config.ts +320 -4
- package/src/config/recent-activity.ts +8 -2
- package/src/daemon/dev-auto-implement.ts +3 -2
- package/src/daemon/dev-cli-debug.ts +10 -1
- package/src/detection/cli-detector.ts +28 -9
- package/src/detection/ide-detector.ts +55 -16
- package/src/detection/win32-ide-version.ts +106 -0
- package/src/git/git-commands.ts +42 -12
- package/src/git/git-diff.ts +53 -0
- package/src/git/git-executor.ts +12 -0
- package/src/git/git-status.ts +408 -43
- package/src/git/git-types.ts +14 -62
- package/src/git/git-worktree.ts +8 -1
- package/src/index.ts +145 -11
- package/src/installer.d.ts +1 -1
- package/src/installer.ts +8 -6
- package/src/ipc/local-ipc-server.ts +278 -0
- package/src/launch.d.ts +1 -1
- package/src/launch.ts +37 -28
- package/src/logging/async-batch-writer.ts +55 -0
- package/src/logging/log-redactor.ts +100 -0
- package/src/logging/log-tail-reader.ts +220 -0
- package/src/logging/logger.ts +2 -1
- package/src/mesh/contracts.ts +329 -0
- package/src/mesh/coordinator-prompt.ts +234 -31
- package/src/mesh/coordinator-registry.ts +121 -0
- package/src/mesh/mesh-active-work.ts +469 -0
- package/src/mesh/mesh-delivery-policy.ts +315 -0
- package/src/mesh/mesh-events-coordinator.ts +2102 -0
- package/src/mesh/mesh-events-pending.ts +508 -0
- package/src/mesh/mesh-events-stale.ts +290 -0
- package/src/mesh/mesh-events-utils.ts +254 -0
- package/src/mesh/mesh-events.ts +30 -1035
- package/src/mesh/mesh-fast-forward.ts +839 -0
- package/src/mesh/mesh-host-ownership.ts +73 -0
- package/src/mesh/mesh-init.ts +260 -0
- package/src/mesh/mesh-ledger-reconciliation.ts +12 -5
- package/src/mesh/mesh-ledger.ts +589 -102
- package/src/mesh/mesh-missions.ts +248 -0
- package/src/mesh/mesh-reconcile-loop.ts +496 -0
- package/src/mesh/mesh-refine-batch.ts +197 -0
- package/src/mesh/mesh-refine-status.ts +231 -0
- package/src/mesh/mesh-review-inbox.ts +307 -0
- package/src/mesh/mesh-routing.ts +291 -0
- package/src/mesh/mesh-runtime-store.ts +1578 -0
- package/src/mesh/mesh-task-stats.ts +154 -0
- package/src/mesh/mesh-unresolved-forward-outbox.ts +185 -0
- package/src/mesh/mesh-work-queue.ts +663 -142
- package/src/mesh/preview-freshness.ts +118 -0
- package/src/mesh/refine-config.ts +403 -0
- package/src/mesh/worktree-bootstrap-config.ts +326 -0
- package/src/providers/acp-provider-instance.ts +19 -4
- package/src/providers/approval-utils.d.ts +4 -0
- package/src/providers/approval-utils.ts +47 -5
- package/src/providers/chat-message-normalization.ts +4 -11
- package/src/providers/cli-provider-instance.ts +958 -91
- package/src/providers/contracts.d.ts +55 -0
- package/src/providers/contracts.ts +141 -6
- package/src/providers/extension-provider-instance.ts +5 -1
- package/src/providers/external-sources.ts +218 -0
- package/src/providers/ide-provider-instance.ts +25 -6
- package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
- package/src/providers/native-history/claude-cli-transcript.ts +396 -0
- package/src/providers/native-history/codex-cli-transcript.ts +479 -0
- package/src/providers/native-history/dispatcher.ts +340 -0
- package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
- package/src/providers/native-history/index.ts +30 -0
- package/src/providers/provider-instance-manager.ts +30 -0
- package/src/providers/provider-instance.ts +10 -1
- package/src/providers/provider-loader.ts +662 -50
- package/src/providers/provider-schema.ts +87 -14
- package/src/providers/provider-trust.ts +114 -0
- package/src/providers/read-chat-contract.ts +76 -16
- package/src/providers/sdk/README.md +49 -0
- package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
- package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
- package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
- package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
- package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
- package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
- package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
- package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
- package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
- package/src/providers/sdk/v1/index.ts +152 -0
- package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
- package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
- package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
- package/src/providers/sdk/v1/schemas/cli/provider.schema.json +504 -0
- package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
- package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
- package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
- package/src/providers/sdk/v1/types/cli/index.ts +365 -0
- package/src/providers/sdk/v1/types/common/index.ts +229 -0
- package/src/providers/sdk/v1/validators/index.ts +19 -0
- package/src/providers/sdk/v1/validators/manifest.ts +110 -0
- package/src/providers/sdk/v1/validators/taint.ts +309 -0
- package/src/providers/spec/adapter.ts +168 -0
- package/src/providers/spec/cli-adapter.ts +986 -0
- package/src/providers/spec/evaluator.ts +345 -0
- package/src/providers/spec/fsm-driver.ts +909 -0
- package/src/providers/spec/fsm-evaluator.ts +255 -0
- package/src/providers/spec/fsm-loader.ts +112 -0
- package/src/providers/spec/fsm-types.ts +222 -0
- package/src/providers/spec/native-history-executor.ts +1136 -0
- package/src/providers/spec/pre-launch-trust.ts +104 -0
- package/src/providers/spec/route.ts +51 -0
- package/src/providers/spec/types.ts +226 -0
- package/src/providers/transcript-v2.ts +567 -0
- package/src/providers/types/interactive-prompt.ts +536 -0
- package/src/providers/version-archive.ts +64 -24
- package/src/providers/working-dir.ts +23 -0
- package/src/repo-mesh-types.ts +356 -13
- package/src/sessions/registry.ts +6 -0
- package/src/shared-types-extra.ts +2 -4
- package/src/shared-types.ts +45 -1
- package/src/status/builders.ts +26 -6
- package/src/status/normalize.ts +2 -0
- package/src/status/reporter.ts +15 -0
- package/src/status/snapshot.ts +84 -25
- package/src/system/host-memory.ts +29 -12
- package/src/types.ts +5 -0
- package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
- package/dist/mesh/mesh-sync.d.ts +0 -53
- package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
- package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
- package/src/mesh/mesh-sync.ts +0 -111
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type SessionHostRecord,
|
|
7
7
|
} from '@adhdev/session-host-core';
|
|
8
8
|
import { LOG } from '../logging/logger.js';
|
|
9
|
+
import { resolveWin32Executable } from './resolve-executable.js';
|
|
9
10
|
import type { PtyRuntimeMetadata, PtyRuntimeTransport, PtySpawnOptions, PtyTransportFactory } from './pty-transport.js';
|
|
10
11
|
|
|
11
12
|
interface SessionHostPtyTransportFactoryOptions {
|
|
@@ -435,7 +436,7 @@ export class SessionHostPtyTransportFactory implements PtyTransportFactory {
|
|
|
435
436
|
spawn(command: string, args: string[], spawnOptions: PtySpawnOptions): PtyRuntimeTransport {
|
|
436
437
|
return new SessionHostRuntimeTransport({
|
|
437
438
|
...this.options,
|
|
438
|
-
command,
|
|
439
|
+
command: resolveWin32Executable(command),
|
|
439
440
|
args,
|
|
440
441
|
spawnOptions,
|
|
441
442
|
});
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type {
|
|
2
2
|
TerminalViewportBackend,
|
|
3
3
|
TerminalViewportBackendOptions,
|
|
4
|
-
TerminalViewportBackendPreference,
|
|
5
4
|
} from './types.js';
|
|
6
5
|
|
|
7
6
|
type GhosttyVtTerminal = {
|
|
@@ -49,12 +48,10 @@ function getBindingCandidates(): string[] {
|
|
|
49
48
|
return explicit ? [explicit] : DEFAULT_BINDING_CANDIDATES;
|
|
50
49
|
}
|
|
51
50
|
|
|
52
|
-
function loadGhosttyVtBinding(
|
|
51
|
+
function loadGhosttyVtBinding(): GhosttyVtBinding {
|
|
53
52
|
if (cachedBinding !== undefined) {
|
|
54
|
-
if (!cachedBinding &&
|
|
55
|
-
|
|
56
|
-
}
|
|
57
|
-
return cachedBinding;
|
|
53
|
+
if (!cachedBinding && cachedBindingError) throw cachedBindingError;
|
|
54
|
+
return cachedBinding!;
|
|
58
55
|
}
|
|
59
56
|
|
|
60
57
|
const errors: string[] = [];
|
|
@@ -65,7 +62,7 @@ function loadGhosttyVtBinding(required: boolean): GhosttyVtBinding | null {
|
|
|
65
62
|
const mod = require(ref);
|
|
66
63
|
cachedBinding = normalizeBinding(mod, ref);
|
|
67
64
|
cachedBindingError = null;
|
|
68
|
-
return cachedBinding
|
|
65
|
+
return cachedBinding!;
|
|
69
66
|
} catch (error) {
|
|
70
67
|
if (isModuleNotFoundError(error, ref)) {
|
|
71
68
|
errors.push(`${ref}: module not found`);
|
|
@@ -78,57 +75,84 @@ function loadGhosttyVtBinding(required: boolean): GhosttyVtBinding | null {
|
|
|
78
75
|
|
|
79
76
|
cachedBinding = null;
|
|
80
77
|
cachedBindingError = new Error(
|
|
81
|
-
`ghostty-vt
|
|
78
|
+
`ghostty-vt binding unavailable (${errors.join('; ') || 'no candidates tried'})`,
|
|
82
79
|
);
|
|
83
|
-
|
|
84
|
-
if (required) throw cachedBindingError;
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export function resolveTerminalBackendPreference(): TerminalViewportBackendPreference {
|
|
89
|
-
const raw = process.env.ADHDEV_TERMINAL_BACKEND?.trim().toLowerCase();
|
|
90
|
-
if (raw === 'ghostty-vt' || raw === 'xterm' || raw === 'auto') return raw;
|
|
91
|
-
return 'auto';
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export function isGhosttyVtBackendAvailable(): boolean {
|
|
95
|
-
return !!loadGhosttyVtBinding(false);
|
|
80
|
+
throw cachedBindingError;
|
|
96
81
|
}
|
|
97
82
|
|
|
98
83
|
export class GhosttyVtTerminalBackend implements TerminalViewportBackend {
|
|
99
84
|
readonly kind = 'ghostty-vt' as const;
|
|
100
85
|
private terminal: GhosttyVtTerminal;
|
|
86
|
+
private rows: number;
|
|
87
|
+
private disposed = false;
|
|
101
88
|
|
|
102
89
|
constructor(options: TerminalViewportBackendOptions) {
|
|
103
|
-
const binding = loadGhosttyVtBinding(
|
|
104
|
-
|
|
105
|
-
throw new Error('ghostty-vt backend requested but no binding is available');
|
|
106
|
-
}
|
|
90
|
+
const binding = loadGhosttyVtBinding();
|
|
91
|
+
this.rows = Math.max(1, options.rows | 0);
|
|
107
92
|
this.terminal = binding.createTerminal({
|
|
108
93
|
cols: Math.max(1, options.cols | 0),
|
|
109
|
-
rows:
|
|
94
|
+
rows: this.rows,
|
|
110
95
|
scrollback: Math.max(0, options.scrollback | 0),
|
|
111
96
|
});
|
|
112
97
|
}
|
|
113
98
|
|
|
114
99
|
resize(rows: number, cols: number): void {
|
|
115
|
-
this.
|
|
100
|
+
this.rows = Math.max(1, rows | 0);
|
|
101
|
+
this.terminal.resize(Math.max(1, cols | 0), this.rows);
|
|
116
102
|
}
|
|
117
103
|
|
|
118
104
|
write(data: string): void {
|
|
119
|
-
if (!data) return;
|
|
105
|
+
if (!data || this.disposed) return;
|
|
120
106
|
this.terminal.write(data);
|
|
121
107
|
}
|
|
122
108
|
|
|
109
|
+
private formatLines(): string[] {
|
|
110
|
+
// ghostty's `trim:true` collapses CUF-advanced cells — many TUIs including
|
|
111
|
+
// Claude Code render spaces via cursor-forward rather than literal spaces,
|
|
112
|
+
// which would break downstream regex matching. Keep per-row padding and
|
|
113
|
+
// trim trailing whitespace ourselves.
|
|
114
|
+
//
|
|
115
|
+
// formatPlainText uses a .screen pin which includes scrollback history.
|
|
116
|
+
const raw = this.terminal.formatPlainText({ trim: false }) || '';
|
|
117
|
+
if (!raw) return [];
|
|
118
|
+
return raw.split('\n').map((row) => row.replace(/\s+$/, ''));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private static trimBlankEnds(lines: string[]): string {
|
|
122
|
+
let first = 0;
|
|
123
|
+
let last = lines.length;
|
|
124
|
+
while (first < last && !lines[first]) first += 1;
|
|
125
|
+
while (last > first && !lines[last - 1]) last -= 1;
|
|
126
|
+
return lines.slice(first, last).join('\n');
|
|
127
|
+
}
|
|
128
|
+
|
|
123
129
|
getText(): string {
|
|
124
|
-
|
|
130
|
+
if (this.disposed) return '';
|
|
131
|
+
const lines = this.formatLines();
|
|
132
|
+
if (lines.length === 0) return '';
|
|
133
|
+
// Take only the viewport (last `rows` lines) to exclude scrollback history.
|
|
134
|
+
const viewport = lines.length > this.rows ? lines.slice(-this.rows) : lines;
|
|
135
|
+
return GhosttyVtTerminalBackend.trimBlankEnds(viewport);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
getTextWithScrollback(): string {
|
|
139
|
+
if (this.disposed) return '';
|
|
140
|
+
const lines = this.formatLines();
|
|
141
|
+
if (lines.length === 0) return '';
|
|
142
|
+
// Full buffer including scrollback — does NOT slice to the viewport, so a
|
|
143
|
+
// tall prompt whose top has scrolled above the visible rows is still
|
|
144
|
+
// matchable by content patterns.
|
|
145
|
+
return GhosttyVtTerminalBackend.trimBlankEnds(lines);
|
|
125
146
|
}
|
|
126
147
|
|
|
127
148
|
getCursorPosition(): { col: number; row: number } {
|
|
149
|
+
if (this.disposed) return { col: 0, row: 0 };
|
|
128
150
|
return this.terminal.getCursorPosition();
|
|
129
151
|
}
|
|
130
152
|
|
|
131
153
|
dispose(): void {
|
|
154
|
+
if (this.disposed) return;
|
|
155
|
+
this.disposed = true;
|
|
132
156
|
this.terminal.dispose();
|
|
133
157
|
}
|
|
134
158
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
export type TerminalViewportBackendKind = '
|
|
2
|
-
|
|
3
|
-
export type TerminalViewportBackendPreference = TerminalViewportBackendKind | 'auto';
|
|
1
|
+
export type TerminalViewportBackendKind = 'ghostty-vt';
|
|
4
2
|
|
|
5
3
|
export type TerminalViewportBackendOptions = {
|
|
6
4
|
rows: number;
|
|
@@ -13,6 +11,15 @@ export interface TerminalViewportBackend {
|
|
|
13
11
|
resize(rows: number, cols: number): void;
|
|
14
12
|
write(data: string): void;
|
|
15
13
|
getText(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Like getText() but includes scrollback history (the lines that have
|
|
16
|
+
* scrolled above the visible viewport). Used by content-pattern matching
|
|
17
|
+
* (e.g. approval/modal button extraction) that must stay correct when a
|
|
18
|
+
* tall prompt — a big diff or long explanation — pushes part of the
|
|
19
|
+
* prompt box above the viewport. NOT for cursor-relative / stable_ms
|
|
20
|
+
* conditions, whose row indices are viewport-relative.
|
|
21
|
+
*/
|
|
22
|
+
getTextWithScrollback(): string;
|
|
16
23
|
getCursorPosition(): { col: number; row: number };
|
|
17
24
|
dispose(): void;
|
|
18
25
|
}
|
|
@@ -1,99 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PTY screen snapshot abstraction.
|
|
3
|
-
*
|
|
4
|
-
* Terminal viewport backend selection.
|
|
5
|
-
*
|
|
6
|
-
* Runtime preference is backend-agnostic:
|
|
7
|
-
* - prefer ghostty-vt when available (or when explicitly requested)
|
|
8
|
-
* - fall back to xterm when ghostty-vt is unavailable
|
|
2
|
+
* PTY screen snapshot abstraction — ghostty-vt backend.
|
|
9
3
|
*/
|
|
10
4
|
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
14
|
-
TerminalViewportBackend,
|
|
15
|
-
TerminalViewportBackendKind,
|
|
16
|
-
TerminalViewportBackendOptions,
|
|
17
|
-
TerminalViewportBackendPreference,
|
|
18
|
-
} from './terminal-backends/types.js';
|
|
19
|
-
import { XtermTerminalBackend } from './terminal-backends/xterm-backend.js';
|
|
5
|
+
import { GhosttyVtTerminalBackend } from './terminal-backends/ghostty-vt-backend.js';
|
|
6
|
+
import type { TerminalViewportBackendKind } from './terminal-backends/types.js';
|
|
7
|
+
import { DEFAULT_SESSION_HOST_COLS, DEFAULT_SESSION_HOST_ROWS } from '@adhdev/session-host-core';
|
|
20
8
|
|
|
21
9
|
const DEFAULT_SCROLLBACK = 2000;
|
|
22
|
-
const loggedTerminalBackends = new Set<string>();
|
|
23
10
|
|
|
24
11
|
export function getTerminalBackendRuntimeStatus(): {
|
|
25
12
|
backend: TerminalViewportBackendKind;
|
|
26
|
-
preference: TerminalViewportBackendPreference;
|
|
27
|
-
ghosttyAvailable: boolean;
|
|
28
13
|
} {
|
|
29
|
-
|
|
30
|
-
const ghosttyAvailable = isGhosttyVtBackendAvailable();
|
|
31
|
-
const backend: TerminalViewportBackendKind = (
|
|
32
|
-
preference === 'ghostty-vt' || (preference === 'auto' && ghosttyAvailable)
|
|
33
|
-
? 'ghostty-vt'
|
|
34
|
-
: 'xterm'
|
|
35
|
-
);
|
|
36
|
-
return { backend, preference, ghosttyAvailable };
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function createTerminalBackend(
|
|
40
|
-
options: TerminalViewportBackendOptions,
|
|
41
|
-
preference: TerminalViewportBackendPreference,
|
|
42
|
-
): TerminalViewportBackend {
|
|
43
|
-
const ghosttyAvailable = isGhosttyVtBackendAvailable();
|
|
44
|
-
if (preference === 'ghostty-vt') {
|
|
45
|
-
const backend = new GhosttyVtTerminalBackend(options);
|
|
46
|
-
logTerminalBackendSelection(preference, ghosttyAvailable, backend.kind);
|
|
47
|
-
return backend;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (preference === 'auto' && ghosttyAvailable) {
|
|
51
|
-
const backend = new GhosttyVtTerminalBackend(options);
|
|
52
|
-
logTerminalBackendSelection(preference, ghosttyAvailable, backend.kind);
|
|
53
|
-
return backend;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const backend = new XtermTerminalBackend(options);
|
|
57
|
-
logTerminalBackendSelection(preference, ghosttyAvailable, backend.kind);
|
|
58
|
-
return backend;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function logTerminalBackendSelection(
|
|
62
|
-
preference: TerminalViewportBackendPreference,
|
|
63
|
-
ghosttyAvailable: boolean,
|
|
64
|
-
backendKind: TerminalViewportBackendKind,
|
|
65
|
-
): void {
|
|
66
|
-
const key = `${preference}:${ghosttyAvailable}:${backendKind}`;
|
|
67
|
-
if (loggedTerminalBackends.has(key)) return;
|
|
68
|
-
loggedTerminalBackends.add(key);
|
|
69
|
-
if (backendKind === 'xterm' && preference !== 'xterm' && !ghosttyAvailable) {
|
|
70
|
-
const message = `[terminal-screen] ghostty-vt unavailable; using xterm fallback (preference=${preference})`;
|
|
71
|
-
if (preference === 'auto') {
|
|
72
|
-
LOG.info('Terminal', message);
|
|
73
|
-
} else {
|
|
74
|
-
LOG.warn('Terminal', message);
|
|
75
|
-
}
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
LOG.info(
|
|
79
|
-
'Terminal',
|
|
80
|
-
`[terminal-screen] backend=${backendKind} preference=${preference} ghosttyAvailable=${ghosttyAvailable}`,
|
|
81
|
-
);
|
|
14
|
+
return { backend: 'ghostty-vt' };
|
|
82
15
|
}
|
|
83
16
|
|
|
84
17
|
export class TerminalScreen {
|
|
85
|
-
readonly backendKind: TerminalViewportBackendKind;
|
|
18
|
+
readonly backendKind: TerminalViewportBackendKind = 'ghostty-vt';
|
|
86
19
|
private rows: number;
|
|
87
20
|
private cols: number;
|
|
88
|
-
private
|
|
89
|
-
private terminal: TerminalViewportBackend;
|
|
21
|
+
private terminal: GhosttyVtTerminalBackend;
|
|
90
22
|
|
|
91
|
-
constructor(rows =
|
|
23
|
+
constructor(rows = DEFAULT_SESSION_HOST_ROWS, cols = DEFAULT_SESSION_HOST_COLS) {
|
|
92
24
|
this.rows = Math.max(1, rows | 0);
|
|
93
25
|
this.cols = Math.max(1, cols | 0);
|
|
94
|
-
this.preference = resolveTerminalBackendPreference();
|
|
95
26
|
this.terminal = this.createBackend();
|
|
96
|
-
this.backendKind = this.terminal.kind;
|
|
97
27
|
}
|
|
98
28
|
|
|
99
29
|
reset(rows = this.rows, cols = this.cols): void {
|
|
@@ -117,6 +47,11 @@ export class TerminalScreen {
|
|
|
117
47
|
return this.terminal.getText();
|
|
118
48
|
}
|
|
119
49
|
|
|
50
|
+
/** Full buffer including scrollback history (see backend doc). */
|
|
51
|
+
getTextWithScrollback(): string {
|
|
52
|
+
return this.terminal.getTextWithScrollback();
|
|
53
|
+
}
|
|
54
|
+
|
|
120
55
|
getCursorPosition(): { col: number; row: number } {
|
|
121
56
|
return this.terminal.getCursorPosition();
|
|
122
57
|
}
|
|
@@ -125,11 +60,11 @@ export class TerminalScreen {
|
|
|
125
60
|
this.terminal.dispose();
|
|
126
61
|
}
|
|
127
62
|
|
|
128
|
-
private createBackend():
|
|
129
|
-
return
|
|
63
|
+
private createBackend(): GhosttyVtTerminalBackend {
|
|
64
|
+
return new GhosttyVtTerminalBackend({
|
|
130
65
|
cols: this.cols,
|
|
131
66
|
rows: this.rows,
|
|
132
67
|
scrollback: DEFAULT_SCROLLBACK,
|
|
133
|
-
}
|
|
68
|
+
});
|
|
134
69
|
}
|
|
135
70
|
}
|