@scotthuang/agent-knock-knock 0.11.6 → 0.11.7
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 +13 -0
- package/dist/src/cli.js +585 -408
- package/dist/src/cli.js.map +1 -1
- package/dist/src/managed-session.d.ts +15 -0
- package/dist/src/managed-session.js +105 -4
- package/dist/src/managed-session.js.map +1 -1
- package/dist/src/native-thread-resume-snapshot.d.ts +5 -2
- package/dist/src/native-thread-resume-snapshot.js +65 -15
- package/dist/src/native-thread-resume-snapshot.js.map +1 -1
- package/dist/src/session-store.js +5 -0
- package/dist/src/session-store.js.map +1 -1
- package/dist/src/terminal-agent-adapter.d.ts +2 -14
- package/dist/src/terminal-agent-adapter.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +7 -1
- package/dist/src/terminal-agent-bridge.js +178 -73
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-control-provider.d.ts +49 -21
- package/dist/src/terminal-control-provider.js +328 -30
- package/dist/src/terminal-control-provider.js.map +1 -1
- package/dist/src/terminal-control-ref.d.ts +119 -0
- package/dist/src/terminal-control-ref.js +410 -0
- package/dist/src/terminal-control-ref.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral terminal identity and routing primitives.
|
|
3
|
+
*
|
|
4
|
+
* Persisted/public terminal control records intentionally keep their current
|
|
5
|
+
* provider-owned shape. Generic lifecycle code must project those records
|
|
6
|
+
* through the helpers in this module instead of rebuilding identity from
|
|
7
|
+
* route fields such as a selector or socket path.
|
|
8
|
+
*/
|
|
9
|
+
export type TerminalControlCapability = "screen_status" | "send_keys" | "terminal_approval" | "screen_completion" | "durable_completion" | "terminal_cancel";
|
|
10
|
+
/** Transport capabilities owned by a terminal provider, not an agent TUI. */
|
|
11
|
+
export type TerminalProviderCapability = "screen_capture" | "ansi_capture" | "text_delivery" | "key_delivery" | "process_inspection" | "stable_resource_resolution";
|
|
12
|
+
export interface TmuxTerminalControlRef {
|
|
13
|
+
kind: "tmux";
|
|
14
|
+
target: string;
|
|
15
|
+
socketPath?: string;
|
|
16
|
+
session: string;
|
|
17
|
+
window: number;
|
|
18
|
+
pane: number;
|
|
19
|
+
panePid: number;
|
|
20
|
+
currentCommand?: string;
|
|
21
|
+
currentPath?: string;
|
|
22
|
+
capabilities: TerminalControlCapability[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Versioned union for provider-owned persisted/public control records.
|
|
26
|
+
* New providers add a member here; generic callers consume
|
|
27
|
+
* TerminalEndpointRef instead of narrowing this union themselves.
|
|
28
|
+
*/
|
|
29
|
+
export type TerminalControlRef = TmuxTerminalControlRef;
|
|
30
|
+
export interface TerminalEndpointIdentity {
|
|
31
|
+
providerKind: string;
|
|
32
|
+
endpointKey: string;
|
|
33
|
+
resourceKey: string;
|
|
34
|
+
}
|
|
35
|
+
export interface TerminalRouteIdentity {
|
|
36
|
+
routeKey: string;
|
|
37
|
+
label: string;
|
|
38
|
+
currentCommand?: string;
|
|
39
|
+
currentPath?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Authoritative internal reference passed across the provider boundary.
|
|
43
|
+
* `identity` is stable for binding/locking while `route` may be refreshed.
|
|
44
|
+
* `providerRef` is opaque to generic lifecycle code.
|
|
45
|
+
*/
|
|
46
|
+
export interface TerminalEndpointRef {
|
|
47
|
+
identity: TerminalEndpointIdentity;
|
|
48
|
+
route: TerminalRouteIdentity;
|
|
49
|
+
/** Process-incarnation evidence, deliberately separate from stable identity. */
|
|
50
|
+
processAnchorPid?: number;
|
|
51
|
+
capabilities: readonly TerminalControlCapability[];
|
|
52
|
+
/** Opaque provider-owned routing payload. Generic code must never inspect it. */
|
|
53
|
+
providerRef: unknown;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Durable evidence shape used by ledgers and snapshot compatibility readers.
|
|
57
|
+
* Legacy route fields remain additive for diagnostics and old readers.
|
|
58
|
+
*/
|
|
59
|
+
export interface TerminalControlEvidence {
|
|
60
|
+
schema: "agent-knock-knock/terminal-endpoint";
|
|
61
|
+
version: 1;
|
|
62
|
+
kind: string;
|
|
63
|
+
endpoint_key: string;
|
|
64
|
+
resource_key: string;
|
|
65
|
+
route_key: string;
|
|
66
|
+
process_anchor_pid: number | null;
|
|
67
|
+
/** Provider-owned compatibility fields; generic code must not derive identity from them. */
|
|
68
|
+
target?: string;
|
|
69
|
+
socket_path?: string | null;
|
|
70
|
+
pane_pid?: number | null;
|
|
71
|
+
server_socket_path?: string | null;
|
|
72
|
+
pane_id?: string | null;
|
|
73
|
+
current_path?: string | null;
|
|
74
|
+
}
|
|
75
|
+
export declare function createTerminalEndpointRef(value: {
|
|
76
|
+
identity: TerminalEndpointIdentity;
|
|
77
|
+
route: TerminalRouteIdentity;
|
|
78
|
+
processAnchorPid?: number;
|
|
79
|
+
capabilities: readonly TerminalControlCapability[];
|
|
80
|
+
providerRef: unknown;
|
|
81
|
+
}): TerminalEndpointRef;
|
|
82
|
+
export declare function terminalEndpointFromControlRef(terminalControl: TerminalControlRef): TerminalEndpointRef;
|
|
83
|
+
export declare function hasCanonicalTerminalEndpoint(terminalControl: TerminalControlRef): boolean;
|
|
84
|
+
export declare function terminalEndpointIdentityKey(value: TerminalEndpointRef | TerminalEndpointIdentity | TerminalControlRef): string;
|
|
85
|
+
export declare function sameTerminalEndpointIdentity(left: TerminalEndpointRef | TerminalEndpointIdentity | TerminalControlRef, right: TerminalEndpointRef | TerminalEndpointIdentity | TerminalControlRef): boolean;
|
|
86
|
+
export declare function sameTerminalControlRoute(left: TerminalEndpointRef | TerminalControlRef, right: TerminalEndpointRef | TerminalControlRef): boolean;
|
|
87
|
+
export declare function sameTerminalControlIncarnation(left: TerminalEndpointRef | TerminalControlRef, right: TerminalEndpointRef | TerminalControlRef): boolean;
|
|
88
|
+
export declare function terminalControlEvidence(terminalControl: TerminalControlRef): TerminalControlEvidence;
|
|
89
|
+
/**
|
|
90
|
+
* Read canonical identity from a new evidence record or derive it from the
|
|
91
|
+
* exact v0.11.x tmux fields. Unknown/malformed evidence fails closed.
|
|
92
|
+
*/
|
|
93
|
+
export declare function terminalEndpointIdentityFromEvidence(value: unknown): TerminalEndpointIdentity | undefined;
|
|
94
|
+
export declare function terminalRouteKeyFromEvidence(value: unknown): string | undefined;
|
|
95
|
+
export declare function terminalControlEvidenceMatches(evidence: unknown, terminalControl: TerminalControlRef, options?: {
|
|
96
|
+
requireCurrentRoute?: boolean;
|
|
97
|
+
requireProcessAnchor?: boolean;
|
|
98
|
+
}): boolean;
|
|
99
|
+
export declare function sameTerminalControlEvidenceIncarnation(left: unknown, right: unknown): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Restore a persisted additive endpoint record onto its legacy public control
|
|
102
|
+
* ref. The association is deliberately non-enumerable and never rewrites the
|
|
103
|
+
* Store object. Conflicting canonical and legacy fields fail closed.
|
|
104
|
+
*/
|
|
105
|
+
export declare function associateTerminalEndpointEvidence(terminalControl: TerminalControlRef, evidence: unknown): TerminalControlRef;
|
|
106
|
+
/** Exact v0.11.x selector/incarnation tuple for compatibility artifacts. */
|
|
107
|
+
export declare function terminalLegacyControlEvidence(terminalControl: TerminalControlRef): {
|
|
108
|
+
kind: "tmux";
|
|
109
|
+
target: string;
|
|
110
|
+
socket_path: string | null;
|
|
111
|
+
pane_pid: number;
|
|
112
|
+
};
|
|
113
|
+
/** Exact legacy runtime route serialized by v0.11.x ledgers and locks. */
|
|
114
|
+
export declare function terminalLegacyRuntimeRoute(terminalControl: TerminalControlRef): {
|
|
115
|
+
target: string;
|
|
116
|
+
socket_path: string | null;
|
|
117
|
+
};
|
|
118
|
+
export declare function terminalControlWithCapabilities(terminalControl: TerminalControlRef, capabilities: readonly TerminalControlCapability[]): TerminalControlRef;
|
|
119
|
+
export declare function tmuxTerminalRouteKey(endpointKey: string, target: string, socketPath?: string): string;
|
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-neutral terminal identity and routing primitives.
|
|
3
|
+
*
|
|
4
|
+
* Persisted/public terminal control records intentionally keep their current
|
|
5
|
+
* provider-owned shape. Generic lifecycle code must project those records
|
|
6
|
+
* through the helpers in this module instead of rebuilding identity from
|
|
7
|
+
* route fields such as a selector or socket path.
|
|
8
|
+
*/
|
|
9
|
+
const associatedEndpoints = new WeakMap();
|
|
10
|
+
export function createTerminalEndpointRef(value) {
|
|
11
|
+
const terminal = {
|
|
12
|
+
identity: { ...value.identity },
|
|
13
|
+
route: { ...value.route },
|
|
14
|
+
processAnchorPid: value.processAnchorPid,
|
|
15
|
+
capabilities: [...value.capabilities],
|
|
16
|
+
providerRef: value.providerRef
|
|
17
|
+
};
|
|
18
|
+
if (isObject(value.providerRef)) {
|
|
19
|
+
associatedEndpoints.set(value.providerRef, terminal);
|
|
20
|
+
}
|
|
21
|
+
return terminal;
|
|
22
|
+
}
|
|
23
|
+
export function terminalEndpointFromControlRef(terminalControl) {
|
|
24
|
+
const associated = associatedEndpoints.get(terminalControl);
|
|
25
|
+
if (associated) {
|
|
26
|
+
return associated;
|
|
27
|
+
}
|
|
28
|
+
switch (terminalControl.kind) {
|
|
29
|
+
case "tmux": {
|
|
30
|
+
assertTmuxControlIdentity(terminalControl);
|
|
31
|
+
const endpointKey = terminalControl.socketPath
|
|
32
|
+
? `socket:${terminalControl.socketPath}`
|
|
33
|
+
: "default-server-route";
|
|
34
|
+
const routeKey = tmuxTerminalRouteKey(endpointKey, terminalControl.target, terminalControl.socketPath);
|
|
35
|
+
return {
|
|
36
|
+
identity: {
|
|
37
|
+
providerKind: "tmux",
|
|
38
|
+
endpointKey,
|
|
39
|
+
// Modern discovery reports tmux's stable pane id. Legacy persisted
|
|
40
|
+
// refs deliberately retain their complete route+PID identity; a PID
|
|
41
|
+
// alone is never sufficient because it can be reused.
|
|
42
|
+
resourceKey: `legacy:${routeKey}:pane-pid:${terminalControl.panePid}`
|
|
43
|
+
},
|
|
44
|
+
route: {
|
|
45
|
+
routeKey,
|
|
46
|
+
label: terminalControl.target,
|
|
47
|
+
currentCommand: terminalControl.currentCommand,
|
|
48
|
+
currentPath: terminalControl.currentPath
|
|
49
|
+
},
|
|
50
|
+
processAnchorPid: terminalControl.panePid,
|
|
51
|
+
capabilities: [...terminalControl.capabilities],
|
|
52
|
+
providerRef: terminalControl
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export function hasCanonicalTerminalEndpoint(terminalControl) {
|
|
58
|
+
return associatedEndpoints.has(terminalControl);
|
|
59
|
+
}
|
|
60
|
+
export function terminalEndpointIdentityKey(value) {
|
|
61
|
+
const identity = isTerminalEndpointRef(value)
|
|
62
|
+
? value.identity
|
|
63
|
+
: isTerminalEndpointIdentity(value)
|
|
64
|
+
? value
|
|
65
|
+
: terminalEndpointFromControlRef(value).identity;
|
|
66
|
+
return JSON.stringify({
|
|
67
|
+
version: 1,
|
|
68
|
+
provider_kind: identity.providerKind,
|
|
69
|
+
endpoint_key: identity.endpointKey,
|
|
70
|
+
resource_key: identity.resourceKey
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
export function sameTerminalEndpointIdentity(left, right) {
|
|
74
|
+
return terminalEndpointIdentityKey(left) === terminalEndpointIdentityKey(right);
|
|
75
|
+
}
|
|
76
|
+
export function sameTerminalControlRoute(left, right) {
|
|
77
|
+
if (!isTerminalEndpointRef(left) &&
|
|
78
|
+
!isTerminalEndpointRef(right) &&
|
|
79
|
+
(!hasCanonicalTerminalEndpoint(left) || !hasCanonicalTerminalEndpoint(right))) {
|
|
80
|
+
return sameLegacyTerminalRoute(left, right);
|
|
81
|
+
}
|
|
82
|
+
if (!sameTerminalEndpointIdentity(left, right)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
const leftRoute = isTerminalEndpointRef(left)
|
|
86
|
+
? left.route.routeKey
|
|
87
|
+
: terminalEndpointFromControlRef(left).route.routeKey;
|
|
88
|
+
const rightRoute = isTerminalEndpointRef(right)
|
|
89
|
+
? right.route.routeKey
|
|
90
|
+
: terminalEndpointFromControlRef(right).route.routeKey;
|
|
91
|
+
return leftRoute === rightRoute;
|
|
92
|
+
}
|
|
93
|
+
export function sameTerminalControlIncarnation(left, right) {
|
|
94
|
+
if (!isTerminalEndpointRef(left) &&
|
|
95
|
+
!isTerminalEndpointRef(right) &&
|
|
96
|
+
(!hasCanonicalTerminalEndpoint(left) || !hasCanonicalTerminalEndpoint(right))) {
|
|
97
|
+
return sameLegacyTerminalIncarnation(left, right);
|
|
98
|
+
}
|
|
99
|
+
const leftEndpoint = isTerminalEndpointRef(left)
|
|
100
|
+
? left
|
|
101
|
+
: terminalEndpointFromControlRef(left);
|
|
102
|
+
const rightEndpoint = isTerminalEndpointRef(right)
|
|
103
|
+
? right
|
|
104
|
+
: terminalEndpointFromControlRef(right);
|
|
105
|
+
return sameTerminalEndpointIdentity(leftEndpoint, rightEndpoint) &&
|
|
106
|
+
leftEndpoint.processAnchorPid === rightEndpoint.processAnchorPid;
|
|
107
|
+
}
|
|
108
|
+
export function terminalControlEvidence(terminalControl) {
|
|
109
|
+
const endpoint = terminalEndpointFromControlRef(terminalControl);
|
|
110
|
+
switch (terminalControl.kind) {
|
|
111
|
+
case "tmux":
|
|
112
|
+
return {
|
|
113
|
+
schema: "agent-knock-knock/terminal-endpoint",
|
|
114
|
+
version: 1,
|
|
115
|
+
kind: endpoint.identity.providerKind,
|
|
116
|
+
endpoint_key: endpoint.identity.endpointKey,
|
|
117
|
+
resource_key: endpoint.identity.resourceKey,
|
|
118
|
+
route_key: endpoint.route.routeKey,
|
|
119
|
+
process_anchor_pid: endpoint.processAnchorPid ?? null,
|
|
120
|
+
target: terminalControl.target,
|
|
121
|
+
socket_path: terminalControl.socketPath ?? null,
|
|
122
|
+
pane_pid: terminalControl.panePid ?? null,
|
|
123
|
+
server_socket_path: endpoint.identity.endpointKey.startsWith("socket:")
|
|
124
|
+
? endpoint.identity.endpointKey.slice("socket:".length)
|
|
125
|
+
: null,
|
|
126
|
+
pane_id: endpoint.identity.resourceKey.startsWith("pane-id:")
|
|
127
|
+
? endpoint.identity.resourceKey.slice("pane-id:".length)
|
|
128
|
+
: null,
|
|
129
|
+
current_path: terminalControl.currentPath ?? null
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Read canonical identity from a new evidence record or derive it from the
|
|
135
|
+
* exact v0.11.x tmux fields. Unknown/malformed evidence fails closed.
|
|
136
|
+
*/
|
|
137
|
+
export function terminalEndpointIdentityFromEvidence(value) {
|
|
138
|
+
if (!isRecord(value)) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
const providerKind = nonEmptyString(value.kind);
|
|
142
|
+
const endpointKey = nonEmptyString(value.endpoint_key);
|
|
143
|
+
const resourceKey = nonEmptyString(value.resource_key);
|
|
144
|
+
if (providerKind && endpointKey && resourceKey) {
|
|
145
|
+
if (providerKind === "tmux") {
|
|
146
|
+
const legacy = tmuxIdentityFromEvidence(value);
|
|
147
|
+
if (!legacy ||
|
|
148
|
+
legacy.identity.endpointKey !== endpointKey ||
|
|
149
|
+
legacy.identity.resourceKey !== resourceKey ||
|
|
150
|
+
(nonEmptyString(value.route_key) !== undefined &&
|
|
151
|
+
nonEmptyString(value.route_key) !== legacy.routeKey)) {
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return { providerKind, endpointKey, resourceKey };
|
|
156
|
+
}
|
|
157
|
+
const legacy = tmuxIdentityFromEvidence(value);
|
|
158
|
+
const legacyKind = providerKind ?? (legacy ? "tmux" : undefined);
|
|
159
|
+
if (legacyKind !== "tmux" || !legacy) {
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
return legacy.identity;
|
|
163
|
+
}
|
|
164
|
+
export function terminalRouteKeyFromEvidence(value) {
|
|
165
|
+
if (!isRecord(value)) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
const canonical = nonEmptyString(value.route_key);
|
|
169
|
+
if (canonical) {
|
|
170
|
+
const legacy = tmuxIdentityFromEvidence(value);
|
|
171
|
+
if ((value.kind === "tmux" || legacy) && legacy?.routeKey !== canonical) {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
return canonical;
|
|
175
|
+
}
|
|
176
|
+
return tmuxIdentityFromEvidence(value)?.routeKey;
|
|
177
|
+
}
|
|
178
|
+
export function terminalControlEvidenceMatches(evidence, terminalControl, options = {}) {
|
|
179
|
+
if (!hasCanonicalEvidence(evidence)) {
|
|
180
|
+
const legacy = legacyTerminalEvidence(evidence);
|
|
181
|
+
if (!legacy ||
|
|
182
|
+
(options.requireProcessAnchor === false
|
|
183
|
+
? !sameLegacyTerminalRoute(legacy, terminalControl)
|
|
184
|
+
: !sameLegacyTerminalIncarnation(legacy, terminalControl))) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
return options.requireCurrentRoute !== true ||
|
|
188
|
+
sameLegacyTerminalRoute(legacy, terminalControl);
|
|
189
|
+
}
|
|
190
|
+
const evidenceIdentity = terminalEndpointIdentityFromEvidence(evidence);
|
|
191
|
+
if (!evidenceIdentity ||
|
|
192
|
+
!sameTerminalEndpointIdentity(evidenceIdentity, terminalControl)) {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
const endpoint = terminalEndpointFromControlRef(terminalControl);
|
|
196
|
+
const evidenceAnchor = isRecord(evidence)
|
|
197
|
+
? positiveInteger(evidence.process_anchor_pid ?? evidence.pane_pid ?? evidence.panePid)
|
|
198
|
+
: undefined;
|
|
199
|
+
if (options.requireProcessAnchor !== false &&
|
|
200
|
+
evidenceAnchor !== undefined &&
|
|
201
|
+
endpoint.processAnchorPid !== evidenceAnchor) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
if (options.requireCurrentRoute === true) {
|
|
205
|
+
return terminalRouteKeyFromEvidence(evidence) ===
|
|
206
|
+
endpoint.route.routeKey;
|
|
207
|
+
}
|
|
208
|
+
return true;
|
|
209
|
+
}
|
|
210
|
+
export function sameTerminalControlEvidenceIncarnation(left, right) {
|
|
211
|
+
if (hasCanonicalEvidence(left) && hasCanonicalEvidence(right)) {
|
|
212
|
+
const leftIdentity = terminalEndpointIdentityFromEvidence(left);
|
|
213
|
+
const rightIdentity = terminalEndpointIdentityFromEvidence(right);
|
|
214
|
+
const leftAnchor = isRecord(left)
|
|
215
|
+
? positiveInteger(left.process_anchor_pid ?? left.pane_pid ?? left.panePid)
|
|
216
|
+
: undefined;
|
|
217
|
+
const rightAnchor = isRecord(right)
|
|
218
|
+
? positiveInteger(right.process_anchor_pid ?? right.pane_pid ?? right.panePid)
|
|
219
|
+
: undefined;
|
|
220
|
+
return Boolean(leftIdentity &&
|
|
221
|
+
rightIdentity &&
|
|
222
|
+
leftAnchor !== undefined &&
|
|
223
|
+
leftAnchor === rightAnchor &&
|
|
224
|
+
sameTerminalEndpointIdentity(leftIdentity, rightIdentity));
|
|
225
|
+
}
|
|
226
|
+
const leftLegacy = legacyTerminalEvidence(left);
|
|
227
|
+
const rightLegacy = legacyTerminalEvidence(right);
|
|
228
|
+
return Boolean(leftLegacy &&
|
|
229
|
+
rightLegacy &&
|
|
230
|
+
sameLegacyTerminalIncarnation(leftLegacy, rightLegacy));
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Restore a persisted additive endpoint record onto its legacy public control
|
|
234
|
+
* ref. The association is deliberately non-enumerable and never rewrites the
|
|
235
|
+
* Store object. Conflicting canonical and legacy fields fail closed.
|
|
236
|
+
*/
|
|
237
|
+
export function associateTerminalEndpointEvidence(terminalControl, evidence) {
|
|
238
|
+
if (!hasCanonicalEvidence(evidence) || !isRecord(evidence)) {
|
|
239
|
+
throw new Error("terminal endpoint evidence is not canonical");
|
|
240
|
+
}
|
|
241
|
+
const identity = terminalEndpointIdentityFromEvidence(evidence);
|
|
242
|
+
const routeKey = terminalRouteKeyFromEvidence(evidence);
|
|
243
|
+
const legacy = legacyTerminalEvidence(evidence);
|
|
244
|
+
if (!identity ||
|
|
245
|
+
!routeKey ||
|
|
246
|
+
!legacy ||
|
|
247
|
+
!sameLegacyTerminalIncarnation(legacy, terminalControl)) {
|
|
248
|
+
throw new Error("terminal endpoint evidence conflicts with its legacy control reference");
|
|
249
|
+
}
|
|
250
|
+
createTerminalEndpointRef({
|
|
251
|
+
identity,
|
|
252
|
+
route: {
|
|
253
|
+
routeKey,
|
|
254
|
+
label: terminalControl.target,
|
|
255
|
+
currentCommand: terminalControl.currentCommand,
|
|
256
|
+
currentPath: nonEmptyString(evidence.current_path) ??
|
|
257
|
+
terminalControl.currentPath
|
|
258
|
+
},
|
|
259
|
+
processAnchorPid: positiveInteger(evidence.process_anchor_pid ?? evidence.pane_pid),
|
|
260
|
+
capabilities: terminalControl.capabilities,
|
|
261
|
+
providerRef: terminalControl
|
|
262
|
+
});
|
|
263
|
+
return terminalControl;
|
|
264
|
+
}
|
|
265
|
+
/** Exact v0.11.x selector/incarnation tuple for compatibility artifacts. */
|
|
266
|
+
export function terminalLegacyControlEvidence(terminalControl) {
|
|
267
|
+
return {
|
|
268
|
+
kind: "tmux",
|
|
269
|
+
target: terminalControl.target,
|
|
270
|
+
socket_path: terminalControl.socketPath ?? null,
|
|
271
|
+
pane_pid: terminalControl.panePid
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/** Exact legacy runtime route serialized by v0.11.x ledgers and locks. */
|
|
275
|
+
export function terminalLegacyRuntimeRoute(terminalControl) {
|
|
276
|
+
return {
|
|
277
|
+
target: terminalControl.target,
|
|
278
|
+
socket_path: terminalControl.socketPath ?? null
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
export function terminalControlWithCapabilities(terminalControl, capabilities) {
|
|
282
|
+
const next = {
|
|
283
|
+
...terminalControl,
|
|
284
|
+
capabilities: [...capabilities]
|
|
285
|
+
};
|
|
286
|
+
const endpoint = associatedEndpoints.get(terminalControl);
|
|
287
|
+
if (endpoint) {
|
|
288
|
+
createTerminalEndpointRef({
|
|
289
|
+
...endpoint,
|
|
290
|
+
capabilities,
|
|
291
|
+
providerRef: next
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
return next;
|
|
295
|
+
}
|
|
296
|
+
export function tmuxTerminalRouteKey(endpointKey, target, socketPath) {
|
|
297
|
+
return JSON.stringify({
|
|
298
|
+
provider_kind: "tmux",
|
|
299
|
+
endpoint_key: endpointKey,
|
|
300
|
+
target,
|
|
301
|
+
socket_path: socketPath ?? null
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
function tmuxIdentityFromEvidence(value) {
|
|
305
|
+
const target = nonEmptyString(value.target);
|
|
306
|
+
const panePid = positiveInteger(value.pane_pid ?? value.panePid);
|
|
307
|
+
const processAnchorPid = positiveInteger(value.process_anchor_pid);
|
|
308
|
+
if (!target ||
|
|
309
|
+
panePid === undefined ||
|
|
310
|
+
(processAnchorPid !== undefined && processAnchorPid !== panePid)) {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
const socketPath = nonEmptyString(value.socket_path ?? value.socketPath);
|
|
314
|
+
const serverSocketPath = nonEmptyString(value.server_socket_path ?? value.serverSocketPath);
|
|
315
|
+
const paneId = nonEmptyString(value.pane_id ?? value.paneId);
|
|
316
|
+
const endpointKey = serverSocketPath
|
|
317
|
+
? `socket:${serverSocketPath}`
|
|
318
|
+
: socketPath
|
|
319
|
+
? `socket:${socketPath}`
|
|
320
|
+
: "default-server-route";
|
|
321
|
+
const routeKey = tmuxTerminalRouteKey(endpointKey, target, socketPath);
|
|
322
|
+
return {
|
|
323
|
+
identity: {
|
|
324
|
+
providerKind: "tmux",
|
|
325
|
+
endpointKey,
|
|
326
|
+
resourceKey: paneId
|
|
327
|
+
? `pane-id:${paneId}`
|
|
328
|
+
: `legacy:${routeKey}:pane-pid:${panePid}`
|
|
329
|
+
},
|
|
330
|
+
routeKey
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
function hasCanonicalEvidence(value) {
|
|
334
|
+
return isRecord(value) &&
|
|
335
|
+
value.schema === "agent-knock-knock/terminal-endpoint" &&
|
|
336
|
+
value.version === 1 &&
|
|
337
|
+
Boolean(nonEmptyString(value.kind)) &&
|
|
338
|
+
Boolean(nonEmptyString(value.endpoint_key)) &&
|
|
339
|
+
Boolean(nonEmptyString(value.resource_key)) &&
|
|
340
|
+
Boolean(nonEmptyString(value.route_key)) &&
|
|
341
|
+
Object.prototype.hasOwnProperty.call(value, "process_anchor_pid") &&
|
|
342
|
+
(value.process_anchor_pid === null ||
|
|
343
|
+
positiveInteger(value.process_anchor_pid) !== undefined);
|
|
344
|
+
}
|
|
345
|
+
function legacyTerminalEvidence(value) {
|
|
346
|
+
if (!isRecord(value)) {
|
|
347
|
+
return undefined;
|
|
348
|
+
}
|
|
349
|
+
const target = nonEmptyString(value.target);
|
|
350
|
+
const panePid = positiveInteger(value.pane_pid ?? value.panePid);
|
|
351
|
+
if (!target || panePid === undefined) {
|
|
352
|
+
return undefined;
|
|
353
|
+
}
|
|
354
|
+
const [session = target, route = "0.0"] = target.split(":", 2);
|
|
355
|
+
const [windowText = "0", paneText = "0"] = route.split(".", 2);
|
|
356
|
+
return {
|
|
357
|
+
kind: "tmux",
|
|
358
|
+
target,
|
|
359
|
+
socketPath: nonEmptyString(value.socket_path ?? value.socketPath),
|
|
360
|
+
session,
|
|
361
|
+
window: Number.parseInt(windowText, 10) || 0,
|
|
362
|
+
pane: Number.parseInt(paneText, 10) || 0,
|
|
363
|
+
panePid,
|
|
364
|
+
capabilities: []
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
function sameLegacyTerminalRoute(left, right) {
|
|
368
|
+
return left.kind === right.kind &&
|
|
369
|
+
left.target === right.target &&
|
|
370
|
+
left.socketPath === right.socketPath;
|
|
371
|
+
}
|
|
372
|
+
function sameLegacyTerminalIncarnation(left, right) {
|
|
373
|
+
return sameLegacyTerminalRoute(left, right) &&
|
|
374
|
+
left.panePid === right.panePid;
|
|
375
|
+
}
|
|
376
|
+
function assertTmuxControlIdentity(value) {
|
|
377
|
+
if (!value.target ||
|
|
378
|
+
!Number.isSafeInteger(value.panePid) ||
|
|
379
|
+
value.panePid <= 0) {
|
|
380
|
+
throw new Error("tmux terminal control requires a target and positive pane PID");
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function isTerminalEndpointRef(value) {
|
|
384
|
+
return isRecord(value) &&
|
|
385
|
+
isTerminalEndpointIdentity(value.identity) &&
|
|
386
|
+
isRecord(value.route) &&
|
|
387
|
+
typeof value.route.routeKey === "string";
|
|
388
|
+
}
|
|
389
|
+
function isTerminalEndpointIdentity(value) {
|
|
390
|
+
return isRecord(value) &&
|
|
391
|
+
Boolean(nonEmptyString(value.providerKind)) &&
|
|
392
|
+
Boolean(nonEmptyString(value.endpointKey)) &&
|
|
393
|
+
Boolean(nonEmptyString(value.resourceKey));
|
|
394
|
+
}
|
|
395
|
+
function isRecord(value) {
|
|
396
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
397
|
+
}
|
|
398
|
+
function isObject(value) {
|
|
399
|
+
return value !== null && typeof value === "object";
|
|
400
|
+
}
|
|
401
|
+
function nonEmptyString(value) {
|
|
402
|
+
return typeof value === "string" && value.trim().length > 0
|
|
403
|
+
? value
|
|
404
|
+
: undefined;
|
|
405
|
+
}
|
|
406
|
+
function positiveInteger(value) {
|
|
407
|
+
const parsed = Number(value);
|
|
408
|
+
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : undefined;
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=terminal-control-ref.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-control-ref.js","sourceRoot":"","sources":["../../src/terminal-control-ref.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED