@sireai/optimus 0.1.1
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/.env.example +16 -0
- package/LICENSE +21 -0
- package/README.md +104 -0
- package/dist/cli/optimus.d.ts +2 -0
- package/dist/cli/optimus.js +2951 -0
- package/dist/cli/optimus.js.map +1 -0
- package/dist/cli/self-update.d.ts +49 -0
- package/dist/cli/self-update.js +264 -0
- package/dist/cli/self-update.js.map +1 -0
- package/dist/config/load-config.d.ts +3 -0
- package/dist/config/load-config.js +321 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/optimus-paths.d.ts +13 -0
- package/dist/config/optimus-paths.js +44 -0
- package/dist/config/optimus-paths.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/jira/jira-cli.d.ts +1 -0
- package/dist/integrations/jira/jira-cli.js +278 -0
- package/dist/integrations/jira/jira-cli.js.map +1 -0
- package/dist/integrations/jira/jira-client.d.ts +99 -0
- package/dist/integrations/jira/jira-client.js +521 -0
- package/dist/integrations/jira/jira-client.js.map +1 -0
- package/dist/integrations/jira/jira-submit.d.ts +71 -0
- package/dist/integrations/jira/jira-submit.js +351 -0
- package/dist/integrations/jira/jira-submit.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-auth-resolver.d.ts +23 -0
- package/dist/problem-solving-core/codex/codex-auth-resolver.js +136 -0
- package/dist/problem-solving-core/codex/codex-auth-resolver.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-connectivity-checks.d.ts +6 -0
- package/dist/problem-solving-core/codex/codex-connectivity-checks.js +81 -0
- package/dist/problem-solving-core/codex/codex-connectivity-checks.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-failure-classifier.d.ts +2 -0
- package/dist/problem-solving-core/codex/codex-failure-classifier.js +49 -0
- package/dist/problem-solving-core/codex/codex-failure-classifier.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-global-config.d.ts +17 -0
- package/dist/problem-solving-core/codex/codex-global-config.js +100 -0
- package/dist/problem-solving-core/codex/codex-global-config.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-preflight.d.ts +13 -0
- package/dist/problem-solving-core/codex/codex-preflight.js +142 -0
- package/dist/problem-solving-core/codex/codex-preflight.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-provider-profile.d.ts +14 -0
- package/dist/problem-solving-core/codex/codex-provider-profile.js +68 -0
- package/dist/problem-solving-core/codex/codex-provider-profile.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-required-env.d.ts +3 -0
- package/dist/problem-solving-core/codex/codex-required-env.js +21 -0
- package/dist/problem-solving-core/codex/codex-required-env.js.map +1 -0
- package/dist/problem-solving-core/codex/codex-runner.d.ts +37 -0
- package/dist/problem-solving-core/codex/codex-runner.js +926 -0
- package/dist/problem-solving-core/codex/codex-runner.js.map +1 -0
- package/dist/problem-solving-core/codex/evolution-skill-guard.d.ts +36 -0
- package/dist/problem-solving-core/codex/evolution-skill-guard.js +143 -0
- package/dist/problem-solving-core/codex/evolution-skill-guard.js.map +1 -0
- package/dist/problem-solving-core/codex/repo-memory-service.d.ts +24 -0
- package/dist/problem-solving-core/codex/repo-memory-service.js +114 -0
- package/dist/problem-solving-core/codex/repo-memory-service.js.map +1 -0
- package/dist/problem-solving-core/codex/skill-sync-service.d.ts +35 -0
- package/dist/problem-solving-core/codex/skill-sync-service.js +280 -0
- package/dist/problem-solving-core/codex/skill-sync-service.js.map +1 -0
- package/dist/task-environment/cancellation/task-abort-registry.d.ts +17 -0
- package/dist/task-environment/cancellation/task-abort-registry.js +51 -0
- package/dist/task-environment/cancellation/task-abort-registry.js.map +1 -0
- package/dist/task-environment/cancellation/task-cancellation-service.d.ts +25 -0
- package/dist/task-environment/cancellation/task-cancellation-service.js +54 -0
- package/dist/task-environment/cancellation/task-cancellation-service.js.map +1 -0
- package/dist/task-environment/cancellation/task-cleanup-service.d.ts +22 -0
- package/dist/task-environment/cancellation/task-cleanup-service.js +67 -0
- package/dist/task-environment/cancellation/task-cleanup-service.js.map +1 -0
- package/dist/task-environment/delivery/commit-message/bugfix-commit-message-template.d.ts +13 -0
- package/dist/task-environment/delivery/commit-message/bugfix-commit-message-template.js +83 -0
- package/dist/task-environment/delivery/commit-message/bugfix-commit-message-template.js.map +1 -0
- package/dist/task-environment/delivery/commit-message/commit-message-builder.d.ts +6 -0
- package/dist/task-environment/delivery/commit-message/commit-message-builder.js +15 -0
- package/dist/task-environment/delivery/commit-message/commit-message-builder.js.map +1 -0
- package/dist/task-environment/delivery/commit-message/commit-message-template-types.d.ts +16 -0
- package/dist/task-environment/delivery/commit-message/commit-message-template-types.js +2 -0
- package/dist/task-environment/delivery/commit-message/commit-message-template-types.js.map +1 -0
- package/dist/task-environment/delivery/feishu-analysis-doc-service.d.ts +50 -0
- package/dist/task-environment/delivery/feishu-analysis-doc-service.js +454 -0
- package/dist/task-environment/delivery/feishu-analysis-doc-service.js.map +1 -0
- package/dist/task-environment/delivery/feishu-card-renderer.d.ts +38 -0
- package/dist/task-environment/delivery/feishu-card-renderer.js +449 -0
- package/dist/task-environment/delivery/feishu-card-renderer.js.map +1 -0
- package/dist/task-environment/delivery/feishu-content/feishu-content-renderer.d.ts +34 -0
- package/dist/task-environment/delivery/feishu-content/feishu-content-renderer.js +201 -0
- package/dist/task-environment/delivery/feishu-content/feishu-content-renderer.js.map +1 -0
- package/dist/task-environment/delivery/feishu-content/feishu-copy-config.d.ts +27 -0
- package/dist/task-environment/delivery/feishu-content/feishu-copy-config.js +74 -0
- package/dist/task-environment/delivery/feishu-content/feishu-copy-config.js.map +1 -0
- package/dist/task-environment/delivery/feishu-notifier.d.ts +45 -0
- package/dist/task-environment/delivery/feishu-notifier.js +250 -0
- package/dist/task-environment/delivery/feishu-notifier.js.map +1 -0
- package/dist/task-environment/delivery/feishu-templates/analysis-message-template.d.ts +6 -0
- package/dist/task-environment/delivery/feishu-templates/analysis-message-template.js +39 -0
- package/dist/task-environment/delivery/feishu-templates/analysis-message-template.js.map +1 -0
- package/dist/task-environment/delivery/feishu-templates/bugfix-message-template.d.ts +6 -0
- package/dist/task-environment/delivery/feishu-templates/bugfix-message-template.js +40 -0
- package/dist/task-environment/delivery/feishu-templates/bugfix-message-template.js.map +1 -0
- package/dist/task-environment/delivery/feishu-templates/default-message-template.d.ts +6 -0
- package/dist/task-environment/delivery/feishu-templates/default-message-template.js +33 -0
- package/dist/task-environment/delivery/feishu-templates/default-message-template.js.map +1 -0
- package/dist/task-environment/delivery/feishu-templates/patch-message-template.d.ts +6 -0
- package/dist/task-environment/delivery/feishu-templates/patch-message-template.js +40 -0
- package/dist/task-environment/delivery/feishu-templates/patch-message-template.js.map +1 -0
- package/dist/task-environment/delivery/feishu-templates/template-registry.d.ts +2 -0
- package/dist/task-environment/delivery/feishu-templates/template-registry.js +11 -0
- package/dist/task-environment/delivery/feishu-templates/template-registry.js.map +1 -0
- package/dist/task-environment/delivery/feishu-templates/template-types.d.ts +20 -0
- package/dist/task-environment/delivery/feishu-templates/template-types.js +2 -0
- package/dist/task-environment/delivery/feishu-templates/template-types.js.map +1 -0
- package/dist/task-environment/delivery/task-delivery-dispatcher.d.ts +14 -0
- package/dist/task-environment/delivery/task-delivery-dispatcher.js +109 -0
- package/dist/task-environment/delivery/task-delivery-dispatcher.js.map +1 -0
- package/dist/task-environment/delivery/task-delivery-service.d.ts +33 -0
- package/dist/task-environment/delivery/task-delivery-service.js +432 -0
- package/dist/task-environment/delivery/task-delivery-service.js.map +1 -0
- package/dist/task-environment/delivery/task-publication-service.d.ts +97 -0
- package/dist/task-environment/delivery/task-publication-service.js +1369 -0
- package/dist/task-environment/delivery/task-publication-service.js.map +1 -0
- package/dist/task-environment/execution-addresses.d.ts +40 -0
- package/dist/task-environment/execution-addresses.js +63 -0
- package/dist/task-environment/execution-addresses.js.map +1 -0
- package/dist/task-environment/intake/cli-file-intake.d.ts +12 -0
- package/dist/task-environment/intake/cli-file-intake.js +56 -0
- package/dist/task-environment/intake/cli-file-intake.js.map +1 -0
- package/dist/task-environment/intake/manual-problem-intake.d.ts +3 -0
- package/dist/task-environment/intake/manual-problem-intake.js +57 -0
- package/dist/task-environment/intake/manual-problem-intake.js.map +1 -0
- package/dist/task-environment/intake/polling-problem-intake.d.ts +14 -0
- package/dist/task-environment/intake/polling-problem-intake.js +232 -0
- package/dist/task-environment/intake/polling-problem-intake.js.map +1 -0
- package/dist/task-environment/observability/logger.d.ts +76 -0
- package/dist/task-environment/observability/logger.js +604 -0
- package/dist/task-environment/observability/logger.js.map +1 -0
- package/dist/task-environment/observability/runtime-panel.d.ts +82 -0
- package/dist/task-environment/observability/runtime-panel.js +1008 -0
- package/dist/task-environment/observability/runtime-panel.js.map +1 -0
- package/dist/task-environment/observability/sound-notifier.d.ts +18 -0
- package/dist/task-environment/observability/sound-notifier.js +71 -0
- package/dist/task-environment/observability/sound-notifier.js.map +1 -0
- package/dist/task-environment/orchestration/execution-context-assembler.d.ts +41 -0
- package/dist/task-environment/orchestration/execution-context-assembler.js +464 -0
- package/dist/task-environment/orchestration/execution-context-assembler.js.map +1 -0
- package/dist/task-environment/orchestration/git-change-classifier.d.ts +19 -0
- package/dist/task-environment/orchestration/git-change-classifier.js +106 -0
- package/dist/task-environment/orchestration/git-change-classifier.js.map +1 -0
- package/dist/task-environment/orchestration/harness-registry.d.ts +27 -0
- package/dist/task-environment/orchestration/harness-registry.js +116 -0
- package/dist/task-environment/orchestration/harness-registry.js.map +1 -0
- package/dist/task-environment/orchestration/harness-resolver.d.ts +8 -0
- package/dist/task-environment/orchestration/harness-resolver.js +39 -0
- package/dist/task-environment/orchestration/harness-resolver.js.map +1 -0
- package/dist/task-environment/orchestration/task-orchestrator.d.ts +45 -0
- package/dist/task-environment/orchestration/task-orchestrator.js +1122 -0
- package/dist/task-environment/orchestration/task-orchestrator.js.map +1 -0
- package/dist/task-environment/orchestration/task-package-assembler.d.ts +4 -0
- package/dist/task-environment/orchestration/task-package-assembler.js +10 -0
- package/dist/task-environment/orchestration/task-package-assembler.js.map +1 -0
- package/dist/task-environment/orchestration/triage-agent.d.ts +54 -0
- package/dist/task-environment/orchestration/triage-agent.js +636 -0
- package/dist/task-environment/orchestration/triage-agent.js.map +1 -0
- package/dist/task-environment/orchestration/triage-runner.d.ts +65 -0
- package/dist/task-environment/orchestration/triage-runner.js +655 -0
- package/dist/task-environment/orchestration/triage-runner.js.map +1 -0
- package/dist/task-environment/publication-target.d.ts +12 -0
- package/dist/task-environment/publication-target.js +174 -0
- package/dist/task-environment/publication-target.js.map +1 -0
- package/dist/task-environment/runtime/blocking-event-queue.d.ts +7 -0
- package/dist/task-environment/runtime/blocking-event-queue.js +27 -0
- package/dist/task-environment/runtime/blocking-event-queue.js.map +1 -0
- package/dist/task-environment/runtime/optimus-runtime.d.ts +69 -0
- package/dist/task-environment/runtime/optimus-runtime.js +751 -0
- package/dist/task-environment/runtime/optimus-runtime.js.map +1 -0
- package/dist/task-environment/storage/sqlite-event-store.d.ts +52 -0
- package/dist/task-environment/storage/sqlite-event-store.js +288 -0
- package/dist/task-environment/storage/sqlite-event-store.js.map +1 -0
- package/dist/task-environment/storage/sqlite-task-store.d.ts +122 -0
- package/dist/task-environment/storage/sqlite-task-store.js +1182 -0
- package/dist/task-environment/storage/sqlite-task-store.js.map +1 -0
- package/dist/types.d.ts +629 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/embedded-skills/shared/repo-inspection/SKILL.md +9 -0
- package/embedded-skills/shared/repo-inspection/skill.json +5 -0
- package/embedded-skills/task/bugfix/android-debug-protocol/SKILL.md +10 -0
- package/embedded-skills/task/bugfix/android-debug-protocol/skill.json +6 -0
- package/harness/AGENTS.md +30 -0
- package/harness/CHECKLIST.md +44 -0
- package/harness/CONSTRAINTS.md +60 -0
- package/harness/FRAMEWORK.md +28 -0
- package/harness/GOAL.md +28 -0
- package/harness/HANDOFF.md +45 -0
- package/harness/TASK_PLAN.md +79 -0
- package/optimus.config.template.json +34 -0
- package/package.json +109 -0
- package/task-harnesses/bugfix/ACCEPT.md +47 -0
- package/task-harnesses/bugfix/CONSTRAINTS.md +46 -0
- package/task-harnesses/bugfix/CONTEXT.md +29 -0
- package/task-harnesses/bugfix/EVOLUTION.md +82 -0
- package/task-harnesses/bugfix/ROLE.md +29 -0
- package/task-harnesses/bugfix/STANDARD.md +250 -0
- package/task-harnesses/bugfix/manifest.json +13 -0
- package/task-harnesses/registry.json +8 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Failure classification normalizes raw Codex and provider error text into stable failure categories.
|
|
2
|
+
// The runner, health-check flow, and scheduler diagnostics all depend on this shared mapping so failures are interpreted consistently.
|
|
3
|
+
// This module is intentionally heuristic and string-based; it does not own retry policy or recovery behavior.
|
|
4
|
+
// Failure classification is shared between health-check and task execution so scheduler diagnostics stay consistent.
|
|
5
|
+
export function classifyCodexFailureCategory(message) {
|
|
6
|
+
const normalized = message.toLowerCase();
|
|
7
|
+
if (normalized.includes("timed out") || normalized.includes("timeout")) {
|
|
8
|
+
return "timeout";
|
|
9
|
+
}
|
|
10
|
+
if (normalized.includes("abort") || normalized.includes("aborted")) {
|
|
11
|
+
return "unknown";
|
|
12
|
+
}
|
|
13
|
+
if (normalized.includes("api key") ||
|
|
14
|
+
normalized.includes("missing environment variable") ||
|
|
15
|
+
normalized.includes("auth") ||
|
|
16
|
+
normalized.includes("authentication") ||
|
|
17
|
+
normalized.includes("unauthorized") ||
|
|
18
|
+
normalized.includes("forbidden")) {
|
|
19
|
+
return "auth_missing";
|
|
20
|
+
}
|
|
21
|
+
if (normalized.includes("error sending request for url") ||
|
|
22
|
+
normalized.includes("dns") ||
|
|
23
|
+
normalized.includes("network") ||
|
|
24
|
+
normalized.includes("econn") ||
|
|
25
|
+
normalized.includes("socket") ||
|
|
26
|
+
normalized.includes("connection reset") ||
|
|
27
|
+
normalized.includes("connection refused") ||
|
|
28
|
+
normalized.includes("stream disconnected")) {
|
|
29
|
+
return "network_error";
|
|
30
|
+
}
|
|
31
|
+
if (normalized.includes("provider") ||
|
|
32
|
+
normalized.includes("bad gateway") ||
|
|
33
|
+
normalized.includes("service unavailable") ||
|
|
34
|
+
normalized.includes("rate limit") ||
|
|
35
|
+
normalized.includes("too many requests")) {
|
|
36
|
+
return "provider_error";
|
|
37
|
+
}
|
|
38
|
+
if (normalized.includes("sandbox") ||
|
|
39
|
+
normalized.includes("workspace") ||
|
|
40
|
+
normalized.includes("permission") ||
|
|
41
|
+
normalized.includes("enoent")) {
|
|
42
|
+
return "environment_error";
|
|
43
|
+
}
|
|
44
|
+
if (normalized.includes("schema") || normalized.includes("json")) {
|
|
45
|
+
return "schema_error";
|
|
46
|
+
}
|
|
47
|
+
return "unknown";
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=codex-failure-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-failure-classifier.js","sourceRoot":"","sources":["../../../src/problem-solving-core/codex/codex-failure-classifier.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,uIAAuI;AACvI,8GAA8G;AAI9G,qHAAqH;AACrH,MAAM,UAAU,4BAA4B,CAAC,OAAe;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAEzC,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACnE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACnD,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3B,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACrC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;QACnC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,EAChC,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IACE,UAAU,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QACpD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC1B,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC5B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC7B,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACvC,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACzC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC1C,CAAC;QACD,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,IACE,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC/B,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC1C,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QACjC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACxC,CAAC;QACD,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,IACE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC9B,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;QAChC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;QACjC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC7B,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACjE,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { OptimusConfig } from "../../types.js";
|
|
2
|
+
export interface GlobalCodexModelProviderConfig {
|
|
3
|
+
providerId: string;
|
|
4
|
+
displayName?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
envKey?: string;
|
|
7
|
+
wireApi?: "responses" | "chat";
|
|
8
|
+
}
|
|
9
|
+
export interface GlobalCodexConfigSnapshot {
|
|
10
|
+
sourcePath: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
modelProvider?: string;
|
|
13
|
+
providers: Record<string, GlobalCodexModelProviderConfig>;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveGlobalCodexConfigPath(config: OptimusConfig, processEnv?: NodeJS.ProcessEnv): string;
|
|
16
|
+
export declare function resolveGlobalCodexHomeDir(config: OptimusConfig, processEnv?: NodeJS.ProcessEnv): string;
|
|
17
|
+
export declare function readGlobalCodexConfigSnapshot(config: OptimusConfig, processEnv?: NodeJS.ProcessEnv): GlobalCodexConfigSnapshot | undefined;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Global Codex config helpers read user-level Codex settings when Optimus is configured to inherit them.
|
|
2
|
+
// They provide a minimal parser for the subset of config we need: model, model_provider, and model_providers.* provider definitions.
|
|
3
|
+
// This module only reads and interprets config.toml state; it does not resolve secrets, mutate CODEX_HOME, or execute SDK calls.
|
|
4
|
+
import { readFileSync } from "node:fs";
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
export function resolveGlobalCodexConfigPath(config, processEnv = process.env) {
|
|
8
|
+
const configuredPath = config.codex.globalConfigPath?.trim();
|
|
9
|
+
if (configuredPath) {
|
|
10
|
+
return configuredPath;
|
|
11
|
+
}
|
|
12
|
+
const homeDir = processEnv.HOME?.trim() || homedir();
|
|
13
|
+
return join(homeDir, ".codex", "config.toml");
|
|
14
|
+
}
|
|
15
|
+
export function resolveGlobalCodexHomeDir(config, processEnv = process.env) {
|
|
16
|
+
return dirname(resolveGlobalCodexConfigPath(config, processEnv));
|
|
17
|
+
}
|
|
18
|
+
export function readGlobalCodexConfigSnapshot(config, processEnv = process.env) {
|
|
19
|
+
const sourcePath = resolveGlobalCodexConfigPath(config, processEnv);
|
|
20
|
+
let raw = "";
|
|
21
|
+
try {
|
|
22
|
+
raw = readFileSync(sourcePath, "utf8");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
let model;
|
|
28
|
+
let modelProvider;
|
|
29
|
+
let currentSection;
|
|
30
|
+
const providers = {};
|
|
31
|
+
for (const line of raw.split(/\r?\n/)) {
|
|
32
|
+
const trimmed = line.trim();
|
|
33
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const sectionMatch = trimmed.match(/^\[(.+)\]$/);
|
|
37
|
+
if (sectionMatch?.[1]) {
|
|
38
|
+
currentSection = sectionMatch[1].trim();
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const assignment = trimmed.match(/^([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.+)$/);
|
|
42
|
+
if (!assignment?.[1] || assignment[2] === undefined) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const key = assignment[1].trim();
|
|
46
|
+
const value = normalizeTomlString(assignment[2]);
|
|
47
|
+
if (!value) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (!currentSection) {
|
|
51
|
+
if (key === "model") {
|
|
52
|
+
model = value;
|
|
53
|
+
}
|
|
54
|
+
if (key === "model_provider") {
|
|
55
|
+
modelProvider = value;
|
|
56
|
+
}
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const providerPrefix = "model_providers.";
|
|
60
|
+
if (!currentSection.startsWith(providerPrefix)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const providerId = currentSection.slice(providerPrefix.length).trim();
|
|
64
|
+
if (!providerId) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const provider = (providers[providerId] ??= { providerId });
|
|
68
|
+
if (key === "name") {
|
|
69
|
+
provider.displayName = value;
|
|
70
|
+
}
|
|
71
|
+
if (key === "base_url") {
|
|
72
|
+
provider.baseUrl = value;
|
|
73
|
+
}
|
|
74
|
+
if (key === "env_key") {
|
|
75
|
+
provider.envKey = value;
|
|
76
|
+
}
|
|
77
|
+
if (key === "wire_api" && (value === "responses" || value === "chat")) {
|
|
78
|
+
provider.wireApi = value;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
sourcePath,
|
|
83
|
+
...(model ? { model } : {}),
|
|
84
|
+
...(modelProvider ? { modelProvider } : {}),
|
|
85
|
+
providers
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function normalizeTomlString(rawValue) {
|
|
89
|
+
const commentIndex = rawValue.indexOf(" #");
|
|
90
|
+
const trimmed = (commentIndex >= 0 ? rawValue.slice(0, commentIndex) : rawValue).trim();
|
|
91
|
+
if (trimmed.length === 0) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
const singleQuote = String.fromCharCode(39);
|
|
95
|
+
if ((trimmed.startsWith("\"") && trimmed.endsWith("\"")) || (trimmed.startsWith(singleQuote) && trimmed.endsWith(singleQuote))) {
|
|
96
|
+
return trimmed.slice(1, -1).trim() || undefined;
|
|
97
|
+
}
|
|
98
|
+
return trimmed;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=codex-global-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-global-config.js","sourceRoot":"","sources":["../../../src/problem-solving-core/codex/codex-global-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CodexPreflightReport, OptimusConfig } from "../../types.js";
|
|
2
|
+
export declare class CodexPreflight {
|
|
3
|
+
private readonly config;
|
|
4
|
+
private readonly processEnv;
|
|
5
|
+
constructor(config: OptimusConfig, processEnv?: NodeJS.ProcessEnv);
|
|
6
|
+
run(): Promise<CodexPreflightReport>;
|
|
7
|
+
private buildAuthCheck;
|
|
8
|
+
private describeMissingAuthInputs;
|
|
9
|
+
private buildModelCheck;
|
|
10
|
+
private buildModelProviderCheck;
|
|
11
|
+
private buildTaskHarnessCheck;
|
|
12
|
+
private buildApprovalPolicyCheck;
|
|
13
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
// Codex preflight validates that the runtime is ready before spending time on a real SDK turn.
|
|
2
|
+
// It checks model selection, provider routing, auth readiness, task harness availability, and approval policy invariants.
|
|
3
|
+
// This module only answers "can we start safely" and returns diagnostics; it does not execute tasks or persist task state.
|
|
4
|
+
import { access } from "node:fs/promises";
|
|
5
|
+
import { CodexAuthResolver } from "./codex-auth-resolver.js";
|
|
6
|
+
import { resolveCodexAuthMode, resolveConfiguredCodexModelProvider, resolveConfiguredCodexProvider, resolveEffectiveCodexModel } from "./codex-provider-profile.js";
|
|
7
|
+
import { resolvePrimaryCodexApiKeyEnvName } from "./codex-required-env.js";
|
|
8
|
+
export class CodexPreflight {
|
|
9
|
+
config;
|
|
10
|
+
processEnv;
|
|
11
|
+
constructor(config, processEnv = process.env) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.processEnv = processEnv;
|
|
14
|
+
}
|
|
15
|
+
// Preflight gives operators a deterministic answer before the SDK spends time starting a real turn.
|
|
16
|
+
async run() {
|
|
17
|
+
const auth = new CodexAuthResolver(this.config, this.processEnv).resolve();
|
|
18
|
+
const checks = [];
|
|
19
|
+
checks.push(this.buildModelCheck());
|
|
20
|
+
checks.push(this.buildModelProviderCheck());
|
|
21
|
+
checks.push(this.buildAuthCheck(auth.diagnostics.authenticated));
|
|
22
|
+
checks.push(await this.buildTaskHarnessCheck());
|
|
23
|
+
checks.push(this.buildApprovalPolicyCheck());
|
|
24
|
+
const failedCheck = checks.find((check) => !check.ok);
|
|
25
|
+
const resolvedModel = resolveEffectiveCodexModel(this.config);
|
|
26
|
+
const resolvedProvider = resolveConfiguredCodexModelProvider(this.config);
|
|
27
|
+
return {
|
|
28
|
+
ok: !failedCheck,
|
|
29
|
+
summary: failedCheck ? failedCheck.detail : "Codex SDK preflight passed.",
|
|
30
|
+
auth: auth.diagnostics,
|
|
31
|
+
checks,
|
|
32
|
+
...(resolvedModel ? { resolvedModel } : {}),
|
|
33
|
+
...(resolvedProvider ? { resolvedProvider } : {}),
|
|
34
|
+
...(failedCheck?.failureCategory ? { failureCategory: failedCheck.failureCategory } : {})
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
buildAuthCheck(authenticated) {
|
|
38
|
+
const authMode = resolveCodexAuthMode(this.config);
|
|
39
|
+
if (authMode === "codex_cli_login") {
|
|
40
|
+
return {
|
|
41
|
+
name: "auth",
|
|
42
|
+
ok: true,
|
|
43
|
+
detail: "Codex auth mode is codex_cli_login. Local CLI login will be validated at runtime."
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (!authenticated) {
|
|
47
|
+
return {
|
|
48
|
+
name: "auth",
|
|
49
|
+
ok: false,
|
|
50
|
+
detail: `Missing Codex authentication. Missing env vars: ${this.describeMissingAuthInputs()}.`,
|
|
51
|
+
failureCategory: "auth_missing"
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
name: "auth",
|
|
56
|
+
ok: true,
|
|
57
|
+
detail: "Codex authentication resolved."
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
describeMissingAuthInputs() {
|
|
61
|
+
const auth = new CodexAuthResolver(this.config, this.processEnv).resolve();
|
|
62
|
+
if (auth.diagnostics.missingEnvVars.length === 0) {
|
|
63
|
+
return `${resolvePrimaryCodexApiKeyEnvName(this.config, this.processEnv) ?? "runtime login"} or codex.apiKey`;
|
|
64
|
+
}
|
|
65
|
+
return auth.diagnostics.missingEnvVars.join(", ");
|
|
66
|
+
}
|
|
67
|
+
buildModelCheck() {
|
|
68
|
+
const model = resolveEffectiveCodexModel(this.config);
|
|
69
|
+
if (!model || model.trim().length === 0) {
|
|
70
|
+
return {
|
|
71
|
+
name: "model",
|
|
72
|
+
ok: false,
|
|
73
|
+
detail: "codex.model is required.",
|
|
74
|
+
failureCategory: "config_error"
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
name: "model",
|
|
79
|
+
ok: true,
|
|
80
|
+
detail: `Codex model configured: ${model}.`
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
buildModelProviderCheck() {
|
|
84
|
+
const authMode = resolveCodexAuthMode(this.config);
|
|
85
|
+
const modelProvider = resolveConfiguredCodexModelProvider(this.config);
|
|
86
|
+
const provider = resolveConfiguredCodexProvider(this.config);
|
|
87
|
+
if (authMode !== "model_provider") {
|
|
88
|
+
return {
|
|
89
|
+
name: "model_provider",
|
|
90
|
+
ok: true,
|
|
91
|
+
detail: `Codex auth mode is ${authMode}; no custom model provider routing is required.`
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (!provider) {
|
|
95
|
+
return {
|
|
96
|
+
name: "model_provider",
|
|
97
|
+
ok: false,
|
|
98
|
+
detail: "codex.provider must include id, displayName, baseUrl, apiKeyEnvName, and wireApi when auth mode is model_provider.",
|
|
99
|
+
failureCategory: "config_error"
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
name: "model_provider",
|
|
104
|
+
ok: true,
|
|
105
|
+
detail: `Codex provider configured via codex.provider.id=${modelProvider} (${provider.displayName}).`
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async buildTaskHarnessCheck() {
|
|
109
|
+
try {
|
|
110
|
+
await access(this.config.runtime.taskHarnessRootDir);
|
|
111
|
+
return {
|
|
112
|
+
name: "task_harness_root",
|
|
113
|
+
ok: true,
|
|
114
|
+
detail: `Task harness root available at ${this.config.runtime.taskHarnessRootDir}.`
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return {
|
|
119
|
+
name: "task_harness_root",
|
|
120
|
+
ok: false,
|
|
121
|
+
detail: `Task harness root not found: ${this.config.runtime.taskHarnessRootDir}.`,
|
|
122
|
+
failureCategory: "environment_error"
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
buildApprovalPolicyCheck() {
|
|
127
|
+
if (this.config.codex.approvalPolicy !== "never") {
|
|
128
|
+
return {
|
|
129
|
+
name: "approval_policy",
|
|
130
|
+
ok: false,
|
|
131
|
+
detail: `approvalPolicy must stay never, received ${this.config.codex.approvalPolicy}.`,
|
|
132
|
+
failureCategory: "config_error"
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return {
|
|
136
|
+
name: "approval_policy",
|
|
137
|
+
ok: true,
|
|
138
|
+
detail: "approvalPolicy is locked to never."
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=codex-preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-preflight.js","sourceRoot":"","sources":["../../../src/problem-solving-core/codex/codex-preflight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { CodexAuthMode, CodexWireApi, OptimusConfig } from "../../types.js";
|
|
2
|
+
export interface CodexModelProviderProfile {
|
|
3
|
+
providerId: string;
|
|
4
|
+
displayName: string;
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
envKey: string;
|
|
7
|
+
wireApi: CodexWireApi;
|
|
8
|
+
}
|
|
9
|
+
export declare function resolveCodexAuthMode(config: OptimusConfig): CodexAuthMode;
|
|
10
|
+
export declare function resolveEffectiveCodexModel(config: OptimusConfig): string | undefined;
|
|
11
|
+
export declare function resolveConfiguredCodexModelProvider(config: OptimusConfig): string | undefined;
|
|
12
|
+
export declare function resolveConfiguredCodexProvider(config: OptimusConfig): CodexModelProviderProfile | undefined;
|
|
13
|
+
export declare function resolveCodexSdkBaseUrl(config: OptimusConfig): string | undefined;
|
|
14
|
+
export declare function renderRuntimeCodexHomeConfig(config: OptimusConfig): string | undefined;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Codex auth/provider helpers normalize project config into one runtime-facing contract.
|
|
2
|
+
// Runtime behavior is fully config-driven; provider metadata must be explicit in project config.
|
|
3
|
+
export function resolveCodexAuthMode(config) {
|
|
4
|
+
const configuredMode = config.codex.auth?.mode;
|
|
5
|
+
if (configuredMode) {
|
|
6
|
+
return configuredMode;
|
|
7
|
+
}
|
|
8
|
+
return config.codex.provider ? "model_provider" : "openai_api_key";
|
|
9
|
+
}
|
|
10
|
+
export function resolveEffectiveCodexModel(config) {
|
|
11
|
+
const configuredModel = config.codex.model?.trim();
|
|
12
|
+
return configuredModel && configuredModel.length > 0 ? configuredModel : undefined;
|
|
13
|
+
}
|
|
14
|
+
export function resolveConfiguredCodexModelProvider(config) {
|
|
15
|
+
return resolveConfiguredCodexProvider(config)?.providerId;
|
|
16
|
+
}
|
|
17
|
+
export function resolveConfiguredCodexProvider(config) {
|
|
18
|
+
if (resolveCodexAuthMode(config) !== "model_provider") {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const configured = config.codex.provider;
|
|
22
|
+
if (!configured || typeof configured !== "object") {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const providerId = configured.id?.trim();
|
|
26
|
+
const displayName = configured.displayName?.trim();
|
|
27
|
+
const baseUrl = configured.baseUrl?.trim();
|
|
28
|
+
const envKey = configured.apiKeyEnvName?.trim();
|
|
29
|
+
const wireApi = configured.wireApi;
|
|
30
|
+
if (!providerId || !displayName || !baseUrl || !envKey || (wireApi !== "responses" && wireApi !== "chat")) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
providerId,
|
|
35
|
+
displayName,
|
|
36
|
+
baseUrl,
|
|
37
|
+
envKey,
|
|
38
|
+
wireApi
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Provider routing should prefer explicit provider metadata from config and only fall back to raw baseUrl for legacy direct routing.
|
|
42
|
+
export function resolveCodexSdkBaseUrl(config) {
|
|
43
|
+
const provider = resolveConfiguredCodexProvider(config);
|
|
44
|
+
if (provider) {
|
|
45
|
+
return provider.baseUrl;
|
|
46
|
+
}
|
|
47
|
+
const configuredBaseUrl = config.codex.baseUrl?.trim();
|
|
48
|
+
if (!configuredBaseUrl || resolveCodexAuthMode(config) === "openai_api_key" || resolveCodexAuthMode(config) === "codex_cli_login") {
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
return configuredBaseUrl;
|
|
52
|
+
}
|
|
53
|
+
// The task-private CODEX_HOME gets a minimal runtime config so routing and model defaults stay isolated inside Optimus.
|
|
54
|
+
export function renderRuntimeCodexHomeConfig(config) {
|
|
55
|
+
const lines = [
|
|
56
|
+
`model_reasoning_effort = ${JSON.stringify(config.codex.reasoningEffort)}`
|
|
57
|
+
];
|
|
58
|
+
const model = resolveEffectiveCodexModel(config);
|
|
59
|
+
if (model) {
|
|
60
|
+
lines.push(`model = ${JSON.stringify(model)}`);
|
|
61
|
+
}
|
|
62
|
+
const provider = resolveConfiguredCodexProvider(config);
|
|
63
|
+
if (provider) {
|
|
64
|
+
lines.push(`model_provider = ${JSON.stringify(provider.providerId)}`, "", `[model_providers.${provider.providerId}]`, `name = ${JSON.stringify(provider.displayName)}`, `base_url = ${JSON.stringify(provider.baseUrl)}`, `env_key = ${JSON.stringify(provider.envKey)}`, `wire_api = ${JSON.stringify(provider.wireApi)}`);
|
|
65
|
+
}
|
|
66
|
+
return `${lines.join("\n")}\n`;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=codex-provider-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-provider-profile.js","sourceRoot":"","sources":["../../../src/problem-solving-core/codex/codex-provider-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { OptimusConfig } from "../../types.js";
|
|
2
|
+
export declare function resolvePrimaryCodexApiKeyEnvName(config: OptimusConfig, processEnv?: NodeJS.ProcessEnv): string | undefined;
|
|
3
|
+
export declare function resolveRequiredCodexEnvVars(config: OptimusConfig, processEnv?: NodeJS.ProcessEnv): string[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Required-env helpers keep provider-specific credential requirements consistent across auth resolution and preflight.
|
|
2
|
+
// They compute the primary API key env name after provider routing is applied and normalize the final required env list.
|
|
3
|
+
// This module only describes credential requirements; it does not load env files or validate values.
|
|
4
|
+
import { resolveCodexAuthMode, resolveConfiguredCodexProvider } from "./codex-provider-profile.js";
|
|
5
|
+
// Auth mode defines whether runtime should expect an explicit env key or rely on local Codex CLI login state.
|
|
6
|
+
export function resolvePrimaryCodexApiKeyEnvName(config, processEnv = process.env) {
|
|
7
|
+
const authMode = resolveCodexAuthMode(config);
|
|
8
|
+
if (authMode === "codex_cli_login") {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
if (authMode === "model_provider") {
|
|
12
|
+
return resolveConfiguredCodexProvider(config)?.envKey;
|
|
13
|
+
}
|
|
14
|
+
return "OPENAI_API_KEY";
|
|
15
|
+
}
|
|
16
|
+
// Required envs are normalized around the resolved primary provider credential to avoid dual-key confusion.
|
|
17
|
+
export function resolveRequiredCodexEnvVars(config, processEnv = process.env) {
|
|
18
|
+
const primaryEnvName = resolvePrimaryCodexApiKeyEnvName(config, processEnv);
|
|
19
|
+
return primaryEnvName ? [primaryEnvName] : [];
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=codex-required-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-required-env.js","sourceRoot":"","sources":["../../../src/problem-solving-core/codex/codex-required-env.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,yHAAyH;AACzH,qGAAqG;AAIrG,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAEnG,8GAA8G;AAC9G,MAAM,UAAU,gCAAgC,CAAC,MAAqB,EAAE,aAAgC,OAAO,CAAC,GAAG;IACjH,MAAM,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACnC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;QAClC,OAAO,8BAA8B,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACxD,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,4GAA4G;AAC5G,MAAM,UAAU,2BAA2B,CAAC,MAAqB,EAAE,aAAgC,OAAO,CAAC,GAAG;IAC5G,MAAM,cAAc,GAAG,gCAAgC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC5E,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CodexHealthCheckResult, OptimusConfig, TaskExecutionContext, TaskExecutionRequest, TaskResult } from "../../types.js";
|
|
2
|
+
export declare class CodexRunner {
|
|
3
|
+
private readonly config;
|
|
4
|
+
private readonly logger;
|
|
5
|
+
constructor(config: OptimusConfig);
|
|
6
|
+
runTask(request: TaskExecutionRequest, context: TaskExecutionContext): Promise<TaskResult>;
|
|
7
|
+
runHealthCheck(): Promise<CodexHealthCheckResult>;
|
|
8
|
+
private runWithCodexSdk;
|
|
9
|
+
private resolveTurnResult;
|
|
10
|
+
private tryResolveResultDocumentFallback;
|
|
11
|
+
private describeStreamEventDetail;
|
|
12
|
+
private extractCommandPreview;
|
|
13
|
+
private extractTextPreview;
|
|
14
|
+
private describeStreamEvent;
|
|
15
|
+
private buildThreadOptions;
|
|
16
|
+
private describeCompletedItem;
|
|
17
|
+
private loadTaskHarnessDocumentSet;
|
|
18
|
+
private buildPrompt;
|
|
19
|
+
private renderExecutionFrameSection;
|
|
20
|
+
private normalizeHarnessMarkdown;
|
|
21
|
+
private stripRedundantTopHeading;
|
|
22
|
+
private demoteMarkdownHeadings;
|
|
23
|
+
private normalizeResultDocumentPaths;
|
|
24
|
+
private sanitizeResultDocumentPaths;
|
|
25
|
+
private buildOutputSchema;
|
|
26
|
+
private parseCodexResponse;
|
|
27
|
+
private validateResultContract;
|
|
28
|
+
private previewResponse;
|
|
29
|
+
private writeDebugResponseArtifact;
|
|
30
|
+
private parseHealthCheckResponse;
|
|
31
|
+
private createExecutionSignal;
|
|
32
|
+
private ensureCodexHome;
|
|
33
|
+
private createCodexClient;
|
|
34
|
+
private resolveFailureCategory;
|
|
35
|
+
private classifyFailureCategory;
|
|
36
|
+
private createDiagnostics;
|
|
37
|
+
}
|