@alpacakit/agents 0.2.0-beta.2 → 0.2.0-beta.3
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/README.md +21 -0
- package/dist/agents/builtin.d.ts +2 -2
- package/dist/agents/builtin.d.ts.map +1 -1
- package/dist/agents/builtin.js +6 -4
- package/dist/agents/claude/cli.d.ts +133 -0
- package/dist/agents/claude/cli.d.ts.map +1 -0
- package/dist/agents/{claude-stream.js → claude/cli.js} +81 -10
- package/dist/agents/claude/host.d.ts +14 -0
- package/dist/agents/claude/host.d.ts.map +1 -0
- package/dist/agents/{claude.js → claude/host.js} +51 -174
- package/dist/agents/{claude.d.ts → claude/index.d.ts} +10 -11
- package/dist/agents/claude/index.d.ts.map +1 -0
- package/dist/agents/claude/index.js +134 -0
- package/dist/agents/{claude-session.d.ts → claude/session.d.ts} +3 -15
- package/dist/agents/claude/session.d.ts.map +1 -0
- package/dist/agents/claude/session.js +321 -0
- package/dist/agents/codex/cli.d.ts +132 -0
- package/dist/agents/codex/cli.d.ts.map +1 -0
- package/dist/agents/codex/cli.js +110 -0
- package/dist/agents/codex/host.d.ts +14 -0
- package/dist/agents/codex/host.d.ts.map +1 -0
- package/dist/agents/codex/host.js +221 -0
- package/dist/agents/codex/index.d.ts +14 -0
- package/dist/agents/codex/index.d.ts.map +1 -0
- package/dist/agents/codex/index.js +127 -0
- package/dist/agents/codex/session.d.ts +21 -0
- package/dist/agents/codex/session.d.ts.map +1 -0
- package/dist/agents/codex/session.js +390 -0
- package/dist/agents/openai-compatible/fetch-engine.d.ts.map +1 -1
- package/dist/agents/openai-compatible/fetch-engine.js +3 -2
- package/dist/agents/openai-compatible/pi/engine.js +1 -1
- package/dist/agents/openai-compatible/pi/{session.d.ts → run.d.ts} +1 -1
- package/dist/agents/openai-compatible/pi/run.d.ts.map +1 -0
- package/dist/agents/openai-compatible/pi/sandbox.d.ts.map +1 -1
- package/dist/auth/login-probe.d.ts +6 -4
- package/dist/auth/login-probe.d.ts.map +1 -1
- package/dist/auth/login-probe.js +19 -13
- package/dist/auth/material.d.ts +1 -1
- package/dist/auth/material.d.ts.map +1 -1
- package/dist/codex/app-server.d.ts.map +1 -1
- package/dist/codex/app-server.js +13 -42
- package/dist/codex/index.d.ts +1 -1
- package/dist/codex/index.d.ts.map +1 -1
- package/dist/config/agent-config-validation.d.ts +1 -1
- package/dist/config/agent-config-validation.d.ts.map +1 -1
- package/dist/config/agent-configs.d.ts.map +1 -1
- package/dist/config/agent-configs.js +3 -3
- package/dist/config/compose.d.ts.map +1 -1
- package/dist/config/config.d.ts +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/model.d.ts +0 -1
- package/dist/config/model.d.ts.map +1 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -1
- package/dist/config/store.d.ts.map +1 -1
- package/dist/config/store.js +6 -24
- package/dist/config/support.d.ts +0 -1
- package/dist/config/support.d.ts.map +1 -1
- package/dist/config/support.js +0 -9
- package/dist/core/cli-child.d.ts +56 -0
- package/dist/core/cli-child.d.ts.map +1 -0
- package/dist/core/cli-child.js +105 -0
- package/dist/core/fs.d.ts +1 -1
- package/dist/core/fs.d.ts.map +1 -1
- package/dist/core/fs.js +10 -2
- package/dist/core/node-ports.d.ts.map +1 -1
- package/dist/core/node-ports.js +1 -5
- package/dist/core/session.d.ts +4 -0
- package/dist/core/session.d.ts.map +1 -1
- package/dist/fleet/store.d.ts.map +1 -1
- package/dist/fleet/store.js +4 -3
- package/dist/host/availability.d.ts +2 -1
- package/dist/host/availability.d.ts.map +1 -1
- package/dist/host/github-dir.d.ts.map +1 -1
- package/dist/host/github-dir.js +2 -1
- package/dist/host/mcp-list.d.ts.map +1 -1
- package/dist/host/mcp-list.js +5 -6
- package/dist/host/run-command.d.ts +2 -1
- package/dist/host/run-command.d.ts.map +1 -1
- package/dist/host/run-command.js +10 -19
- package/dist/host/session-files.d.ts +2 -1
- package/dist/host/session-files.d.ts.map +1 -1
- package/dist/host/session-files.js +2 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/kernel/classify.d.ts +1 -2
- package/dist/kernel/classify.d.ts.map +1 -1
- package/dist/kernel/classify.js +1 -1
- package/dist/kernel/cli-agent.d.ts.map +1 -1
- package/dist/kernel/cli-agent.js +26 -85
- package/dist/kernel/cli-login.d.ts.map +1 -1
- package/dist/kernel/cli-login.js +9 -30
- package/dist/kernel/facets.d.ts +1 -1
- package/dist/kernel/facets.d.ts.map +1 -1
- package/dist/kernel/login.d.ts.map +1 -1
- package/dist/kernel/login.js +2 -1
- package/dist/kernel/options.d.ts +1 -1
- package/dist/kernel/options.d.ts.map +1 -1
- package/dist/kernel/run.d.ts.map +1 -1
- package/dist/kernel/run.js +2 -1
- package/dist/kernel/session.d.ts +46 -39
- package/dist/kernel/session.d.ts.map +1 -1
- package/dist/kernel/session.js +128 -69
- package/dist/testing/fake-exec.d.ts +9 -10
- package/dist/testing/fake-exec.d.ts.map +1 -1
- package/dist/testing/fake-exec.js +14 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +1 -1
- package/package.json +2 -2
- package/dist/agents/claude-session.d.ts.map +0 -1
- package/dist/agents/claude-session.js +0 -419
- package/dist/agents/claude-stream.d.ts +0 -65
- package/dist/agents/claude-stream.d.ts.map +0 -1
- package/dist/agents/claude.d.ts.map +0 -1
- package/dist/agents/codex-session.d.ts +0 -52
- package/dist/agents/codex-session.d.ts.map +0 -1
- package/dist/agents/codex-session.js +0 -495
- package/dist/agents/codex.d.ts +0 -20
- package/dist/agents/codex.d.ts.map +0 -1
- package/dist/agents/codex.js +0 -379
- package/dist/agents/openai-compatible/pi/session.d.ts.map +0 -1
- package/dist/core/process-close.d.ts +0 -11
- package/dist/core/process-close.d.ts.map +0 -1
- package/dist/core/process-close.js +0 -27
- /package/dist/agents/openai-compatible/pi/{session.js → run.js} +0 -0
package/dist/codex/app-server.js
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* because a Session's other traffic shares it.
|
|
10
10
|
*/
|
|
11
11
|
import { AsyncQueue } from "../core/async-queue.js";
|
|
12
|
-
import {
|
|
12
|
+
import { appendTail, endProcessGracefully, failureEvidence, LineBuffer, NO_FAILURE_EVIDENCE, resolveCommand, } from "../core/cli-child.js";
|
|
13
|
+
import { AGENT_ERROR_CODE, AgentError, TIMEOUT_KIND } from "../core/error.js";
|
|
13
14
|
import { readJsonRecord } from "../core/json.js";
|
|
14
15
|
import { redactSecrets } from "../core/redact.js";
|
|
15
|
-
import { endProcessGracefully } from "../core/process-close.js";
|
|
16
16
|
import { OUTPUT_CHANNEL } from "../core/values.js";
|
|
17
17
|
import { CODEX_APP_SERVER_METHOD, CODEX_APP_SERVER_RESULT_DECODERS, CODEX_MCP_STATUS_DETAIL, } from "./protocol.js";
|
|
18
18
|
export const CODEX_INCOMING_KIND = {
|
|
@@ -32,10 +32,8 @@ const DEFAULT_APP_SERVER_CLIENT_INFO = {
|
|
|
32
32
|
title: "Agents",
|
|
33
33
|
version: "0.2.0",
|
|
34
34
|
};
|
|
35
|
-
const OUTPUT_TAIL_CHARS = 2_000;
|
|
36
35
|
const MCP_PAGE_LIMIT = 500;
|
|
37
36
|
const JSON_RPC_FRAME_SEPARATOR = "\n";
|
|
38
|
-
const JSON_RPC_FRAME_BOUNDARY = /\r?\n/u;
|
|
39
37
|
const JSON_RPC_FIELD = {
|
|
40
38
|
id: "id",
|
|
41
39
|
method: "method",
|
|
@@ -77,7 +75,7 @@ class ExecCodexAppServer {
|
|
|
77
75
|
connecting = null;
|
|
78
76
|
nextId = 1;
|
|
79
77
|
stderr = "";
|
|
80
|
-
|
|
78
|
+
stdoutLines = new LineBuffer();
|
|
81
79
|
/** Set by close(); no child is spawned after it. */
|
|
82
80
|
closing = false;
|
|
83
81
|
/** Set once every stream has ended (the child exited, or close() found none). */
|
|
@@ -165,19 +163,11 @@ class ExecCodexAppServer {
|
|
|
165
163
|
if (this.closing) {
|
|
166
164
|
throw appServerClosedError();
|
|
167
165
|
}
|
|
168
|
-
const command = await this.options.exec
|
|
166
|
+
const command = await resolveCommand(this.options.exec, this.options.command, this.options.env, null);
|
|
169
167
|
if (this.closing) {
|
|
170
168
|
// close() ran while PATH was being resolved: spawning now would orphan a child.
|
|
171
169
|
throw appServerClosedError();
|
|
172
170
|
}
|
|
173
|
-
if (command === null) {
|
|
174
|
-
throw new AgentError({
|
|
175
|
-
code: AGENT_ERROR_CODE.notAvailable,
|
|
176
|
-
classification: AgentError.agentFailure(AGENT_ERROR_CODE.notAvailable),
|
|
177
|
-
message: `Command "${this.options.command}" was not found on PATH`,
|
|
178
|
-
data: { cause: NOT_AVAILABLE_CAUSE.notInstalled },
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
171
|
const process = this.options.exec.spawn({
|
|
182
172
|
command,
|
|
183
173
|
args: [...APP_SERVER_ARGS],
|
|
@@ -227,11 +217,8 @@ class ExecCodexAppServer {
|
|
|
227
217
|
this.settleExit(exit);
|
|
228
218
|
}
|
|
229
219
|
handleStdout(text) {
|
|
230
|
-
this.
|
|
231
|
-
|
|
232
|
-
this.stdoutLine = lines.pop() ?? "";
|
|
233
|
-
for (const line of lines) {
|
|
234
|
-
const record = readJsonRecord(line.trim());
|
|
220
|
+
for (const line of this.stdoutLines.push(text)) {
|
|
221
|
+
const record = readJsonRecord(line);
|
|
235
222
|
if (record === null) {
|
|
236
223
|
continue;
|
|
237
224
|
}
|
|
@@ -334,12 +321,6 @@ function resultDecoderFor(method) {
|
|
|
334
321
|
? null
|
|
335
322
|
: CODEX_APP_SERVER_RESULT_DECODERS[method];
|
|
336
323
|
}
|
|
337
|
-
function appendTail(current, next) {
|
|
338
|
-
const combined = current + next;
|
|
339
|
-
return combined.length <= OUTPUT_TAIL_CHARS
|
|
340
|
-
? combined
|
|
341
|
-
: combined.slice(-OUTPUT_TAIL_CHARS);
|
|
342
|
-
}
|
|
343
324
|
/**
|
|
344
325
|
* Server-originated frames carry `method`; a response never does. Their id
|
|
345
326
|
* space is the server's own, so an id on such a frame marks a request the
|
|
@@ -388,37 +369,27 @@ function appServerResponseError(method, error) {
|
|
|
388
369
|
code: AGENT_ERROR_CODE.failed,
|
|
389
370
|
classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
|
|
390
371
|
message: detail === "" ? `Codex app-server request failed: ${method}` : detail,
|
|
391
|
-
data: {
|
|
392
|
-
exitCode: null,
|
|
393
|
-
stdoutTail: null,
|
|
394
|
-
stderrTail: detail === "" ? null : detail.slice(-OUTPUT_TAIL_CHARS),
|
|
395
|
-
},
|
|
372
|
+
data: failureEvidence({ stdout: "", stderr: detail, exitCode: null }),
|
|
396
373
|
});
|
|
397
374
|
}
|
|
398
375
|
function appServerMalformedResultError(method, result) {
|
|
399
|
-
const detail = redactSecrets(JSON.stringify(result) ?? "");
|
|
400
376
|
return new AgentError({
|
|
401
377
|
code: AGENT_ERROR_CODE.failed,
|
|
402
378
|
classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
|
|
403
379
|
message: `Codex app-server returned a malformed result: ${method}`,
|
|
404
|
-
data: {
|
|
380
|
+
data: failureEvidence({
|
|
381
|
+
stdout: JSON.stringify(result) ?? "",
|
|
382
|
+
stderr: "",
|
|
405
383
|
exitCode: null,
|
|
406
|
-
|
|
407
|
-
stderrTail: null,
|
|
408
|
-
},
|
|
384
|
+
}),
|
|
409
385
|
});
|
|
410
386
|
}
|
|
411
387
|
function appServerExitedError(exitCode, stderr) {
|
|
412
|
-
const stderrTail = redactSecrets(stderr.slice(-OUTPUT_TAIL_CHARS));
|
|
413
388
|
return new AgentError({
|
|
414
389
|
code: AGENT_ERROR_CODE.failed,
|
|
415
390
|
classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
|
|
416
391
|
message: "Codex app-server exited before completing the request",
|
|
417
|
-
data: {
|
|
418
|
-
exitCode,
|
|
419
|
-
stdoutTail: null,
|
|
420
|
-
stderrTail: stderrTail === "" ? null : stderrTail,
|
|
421
|
-
},
|
|
392
|
+
data: failureEvidence({ stdout: "", stderr, exitCode }),
|
|
422
393
|
});
|
|
423
394
|
}
|
|
424
395
|
function appServerClosedError() {
|
|
@@ -426,6 +397,6 @@ function appServerClosedError() {
|
|
|
426
397
|
code: AGENT_ERROR_CODE.failed,
|
|
427
398
|
classification: AgentError.agentFailure(AGENT_ERROR_CODE.failed),
|
|
428
399
|
message: "Codex app-server connection closed",
|
|
429
|
-
data:
|
|
400
|
+
data: NO_FAILURE_EVIDENCE,
|
|
430
401
|
});
|
|
431
402
|
}
|
package/dist/codex/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { type AppServerClientInfo, CODEX_INCOMING_KIND, type CodexAppServer, type CodexAppServerOptions, type CodexIncoming, type CodexServerRequestAnswer, type CodexServerRequestId, createCodexAppServer, listAllCodexMcpServerStatuses, withCodexAppServer, } from "./app-server.js";
|
|
2
|
+
export type { CodexAppServerMethods, CodexConfigOverrides, CodexMcpServerStatus, CodexMcpServerStatusPage, CodexPluginInstallResult, CodexPluginListResult, CodexPluginMarketplace, CodexPluginSummary, CodexSandboxMode, CodexSkillListResult, CodexThreadPermissionParams, CodexThreadPermissionWireParams, CodexThreadRef, CodexTurnRef, CodexUserInput, CodexWorkspaceWriteConfig, } from "./protocol.js";
|
|
2
3
|
export { CODEX_APP_SERVER_INCOMING, CODEX_APP_SERVER_METHOD, CODEX_SANDBOX_MODE, encodeCodexThreadPermissions, } from "./protocol.js";
|
|
3
|
-
export type { CodexAppServerMethods, CodexConfigOverrides, CodexSandboxMode, CodexThreadPermissionParams, CodexThreadPermissionWireParams, CodexThreadRef, CodexTurnRef, CodexUserInput, CodexWorkspaceWriteConfig, CodexMcpServerStatus, CodexMcpServerStatusPage, CodexPluginInstallResult, CodexPluginListResult, CodexPluginMarketplace, CodexPluginSummary, CodexSkillListResult, } from "./protocol.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codex/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codex/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EACxB,mBAAmB,EACnB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,2BAA2B,EAC3B,+BAA+B,EAC/B,cAAc,EACd,YAAY,EACZ,cAAc,EACd,yBAAyB,GAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,GAC7B,MAAM,eAAe,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type JsonObject } from "@alpacakit/core";
|
|
2
2
|
import type { AgentConfigKind } from "./ids.js";
|
|
3
|
-
import type {
|
|
3
|
+
import type { AgentConfig, AgentConfigType, AgentConfigTypeRegistry } from "./model.js";
|
|
4
4
|
export declare const AGENT_CONFIG_VALIDATION_RESULT: {
|
|
5
5
|
readonly valid: "valid";
|
|
6
6
|
readonly unknownKind: "unknown_kind";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-config-validation.d.ts","sourceRoot":"","sources":["../../src/config/agent-config-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EACV,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"agent-config-validation.d.ts","sourceRoot":"","sources":["../../src/config/agent-config-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,8BAA8B;;;;CAIjC,CAAC;AAEX,MAAM,MAAM,2BAA2B,GACnC;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,KAAK,CAAC;IAC3D,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC1E,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;CAC3D,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,WAAW,CAAC;IACjE,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,cAAc,CAAC;IACpE,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEN,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,CAAC,eAAe,EAAE,UAAU,CAAC,EAChD,gBAAgB,EAAE,uBAAuB,GACxC,2BAA2B,CA0B7B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-configs.d.ts","sourceRoot":"","sources":["../../src/config/agent-configs.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EACV,WAAW,
|
|
1
|
+
{"version":3,"file":"agent-configs.d.ts","sourceRoot":"","sources":["../../src/config/agent-configs.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,UAAU,CAAC;AAC/D,OAAO,KAAK,EACV,WAAW,EAGX,eAAe,EACf,uBAAuB,EAGxB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,iBAAiB,EAKjB,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAQrB,KAAK,yBAAyB,GAAG;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAOF,KAAK,kCAAkC,GAAG;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,0BAA0B,CAAC;CAC9C,CAAC;AAiCF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,yBAAyB,GACjC,WAAW,CAAC,OAAO,iBAAiB,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAExE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,yBAAyB,GACjC,WAAW,CAAC,OAAO,iBAAiB,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAEzE;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,kCAAkC,GAC1C,WAAW,CACZ,OAAO,iBAAiB,CAAC,gBAAgB,EACzC,kCAAkC,CACnC,CAcA;AAgDD,wBAAgB,oCAAoC,IAAI,uBAAuB,CAoB9E;AAED,wBAAgB,qBAAqB,CACnC,IAAI,SAAS,eAAe,EAC5B,OAAO,SAAS,UAAU,EAC1B,OAAO,SAAS,MAAM,EAEtB,UAAU,EAAE,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAClD,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAEzC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { createKeyedRegistry, createSchemaRuntimeCodec, jsonValueSchema, } from "@alpacakit/core";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import { claude } from "../agents/claude.js";
|
|
5
|
-
import { codex } from "../agents/codex.js";
|
|
6
|
-
import { openaiCompatible } from "../agents/openai-compatible.js";
|
|
4
|
+
import { claude } from "../agents/claude/index.js";
|
|
5
|
+
import { codex } from "../agents/codex/index.js";
|
|
7
6
|
import { piSessionEngine } from "../agents/openai-compatible/pi/engine.js";
|
|
7
|
+
import { openaiCompatible } from "../agents/openai-compatible.js";
|
|
8
8
|
import { agentConfigId } from "./ids.js";
|
|
9
9
|
import { formatFieldPath, ZOD_ISSUE_CODE } from "./support.js";
|
|
10
10
|
import { AGENT_CONFIG_KIND, AGENTS_CONFIG_DIRECTORY, BUILTIN_AGENT_ID, CANDIDATE_SOURCE_KIND, OPENAI_COMPATIBLE_ENGINE, } from "./values.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/config/compose.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../src/config/compose.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EAEnB,UAAU,EACV,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAwBpB,KAAK,iCAAiC,GAAG;IACvC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,mBAAmB,CAAC,iBAAiB,CAAC,CAAC;IACjE,QAAQ,CAAC,gBAAgB,EAAE,uBAAuB,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC1D,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,iCAAiC,GACvC,mBAAmB,CA4CrB"}
|
package/dist/config/config.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SecretResolvers } from "../core/ports.js";
|
|
2
2
|
import type { Candidate } from "../fleet/fleet.js";
|
|
3
3
|
import type { FleetStateStore } from "../fleet/store.js";
|
|
4
|
-
import type { AgentConfigTypeRegistry,
|
|
4
|
+
import type { AgentConfigManager, AgentConfigTypeRegistry, AgentsConfigPaths, AgentsRuntimeConfig, NamedSecretResolver, ProfileManager } from "./model.js";
|
|
5
5
|
export type OpenAgentsConfigOptions = {
|
|
6
6
|
readonly rootDir: string;
|
|
7
7
|
readonly agentConfigTypes?: AgentConfigTypeRegistry;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EACV,uBAAuB,EACvB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IACpD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC3D,CAAC;AAQF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,iBAAiB,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnD;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,uBAAuB,GAC/B,YAAY,CAgBd;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,MAAM,EACvD,MAAM,EAAE,mBAAmB,CAAC,OAAO,CAAC,GACnC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAE/B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,mBAAmB,GAC1B,eAAe,CAIjB"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export type { BuiltinAgentConfigOptions, OpenAiCompatibleAgentConfigOptions, } from "./agent-configs.js";
|
|
2
2
|
export { claudeAgentConfig, codexAgentConfig, openAiCompatibleAgentConfig, } from "./agent-configs.js";
|
|
3
|
+
export type { AgentsConfig, OpenAgentsConfigOptions, } from "./config.js";
|
|
4
|
+
export { candidatesForFleet, loadAgentsRuntimeConfig, openAgentsConfig, secretsForRuntime, } from "./config.js";
|
|
3
5
|
export type { AgentsConfigErrorCode, AgentsConfigErrorData, AgentsConfigErrorOptions, } from "./errors.js";
|
|
4
6
|
export { AGENTS_CONFIG_ERROR_CODE, AgentsConfigError, isAgentsConfigError, } from "./errors.js";
|
|
5
|
-
export type { AgentsConfig, OpenAgentsConfigOptions, } from "./config.js";
|
|
6
|
-
export { loadAgentsRuntimeConfig, openAgentsConfig, candidatesForFleet, secretsForRuntime, } from "./config.js";
|
|
7
7
|
export type { AgentConfigId, AgentConfigKind, ProfileId } from "./ids.js";
|
|
8
8
|
export { agentConfigId, agentConfigKind, profileId } from "./ids.js";
|
|
9
9
|
export type { AgentConfig, AgentConfigManager, AgentConfigPatch, AgentConfigSettings, AgentsConfigPaths, AgentsRuntimeConfig, ApiKeyProfileInput, CandidateSource, CandidateSourceInfo, CandidateWithSource, HomeDirProfileInput, NamedSecretResolver, ProfileInputBase, ProfileManager, ProfileRecord, } from "./model.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrE,YAAY,EACV,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAClE,YAAY,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,aAAa,CAAC"}
|
package/dist/config/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { claudeAgentConfig, codexAgentConfig, openAiCompatibleAgentConfig, } from "./agent-configs.js";
|
|
2
|
+
export { candidatesForFleet, loadAgentsRuntimeConfig, openAgentsConfig, secretsForRuntime, } from "./config.js";
|
|
2
3
|
export { AGENTS_CONFIG_ERROR_CODE, AgentsConfigError, isAgentsConfigError, } from "./errors.js";
|
|
3
|
-
export { loadAgentsRuntimeConfig, openAgentsConfig, candidatesForFleet, secretsForRuntime, } from "./config.js";
|
|
4
4
|
export { agentConfigId, agentConfigKind, profileId } from "./ids.js";
|
|
5
5
|
export { DEFAULT_AGENTS_CONFIG_AGENT_SETTINGS } from "./store.js";
|
|
6
6
|
export { AGENT_CONFIG_KIND, AGENTS_CONFIG_DIRECTORY, AGENTS_CONFIG_FILE, BUILTIN_AGENT_ID, CANDIDATE_SOURCE_KIND, DEFAULT_AGENT_CONFIG_ID, OPENAI_COMPATIBLE_ENGINE, } from "./values.js";
|
package/dist/config/model.d.ts
CHANGED
|
@@ -6,7 +6,6 @@ import type { FleetStateStore } from "../fleet/store.js";
|
|
|
6
6
|
import type { AgentDefinition } from "../kernel/definition.js";
|
|
7
7
|
import type { AgentConfigId, AgentConfigKind, ProfileId } from "./ids.js";
|
|
8
8
|
import type { CANDIDATE_SOURCE_KIND } from "./values.js";
|
|
9
|
-
export type EmptyPayload = Readonly<Record<string, never>>;
|
|
10
9
|
export type AgentsConfigPaths = {
|
|
11
10
|
readonly rootDir: string;
|
|
12
11
|
readonly profilesFile: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/config/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/config/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,KAAK,EAEV,mBAAmB,EACnB,aAAa,EACd,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAwD5C,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,0BAA0B,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,0BAA0B,CAAC;CACrD,GAAG,mBAAmB,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAWK,CAAC;AAErC,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;kBAkBK,CAAC"}
|
package/dist/config/schema.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { brandedStringSchema, jsonValueSchema, readonlyArraySchema, strictReadonlyObject, } from "@alpacakit/core";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { AUTH_MATERIAL_KIND } from "../auth/material.js";
|
|
4
|
-
import {
|
|
4
|
+
import { agentConfigId, agentConfigKind, profileId } from "./ids.js";
|
|
5
5
|
import { ZOD_ISSUE_CODE } from "./support.js";
|
|
6
6
|
export const AGENTS_CONFIG_FILE_VERSION = 1;
|
|
7
7
|
const PROFILE_FILE_FIELD = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,eAAe,EAAkB,MAAM,mBAAmB,CAAC;AAQzE,OAAO,KAAK,EAEV,kBAAkB,EAGlB,uBAAuB,EACvB,iBAAiB,EAEjB,UAAU,EAEV,cAAc,EAEf,MAAM,YAAY,CAAC;AAsDpB,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC3C,CAAC;AAYF,eAAO,MAAM,oCAAoC;;;;;;;;;;;;;;;;;;;;;CAgBT,CAAC;AAmOzC,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,gBAAgB,EAAE,uBAAuB,GACxC,kBAAkB,CAWpB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,UAAU,CAAC,CAMrB"}
|
package/dist/config/store.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { isErrnoCode, writeFileAtomically } from "../core/fs.js";
|
|
3
|
+
import { TEXT_ENCODING } from "../core/values.js";
|
|
3
4
|
import { AUTH_MATERIAL_KIND } from "../auth/material.js";
|
|
4
5
|
import { fileFleetStore } from "../fleet/store.js";
|
|
5
6
|
import { AGENT_CONFIG_VALIDATION_RESULT, validateAgentConfig, } from "./agent-config-validation.js";
|
|
6
7
|
import { AGENTS_CONFIG_ERROR_CODE, AgentsConfigError } from "./errors.js";
|
|
7
8
|
import { profileId } from "./ids.js";
|
|
8
9
|
import { AGENTS_CONFIG_FILE_VERSION, agentConfigSettingsFileSchema, profilesFileSchema, } from "./schema.js";
|
|
9
|
-
import { FIELD_PATH, formatFieldPath,
|
|
10
|
+
import { FIELD_PATH, formatFieldPath, NODE_ERRNO_CODE } from "./support.js";
|
|
10
11
|
import { AGENT_CONFIG_KIND, DEFAULT_AGENT_CONFIG_ID } from "./values.js";
|
|
11
|
-
const TEXT_ENCODING = "utf8";
|
|
12
|
-
const PRIVATE_DIRECTORY_MODE = 0o700;
|
|
13
|
-
const PRIVATE_FILE_MODE = 0o600;
|
|
14
|
-
const TEMP_FILE_SUFFIX = "tmp";
|
|
15
|
-
const TEMP_FILE_PATH_SEPARATOR = ".";
|
|
16
12
|
const JSON_INDENT_SPACES = 2;
|
|
17
13
|
const TRAILING_NEWLINE = "\n";
|
|
18
14
|
const FILE_PARSE_ERROR_REASON = {
|
|
@@ -401,20 +397,6 @@ function invalidFileError(input) {
|
|
|
401
397
|
cause: input.cause,
|
|
402
398
|
});
|
|
403
399
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
recursive: true,
|
|
407
|
-
mode: PRIVATE_DIRECTORY_MODE,
|
|
408
|
-
});
|
|
409
|
-
const tempPath = [
|
|
410
|
-
filePath,
|
|
411
|
-
String(process.pid),
|
|
412
|
-
String(Date.now()),
|
|
413
|
-
TEMP_FILE_SUFFIX,
|
|
414
|
-
].join(TEMP_FILE_PATH_SEPARATOR);
|
|
415
|
-
await writeFile(tempPath, `${JSON.stringify(value, null, JSON_INDENT_SPACES)}${TRAILING_NEWLINE}`, {
|
|
416
|
-
encoding: TEXT_ENCODING,
|
|
417
|
-
mode: PRIVATE_FILE_MODE,
|
|
418
|
-
});
|
|
419
|
-
await rename(tempPath, filePath);
|
|
400
|
+
function writeJsonAtomically(filePath, value) {
|
|
401
|
+
return writeFileAtomically(filePath, `${JSON.stringify(value, null, JSON_INDENT_SPACES)}${TRAILING_NEWLINE}`);
|
|
420
402
|
}
|
package/dist/config/support.d.ts
CHANGED
|
@@ -10,5 +10,4 @@ export declare const NODE_ERRNO_CODE: {
|
|
|
10
10
|
};
|
|
11
11
|
export declare function readNonBlankEnvValue(env: Readonly<Record<string, string | undefined>>, name: string): string | null;
|
|
12
12
|
export declare function formatFieldPath(pathParts: readonly PropertyKey[]): string;
|
|
13
|
-
export declare function isErrnoCode(error: unknown, code: string): boolean;
|
|
14
13
|
//# sourceMappingURL=support.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/config/support.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;CAEjB,CAAC;AAEX,eAAO,MAAM,UAAU;;;CAGb,CAAC;AAEX,eAAO,MAAM,eAAe;;CAElB,CAAC;
|
|
1
|
+
{"version":3,"file":"support.d.ts","sourceRoot":"","sources":["../../src/config/support.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc;;CAEjB,CAAC;AAEX,eAAO,MAAM,UAAU;;;CAGb,CAAC;AAEX,eAAO,MAAM,eAAe;;CAElB,CAAC;AAEX,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACjD,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAGf;AAMD,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,GAAG,MAAM,CAKzE"}
|
package/dist/config/support.js
CHANGED
|
@@ -8,9 +8,6 @@ export const FIELD_PATH = {
|
|
|
8
8
|
export const NODE_ERRNO_CODE = {
|
|
9
9
|
missingFile: "ENOENT",
|
|
10
10
|
};
|
|
11
|
-
const NODE_ERROR_FIELD = {
|
|
12
|
-
code: "code",
|
|
13
|
-
};
|
|
14
11
|
export function readNonBlankEnvValue(env, name) {
|
|
15
12
|
const value = env[name];
|
|
16
13
|
return isNonBlankString(value) ? value : null;
|
|
@@ -24,9 +21,3 @@ export function formatFieldPath(pathParts) {
|
|
|
24
21
|
}
|
|
25
22
|
return pathParts.map(String).join(FIELD_PATH.separator);
|
|
26
23
|
}
|
|
27
|
-
export function isErrnoCode(error, code) {
|
|
28
|
-
return (typeof error === "object" &&
|
|
29
|
-
error !== null &&
|
|
30
|
-
NODE_ERROR_FIELD.code in error &&
|
|
31
|
-
Reflect.get(error, NODE_ERROR_FIELD.code) === code);
|
|
32
|
-
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The facts of a CLI child process, owned once: PATH resolution and the
|
|
3
|
+
* one `not_available` error it raises, capped output tails, NDJSON line
|
|
4
|
+
* assembly, redacted failure evidence, and signal escalation. Each caller
|
|
5
|
+
* keeps its own lifecycle policy (one-shot run, held session, login,
|
|
6
|
+
* host-plane command, probe) and never re-derives these facts.
|
|
7
|
+
*/
|
|
8
|
+
import { AGENT_ERROR_CODE, AgentError } from "./error.js";
|
|
9
|
+
import type { Clock, Exec, ExecExit, ExecProcess, InteractiveExecProcess } from "./ports.js";
|
|
10
|
+
/** How much of each stream survives into failure evidence. */
|
|
11
|
+
export declare const OUTPUT_TAIL_CHARS = 2000;
|
|
12
|
+
/** How much raw output a driver retains for parsing and `RunResult.raw`. */
|
|
13
|
+
export declare const RAW_OUTPUT_CAP_CHARS: number;
|
|
14
|
+
/** Grace between stdin EOF and SIGTERM, and between SIGTERM and SIGKILL. */
|
|
15
|
+
export declare const TERMINATION_GRACE_MS = 5000;
|
|
16
|
+
/** The `failed` error's data: what the process left behind, already redacted. */
|
|
17
|
+
export type FailureEvidence = {
|
|
18
|
+
exitCode: number | null;
|
|
19
|
+
stdoutTail: string | null;
|
|
20
|
+
stderrTail: string | null;
|
|
21
|
+
};
|
|
22
|
+
/** For a `failed` error that has no process behind it. */
|
|
23
|
+
export declare const NO_FAILURE_EVIDENCE: FailureEvidence;
|
|
24
|
+
/** Keep the last `capChars` of `current + next`. */
|
|
25
|
+
export declare function appendTail(current: string, next: string, capChars?: number): string;
|
|
26
|
+
/** The one place output becomes error evidence: tail-capped, redacted, `""` → `null`. */
|
|
27
|
+
export declare function failureEvidence(input: {
|
|
28
|
+
readonly stdout: string;
|
|
29
|
+
readonly stderr: string;
|
|
30
|
+
readonly exitCode: number | null;
|
|
31
|
+
}): FailureEvidence;
|
|
32
|
+
export declare function commandNotFoundError(command: string, agentId: string | null): AgentError<typeof AGENT_ERROR_CODE.notAvailable>;
|
|
33
|
+
/** Resolve `command` against `env`'s PATH; absence is the typed `not_available`. */
|
|
34
|
+
export declare function resolveCommand(exec: Exec, command: string, env: Record<string, string>, agentId: string | null): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Assemble complete lines from arbitrary chunks. `push` returns the
|
|
37
|
+
* trimmed, non-empty lines completed by the chunk; `flush` returns the
|
|
38
|
+
* unterminated remainder at end of stream.
|
|
39
|
+
*/
|
|
40
|
+
export declare class LineBuffer {
|
|
41
|
+
private pending;
|
|
42
|
+
push(text: string): string[];
|
|
43
|
+
flush(): string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* SIGTERM now, SIGKILL after the grace. Returns the canceller for the
|
|
47
|
+
* pending SIGKILL; call it once the child has exited.
|
|
48
|
+
*/
|
|
49
|
+
export declare function escalateTermination(process: ExecProcess, clock: Clock): () => void;
|
|
50
|
+
/**
|
|
51
|
+
* The one way a held child is ended: stdin EOF first (both hosts exit on
|
|
52
|
+
* it, and only that exit removes Codex's thread writer lock), then the
|
|
53
|
+
* signal escalation for a child that does not exit on EOF.
|
|
54
|
+
*/
|
|
55
|
+
export declare function endProcessGracefully(process: InteractiveExecProcess, clock: Clock): Promise<ExecExit>;
|
|
56
|
+
//# sourceMappingURL=cli-child.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-child.d.ts","sourceRoot":"","sources":["../../src/core/cli-child.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAuB,MAAM,YAAY,CAAC;AAC/E,OAAO,KAAK,EACV,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAIpB,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AACrD,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,OAAQ,CAAC;AAE1C,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC;AAEF,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,EAAE,eAIjC,CAAC;AAEF,oDAAoD;AACpD,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,MAA0B,GACnC,MAAM,CAKR;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,eAAe,CAQlB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,UAAU,CAAC,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAQlD;AAED,oFAAoF;AACpF,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAM;IAErB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAO5B,KAAK,IAAI,MAAM,EAAE;CAKlB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,KAAK,GACX,MAAM,IAAI,CAKZ;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,QAAQ,CAAC,CAenB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The facts of a CLI child process, owned once: PATH resolution and the
|
|
3
|
+
* one `not_available` error it raises, capped output tails, NDJSON line
|
|
4
|
+
* assembly, redacted failure evidence, and signal escalation. Each caller
|
|
5
|
+
* keeps its own lifecycle policy (one-shot run, held session, login,
|
|
6
|
+
* host-plane command, probe) and never re-derives these facts.
|
|
7
|
+
*/
|
|
8
|
+
import { AGENT_ERROR_CODE, AgentError, NOT_AVAILABLE_CAUSE } from "./error.js";
|
|
9
|
+
import { redactSecrets } from "./redact.js";
|
|
10
|
+
import { PROCESS_SIGNAL } from "./values.js";
|
|
11
|
+
/** How much of each stream survives into failure evidence. */
|
|
12
|
+
export const OUTPUT_TAIL_CHARS = 2_000;
|
|
13
|
+
/** How much raw output a driver retains for parsing and `RunResult.raw`. */
|
|
14
|
+
export const RAW_OUTPUT_CAP_CHARS = 10 * 1024 * 1024;
|
|
15
|
+
/** Grace between stdin EOF and SIGTERM, and between SIGTERM and SIGKILL. */
|
|
16
|
+
export const TERMINATION_GRACE_MS = 5_000;
|
|
17
|
+
/** For a `failed` error that has no process behind it. */
|
|
18
|
+
export const NO_FAILURE_EVIDENCE = {
|
|
19
|
+
exitCode: null,
|
|
20
|
+
stdoutTail: null,
|
|
21
|
+
stderrTail: null,
|
|
22
|
+
};
|
|
23
|
+
/** Keep the last `capChars` of `current + next`. */
|
|
24
|
+
export function appendTail(current, next, capChars = OUTPUT_TAIL_CHARS) {
|
|
25
|
+
const combined = current + next;
|
|
26
|
+
return combined.length <= capChars
|
|
27
|
+
? combined
|
|
28
|
+
: combined.slice(combined.length - capChars);
|
|
29
|
+
}
|
|
30
|
+
/** The one place output becomes error evidence: tail-capped, redacted, `""` → `null`. */
|
|
31
|
+
export function failureEvidence(input) {
|
|
32
|
+
const stdoutTail = redactSecrets(input.stdout.slice(-OUTPUT_TAIL_CHARS));
|
|
33
|
+
const stderrTail = redactSecrets(input.stderr.slice(-OUTPUT_TAIL_CHARS));
|
|
34
|
+
return {
|
|
35
|
+
exitCode: input.exitCode,
|
|
36
|
+
stdoutTail: stdoutTail === "" ? null : stdoutTail,
|
|
37
|
+
stderrTail: stderrTail === "" ? null : stderrTail,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function commandNotFoundError(command, agentId) {
|
|
41
|
+
return new AgentError({
|
|
42
|
+
code: AGENT_ERROR_CODE.notAvailable,
|
|
43
|
+
classification: AgentError.agentFailure(AGENT_ERROR_CODE.notAvailable),
|
|
44
|
+
message: `Command "${command}" was not found on PATH`,
|
|
45
|
+
data: { cause: NOT_AVAILABLE_CAUSE.notInstalled },
|
|
46
|
+
...(agentId === null ? {} : { agentId }),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** Resolve `command` against `env`'s PATH; absence is the typed `not_available`. */
|
|
50
|
+
export async function resolveCommand(exec, command, env, agentId) {
|
|
51
|
+
const resolved = await exec.which(command, env);
|
|
52
|
+
if (resolved === null) {
|
|
53
|
+
throw commandNotFoundError(command, agentId);
|
|
54
|
+
}
|
|
55
|
+
return resolved;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Assemble complete lines from arbitrary chunks. `push` returns the
|
|
59
|
+
* trimmed, non-empty lines completed by the chunk; `flush` returns the
|
|
60
|
+
* unterminated remainder at end of stream.
|
|
61
|
+
*/
|
|
62
|
+
export class LineBuffer {
|
|
63
|
+
pending = "";
|
|
64
|
+
push(text) {
|
|
65
|
+
this.pending += text;
|
|
66
|
+
const parts = this.pending.split(/\r?\n/u);
|
|
67
|
+
this.pending = parts.pop() ?? "";
|
|
68
|
+
return parts.map((line) => line.trim()).filter((line) => line !== "");
|
|
69
|
+
}
|
|
70
|
+
flush() {
|
|
71
|
+
const last = this.pending.trim();
|
|
72
|
+
this.pending = "";
|
|
73
|
+
return last === "" ? [] : [last];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* SIGTERM now, SIGKILL after the grace. Returns the canceller for the
|
|
78
|
+
* pending SIGKILL; call it once the child has exited.
|
|
79
|
+
*/
|
|
80
|
+
export function escalateTermination(process, clock) {
|
|
81
|
+
process.kill(PROCESS_SIGNAL.sigterm);
|
|
82
|
+
return clock.setTimeout(() => {
|
|
83
|
+
process.kill(PROCESS_SIGNAL.sigkill);
|
|
84
|
+
}, TERMINATION_GRACE_MS);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The one way a held child is ended: stdin EOF first (both hosts exit on
|
|
88
|
+
* it, and only that exit removes Codex's thread writer lock), then the
|
|
89
|
+
* signal escalation for a child that does not exit on EOF.
|
|
90
|
+
*/
|
|
91
|
+
export async function endProcessGracefully(process, clock) {
|
|
92
|
+
process.endStdin();
|
|
93
|
+
const cancels = [];
|
|
94
|
+
cancels.push(clock.setTimeout(() => {
|
|
95
|
+
cancels.push(escalateTermination(process, clock));
|
|
96
|
+
}, TERMINATION_GRACE_MS));
|
|
97
|
+
try {
|
|
98
|
+
return await process.exit;
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
for (const cancel of cancels.splice(0)) {
|
|
102
|
+
cancel();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
package/dist/core/fs.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare const PRIVATE_FILE_MODE = 384;
|
|
|
10
10
|
export declare function isErrnoCode(error: unknown, code: string): boolean;
|
|
11
11
|
/**
|
|
12
12
|
* Write a private (0600) file atomically: create the 0700 parent, write
|
|
13
|
-
* a pid-suffixed temp file, then rename over the destination.
|
|
13
|
+
* a pid-and-sequence-suffixed temp file, then rename over the destination.
|
|
14
14
|
*/
|
|
15
15
|
export declare function writeFileAtomically(filePath: string, content: string): Promise<void>;
|
|
16
16
|
//# sourceMappingURL=fs.d.ts.map
|
package/dist/core/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/core/fs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,sBAAsB,MAAQ,CAAC;AAC5C,eAAO,MAAM,iBAAiB,MAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/core/fs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,eAAO,MAAM,sBAAsB,MAAQ,CAAC;AAC5C,eAAO,MAAM,iBAAiB,MAAQ,CAAC;AAKvC,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
package/dist/core/fs.js
CHANGED
|
@@ -9,6 +9,8 @@ import path from "node:path";
|
|
|
9
9
|
export const PRIVATE_DIRECTORY_MODE = 0o700;
|
|
10
10
|
export const PRIVATE_FILE_MODE = 0o600;
|
|
11
11
|
const TEMP_FILE_SUFFIX = "tmp";
|
|
12
|
+
/** Distinguishes concurrent writes to one path from the same process. */
|
|
13
|
+
let tempFileSequence = 0;
|
|
12
14
|
/** Narrowing over Node fs errors without `instanceof` on internals. */
|
|
13
15
|
export function isErrnoCode(error, code) {
|
|
14
16
|
return (typeof error === "object" &&
|
|
@@ -17,14 +19,20 @@ export function isErrnoCode(error, code) {
|
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Write a private (0600) file atomically: create the 0700 parent, write
|
|
20
|
-
* a pid-suffixed temp file, then rename over the destination.
|
|
22
|
+
* a pid-and-sequence-suffixed temp file, then rename over the destination.
|
|
21
23
|
*/
|
|
22
24
|
export async function writeFileAtomically(filePath, content) {
|
|
23
25
|
await mkdir(path.dirname(filePath), {
|
|
24
26
|
recursive: true,
|
|
25
27
|
mode: PRIVATE_DIRECTORY_MODE,
|
|
26
28
|
});
|
|
27
|
-
|
|
29
|
+
tempFileSequence += 1;
|
|
30
|
+
const tempPath = [
|
|
31
|
+
filePath,
|
|
32
|
+
String(process.pid),
|
|
33
|
+
String(tempFileSequence),
|
|
34
|
+
TEMP_FILE_SUFFIX,
|
|
35
|
+
].join(".");
|
|
28
36
|
await writeFile(tempPath, content, { mode: PRIVATE_FILE_MODE });
|
|
29
37
|
await rename(tempPath, filePath);
|
|
30
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-ports.d.ts","sourceRoot":"","sources":["../../src/core/node-ports.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"node-ports.d.ts","sourceRoot":"","sources":["../../src/core/node-ports.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EACV,KAAK,EACL,IAAI,EAIJ,UAAU,EAGX,MAAM,YAAY,CAAC;AAOpB,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,UAEvB,CAAC;AAoBF,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAuHD,eAAO,MAAM,QAAQ,EAAE,IAGtB,CAAC"}
|