@scotthuang/agent-knock-knock 0.14.4 → 0.14.5

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +1 -0
  3. package/dist/src/claude-native-public-projection.d.ts +2 -2
  4. package/dist/src/cli-core.js +1 -47
  5. package/dist/src/cli-core.js.map +1 -1
  6. package/dist/src/cli-runtime-context.d.ts +3 -0
  7. package/dist/src/cli-runtime-context.js.map +1 -1
  8. package/dist/src/cli-usage.d.ts +1 -0
  9. package/dist/src/cli-usage.js +51 -0
  10. package/dist/src/cli-usage.js.map +1 -0
  11. package/dist/src/desktop-cli-adapter.js +9 -6
  12. package/dist/src/desktop-cli-adapter.js.map +1 -1
  13. package/dist/src/desktop-cli-controls.js +9 -0
  14. package/dist/src/desktop-cli-controls.js.map +1 -1
  15. package/dist/src/desktop-compatibility.d.ts +17 -0
  16. package/dist/src/desktop-compatibility.js +15 -0
  17. package/dist/src/desktop-compatibility.js.map +1 -0
  18. package/dist/src/desktop-creation-cli.d.ts +4 -0
  19. package/dist/src/desktop-creation-cli.js +167 -0
  20. package/dist/src/desktop-creation-cli.js.map +1 -0
  21. package/dist/src/desktop-creation-native.d.ts +70 -0
  22. package/dist/src/desktop-creation-native.js +249 -0
  23. package/dist/src/desktop-creation-native.js.map +1 -0
  24. package/dist/src/desktop-creation-rpc.d.ts +25 -0
  25. package/dist/src/desktop-creation-rpc.js +198 -0
  26. package/dist/src/desktop-creation-rpc.js.map +1 -0
  27. package/dist/src/desktop-creation-semantic.d.ts +13 -0
  28. package/dist/src/desktop-creation-semantic.js +89 -0
  29. package/dist/src/desktop-creation-semantic.js.map +1 -0
  30. package/dist/src/desktop-creation-service.d.ts +27 -0
  31. package/dist/src/desktop-creation-service.js +268 -0
  32. package/dist/src/desktop-creation-service.js.map +1 -0
  33. package/dist/src/desktop-creation-store.d.ts +42 -0
  34. package/dist/src/desktop-creation-store.js +95 -0
  35. package/dist/src/desktop-creation-store.js.map +1 -0
  36. package/dist/src/desktop-interaction-projection.d.ts +2 -1
  37. package/dist/src/desktop-interaction-projection.js +8 -5
  38. package/dist/src/desktop-interaction-projection.js.map +1 -1
  39. package/dist/src/desktop-ipc-client.d.ts +1 -4
  40. package/dist/src/desktop-ipc-client.js +6 -6
  41. package/dist/src/desktop-ipc-client.js.map +1 -1
  42. package/dist/src/desktop-list.d.ts +1 -0
  43. package/dist/src/desktop-list.js +5 -4
  44. package/dist/src/desktop-list.js.map +1 -1
  45. package/dist/src/desktop-public-projection.d.ts +3 -2
  46. package/dist/src/desktop-public-projection.js +23 -18
  47. package/dist/src/desktop-public-projection.js.map +1 -1
  48. package/dist/src/desktop-runtime.js +4 -2
  49. package/dist/src/desktop-runtime.js.map +1 -1
  50. package/dist/src/desktop-semantic.js +2 -0
  51. package/dist/src/desktop-semantic.js.map +1 -1
  52. package/dist/src/desktop-state-store.js +5 -2
  53. package/dist/src/desktop-state-store.js.map +1 -1
  54. package/dist/src/desktop-task-interactions.d.ts +1 -1
  55. package/dist/src/desktop-task-interactions.js +5 -5
  56. package/dist/src/desktop-task-interactions.js.map +1 -1
  57. package/dist/src/desktop-task-service.d.ts +3 -0
  58. package/dist/src/desktop-task-service.js +6 -1
  59. package/dist/src/desktop-task-service.js.map +1 -1
  60. package/dist/src/host-profile-runtime.js +1 -1
  61. package/dist/src/host-profile-runtime.js.map +1 -1
  62. package/dist/src/local-codex-cli-adapter.js +2 -1
  63. package/dist/src/local-codex-cli-adapter.js.map +1 -1
  64. package/dist/src/semantic-tool-descriptions.d.ts +2 -1
  65. package/dist/src/semantic-tool-descriptions.js +8 -1
  66. package/dist/src/semantic-tool-descriptions.js.map +1 -1
  67. package/dist/src/semantic-tool-list-projection.js +1 -1
  68. package/dist/src/semantic-tool-list-projection.js.map +1 -1
  69. package/dist/src/semantic-tool-runtime.js +2 -0
  70. package/dist/src/semantic-tool-runtime.js.map +1 -1
  71. package/dist/src/semantic-tool-schemas.d.ts +52 -1
  72. package/dist/src/semantic-tool-schemas.js +16 -0
  73. package/dist/src/semantic-tool-schemas.js.map +1 -1
  74. package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
  75. package/docs/codex-desktop-compatibility.md +58 -10
  76. package/docs/desktop-create.md +144 -0
  77. package/openclaw.plugin.json +4 -0
  78. package/package.json +1 -1
  79. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +11 -5
@@ -1,3 +1,4 @@
1
+ import { desktopCapabilityProfile } from "./desktop-compatibility.js";
1
2
  const required = (value, label) => {
2
3
  if (typeof value !== "string" || !value.trim())
3
4
  throw new Error(`Desktop ${label} is required`);
@@ -5,6 +6,7 @@ const required = (value, label) => {
5
6
  };
6
7
  /** Typed controls operate on the original Desktop owner; they never launch or resume a CLI. */
7
8
  export async function desktopControlForCli(runtime, command, options, subject, watchId) {
9
+ assertNativeControlCapability(runtime, command, options);
8
10
  let result;
9
11
  if (command === "permission-options" || command === "native-inspect" && options.action === "permissions") {
10
12
  result = await runtime.controls.permissionOptions(subject.identity);
@@ -42,4 +44,11 @@ function desktopMode(value) {
42
44
  throw new Error("Desktop collaboration_mode must be plan or default");
43
45
  return value;
44
46
  }
47
+ function assertNativeControlCapability(runtime, command, options) {
48
+ if (["permission-options", "set-permissions", "model-options", "set-model", "cancel"].includes(command)
49
+ || command === "native-inspect" && options.action === "permissions") {
50
+ if (!desktopCapabilityProfile(runtime.compatibility).nativeControls)
51
+ throw new Error("Desktop native controls are unverified for this build; handle this operation in Desktop");
52
+ }
53
+ }
45
54
  //# sourceMappingURL=desktop-cli-controls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"desktop-cli-controls.js","sourceRoot":"","sources":["../../src/desktop-cli-controls.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"desktop-cli-controls.js","sourceRoot":"","sources":["../../src/desktop-cli-controls.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { DesktopCompatibility } from "./desktop-types.js";
2
+ export declare const VERIFIED_DESKTOP_BUILD: Readonly<{
3
+ version: "26.1002.52244";
4
+ build: "13536";
5
+ }>;
6
+ export declare const DESKTOP_CREATION_BUILD: Readonly<{
7
+ version: "26.1007.30912";
8
+ build: "20156";
9
+ }>;
10
+ export interface DesktopCapabilityProfile {
11
+ readonly send: boolean;
12
+ readonly nativeControls: boolean;
13
+ }
14
+ /** Exact app builds, not minimum versions. Native controls need their own evidence. */
15
+ export declare function desktopCapabilityProfile(compatibility: DesktopCompatibility): DesktopCapabilityProfile;
16
+ /** Boolean input retains the existing projection contract for callers with an all-write verdict. */
17
+ export declare function desktopProjectionCapabilities(value: DesktopCapabilityProfile | boolean): DesktopCapabilityProfile;
@@ -0,0 +1,15 @@
1
+ export const VERIFIED_DESKTOP_BUILD = Object.freeze({ version: "26.1002.52244", build: "13536" });
2
+ export const DESKTOP_CREATION_BUILD = Object.freeze({ version: "26.1007.30912", build: "20156" });
3
+ const FULL = Object.freeze({ send: true, nativeControls: true });
4
+ const SEND_ONLY = Object.freeze({ send: true, nativeControls: false });
5
+ const READ_ONLY = Object.freeze({ send: false, nativeControls: false });
6
+ /** Exact app builds, not minimum versions. Native controls need their own evidence. */
7
+ export function desktopCapabilityProfile(compatibility) {
8
+ const matches = (expected) => compatibility.version === expected.version && compatibility.build === expected.build;
9
+ return matches(VERIFIED_DESKTOP_BUILD) ? FULL : matches(DESKTOP_CREATION_BUILD) ? SEND_ONLY : READ_ONLY;
10
+ }
11
+ /** Boolean input retains the existing projection contract for callers with an all-write verdict. */
12
+ export function desktopProjectionCapabilities(value) {
13
+ return typeof value === "boolean" ? value ? FULL : READ_ONLY : value;
14
+ }
15
+ //# sourceMappingURL=desktop-compatibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-compatibility.js","sourceRoot":"","sources":["../../src/desktop-compatibility.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAClG,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;AAKlG,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;AACvE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;AAExE,uFAAuF;AACvF,MAAM,UAAU,wBAAwB,CAAC,aAAmC;IAC1E,MAAM,OAAO,GAAG,CAAC,QAA8B,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,aAAa,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC;IACzI,OAAO,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1G,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,6BAA6B,CAAC,KAAyC;IACrF,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACvE,CAAC"}
@@ -0,0 +1,4 @@
1
+ type Options = Record<string, unknown>;
2
+ /** An explicit new Desktop resource operation, separate from replacing a terminal's native thread. */
3
+ export declare function dispatchDesktopCreationCli(command: string | undefined, options: Options): Promise<boolean>;
4
+ export {};
@@ -0,0 +1,167 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { execFile } from "node:child_process";
5
+ import { isDeepStrictEqual, promisify } from "node:util";
6
+ import { cliDependencies, cliEnv, cliNow, cliCwd, writeCliStdout } from "./cli-runtime-context.js";
7
+ import { desktopRuntimeOptions } from "./desktop-cli-adapter.js";
8
+ import { createDesktopRuntime } from "./desktop-runtime.js";
9
+ import { desktopCapabilityProfile } from "./desktop-compatibility.js";
10
+ import { createDesktopCreationNative } from "./desktop-creation-native.js";
11
+ import { createDesktopCreationService } from "./desktop-creation-service.js";
12
+ import { assertDesktopCreationId, createDesktopCreationStore } from "./desktop-creation-store.js";
13
+ import { createDesktopConversationId } from "./desktop-identity.js";
14
+ import { createTerminalWatchOpenClawCallbackRoute, parseCallbackRoute } from "./callback-transport.js";
15
+ import { monitorMinutesToMs, resolveMonitorHardTimeoutMinutes } from "./monitor-deadline-policy.js";
16
+ import { desktopTaskProjection } from "./desktop-public-projection.js";
17
+ import { desktopTaskNeedsReconciliation } from "./desktop-task-service.js";
18
+ import { launchDesktopMonitor } from "./desktop-monitor.js";
19
+ const text = (value, label) => {
20
+ if (typeof value !== "string" || !value.trim())
21
+ throw new Error(`${label} is required`);
22
+ return value;
23
+ };
24
+ function creationNextAction(r, requestState) {
25
+ if (r.status === "failed")
26
+ return "Inspect error_code; this operation will not be retried.";
27
+ if (r.status === "uncertain")
28
+ return "Creation or identity is uncertain. Do not create a replacement or resend. Inspect the exact operation before taking further action.";
29
+ if (r.worker)
30
+ return "This operation is still in progress. Wait, then continue with the same operation_id; do not create another operation.";
31
+ if (r.status !== "ready")
32
+ return "Continue only with this operation_id. If Desktop has not loaded the known conversation, open its native link and continue.";
33
+ if (r.input.request && requestState !== "accepted")
34
+ return "Desktop is ready, but task acceptance is not confirmed. Continue only with this operation_id to reconcile the same send; do not resend separately.";
35
+ return undefined;
36
+ }
37
+ function creationActions(r, conversationId) {
38
+ const actions = conversationId ? { status: { tool: "agent_knock_knock_status", input: { conversation_id: conversationId } } } : {};
39
+ if (!["failed", "uncertain"].includes(r.status) && !(r.status === "ready" && (!r.input.request || r.watchId))) {
40
+ actions.continue_creation = { tool: "agent_knock_knock_desktop_create", input: { operation_id: r.id } };
41
+ }
42
+ return actions;
43
+ }
44
+ function creationProjection(r) {
45
+ const id = r.threadId ? createDesktopConversationId({ codexHome: r.input.codexHome, hostId: "local", threadId: r.threadId }) : undefined;
46
+ const requestState = r.requestState ?? (r.watchId ? "uncertain" : "not_sent");
47
+ const next = creationNextAction(r, requestState);
48
+ return { source: "codex_desktop", operation_id: r.id, status: r.status, creation_status: r.status,
49
+ created: r.threadId ? true : ["creating", "uncertain"].includes(r.status) ? null : false,
50
+ ...(id ? { conversation_id: id, native_thread_id: r.threadId } : {}),
51
+ cwd: r.cwd ?? null, title: r.nativeTitle ?? null, requested_title: r.input.title,
52
+ title_confirmed: r.nativeTitle === r.input.title, native_project_id: r.projectId ?? null, project_name: r.projectName ?? null,
53
+ desktop_owner_verified: r.status === "ready", operation_in_flight: Boolean(r.worker), callback_expected: false,
54
+ ...(r.errorCode ? { error_code: r.errorCode } : {}),
55
+ ...(r.input.request ? { request_state: requestState } : {}), available_actions: creationActions(r, id),
56
+ ...(next ? { next_action: next, ...(r.threadId ? { desktop_url: `codex://threads/${r.threadId}` } : {}) } : {}) };
57
+ }
58
+ function validateCreationOptions(options, old, controller, resume) {
59
+ if (["conversation", "conversationId", "terminal", "session", "turn", "watch"].some(key => options[key] !== undefined)) {
60
+ throw new Error("Desktop creation does not accept an existing conversation or terminal target");
61
+ }
62
+ if (resume && ["project", "cwd", "title", "message", "request", "agentHardTimeoutMinutes", "hardTimeoutMinutes"].some(key => options[key] !== undefined)) {
63
+ throw new Error("Desktop creation recovery cannot change its original payload or deadline");
64
+ }
65
+ if (old && old.controllerSession !== controller || resume && !old)
66
+ throw new Error("Desktop creation operation not found for this controller");
67
+ }
68
+ function creationInput(options, codexHome, controller, home, openclawBin) {
69
+ const request = options.message ?? options.request;
70
+ const title = options.title === undefined ? "AKK 新会话" : text(options.title, "title");
71
+ if ([...title].length > 200)
72
+ throw new Error("Desktop title exceeds 200 characters");
73
+ if (request !== undefined && Buffer.byteLength(text(request, "request")) > 1024 * 1024)
74
+ throw new Error("Desktop task exceeds 1 MiB");
75
+ const route = options.callbackRoute ? parseCallbackRoute(options.callbackRoute)
76
+ : createTerminalWatchOpenClawCallbackRoute({ controllerSessionId: controller, openclawBin });
77
+ if (route.controller_session_id !== controller)
78
+ throw new Error("Desktop creation callback belongs to a different controller");
79
+ return { codexHome, title,
80
+ ...(options.project === undefined ? {} : { project: text(options.project, "project") }),
81
+ ...(options.cwd === undefined ? {} : { cwd: fs.realpathSync(expandDirectory(text(options.cwd, "cwd"), home)) }),
82
+ ...(request === undefined ? {} : { request: text(request, "request"), callbackRoute: { ...route, capabilities: { wake: true, respond: false } } }),
83
+ timeoutMs: monitorMinutesToMs(resolveMonitorHardTimeoutMinutes(options.hardTimeoutMinutes ?? options.agentHardTimeoutMinutes)) };
84
+ }
85
+ function expandDirectory(value, home) {
86
+ return path.resolve(cliCwd(), value.startsWith("~/") ? path.join(home, value.slice(2)) : value);
87
+ }
88
+ function creationService(store, runtime, home) {
89
+ return createDesktopCreationService({ store,
90
+ connect: selectedHome => (cliDependencies().createDesktopCreationNative ?? createDesktopCreationNative)({
91
+ codexHome: selectedHome, compatibility: runtime.compatibility
92
+ }),
93
+ defaultDirectory: operationId => {
94
+ const directory = path.join(home, ".agent-knock-knock", "workspaces", "desktop", operationId.slice(-16));
95
+ fs.mkdirSync(directory, { recursive: true, mode: 0o700 });
96
+ return fs.realpathSync(directory);
97
+ },
98
+ open: cliDependencies().openDesktopThread ?? (async (threadId) => {
99
+ if (!/^[0-9a-f-]{36}$/iu.test(threadId))
100
+ throw new Error("Invalid Desktop native thread UUID");
101
+ await promisify(execFile)("/usr/bin/open", ["-b", "com.openai.codex", `codex://threads/${threadId}`], { timeout: 10_000 });
102
+ }), observe: target => runtime.transport.observe(target), tasks: runtime.tasks, now: cliNow,
103
+ ownerAttempts: cliDependencies().desktopCreationOwnerAttempts });
104
+ }
105
+ async function creationTaskProjection(r, runtime, config) {
106
+ const output = creationProjection(r);
107
+ if (!r.watchId)
108
+ return output;
109
+ const task = runtime.tasks.status(r.watchId);
110
+ if (task.controller_session !== r.controllerSession || task.target.threadId !== r.threadId
111
+ || path.resolve(task.target.codexHome) !== path.resolve(r.input.codexHome) || task.send_intent?.message_id !== r.id) {
112
+ throw new Error("Desktop creation Watch identity differs from its immutable task");
113
+ }
114
+ const projected = desktopTaskProjection(task, desktopCapabilityProfile(runtime.compatibility));
115
+ const { status, available_actions, ...fields } = projected;
116
+ const result = { ...output, ...fields, task_status: status, creation_status: output.creation_status,
117
+ status: output.creation_status, request_state: task.send_intent?.state === "accepted" ? "accepted"
118
+ : task.send_intent?.state === "not_sent" ? "not_sent" : "uncertain",
119
+ available_actions: { ...output.available_actions, ...available_actions } };
120
+ if (result.request_state === "accepted")
121
+ delete result.next_action;
122
+ if (desktopTaskNeedsReconciliation(task)) {
123
+ try {
124
+ result.monitor_pid = await (cliDependencies().launchDesktopMonitor ?? launchDesktopMonitor)(task.id, { ...config, codexHomes: [r.input.codexHome] });
125
+ }
126
+ catch {
127
+ result.monitor_error = "desktop_monitor_launch_failed";
128
+ result.callback_expected = false;
129
+ }
130
+ }
131
+ return result;
132
+ }
133
+ /** An explicit new Desktop resource operation, separate from replacing a terminal's native thread. */
134
+ export async function dispatchDesktopCreationCli(command, options) {
135
+ if (command !== "desktop-create")
136
+ return false;
137
+ const id = text(options.operationId, "--operation-id");
138
+ assertDesktopCreationId(id);
139
+ const controller = text(options.openclawSession, "--openclaw-session");
140
+ const config = desktopRuntimeOptions(options), store = createDesktopCreationStore(config.storeDir);
141
+ const resume = options.resumeCreation === true, old = store.load(id);
142
+ validateCreationOptions(options, old, controller, resume);
143
+ const env = cliEnv(), home = env.HOME ?? os.homedir();
144
+ const codexHome = old?.input.codexHome ?? fs.realpathSync(expandDirectory(String(options.codexHome ?? env.CODEX_HOME ?? path.join(home, ".codex")), home));
145
+ const input = resume ? undefined : creationInput(options, codexHome, controller, home, config.openclawBin);
146
+ if (old && input && !isDeepStrictEqual(old.input, input))
147
+ throw new Error("Desktop creation operation belongs to different immutable input");
148
+ const runtime = (cliDependencies().createDesktopRuntime ?? createDesktopRuntime)({ ...config, codexHomes: [codexHome] });
149
+ let output;
150
+ try {
151
+ const r = await creationService(store, runtime, home).run({ operationId: id, controllerSession: controller, resume, input });
152
+ output = await creationTaskProjection(r, runtime, config);
153
+ }
154
+ catch {
155
+ const record = store.load(id);
156
+ output = record?.controllerSession === controller ? { ...creationProjection(record), error_code: "desktop_creation_incomplete",
157
+ ...(record.input.request && record.watchId ? { request_state: "uncertain", callback_expected: false,
158
+ next_action: "The task receipt could not be read. Inspect this exact Watch; do not resend the task." } : {}) }
159
+ : { source: "codex_desktop", operation_id: id, status: "failed", created: false, error_code: "desktop_creation_failed" };
160
+ }
161
+ finally {
162
+ await runtime.close();
163
+ }
164
+ writeCliStdout(JSON.stringify(output, null, 2) + "\n");
165
+ return true;
166
+ }
167
+ //# sourceMappingURL=desktop-creation-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-creation-cli.js","sourceRoot":"","sources":["../../src/desktop-creation-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { createDesktopCreationRpc } from "./desktop-creation-rpc.js";
2
+ import type { DesktopCompatibility } from "./desktop-types.js";
3
+ export declare const VERIFIED_DESKTOP_CREATION_BUILD: Readonly<{
4
+ version: "26.1007.30912";
5
+ build: "20156";
6
+ backendVersion: "0.162.0-alpha.17.2";
7
+ }>;
8
+ export type DesktopCreationDispatchState = "not_sent" | "unknown" | "created";
9
+ export declare class DesktopCreationNativeError extends Error {
10
+ readonly code: string;
11
+ readonly dispatchState: DesktopCreationDispatchState;
12
+ readonly threadId?: string | undefined;
13
+ readonly requestId?: number | undefined;
14
+ readonly method?: string | undefined;
15
+ constructor(code: string, message: string, dispatchState?: DesktopCreationDispatchState, threadId?: string | undefined, requestId?: number | undefined, method?: string | undefined);
16
+ }
17
+ export interface DesktopCreationProject {
18
+ id: string;
19
+ name: string;
20
+ roots: string[];
21
+ }
22
+ export interface DesktopCreatedThread {
23
+ threadId: string;
24
+ cwd: string;
25
+ projectId: string | null;
26
+ title: string | null;
27
+ }
28
+ export interface DesktopCreationMetadata {
29
+ appPath: string;
30
+ binaryPath: string;
31
+ codexHome: string;
32
+ backendVersion: string;
33
+ appVersion: string;
34
+ appBuild: string;
35
+ }
36
+ export interface DesktopCreationNativeOptions {
37
+ codexHome: string;
38
+ compatibility: DesktopCompatibility;
39
+ appPath?: string;
40
+ timeoutMs?: number;
41
+ /** Dependency seams for isolated protocol tests; production uses the actual bundle and process. */
42
+ inspectApplication?: (appPath: string) => Omit<DesktopCreationMetadata, "codexHome">;
43
+ rpcFactory?: typeof createDesktopCreationRpc;
44
+ }
45
+ export interface DesktopCreationInput {
46
+ cwd: string;
47
+ projectId?: string;
48
+ title?: string;
49
+ beforeDispatch?: () => void | Promise<void>;
50
+ onCreated?: (receipt: DesktopCreatedThread) => void | Promise<void>;
51
+ approvalPolicy?: "on-request" | "untrusted";
52
+ sandbox?: "read-only" | "workspace-write";
53
+ }
54
+ export interface DesktopCreationNative {
55
+ metadata: DesktopCreationMetadata;
56
+ projects(): Promise<DesktopCreationProject[]>;
57
+ resolveProject(selector: {
58
+ projectId?: string;
59
+ projectName?: string;
60
+ cwd?: string;
61
+ }): Promise<{
62
+ project: DesktopCreationProject;
63
+ cwd: string;
64
+ }>;
65
+ create(input: DesktopCreationInput): Promise<DesktopCreatedThread>;
66
+ read(threadId: string): Promise<DesktopCreatedThread>;
67
+ close(): Promise<void>;
68
+ }
69
+ /** Creates metadata only. A user task must be sent through the original Desktop owner after handoff. */
70
+ export declare function createDesktopCreationNative(options: DesktopCreationNativeOptions): Promise<DesktopCreationNative>;
@@ -0,0 +1,249 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { execFileSync } from "node:child_process";
4
+ import { createDesktopCreationRpc, DesktopCreationRpcError } from "./desktop-creation-rpc.js";
5
+ export const VERIFIED_DESKTOP_CREATION_BUILD = Object.freeze({
6
+ version: "26.1007.30912", build: "20156", backendVersion: "0.162.0-alpha.17.2"
7
+ });
8
+ export class DesktopCreationNativeError extends Error {
9
+ code;
10
+ dispatchState;
11
+ threadId;
12
+ requestId;
13
+ method;
14
+ constructor(code, message, dispatchState = "not_sent", threadId, requestId, method) {
15
+ super(message);
16
+ this.code = code;
17
+ this.dispatchState = dispatchState;
18
+ this.threadId = threadId;
19
+ this.requestId = requestId;
20
+ this.method = method;
21
+ this.name = "DesktopCreationNativeError";
22
+ }
23
+ }
24
+ const uuid = (value) => typeof value === "string"
25
+ && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu.test(value);
26
+ const record = (value) => !!value && typeof value === "object" && !Array.isArray(value);
27
+ function fail(code, message) { throw new DesktopCreationNativeError(code, message); }
28
+ function directory(value, label) {
29
+ if (typeof value !== "string" || !path.isAbsolute(value))
30
+ fail("invalid_argument", `${label} must be an absolute existing directory`);
31
+ try {
32
+ if (fs.statSync(value).isDirectory())
33
+ return fs.realpathSync(value);
34
+ }
35
+ catch { /* fail closed below */ }
36
+ return fail("invalid_argument", `${label} must be an absolute existing directory`);
37
+ }
38
+ function within(root, cwd) {
39
+ const relative = path.relative(root, cwd);
40
+ return relative === "" || (!path.isAbsolute(relative) && relative !== ".." && !relative.startsWith(`..${path.sep}`));
41
+ }
42
+ function inspectApplication(appPath) {
43
+ if (process.platform !== "darwin")
44
+ fail("incompatible_desktop", "Desktop creation requires the verified macOS application");
45
+ appPath = directory(appPath, "Desktop application");
46
+ const plist = path.join(appPath, "Contents", "Info.plist");
47
+ const read = (key) => execFileSync("/usr/libexec/PlistBuddy", ["-c", `Print :${key}`, plist], { encoding: "utf8", timeout: 3000, stdio: ["ignore", "pipe", "ignore"] }).trim();
48
+ try {
49
+ if (read("CFBundleIdentifier") !== "com.openai.codex")
50
+ fail("incompatible_desktop", "Desktop application identity is not Codex");
51
+ const appVersion = read("CFBundleShortVersionString"), appBuild = read("CFBundleVersion");
52
+ const binaryPath = fs.realpathSync(path.join(appPath, "Contents/Resources/codex-cli/CodexCLI.app/Contents/MacOS/codex"));
53
+ if (!within(appPath, binaryPath))
54
+ fail("incompatible_desktop", "Desktop bundled binary escapes its application");
55
+ const output = execFileSync(binaryPath, ["--version"], { encoding: "utf8", timeout: 5000,
56
+ stdio: ["ignore", "pipe", "ignore"] }).trim();
57
+ const backendVersion = /^codex-cli (\S+)$/u.exec(output)?.[1];
58
+ if (!backendVersion)
59
+ fail("incompatible_desktop", "Desktop bundled version is unavailable");
60
+ return { appPath, binaryPath, appVersion, appBuild, backendVersion };
61
+ }
62
+ catch (error) {
63
+ if (error instanceof DesktopCreationNativeError)
64
+ throw error;
65
+ return fail("incompatible_desktop", "Could not verify the installed Desktop application and bundled binary");
66
+ }
67
+ }
68
+ function project(value) {
69
+ if (!record(value) || !uuid(value.id) || typeof value.name !== "string" || !value.name.trim()
70
+ || !Array.isArray(value.roots))
71
+ fail("invalid_response", "Invalid Desktop project identity or roots");
72
+ const roots = value.roots.map(root => {
73
+ if (!record(root) || typeof root.path !== "string" || !path.isAbsolute(root.path)) {
74
+ return fail("invalid_response", "Invalid Desktop project root");
75
+ }
76
+ return root.path;
77
+ });
78
+ return { id: value.id, name: value.name, roots };
79
+ }
80
+ function thread(value, expectedId) {
81
+ if (!record(value) || !record(value.thread))
82
+ fail("invalid_response", "Desktop creation has no thread receipt");
83
+ const t = value.thread;
84
+ if (!uuid(t.id) || (expectedId && t.id !== expectedId) || typeof t.cwd !== "string" || !path.isAbsolute(t.cwd)
85
+ || !(t.projectId === null || uuid(t.projectId)) || t.ephemeral !== false
86
+ || !(t.name == null || typeof t.name === "string"))
87
+ fail("invalid_response", "Desktop thread identity is invalid or changed");
88
+ return { threadId: t.id, cwd: t.cwd, projectId: t.projectId,
89
+ title: typeof t.name === "string" ? t.name : null };
90
+ }
91
+ /** Creates metadata only. A user task must be sent through the original Desktop owner after handoff. */
92
+ export async function createDesktopCreationNative(options) {
93
+ const codexHome = directory(options.codexHome, "Codex home");
94
+ const inspected = (options.inspectApplication ?? inspectApplication)(options.appPath ?? "/Applications/ChatGPT.app");
95
+ const verified = VERIFIED_DESKTOP_CREATION_BUILD;
96
+ if (options.compatibility.version !== verified.version || options.compatibility.build !== verified.build
97
+ || inspected.appVersion !== verified.version || inspected.appBuild !== verified.build
98
+ || inspected.backendVersion !== verified.backendVersion) {
99
+ fail("incompatible_desktop", "Desktop creation requires the verified application build and bundled backend");
100
+ }
101
+ const metadata = { ...inspected, codexHome };
102
+ let rpc;
103
+ try {
104
+ rpc = (options.rpcFactory ?? createDesktopCreationRpc)({ binaryPath: metadata.binaryPath, codexHome, timeoutMs: options.timeoutMs });
105
+ }
106
+ catch {
107
+ return fail("connection_failed", "Could not start the dedicated Desktop creation process");
108
+ }
109
+ try {
110
+ const initialized = await rpc.request("initialize", { clientInfo: {
111
+ name: "agent-knock-knock-desktop-create", title: "AKK Desktop creation", version: "1"
112
+ }, capabilities: { experimentalApi: true } });
113
+ if (!record(initialized) || typeof initialized.codexHome !== "string"
114
+ || directory(initialized.codexHome, "Backend Codex home") !== codexHome
115
+ || typeof initialized.userAgent !== "string"
116
+ || !initialized.userAgent.startsWith(`agent-knock-knock-desktop-create/${metadata.backendVersion} `)) {
117
+ fail("incompatible_desktop", "Desktop creation backend identity or Codex home does not match");
118
+ }
119
+ rpc.notifyInitialized();
120
+ }
121
+ catch (error) {
122
+ await rpc.close();
123
+ throw error;
124
+ }
125
+ return new DesktopCreationConnection(metadata, rpc);
126
+ }
127
+ class DesktopCreationConnection {
128
+ metadata;
129
+ rpc;
130
+ attempted = false;
131
+ creating = false;
132
+ constructor(metadata, rpc) {
133
+ this.metadata = metadata;
134
+ this.rpc = rpc;
135
+ }
136
+ async projects() {
137
+ const all = [], cursors = new Set(), ids = new Set();
138
+ let cursor;
139
+ for (let page = 0; page < 20; page++) {
140
+ const result = await this.rpc.request("project/list", { limit: 100, ...(cursor ? { cursor } : {}) });
141
+ if (!record(result) || !Array.isArray(result.data)
142
+ || !(result.nextCursor == null || typeof result.nextCursor === "string" && !!result.nextCursor)) {
143
+ fail("invalid_response", "Invalid Desktop project page");
144
+ }
145
+ for (const raw of result.data) {
146
+ const entry = project(raw);
147
+ if (ids.has(entry.id))
148
+ fail("invalid_response", "Desktop project pages contain duplicate identities");
149
+ ids.add(entry.id);
150
+ all.push(entry);
151
+ }
152
+ if (result.nextCursor == null)
153
+ return all;
154
+ cursor = result.nextCursor;
155
+ if (cursors.has(cursor))
156
+ fail("invalid_response", "Desktop project pagination did not advance");
157
+ cursors.add(cursor);
158
+ }
159
+ return fail("project_list_incomplete", "Desktop project discovery exceeded its bounded page limit");
160
+ }
161
+ async resolveProject(selector) {
162
+ if ((!selector.projectId && !selector.projectName) || (selector.projectId && !uuid(selector.projectId))) {
163
+ fail("invalid_argument", "An exact Desktop project ID or name is required");
164
+ }
165
+ const matches = (await this.projects()).filter(entry => (!selector.projectId || entry.id === selector.projectId)
166
+ && (!selector.projectName || entry.name === selector.projectName));
167
+ if (matches.length !== 1)
168
+ fail(matches.length ? "ambiguous_project" : "project_not_found", "Desktop project must match exactly one result");
169
+ const listed = matches[0], response = await this.rpc.request("project/read", { projectId: listed.id });
170
+ const exact = project(record(response) ? response.project : undefined);
171
+ if (exact.id !== listed.id || exact.name !== listed.name
172
+ || JSON.stringify([...exact.roots].sort()) !== JSON.stringify([...listed.roots].sort())) {
173
+ fail("project_changed", "Desktop project changed during exact discovery");
174
+ }
175
+ const roots = [...new Set(exact.roots.map(root => directory(root, "Desktop project root")))];
176
+ if (!roots.length)
177
+ fail("project_cwd_mismatch", "Desktop project has no local working directory");
178
+ if (!selector.cwd && roots.length !== 1)
179
+ fail("ambiguous_project_root", "A Desktop project with multiple roots requires an explicit working directory");
180
+ const cwd = directory(selector.cwd ?? roots[0], "Working directory");
181
+ if (!roots.some(root => within(root, cwd)))
182
+ fail("project_cwd_mismatch", "Working directory is outside the selected Desktop project roots");
183
+ return { project: exact, cwd };
184
+ }
185
+ async read(threadId) {
186
+ if (!uuid(threadId))
187
+ fail("invalid_argument", "A precise Desktop thread UUID is required");
188
+ return thread(await this.rpc.request("thread/read", { threadId, includeTurns: false }), threadId);
189
+ }
190
+ close() { return this.rpc.close(); }
191
+ async create(input) {
192
+ if (this.creating || this.attempted)
193
+ fail("duplicate_creation", "Desktop creation was already attempted; it will not be repeated");
194
+ this.creating = true;
195
+ let createdId;
196
+ try {
197
+ const cwd = directory(input.cwd, "Working directory");
198
+ validateCreationInput(input);
199
+ if (input.projectId !== undefined)
200
+ await this.resolveProject({ projectId: input.projectId, cwd });
201
+ const result = await this.rpc.request("thread/start", { cwd, projectId: input.projectId ?? null,
202
+ threadSource: "user", ephemeral: false,
203
+ ...(input.approvalPolicy ? { approvalPolicy: input.approvalPolicy } : {}),
204
+ ...(input.sandbox ? { sandbox: input.sandbox } : {})
205
+ }, { beforeDispatch: async () => { await input.beforeDispatch?.(); this.attempted = true; } });
206
+ if (record(result) && record(result.thread) && uuid(result.thread.id))
207
+ createdId = result.thread.id;
208
+ const created = thread(result);
209
+ // Persist the acknowledged identity before naming/readback can fail or this process exits.
210
+ await input.onCreated?.(created);
211
+ if (created.cwd !== cwd || created.projectId !== (input.projectId ?? null))
212
+ fail("thread_target_mismatch", "Created Desktop thread has an unexpected project or working directory");
213
+ if (input.title)
214
+ await this.rpc.request("thread/name/set", { threadId: created.threadId, name: input.title });
215
+ const confirmed = await this.read(created.threadId);
216
+ verifyReadback(confirmed, cwd, created.projectId, input.title);
217
+ return confirmed;
218
+ }
219
+ catch (error) {
220
+ throw creationError(error, this.attempted, createdId);
221
+ }
222
+ finally {
223
+ this.creating = false;
224
+ }
225
+ }
226
+ }
227
+ function validateCreationInput(input) {
228
+ if (input.title !== undefined && (typeof input.title !== "string" || !input.title.trim() || [...input.title].length > 200)) {
229
+ fail("invalid_argument", "Desktop thread title must contain 1 to 200 characters");
230
+ }
231
+ if ((input.approvalPolicy !== undefined && !["on-request", "untrusted"].includes(input.approvalPolicy))
232
+ || (input.sandbox !== undefined && !["read-only", "workspace-write"].includes(input.sandbox))) {
233
+ fail("invalid_argument", "Desktop creation does not accept permission-bypass settings");
234
+ }
235
+ }
236
+ function verifyReadback(confirmed, cwd, projectId, title) {
237
+ if (confirmed.cwd !== cwd || confirmed.projectId !== projectId || (title && confirmed.title !== title)) {
238
+ fail("thread_target_mismatch", "Desktop thread readback does not match its creation receipt");
239
+ }
240
+ }
241
+ function creationError(error, attempted, createdId) {
242
+ const dispatched = error instanceof DesktopCreationRpcError ? error.requestDispatched : attempted;
243
+ const state = createdId ? "created" : dispatched ? "unknown" : "not_sent";
244
+ if (error instanceof DesktopCreationNativeError) {
245
+ return new DesktopCreationNativeError(error.code, error.message, state, createdId);
246
+ }
247
+ return new DesktopCreationNativeError(error instanceof DesktopCreationRpcError ? error.code : "creation_failed", "Desktop creation did not complete; inspect the dispatch state before taking any further action", state, createdId, error instanceof DesktopCreationRpcError ? error.requestId : undefined, error instanceof DesktopCreationRpcError ? error.method : undefined);
248
+ }
249
+ //# sourceMappingURL=desktop-creation-native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-creation-native.js","sourceRoot":"","sources":["../../src/desktop-creation-native.ts"],"names":[],"mappings":"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"}