@gajae-code/coding-agent 0.9.6 → 0.10.1
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/CHANGELOG.md +58 -0
- package/dist/types/cli/classify-install-target.d.ts +0 -10
- package/dist/types/cli/daemon-cli.d.ts +2 -0
- package/dist/types/cli/initial-message.d.ts +1 -1
- package/dist/types/cli/malloc-env-guard.d.ts +65 -0
- package/dist/types/cli/malloc-env-guard.test.d.ts +1 -0
- package/dist/types/cli/notify-cli.d.ts +3 -1
- package/dist/types/cli/session-picker.d.ts +4 -3
- package/dist/types/cli/update-cli.d.ts +22 -3
- package/dist/types/cli.d.ts +5 -0
- package/dist/types/commands/daemon.d.ts +6 -2
- package/dist/types/commands/launch.d.ts +1 -0
- package/dist/types/commands/notify.d.ts +6 -0
- package/dist/types/commit/analysis/conventional.d.ts +1 -1
- package/dist/types/commit/analysis/summary.d.ts +1 -1
- package/dist/types/commit/changelog/generate.d.ts +1 -1
- package/dist/types/commit/changelog/index.d.ts +2 -2
- package/dist/types/commit/map-reduce/map-phase.d.ts +1 -1
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +1 -1
- package/dist/types/config/keybindings.d.ts +5 -0
- package/dist/types/config/model-profile-activation.d.ts +1 -0
- package/dist/types/config/settings-schema.d.ts +47 -7
- package/dist/types/config/settings.d.ts +2 -0
- package/dist/types/coordinator/contract.d.ts +1 -1
- package/dist/types/coordinator-mcp/model-preset.d.ts +45 -0
- package/dist/types/coordinator-mcp/policy.d.ts +3 -0
- package/dist/types/coordinator-mcp/server.d.ts +79 -6
- package/dist/types/coordinator-mcp/session-reaper.d.ts +53 -0
- package/dist/types/daemon/control-types.d.ts +10 -0
- package/dist/types/daemon/operator-contract.d.ts +47 -0
- package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.d.ts +4 -0
- package/dist/types/discovery/helpers.d.ts +1 -1
- package/dist/types/discovery/substitute-plugin-root.d.ts +0 -4
- package/dist/types/extensibility/extensions/types.d.ts +3 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +26 -7
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +34 -3
- package/dist/types/gjc-runtime/tmux-common.d.ts +6 -0
- package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +5 -0
- package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +309 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +49 -17
- package/dist/types/internal-urls/local-protocol.d.ts +13 -9
- package/dist/types/main.d.ts +66 -2
- package/dist/types/modes/acp/acp-agent.d.ts +19 -2
- package/dist/types/modes/acp/acp-mode.d.ts +12 -0
- package/dist/types/modes/components/assistant-message.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +2 -0
- package/dist/types/modes/components/gajae-pet-widget.d.ts +59 -0
- package/dist/types/modes/components/hook-selector.d.ts +5 -0
- package/dist/types/modes/components/irc-sidebar.d.ts +32 -0
- package/dist/types/modes/components/pet-selector.d.ts +11 -0
- package/dist/types/modes/components/session-selector.d.ts +22 -9
- package/dist/types/modes/components/settings-selector.d.ts +2 -0
- package/dist/types/modes/components/status-line/types.d.ts +1 -1
- package/dist/types/modes/components/status-line.d.ts +0 -10
- package/dist/types/modes/components/tool-execution.d.ts +1 -0
- package/dist/types/modes/components/user-message.d.ts +2 -1
- package/dist/types/modes/controllers/event-controller.d.ts +4 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +1 -0
- package/dist/types/modes/interactive-mode.d.ts +24 -2
- package/dist/types/modes/irc-observation-ledger.d.ts +22 -0
- package/dist/types/modes/print-mode.d.ts +3 -4
- package/dist/types/modes/rpc/rpc-client.d.ts +7 -1
- package/dist/types/modes/rpc/rpc-mode.d.ts +2 -1
- package/dist/types/modes/rpc/rpc-types.d.ts +17 -1
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +8 -0
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +5 -0
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +45 -0
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +42 -2
- package/dist/types/modes/theme/defaults/index.d.ts +568 -568
- package/dist/types/modes/types.d.ts +28 -2
- package/dist/types/modes/utils/abort-message.d.ts +1 -1
- package/dist/types/modes/utils/context-usage.d.ts +4 -19
- package/dist/types/modes/utils/irc-message.d.ts +38 -0
- package/dist/types/modes/utils/ui-helpers.d.ts +13 -4
- package/dist/types/notifications/config.d.ts +34 -0
- package/dist/types/notifications/daemon-paths.d.ts +7 -0
- package/dist/types/notifications/index.d.ts +27 -0
- package/dist/types/notifications/lifecycle-control-runtime.d.ts +12 -4
- package/dist/types/notifications/notification-service.d.ts +144 -0
- package/dist/types/notifications/rate-limit-pool.d.ts +27 -9
- package/dist/types/notifications/telegram-daemon-control.d.ts +6 -0
- package/dist/types/notifications/telegram-daemon.d.ts +130 -3
- package/dist/types/notifications/telegram-reference.d.ts +19 -2
- package/dist/types/notifications/topic-registry.d.ts +24 -4
- package/dist/types/registry/agent-registry.d.ts +2 -0
- package/dist/types/rlm/index.d.ts +1 -1
- package/dist/types/sdk.d.ts +2 -0
- package/dist/types/secrets/obfuscator.d.ts +1 -1
- package/dist/types/session/agent-session.d.ts +40 -3
- package/dist/types/session/cache-economics.d.ts +79 -0
- package/dist/types/session/context-estimation.d.ts +31 -0
- package/dist/types/session/provider-safety-stop.d.ts +5 -0
- package/dist/types/session/session-manager.d.ts +124 -4
- package/dist/types/session/session-storage.d.ts +155 -13
- package/dist/types/setup/credential-auto-import.d.ts +2 -2
- package/dist/types/task/executor.d.ts +3 -0
- package/dist/types/task/receipt.d.ts +3 -1
- package/dist/types/task/types.d.ts +8 -0
- package/dist/types/tools/ask-answer-registry.d.ts +5 -0
- package/dist/types/tools/ask.d.ts +25 -1
- package/dist/types/tools/bash.d.ts +1 -1
- package/dist/types/tools/browser/tab-supervisor.d.ts +6 -0
- package/dist/types/tools/index.d.ts +58 -6
- package/dist/types/tools/telegram-send.d.ts +7 -0
- package/dist/types/utils/external-editor.d.ts +2 -0
- package/package.json +9 -9
- package/scripts/g004-tmux-smoke.ts +196 -36
- package/src/cli/daemon-cli.ts +19 -29
- package/src/cli/malloc-env-guard.test.ts +104 -0
- package/src/cli/malloc-env-guard.ts +149 -0
- package/src/cli/notify-cli.ts +78 -14
- package/src/cli/session-picker.ts +23 -40
- package/src/cli/update-cli.ts +56 -37
- package/src/cli.ts +51 -10
- package/src/commands/daemon.ts +19 -5
- package/src/commands/harness.ts +515 -47
- package/src/commands/launch.ts +11 -3
- package/src/commands/notify.ts +5 -1
- package/src/commands/session.ts +6 -1
- package/src/config/keybindings.ts +5 -0
- package/src/config/model-profile-activation.ts +1 -1
- package/src/config/model-profiles.ts +14 -14
- package/src/config/settings-schema.ts +41 -1
- package/src/config/settings.ts +96 -45
- package/src/coordinator/contract.ts +1 -0
- package/src/coordinator-mcp/model-preset.ts +100 -0
- package/src/coordinator-mcp/policy.ts +30 -0
- package/src/coordinator-mcp/server.ts +2881 -425
- package/src/coordinator-mcp/session-reaper.ts +129 -0
- package/src/daemon/control-types.ts +11 -0
- package/src/daemon/operator-contract.ts +121 -0
- package/src/deep-interview/render-middleware.ts +67 -2
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/models/catalog.ts +57 -17
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/payload/sanitize.ts +15 -2
- package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/register.ts +5 -1
- package/src/extensibility/extensions/runner.ts +1 -1
- package/src/extensibility/extensions/types.ts +3 -1
- package/src/gjc-runtime/launch-tmux.ts +702 -135
- package/src/gjc-runtime/session-state-sidecar.ts +756 -135
- package/src/gjc-runtime/team-runtime.ts +6 -0
- package/src/gjc-runtime/tmux-common.ts +26 -7
- package/src/gjc-runtime/tmux-gc.ts +52 -9
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +185 -0
- package/src/gjc-runtime/tmux-owner-isolation.ts +2060 -0
- package/src/gjc-runtime/tmux-sessions.ts +871 -68
- package/src/internal-urls/docs-index.generated.ts +12 -11
- package/src/internal-urls/local-protocol.ts +29 -10
- package/src/main.ts +301 -80
- package/src/modes/acp/acp-agent.ts +730 -100
- package/src/modes/acp/acp-mode.ts +29 -2
- package/src/modes/components/assistant-message.ts +32 -3
- package/src/modes/components/bash-execution.ts +43 -13
- package/src/modes/components/custom-editor.ts +5 -0
- package/src/modes/components/footer.ts +3 -3
- package/src/modes/components/gajae-pet-widget.ts +360 -0
- package/src/modes/components/hook-selector.ts +12 -0
- package/src/modes/components/irc-sidebar.ts +206 -0
- package/src/modes/components/pet-selector.ts +55 -0
- package/src/modes/components/session-selector.ts +222 -221
- package/src/modes/components/settings-selector.ts +10 -0
- package/src/modes/components/status-line/segments.ts +13 -6
- package/src/modes/components/status-line/types.ts +1 -1
- package/src/modes/components/status-line.ts +4 -171
- package/src/modes/components/tool-execution.ts +47 -6
- package/src/modes/components/user-message.ts +26 -9
- package/src/modes/controllers/command-controller.ts +28 -2
- package/src/modes/controllers/event-controller.ts +159 -36
- package/src/modes/controllers/extension-ui-controller.ts +37 -18
- package/src/modes/controllers/input-controller.ts +8 -2
- package/src/modes/controllers/selector-controller.ts +62 -15
- package/src/modes/interactive-mode.ts +199 -7
- package/src/modes/irc-observation-ledger.ts +127 -0
- package/src/modes/print-mode.ts +228 -92
- package/src/modes/rpc/rpc-client.ts +58 -1
- package/src/modes/rpc/rpc-mode.ts +286 -85
- package/src/modes/rpc/rpc-types.ts +15 -1
- package/src/modes/shared/agent-wire/command-dispatch.ts +33 -1
- package/src/modes/shared/agent-wire/command-validation.ts +10 -0
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +45 -2
- package/src/modes/shared/agent-wire/scopes.ts +1 -0
- package/src/modes/shared/agent-wire/unattended-session.ts +288 -1
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +130 -20
- package/src/modes/types.ts +34 -2
- package/src/modes/utils/context-usage.ts +56 -92
- package/src/modes/utils/hotkeys-markdown.ts +1 -0
- package/src/modes/utils/irc-message.ts +138 -0
- package/src/modes/utils/ui-helpers.ts +216 -50
- package/src/notifications/config.ts +44 -0
- package/src/notifications/daemon-paths.ts +8 -0
- package/src/notifications/index.ts +535 -75
- package/src/notifications/lifecycle-control-runtime.ts +930 -77
- package/src/notifications/notification-service.ts +710 -0
- package/src/notifications/rate-limit-pool.ts +46 -12
- package/src/notifications/telegram-daemon-cli.ts +2 -0
- package/src/notifications/telegram-daemon-control.ts +27 -2
- package/src/notifications/telegram-daemon.ts +635 -94
- package/src/notifications/telegram-reference.ts +73 -13
- package/src/notifications/topic-registry.ts +86 -9
- package/src/prompts/system/irc-peer-roster.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +1 -0
- package/src/prompts/system/system-prompt.md +1 -0
- package/src/prompts/tools/irc.md +1 -1
- package/src/registry/agent-registry.ts +3 -0
- package/src/sdk.ts +52 -1
- package/src/secrets/obfuscator.ts +4 -2
- package/src/session/agent-session.ts +670 -217
- package/src/session/cache-economics.ts +275 -0
- package/src/session/context-estimation.ts +91 -0
- package/src/session/provider-safety-stop.ts +9 -0
- package/src/session/session-dump-format.ts +6 -0
- package/src/session/session-manager.ts +809 -39
- package/src/session/session-storage.ts +582 -38
- package/src/slash-commands/builtin-registry.ts +153 -9
- package/src/slash-commands/helpers/context-report.ts +26 -4
- package/src/task/executor.ts +12 -3
- package/src/task/index.ts +8 -0
- package/src/task/receipt.ts +7 -2
- package/src/task/types.ts +26 -0
- package/src/tools/ask-answer-registry.ts +25 -0
- package/src/tools/ask.ts +355 -33
- package/src/tools/browser/tab-supervisor.ts +63 -6
- package/src/tools/browser.ts +8 -3
- package/src/tools/index.ts +81 -6
- package/src/tools/sqlite-reader.ts +8 -4
- package/src/tui/output-block.ts +18 -6
- package/src/utils/external-editor.ts +6 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { COORDINATOR_MCP_PROTOCOL_VERSION, COORDINATOR_MCP_SERVER_NAME, COORDINATOR_MCP_TOOL_NAMES, type CoordinatorToolName } from "../coordinator/contract";
|
|
2
|
+
import { type OwnerIsolationProbe } from "../gjc-runtime/tmux-owner-isolation";
|
|
3
|
+
import { type CoordinatorModelProfileLoader } from "./model-preset";
|
|
2
4
|
import { type CoordinatorMcpConfig } from "./policy";
|
|
5
|
+
import { type SessionReaper } from "./session-reaper";
|
|
3
6
|
export type { CoordinatorToolName };
|
|
4
7
|
export { COORDINATOR_MCP_PROTOCOL_VERSION, COORDINATOR_MCP_SERVER_NAME, COORDINATOR_MCP_TOOL_NAMES };
|
|
5
8
|
interface JsonRpcRequest {
|
|
@@ -22,20 +25,32 @@ interface JsonRpcResponse {
|
|
|
22
25
|
interface SessionStartInput {
|
|
23
26
|
cwd: string;
|
|
24
27
|
prompt?: string;
|
|
28
|
+
mpreset?: string | null;
|
|
25
29
|
namespace: {
|
|
26
30
|
profile: string | null;
|
|
27
31
|
repo: string | null;
|
|
28
32
|
};
|
|
29
33
|
worktree: true;
|
|
34
|
+
sessionId: string;
|
|
35
|
+
launchId: string;
|
|
36
|
+
/** Canonical, coordinator-owned immutable readiness marker path. */
|
|
37
|
+
readinessMarkerFile: string;
|
|
38
|
+
/** @deprecated Compatibility alias for injected launch providers. */
|
|
39
|
+
readinessFile: string;
|
|
30
40
|
}
|
|
41
|
+
interface CommandResult {
|
|
42
|
+
exitCode: number;
|
|
43
|
+
stdout: string;
|
|
44
|
+
stderr: string;
|
|
45
|
+
}
|
|
46
|
+
type CommandRunner = (command: string[], stdinLine?: string) => Promise<CommandResult>;
|
|
31
47
|
interface CoordinatorServices {
|
|
32
48
|
listSessions?: () => unknown[] | Promise<unknown[]>;
|
|
33
49
|
startSession?: (input: SessionStartInput) => unknown | Promise<unknown>;
|
|
34
|
-
commandRunner?:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}>;
|
|
50
|
+
commandRunner?: CommandRunner;
|
|
51
|
+
forceCloseSession?: (sessionName: string, env: NodeJS.ProcessEnv, expectedSessionId?: string, expectedStateFile?: string) => Promise<unknown>;
|
|
52
|
+
ownerIsolationProbe?: OwnerIsolationProbe;
|
|
53
|
+
resolveModelProfiles?: CoordinatorModelProfileLoader;
|
|
39
54
|
}
|
|
40
55
|
interface CoordinatorMcpServerOptions {
|
|
41
56
|
env?: NodeJS.ProcessEnv;
|
|
@@ -43,16 +58,35 @@ interface CoordinatorMcpServerOptions {
|
|
|
43
58
|
}
|
|
44
59
|
interface LegacyHandlerOptions {
|
|
45
60
|
env?: NodeJS.ProcessEnv;
|
|
46
|
-
createSession?: () => unknown;
|
|
61
|
+
createSession?: (input: SessionStartInput) => unknown;
|
|
47
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Append an authoritative `--mpreset <profile>` to the coordinator child launch
|
|
65
|
+
* command so the spawned GJC session activates the selected profile from its
|
|
66
|
+
* first turn. The profile name is validated against the merged registry before
|
|
67
|
+
* reaching here; it is still shell-quoted as defense in depth.
|
|
68
|
+
*
|
|
69
|
+
* Precedence note: this matches `gjc --mpreset <profile>` semantics exactly, so
|
|
70
|
+
* an explicit model-affecting flag already present in the operator-configured
|
|
71
|
+
* `sessionCommand` (e.g. a `--model`/`--thinking` baked into the launch command)
|
|
72
|
+
* follows the same CLI precedence as a direct `gjc --mpreset ... --model ...`
|
|
73
|
+
* invocation. The effective profile recorded on the session is the
|
|
74
|
+
* coordinator-resolved request, not a child-attested activation receipt; a
|
|
75
|
+
* cross-process activation receipt is a possible future enhancement and is out
|
|
76
|
+
* of scope for the per-session selection contract here.
|
|
77
|
+
*/
|
|
78
|
+
export declare function buildCoordinatorSessionCommand(sessionCommand: string, mpreset: string | null | undefined): string;
|
|
48
79
|
export declare const COORDINATOR_AWAIT_TURN_TIMEOUT_MAX_MS: number;
|
|
49
80
|
export declare const COORDINATOR_RUNTIME_PROMPT_ACK_TIMEOUT_MAX_MS: number;
|
|
81
|
+
export declare const COORDINATOR_RUNTIME_READINESS_TIMEOUT_MAX_MS: number;
|
|
50
82
|
export declare const COORDINATOR_EVENT_WATCH_TIMEOUT_MAX_MS = 30000;
|
|
51
83
|
export declare const COORDINATOR_POLL_INTERVAL_MAX_MS = 10000;
|
|
52
84
|
export declare function boundedAwaitTurnTimeoutMs(value: unknown): number;
|
|
53
85
|
export declare function boundedRuntimePromptAckTimeoutMs(value: unknown): number;
|
|
86
|
+
export declare function boundedRuntimeReadinessTimeoutMs(value: unknown): number;
|
|
54
87
|
export declare function boundedEventWatchTimeoutMs(value: unknown): number;
|
|
55
88
|
export declare function boundedPollIntervalMs(value: unknown): number;
|
|
89
|
+
export declare function coordinatorOwnerIsolationProbe(runner: CommandRunner): Promise<OwnerIsolationProbe>;
|
|
56
90
|
export declare function readCoordinatorArtifact(config: CoordinatorMcpConfig, args: {
|
|
57
91
|
path: unknown;
|
|
58
92
|
}): Promise<Record<string, unknown>>;
|
|
@@ -61,6 +95,45 @@ export declare function createCoordinatorMcpServer(options?: CoordinatorMcpServe
|
|
|
61
95
|
callTool: (name: string, args?: Record<string, unknown>) => Promise<Record<string, unknown>>;
|
|
62
96
|
handleJsonRpc: (request: JsonRpcRequest) => Promise<JsonRpcResponse>;
|
|
63
97
|
handle: (request: JsonRpcRequest) => Promise<JsonRpcResponse>;
|
|
98
|
+
reapSession: (rawId: unknown, opts?: {
|
|
99
|
+
force?: boolean;
|
|
100
|
+
reason?: string;
|
|
101
|
+
}) => Promise<{
|
|
102
|
+
ok: boolean;
|
|
103
|
+
reason?: string;
|
|
104
|
+
killed: boolean;
|
|
105
|
+
active_turn_id?: string;
|
|
106
|
+
detail?: string;
|
|
107
|
+
}>;
|
|
108
|
+
sessionReaper: SessionReaper;
|
|
64
109
|
};
|
|
65
110
|
export declare function handleCoordinatorMcpRequest(request: JsonRpcRequest, options?: LegacyHandlerOptions): Promise<JsonRpcResponse>;
|
|
111
|
+
export interface PumpCoordinatorOptions {
|
|
112
|
+
/** Max concurrent in-flight *data* (non-control) handlers. Control frames (ping) bypass this. */
|
|
113
|
+
maxDataConcurrency?: number;
|
|
114
|
+
/** Max data requests queued waiting for a slot before overflow is rejected as server_busy. */
|
|
115
|
+
maxQueueDepth?: number;
|
|
116
|
+
/** Bounded wait for in-flight handlers/writes to settle after input ends. */
|
|
117
|
+
drainTimeoutMs?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Pump a newline-delimited JSON-RPC stream with BOUNDED concurrent dispatch.
|
|
121
|
+
*
|
|
122
|
+
* A long-running tool call (e.g. gjc_coordinator_await_turn, which polls for
|
|
123
|
+
* minutes) must not block the read loop from answering keepalive pings on the
|
|
124
|
+
* same stdio channel. But naive unbounded concurrency reintroduces its own
|
|
125
|
+
* hazards, so this pump enforces the safety envelope the coordinator needs:
|
|
126
|
+
*
|
|
127
|
+
* - Control frames (ping) bypass the data-concurrency cap → keepalive is always
|
|
128
|
+
* answerable even while data handlers saturate.
|
|
129
|
+
* - Data handlers are capped at `maxDataConcurrency`; excess is queued up to
|
|
130
|
+
* `maxQueueDepth`, then rejected as `server_busy` (bounded memory / fanout).
|
|
131
|
+
* - A coded local `EPIPE` terminalizes writer and dispatch together; other
|
|
132
|
+
* writer faults reject the pump without poisoning the serialized write chain.
|
|
133
|
+
* - On EOF or a closed peer the pump drains already-running handlers (bounded
|
|
134
|
+
* by `drainTimeoutMs`) and never promotes queued work.
|
|
135
|
+
* - Byte chunks are decoded with a streaming decoder so multibyte characters
|
|
136
|
+
* split across chunks are not corrupted.
|
|
137
|
+
*/
|
|
138
|
+
export declare function pumpCoordinatorMcpStream(handleJsonRpc: (request: JsonRpcRequest) => Promise<JsonRpcResponse>, input: AsyncIterable<string | Uint8Array>, writeLine: (line: string) => void | Promise<void>, options?: PumpCoordinatorOptions): Promise<void>;
|
|
66
139
|
export declare function runCoordinatorMcpStdio(options?: CoordinatorMcpServerOptions): Promise<void>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idle reaper for coordinator-managed GJC worker sessions.
|
|
3
|
+
*
|
|
4
|
+
* Every `gjc_delegate_*` call that omits `session_id` starts a fresh tmux worker
|
|
5
|
+
* session. Nothing in the coordinator ever tore those down, so completed/crashed
|
|
6
|
+
* sessions accumulated (RAM + worktrees) until something killed them by hand.
|
|
7
|
+
*
|
|
8
|
+
* This is the automatic backstop (defense-in-depth): a periodic sweep force-closes
|
|
9
|
+
* sessions that are (a) ephemeral — coordinator delegate-created, never a user's
|
|
10
|
+
* registered resident session, (b) not mid-turn, and (c) idle past a TTL.
|
|
11
|
+
*
|
|
12
|
+
* The controller is pure + fully injectable (clock / list / reap side-effects) so
|
|
13
|
+
* it is unit-testable without tmux, the filesystem, or wall-clock waits. The
|
|
14
|
+
* scheduling mirrors the proven resource-gc controller: a recursive setTimeout
|
|
15
|
+
* with a generation guard so a stop()+start() can never leak a duplicate timer.
|
|
16
|
+
*/
|
|
17
|
+
export declare const DEFAULT_SESSION_IDLE_TTL_MS: number;
|
|
18
|
+
export declare const DEFAULT_SESSION_SWEEP_INTERVAL_MS: number;
|
|
19
|
+
export declare const MIN_SESSION_IDLE_TTL_MS = 60000;
|
|
20
|
+
export declare const MIN_SESSION_SWEEP_INTERVAL_MS = 30000;
|
|
21
|
+
/** Minimal projection of a coordinator session the reaper needs to decide. */
|
|
22
|
+
export interface ReapableSession {
|
|
23
|
+
sessionId: string;
|
|
24
|
+
/** True only for coordinator delegate-created sessions. User-registered resident sessions are false and never reaped. */
|
|
25
|
+
ephemeral: boolean;
|
|
26
|
+
/** Epoch ms of last observed activity (turn update / session-state write / session creation). */
|
|
27
|
+
lastActivityMs: number;
|
|
28
|
+
/** True while a turn is active — never reap mid-turn. */
|
|
29
|
+
hasActiveTurn: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface SessionReaperPolicy {
|
|
32
|
+
idleTtlMs: number;
|
|
33
|
+
sweepIntervalMs: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Pure selection: which sessions are safe to reap at `now`.
|
|
37
|
+
* A session is reapable iff ephemeral AND not mid-turn AND idle ≥ (clamped) TTL.
|
|
38
|
+
*/
|
|
39
|
+
export declare function selectReapableSessions(sessions: readonly ReapableSession[], now: number, idleTtlMs: number): ReapableSession[];
|
|
40
|
+
/** Injectable side-effects so the controller runs in tests without tmux/fs/real time. */
|
|
41
|
+
export interface SessionReaperDeps {
|
|
42
|
+
listSessions: () => Promise<ReapableSession[]>;
|
|
43
|
+
reapSession: (sessionId: string) => Promise<void>;
|
|
44
|
+
now: () => number;
|
|
45
|
+
}
|
|
46
|
+
export interface SessionReaper {
|
|
47
|
+
/** Run one sweep; returns the number of sessions successfully reaped. */
|
|
48
|
+
sweepOnce: () => Promise<number>;
|
|
49
|
+
start: () => void;
|
|
50
|
+
stop: () => void;
|
|
51
|
+
readonly running: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare function createSessionReaper(deps: SessionReaperDeps, policy: SessionReaperPolicy): SessionReaper;
|
|
@@ -40,6 +40,14 @@ export interface DaemonOperationOptions {
|
|
|
40
40
|
/** For reload: spawn a fresh owner even when none is currently running. */
|
|
41
41
|
spawnIfStopped?: boolean;
|
|
42
42
|
}
|
|
43
|
+
export interface DaemonRecovery {
|
|
44
|
+
/** Machine-readable recovery category for automation branching. */
|
|
45
|
+
reason: "ownership_mismatch";
|
|
46
|
+
/** One-line human summary of why the operation could not proceed. */
|
|
47
|
+
summary: string;
|
|
48
|
+
/** Ordered, copy-pasteable remediation steps. */
|
|
49
|
+
steps: string[];
|
|
50
|
+
}
|
|
43
51
|
export interface DaemonOperationResult {
|
|
44
52
|
kind: DaemonKind;
|
|
45
53
|
action: Exclude<DaemonAction, "list">;
|
|
@@ -48,6 +56,8 @@ export interface DaemonOperationResult {
|
|
|
48
56
|
after?: DaemonStatus;
|
|
49
57
|
warnings: string[];
|
|
50
58
|
message: string;
|
|
59
|
+
/** Present when the operation was refused with an actionable recovery path (e.g. ownership mismatch). */
|
|
60
|
+
recovery?: DaemonRecovery;
|
|
51
61
|
}
|
|
52
62
|
export interface BuiltInDaemonController {
|
|
53
63
|
readonly kind: DaemonKind;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared operator contract for the `gjc daemon` command surface.
|
|
3
|
+
*
|
|
4
|
+
* One source of truth for the beginner-safe operational vocabulary so the
|
|
5
|
+
* guided human surface and the machine-readable JSON never drift:
|
|
6
|
+
* - the terse action verbs plus operator aliases (e.g. `restart` -> `reload`),
|
|
7
|
+
* - process exit codes,
|
|
8
|
+
* - concise vs. `--verbose` human rendering of statuses and results, and
|
|
9
|
+
* - actionable recovery guidance for a token/chat ownership mismatch.
|
|
10
|
+
*
|
|
11
|
+
* The full roots/debug payload lives behind `--verbose` (human) or `--json`
|
|
12
|
+
* (automation); the default human output stays a concise per-daemon result.
|
|
13
|
+
*/
|
|
14
|
+
import type { DaemonAction, DaemonOperationResult, DaemonRecovery, DaemonStatus } from "./control-types";
|
|
15
|
+
/** Canonical daemon actions accepted as the leading verb. */
|
|
16
|
+
export declare const DAEMON_CANONICAL_ACTIONS: readonly DaemonAction[];
|
|
17
|
+
/**
|
|
18
|
+
* Operator-friendly aliases resolved to a canonical action. `restart` is the
|
|
19
|
+
* routine "reload if running, otherwise start" verb; it maps onto `reload`,
|
|
20
|
+
* whose default already spawns a fresh owner when none is running.
|
|
21
|
+
*/
|
|
22
|
+
export declare const DAEMON_ACTION_ALIASES: Readonly<Record<string, DaemonAction>>;
|
|
23
|
+
/** Every token accepted in the leading action position (canonical + aliases). */
|
|
24
|
+
export declare const DAEMON_ACTION_TOKENS: readonly string[];
|
|
25
|
+
/** Resolve a leading verb (canonical or alias) to its canonical action. */
|
|
26
|
+
export declare function resolveDaemonAction(token: string | undefined): DaemonAction | undefined;
|
|
27
|
+
/** Exit codes for `gjc daemon`. Backward compatible: success 0, any failure 1. */
|
|
28
|
+
export declare const DAEMON_EXIT: {
|
|
29
|
+
readonly ok: 0;
|
|
30
|
+
readonly failure: 1;
|
|
31
|
+
};
|
|
32
|
+
/** Human-facing headline when a spawn/reload is refused by a live foreign identity. */
|
|
33
|
+
export declare const OWNERSHIP_MISMATCH_MESSAGE = "refused: a live Telegram daemon with a different bot token or chat already owns this workspace";
|
|
34
|
+
/** Structured, actionable recovery for a token/chat ownership mismatch. */
|
|
35
|
+
export declare function ownershipMismatchRecovery(): DaemonRecovery;
|
|
36
|
+
/**
|
|
37
|
+
* Render one daemon status. Concise by default (single head line + any
|
|
38
|
+
* actionable warning); `--verbose` adds runtime detail and the full roots list.
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatDaemonStatus(status: DaemonStatus, opts?: {
|
|
41
|
+
verbose?: boolean;
|
|
42
|
+
}): string;
|
|
43
|
+
/**
|
|
44
|
+
* Render one operation result. Keeps the stable `<kind> <action>: ok|failed —
|
|
45
|
+
* <message>` head line, then any warnings, then actionable recovery steps.
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatDaemonResult(result: DaemonOperationResult): string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Model definitions for Grok CLI's API.
|
|
3
3
|
*/
|
|
4
|
+
import { Effort } from '@gajae-code/ai/model-thinking';
|
|
4
5
|
export interface GrokCliModelConfig {
|
|
5
6
|
id: string;
|
|
6
7
|
name: string;
|
|
@@ -14,9 +15,12 @@ export interface GrokCliModelConfig {
|
|
|
14
15
|
};
|
|
15
16
|
contextWindow: number;
|
|
16
17
|
maxTokens: number;
|
|
18
|
+
/** Highest reasoning effort supported by this model. */
|
|
19
|
+
maxReasoningEffort?: Effort;
|
|
17
20
|
/** Models that don't support reasoning.effort get a thinkingLevelMap. */
|
|
18
21
|
thinkingLevelMap?: Record<string, string | null>;
|
|
19
22
|
}
|
|
23
|
+
export declare function getMaxReasoningEffort(modelId: string): Effort | undefined;
|
|
20
24
|
export declare function supportsReasoningEffort(modelId: string): boolean;
|
|
21
25
|
/**
|
|
22
26
|
* Resolve the active model list. If `GJC_GROK_CLI_MODELS` is set,
|
|
@@ -176,11 +176,13 @@ export interface ExtensionUIContext {
|
|
|
176
176
|
setToolsExpanded(expanded: boolean): void;
|
|
177
177
|
}
|
|
178
178
|
export interface ContextUsage {
|
|
179
|
-
/**
|
|
179
|
+
/** Context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */
|
|
180
180
|
tokens: number | null;
|
|
181
181
|
contextWindow: number;
|
|
182
182
|
/** Context usage as percentage of context window, or null if tokens is unknown. */
|
|
183
183
|
percent: number | null;
|
|
184
|
+
/** Provenance: "provider_anchor" = anchored on provider-reported usage (+ heuristic trailing delta); "heuristic" = no provider anchor available, full estimate; "unknown" = post-compaction, no post-compaction provider response yet. */
|
|
185
|
+
source: "provider_anchor" | "heuristic" | "unknown";
|
|
184
186
|
}
|
|
185
187
|
export interface CompactOptions {
|
|
186
188
|
onComplete?: (result: CompactionResult) => void;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Args } from "../cli/args";
|
|
2
2
|
import { buildGjcTmuxExactSessionTarget, buildGjcTmuxProfileCommands, GJC_DEFAULT_TMUX_SESSION, GJC_TMUX_COMMAND_ENV, GJC_TMUX_MOUSE_ENV, GJC_TMUX_PROFILE_ENV, GJC_TMUX_SESSION_PREFIX, type GjcTmuxProfileCommand } from "./tmux-common";
|
|
3
|
+
import { type OwnerIsolationProbeSync } from "./tmux-owner-isolation";
|
|
3
4
|
export { buildGjcTmuxExactSessionTarget, buildGjcTmuxProfileCommands, GJC_DEFAULT_TMUX_SESSION, GJC_TMUX_COMMAND_ENV, GJC_TMUX_MOUSE_ENV, GJC_TMUX_PROFILE_ENV, GJC_TMUX_SESSION_PREFIX, };
|
|
4
5
|
export declare const GJC_TMUX_LAUNCHED_ENV = "GJC_TMUX_LAUNCHED";
|
|
5
6
|
export declare const GJC_LAUNCH_POLICY_ENV = "GJC_LAUNCH_POLICY";
|
|
6
7
|
export declare const GJC_TMUX_WINDOW_LABEL_MAX_WIDTH = 48;
|
|
7
|
-
export declare const GJC_PSMUX_PROFILE_FORCE_ENV = "GJC_PSMUX_PROFILE_FORCE";
|
|
8
8
|
interface TtyState {
|
|
9
9
|
stdin: boolean;
|
|
10
10
|
stdout: boolean;
|
|
@@ -28,11 +28,19 @@ export interface TmuxLaunchContext {
|
|
|
28
28
|
existingBranchSessionName?: string | null;
|
|
29
29
|
project?: string | null;
|
|
30
30
|
diagnosticWriter?: (message: string) => void;
|
|
31
|
+
/**
|
|
32
|
+
* Synchronous owner-isolation proof boundary for managed tmux creation.
|
|
33
|
+
* Production uses Linux /proc probes; callers may inject deterministic proofs.
|
|
34
|
+
*/
|
|
35
|
+
ownerIsolationProbe?: OwnerIsolationProbeSync;
|
|
36
|
+
/** Test seam for deterministic default-probe caller cgroup classification. */
|
|
37
|
+
callerCgroupReader?: () => string | null;
|
|
31
38
|
}
|
|
32
39
|
export interface TmuxSpawnResult {
|
|
33
40
|
exitCode: number | null;
|
|
34
41
|
signalCode?: string | null;
|
|
35
42
|
stderr?: string;
|
|
43
|
+
stdout?: string;
|
|
36
44
|
}
|
|
37
45
|
export interface TmuxTerminalSize {
|
|
38
46
|
columns: number;
|
|
@@ -46,14 +54,12 @@ export interface TmuxSpawnOptions {
|
|
|
46
54
|
stdout: "inherit" | "pipe";
|
|
47
55
|
stderr: "inherit" | "pipe";
|
|
48
56
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* text is also returned in TmuxSpawnResult.stderr for diagnostic
|
|
52
|
-
* surfacing in "attach failed" / "profile tagging failed" messages.
|
|
53
|
-
* Defaults to false to preserve the previous PTY-binding behavior for
|
|
54
|
-
* attach-session and other interactive commands.
|
|
57
|
+
* Captures control-plane stderr for sanitized, bounded diagnostics. PTY-bound
|
|
58
|
+
* commands retain inherited stderr for multiplexer compatibility.
|
|
55
59
|
*/
|
|
56
60
|
captureStderr?: boolean;
|
|
61
|
+
/** Internal scoped-bootstrap input; never used for ordinary tmux commands. */
|
|
62
|
+
stdinLine?: string;
|
|
57
63
|
}
|
|
58
64
|
export interface TmuxLaunchPlan {
|
|
59
65
|
tmuxCommand: string;
|
|
@@ -67,6 +73,17 @@ export interface TmuxLaunchPlan {
|
|
|
67
73
|
project?: string | null;
|
|
68
74
|
sessionId?: string | null;
|
|
69
75
|
sessionStateFile?: string | null;
|
|
76
|
+
/** Immutable Linux-managed owner provenance, assigned immediately before creation. */
|
|
77
|
+
ownerGeneration?: string;
|
|
78
|
+
/** Generation state captured before owner-isolation planning; required for publication CAS. */
|
|
79
|
+
ownerGenerationBaseline?: import("./tmux-owner-isolation").OwnerGenerationBaseline;
|
|
80
|
+
/** Native tmux session identity emitted atomically by `new-session -P -F`. */
|
|
81
|
+
createdSessionId?: string;
|
|
82
|
+
/** Safe server identity proven immediately after creation. */
|
|
83
|
+
createdServerIdentity?: {
|
|
84
|
+
pid: number;
|
|
85
|
+
startTime: string;
|
|
86
|
+
};
|
|
70
87
|
isPsmux: boolean;
|
|
71
88
|
platform: NodeJS.Platform;
|
|
72
89
|
}
|
|
@@ -89,6 +106,8 @@ export interface GjcTmuxProfileContext {
|
|
|
89
106
|
project?: string | null;
|
|
90
107
|
sessionId?: string | null;
|
|
91
108
|
sessionStateFile?: string | null;
|
|
109
|
+
ownerGeneration?: string | null;
|
|
110
|
+
ownerServerKey?: string | null;
|
|
92
111
|
version?: string | null;
|
|
93
112
|
}
|
|
94
113
|
export declare function applyGjcTmuxProfile(context: GjcTmuxProfileContext): GjcTmuxProfileResult;
|
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import { postmortem } from "@gajae-code/utils";
|
|
2
|
+
/** Managed tmux owner provenance propagated only to the launched child process. */
|
|
3
|
+
export declare const GJC_TMUX_OWNER_GENERATION_ENV = "GJC_TMUX_OWNER_GENERATION";
|
|
4
|
+
export declare const GJC_TMUX_OWNER_STATE_DIR_ENV = "GJC_TMUX_OWNER_STATE_DIR";
|
|
5
|
+
export declare const GJC_TMUX_OWNER_SERVER_KEY_ENV = "GJC_TMUX_OWNER_SERVER_KEY";
|
|
2
6
|
export declare const GJC_COORDINATOR_SESSION_STATE_FILE_ENV = "GJC_COORDINATOR_SESSION_STATE_FILE";
|
|
3
7
|
export declare const GJC_COORDINATOR_SESSION_ID_ENV = "GJC_COORDINATOR_SESSION_ID";
|
|
4
8
|
export declare const GJC_COORDINATOR_SESSION_BRANCH_ENV = "GJC_COORDINATOR_SESSION_BRANCH";
|
|
9
|
+
export declare const GJC_COORDINATOR_SESSION_LAUNCH_ID_ENV = "GJC_COORDINATOR_SESSION_LAUNCH_ID";
|
|
10
|
+
export declare const GJC_COORDINATOR_SESSION_READINESS_FILE_ENV = "GJC_COORDINATOR_SESSION_READINESS_FILE";
|
|
11
|
+
export type RuntimeInputReadyMarker = Readonly<{
|
|
12
|
+
schema_version: 1;
|
|
13
|
+
session_id: string;
|
|
14
|
+
launch_id: string;
|
|
15
|
+
state: "ready_for_input";
|
|
16
|
+
event: "interactive_input_ready";
|
|
17
|
+
source: "gjc_interactive_runtime";
|
|
18
|
+
ready_for_input: true;
|
|
19
|
+
created_at: string;
|
|
20
|
+
}>;
|
|
5
21
|
export type RuntimeState = "ready_for_input" | "running" | "needs_user_input" | "completed" | "errored";
|
|
6
22
|
/** Test-only counters for runtime sidecar hot-path assertions. */
|
|
7
23
|
export declare const __sessionStateSidecarPerfCounters: {
|
|
@@ -12,19 +28,33 @@ interface RuntimeStateEvent {
|
|
|
12
28
|
type: string;
|
|
13
29
|
messages?: unknown[];
|
|
14
30
|
}
|
|
15
|
-
interface
|
|
31
|
+
export interface OwnerTerminalContext {
|
|
32
|
+
generation: string;
|
|
33
|
+
stateDir: string;
|
|
34
|
+
socketKey: string;
|
|
35
|
+
scope?: string | null;
|
|
36
|
+
ownerPid?: number | null;
|
|
37
|
+
ownerName?: string | null;
|
|
38
|
+
operatorDispatchId?: string | null;
|
|
39
|
+
}
|
|
40
|
+
export interface RuntimeStateContext {
|
|
16
41
|
sessionId: string;
|
|
17
42
|
cwd: string;
|
|
18
43
|
sessionFile?: string | null;
|
|
19
44
|
branch?: string | null;
|
|
45
|
+
/** Public-safe owner metadata used to persist the canonical terminal verdict. */
|
|
46
|
+
ownerTerminal?: OwnerTerminalContext | null;
|
|
47
|
+
/** Internal fail-closed marker set only when managed owner metadata is malformed or missing. */
|
|
48
|
+
ownerTerminalMetadataInvalid?: boolean;
|
|
20
49
|
}
|
|
21
50
|
export type TerminalRuntimeStateStatus = {
|
|
22
51
|
terminal: true;
|
|
23
52
|
state: "completed" | "errored";
|
|
24
53
|
} | {
|
|
25
54
|
terminal: false;
|
|
26
|
-
reason: "missing_state_file" | "invalid_json" | "session_id_mismatch" | "cwd_mismatch" | "session_file_mismatch" | "non_terminal_state";
|
|
55
|
+
reason: "missing_state_file" | "invalid_json" | "invalid_state_marker" | "session_id_mismatch" | "cwd_mismatch" | "session_file_mismatch" | "non_terminal_state";
|
|
27
56
|
};
|
|
57
|
+
export declare function persistCoordinatorRuntimeInputReady(): Promise<RuntimeInputReadyMarker | null>;
|
|
28
58
|
export declare function readTerminalRuntimeStateMarker(input: {
|
|
29
59
|
stateFile?: string | null;
|
|
30
60
|
sessionId?: string | null;
|
|
@@ -34,6 +64,7 @@ export declare function readTerminalRuntimeStateMarker(input: {
|
|
|
34
64
|
export declare function stateForEvent(event: RuntimeStateEvent): RuntimeState | null;
|
|
35
65
|
export declare function eventAffectsCoordinatorRuntimeState(event: RuntimeStateEvent): boolean;
|
|
36
66
|
export declare function persistCoordinatorRuntimeStateFromEvent(event: RuntimeStateEvent, context: RuntimeStateContext): Promise<void>;
|
|
37
|
-
export declare function
|
|
67
|
+
export declare function ownerTerminalContextFromEnvironment(): OwnerTerminalContext | "invalid" | null;
|
|
68
|
+
export declare function persistCoordinatorRuntimeStateFromPostmortem(reason: postmortem.Reason, context: RuntimeStateContext): Promise<void>;
|
|
38
69
|
export declare function registerCoordinatorRuntimeStateFinalizer(context: RuntimeStateContext): () => void;
|
|
39
70
|
export {};
|
|
@@ -12,6 +12,8 @@ export declare const GJC_TMUX_BRANCH_SLUG_OPTION = "@gjc-branch-slug";
|
|
|
12
12
|
export declare const GJC_TMUX_PROJECT_OPTION = "@gjc-project";
|
|
13
13
|
export declare const GJC_TMUX_SESSION_ID_OPTION = "@gjc-session-id";
|
|
14
14
|
export declare const GJC_TMUX_SESSION_STATE_FILE_OPTION = "@gjc-session-state-file";
|
|
15
|
+
export declare const GJC_TMUX_OWNER_GENERATION_OPTION = "@gjc-owner-generation";
|
|
16
|
+
export declare const GJC_TMUX_OWNER_SERVER_KEY_OPTION = "@gjc-owner-server-key";
|
|
15
17
|
export declare const GJC_TMUX_VERSION_OPTION = "@gjc-version";
|
|
16
18
|
export declare const GJC_PSMUX_PROFILE_FORCE_ENV = "GJC_PSMUX_PROFILE_FORCE";
|
|
17
19
|
export interface GjcTmuxProfileCommand {
|
|
@@ -89,6 +91,8 @@ export declare function buildGjcTmuxRequiredProfileCommands(target: string, meta
|
|
|
89
91
|
project?: string | null;
|
|
90
92
|
sessionId?: string | null;
|
|
91
93
|
sessionStateFile?: string | null;
|
|
94
|
+
ownerGeneration?: string | null;
|
|
95
|
+
ownerServerKey?: string | null;
|
|
92
96
|
version?: string | null;
|
|
93
97
|
}): GjcTmuxProfileCommand[];
|
|
94
98
|
export declare function buildGjcTmuxProfileCommands(target: string, env?: NodeJS.ProcessEnv, metadata?: {
|
|
@@ -97,6 +101,8 @@ export declare function buildGjcTmuxProfileCommands(target: string, env?: NodeJS
|
|
|
97
101
|
project?: string | null;
|
|
98
102
|
sessionId?: string | null;
|
|
99
103
|
sessionStateFile?: string | null;
|
|
104
|
+
ownerGeneration?: string | null;
|
|
105
|
+
ownerServerKey?: string | null;
|
|
100
106
|
version?: string | null;
|
|
101
107
|
}, opts?: {
|
|
102
108
|
platform?: NodeJS.Platform;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Matches the sole argv shape allowed to enter the owner-isolation JSON-line protocol. */
|
|
2
|
+
export declare function isTmuxOwnerIsolationCliArgv(argv: readonly string[]): boolean;
|
|
3
|
+
/** Reads exactly one bounded JSON line and writes exactly one JSON response line. */
|
|
4
|
+
export declare function runTmuxOwnerIsolationCli(stdin: string): Promise<string>;
|
|
5
|
+
export declare function runTmuxOwnerIsolationCliFromStdin(): Promise<void>;
|