@post-print/agent-harness 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/README.md +63 -15
  2. package/dist/adapters/index.d.ts +9 -1
  3. package/dist/adapters/index.d.ts.map +1 -1
  4. package/dist/adapters/index.js +88 -6
  5. package/dist/adapters/index.js.map +1 -1
  6. package/dist/auth-mode.d.ts +22 -0
  7. package/dist/auth-mode.d.ts.map +1 -0
  8. package/dist/auth-mode.js +36 -0
  9. package/dist/auth-mode.js.map +1 -0
  10. package/dist/capture.d.ts +0 -2
  11. package/dist/capture.d.ts.map +1 -1
  12. package/dist/capture.js +12 -66
  13. package/dist/capture.js.map +1 -1
  14. package/dist/classifier.d.ts +13 -0
  15. package/dist/classifier.d.ts.map +1 -0
  16. package/dist/classifier.js +91 -0
  17. package/dist/classifier.js.map +1 -0
  18. package/dist/claude-run.d.ts +15 -1
  19. package/dist/claude-run.d.ts.map +1 -1
  20. package/dist/claude-run.js +54 -8
  21. package/dist/claude-run.js.map +1 -1
  22. package/dist/context.d.ts +3 -2
  23. package/dist/context.d.ts.map +1 -1
  24. package/dist/context.js +27 -9
  25. package/dist/context.js.map +1 -1
  26. package/dist/conversation.d.ts +28 -0
  27. package/dist/conversation.d.ts.map +1 -0
  28. package/dist/conversation.js +191 -0
  29. package/dist/conversation.js.map +1 -0
  30. package/dist/cursor-run.d.ts +17 -1
  31. package/dist/cursor-run.d.ts.map +1 -1
  32. package/dist/cursor-run.js +152 -101
  33. package/dist/cursor-run.js.map +1 -1
  34. package/dist/host-registry.d.ts +12 -0
  35. package/dist/host-registry.d.ts.map +1 -0
  36. package/dist/host-registry.js +39 -0
  37. package/dist/host-registry.js.map +1 -0
  38. package/dist/index.d.ts +19 -7
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +28 -7
  41. package/dist/index.js.map +1 -1
  42. package/dist/judge.d.ts +30 -1
  43. package/dist/judge.d.ts.map +1 -1
  44. package/dist/judge.js +137 -17
  45. package/dist/judge.js.map +1 -1
  46. package/dist/live-agent-event.d.ts +17 -0
  47. package/dist/live-agent-event.d.ts.map +1 -0
  48. package/dist/live-agent-event.js +31 -0
  49. package/dist/live-agent-event.js.map +1 -0
  50. package/dist/main.d.ts +1 -1
  51. package/dist/main.d.ts.map +1 -1
  52. package/dist/main.js +1 -1
  53. package/dist/main.js.map +1 -1
  54. package/dist/openai-capture.d.ts +43 -0
  55. package/dist/openai-capture.d.ts.map +1 -0
  56. package/dist/openai-capture.js +164 -0
  57. package/dist/openai-capture.js.map +1 -0
  58. package/dist/openai-run.d.ts +70 -0
  59. package/dist/openai-run.d.ts.map +1 -0
  60. package/dist/openai-run.js +373 -0
  61. package/dist/openai-run.js.map +1 -0
  62. package/dist/sealed-workspace.d.ts +37 -0
  63. package/dist/sealed-workspace.d.ts.map +1 -0
  64. package/dist/sealed-workspace.js +170 -0
  65. package/dist/sealed-workspace.js.map +1 -0
  66. package/dist/skills-context.d.ts +26 -7
  67. package/dist/skills-context.d.ts.map +1 -1
  68. package/dist/skills-context.js +105 -40
  69. package/dist/skills-context.js.map +1 -1
  70. package/dist/types.d.ts +44 -2
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/types.js +13 -1
  73. package/dist/types.js.map +1 -1
  74. package/dist/user-simulator.d.ts +10 -0
  75. package/dist/user-simulator.d.ts.map +1 -0
  76. package/dist/user-simulator.js +47 -0
  77. package/dist/user-simulator.js.map +1 -0
  78. package/dist/user-skills.d.ts +17 -0
  79. package/dist/user-skills.d.ts.map +1 -0
  80. package/dist/user-skills.js +32 -0
  81. package/dist/user-skills.js.map +1 -0
  82. package/dist/working-tree-guard.d.ts +5 -0
  83. package/dist/working-tree-guard.d.ts.map +1 -1
  84. package/dist/working-tree-guard.js +27 -3
  85. package/dist/working-tree-guard.js.map +1 -1
  86. package/package.json +2 -2
@@ -0,0 +1,31 @@
1
+ export function createLiveNotifyState() {
2
+ return { toolCount: 0, assistantChars: 0 };
3
+ }
4
+ /** New tool calls and the latest assistant text since the last drain. */
5
+ export function drainLiveAgentEvents(acc, state) {
6
+ const events = [];
7
+ while (state.toolCount < acc.toolCalls.length) {
8
+ const call = acc.toolCalls[state.toolCount];
9
+ if (call) {
10
+ events.push({ type: "tool", name: call.name, args: call.args });
11
+ }
12
+ state.toolCount += 1;
13
+ }
14
+ const last = [...acc.agentMessages].reverse().find((message) => message.role === "assistant");
15
+ if (last && last.content.length !== state.assistantChars) {
16
+ state.assistantChars = last.content.length;
17
+ if (last.content.trim()) {
18
+ events.push({ type: "text", text: last.content });
19
+ }
20
+ }
21
+ return events;
22
+ }
23
+ export function emitLiveAgentEvents(acc, state, onAgentEvent) {
24
+ if (!onAgentEvent) {
25
+ return;
26
+ }
27
+ for (const event of drainLiveAgentEvents(acc, state)) {
28
+ onAgentEvent(event);
29
+ }
30
+ }
31
+ //# sourceMappingURL=live-agent-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-agent-event.js","sourceRoot":"","sources":["../src/live-agent-event.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,qBAAqB;IACpC,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CACnC,GAAkE,EAClE,KAAsB;IAEtB,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,OAAO,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC9F,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1D,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3C,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,GAAkE,EAClE,KAAsB,EACtB,YAA8C;IAE9C,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,OAAO;IACR,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;QACtD,YAAY,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACF,CAAC"}
package/dist/main.d.ts CHANGED
@@ -4,6 +4,6 @@ export interface HealthStatus {
4
4
  ok: boolean;
5
5
  path: typeof HEALTH_CHECK_PATH;
6
6
  }
7
- /** Lightweight health signal for agent-spec packages (used by agent-test --doctor). */
7
+ /** Lightweight health signal for agent-spec packages (used by agent-test --check). */
8
8
  export declare function getHealthStatus(): HealthStatus;
9
9
  //# sourceMappingURL=main.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,OAAO,iBAAiB,CAAC;CAC/B;AAED,uFAAuF;AACvF,wBAAgB,eAAe,IAAI,YAAY,CAE9C"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,OAAO,iBAAiB,CAAC;CAC/B;AAED,sFAAsF;AACtF,wBAAgB,eAAe,IAAI,YAAY,CAE9C"}
package/dist/main.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Readiness probe path for CLI/package diagnostics. */
2
2
  export const HEALTH_CHECK_PATH = "/health";
3
- /** Lightweight health signal for agent-spec packages (used by agent-test --doctor). */
3
+ /** Lightweight health signal for agent-spec packages (used by agent-test --check). */
4
4
  export function getHealthStatus() {
5
5
  return { ok: true, path: HEALTH_CHECK_PATH };
6
6
  }
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAO3C,uFAAuF;AACvF,MAAM,UAAU,eAAe;IAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAO3C,sFAAsF;AACtF,MAAM,UAAU,eAAe;IAC9B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type TraceAccumulator } from "./capture.js";
2
+ import type { AgentTrace, AgentUsage } from "./types.js";
3
+ /** One JSONL line from `codex exec --json`. */
4
+ export interface OpenaiJsonlEvent {
5
+ type?: string;
6
+ item?: OpenaiThreadItem;
7
+ usage?: unknown;
8
+ error?: {
9
+ message?: string;
10
+ } | string;
11
+ message?: string;
12
+ }
13
+ export interface OpenaiThreadItem {
14
+ id?: string;
15
+ type?: string;
16
+ text?: string;
17
+ command?: string;
18
+ aggregated_output?: string;
19
+ exit_code?: number;
20
+ changes?: Array<{
21
+ path?: string;
22
+ kind?: string;
23
+ }>;
24
+ path?: string;
25
+ server?: string;
26
+ tool?: string;
27
+ arguments?: unknown;
28
+ result?: unknown;
29
+ status?: string;
30
+ }
31
+ export interface OpenaiTraceAccumulator extends TraceAccumulator {
32
+ rawStatus?: string;
33
+ resultError?: string;
34
+ shellCommands: string[];
35
+ }
36
+ export declare function createOpenaiTraceAccumulator(): OpenaiTraceAccumulator;
37
+ export declare function parseOpenaiJsonlLine(line: string): OpenaiJsonlEvent | undefined;
38
+ /** Fold one Codex JSONL event into the accumulator. */
39
+ export declare function accumulateOpenaiEvent(acc: OpenaiTraceAccumulator, event: OpenaiJsonlEvent): void;
40
+ export declare function finalizeOpenaiTraceAccumulator(acc: OpenaiTraceAccumulator): AgentTrace;
41
+ export declare function lastAssistantText(trace: AgentTrace): string;
42
+ export type { AgentUsage };
43
+ //# sourceMappingURL=openai-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-capture.d.ts","sourceRoot":"","sources":["../src/openai-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAMN,KAAK,gBAAgB,EACrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAgB,4BAA4B,IAAI,sBAAsB,CAKrE;AAqBD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAU/E;AAiFD,uDAAuD;AACvD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CA4BhG;AAED,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,sBAAsB,GAAG,UAAU,CAWtF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQ3D;AAED,YAAY,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,164 @@
1
+ import { createTraceAccumulator, finalizeTraceAccumulator, mergeAgentUsage, normalizeAgentUsage, serializeToolResult, } from "./capture.js";
2
+ export function createOpenaiTraceAccumulator() {
3
+ return {
4
+ ...createTraceAccumulator(),
5
+ shellCommands: [],
6
+ };
7
+ }
8
+ function normalizeOpenaiUsage(raw) {
9
+ const camel = normalizeAgentUsage(raw);
10
+ if (!raw || typeof raw !== "object") {
11
+ return camel;
12
+ }
13
+ const record = raw;
14
+ const snake = {};
15
+ if (typeof record.input_tokens === "number") {
16
+ snake.inputTokens = record.input_tokens;
17
+ }
18
+ if (typeof record.output_tokens === "number") {
19
+ snake.outputTokens = record.output_tokens;
20
+ }
21
+ if (typeof record.total_tokens === "number") {
22
+ snake.totalTokens = record.total_tokens;
23
+ }
24
+ return mergeAgentUsage(camel, Object.keys(snake).length > 0 ? snake : undefined);
25
+ }
26
+ export function parseOpenaiJsonlLine(line) {
27
+ const trimmed = line.trim();
28
+ if (!trimmed) {
29
+ return undefined;
30
+ }
31
+ try {
32
+ return JSON.parse(trimmed);
33
+ }
34
+ catch {
35
+ return undefined;
36
+ }
37
+ }
38
+ function itemFromEvent(event) {
39
+ if (event.item && typeof event.item === "object") {
40
+ return event.item;
41
+ }
42
+ const type = event.type ?? "";
43
+ if (type === "agent_message" ||
44
+ type === "command_execution" ||
45
+ type === "file_change" ||
46
+ type === "mcp_tool_call") {
47
+ return event;
48
+ }
49
+ return undefined;
50
+ }
51
+ function toolNameForFileChange(kind) {
52
+ const normalized = (kind ?? "update").toLowerCase();
53
+ if (normalized === "add" || normalized === "create") {
54
+ return "Write";
55
+ }
56
+ if (normalized === "delete" || normalized === "remove") {
57
+ return "Delete";
58
+ }
59
+ return "Edit";
60
+ }
61
+ function applyItem(acc, item) {
62
+ const type = (item.type ?? "").toLowerCase();
63
+ if (type === "agent_message" && item.text) {
64
+ acc.agentMessages.push({
65
+ role: "assistant",
66
+ content: item.text,
67
+ seq: acc.nextSeq++,
68
+ });
69
+ return;
70
+ }
71
+ if (type === "command_execution" && item.command) {
72
+ acc.shellCommands.push(item.command);
73
+ acc.toolCalls.push({
74
+ name: "Shell",
75
+ args: { command: item.command, cwd: item.path },
76
+ result: item.aggregated_output,
77
+ seq: acc.nextSeq++,
78
+ });
79
+ return;
80
+ }
81
+ if (type === "file_change") {
82
+ const changes = item.changes?.length
83
+ ? item.changes
84
+ : item.path
85
+ ? [{ path: item.path, kind: "update" }]
86
+ : [];
87
+ for (const change of changes) {
88
+ if (!change.path) {
89
+ continue;
90
+ }
91
+ acc.toolCalls.push({
92
+ name: toolNameForFileChange(change.kind),
93
+ args: { path: change.path },
94
+ seq: acc.nextSeq++,
95
+ });
96
+ }
97
+ return;
98
+ }
99
+ if (type === "mcp_tool_call" && (item.tool || item.server)) {
100
+ const name = item.server && item.tool
101
+ ? `${item.server}:${item.tool}`
102
+ : (item.tool ?? item.server ?? "mcp");
103
+ acc.toolCalls.push({
104
+ name,
105
+ args: item.arguments ?? {},
106
+ result: serializeToolResult(item.result),
107
+ seq: acc.nextSeq++,
108
+ });
109
+ }
110
+ }
111
+ /** Fold one Codex JSONL event into the accumulator. */
112
+ export function accumulateOpenaiEvent(acc, event) {
113
+ const type = event.type ?? "";
114
+ if (type === "turn.completed" && event.usage) {
115
+ acc.usage = mergeAgentUsage(acc.usage, normalizeOpenaiUsage(event.usage));
116
+ return;
117
+ }
118
+ if (type === "turn.failed" || type === "error" || type === "thread.error") {
119
+ acc.rawStatus = type;
120
+ if (typeof event.error === "string") {
121
+ acc.resultError = event.error;
122
+ }
123
+ else if (event.error?.message) {
124
+ acc.resultError = event.error.message;
125
+ }
126
+ else if (event.message) {
127
+ acc.resultError = event.message;
128
+ }
129
+ return;
130
+ }
131
+ if (type !== "item.completed" && type !== "item.started" && !itemFromEvent(event)) {
132
+ return;
133
+ }
134
+ if (type === "item.started") {
135
+ return;
136
+ }
137
+ const item = itemFromEvent(event);
138
+ if (!item) {
139
+ return;
140
+ }
141
+ applyItem(acc, item);
142
+ }
143
+ export function finalizeOpenaiTraceAccumulator(acc) {
144
+ const trace = finalizeTraceAccumulator(acc);
145
+ return {
146
+ ...trace,
147
+ shellCommands: [...new Set([...trace.shellCommands, ...acc.shellCommands])],
148
+ artifacts: {
149
+ ...trace.artifacts,
150
+ ...(acc.rawStatus ? { openaiRawStatus: acc.rawStatus } : {}),
151
+ ...(acc.resultError ? { openaiResultError: acc.resultError } : {}),
152
+ },
153
+ };
154
+ }
155
+ export function lastAssistantText(trace) {
156
+ for (let index = trace.messages.length - 1; index >= 0; index--) {
157
+ const message = trace.messages[index];
158
+ if (message?.role === "assistant" && message.content.trim()) {
159
+ return message.content.trim();
160
+ }
161
+ }
162
+ return "";
163
+ }
164
+ //# sourceMappingURL=openai-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-capture.js","sourceRoot":"","sources":["../src/openai-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { type HostAuthMode } from "./auth-mode.js";
2
+ import type { JudgeClassifierResult } from "./cursor-run.js";
3
+ import { type McpServerConfig } from "./mcp.js";
4
+ import type { AgentTrace, LiveAgentEvent } from "./types.js";
5
+ export type OpenaiAuthMode = HostAuthMode;
6
+ export declare const OPENAI_AUTH_MODE_ENV = "OPENAI_AUTH_MODE";
7
+ export declare const OPENAI_MISSING_KEY_MESSAGE = "OPENAI_API_KEY or CODEX_API_KEY required for OpenAI agent runs, or set OPENAI_AUTH_MODE=subscription after `codex login`";
8
+ export declare function resolveOpenaiAuthMode(raw?: string | undefined, apiKey?: string): OpenaiAuthMode;
9
+ export interface OpenaiRunOptions {
10
+ cwd: string;
11
+ prompt: string;
12
+ apiKey?: string;
13
+ authMode?: OpenaiAuthMode;
14
+ model?: string;
15
+ timeoutMs?: number;
16
+ failOnUserInput?: boolean;
17
+ onDeadlineStart?: () => void | Promise<void>;
18
+ onAgentEvent?: (event: LiveAgentEvent) => void;
19
+ bin?: string;
20
+ /** `workspace-write` for agent runs; `read-only` for classifiers. */
21
+ sandbox?: "workspace-write" | "read-only";
22
+ /** Inline MCP servers for this `codex exec` via `-c mcp_servers.<name>=…`. */
23
+ mcpServers?: Record<string, McpServerConfig>;
24
+ /** Load `~/.codex` user config and skills. Default false. */
25
+ allowUserSkills?: boolean;
26
+ }
27
+ export interface OpenaiRunResult {
28
+ status: "completed" | "failed";
29
+ trace: AgentTrace;
30
+ rawStatus?: string;
31
+ exitCode?: number | null;
32
+ stderr?: string;
33
+ }
34
+ export declare function cancelActiveOpenaiRun(): void;
35
+ export declare function takeLastOpenaiRunTrace(): AgentTrace | undefined;
36
+ export declare function formatOpenaiRunFailure(options: {
37
+ status: string;
38
+ rawStatus?: string;
39
+ exitCode?: number | null;
40
+ stderr?: string;
41
+ resultError?: string;
42
+ }): string;
43
+ export declare function resolveOpenaiBin(override?: string): Promise<string>;
44
+ /**
45
+ * Child env for the Codex CLI. Subscription mode drops API keys:
46
+ * the CLI prefers a key over the `codex login` ChatGPT session.
47
+ */
48
+ export declare function buildOpenaiEnv(authMode: OpenaiAuthMode, apiKey?: string): NodeJS.ProcessEnv;
49
+ export declare function tomlString(value: string): string;
50
+ /** One `-c mcp_servers.name={…}` override for `codex exec`. */
51
+ export declare function buildOpenaiMcpOverride(name: string, config: McpServerConfig): string;
52
+ export declare function buildOpenaiMcpConfigArgs(servers: Record<string, McpServerConfig> | undefined): string[];
53
+ export declare function buildOpenaiExecArgs(options: {
54
+ prompt: string;
55
+ cwd: string;
56
+ model?: string;
57
+ sandbox?: "workspace-write" | "read-only";
58
+ mcpServers?: Record<string, McpServerConfig>;
59
+ allowUserSkills?: boolean;
60
+ }): string[];
61
+ /** Shared Codex CLI path — `codex exec --json` → AgentTrace. */
62
+ export declare function runOpenaiAgent(options: OpenaiRunOptions): Promise<OpenaiRunResult>;
63
+ /** Classifier-only Codex path — read-only sandbox, last assistant text. */
64
+ export declare function runOpenaiClassifier(options: {
65
+ cwd: string;
66
+ prompt: string;
67
+ apiKey?: string;
68
+ bin?: string;
69
+ }): Promise<JudgeClassifierResult>;
70
+ //# sourceMappingURL=openai-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-run.d.ts","sourceRoot":"","sources":["../src/openai-run.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAA6B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,UAAU,CAAC;AAgBnE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG7D,MAAM,MAAM,cAAc,GAAG,YAAY,CAAC;AAE1C,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,eAAO,MAAM,0BAA0B,6HACoF,CAAC;AAE5H,wBAAgB,qBAAqB,CACpC,GAAG,GAAE,MAAM,GAAG,SAA6C,EAC3D,MAAM,CAAC,EAAE,MAAM,GACb,cAAc,CAOhB;AAED,MAAM,WAAW,gBAAgB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qEAAqE;IACrE,OAAO,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAC;IAC1C,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,6DAA6D;IAC7D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAsBD,wBAAgB,qBAAqB,IAAI,IAAI,CAQ5C;AAED,wBAAgB,sBAAsB,IAAI,UAAU,GAAG,SAAS,CAI/D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAgBT;AA0CD,wBAAsB,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQzE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAY3F;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,MAAM,CA2BpF;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,SAAS,GAClD,MAAM,EAAE,CASV;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,iBAAiB,GAAG,WAAW,CAAC;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,EAAE,CA2BX;AAgFD,gEAAgE;AAChE,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkGxF;AAED,2EAA2E;AAC3E,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkBjC"}