agent-cli-runtime 0.1.0-alpha.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 (151) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/CONTRIBUTING.md +60 -0
  3. package/LICENSE +202 -0
  4. package/README.md +573 -0
  5. package/README.zh-CN.md +571 -0
  6. package/SECURITY.md +35 -0
  7. package/dist/adapters/adapter-types.d.ts +138 -0
  8. package/dist/adapters/adapter-types.js +2 -0
  9. package/dist/adapters/adapter-types.js.map +1 -0
  10. package/dist/adapters/claude.d.ts +2 -0
  11. package/dist/adapters/claude.js +97 -0
  12. package/dist/adapters/claude.js.map +1 -0
  13. package/dist/adapters/codex.d.ts +3 -0
  14. package/dist/adapters/codex.js +120 -0
  15. package/dist/adapters/codex.js.map +1 -0
  16. package/dist/adapters/opencode.d.ts +4 -0
  17. package/dist/adapters/opencode.js +111 -0
  18. package/dist/adapters/opencode.js.map +1 -0
  19. package/dist/adapters/registry.d.ts +9 -0
  20. package/dist/adapters/registry.js +23 -0
  21. package/dist/adapters/registry.js.map +1 -0
  22. package/dist/cli/main.d.ts +2 -0
  23. package/dist/cli/main.js +978 -0
  24. package/dist/cli/main.js.map +1 -0
  25. package/dist/core/async-queue.d.ts +10 -0
  26. package/dist/core/async-queue.js +49 -0
  27. package/dist/core/async-queue.js.map +1 -0
  28. package/dist/core/diagnostics.d.ts +20 -0
  29. package/dist/core/diagnostics.js +4 -0
  30. package/dist/core/diagnostics.js.map +1 -0
  31. package/dist/core/event-contract.d.ts +32 -0
  32. package/dist/core/event-contract.js +128 -0
  33. package/dist/core/event-contract.js.map +1 -0
  34. package/dist/core/events.d.ts +147 -0
  35. package/dist/core/events.js +4 -0
  36. package/dist/core/events.js.map +1 -0
  37. package/dist/core/ids.d.ts +1 -0
  38. package/dist/core/ids.js +5 -0
  39. package/dist/core/ids.js.map +1 -0
  40. package/dist/core/redaction.d.ts +4 -0
  41. package/dist/core/redaction.js +51 -0
  42. package/dist/core/redaction.js.map +1 -0
  43. package/dist/core/runtime.d.ts +41 -0
  44. package/dist/core/runtime.js +83 -0
  45. package/dist/core/runtime.js.map +1 -0
  46. package/dist/core/schema-contract.d.ts +55 -0
  47. package/dist/core/schema-contract.js +143 -0
  48. package/dist/core/schema-contract.js.map +1 -0
  49. package/dist/detection/detect.d.ts +14 -0
  50. package/dist/detection/detect.js +293 -0
  51. package/dist/detection/detect.js.map +1 -0
  52. package/dist/detection/env.d.ts +2 -0
  53. package/dist/detection/env.js +15 -0
  54. package/dist/detection/env.js.map +1 -0
  55. package/dist/detection/executable-resolution.d.ts +12 -0
  56. package/dist/detection/executable-resolution.js +50 -0
  57. package/dist/detection/executable-resolution.js.map +1 -0
  58. package/dist/detection/invocation.d.ts +9 -0
  59. package/dist/detection/invocation.js +22 -0
  60. package/dist/detection/invocation.js.map +1 -0
  61. package/dist/goals/goal-scheduler.d.ts +31 -0
  62. package/dist/goals/goal-scheduler.js +518 -0
  63. package/dist/goals/goal-scheduler.js.map +1 -0
  64. package/dist/goals/goal-store.d.ts +37 -0
  65. package/dist/goals/goal-store.js +300 -0
  66. package/dist/goals/goal-store.js.map +1 -0
  67. package/dist/goals/goal-types.d.ts +103 -0
  68. package/dist/goals/goal-types.js +2 -0
  69. package/dist/goals/goal-types.js.map +1 -0
  70. package/dist/goals/planner-prompts.d.ts +3 -0
  71. package/dist/goals/planner-prompts.js +26 -0
  72. package/dist/goals/planner-prompts.js.map +1 -0
  73. package/dist/goals/task-graph.d.ts +9 -0
  74. package/dist/goals/task-graph.js +229 -0
  75. package/dist/goals/task-graph.js.map +1 -0
  76. package/dist/goals/validation-runner.d.ts +7 -0
  77. package/dist/goals/validation-runner.js +63 -0
  78. package/dist/goals/validation-runner.js.map +1 -0
  79. package/dist/index.d.ts +11 -0
  80. package/dist/index.js +2 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/parsers/claude-stream-json.d.ts +11 -0
  83. package/dist/parsers/claude-stream-json.js +102 -0
  84. package/dist/parsers/claude-stream-json.js.map +1 -0
  85. package/dist/parsers/codex-json.d.ts +8 -0
  86. package/dist/parsers/codex-json.js +107 -0
  87. package/dist/parsers/codex-json.js.map +1 -0
  88. package/dist/parsers/line-buffer.d.ts +7 -0
  89. package/dist/parsers/line-buffer.js +28 -0
  90. package/dist/parsers/line-buffer.js.map +1 -0
  91. package/dist/parsers/opencode-json.d.ts +8 -0
  92. package/dist/parsers/opencode-json.js +72 -0
  93. package/dist/parsers/opencode-json.js.map +1 -0
  94. package/dist/parsers/plain-lines.d.ts +6 -0
  95. package/dist/parsers/plain-lines.js +9 -0
  96. package/dist/parsers/plain-lines.js.map +1 -0
  97. package/dist/public-types.d.ts +143 -0
  98. package/dist/public-types.js +2 -0
  99. package/dist/public-types.js.map +1 -0
  100. package/dist/runs/process-runner.d.ts +35 -0
  101. package/dist/runs/process-runner.js +97 -0
  102. package/dist/runs/process-runner.js.map +1 -0
  103. package/dist/runs/prompt-transport.d.ts +10 -0
  104. package/dist/runs/prompt-transport.js +43 -0
  105. package/dist/runs/prompt-transport.js.map +1 -0
  106. package/dist/runs/run-result.d.ts +9 -0
  107. package/dist/runs/run-result.js +22 -0
  108. package/dist/runs/run-result.js.map +1 -0
  109. package/dist/runs/run-scheduler.d.ts +25 -0
  110. package/dist/runs/run-scheduler.js +552 -0
  111. package/dist/runs/run-scheduler.js.map +1 -0
  112. package/dist/runs/run-store.d.ts +42 -0
  113. package/dist/runs/run-store.js +297 -0
  114. package/dist/runs/run-store.js.map +1 -0
  115. package/dist/runs/run-types.d.ts +59 -0
  116. package/dist/runs/run-types.js +2 -0
  117. package/dist/runs/run-types.js.map +1 -0
  118. package/dist/smoke/parser-samples.d.ts +17 -0
  119. package/dist/smoke/parser-samples.js +186 -0
  120. package/dist/smoke/parser-samples.js.map +1 -0
  121. package/dist/storage/file-storage.d.ts +35 -0
  122. package/dist/storage/file-storage.js +271 -0
  123. package/dist/storage/file-storage.js.map +1 -0
  124. package/dist/storage/jsonl-store.d.ts +9 -0
  125. package/dist/storage/jsonl-store.js +138 -0
  126. package/dist/storage/jsonl-store.js.map +1 -0
  127. package/dist/storage/manifest-validation.d.ts +11 -0
  128. package/dist/storage/manifest-validation.js +102 -0
  129. package/dist/storage/manifest-validation.js.map +1 -0
  130. package/dist/storage/storage-lease.d.ts +40 -0
  131. package/dist/storage/storage-lease.js +223 -0
  132. package/dist/storage/storage-lease.js.map +1 -0
  133. package/dist/storage/storage-types.d.ts +55 -0
  134. package/dist/storage/storage-types.js +2 -0
  135. package/dist/storage/storage-types.js.map +1 -0
  136. package/dist/storage/store-inspection.d.ts +28 -0
  137. package/dist/storage/store-inspection.js +941 -0
  138. package/dist/storage/store-inspection.js.map +1 -0
  139. package/docs/api-schema-contract.md +92 -0
  140. package/docs/compatibility.md +832 -0
  141. package/docs/daemon-ready-contract.md +283 -0
  142. package/docs/production-readiness.md +281 -0
  143. package/docs/release-checklist.md +257 -0
  144. package/docs/release-publish-runbook.md +201 -0
  145. package/docs/release-report.md +517 -0
  146. package/docs/ssot.md +1257 -0
  147. package/examples/cli-dogfood.md +113 -0
  148. package/examples/library-goal.js +94 -0
  149. package/examples/library-run.js +84 -0
  150. package/package.json +79 -0
  151. package/scripts/dogfood.mjs +243 -0
@@ -0,0 +1,72 @@
1
+ import { isRecord, LineBuffer, safeJsonParse } from "./line-buffer.js";
2
+ export class OpenCodeJsonParser {
3
+ lines = new LineBuffer();
4
+ parse(chunk) {
5
+ return this.lines.push(chunk).flatMap((line) => this.parseLine(line));
6
+ }
7
+ flush() {
8
+ return this.lines.flush().flatMap((line) => this.parseLine(line));
9
+ }
10
+ parseLine(line) {
11
+ const value = safeJsonParse(line);
12
+ if (!isRecord(value))
13
+ return [];
14
+ const part = isRecord(value.part) ? value.part : {};
15
+ if (value.type === "step_start")
16
+ return [{ type: "status", label: "running" }];
17
+ if (value.type === "text" && typeof part.text === "string")
18
+ return [{ type: "text_delta", text: part.text }];
19
+ if (value.type === "tool_use" && typeof part.callID === "string") {
20
+ const state = isRecord(part.state) ? part.state : {};
21
+ const events = [];
22
+ if (typeof part.tool === "string") {
23
+ events.push({ type: "tool_call", id: part.callID, name: part.tool, input: parseMaybeJson(state.input) });
24
+ }
25
+ if (state.status === "completed") {
26
+ events.push({ type: "tool_result", id: part.callID, output: state.output, isError: false });
27
+ }
28
+ return events;
29
+ }
30
+ if (value.type === "step_finish") {
31
+ const usage = usageFrom(isRecord(part.tokens) ? part.tokens : null);
32
+ return usage ? [{ type: "usage", usage, costUsd: typeof part.cost === "number" ? part.cost : undefined }] : [];
33
+ }
34
+ if (value.type === "file" && typeof part.path === "string") {
35
+ return [{ type: "file_event", path: part.path, action: fileAction(part.action) }];
36
+ }
37
+ if (value.type === "error") {
38
+ return [{ type: "error", code: "AGENT_EXECUTION_FAILED", message: errorMessage(value, "OpenCode error") }];
39
+ }
40
+ return [];
41
+ }
42
+ }
43
+ function parseMaybeJson(value) {
44
+ if (typeof value !== "string")
45
+ return value;
46
+ return safeJsonParse(value) ?? value;
47
+ }
48
+ function usageFrom(tokens) {
49
+ if (!tokens)
50
+ return null;
51
+ const usage = {};
52
+ if (typeof tokens.input === "number")
53
+ usage.inputTokens = tokens.input;
54
+ if (typeof tokens.output === "number")
55
+ usage.outputTokens = tokens.output;
56
+ if (typeof tokens.reasoning === "number")
57
+ usage.thinkingTokens = tokens.reasoning;
58
+ return Object.keys(usage).length > 0 ? usage : null;
59
+ }
60
+ function errorMessage(value, fallback) {
61
+ if (typeof value.message === "string" && value.message)
62
+ return value.message;
63
+ if (isRecord(value.error) && typeof value.error.message === "string")
64
+ return value.error.message;
65
+ if (typeof value.error === "string" && value.error)
66
+ return value.error;
67
+ return fallback;
68
+ }
69
+ function fileAction(value) {
70
+ return value === "created" || value === "updated" || value === "deleted" ? value : "unknown";
71
+ }
72
+ //# sourceMappingURL=opencode-json.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-json.js","sourceRoot":"","sources":["../../src/parsers/opencode-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AgentEventInput } from "../core/events.js";
2
+ import type { StreamParser } from "../adapters/adapter-types.js";
3
+ export declare class PlainLineParser implements StreamParser {
4
+ parse(chunk: string): AgentEventInput[];
5
+ flush(): AgentEventInput[];
6
+ }
@@ -0,0 +1,9 @@
1
+ export class PlainLineParser {
2
+ parse(chunk) {
3
+ return chunk ? [{ type: "text_delta", text: chunk }] : [];
4
+ }
5
+ flush() {
6
+ return [];
7
+ }
8
+ }
9
+ //# sourceMappingURL=plain-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plain-lines.js","sourceRoot":"","sources":["../../src/parsers/plain-lines.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,eAAe;IAC1B,KAAK,CAAC,KAAa;QACjB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,143 @@
1
+ import type { RuntimeDiagnostic } from "./core/diagnostics.js";
2
+ export type RuntimeEnvironment = Record<string, string | undefined>;
3
+ export interface InspectStoreOptions {
4
+ storageDir?: string;
5
+ }
6
+ export interface RuntimeOwner {
7
+ runtimeInstanceId: string;
8
+ pid: number;
9
+ startedAt: number;
10
+ heartbeatAt: number;
11
+ closedAt?: number;
12
+ }
13
+ export type OwnerStatus = "missing" | "live" | "stale" | "closed" | "invalid";
14
+ export interface StorageLockInspection {
15
+ file: string;
16
+ status: OwnerStatus;
17
+ staleMs: number;
18
+ diagnostics: string[];
19
+ owner?: RuntimeOwner;
20
+ ageMs?: number;
21
+ reason?: string;
22
+ }
23
+ export interface StoreHealthIssue {
24
+ kind: "run" | "goal";
25
+ id: string;
26
+ file: string;
27
+ line?: number;
28
+ reason: string;
29
+ retainedEventCount?: number;
30
+ corruptLineCount?: number;
31
+ partialTailDetected?: boolean;
32
+ lastGoodEventId?: number;
33
+ lastGoodSequence?: number;
34
+ repairRecommendation?: "none" | "truncate_partial_tail" | "isolate_corrupt_line" | "manual_review";
35
+ redactedTailPreview?: string;
36
+ }
37
+ export interface StoreHealthWarning {
38
+ kind: "run" | "goal";
39
+ id: string;
40
+ code: string;
41
+ message: string;
42
+ file: string;
43
+ }
44
+ export interface StoreHealthSummary {
45
+ total: number;
46
+ byCode: Record<string, number>;
47
+ }
48
+ export interface StoreActiveRecord {
49
+ kind: "run" | "goal";
50
+ id: string;
51
+ status: string;
52
+ file: string;
53
+ ownerStatus: OwnerStatus;
54
+ owner?: RuntimeOwner;
55
+ ownerAgeMs?: number;
56
+ reason?: string;
57
+ }
58
+ export interface StoreHealth {
59
+ schemaVersion: "agent-runtime.storeHealth.v1";
60
+ ok: boolean;
61
+ storageDir?: string;
62
+ checkedAt: number;
63
+ lock: StorageLockInspection;
64
+ totals: {
65
+ runs: number;
66
+ goals: number;
67
+ corruptEventLogLines: number;
68
+ partialEventLogTails: number;
69
+ activeRecords: number;
70
+ };
71
+ corruptManifests: StoreHealthIssue[];
72
+ corruptEventLogs: StoreHealthIssue[];
73
+ partialTails: StoreHealthIssue[];
74
+ activeRecords: StoreActiveRecord[];
75
+ activeInterrupted: StoreHealthIssue[];
76
+ warnings: StoreHealthWarning[];
77
+ storageDiagnostics: RuntimeDiagnostic[];
78
+ diagnostics: StoreHealthSummary;
79
+ }
80
+ export interface StoreRepairAction {
81
+ kind: "run" | "goal";
82
+ id: string;
83
+ file: string;
84
+ action: "truncate_partial_tail" | "isolate_corrupt_line" | "manual_review";
85
+ dryRun: boolean;
86
+ applied: boolean;
87
+ backupPath: string | null;
88
+ line?: number;
89
+ retainedEventCount: number;
90
+ removedLineCount: number;
91
+ truncatedBytes: number;
92
+ lastGoodEventId?: number;
93
+ lastGoodSequence?: number;
94
+ reason: string;
95
+ redactedTailPreview?: string;
96
+ diagnostics: RuntimeDiagnostic[];
97
+ }
98
+ export interface StoreRepairReport {
99
+ schemaVersion: "agent-runtime.storeRepair.v1";
100
+ storageDir: string;
101
+ checkedAt: number;
102
+ dryRun: boolean;
103
+ applied: boolean;
104
+ ok: boolean;
105
+ blockedReason?: string;
106
+ actions: StoreRepairAction[];
107
+ diagnostics: StoreHealthSummary;
108
+ }
109
+ export type ExportDiagnosticsRequest = {
110
+ kind: "run";
111
+ runId: string;
112
+ storageDir?: string;
113
+ } | {
114
+ kind: "goal";
115
+ goalId: string;
116
+ storageDir?: string;
117
+ };
118
+ export interface DiagnosticsBundle {
119
+ schemaVersion: "agent-runtime.diagnostics.v1";
120
+ exportedAt: number;
121
+ storageDir?: string;
122
+ subject: {
123
+ kind: "run" | "goal";
124
+ id: string;
125
+ };
126
+ manifest: unknown | null;
127
+ events: {
128
+ total: number;
129
+ retained: number;
130
+ firstEventId?: number;
131
+ lastEventId?: number;
132
+ terminalEvent: boolean;
133
+ eventTypes: Record<string, number>;
134
+ corrupt?: StoreHealthIssue;
135
+ partialTail?: StoreHealthIssue;
136
+ };
137
+ diagnostics: RuntimeDiagnostic[];
138
+ storageDiagnostics: RuntimeDiagnostic[];
139
+ consistencyWarnings: StoreHealthWarning[];
140
+ attemptEvidence?: unknown[];
141
+ supervisorSummary: Record<string, unknown>;
142
+ adapterSummary: Record<string, unknown>;
143
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=public-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-types.js","sourceRoot":"","sources":["../src/public-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { type ChildProcessWithoutNullStreams } from "node:child_process";
2
+ import { EventEmitter } from "node:events";
3
+ export interface SpawnRequest {
4
+ command: string;
5
+ args: string[];
6
+ cwd: string;
7
+ env: NodeJS.ProcessEnv;
8
+ stdinData?: string;
9
+ }
10
+ export interface ProcessClose {
11
+ exitCode: number | null;
12
+ signal: NodeJS.Signals | null;
13
+ error?: NodeJS.ErrnoException;
14
+ stdinError?: Error;
15
+ }
16
+ export interface KillReport {
17
+ softSignal: NodeJS.Signals;
18
+ hardSignal?: NodeJS.Signals;
19
+ escalated: boolean;
20
+ errors: string[];
21
+ }
22
+ export declare class RunningProcess extends EventEmitter {
23
+ private readonly child;
24
+ private cancelPromise?;
25
+ constructor(child: ChildProcessWithoutNullStreams);
26
+ get pid(): number | undefined;
27
+ cancel(graceMs?: number): Promise<KillReport>;
28
+ private cancelOnce;
29
+ private kill;
30
+ }
31
+ export declare function spawnProcess(request: SpawnRequest): {
32
+ child: ChildProcessWithoutNullStreams;
33
+ running: RunningProcess;
34
+ close: Promise<ProcessClose>;
35
+ };
@@ -0,0 +1,97 @@
1
+ import { spawn } from "node:child_process";
2
+ import { EventEmitter } from "node:events";
3
+ export class RunningProcess extends EventEmitter {
4
+ child;
5
+ cancelPromise;
6
+ constructor(child) {
7
+ super();
8
+ this.child = child;
9
+ }
10
+ get pid() {
11
+ return this.child.pid;
12
+ }
13
+ async cancel(graceMs = 750) {
14
+ if (this.cancelPromise)
15
+ return this.cancelPromise;
16
+ this.cancelPromise = this.cancelOnce(graceMs);
17
+ return this.cancelPromise;
18
+ }
19
+ async cancelOnce(graceMs) {
20
+ const report = { softSignal: "SIGTERM", escalated: false, errors: [] };
21
+ if (this.child.exitCode !== null || this.child.signalCode !== null)
22
+ return report;
23
+ this.kill("SIGTERM", report);
24
+ await new Promise((resolve) => {
25
+ const timer = setTimeout(resolve, graceMs);
26
+ timer.unref?.();
27
+ this.child.once("close", () => {
28
+ clearTimeout(timer);
29
+ resolve();
30
+ });
31
+ });
32
+ if (this.child.exitCode === null && this.child.signalCode === null) {
33
+ report.escalated = true;
34
+ report.hardSignal = "SIGKILL";
35
+ this.kill("SIGKILL", report);
36
+ }
37
+ return report;
38
+ }
39
+ kill(signal, report) {
40
+ try {
41
+ if (process.platform !== "win32" && typeof this.child.pid === "number") {
42
+ process.kill(-this.child.pid, signal);
43
+ return;
44
+ }
45
+ }
46
+ catch (error) {
47
+ report.errors.push(errorMessage(error));
48
+ // Fall through to direct child signal.
49
+ }
50
+ try {
51
+ this.child.kill(signal);
52
+ }
53
+ catch (error) {
54
+ report.errors.push(errorMessage(error));
55
+ // best effort
56
+ }
57
+ }
58
+ }
59
+ export function spawnProcess(request) {
60
+ const child = spawn(request.command, request.args, {
61
+ cwd: request.cwd,
62
+ env: request.env,
63
+ detached: process.platform !== "win32",
64
+ stdio: ["pipe", "pipe", "pipe"],
65
+ });
66
+ let stdinError;
67
+ child.stdin.once("error", (error) => {
68
+ stdinError = error;
69
+ });
70
+ try {
71
+ if (request.stdinData !== undefined) {
72
+ child.stdin.end(request.stdinData);
73
+ }
74
+ else {
75
+ child.stdin.end();
76
+ }
77
+ }
78
+ catch (error) {
79
+ stdinError = error instanceof Error ? error : new Error(String(error));
80
+ }
81
+ const close = new Promise((resolve) => {
82
+ let settled = false;
83
+ const settle = (value) => {
84
+ if (settled)
85
+ return;
86
+ settled = true;
87
+ resolve({ ...value, stdinError });
88
+ };
89
+ child.once("error", (error) => settle({ exitCode: null, signal: null, error }));
90
+ child.once("close", (exitCode, signal) => settle({ exitCode, signal, stdinError }));
91
+ });
92
+ return { child, running: new RunningProcess(child), close };
93
+ }
94
+ function errorMessage(error) {
95
+ return error instanceof Error ? error.message : String(error);
96
+ }
97
+ //# sourceMappingURL=process-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-runner.js","sourceRoot":"","sources":["../../src/runs/process-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PromptTransport } from "../adapters/adapter-types.js";
2
+ import type { RunRequest } from "./run-types.js";
3
+ export interface PreparedPrompt {
4
+ prompt: string;
5
+ promptFilePath?: string;
6
+ stdinData?: string;
7
+ cleanup(): Promise<void>;
8
+ }
9
+ export declare function composePrompt(request: Pick<RunRequest, "systemPrompt" | "contextBlocks" | "prompt">): string;
10
+ export declare function preparePromptTransport(transport: PromptTransport, prompt: string): Promise<PreparedPrompt>;
@@ -0,0 +1,43 @@
1
+ import { mkdtemp, writeFile } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ export function composePrompt(request) {
5
+ const chunks = [];
6
+ if (request.systemPrompt?.trim())
7
+ chunks.push(request.systemPrompt.trim());
8
+ for (const block of request.contextBlocks ?? []) {
9
+ chunks.push(`## ${block.title}\n\n${block.body}`);
10
+ }
11
+ chunks.push(request.prompt);
12
+ return chunks.join("\n\n");
13
+ }
14
+ export async function preparePromptTransport(transport, prompt) {
15
+ if (transport.kind === "stdin") {
16
+ return {
17
+ prompt,
18
+ stdinData: transport.inputFormat === "jsonl" ? `${JSON.stringify({ type: "user", message: { role: "user", content: [{ type: "text", text: prompt }] } })}\n` : prompt,
19
+ cleanup: async () => { },
20
+ };
21
+ }
22
+ if (transport.kind === "file") {
23
+ const dir = await mkdtemp(path.join(os.tmpdir(), "agent-runtime-prompt-"));
24
+ const promptFilePath = path.join(dir, "prompt.txt");
25
+ await writeFile(promptFilePath, prompt, "utf8");
26
+ return {
27
+ prompt,
28
+ promptFilePath,
29
+ cleanup: async () => {
30
+ const { rm } = await import("node:fs/promises");
31
+ await rm(dir, { recursive: true, force: true });
32
+ },
33
+ };
34
+ }
35
+ const bytes = Buffer.byteLength(prompt, "utf8");
36
+ if (bytes > transport.maxBytes) {
37
+ const error = new Error(`Prompt is ${bytes} bytes; argv transport limit is ${transport.maxBytes}`);
38
+ error.name = "AGENT_PROMPT_TOO_LARGE";
39
+ throw error;
40
+ }
41
+ return { prompt, cleanup: async () => { } };
42
+ }
43
+ //# sourceMappingURL=prompt-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-transport.js","sourceRoot":"","sources":["../../src/runs/prompt-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAW7B,MAAM,UAAU,aAAa,CAAC,OAAsE;IAClG,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAA0B,EAAE,MAAc;IACrF,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO;YACL,MAAM;YACN,SAAS,EAAE,SAAS,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;YACrK,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC,CAAC;QAC3E,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO;YACL,MAAM;YACN,cAAc;YACd,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAChD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,CAAC;SACF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,aAAa,KAAK,mCAAmC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnG,KAAK,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACtC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type RunResult = "success" | "failed" | "cancelled";
2
+ export type RunStatus = "queued" | "running" | "succeeded" | "failed" | "canceled";
3
+ export declare function runResultFromStatus(status: RunStatus | string | undefined): RunResult;
4
+ export declare function deriveRunErrorCode(status: {
5
+ status: RunStatus | string;
6
+ errorCode?: string | null;
7
+ exitCode?: number | null;
8
+ signal?: string | null;
9
+ }): string | undefined;
@@ -0,0 +1,22 @@
1
+ export function runResultFromStatus(status) {
2
+ if (status === "succeeded")
3
+ return "success";
4
+ if (status === "canceled")
5
+ return "cancelled";
6
+ return "failed";
7
+ }
8
+ export function deriveRunErrorCode(status) {
9
+ const result = runResultFromStatus(status.status);
10
+ if (result === "success")
11
+ return undefined;
12
+ if (result === "cancelled")
13
+ return status.errorCode ?? undefined;
14
+ if (status.errorCode)
15
+ return status.errorCode;
16
+ if (status.signal)
17
+ return `AGENT_SIGNAL_${status.signal}`;
18
+ if (typeof status.exitCode === "number" && status.exitCode !== 0)
19
+ return `AGENT_EXIT_${status.exitCode}`;
20
+ return "AGENT_TERMINATED_UNKNOWN";
21
+ }
22
+ //# sourceMappingURL=run-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-result.js","sourceRoot":"","sources":["../../src/runs/run-result.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,mBAAmB,CAAC,MAAsC;IACxE,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,SAAS,CAAC;IAC7C,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,WAAW,CAAC;IAC9C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAKlC;IACC,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;IACjE,IAAI,MAAM,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC,SAAS,CAAC;IAC9C,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1D,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;QAAE,OAAO,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC;IACzG,OAAO,0BAA0B,CAAC;AACpC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { AdapterRegistry } from "../adapters/registry.js";
2
+ import { RunStore } from "./run-store.js";
3
+ import type { RunHandle, RunRecord, RunRequest } from "./run-types.js";
4
+ export declare class RunScheduler {
5
+ private readonly registry;
6
+ private readonly store;
7
+ private readonly options;
8
+ private readonly active;
9
+ constructor(registry: AdapterRegistry, store: RunStore, options?: {
10
+ env?: NodeJS.ProcessEnv;
11
+ searchPath?: string[];
12
+ });
13
+ startRun(request: RunRequest): Promise<RunHandle>;
14
+ cancelRun(runId: string, reason?: string): Promise<void>;
15
+ getRun(runId: string): Promise<RunRecord | null>;
16
+ shutdown(reason?: string, graceMs?: number): Promise<void>;
17
+ private execute;
18
+ private armTimeout;
19
+ private failBeforeSpawn;
20
+ private cleanupActive;
21
+ private emit;
22
+ private emitError;
23
+ private addTerminalDiagnostic;
24
+ private finish;
25
+ }