youmd 0.12.0 → 0.13.0

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 (80) hide show
  1. package/dist/commands/brain.d.ts.map +1 -1
  2. package/dist/commands/brain.js +12 -4
  3. package/dist/commands/brain.js.map +1 -1
  4. package/dist/commands/connect.d.ts +113 -0
  5. package/dist/commands/connect.d.ts.map +1 -0
  6. package/dist/commands/connect.js +849 -0
  7. package/dist/commands/connect.js.map +1 -0
  8. package/dist/commands/founder.d.ts +3 -0
  9. package/dist/commands/founder.d.ts.map +1 -1
  10. package/dist/commands/founder.js +258 -1
  11. package/dist/commands/founder.js.map +1 -1
  12. package/dist/generated/capability-registry.d.ts +291 -83
  13. package/dist/generated/capability-registry.d.ts.map +1 -1
  14. package/dist/generated/capability-registry.js +320 -83
  15. package/dist/generated/capability-registry.js.map +1 -1
  16. package/dist/index.js +31 -4
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/api.d.ts +76 -0
  19. package/dist/lib/api.d.ts.map +1 -1
  20. package/dist/lib/api.js +40 -0
  21. package/dist/lib/api.js.map +1 -1
  22. package/dist/lib/brain/adapters.d.ts +2 -0
  23. package/dist/lib/brain/adapters.d.ts.map +1 -1
  24. package/dist/lib/brain/adapters.js +71 -0
  25. package/dist/lib/brain/adapters.js.map +1 -1
  26. package/dist/lib/brain/content.d.ts +3 -1
  27. package/dist/lib/brain/content.d.ts.map +1 -1
  28. package/dist/lib/brain/content.js +92 -24
  29. package/dist/lib/brain/content.js.map +1 -1
  30. package/dist/lib/brain/discovery.d.ts.map +1 -1
  31. package/dist/lib/brain/discovery.js +2 -1
  32. package/dist/lib/brain/discovery.js.map +1 -1
  33. package/dist/lib/brain/index.d.ts +1 -0
  34. package/dist/lib/brain/index.d.ts.map +1 -1
  35. package/dist/lib/brain/index.js +7 -2
  36. package/dist/lib/brain/index.js.map +1 -1
  37. package/dist/lib/brain/vision.d.ts +35 -0
  38. package/dist/lib/brain/vision.d.ts.map +1 -0
  39. package/dist/lib/brain/vision.js +65 -0
  40. package/dist/lib/brain/vision.js.map +1 -0
  41. package/dist/lib/businessScaffold.d.ts +42 -0
  42. package/dist/lib/businessScaffold.d.ts.map +1 -0
  43. package/dist/lib/businessScaffold.js +150 -0
  44. package/dist/lib/businessScaffold.js.map +1 -0
  45. package/dist/lib/codex-device-auth.d.ts +94 -0
  46. package/dist/lib/codex-device-auth.d.ts.map +1 -0
  47. package/dist/lib/codex-device-auth.js +295 -0
  48. package/dist/lib/codex-device-auth.js.map +1 -0
  49. package/dist/lib/codex-job-control-plane.d.ts +67 -0
  50. package/dist/lib/codex-job-control-plane.d.ts.map +1 -0
  51. package/dist/lib/codex-job-control-plane.js +105 -0
  52. package/dist/lib/codex-job-control-plane.js.map +1 -0
  53. package/dist/lib/codex-readonly-job.d.ts +76 -0
  54. package/dist/lib/codex-readonly-job.d.ts.map +1 -0
  55. package/dist/lib/codex-readonly-job.js +196 -0
  56. package/dist/lib/codex-readonly-job.js.map +1 -0
  57. package/dist/lib/connected-access-native.d.ts +111 -0
  58. package/dist/lib/connected-access-native.d.ts.map +1 -0
  59. package/dist/lib/connected-access-native.js +403 -0
  60. package/dist/lib/connected-access-native.js.map +1 -0
  61. package/dist/lib/connected-context.d.ts +82 -0
  62. package/dist/lib/connected-context.d.ts.map +1 -0
  63. package/dist/lib/connected-context.js +610 -0
  64. package/dist/lib/connected-context.js.map +1 -0
  65. package/dist/lib/redact.d.ts.map +1 -1
  66. package/dist/lib/redact.js +9 -1
  67. package/dist/lib/redact.js.map +1 -1
  68. package/dist/mcp/registry.d.ts +4 -1
  69. package/dist/mcp/registry.d.ts.map +1 -1
  70. package/dist/mcp/registry.js +120 -1
  71. package/dist/mcp/registry.js.map +1 -1
  72. package/dist/mcp/server.d.ts +1 -1
  73. package/dist/mcp/server.d.ts.map +1 -1
  74. package/dist/mcp/server.js +18 -9
  75. package/dist/mcp/server.js.map +1 -1
  76. package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
  77. package/package.json +1 -1
  78. package/scripts/env-vault/README.md +16 -20
  79. package/scripts/env-vault/backup.sh +22 -57
  80. package/scripts/env-vault/restore.sh +18 -96
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CODEX_LOGIN_KILL_GRACE_MS = exports.CODEX_LOGIN_TIMEOUT_MS = exports.CODEX_STATUS_TIMEOUT_MS = exports.CODEX_STATUS_MAX_OUTPUT_BYTES = exports.CODEX_DEVICE_AUTH_ARGS = exports.CODEX_STATUS_ARGS = exports.CODEX_EXECUTABLE = void 0;
37
+ exports.validateOfficialChatGPTBundle = validateOfficialChatGPTBundle;
38
+ exports.resolveTrustedCodexExecutable = resolveTrustedCodexExecutable;
39
+ exports.classifyCodexLoginStatusStreams = classifyCodexLoginStatusStreams;
40
+ exports.runCodexLoginStatus = runCodexLoginStatus;
41
+ exports.terminateCodexChild = terminateCodexChild;
42
+ exports.runCodexDeviceAuth = runCodexDeviceAuth;
43
+ exports.getCodexAuthenticationStatus = getCodexAuthenticationStatus;
44
+ exports.ensureCodexAuthentication = ensureCodexAuthentication;
45
+ const child_process_1 = require("child_process");
46
+ const fs = __importStar(require("fs"));
47
+ /**
48
+ * The ChatGPT desktop bundle supplies the supported local Codex executable on
49
+ * this macOS adapter surface. This M3 adapter accepts only the exact sealed
50
+ * macOS bundle; it intentionally does not use PATH/npm/Homebrew candidates.
51
+ */
52
+ exports.CODEX_EXECUTABLE = "/Applications/ChatGPT.app/Contents/Resources/codex";
53
+ exports.CODEX_STATUS_ARGS = ["login", "status"];
54
+ exports.CODEX_DEVICE_AUTH_ARGS = ["login", "--device-auth"];
55
+ exports.CODEX_STATUS_MAX_OUTPUT_BYTES = 1024;
56
+ exports.CODEX_STATUS_TIMEOUT_MS = 5000;
57
+ /** OpenAI's device flow has a long human approval window; leave margin. */
58
+ exports.CODEX_LOGIN_TIMEOUT_MS = 16 * 60000;
59
+ exports.CODEX_LOGIN_KILL_GRACE_MS = 3000;
60
+ const CHATGPT_BUNDLE = "/Applications/ChatGPT.app";
61
+ const CHATGPT_DESIGNATED_REQUIREMENT = 'anchor apple generic and identifier "com.openai.codex" and certificate leaf[subject.OU] = "2DC432GLL2"';
62
+ /** Validate code signature and designated OpenAI app identity; never CDHash-pin. */
63
+ function validateOfficialChatGPTBundle(bundlePath = CHATGPT_BUNDLE) {
64
+ try {
65
+ (0, child_process_1.execFileSync)("/usr/bin/codesign", ["--verify", "--deep", "--strict", "--requirement", CHATGPT_DESIGNATED_REQUIREMENT, bundlePath], {
66
+ stdio: "ignore", timeout: 5000,
67
+ });
68
+ return true;
69
+ }
70
+ catch {
71
+ return false;
72
+ }
73
+ }
74
+ /**
75
+ * Resolve only the exact sealed ChatGPT bundle resource after validating the
76
+ * app's Apple/OpenAI designated requirement. No PATH, alias, config value, or
77
+ * caller-selected executable is part of this auth boundary.
78
+ */
79
+ function resolveTrustedCodexExecutable(deps = {}) {
80
+ if (!(deps.validateBundle ?? validateOfficialChatGPTBundle)(CHATGPT_BUNDLE))
81
+ return null;
82
+ const realpath = deps.realpathSync ?? fs.realpathSync;
83
+ const lstat = deps.lstatSync ?? fs.lstatSync;
84
+ try {
85
+ const resolved = realpath(exports.CODEX_EXECUTABLE);
86
+ if (resolved !== exports.CODEX_EXECUTABLE)
87
+ return null;
88
+ const entry = lstat(resolved);
89
+ if (!entry.isFile() || entry.isSymbolicLink() || (entry.mode & 0o022) !== 0 || (entry.mode & 0o111) === 0)
90
+ return null;
91
+ return resolved;
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ }
97
+ function sanitizedCodexEnvironment() {
98
+ const environment = {};
99
+ for (const key of ["HOME", "PATH", "TERM"]) {
100
+ if (process.env[key])
101
+ environment[key] = process.env[key];
102
+ }
103
+ return environment;
104
+ }
105
+ function report(authenticationKind) {
106
+ return {
107
+ schemaVersion: "you-md/openai-codex-local-status/v1",
108
+ target: "openai_codex",
109
+ source: "codex_login_status",
110
+ authenticationKind,
111
+ authenticated: authenticationKind === "chatgpt" || authenticationKind === "api_key",
112
+ providerCredentialsRead: false,
113
+ deviceCodeCaptured: false,
114
+ };
115
+ }
116
+ /**
117
+ * Intentionally exact matching. Never relay status output: if a future CLI
118
+ * prints a device URL, token, path, or arbitrary diagnostic, it becomes the
119
+ * safe `unknown` enum rather than data that You.md retains or uploads.
120
+ */
121
+ function classifyCodexLoginStatusStreams(stdout, stderr, exitCode) {
122
+ if (stdout.length + stderr.length > exports.CODEX_STATUS_MAX_OUTPUT_BYTES)
123
+ return report("unknown");
124
+ if (exitCode !== 0)
125
+ return report("unknown");
126
+ // Codex versions have emitted its short status line on either stream. One
127
+ // exact non-empty stream is safe; mixed output is diagnostic ambiguity.
128
+ if ((stdout.length === 0) === (stderr.length === 0))
129
+ return report("unknown");
130
+ const value = (stdout.length > 0 ? stdout : stderr).toString("utf8");
131
+ if (!/^[^\r\n]+(?:\r?\n)?$/.test(value))
132
+ return report("unknown");
133
+ const recognized = {
134
+ "Logged in using ChatGPT": "chatgpt",
135
+ "Logged in using an API key": "api_key",
136
+ "Logged in using API key": "api_key",
137
+ "Not logged in": "signed_out",
138
+ };
139
+ return report(recognized[value.trim()] ?? "unknown");
140
+ }
141
+ /** Capture bounded status streams, classify them, then discard their raw bytes. */
142
+ function runCodexLoginStatus(request) {
143
+ return new Promise((resolve) => {
144
+ const child = (0, child_process_1.spawn)(request.executable, [...request.argv], {
145
+ shell: request.shell,
146
+ stdio: [...request.stdio],
147
+ windowsHide: true,
148
+ env: sanitizedCodexEnvironment(),
149
+ });
150
+ const stdoutChunks = [];
151
+ const stderrChunks = [];
152
+ let bytes = 0;
153
+ let settled = false;
154
+ let stopping = false;
155
+ let pendingStopResult;
156
+ let forceKillTimer;
157
+ const finish = (result) => {
158
+ if (settled)
159
+ return;
160
+ settled = true;
161
+ clearTimeout(timer);
162
+ if (forceKillTimer)
163
+ clearTimeout(forceKillTimer);
164
+ resolve(result);
165
+ };
166
+ const requestStop = (result) => {
167
+ if (stopping)
168
+ return;
169
+ stopping = true;
170
+ pendingStopResult = result;
171
+ forceKillTimer = terminateCodexChild(child, () => finish(result));
172
+ };
173
+ const timer = setTimeout(() => {
174
+ requestStop({ exitCode: null, stdout: Buffer.alloc(0), stderr: Buffer.alloc(0), timedOut: true });
175
+ }, request.timeoutMs);
176
+ child.once("error", () => finish({ exitCode: null, stdout: Buffer.alloc(0), stderr: Buffer.alloc(0) }));
177
+ child.stdout?.on("data", (chunk) => {
178
+ bytes += chunk.length;
179
+ if (bytes > exports.CODEX_STATUS_MAX_OUTPUT_BYTES) {
180
+ return requestStop({ exitCode: null, stdout: Buffer.alloc(exports.CODEX_STATUS_MAX_OUTPUT_BYTES + 1), stderr: Buffer.alloc(0) });
181
+ }
182
+ stdoutChunks.push(chunk);
183
+ });
184
+ child.stderr?.on("data", (chunk) => {
185
+ bytes += chunk.length;
186
+ if (bytes > exports.CODEX_STATUS_MAX_OUTPUT_BYTES) {
187
+ return requestStop({ exitCode: null, stdout: Buffer.alloc(0), stderr: Buffer.alloc(exports.CODEX_STATUS_MAX_OUTPUT_BYTES + 1) });
188
+ }
189
+ stderrChunks.push(chunk);
190
+ });
191
+ child.once("close", (exitCode) => finish(pendingStopResult ?? {
192
+ exitCode, stdout: Buffer.concat(stdoutChunks), stderr: Buffer.concat(stderrChunks),
193
+ }));
194
+ });
195
+ }
196
+ /**
197
+ * Start an official interactive device-login flow without intercepting either
198
+ * stdout or stderr. The device code and callback URL never enter this process.
199
+ */
200
+ /** Send TERM first and force KILL only if a local child resists. */
201
+ function terminateCodexChild(child, complete, graceMs = exports.CODEX_LOGIN_KILL_GRACE_MS) {
202
+ child.kill("SIGTERM");
203
+ return setTimeout(() => {
204
+ child.kill("SIGKILL");
205
+ complete();
206
+ }, graceMs);
207
+ }
208
+ function runCodexDeviceAuth(request) {
209
+ return new Promise((resolve) => {
210
+ const child = (0, child_process_1.spawn)(request.executable, [...request.argv], {
211
+ shell: request.shell,
212
+ stdio: request.stdio,
213
+ windowsHide: true,
214
+ env: sanitizedCodexEnvironment(),
215
+ });
216
+ let settled = false;
217
+ let stopping = false;
218
+ let pendingStopResult;
219
+ let forceKillTimer;
220
+ const signals = ["SIGINT", "SIGTERM"];
221
+ const cleanup = () => signals.forEach((signal) => process.removeListener(signal, cancel));
222
+ const finish = (result) => {
223
+ if (settled)
224
+ return;
225
+ settled = true;
226
+ clearTimeout(timer);
227
+ if (forceKillTimer)
228
+ clearTimeout(forceKillTimer);
229
+ cleanup();
230
+ resolve(result);
231
+ };
232
+ const requestStop = (result) => {
233
+ if (stopping)
234
+ return;
235
+ stopping = true;
236
+ pendingStopResult = result;
237
+ forceKillTimer = terminateCodexChild(child, () => finish(result));
238
+ };
239
+ const cancel = () => {
240
+ requestStop({ exitCode: null, cancelled: true });
241
+ };
242
+ const timer = setTimeout(() => {
243
+ requestStop({ exitCode: null, timedOut: true });
244
+ }, request.timeoutMs);
245
+ signals.forEach((signal) => process.once(signal, cancel));
246
+ child.once("error", () => finish({ exitCode: null }));
247
+ child.once("close", (exitCode) => finish(pendingStopResult ?? { exitCode }));
248
+ });
249
+ }
250
+ function statusRequest(executable) {
251
+ return { executable, argv: exports.CODEX_STATUS_ARGS, shell: false, stdio: ["ignore", "pipe", "pipe"], timeoutMs: exports.CODEX_STATUS_TIMEOUT_MS };
252
+ }
253
+ function loginRequest(executable) {
254
+ return { executable, argv: exports.CODEX_DEVICE_AUTH_ARGS, shell: false, stdio: "inherit", timeoutMs: exports.CODEX_LOGIN_TIMEOUT_MS };
255
+ }
256
+ async function getCodexAuthenticationStatus(deps = {}) {
257
+ const executable = (deps.resolveExecutable ?? resolveTrustedCodexExecutable)();
258
+ if (!executable)
259
+ return report("unavailable");
260
+ try {
261
+ const result = await (deps.runStatus ?? runCodexLoginStatus)(statusRequest(executable));
262
+ return result.timedOut ? report("unavailable") : classifyCodexLoginStatusStreams(result.stdout, result.stderr ?? Buffer.alloc(0), result.exitCode);
263
+ }
264
+ catch {
265
+ return report("unavailable");
266
+ }
267
+ }
268
+ async function ensureCodexAuthentication(deps = {}) {
269
+ const before = await getCodexAuthenticationStatus(deps);
270
+ if (before.authenticationKind === "chatgpt")
271
+ return { status: before, loginChildRan: false, providerStateChanged: false };
272
+ if (before.authenticationKind === "api_key")
273
+ throw new Error("codex_chatgpt_sign_in_required");
274
+ const executable = (deps.resolveExecutable ?? resolveTrustedCodexExecutable)();
275
+ if (!executable)
276
+ throw new Error("codex_login_unavailable");
277
+ let login;
278
+ try {
279
+ login = await (deps.runLogin ?? runCodexDeviceAuth)(loginRequest(executable));
280
+ }
281
+ catch {
282
+ throw new Error("codex_login_unavailable");
283
+ }
284
+ if (login.cancelled)
285
+ throw new Error("codex_login_cancelled");
286
+ if (login.timedOut)
287
+ throw new Error("codex_login_timeout");
288
+ if (login.exitCode !== 0)
289
+ throw new Error("codex_login_failed");
290
+ const after = await getCodexAuthenticationStatus(deps);
291
+ if (after.authenticationKind !== "chatgpt")
292
+ throw new Error("codex_login_status_unrecognized");
293
+ return { status: after, loginChildRan: true, providerStateChanged: true };
294
+ }
295
+ //# sourceMappingURL=codex-device-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-device-auth.js","sourceRoot":"","sources":["../../src/lib/codex-device-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { type DeclaredInput } from "./codex-readonly-job";
2
+ import { type NativeHostDeps } from "./connected-access-native";
3
+ export declare const CODEX_JOB_API_ORIGIN = "https://kindly-cassowary-600.convex.site";
4
+ export type JobControlDeps = {
5
+ fetch: typeof fetch;
6
+ openApproval: (url: string) => void;
7
+ sleep: (ms: number) => Promise<void>;
8
+ token: () => string | undefined;
9
+ };
10
+ export type PreparedClaim = {
11
+ claimRef: string;
12
+ keyId: string;
13
+ canonicalization: "RFC8785";
14
+ signingAlgorithm: "Ed25519";
15
+ preparedCanonicalPayload: string;
16
+ payloadHash: string;
17
+ expiresAt: string;
18
+ };
19
+ export type Job = {
20
+ jobId: string;
21
+ status: string;
22
+ hostedApprovalUrl?: string;
23
+ preparedClaim?: PreparedClaim | null;
24
+ };
25
+ /** Bearer control plane deliberately has no approve method: approval is owner-session UI only. */
26
+ export declare function prepareAndAwaitOwnerApproval(input: {
27
+ keyId: string;
28
+ workspaceRef: string;
29
+ deviceId: string;
30
+ files: DeclaredInput[];
31
+ deadlineSeconds: number;
32
+ }, deps: JobControlDeps, options?: {
33
+ waitForApproval?: boolean;
34
+ }): Promise<Job>;
35
+ export type JobLifecycleDeps = JobControlDeps & {
36
+ native?: NativeHostDeps;
37
+ publicKey: string;
38
+ run: (claim: Record<string, unknown>, grant: Record<string, unknown>) => Promise<{
39
+ outcome: "succeeded" | "failed";
40
+ resultDigest: string;
41
+ contextLoaded: boolean;
42
+ modelStarted: boolean;
43
+ }>;
44
+ signClaim?: (input: {
45
+ approvedCanonicalClaim: string;
46
+ expiresAt: number;
47
+ expectedPublicKey: string;
48
+ }) => Promise<{
49
+ signature: string;
50
+ payloadHash: string;
51
+ }>;
52
+ signStep?: (input: {
53
+ approvedCanonicalStep: string;
54
+ expiresAt: number;
55
+ expectedPublicKey: string;
56
+ }) => Promise<{
57
+ signature: string;
58
+ payloadHash: string;
59
+ }>;
60
+ };
61
+ /** Full fake-injectable lifecycle; no bearer approve endpoint exists or is callable here. */
62
+ export declare function claimAndRunApprovedLocalCodexJob(job: Job, deps: JobLifecycleDeps): Promise<{
63
+ outcome: "succeeded" | "failed";
64
+ contextLoaded: boolean;
65
+ modelStarted: boolean;
66
+ }>;
67
+ //# sourceMappingURL=codex-job-control-plane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-job-control-plane.d.ts","sourceRoot":"","sources":["../../src/lib/codex-job-control-plane.ts"],"names":[],"mappings":"AACA,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC7F,OAAO,EAAiE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE/H,eAAO,MAAM,oBAAoB,6CAA6C,CAAC;AAC/E,MAAM,MAAM,cAAc,GAAG;IAAE,KAAK,EAAE,OAAO,KAAK,CAAC;IAAC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AACjK,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,SAAS,CAAC;IAAC,gBAAgB,EAAE,SAAS,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACpM,MAAM,MAAM,GAAG,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;CAAE,CAAC;AAMtH,kGAAkG;AAClG,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CASrP;AAID,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG;IAC9C,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3L,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,sBAAsB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7J,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,qBAAqB,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5J,CAAC;AA0BF,6FAA6F;AAC7F,wBAAsB,gCAAgC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAAC,CAepL"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CODEX_JOB_API_ORIGIN = void 0;
4
+ exports.prepareAndAwaitOwnerApproval = prepareAndAwaitOwnerApproval;
5
+ exports.claimAndRunApprovedLocalCodexJob = claimAndRunApprovedLocalCodexJob;
6
+ const crypto_1 = require("crypto");
7
+ const codex_readonly_job_1 = require("./codex-readonly-job");
8
+ const connected_access_native_1 = require("./connected-access-native");
9
+ exports.CODEX_JOB_API_ORIGIN = "https://kindly-cassowary-600.convex.site";
10
+ function hash(value) { return `sha256:${(0, crypto_1.createHash)("sha256").update(value).digest("hex")}`; }
11
+ function canonical(value) { if (value === null || typeof value === "boolean" || typeof value === "number" || typeof value === "string")
12
+ return JSON.stringify(value); if (Array.isArray(value))
13
+ return `[${value.map(canonical).join(",")}]`; const record = value; return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonical(record[key])}`).join(",")}}`; }
14
+ function b64(value) { return Buffer.from(canonical(value)).toString("base64url"); }
15
+ async function api(deps, path, init) { const token = deps.token(); if (!token)
16
+ throw new Error("authentication_required"); const response = await deps.fetch(`${exports.CODEX_JOB_API_ORIGIN}${path}`, { ...init, headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json", Accept: "application/json", ...(init?.headers ?? {}) } }); if (!response.ok)
17
+ throw new Error(`job_api_failed:${response.status}`); return response.json(); }
18
+ /** Bearer control plane deliberately has no approve method: approval is owner-session UI only. */
19
+ async function prepareAndAwaitOwnerApproval(input, deps, options = {}) {
20
+ const draft = { keyId: input.keyId, workspaceRef: input.workspaceRef, deviceId: input.deviceId, contextDigest: codex_readonly_job_1.CODEX_READONLY_JOB_CONTEXT_DIGEST, fileHashes: input.files, deadlineSeconds: input.deadlineSeconds };
21
+ const prepared = await api(deps, "/api/v1/me/agent-jobs/prepare", { method: "POST", body: JSON.stringify({ ...draft, idempotencyKey: `idem:${hash(canonical(draft)).slice(7, 31)}` }) });
22
+ const expectedApprovalUrl = `https://www.you.md/local-agent-jobs/${prepared.job.jobId}`;
23
+ if (prepared.job.hostedApprovalUrl !== expectedApprovalUrl)
24
+ throw new Error("job_approval_url_invalid");
25
+ if (options.waitForApproval === false)
26
+ return prepared.job;
27
+ deps.openApproval(expectedApprovalUrl);
28
+ for (let attempt = 0; attempt < 60; attempt += 1) {
29
+ const current = await api(deps, `/api/v1/me/agent-jobs/${prepared.job.jobId}`);
30
+ if (current.job.preparedClaim) {
31
+ if (current.job.preparedClaim.keyId !== input.keyId)
32
+ throw new Error("job_key_binding_mismatch");
33
+ return current.job;
34
+ }
35
+ await deps.sleep(1000);
36
+ }
37
+ throw new Error("job_approval_timeout");
38
+ }
39
+ const CLAIM_KEYS = ["schemaVersion", "jobId", "jobDigest", "approvalNonce", "approvalRef", "idempotencyKey", "keyId", "keyGeneration", "applicationId", "applicationGeneration", "deviceId", "ownerRef", "workspaceRef", "tenantRef", "projectRef", "runtimeId", "audience", "target", "action", "contextRef", "contextDigest", "fileHashes", "modelClass", "executionProfile", "networkPolicy", "writePolicy", "authorizationEvidence", "deadline", "htu", "htm", "iat", "jti"];
40
+ function decodeApprovedClaim(job) {
41
+ const claim = job.preparedClaim;
42
+ if (!claim || claim.canonicalization !== "RFC8785" || claim.signingAlgorithm !== "Ed25519" || !/^dak_[A-Za-z0-9]{12,64}$/.test(claim.keyId) || !/^sha256:[a-f0-9]{64}$/.test(claim.payloadHash) || Date.parse(claim.expiresAt) <= Date.now())
43
+ throw new Error("job_prepared_claim_invalid");
44
+ const bytes = Buffer.from(claim.preparedCanonicalPayload, "base64url");
45
+ if (bytes.length === 0 || bytes.length > 8192 || hash(bytes) !== claim.payloadHash)
46
+ throw new Error("job_prepared_claim_invalid");
47
+ let parsed;
48
+ try {
49
+ parsed = JSON.parse(bytes.toString("utf8"));
50
+ }
51
+ catch {
52
+ throw new Error("job_prepared_claim_invalid");
53
+ }
54
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
55
+ throw new Error("job_prepared_claim_invalid");
56
+ const payload = parsed;
57
+ if (Object.keys(payload).length !== CLAIM_KEYS.length || CLAIM_KEYS.some((key) => !(key in payload)) || payload.jobId !== job.jobId || payload.keyId !== claim.keyId || payload.contextDigest !== codex_readonly_job_1.CODEX_READONLY_JOB_CONTEXT_DIGEST || payload.applicationId !== "app:youmd-local-codex-adapter" || payload.tenantRef !== "personal" || payload.projectRef !== "project:youmd-owner-context" || payload.runtimeId !== "runtime:youmd-local-codex" || payload.target !== "openai_codex" || payload.action !== "read_only_audit" || payload.audience !== "youmd:personal" || payload.htm !== "POST" || payload.htu !== `${exports.CODEX_JOB_API_ORIGIN}/api/v1/me/agent-jobs/${job.jobId}/claim`)
58
+ throw new Error("job_prepared_claim_invalid");
59
+ return { claim, payload };
60
+ }
61
+ function bindGrant(payload, grant) {
62
+ if (!grant || grant.jobId !== payload.jobId || grant.jobDigest !== payload.jobDigest || grant.keyId !== payload.keyId || grant.keyGeneration !== payload.keyGeneration || grant.applicationId !== payload.applicationId || grant.applicationGeneration !== payload.applicationGeneration || grant.contextDigest !== payload.contextDigest || grant.deadline !== payload.deadline || grant.approvalState !== "approved" || !grant.approvalRef || !["claimed", "running", "approved"].includes(grant.status))
63
+ throw new Error("job_execution_grant_invalid");
64
+ }
65
+ function step(payload, type, extra) {
66
+ const iat = Date.now();
67
+ const jti = `jti:${hash(`${payload.jobId}:${type}:${iat}:${canonical(extra)}`).slice(7, 31)}`;
68
+ const { schemaVersion: _schemaVersion, approvalNonce: _approvalNonce, ...base } = payload;
69
+ return { schemaVersion: "you-md/connected-agent-access/local-codex-job-step/v1", type, ...base, htu: `${exports.CODEX_JOB_API_ORIGIN}/api/v1/me/agent-jobs/${payload.jobId}/${type === "event" ? "events" : type}`, htm: "POST", iat, jti, ...extra };
70
+ }
71
+ async function signedPost(deps, payload, expiresAt, type, extra) {
72
+ const signedPayload = step(payload, type, extra);
73
+ const signer = deps.signStep ?? ((input) => (0, connected_access_native_1.signApprovedLocalCodexJobStep)(input, undefined, deps.native));
74
+ const signature = await signer({ approvedCanonicalStep: b64(signedPayload), expiresAt, expectedPublicKey: deps.publicKey });
75
+ const body = { keyId: payload.keyId, iat: signedPayload.iat, jti: signedPayload.jti, signature: signature.signature, ...extra };
76
+ return api(deps, `/api/v1/me/agent-jobs/${payload.jobId}/${type === "event" ? "events" : type}`, { method: "POST", body: JSON.stringify(body) });
77
+ }
78
+ /** Full fake-injectable lifecycle; no bearer approve endpoint exists or is callable here. */
79
+ async function claimAndRunApprovedLocalCodexJob(job, deps) {
80
+ const { claim, payload } = decodeApprovedClaim(job);
81
+ const expiresAt = Date.parse(claim.expiresAt);
82
+ const signClaim = deps.signClaim ?? ((input) => (0, connected_access_native_1.signApprovedLocalCodexJobClaim)(input, undefined, deps.native));
83
+ const signed = await signClaim({ approvedCanonicalClaim: claim.preparedCanonicalPayload, expiresAt, expectedPublicKey: deps.publicKey });
84
+ if (signed.payloadHash !== claim.payloadHash)
85
+ throw new Error("job_prepared_claim_invalid");
86
+ const claimed = await api(deps, `/api/v1/me/agent-jobs/${job.jobId}/claim`, { method: "POST", body: JSON.stringify({ claimRef: claim.claimRef, signature: signed.signature }) });
87
+ bindGrant(payload, claimed.executionGrant);
88
+ await signedPost(deps, payload, expiresAt, "start", {});
89
+ let result;
90
+ try {
91
+ result = await deps.run(payload, claimed.executionGrant);
92
+ }
93
+ catch {
94
+ result = { outcome: "failed", resultDigest: hash("runner_failed"), contextLoaded: false, modelStarted: false };
95
+ }
96
+ if (result.contextLoaded)
97
+ await signedPost(deps, payload, expiresAt, "event", { eventId: `event:${hash("context").slice(7, 23)}`, eventType: "context_loaded", sequence: 1, payloadHash: hash("context_loaded") });
98
+ if (result.modelStarted)
99
+ await signedPost(deps, payload, expiresAt, "event", { eventId: `event:${hash("model").slice(7, 23)}`, eventType: "model_started", sequence: 2, payloadHash: hash("model_started") });
100
+ if (result.outcome === "succeeded" && !result.modelStarted)
101
+ result = { ...result, outcome: "failed", resultDigest: hash("runner_never_started") };
102
+ await signedPost(deps, payload, expiresAt, "complete", { outcome: result.outcome, resultDigest: result.resultDigest });
103
+ return { outcome: result.outcome, contextLoaded: result.contextLoaded, modelStarted: result.modelStarted };
104
+ }
105
+ //# sourceMappingURL=codex-job-control-plane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-job-control-plane.js","sourceRoot":"","sources":["../../src/lib/codex-job-control-plane.ts"],"names":[],"mappings":";;;AAcA,oEASC;AAqCD,4EAeC;AA3ED,mCAAoC;AACpC,6DAA6F;AAC7F,uEAA+H;AAElH,QAAA,oBAAoB,GAAG,0CAA0C,CAAC;AAI/E,SAAS,IAAI,CAAC,KAAsB,IAAY,OAAO,UAAU,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACtH,SAAS,SAAS,CAAC,KAAc,IAAY,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;IAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM,GAAG,KAAgC,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACta,SAAS,GAAG,CAAC,KAAc,IAAY,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpG,KAAK,UAAU,GAAG,CAAI,IAAoB,EAAE,IAAY,EAAE,IAAkB,IAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;IAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,4BAAoB,GAAG,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;IAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC,CAAC,CAAC;AAE1f,kGAAkG;AAC3F,KAAK,UAAU,4BAA4B,CAAC,KAAiH,EAAE,IAAoB,EAAE,UAAyC,EAAE;IACrO,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,sDAAiC,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC;IACpN,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAe,IAAI,EAAE,+BAA+B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACvM,MAAM,mBAAmB,GAAG,uCAAuC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACxF,IAAI,QAAQ,CAAC,GAAG,CAAC,iBAAiB,KAAK,mBAAmB;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACxG,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC;IAC3D,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;IACvC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;QAAC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAe,IAAI,EAAE,yBAAyB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAAC,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAAC,OAAO,OAAO,CAAC,GAAG,CAAC;QAAC,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAK,CAAC,CAAC;IAAC,CAAC;IACrU,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC1C,CAAC;AAWD,MAAM,UAAU,GAAG,CAAC,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,uBAAuB,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACjd,SAAS,mBAAmB,CAAC,GAAQ;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC;IAChC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC5R,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC;IAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC1M,IAAI,MAAe,CAAC;IAAC,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAAC,CAAC;IAClI,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAAC,MAAM,OAAO,GAAG,MAAsB,CAAC;IAC1J,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,aAAa,KAAK,sDAAiC,IAAI,OAAO,CAAC,aAAa,KAAK,+BAA+B,IAAI,OAAO,CAAC,SAAS,KAAK,UAAU,IAAI,OAAO,CAAC,UAAU,KAAK,6BAA6B,IAAI,OAAO,CAAC,SAAS,KAAK,2BAA2B,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,OAAO,CAAC,MAAM,KAAK,iBAAiB,IAAI,OAAO,CAAC,QAAQ,KAAK,gBAAgB,IAAI,OAAO,CAAC,GAAG,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,4BAAoB,yBAAyB,GAAG,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtsB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AACD,SAAS,SAAS,CAAC,OAAqB,EAAE,KAAkB;IAC1D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,qBAAqB,KAAK,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,aAAa,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC7hB,CAAC;AACD,SAAS,IAAI,CAAC,OAAqB,EAAE,IAAoC,EAAE,KAA8B;IACvG,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAAC,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACtH,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC1F,OAAO,EAAE,aAAa,EAAE,uDAAuD,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,4BAAoB,yBAAyB,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;AAChP,CAAC;AACD,KAAK,UAAU,UAAU,CAAC,IAAsB,EAAE,OAAqB,EAAE,SAAiB,EAAE,IAAoC,EAAE,KAA8B;IAC9J,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAAC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,uDAA6B,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5J,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,EAAE,qBAAqB,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5H,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC;IAChI,OAAO,GAAG,CAAC,IAAI,EAAE,yBAAyB,OAAO,CAAC,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnJ,CAAC;AAED,6FAA6F;AACtF,KAAK,UAAU,gCAAgC,CAAC,GAAQ,EAAE,IAAsB;IACrF,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACnG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,wDAA8B,EAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/G,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,sBAAsB,EAAE,KAAK,CAAC,wBAAwB,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACzI,IAAI,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,MAAM,GAAG,CAAkC,IAAI,EAAE,yBAAyB,GAAG,CAAC,KAAK,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAClN,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3C,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,MAAgH,CAAC;IACrH,IAAI,CAAC;QAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,MAAM,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAAC,CAAC;IAC3L,IAAI,MAAM,CAAC,aAAa;QAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACnN,IAAI,MAAM,CAAC,YAAY;QAAE,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;IAC9M,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY;QAAE,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;IAClJ,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACvH,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,76 @@
1
+ import * as fs from "fs";
2
+ /** Local-only M3.5 boundary. A receipt is evidence, never a runnable grant. */
3
+ export declare const CODEX_READONLY_JOB_MAX_PROMPT_BYTES: number;
4
+ export declare const CODEX_READONLY_JOB_MAX_EVENT_BYTES: number;
5
+ export declare const CODEX_READONLY_JOB_MAX_TOTAL_OUTPUT_BYTES: number;
6
+ export declare const CODEX_READONLY_JOB_TIMEOUT_MS: number;
7
+ export declare const CODEX_READONLY_JOB_KILL_GRACE_MS = 3000;
8
+ export declare const CODEX_READONLY_JOB_INSTRUCTION = "Audit the declared You.md owner context snapshot for internal inconsistencies, stale statements, missing provenance, and actionable next steps. Do not modify files. Do not use external tools or network tools. Return a concise findings summary.";
9
+ export declare const CODEX_READONLY_JOB_CONTEXT_DIGEST = "sha256:4f5580463381df28be0ae267baa874c39ee5abee03096998803996df8440cf85";
10
+ export type DeclaredInput = {
11
+ path: string;
12
+ digest: string;
13
+ };
14
+ export type ApprovedLocalCodexJob = Record<string, unknown> & {
15
+ jobId: string;
16
+ jobDigest: string;
17
+ deviceId: string;
18
+ applicationId: "app:youmd-local-codex-adapter";
19
+ audience: string;
20
+ contextDigest: string;
21
+ deadline: string;
22
+ approvalState: "approved";
23
+ approvalRef: string;
24
+ approvalExpiresAt: string;
25
+ keyId: string;
26
+ keyGeneration: number;
27
+ applicationGeneration: number;
28
+ executionProfile: Record<string, unknown>;
29
+ networkPolicy: Record<string, unknown>;
30
+ writePolicy: Record<string, unknown>;
31
+ authorizationEvidence: Record<string, unknown>;
32
+ fileHashes: DeclaredInput[];
33
+ };
34
+ export type ReadonlyJobEvent = {
35
+ type: "started" | "event" | "completed" | "cancelled" | "failed";
36
+ jobId: string;
37
+ data?: unknown;
38
+ };
39
+ export type CodexJobRunRequest = {
40
+ executable: string;
41
+ argv: readonly string[];
42
+ cwd: string;
43
+ shell: false;
44
+ stdio: ["pipe", "pipe", "pipe"];
45
+ stdin: Buffer;
46
+ timeoutMs: number;
47
+ env: NodeJS.ProcessEnv;
48
+ signal?: AbortSignal;
49
+ };
50
+ export type CodexJobRunner = (request: CodexJobRunRequest, onEvent: (event: ReadonlyJobEvent) => void) => Promise<{
51
+ exitCode: number | null;
52
+ cancelled?: boolean;
53
+ timedOut?: boolean;
54
+ resultHash?: string;
55
+ modelStarted?: boolean;
56
+ }>;
57
+ export type ReadonlyJobDeps = {
58
+ resolveExecutable?: () => string | null;
59
+ run?: CodexJobRunner;
60
+ mkdtempSync?: typeof fs.mkdtempSync;
61
+ rmSync?: typeof fs.rmSync;
62
+ };
63
+ /** Strictly proves this is a separately approved, no-write/local-Codex grant. */
64
+ export declare function validateApprovedReadonlyLocalCodexJob(job: ApprovedLocalCodexJob, now?: number): void;
65
+ /** Copies only exact allowlisted, hash-verified file bytes into a private snapshot. */
66
+ export declare function createDeclaredInputSnapshot(sourceRoot: string, files: readonly DeclaredInput[], deps?: Pick<ReadonlyJobDeps, "mkdtempSync">): string;
67
+ export declare function buildReadonlyCodexJobRequest(executable: string, snapshot: string, deadline: number): CodexJobRunRequest;
68
+ export declare const runReadonlyCodexJob: CodexJobRunner;
69
+ /** Fake-child friendly adapter. It never invokes the provider until an approved grant exists. */
70
+ export declare function executeApprovedReadonlyLocalCodexJob(job: ApprovedLocalCodexJob, sourceRoot: string, onEvent: (event: ReadonlyJobEvent) => void, deps?: ReadonlyJobDeps, signal?: AbortSignal): Promise<{
71
+ status: "completed" | "cancelled" | "failed";
72
+ resultHash: string;
73
+ contextLoaded: true;
74
+ modelStarted: boolean;
75
+ }>;
76
+ //# sourceMappingURL=codex-readonly-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-readonly-job.d.ts","sourceRoot":"","sources":["../../src/lib/codex-readonly-job.ts"],"names":[],"mappings":"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"}