codex-task 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +36 -0
- package/LICENSE +21 -0
- package/README.md +273 -0
- package/README.zh-CN.md +209 -0
- package/THIRD_PARTY_NOTICES.md +37 -0
- package/dist/api.d.ts +8 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +355 -0
- package/dist/api.js.map +1 -0
- package/dist/backends/direct/auth.d.ts +14 -0
- package/dist/backends/direct/auth.d.ts.map +1 -0
- package/dist/backends/direct/auth.js +152 -0
- package/dist/backends/direct/auth.js.map +1 -0
- package/dist/backends/direct/http.d.ts +12 -0
- package/dist/backends/direct/http.d.ts.map +1 -0
- package/dist/backends/direct/http.js +62 -0
- package/dist/backends/direct/http.js.map +1 -0
- package/dist/backends/direct/identity.d.ts +11 -0
- package/dist/backends/direct/identity.d.ts.map +1 -0
- package/dist/backends/direct/identity.js +89 -0
- package/dist/backends/direct/identity.js.map +1 -0
- package/dist/backends/direct/index.d.ts +15 -0
- package/dist/backends/direct/index.d.ts.map +1 -0
- package/dist/backends/direct/index.js +201 -0
- package/dist/backends/direct/index.js.map +1 -0
- package/dist/backends/direct/models.d.ts +14 -0
- package/dist/backends/direct/models.d.ts.map +1 -0
- package/dist/backends/direct/models.js +83 -0
- package/dist/backends/direct/models.js.map +1 -0
- package/dist/backends/direct/protocol.d.ts +24 -0
- package/dist/backends/direct/protocol.d.ts.map +1 -0
- package/dist/backends/direct/protocol.js +131 -0
- package/dist/backends/direct/protocol.js.map +1 -0
- package/dist/backends/direct/sse.d.ts +15 -0
- package/dist/backends/direct/sse.d.ts.map +1 -0
- package/dist/backends/direct/sse.js +93 -0
- package/dist/backends/direct/sse.js.map +1 -0
- package/dist/backends/sdk.d.ts +54 -0
- package/dist/backends/sdk.d.ts.map +1 -0
- package/dist/backends/sdk.js +173 -0
- package/dist/backends/sdk.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +224 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +94 -0
- package/dist/doctor.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +30 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +10 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +30 -0
- package/dist/events.js.map +1 -0
- package/dist/fs-utils.d.ts +7 -0
- package/dist/fs-utils.d.ts.map +1 -0
- package/dist/fs-utils.js +56 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/images.d.ts +18 -0
- package/dist/images.d.ts.map +1 -0
- package/dist/images.js +102 -0
- package/dist/images.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/paths.d.ts +14 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +61 -0
- package/dist/paths.js.map +1 -0
- package/dist/skill.d.ts +2 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +6 -0
- package/dist/skill.js.map +1 -0
- package/dist/state.d.ts +20 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +134 -0
- package/dist/state.js.map +1 -0
- package/dist/types.d.ts +167 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +89 -0
- package/skills/codex-task/SKILL.md +79 -0
- package/skills/codex-task/agents/openai.yaml +4 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { CodexTaskError } from "../../errors.js";
|
|
2
|
+
export function parseSse(text) {
|
|
3
|
+
const events = [];
|
|
4
|
+
for (const line of text.split(/\r?\n/)) {
|
|
5
|
+
if (!line.startsWith("data:"))
|
|
6
|
+
continue;
|
|
7
|
+
const payload = line.slice(5).trim();
|
|
8
|
+
if (!payload || payload === "[DONE]")
|
|
9
|
+
continue;
|
|
10
|
+
try {
|
|
11
|
+
events.push(JSON.parse(payload));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Ignore keepalive and malformed non-terminal lines.
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return events;
|
|
18
|
+
}
|
|
19
|
+
function failureMessage(events) {
|
|
20
|
+
const event = events.find((item) => item.type === "response.failed" || item.type === "error");
|
|
21
|
+
if (!event)
|
|
22
|
+
return undefined;
|
|
23
|
+
const response = event["response"];
|
|
24
|
+
const error = event["error"] ??
|
|
25
|
+
response?.["error"];
|
|
26
|
+
return typeof error?.["message"] === "string" ? error["message"] : "Direct response failed";
|
|
27
|
+
}
|
|
28
|
+
function extractUsage(events) {
|
|
29
|
+
const completed = [...events].reverse().find((event) => event.type === "response.completed");
|
|
30
|
+
const response = completed?.["response"];
|
|
31
|
+
const usage = response?.["usage"];
|
|
32
|
+
if (!usage)
|
|
33
|
+
return undefined;
|
|
34
|
+
return {
|
|
35
|
+
inputTokens: typeof usage["input_tokens"] === "number" ? usage["input_tokens"] : undefined,
|
|
36
|
+
cachedInputTokens: typeof usage["input_tokens_details"] === "object" && usage["input_tokens_details"]
|
|
37
|
+
? usage["input_tokens_details"]["cached_tokens"]
|
|
38
|
+
: undefined,
|
|
39
|
+
outputTokens: typeof usage["output_tokens"] === "number" ? usage["output_tokens"] : undefined,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function extractText(events) {
|
|
43
|
+
for (const event of [...events].reverse()) {
|
|
44
|
+
if (event.type === "response.output_text.done" && typeof event["text"] === "string")
|
|
45
|
+
return event["text"];
|
|
46
|
+
if (event.type === "response.output_item.done") {
|
|
47
|
+
const item = event["item"];
|
|
48
|
+
if (item?.["type"] !== "message" || !Array.isArray(item["content"]))
|
|
49
|
+
continue;
|
|
50
|
+
const texts = item["content"]
|
|
51
|
+
.filter((content) => content["type"] === "output_text" && typeof content["text"] === "string")
|
|
52
|
+
.map((content) => content["text"]);
|
|
53
|
+
if (texts.length)
|
|
54
|
+
return texts.join("");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
const deltas = events
|
|
58
|
+
.filter((event) => event.type === "response.output_text.delta" && typeof event["delta"] === "string")
|
|
59
|
+
.map((event) => event["delta"]);
|
|
60
|
+
return deltas.length ? deltas.join("") : undefined;
|
|
61
|
+
}
|
|
62
|
+
function extractImage(events) {
|
|
63
|
+
let partial;
|
|
64
|
+
for (const event of events) {
|
|
65
|
+
if (event.type === "response.output_item.done") {
|
|
66
|
+
const item = event["item"];
|
|
67
|
+
if (item?.["type"] === "image_generation_call" && typeof item["result"] === "string") {
|
|
68
|
+
return {
|
|
69
|
+
image: Buffer.from(item["result"], "base64"),
|
|
70
|
+
imageSize: typeof item["size"] === "string" ? item["size"] : undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (typeof event.type === "string" && event.type.includes("partial_image")) {
|
|
75
|
+
const value = event["partial_image_b64"] ?? event["result"];
|
|
76
|
+
if (typeof value === "string")
|
|
77
|
+
partial = value;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return partial ? { image: Buffer.from(partial, "base64") } : {};
|
|
81
|
+
}
|
|
82
|
+
export function parseDirectResponse(text) {
|
|
83
|
+
const events = parseSse(text);
|
|
84
|
+
const failure = failureMessage(events);
|
|
85
|
+
if (failure)
|
|
86
|
+
throw new CodexTaskError("DIRECT_RESPONSE_FAILED", failure, { retryable: false });
|
|
87
|
+
return {
|
|
88
|
+
text: extractText(events),
|
|
89
|
+
...extractImage(events),
|
|
90
|
+
usage: extractUsage(events),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../../src/backends/direct/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type Input, type ThreadEvent, type ThreadOptions } from "@openai/codex-sdk";
|
|
2
|
+
import type { Artifact, CommandSummary, ReasoningEffort, TaskEvent, UsageSummary, WorkspaceTaskOptions } from "../types.js";
|
|
3
|
+
interface StructuredWorkspaceResponse {
|
|
4
|
+
status: "completed" | "needs_input" | "failed";
|
|
5
|
+
text: string;
|
|
6
|
+
questions: string[];
|
|
7
|
+
artifacts: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface SdkExecution {
|
|
10
|
+
status: StructuredWorkspaceResponse["status"];
|
|
11
|
+
text: string;
|
|
12
|
+
questions: string[];
|
|
13
|
+
threadId: string;
|
|
14
|
+
changes: string[];
|
|
15
|
+
commands: CommandSummary[];
|
|
16
|
+
artifacts: Artifact[];
|
|
17
|
+
reportedArtifacts: string[];
|
|
18
|
+
usage?: UsageSummary | undefined;
|
|
19
|
+
}
|
|
20
|
+
interface ThreadLike {
|
|
21
|
+
readonly id: string | null;
|
|
22
|
+
runStreamed(input: Input, options?: {
|
|
23
|
+
outputSchema?: unknown;
|
|
24
|
+
signal?: AbortSignal;
|
|
25
|
+
}): Promise<{
|
|
26
|
+
events: AsyncGenerator<ThreadEvent>;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
interface CodexLike {
|
|
30
|
+
startThread(options?: ThreadOptions): ThreadLike;
|
|
31
|
+
resumeThread(id: string, options?: ThreadOptions): ThreadLike;
|
|
32
|
+
}
|
|
33
|
+
export interface RunSdkTurnOptions {
|
|
34
|
+
taskId: string;
|
|
35
|
+
prompt: Input;
|
|
36
|
+
workingDirectory: string;
|
|
37
|
+
sandboxMode: WorkspaceTaskOptions["sandboxMode"];
|
|
38
|
+
networkAccess: boolean;
|
|
39
|
+
noFollowup: boolean;
|
|
40
|
+
model?: string | undefined;
|
|
41
|
+
reasoning?: ReasoningEffort | undefined;
|
|
42
|
+
timeoutMs: number;
|
|
43
|
+
signal?: AbortSignal | undefined;
|
|
44
|
+
onEvent?: ((event: TaskEvent) => void) | undefined;
|
|
45
|
+
threadId?: string | undefined;
|
|
46
|
+
outputSchema?: Record<string, unknown> | undefined;
|
|
47
|
+
codex?: CodexLike | undefined;
|
|
48
|
+
structuredResponse?: boolean | undefined;
|
|
49
|
+
}
|
|
50
|
+
export declare function runSdkTurn(options: RunSdkTurnOptions): Promise<SdkExecution>;
|
|
51
|
+
export declare function buildWorkspacePrompt(prompt: string, instructions: string | undefined, noFollowup: boolean): string;
|
|
52
|
+
export declare function resolveWorkingDirectory(path: string | undefined): string;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/backends/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,WAAW,EAEhB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EACf,SAAS,EACT,YAAY,EACZ,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAErB,UAAU,2BAA2B;IACnC,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClC;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CACT,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACzD,OAAO,CAAC;QAAE,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,CAAA;KAAE,CAAC,CAAC;CACrD;AAED,UAAU,SAAS;IACjB,WAAW,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC;IACjD,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC;CAC/D;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACjD,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACnD,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAC1C;AA6FD,wBAAsB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CA6DlF;AAeD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,CAElH;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAExE"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { Codex, } from "@openai/codex-sdk";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { CodexTaskError, usageError } from "../errors.js";
|
|
4
|
+
const WORKSPACE_SCHEMA = {
|
|
5
|
+
type: "object",
|
|
6
|
+
properties: {
|
|
7
|
+
status: { type: "string", enum: ["completed", "needs_input", "failed"] },
|
|
8
|
+
text: { type: "string" },
|
|
9
|
+
questions: { type: "array", items: { type: "string" } },
|
|
10
|
+
artifacts: { type: "array", items: { type: "string" } },
|
|
11
|
+
},
|
|
12
|
+
required: ["status", "text", "questions", "artifacts"],
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
};
|
|
15
|
+
function workspaceInstructions(noFollowup) {
|
|
16
|
+
const interaction = noFollowup
|
|
17
|
+
? "Do not ask follow-up questions. Make reasonable assumptions. Return failed only if the task is impossible."
|
|
18
|
+
: "If a critical ambiguity prevents safe completion, stop and return needs_input with concise questions. Do not call request_user_input because exec mode cannot handle it.";
|
|
19
|
+
return `You are a focused Codex worker executing a task delegated by another AI agent.
|
|
20
|
+
Use the available local tools and project instructions to complete the requested work.
|
|
21
|
+
${interaction}
|
|
22
|
+
At the end, return only the JSON object required by the output schema.
|
|
23
|
+
Use status=completed when the task is done, needs_input only when caller input is required, and failed when the task cannot be completed.
|
|
24
|
+
Put a concise handoff in text, keep questions empty unless status=needs_input, and list absolute paths for durable output files in artifacts.`;
|
|
25
|
+
}
|
|
26
|
+
function sdkReasoning(reasoning) {
|
|
27
|
+
if (reasoning === undefined)
|
|
28
|
+
return undefined;
|
|
29
|
+
if (reasoning === "low" || reasoning === "medium" || reasoning === "high" || reasoning === "xhigh")
|
|
30
|
+
return reasoning;
|
|
31
|
+
throw usageError(`SDK backend does not support reasoning=${reasoning}; use low, medium, high, or xhigh`);
|
|
32
|
+
}
|
|
33
|
+
function threadOptions(options) {
|
|
34
|
+
const reasoning = sdkReasoning(options.reasoning);
|
|
35
|
+
return {
|
|
36
|
+
workingDirectory: options.workingDirectory,
|
|
37
|
+
sandboxMode: options.sandboxMode ?? "danger-full-access",
|
|
38
|
+
approvalPolicy: "never",
|
|
39
|
+
networkAccessEnabled: options.networkAccess,
|
|
40
|
+
webSearchMode: options.networkAccess ? "live" : "disabled",
|
|
41
|
+
skipGitRepoCheck: true,
|
|
42
|
+
...(options.model ? { model: options.model } : {}),
|
|
43
|
+
...(reasoning ? { modelReasoningEffort: reasoning } : {}),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function timeoutSignal(timeoutMs, parent) {
|
|
47
|
+
const controller = new AbortController();
|
|
48
|
+
const timeout = setTimeout(() => controller.abort(new DOMException("Task timed out", "TimeoutError")), timeoutMs);
|
|
49
|
+
const abort = () => controller.abort(parent?.reason);
|
|
50
|
+
parent?.addEventListener("abort", abort, { once: true });
|
|
51
|
+
return {
|
|
52
|
+
signal: controller.signal,
|
|
53
|
+
dispose: () => {
|
|
54
|
+
clearTimeout(timeout);
|
|
55
|
+
parent?.removeEventListener("abort", abort);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function collectItem(item, changes, commands) {
|
|
60
|
+
if (item.type === "file_change" && item.status === "completed") {
|
|
61
|
+
for (const change of item.changes)
|
|
62
|
+
changes.add(change.path);
|
|
63
|
+
}
|
|
64
|
+
if (item.type === "command_execution") {
|
|
65
|
+
commands.set(item.id, { command: item.command, exitCode: item.exit_code, status: item.status });
|
|
66
|
+
}
|
|
67
|
+
return item.type === "agent_message" ? item.text : undefined;
|
|
68
|
+
}
|
|
69
|
+
function parseStructuredResponse(text, noFollowup) {
|
|
70
|
+
let parsed;
|
|
71
|
+
try {
|
|
72
|
+
parsed = JSON.parse(text);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
throw new CodexTaskError("SDK_INVALID_RESPONSE", "Codex SDK returned invalid structured output", {
|
|
76
|
+
details: text.slice(0, 1000),
|
|
77
|
+
cause: error,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (!parsed || !["completed", "needs_input", "failed"].includes(parsed.status)) {
|
|
81
|
+
throw new CodexTaskError("SDK_INVALID_RESPONSE", "Codex SDK returned an invalid task status");
|
|
82
|
+
}
|
|
83
|
+
if (noFollowup && parsed.status === "needs_input") {
|
|
84
|
+
throw new CodexTaskError("FOLLOWUP_FORBIDDEN", "Codex requested input while --no-followup was enabled");
|
|
85
|
+
}
|
|
86
|
+
return parsed;
|
|
87
|
+
}
|
|
88
|
+
export async function runSdkTurn(options) {
|
|
89
|
+
const codex = options.codex ?? new Codex();
|
|
90
|
+
const thread = options.threadId
|
|
91
|
+
? codex.resumeThread(options.threadId, threadOptions(options))
|
|
92
|
+
: codex.startThread(threadOptions(options));
|
|
93
|
+
const controlled = timeoutSignal(options.timeoutMs, options.signal);
|
|
94
|
+
const changes = new Set();
|
|
95
|
+
const commands = new Map();
|
|
96
|
+
let finalResponse = "";
|
|
97
|
+
let usage;
|
|
98
|
+
try {
|
|
99
|
+
const streamed = await thread.runStreamed(options.prompt, {
|
|
100
|
+
outputSchema: options.outputSchema ?? WORKSPACE_SCHEMA,
|
|
101
|
+
signal: controlled.signal,
|
|
102
|
+
});
|
|
103
|
+
for await (const event of streamed.events) {
|
|
104
|
+
handleSdkEvent(options, event);
|
|
105
|
+
if (event.type === "item.completed") {
|
|
106
|
+
const message = collectItem(event.item, changes, commands);
|
|
107
|
+
if (message !== undefined)
|
|
108
|
+
finalResponse = message;
|
|
109
|
+
}
|
|
110
|
+
else if (event.type === "turn.completed") {
|
|
111
|
+
usage = {
|
|
112
|
+
inputTokens: event.usage.input_tokens,
|
|
113
|
+
cachedInputTokens: event.usage.cached_input_tokens,
|
|
114
|
+
outputTokens: event.usage.output_tokens,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
else if (event.type === "turn.failed") {
|
|
118
|
+
throw new CodexTaskError("SDK_TURN_FAILED", event.error.message);
|
|
119
|
+
}
|
|
120
|
+
else if (event.type === "error") {
|
|
121
|
+
throw new CodexTaskError("SDK_EVENT_ERROR", event.message);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
if (controlled.signal.aborted) {
|
|
127
|
+
const timedOut = !options.signal?.aborted;
|
|
128
|
+
throw new CodexTaskError(timedOut ? "TIMEOUT" : "CANCELLED", timedOut ? "SDK task timed out" : "SDK task cancelled", {
|
|
129
|
+
exitCode: 130,
|
|
130
|
+
cause: error,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
controlled.dispose();
|
|
137
|
+
}
|
|
138
|
+
const threadId = thread.id;
|
|
139
|
+
if (!threadId)
|
|
140
|
+
throw new CodexTaskError("SDK_THREAD_MISSING", "Codex SDK did not return a thread id");
|
|
141
|
+
const structured = options.structuredResponse === false
|
|
142
|
+
? { status: "completed", text: finalResponse, questions: [], artifacts: [] }
|
|
143
|
+
: parseStructuredResponse(finalResponse, options.noFollowup);
|
|
144
|
+
return {
|
|
145
|
+
...structured,
|
|
146
|
+
threadId,
|
|
147
|
+
changes: [...changes],
|
|
148
|
+
commands: [...commands.values()],
|
|
149
|
+
artifacts: [],
|
|
150
|
+
reportedArtifacts: structured.artifacts,
|
|
151
|
+
usage,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function handleSdkEvent(options, event) {
|
|
155
|
+
if (event.type === "item.started" || event.type === "item.updated" || event.type === "item.completed") {
|
|
156
|
+
const item = event.item;
|
|
157
|
+
if (item.type === "reasoning")
|
|
158
|
+
return;
|
|
159
|
+
options.onEvent?.({
|
|
160
|
+
type: "progress",
|
|
161
|
+
taskId: options.taskId,
|
|
162
|
+
message: `${event.type}: ${item.type}`,
|
|
163
|
+
item,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export function buildWorkspacePrompt(prompt, instructions, noFollowup) {
|
|
168
|
+
return [workspaceInstructions(noFollowup), instructions, "Delegated task:", prompt].filter(Boolean).join("\n\n");
|
|
169
|
+
}
|
|
170
|
+
export function resolveWorkingDirectory(path) {
|
|
171
|
+
return resolve(path ?? process.cwd());
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/backends/sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { Command, Option } from "commander";
|
|
4
|
+
import { dispatch, streamTaskEvents } from "./api.js";
|
|
5
|
+
import { runDoctor } from "./doctor.js";
|
|
6
|
+
import { asCodexTaskError, usageError } from "./errors.js";
|
|
7
|
+
import { companionSkillPath } from "./skill.js";
|
|
8
|
+
import { runGarbageCollection } from "./state.js";
|
|
9
|
+
function collect(value, previous) {
|
|
10
|
+
return [...previous, value];
|
|
11
|
+
}
|
|
12
|
+
function packageVersion() {
|
|
13
|
+
const manifest = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
|
|
14
|
+
if (typeof manifest.version !== "string" || manifest.version.length === 0) {
|
|
15
|
+
throw new Error("package.json does not contain a valid version");
|
|
16
|
+
}
|
|
17
|
+
return manifest.version;
|
|
18
|
+
}
|
|
19
|
+
async function readStdin() {
|
|
20
|
+
const chunks = [];
|
|
21
|
+
for await (const chunk of process.stdin)
|
|
22
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
23
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
24
|
+
}
|
|
25
|
+
async function resolvePrompt(positional, flags) {
|
|
26
|
+
const sources = Number(positional !== undefined) + Number(flags.promptFile !== undefined) + Number(!process.stdin.isTTY);
|
|
27
|
+
if (sources === 0)
|
|
28
|
+
throw usageError("provide a prompt argument, --prompt-file, or stdin");
|
|
29
|
+
if (sources > 1)
|
|
30
|
+
throw usageError("prompt argument, --prompt-file, and stdin are mutually exclusive");
|
|
31
|
+
const prompt = positional ?? (flags.promptFile ? readFileSync(flags.promptFile, "utf8") : await readStdin());
|
|
32
|
+
if (!prompt.trim())
|
|
33
|
+
throw usageError("prompt must not be empty");
|
|
34
|
+
return prompt;
|
|
35
|
+
}
|
|
36
|
+
function durationMs(value) {
|
|
37
|
+
if (!value)
|
|
38
|
+
return undefined;
|
|
39
|
+
const match = value.match(/^(\d+(?:\.\d+)?)(ms|s|m|h)?$/);
|
|
40
|
+
if (!match)
|
|
41
|
+
throw usageError(`invalid duration: ${value}`);
|
|
42
|
+
const amount = Number(match[1]);
|
|
43
|
+
const unit = match[2] ?? "ms";
|
|
44
|
+
const factor = unit === "h" ? 3_600_000 : unit === "m" ? 60_000 : unit === "s" ? 1_000 : 1;
|
|
45
|
+
return amount * factor;
|
|
46
|
+
}
|
|
47
|
+
function integer(value, name) {
|
|
48
|
+
if (value === undefined)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (!/^\d+$/.test(value))
|
|
51
|
+
throw usageError(`${name} must be an integer`);
|
|
52
|
+
return Number(value);
|
|
53
|
+
}
|
|
54
|
+
function jsonFile(path) {
|
|
55
|
+
if (!path)
|
|
56
|
+
return undefined;
|
|
57
|
+
try {
|
|
58
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
throw usageError(`could not parse JSON file ${path}: ${error instanceof Error ? error.message : String(error)}`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function instructions(flags) {
|
|
65
|
+
if (flags.instructions && flags.instructionsFile) {
|
|
66
|
+
throw usageError("--instructions and --instructions-file are mutually exclusive");
|
|
67
|
+
}
|
|
68
|
+
return flags.instructions ?? (flags.instructionsFile ? readFileSync(flags.instructionsFile, "utf8") : undefined);
|
|
69
|
+
}
|
|
70
|
+
function common(flags) {
|
|
71
|
+
return {
|
|
72
|
+
backend: flags.backend,
|
|
73
|
+
model: flags.model,
|
|
74
|
+
reasoning: flags.reasoning,
|
|
75
|
+
instructions: instructions(flags),
|
|
76
|
+
outputSchema: jsonFile(flags.schema),
|
|
77
|
+
timeoutMs: durationMs(flags.timeout),
|
|
78
|
+
retries: integer(flags.retries, "retries"),
|
|
79
|
+
codexHome: flags.codexHome,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function addCommonOptions(command, defaultBackend) {
|
|
83
|
+
return command
|
|
84
|
+
.addOption(new Option("--backend <backend>", "execution backend").choices(["direct", "sdk"]).default(defaultBackend))
|
|
85
|
+
.option("--prompt-file <path>", "read prompt from a UTF-8 file")
|
|
86
|
+
.option("--model <model>", "model override")
|
|
87
|
+
.addOption(new Option("--reasoning <effort>", "reasoning effort").choices([
|
|
88
|
+
"none",
|
|
89
|
+
"low",
|
|
90
|
+
"medium",
|
|
91
|
+
"high",
|
|
92
|
+
"xhigh",
|
|
93
|
+
"max",
|
|
94
|
+
"ultra",
|
|
95
|
+
]))
|
|
96
|
+
.option("--instructions <text>", "additional worker instructions")
|
|
97
|
+
.option("--instructions-file <path>", "read additional instructions from a file")
|
|
98
|
+
.option("--schema <path>", "JSON Schema for the final text response")
|
|
99
|
+
.option("--timeout <duration>", "timeout, for example 30s, 10m, or 1h")
|
|
100
|
+
.option("--retries <count>", "Direct transient retries")
|
|
101
|
+
.option("--codex-home <path>", "Codex home directory")
|
|
102
|
+
.option("--stream", "emit JSONL progress events");
|
|
103
|
+
}
|
|
104
|
+
function writeJson(value) {
|
|
105
|
+
process.stdout.write(`${JSON.stringify(value, null, 2)}\n`);
|
|
106
|
+
}
|
|
107
|
+
function resultExitCode(result) {
|
|
108
|
+
if (result.status === "completed" || result.status === "needs_input")
|
|
109
|
+
return 0;
|
|
110
|
+
if (result.status === "cancelled")
|
|
111
|
+
return 130;
|
|
112
|
+
return result.error.code === "USAGE_ERROR" ? 2 : 1;
|
|
113
|
+
}
|
|
114
|
+
async function execute(request, stream) {
|
|
115
|
+
if (stream) {
|
|
116
|
+
let exitCode = 0;
|
|
117
|
+
for await (const event of streamTaskEvents(request)) {
|
|
118
|
+
process.stdout.write(`${JSON.stringify(event)}\n`);
|
|
119
|
+
if (event.type === "failed")
|
|
120
|
+
exitCode = resultExitCode(event.result);
|
|
121
|
+
}
|
|
122
|
+
process.exitCode = exitCode;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const result = await dispatch(request);
|
|
126
|
+
writeJson(result);
|
|
127
|
+
process.exitCode = resultExitCode(result);
|
|
128
|
+
}
|
|
129
|
+
const program = new Command();
|
|
130
|
+
program
|
|
131
|
+
.name("codex-task")
|
|
132
|
+
.description("Unofficial agent-to-agent text, image, and workspace task runner for Codex")
|
|
133
|
+
.version(packageVersion());
|
|
134
|
+
addCommonOptions(program.command("text [prompt]").description("generate a focused text result"), "direct").action(async (prompt, flags) => {
|
|
135
|
+
await execute({ kind: "text", options: { ...common(flags), prompt: await resolvePrompt(prompt, flags) } }, flags.stream ?? false);
|
|
136
|
+
});
|
|
137
|
+
addCommonOptions(program.command("image [prompt]").description("generate or edit images"), "direct")
|
|
138
|
+
.option("-i, --image <path>", "reference image; repeat up to five times", collect, [])
|
|
139
|
+
.option("-o, --output <path>", "PNG file or output directory")
|
|
140
|
+
.option("-n, --count <count>", "number of images", "1")
|
|
141
|
+
.option("--concurrency <count>", "parallel image requests", "1")
|
|
142
|
+
.option("--size <size>", "auto or WIDTHxHEIGHT", "auto")
|
|
143
|
+
.addOption(new Option("--quality <quality>").choices(["auto", "low", "medium", "high"]).default("auto"))
|
|
144
|
+
.addOption(new Option("--background <background>").choices(["auto", "opaque", "transparent"]).default("auto"))
|
|
145
|
+
.option("--overwrite", "replace existing output files")
|
|
146
|
+
.option("--cwd <path>", "working directory for SDK image generation")
|
|
147
|
+
.action(async (prompt, flags) => {
|
|
148
|
+
const options = {
|
|
149
|
+
...common(flags),
|
|
150
|
+
prompt: await resolvePrompt(prompt, flags),
|
|
151
|
+
imagePaths: flags["image"],
|
|
152
|
+
output: flags["output"],
|
|
153
|
+
count: integer(flags["count"], "count"),
|
|
154
|
+
concurrency: integer(flags["concurrency"], "concurrency"),
|
|
155
|
+
size: flags["size"],
|
|
156
|
+
quality: flags["quality"],
|
|
157
|
+
background: flags["background"],
|
|
158
|
+
overwrite: flags["overwrite"] ?? false,
|
|
159
|
+
workingDirectory: flags["cwd"],
|
|
160
|
+
};
|
|
161
|
+
await execute({ kind: "image", options }, flags.stream ?? false);
|
|
162
|
+
});
|
|
163
|
+
addCommonOptions(program.command("task [prompt]").description("run a Codex workspace task"), "direct")
|
|
164
|
+
.option("--cwd <path>", "working directory", process.cwd())
|
|
165
|
+
.addOption(new Option("--sandbox <mode>", "sandbox mode")
|
|
166
|
+
.choices(["read-only", "workspace-write", "danger-full-access"])
|
|
167
|
+
.default("danger-full-access"))
|
|
168
|
+
.option("--no-network", "disable network access")
|
|
169
|
+
.option("--no-followup", "forbid needs_input; complete or fail in one caller turn")
|
|
170
|
+
.action(async (prompt, flags) => {
|
|
171
|
+
if (flags.backend !== "sdk")
|
|
172
|
+
throw usageError("task requires explicit --backend sdk");
|
|
173
|
+
await execute({
|
|
174
|
+
kind: "task",
|
|
175
|
+
options: {
|
|
176
|
+
...common(flags),
|
|
177
|
+
backend: "sdk",
|
|
178
|
+
prompt: await resolvePrompt(prompt, flags),
|
|
179
|
+
workingDirectory: flags["cwd"],
|
|
180
|
+
sandboxMode: flags["sandbox"],
|
|
181
|
+
networkAccess: flags["network"] ?? true,
|
|
182
|
+
noFollowup: flags["followup"] === false,
|
|
183
|
+
},
|
|
184
|
+
}, flags.stream ?? false);
|
|
185
|
+
});
|
|
186
|
+
addCommonOptions(program.command("resume <task-id> [answer]").description("resume a task awaiting input"), "sdk")
|
|
187
|
+
.option("--no-followup", "forbid another needs_input result")
|
|
188
|
+
.action(async (taskId, answer, flags) => {
|
|
189
|
+
await execute({
|
|
190
|
+
kind: "resume",
|
|
191
|
+
options: {
|
|
192
|
+
...common(flags),
|
|
193
|
+
taskId,
|
|
194
|
+
answer: await resolvePrompt(answer, flags),
|
|
195
|
+
noFollowup: flags["followup"] === false,
|
|
196
|
+
},
|
|
197
|
+
}, flags.stream ?? false);
|
|
198
|
+
});
|
|
199
|
+
program.command("doctor").description("inspect local Direct and SDK readiness without sending a model request").action(() => {
|
|
200
|
+
writeJson(runDoctor());
|
|
201
|
+
});
|
|
202
|
+
program.command("gc").description("remove expired CodexTask state and temporary artifacts").action(() => {
|
|
203
|
+
writeJson(runGarbageCollection());
|
|
204
|
+
});
|
|
205
|
+
program
|
|
206
|
+
.command("skill")
|
|
207
|
+
.description("inspect the packaged companion skill")
|
|
208
|
+
.command("path")
|
|
209
|
+
.description("print the companion skill directory")
|
|
210
|
+
.action(() => writeJson({ path: companionSkillPath() }));
|
|
211
|
+
program.parseAsync(process.argv).catch((error) => {
|
|
212
|
+
const normalized = asCodexTaskError(error);
|
|
213
|
+
writeJson({
|
|
214
|
+
status: "failed",
|
|
215
|
+
error: {
|
|
216
|
+
code: normalized.code,
|
|
217
|
+
message: normalized.message,
|
|
218
|
+
retryable: normalized.retryable,
|
|
219
|
+
details: normalized.details,
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
process.exitCode = normalized.exitCode;
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ReasoningEffort } from "./types.js";
|
|
2
|
+
export interface UserConfig {
|
|
3
|
+
codexHome?: string | undefined;
|
|
4
|
+
directModel?: string | undefined;
|
|
5
|
+
directReasoning?: ReasoningEffort | undefined;
|
|
6
|
+
directTextTimeoutMs?: number | undefined;
|
|
7
|
+
directImageTimeoutMs?: number | undefined;
|
|
8
|
+
sdkTimeoutMs?: number | undefined;
|
|
9
|
+
retries?: number | undefined;
|
|
10
|
+
proxy?: string | undefined;
|
|
11
|
+
tempTtlMs?: number | undefined;
|
|
12
|
+
pendingTaskTtlMs?: number | undefined;
|
|
13
|
+
tempMaxBytes?: number | undefined;
|
|
14
|
+
}
|
|
15
|
+
export interface ResolvedConfig {
|
|
16
|
+
codexHome: string;
|
|
17
|
+
directModel?: string | undefined;
|
|
18
|
+
directReasoning: ReasoningEffort;
|
|
19
|
+
directTextTimeoutMs: number;
|
|
20
|
+
directImageTimeoutMs: number;
|
|
21
|
+
sdkTimeoutMs: number;
|
|
22
|
+
retries: number;
|
|
23
|
+
proxy?: string | undefined;
|
|
24
|
+
tempTtlMs: number;
|
|
25
|
+
pendingTaskTtlMs: number;
|
|
26
|
+
tempMaxBytes: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function loadConfig(overrides?: UserConfig): ResolvedConfig;
|
|
29
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC9C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AA2CD,wBAAgB,UAAU,CAAC,SAAS,GAAE,UAAe,GAAG,cAAc,CA8BrE"}
|