@scotthuang/agent-knock-knock 0.14.14 → 0.14.16
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 +18 -0
- package/CONTRIBUTING.md +43 -0
- package/README.md +5 -5
- package/connectors/deepseek-harness/README.md +33 -17
- package/connectors/pi/README.md +32 -8
- package/dist/src/codex-native-public-projection.d.ts +191 -0
- package/dist/src/codex-native-public-projection.js +7 -0
- package/dist/src/codex-native-public-projection.js.map +1 -1
- package/dist/src/conversation-list-presentation.d.ts +8 -0
- package/dist/src/conversation-list-presentation.js +65 -4
- package/dist/src/conversation-list-presentation.js.map +1 -1
- package/dist/src/conversation-list.d.ts +8 -0
- package/dist/src/doctor-capabilities.d.ts +7 -2
- package/dist/src/doctor-capabilities.js +15 -14
- package/dist/src/doctor-capabilities.js.map +1 -1
- package/dist/src/herdr-api-contract.d.ts +15 -0
- package/dist/src/herdr-api-contract.js +152 -0
- package/dist/src/herdr-api-contract.js.map +1 -0
- package/dist/src/herdr-compatibility.d.ts +48 -0
- package/dist/src/herdr-compatibility.js +36 -0
- package/dist/src/herdr-compatibility.js.map +1 -0
- package/dist/src/herdr-operation-capabilities.d.ts +17 -0
- package/dist/src/herdr-operation-capabilities.js +66 -0
- package/dist/src/herdr-operation-capabilities.js.map +1 -0
- package/dist/src/herdr-terminal-control-provider.d.ts +11 -6
- package/dist/src/herdr-terminal-control-provider.js +158 -79
- package/dist/src/herdr-terminal-control-provider.js.map +1 -1
- package/dist/src/install-doctor-command-adapter.js +5 -2
- package/dist/src/install-doctor-command-adapter.js.map +1 -1
- package/dist/src/semantic-tool-command-helpers.js +7 -1
- package/dist/src/semantic-tool-command-helpers.js.map +1 -1
- package/dist/src/semantic-tool-list-projection.js +17 -3
- package/dist/src/semantic-tool-list-projection.js.map +1 -1
- package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
- package/dist/src/terminal-permission-control-list-projection.d.ts +1 -1
- package/docs/codex-cli-native-compatibility.md +3 -0
- package/docs/list-output.md +23 -0
- package/docs/openclaw-operations.md +1 -1
- package/docs/pi-dsh-compatibility.md +59 -4
- package/docs/quickstart-herdr.md +15 -3
- package/docs/testing.md +1 -1
- package/package.json +1 -1
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +4 -2
|
@@ -6,18 +6,79 @@ import { hostListWatchNeedsAttention } from "./semantic-tool-list-budget.js";
|
|
|
6
6
|
import { recordValue } from "./value-guards.js";
|
|
7
7
|
/** Prefer a verified backend for an unambiguous project display, without creating a routing alias. */
|
|
8
8
|
export function presentConversationList(conversations, physicalTerminals, options = {}) {
|
|
9
|
-
const
|
|
10
|
-
const
|
|
9
|
+
const unstarted = unstartedDisplayCandidates(conversations, physicalTerminals);
|
|
10
|
+
const candidates = new Set(unstarted.map(row => String(row.conversation_id)));
|
|
11
|
+
const preferred = conversations.filter(row => !candidates.has(String(row.conversation_id)));
|
|
12
|
+
const groups = workspaceGroups(preferred, physicalTerminals);
|
|
13
|
+
const hidden = new Set(options.diagnostics ? [] : [...candidates, ...groups.map(group => group.terminal_conversation_id)]);
|
|
11
14
|
return {
|
|
12
15
|
conversations: conversations.filter(row => !hidden.has(String(row.conversation_id)))
|
|
13
|
-
.map((row) => ({ ...row, surface: row.source === "codex_desktop" ? "desktop" : "cli"
|
|
16
|
+
.map((row) => ({ ...row, surface: row.source === "codex_desktop" ? "desktop" : "cli",
|
|
17
|
+
...(options.diagnostics && candidates.has(String(row.conversation_id))
|
|
18
|
+
? { classification: "unstarted_candidate", frontend_presence: "unverified" } : {}) })),
|
|
14
19
|
conversation_presentation: {
|
|
15
20
|
mode: options.diagnostics ? "diagnostics" : "default",
|
|
16
|
-
workspace_grouped_connections:
|
|
21
|
+
workspace_grouped_connections: options.diagnostics ? 0 : groups.length,
|
|
22
|
+
...(unstarted.length ? { unstarted_candidates_count: unstarted.length,
|
|
23
|
+
unstarted_candidates_omitted: options.diagnostics ? 0 : unstarted.length,
|
|
24
|
+
...(!options.diagnostics ? { diagnostic_query: { tool: "agent_knock_knock_list", arguments: { terminalDebug: true } } } : {}) } : {}),
|
|
17
25
|
...(options.diagnostics ? { workspace_groups: groups } : {})
|
|
18
26
|
}
|
|
19
27
|
};
|
|
20
28
|
}
|
|
29
|
+
/** A display preference, never proof that an unstarted thread is orphaned or a routing alias. */
|
|
30
|
+
function unstartedDisplayCandidates(conversations, terminals) {
|
|
31
|
+
const native = conversations.filter(row => row.source === "codex_cli" && row.agent === "codex");
|
|
32
|
+
return native.filter(candidate => {
|
|
33
|
+
if (!unstartedCandidate(candidate))
|
|
34
|
+
return false;
|
|
35
|
+
const identity = codexDisplayIdentity(candidate), key = workspaceKey(candidate);
|
|
36
|
+
if (!identity || !key)
|
|
37
|
+
return false;
|
|
38
|
+
const peers = native.filter(row => workspaceKey(row) === key);
|
|
39
|
+
if (peers.some(row => codexDisplayIdentity(row)?.codexHome !== identity.codexHome)
|
|
40
|
+
|| peers.filter(row => row.conversation_id === candidate.conversation_id).length !== 1)
|
|
41
|
+
return false;
|
|
42
|
+
const established = peers.filter(hasEstablishedTask);
|
|
43
|
+
if (established.length !== 1)
|
|
44
|
+
return false;
|
|
45
|
+
const physical = terminals.filter(row => workspaceKey(row) === key);
|
|
46
|
+
if (physical.length > 1 || physical.some(row => row.process_state !== "active"))
|
|
47
|
+
return false;
|
|
48
|
+
const projected = conversations.filter(row => String(row.conversation_id).startsWith("terminal:") && workspaceKey(row) === key);
|
|
49
|
+
if ([...physical, ...projected].some(row => !canGroup(row, established[0]) || needsOwnTerminalEntry(row)))
|
|
50
|
+
return false;
|
|
51
|
+
return ![...terminals, ...projected].some(row => terminalNamesThread(row, identity.threadId));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function unstartedCandidate(row) {
|
|
55
|
+
return row.unstarted_thread === true && row.history_state === "unmaterialized"
|
|
56
|
+
&& row.native_turn_id === null && row.latest_turn === null && row.activity_state === "idle"
|
|
57
|
+
&& row.observation_error === undefined && !needsOwnTerminalEntry(row)
|
|
58
|
+
&& emptyArray(row.terminal_aliases) && emptyArray(row.terminal_controls)
|
|
59
|
+
&& emptyArray(row.active_flags) && emptyArray(row.interaction_state);
|
|
60
|
+
}
|
|
61
|
+
function emptyArray(value) { return value === undefined || Array.isArray(value) && value.length === 0; }
|
|
62
|
+
function hasEstablishedTask(row) {
|
|
63
|
+
const turn = recordValue(row.latest_turn);
|
|
64
|
+
return row.history_state !== "unmaterialized" && row.observation_error === undefined
|
|
65
|
+
&& typeof row.native_turn_id === "string" && row.native_turn_id.length > 0 && turn?.id === row.native_turn_id;
|
|
66
|
+
}
|
|
67
|
+
function codexDisplayIdentity(row) {
|
|
68
|
+
if (row.connection_state !== "loaded_backend_verified")
|
|
69
|
+
return undefined;
|
|
70
|
+
try {
|
|
71
|
+
const identity = parseCodexNativeConversationId(String(row.conversation_id ?? ""));
|
|
72
|
+
return row.native_thread_id === identity.threadId ? identity : undefined;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function terminalNamesThread(row, threadId) {
|
|
79
|
+
return [row.native_agent_session_id, row.native_agent_status_card_session_id, row._routing_inspection_thread_id]
|
|
80
|
+
.some(value => typeof value === "string" && value.toLowerCase() === threadId.toLowerCase());
|
|
81
|
+
}
|
|
21
82
|
function workspaceGroups(conversations, physicalTerminals) {
|
|
22
83
|
const nativeRows = conversations.filter(row => ["codex_cli", "claude_cli"].includes(String(row.source)));
|
|
23
84
|
const groups = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-list-presentation.js","sourceRoot":"","sources":["../../src/conversation-list-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,+BAA+B,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,sGAAsG;AACtG,MAAM,UAAU,uBAAuB,CAAC,aAA6B,EAAE,iBAAiC,EACtG,OAAO,GAAwC,EAAE;IACjD,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"conversation-list-presentation.js","sourceRoot":"","sources":["../../src/conversation-list-presentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,14 @@ export declare function unifiedConversationList(result: Row, terminals: readonly
|
|
|
10
10
|
conversation_presentation: {
|
|
11
11
|
mode: string;
|
|
12
12
|
workspace_grouped_connections: number;
|
|
13
|
+
unstarted_candidates_count?: number | undefined;
|
|
14
|
+
unstarted_candidates_omitted?: number | undefined;
|
|
15
|
+
diagnostic_query?: {
|
|
16
|
+
tool: string;
|
|
17
|
+
arguments: {
|
|
18
|
+
terminalDebug: boolean;
|
|
19
|
+
};
|
|
20
|
+
} | undefined;
|
|
13
21
|
workspace_groups?: {
|
|
14
22
|
terminal_conversation_id: string;
|
|
15
23
|
native_conversation_id: string;
|
|
@@ -6,6 +6,7 @@ export interface DoctorCommandCheck {
|
|
|
6
6
|
command: string;
|
|
7
7
|
available: boolean;
|
|
8
8
|
version_supported?: boolean;
|
|
9
|
+
version_tested?: boolean;
|
|
9
10
|
native_profile_supported?: boolean;
|
|
10
11
|
native_profile?: string;
|
|
11
12
|
native_actions_available?: boolean;
|
|
@@ -47,8 +48,12 @@ interface DoctorTmuxCapability extends DoctorModeCapability {
|
|
|
47
48
|
recommended: true;
|
|
48
49
|
}
|
|
49
50
|
interface DoctorHerdrCapability extends DoctorModeCapability {
|
|
51
|
+
/** Legacy diagnostic: a valid CLI is not excluded by its release number. */
|
|
50
52
|
version_supported: boolean;
|
|
51
|
-
|
|
53
|
+
version_tested: boolean;
|
|
54
|
+
tested_versions: readonly string[];
|
|
55
|
+
compatibility_policy: "capability_probe";
|
|
56
|
+
runtime_capability_state: "not_probed";
|
|
52
57
|
}
|
|
53
58
|
export interface DoctorCapabilitySummary {
|
|
54
59
|
coreOk: boolean;
|
|
@@ -60,7 +65,7 @@ export interface DoctorCapabilitySummary {
|
|
|
60
65
|
tmux: DoctorTmuxCapability;
|
|
61
66
|
herdr: DoctorHerdrCapability;
|
|
62
67
|
}
|
|
63
|
-
export declare const DOCTOR_SUPPORTED_HERDR_VERSION: "0.
|
|
68
|
+
export declare const DOCTOR_SUPPORTED_HERDR_VERSION: "0.9.5";
|
|
64
69
|
export declare const DOCTOR_PROBE_COMMANDS: readonly DoctorProbeCommand[];
|
|
65
70
|
/**
|
|
66
71
|
* Return the exact native lifecycle/status profile verified for a coding-agent
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { HERDR_EXACT_VERSION, HERDR_SUPPORTED_VERSIONS, herdrCompatibilityProfile } from "./herdr-compatibility.js";
|
|
2
3
|
import { claudeNativeInspectionBehaviorProfile, claudeRuntimeCompatibilityWarning, claudeRuntimeLifecycleCompatibilityProfile } from "./claude-lifecycle-compatibility.js";
|
|
3
4
|
import { codexLifecycleBehaviorProfile, codexRuntimeCompatibilityProfile, codexRuntimeLifecycleBehaviorProfile } from "./codex-lifecycle-compatibility.js";
|
|
4
|
-
export const DOCTOR_SUPPORTED_HERDR_VERSION =
|
|
5
|
+
export const DOCTOR_SUPPORTED_HERDR_VERSION = HERDR_EXACT_VERSION;
|
|
6
|
+
const HERDR_VERSION_REQUIREMENT = "herdr (runtime capabilities checked per operation)";
|
|
5
7
|
const DEFAULT_PROBE_TIMEOUT_MS = 3_000;
|
|
6
8
|
const MAX_PROBE_TIMEOUT_MS = 30_000;
|
|
7
9
|
const MAX_PROBE_BUFFER_BYTES = 64 * 1024;
|
|
@@ -140,7 +142,6 @@ export function evaluateDoctorCapabilities(checks) {
|
|
|
140
142
|
const tmuxTransportOk = isUsable(checkByCommand.get("tmux"));
|
|
141
143
|
const herdrCheck = checkByCommand.get("herdr");
|
|
142
144
|
const herdrExecutableOk = isUsable(herdrCheck);
|
|
143
|
-
const herdrVersionSupported = herdrExecutableOk && herdrCheck?.version_supported === true;
|
|
144
145
|
const tmux = {
|
|
145
146
|
available: tmuxTransportOk && agentsOk,
|
|
146
147
|
status: readinessFromParts([coreOk, tmuxTransportOk, agentsOk]),
|
|
@@ -154,30 +155,29 @@ export function evaluateDoctorCapabilities(checks) {
|
|
|
154
155
|
]
|
|
155
156
|
};
|
|
156
157
|
const herdr = {
|
|
157
|
-
available:
|
|
158
|
-
status: readinessFromParts([coreOk,
|
|
159
|
-
version_supported:
|
|
160
|
-
|
|
158
|
+
available: herdrExecutableOk && agentsOk,
|
|
159
|
+
status: readinessFromParts([coreOk, herdrExecutableOk, agentsOk]),
|
|
160
|
+
version_supported: herdrExecutableOk,
|
|
161
|
+
version_tested: herdrCheck?.version_tested === true,
|
|
162
|
+
tested_versions: HERDR_SUPPORTED_VERSIONS,
|
|
163
|
+
compatibility_policy: "capability_probe",
|
|
164
|
+
runtime_capability_state: "not_probed",
|
|
161
165
|
agents: availableAgents,
|
|
162
166
|
requires: [
|
|
163
167
|
"node",
|
|
164
168
|
"openclaw",
|
|
165
|
-
|
|
169
|
+
HERDR_VERSION_REQUIREMENT,
|
|
166
170
|
"codex or claude"
|
|
167
171
|
],
|
|
168
172
|
missing: [
|
|
169
173
|
...missingCore,
|
|
170
|
-
...(!herdrExecutableOk
|
|
171
|
-
? ["herdr"]
|
|
172
|
-
: !herdrVersionSupported
|
|
173
|
-
? [`herdr ${DOCTOR_SUPPORTED_HERDR_VERSION}`]
|
|
174
|
-
: []),
|
|
174
|
+
...(!herdrExecutableOk ? ["herdr"] : []),
|
|
175
175
|
...(!agentsOk ? ["codex or claude"] : [])
|
|
176
176
|
]
|
|
177
177
|
};
|
|
178
178
|
const availableTransports = [
|
|
179
179
|
...(tmuxTransportOk ? ["tmux"] : []),
|
|
180
|
-
...(
|
|
180
|
+
...(herdrExecutableOk ? ["herdr"] : [])
|
|
181
181
|
];
|
|
182
182
|
const anyTransportOk = availableTransports.length > 0;
|
|
183
183
|
return {
|
|
@@ -232,7 +232,8 @@ function buildProbeResult({ command, executable, args, status, durationMs, versi
|
|
|
232
232
|
: {}),
|
|
233
233
|
...(command === "herdr"
|
|
234
234
|
? {
|
|
235
|
-
version_supported: status === "ok"
|
|
235
|
+
version_supported: status === "ok",
|
|
236
|
+
version_tested: herdrCompatibilityProfile(version) !== undefined
|
|
236
237
|
}
|
|
237
238
|
: {}),
|
|
238
239
|
found: status !== "not_found",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor-capabilities.js","sourceRoot":"","sources":["../../src/doctor-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EACL,qCAAqC,EACrC,iCAAiC,EACjC,0CAA0C,EAC3C,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,6BAA6B,EAC7B,gCAAgC,EAChC,oCAAoC,EACrC,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"doctor-capabilities.js","sourceRoot":"","sources":["../../src/doctor-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface HerdrOperationSupport {
|
|
2
|
+
state: "available" | "unsupported" | "unknown";
|
|
3
|
+
reason: string;
|
|
4
|
+
}
|
|
5
|
+
export interface HerdrDeclaredInputContract {
|
|
6
|
+
textInput: HerdrOperationSupport;
|
|
7
|
+
keyInput: HerdrOperationSupport;
|
|
8
|
+
rawTextInput: HerdrOperationSupport;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Inspect a CLI declaration, not remote negotiation or proof of execution.
|
|
12
|
+
* Callers must bind its version/protocol to the current server observation.
|
|
13
|
+
* Unknown constraints cannot silently authorize input; no input is probed here.
|
|
14
|
+
*/
|
|
15
|
+
export declare function inspectHerdrInputSchema(schema: unknown, protocol: number): HerdrDeclaredInputContract;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { isRecord } from "./value-guards.js";
|
|
2
|
+
const ANNOTATIONS = new Set([
|
|
3
|
+
"$comment", "title", "description", "default", "examples", "deprecated"
|
|
4
|
+
]);
|
|
5
|
+
const DIALECT = "https://json-schema.org/draft/2020-12/schema";
|
|
6
|
+
/**
|
|
7
|
+
* Inspect a CLI declaration, not remote negotiation or proof of execution.
|
|
8
|
+
* Callers must bind its version/protocol to the current server observation.
|
|
9
|
+
* Unknown constraints cannot silently authorize input; no input is probed here.
|
|
10
|
+
*/
|
|
11
|
+
export function inspectHerdrInputSchema(schema, protocol) {
|
|
12
|
+
if (!isRecord(schema) || schema.schema_version !== 1 || !isRecord(schema.schemas) ||
|
|
13
|
+
"$id" in schema || (schema.$schema !== undefined && schema.$schema !== DIALECT)) {
|
|
14
|
+
return unavailableContract("unknown", "unrecognized_cli_schema_envelope");
|
|
15
|
+
}
|
|
16
|
+
if (schema.protocol !== protocol)
|
|
17
|
+
return unavailableContract("unknown", "cli_schema_protocol_mismatch");
|
|
18
|
+
const { request, success_response: success, error_response: error } = schema.schemas;
|
|
19
|
+
if (!isRecord(request) || !isRecord(success) || !isRecord(error)) {
|
|
20
|
+
return unavailableContract("unknown", "cli_schema_envelopes_missing");
|
|
21
|
+
}
|
|
22
|
+
const reader = new HerdrSchemaReader(schema);
|
|
23
|
+
if (!validEnvelopes(reader, request, success, error)) {
|
|
24
|
+
return unavailableContract("unsupported", "cli_schema_request_or_ack_contract_incompatible");
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
textInput: inputOperation(reader, request, "pane.send_input", "text"),
|
|
28
|
+
keyInput: inputOperation(reader, request, "pane.send_input", "keys"),
|
|
29
|
+
rawTextInput: inputOperation(reader, request, "pane.send_text", "text")
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function unavailableContract(state, reason) {
|
|
33
|
+
return { textInput: { state, reason }, keyInput: { state, reason }, rawTextInput: { state, reason } };
|
|
34
|
+
}
|
|
35
|
+
/** Only the bounded, internal-reference JSON Schema subset used by Herdr. */
|
|
36
|
+
class HerdrSchemaReader {
|
|
37
|
+
schema;
|
|
38
|
+
constructor(schema) {
|
|
39
|
+
this.schema = schema;
|
|
40
|
+
}
|
|
41
|
+
deref(value) {
|
|
42
|
+
const visited = new Set();
|
|
43
|
+
for (let depth = 0; depth < 8; depth++) {
|
|
44
|
+
if (!isRecord(value))
|
|
45
|
+
return undefined;
|
|
46
|
+
if (!("$ref" in value))
|
|
47
|
+
return value;
|
|
48
|
+
const ref = value.$ref;
|
|
49
|
+
if (typeof ref !== "string" || !ref.startsWith("#/schemas/") || visited.has(ref) ||
|
|
50
|
+
!onlyKeys(value, ["$ref"]))
|
|
51
|
+
return undefined;
|
|
52
|
+
visited.add(ref);
|
|
53
|
+
value = this.pointer(ref);
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
pointer(ref) {
|
|
58
|
+
let value = this.schema;
|
|
59
|
+
for (const part of ref.slice(2).split("/")) {
|
|
60
|
+
const key = part.replace(/~1/g, "/").replace(/~0/g, "~");
|
|
61
|
+
if (!isRecord(value) || !Object.hasOwn(value, key) || "$id" in value ||
|
|
62
|
+
(value.$schema !== undefined && value.$schema !== DIALECT))
|
|
63
|
+
return undefined;
|
|
64
|
+
value = value[key];
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
string(value, constant) {
|
|
69
|
+
const shape = this.deref(value);
|
|
70
|
+
return !!shape && shape.type === "string" &&
|
|
71
|
+
onlyKeys(shape, constant === undefined ? ["type"] : ["type", "const"]) &&
|
|
72
|
+
(constant === undefined || shape.const === constant);
|
|
73
|
+
}
|
|
74
|
+
object(value, sent, required, extras = []) {
|
|
75
|
+
const shape = this.deref(value);
|
|
76
|
+
if (!shape || shape.type !== "object" || !isRecord(shape.properties) ||
|
|
77
|
+
!onlyKeys(shape, ["type", "properties", "required", "$defs", ...extras]) ||
|
|
78
|
+
!Array.isArray(shape.required) ||
|
|
79
|
+
!shape.required.every((key) => typeof key === "string" && sent.includes(key)) ||
|
|
80
|
+
!required.every((key) => shape.required.includes(key)))
|
|
81
|
+
return undefined;
|
|
82
|
+
return shape;
|
|
83
|
+
}
|
|
84
|
+
// Unknown branches can overlap. Exclude only a provably different discriminator.
|
|
85
|
+
possibleVariants(variants, key, expected) {
|
|
86
|
+
if (!Array.isArray(variants))
|
|
87
|
+
return [];
|
|
88
|
+
return variants.filter((value) => {
|
|
89
|
+
const shape = this.deref(value);
|
|
90
|
+
const discriminator = shape && isRecord(shape.properties) ? this.deref(shape.properties[key]) : undefined;
|
|
91
|
+
return !discriminator || typeof discriminator.const !== "string" || discriminator.const === expected;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function property(shape, key) {
|
|
96
|
+
return isRecord(shape.properties) ? shape.properties[key] : undefined;
|
|
97
|
+
}
|
|
98
|
+
function validEnvelopes(reader, request, success, error) {
|
|
99
|
+
const req = reader.object(request, ["id", "method", "params"], ["id"], ["oneOf"]);
|
|
100
|
+
const ack = reader.object(success, ["id", "result"], ["id", "result"]);
|
|
101
|
+
const err = reader.object(error, ["id", "error"], ["id", "error"]);
|
|
102
|
+
if (!req || !ack || !err || !Array.isArray(req.oneOf) ||
|
|
103
|
+
Object.keys(req.properties).some((key) => key !== "id"))
|
|
104
|
+
return false;
|
|
105
|
+
const body = reader.object(property(err, "error"), ["code", "message"], ["code", "message"]);
|
|
106
|
+
const result = reader.deref(property(ack, "result"));
|
|
107
|
+
if (!body || !result || !onlyKeys(result, ["oneOf"]))
|
|
108
|
+
return false;
|
|
109
|
+
const oks = reader.possibleVariants(result.oneOf, "type", "ok");
|
|
110
|
+
const ok = oks.length === 1 && reader.object(oks[0], ["type"], ["type"]);
|
|
111
|
+
return !!ok && reader.string(property(ok, "type"), "ok") &&
|
|
112
|
+
[req, ack, err].every((shape) => reader.string(property(shape, "id"))) &&
|
|
113
|
+
reader.string(property(body, "code")) && reader.string(property(body, "message"));
|
|
114
|
+
}
|
|
115
|
+
function inputOperation(reader, request, method, field) {
|
|
116
|
+
const unavailable = (detail) => ({
|
|
117
|
+
state: "unsupported", reason: `cli_schema_${method}_${field}_${detail}`
|
|
118
|
+
});
|
|
119
|
+
const variants = reader.possibleVariants(request.oneOf, "method", method);
|
|
120
|
+
if (variants.length !== 1)
|
|
121
|
+
return unavailable("method_missing_or_ambiguous");
|
|
122
|
+
const variant = reader.object(variants[0], ["method", "params"], ["method", "params"]);
|
|
123
|
+
if (!variant || !reader.string(property(variant, "method"), method))
|
|
124
|
+
return unavailable("request_incompatible");
|
|
125
|
+
if (Object.keys(variant.properties).some((key) => !["method", "params"].includes(key))) {
|
|
126
|
+
return unavailable("unrecognized_envelope_constraint");
|
|
127
|
+
}
|
|
128
|
+
const params = reader.deref(property(variant, "params"));
|
|
129
|
+
if (params?.additionalProperties !== undefined && typeof params.additionalProperties !== "boolean") {
|
|
130
|
+
return unavailable("unknown_additional_properties_constraint");
|
|
131
|
+
}
|
|
132
|
+
// additionalProperties=false is safe here: every field we send is declared.
|
|
133
|
+
const shape = reader.object(params, ["pane_id", field], ["pane_id"], ["additionalProperties"]);
|
|
134
|
+
if (!shape)
|
|
135
|
+
return unavailable("params_incompatible");
|
|
136
|
+
if (!reader.string(property(shape, "pane_id")))
|
|
137
|
+
return unavailable("pane_identity_incompatible");
|
|
138
|
+
if (!validPayload(reader, property(shape, field), field))
|
|
139
|
+
return unavailable("payload_incompatible");
|
|
140
|
+
return { state: "available", reason: "matching_cli_schema" };
|
|
141
|
+
}
|
|
142
|
+
function validPayload(reader, value, field) {
|
|
143
|
+
if (field === "text")
|
|
144
|
+
return reader.string(value);
|
|
145
|
+
const keys = reader.deref(value);
|
|
146
|
+
return !!keys && keys.type === "array" && onlyKeys(keys, ["type", "items"]) && reader.string(keys.items);
|
|
147
|
+
}
|
|
148
|
+
function onlyKeys(value, keys) {
|
|
149
|
+
return Object.keys(value).every((key) => ANNOTATIONS.has(key) || keys.includes(key) ||
|
|
150
|
+
(key === "$schema" && value[key] === DIALECT));
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=herdr-api-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-api-contract.js","sourceRoot":"","sources":["../../src/herdr-api-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Releases with direct behavior evidence, not a runtime version allowlist.
|
|
3
|
+
* Herdr's endpoint protocol generation is a separate UI protocol; ping and
|
|
4
|
+
* session.snapshot report the protocol numbers below.
|
|
5
|
+
*
|
|
6
|
+
* v0.8.0 and v0.9.5 retain the same NDJSON envelopes, terminal/process identity,
|
|
7
|
+
* pane.read sources and formats, and single-enqueue pane.send_input semantics.
|
|
8
|
+
* v0.9.5 adds a pre-enqueue canonical-line size check (pane_send_failed).
|
|
9
|
+
*/
|
|
10
|
+
export declare const HERDR_COMPATIBILITY_PROFILES: readonly [{
|
|
11
|
+
readonly version: "0.9.5";
|
|
12
|
+
readonly protocol: 22;
|
|
13
|
+
}, {
|
|
14
|
+
readonly version: "0.8.0";
|
|
15
|
+
readonly protocol: 19;
|
|
16
|
+
}];
|
|
17
|
+
export type HerdrCompatibilityProfile = typeof HERDR_COMPATIBILITY_PROFILES[number];
|
|
18
|
+
export interface HerdrServerObservation {
|
|
19
|
+
version: string;
|
|
20
|
+
protocol: number;
|
|
21
|
+
baselineKnown: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface HerdrOperationCapability {
|
|
24
|
+
state: "available" | "unsupported" | "unknown";
|
|
25
|
+
reason: string;
|
|
26
|
+
evidence: "runtime_probe" | "matching_cli_schema" | "verified_release" | "none";
|
|
27
|
+
}
|
|
28
|
+
export interface HerdrOperationCapabilities {
|
|
29
|
+
visibleText: HerdrOperationCapability;
|
|
30
|
+
visibleAnsi: HerdrOperationCapability;
|
|
31
|
+
detectionText: HerdrOperationCapability;
|
|
32
|
+
textInput: HerdrOperationCapability;
|
|
33
|
+
keyInput: HerdrOperationCapability;
|
|
34
|
+
rawTextInput: HerdrOperationCapability;
|
|
35
|
+
}
|
|
36
|
+
/** Latest verified release, retained for diagnostic and fixture compatibility. */
|
|
37
|
+
export declare const HERDR_EXACT_VERSION: "0.9.5";
|
|
38
|
+
export declare const HERDR_EXACT_PROTOCOL: 22;
|
|
39
|
+
export declare const HERDR_SUPPORTED_VERSIONS: ("0.8.0" | "0.9.5")[];
|
|
40
|
+
export declare function herdrCompatibilityProfile(version: unknown): HerdrCompatibilityProfile | undefined;
|
|
41
|
+
export declare function matchesHerdrCompatibilityProfile(value: {
|
|
42
|
+
version?: unknown;
|
|
43
|
+
protocol?: unknown;
|
|
44
|
+
}, profile: Pick<HerdrServerObservation, "version" | "protocol">): boolean;
|
|
45
|
+
export declare function observeHerdrServer(value: {
|
|
46
|
+
version?: unknown;
|
|
47
|
+
protocol?: unknown;
|
|
48
|
+
}): HerdrServerObservation | undefined;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Releases with direct behavior evidence, not a runtime version allowlist.
|
|
3
|
+
* Herdr's endpoint protocol generation is a separate UI protocol; ping and
|
|
4
|
+
* session.snapshot report the protocol numbers below.
|
|
5
|
+
*
|
|
6
|
+
* v0.8.0 and v0.9.5 retain the same NDJSON envelopes, terminal/process identity,
|
|
7
|
+
* pane.read sources and formats, and single-enqueue pane.send_input semantics.
|
|
8
|
+
* v0.9.5 adds a pre-enqueue canonical-line size check (pane_send_failed).
|
|
9
|
+
*/
|
|
10
|
+
export const HERDR_COMPATIBILITY_PROFILES = [
|
|
11
|
+
{ version: "0.9.5", protocol: 22 },
|
|
12
|
+
{ version: "0.8.0", protocol: 19 }
|
|
13
|
+
];
|
|
14
|
+
/** Latest verified release, retained for diagnostic and fixture compatibility. */
|
|
15
|
+
export const HERDR_EXACT_VERSION = HERDR_COMPATIBILITY_PROFILES[0].version;
|
|
16
|
+
export const HERDR_EXACT_PROTOCOL = HERDR_COMPATIBILITY_PROFILES[0].protocol;
|
|
17
|
+
export const HERDR_SUPPORTED_VERSIONS = HERDR_COMPATIBILITY_PROFILES.map((profile) => profile.version);
|
|
18
|
+
export function herdrCompatibilityProfile(version) {
|
|
19
|
+
return HERDR_COMPATIBILITY_PROFILES.find((profile) => profile.version === version);
|
|
20
|
+
}
|
|
21
|
+
export function matchesHerdrCompatibilityProfile(value, profile) {
|
|
22
|
+
return value.version === profile.version && value.protocol === profile.protocol;
|
|
23
|
+
}
|
|
24
|
+
export function observeHerdrServer(value) {
|
|
25
|
+
if (typeof value.version !== "string" || !value.version.trim() ||
|
|
26
|
+
typeof value.protocol !== "number" || !Number.isSafeInteger(value.protocol) ||
|
|
27
|
+
value.protocol < 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
const baseline = herdrCompatibilityProfile(value.version);
|
|
30
|
+
return {
|
|
31
|
+
version: value.version,
|
|
32
|
+
protocol: value.protocol,
|
|
33
|
+
baselineKnown: baseline !== undefined && baseline.protocol === value.protocol
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=herdr-compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"herdr-compatibility.js","sourceRoot":"","sources":["../../src/herdr-compatibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IAClC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;CAC1B,CAAC;AA0BX,kFAAkF;AAClF,MAAM,CAAC,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,4BAA4B,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAE7E,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,GAAG,CACtE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAC7B,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,OAAgB;IAEhB,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAAgD,EAChD,OAA6D;IAE7D,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAgD;IAEhD,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC1D,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3E,KAAK,CAAC,QAAQ,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,aAAa,EAAE,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;KAC9E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { TerminalControlCapability, TerminalEndpointRef, TerminalProviderCapability } from "./terminal-control-ref.js";
|
|
2
|
+
import type { HerdrOperationCapabilities, HerdrServerObservation } from "./herdr-compatibility.js";
|
|
3
|
+
export interface HerdrCliObservation {
|
|
4
|
+
version?: string;
|
|
5
|
+
schema?: unknown;
|
|
6
|
+
schemaState: "available" | "unavailable" | "malformed";
|
|
7
|
+
}
|
|
8
|
+
export declare function declaredHerdrInputCapabilities(cli: HerdrCliObservation, server: HerdrServerObservation): Pick<HerdrOperationCapabilities, "textInput" | "keyInput" | "rawTextInput">;
|
|
9
|
+
export declare function herdrControlCapabilities(operations: HerdrOperationCapabilities): TerminalControlCapability[];
|
|
10
|
+
export declare function assertOperationAvailable(capabilities: HerdrOperationCapabilities, operation: keyof HerdrOperationCapabilities): void;
|
|
11
|
+
export declare function assertInputEndpointCapability(terminal: TerminalEndpointRef, providerCapabilities: readonly TerminalProviderCapability[], providerCapability: "text_delivery" | "key_delivery", operations?: HerdrOperationCapabilities): void;
|
|
12
|
+
/** Prefer agent detection for plain status; visible text is a bounded fallback. */
|
|
13
|
+
export declare function selectHerdrReadOperation(capabilities: HerdrOperationCapabilities, viewportOnly: boolean, preserveEscapes: boolean): {
|
|
14
|
+
source: "visible" | "detection";
|
|
15
|
+
format: "text" | "ansi";
|
|
16
|
+
operation: "visibleText" | "visibleAnsi" | "detectionText";
|
|
17
|
+
};
|