youmd 0.11.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.
- package/dist/commands/brain.d.ts.map +1 -1
- package/dist/commands/brain.js +77 -28
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +6 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/connect.d.ts +113 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +849 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/conversations.d.ts +5 -0
- package/dist/commands/conversations.d.ts.map +1 -0
- package/dist/commands/conversations.js +116 -0
- package/dist/commands/conversations.js.map +1 -0
- package/dist/commands/founder.d.ts +16 -0
- package/dist/commands/founder.d.ts.map +1 -0
- package/dist/commands/founder.js +446 -0
- package/dist/commands/founder.js.map +1 -0
- package/dist/commands/handoff.d.ts +5 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +432 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/orchestrate.d.ts +15 -0
- package/dist/commands/orchestrate.d.ts.map +1 -1
- package/dist/commands/orchestrate.js +294 -0
- package/dist/commands/orchestrate.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +8 -1
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/reconcile.d.ts +15 -0
- package/dist/commands/reconcile.d.ts.map +1 -0
- package/dist/commands/reconcile.js +260 -0
- package/dist/commands/reconcile.js.map +1 -0
- package/dist/commands/session.d.ts +28 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +895 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +11 -0
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/tasks.d.ts +20 -0
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +90 -19
- package/dist/commands/tasks.js.map +1 -1
- package/dist/generated/capability-registry.d.ts +444 -76
- package/dist/generated/capability-registry.d.ts.map +1 -1
- package/dist/generated/capability-registry.js +497 -76
- package/dist/generated/capability-registry.js.map +1 -1
- package/dist/index.js +122 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +393 -2
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +195 -2
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/brain/adapters.d.ts +22 -1
- package/dist/lib/brain/adapters.d.ts.map +1 -1
- package/dist/lib/brain/adapters.js +184 -2
- package/dist/lib/brain/adapters.js.map +1 -1
- package/dist/lib/brain/approval-key-trust.d.ts +29 -0
- package/dist/lib/brain/approval-key-trust.d.ts.map +1 -0
- package/dist/lib/brain/approval-key-trust.js +139 -0
- package/dist/lib/brain/approval-key-trust.js.map +1 -0
- package/dist/lib/brain/content.d.ts +10 -3
- package/dist/lib/brain/content.d.ts.map +1 -1
- package/dist/lib/brain/content.js +133 -30
- package/dist/lib/brain/content.js.map +1 -1
- package/dist/lib/brain/descriptor-validator.d.ts +11 -0
- package/dist/lib/brain/descriptor-validator.d.ts.map +1 -0
- package/dist/lib/brain/descriptor-validator.js +185 -0
- package/dist/lib/brain/descriptor-validator.js.map +1 -0
- package/dist/lib/brain/discovery.d.ts.map +1 -1
- package/dist/lib/brain/discovery.js +77 -50
- package/dist/lib/brain/discovery.js.map +1 -1
- package/dist/lib/brain/index.d.ts +2 -0
- package/dist/lib/brain/index.d.ts.map +1 -1
- package/dist/lib/brain/index.js +14 -4
- package/dist/lib/brain/index.js.map +1 -1
- package/dist/lib/brain/proposal.d.ts +53 -5
- package/dist/lib/brain/proposal.d.ts.map +1 -1
- package/dist/lib/brain/proposal.js +330 -94
- package/dist/lib/brain/proposal.js.map +1 -1
- package/dist/lib/brain/safe-file.d.ts +25 -1
- package/dist/lib/brain/safe-file.d.ts.map +1 -1
- package/dist/lib/brain/safe-file.js +250 -30
- package/dist/lib/brain/safe-file.js.map +1 -1
- package/dist/lib/brain/safety.d.ts.map +1 -1
- package/dist/lib/brain/safety.js +5 -0
- package/dist/lib/brain/safety.js.map +1 -1
- package/dist/lib/brain/staged-apply.d.ts +2 -1
- package/dist/lib/brain/staged-apply.d.ts.map +1 -1
- package/dist/lib/brain/staged-apply.js +6 -3
- package/dist/lib/brain/staged-apply.js.map +1 -1
- package/dist/lib/brain/store.d.ts +3 -0
- package/dist/lib/brain/store.d.ts.map +1 -1
- package/dist/lib/brain/store.js +68 -0
- package/dist/lib/brain/store.js.map +1 -1
- package/dist/lib/brain/sync.d.ts +48 -0
- package/dist/lib/brain/sync.d.ts.map +1 -1
- package/dist/lib/brain/sync.js +102 -0
- package/dist/lib/brain/sync.js.map +1 -1
- package/dist/lib/brain/types.d.ts +23 -0
- package/dist/lib/brain/types.d.ts.map +1 -1
- package/dist/lib/brain/vision.d.ts +35 -0
- package/dist/lib/brain/vision.d.ts.map +1 -0
- package/dist/lib/brain/vision.js +65 -0
- package/dist/lib/brain/vision.js.map +1 -0
- package/dist/lib/businessScaffold.d.ts +42 -0
- package/dist/lib/businessScaffold.d.ts.map +1 -0
- package/dist/lib/businessScaffold.js +150 -0
- package/dist/lib/businessScaffold.js.map +1 -0
- package/dist/lib/codex-device-auth.d.ts +94 -0
- package/dist/lib/codex-device-auth.d.ts.map +1 -0
- package/dist/lib/codex-device-auth.js +295 -0
- package/dist/lib/codex-device-auth.js.map +1 -0
- package/dist/lib/codex-job-control-plane.d.ts +67 -0
- package/dist/lib/codex-job-control-plane.d.ts.map +1 -0
- package/dist/lib/codex-job-control-plane.js +105 -0
- package/dist/lib/codex-job-control-plane.js.map +1 -0
- package/dist/lib/codex-readonly-job.d.ts +76 -0
- package/dist/lib/codex-readonly-job.d.ts.map +1 -0
- package/dist/lib/codex-readonly-job.js +196 -0
- package/dist/lib/codex-readonly-job.js.map +1 -0
- package/dist/lib/config.d.ts +7 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +3 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/connected-access-native.d.ts +111 -0
- package/dist/lib/connected-access-native.d.ts.map +1 -0
- package/dist/lib/connected-access-native.js +403 -0
- package/dist/lib/connected-access-native.js.map +1 -0
- package/dist/lib/connected-context.d.ts +82 -0
- package/dist/lib/connected-context.d.ts.map +1 -0
- package/dist/lib/connected-context.js +610 -0
- package/dist/lib/connected-context.js.map +1 -0
- package/dist/lib/goalRegistryFile.d.ts +169 -0
- package/dist/lib/goalRegistryFile.d.ts.map +1 -0
- package/dist/lib/goalRegistryFile.js +518 -0
- package/dist/lib/goalRegistryFile.js.map +1 -0
- package/dist/lib/goalsFile.d.ts +101 -0
- package/dist/lib/goalsFile.d.ts.map +1 -0
- package/dist/lib/goalsFile.js +413 -0
- package/dist/lib/goalsFile.js.map +1 -0
- package/dist/lib/handoff.d.ts +170 -0
- package/dist/lib/handoff.d.ts.map +1 -0
- package/dist/lib/handoff.js +316 -0
- package/dist/lib/handoff.js.map +1 -0
- package/dist/lib/machine-identity.d.ts +2 -0
- package/dist/lib/machine-identity.d.ts.map +1 -1
- package/dist/lib/machine-identity.js +13 -6
- package/dist/lib/machine-identity.js.map +1 -1
- package/dist/lib/onboarding.d.ts +4 -1
- package/dist/lib/onboarding.d.ts.map +1 -1
- package/dist/lib/onboarding.js +11 -3
- package/dist/lib/onboarding.js.map +1 -1
- package/dist/lib/orchestrator/loop.d.ts.map +1 -1
- package/dist/lib/orchestrator/loop.js +8 -3
- package/dist/lib/orchestrator/loop.js.map +1 -1
- package/dist/lib/orchestrator/run-journal.d.ts +68 -3
- package/dist/lib/orchestrator/run-journal.d.ts.map +1 -1
- package/dist/lib/orchestrator/run-journal.js +391 -37
- package/dist/lib/orchestrator/run-journal.js.map +1 -1
- package/dist/lib/orchestrator/supervisor.d.ts +11 -0
- package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
- package/dist/lib/orchestrator/supervisor.js +304 -116
- package/dist/lib/orchestrator/supervisor.js.map +1 -1
- package/dist/lib/orchestrator/tools.d.ts.map +1 -1
- package/dist/lib/orchestrator/tools.js +76 -3
- package/dist/lib/orchestrator/tools.js.map +1 -1
- package/dist/lib/redact.d.ts.map +1 -1
- package/dist/lib/redact.js +40 -7
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/remote-agent-event.d.ts +19 -0
- package/dist/lib/remote-agent-event.d.ts.map +1 -0
- package/dist/lib/remote-agent-event.js +85 -0
- package/dist/lib/remote-agent-event.js.map +1 -0
- package/dist/lib/remote-command.d.ts.map +1 -1
- package/dist/lib/remote-command.js +19 -0
- package/dist/lib/remote-command.js.map +1 -1
- package/dist/lib/remote-executor.d.ts +7 -1
- package/dist/lib/remote-executor.d.ts.map +1 -1
- package/dist/lib/remote-executor.js +391 -0
- package/dist/lib/remote-executor.js.map +1 -1
- package/dist/lib/sessionCheckpoint.d.ts +104 -0
- package/dist/lib/sessionCheckpoint.d.ts.map +1 -0
- package/dist/lib/sessionCheckpoint.js +191 -0
- package/dist/lib/sessionCheckpoint.js.map +1 -0
- package/dist/lib/sessionHandoff.d.ts +47 -0
- package/dist/lib/sessionHandoff.d.ts.map +1 -0
- package/dist/lib/sessionHandoff.js +305 -0
- package/dist/lib/sessionHandoff.js.map +1 -0
- package/dist/lib/stream.d.ts +3 -1
- package/dist/lib/stream.d.ts.map +1 -1
- package/dist/lib/stream.js +8 -3
- package/dist/lib/stream.js.map +1 -1
- package/dist/lib/taskLedgerProposal.d.ts +2 -2
- package/dist/lib/taskLedgerProposal.d.ts.map +1 -1
- package/dist/lib/taskLedgerProposal.js +16 -8
- package/dist/lib/taskLedgerProposal.js.map +1 -1
- package/dist/lib/tasksFile.d.ts +14 -2
- package/dist/lib/tasksFile.d.ts.map +1 -1
- package/dist/lib/tasksFile.js +39 -5
- package/dist/lib/tasksFile.js.map +1 -1
- package/dist/mcp/registry.d.ts +4 -1
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +230 -1
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +18 -9
- package/dist/mcp/server.js.map +1 -1
- package/native/prebuilds/darwin-universal/youmd_safe_open.node +0 -0
- package/package.json +4 -2
- package/scripts/env-vault/README.md +16 -20
- package/scripts/env-vault/backup.sh +22 -57
- package/scripts/env-vault/restore.sh +18 -96
- package/scripts/smoke-safe-open-node.cjs +50 -0
|
@@ -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":"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"}
|
|
@@ -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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"}
|