@the-open-engine/zeroshot 5.4.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/CHANGELOG.md +539 -0
- package/LICENSE +21 -0
- package/README.md +508 -0
- package/cli/commands/inspect-render.js +135 -0
- package/cli/commands/inspect.js +294 -0
- package/cli/commands/providers.js +149 -0
- package/cli/index.js +5431 -0
- package/cli/lib/first-run.js +211 -0
- package/cli/lib/update-checker.js +281 -0
- package/cli/message-formatter-utils.js +75 -0
- package/cli/message-formatters-normal.js +275 -0
- package/cli/message-formatters-watch.js +185 -0
- package/cluster-templates/base-templates/debug-workflow.json +422 -0
- package/cluster-templates/base-templates/full-workflow.json +727 -0
- package/cluster-templates/base-templates/heavy-validation.json +272 -0
- package/cluster-templates/base-templates/quick-validation.json +285 -0
- package/cluster-templates/base-templates/single-worker.json +71 -0
- package/cluster-templates/base-templates/worker-validator.json +230 -0
- package/cluster-templates/conductor-bootstrap.json +130 -0
- package/docker/zeroshot-cluster/Dockerfile +153 -0
- package/docker/zeroshot-cluster/pre-baked-deps.json +28 -0
- package/lib/agent-cli-provider/adapters/claude-parser.d.ts +3 -0
- package/lib/agent-cli-provider/adapters/claude-parser.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/claude-parser.js +122 -0
- package/lib/agent-cli-provider/adapters/claude-parser.js.map +1 -0
- package/lib/agent-cli-provider/adapters/claude-recovery.d.ts +15 -0
- package/lib/agent-cli-provider/adapters/claude-recovery.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/claude-recovery.js +165 -0
- package/lib/agent-cli-provider/adapters/claude-recovery.js.map +1 -0
- package/lib/agent-cli-provider/adapters/claude.d.ts +3 -0
- package/lib/agent-cli-provider/adapters/claude.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/claude.js +181 -0
- package/lib/agent-cli-provider/adapters/claude.js.map +1 -0
- package/lib/agent-cli-provider/adapters/codex-parser.d.ts +3 -0
- package/lib/agent-cli-provider/adapters/codex-parser.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/codex-parser.js +192 -0
- package/lib/agent-cli-provider/adapters/codex-parser.js.map +1 -0
- package/lib/agent-cli-provider/adapters/codex.d.ts +3 -0
- package/lib/agent-cli-provider/adapters/codex.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/codex.js +151 -0
- package/lib/agent-cli-provider/adapters/codex.js.map +1 -0
- package/lib/agent-cli-provider/adapters/common.d.ts +28 -0
- package/lib/agent-cli-provider/adapters/common.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/common.js +71 -0
- package/lib/agent-cli-provider/adapters/common.js.map +1 -0
- package/lib/agent-cli-provider/adapters/gemini.d.ts +3 -0
- package/lib/agent-cli-provider/adapters/gemini.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/gemini.js +176 -0
- package/lib/agent-cli-provider/adapters/gemini.js.map +1 -0
- package/lib/agent-cli-provider/adapters/index.d.ts +9 -0
- package/lib/agent-cli-provider/adapters/index.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/index.js +95 -0
- package/lib/agent-cli-provider/adapters/index.js.map +1 -0
- package/lib/agent-cli-provider/adapters/opencode.d.ts +3 -0
- package/lib/agent-cli-provider/adapters/opencode.d.ts.map +1 -0
- package/lib/agent-cli-provider/adapters/opencode.js +228 -0
- package/lib/agent-cli-provider/adapters/opencode.js.map +1 -0
- package/lib/agent-cli-provider/contract-actions.d.ts +5 -0
- package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-actions.js +140 -0
- package/lib/agent-cli-provider/contract-actions.js.map +1 -0
- package/lib/agent-cli-provider/contract-env.d.ts +11 -0
- package/lib/agent-cli-provider/contract-env.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-env.js +113 -0
- package/lib/agent-cli-provider/contract-env.js.map +1 -0
- package/lib/agent-cli-provider/contract-envelope.d.ts +49 -0
- package/lib/agent-cli-provider/contract-envelope.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-envelope.js +52 -0
- package/lib/agent-cli-provider/contract-envelope.js.map +1 -0
- package/lib/agent-cli-provider/contract-errors.d.ts +22 -0
- package/lib/agent-cli-provider/contract-errors.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-errors.js +71 -0
- package/lib/agent-cli-provider/contract-errors.js.map +1 -0
- package/lib/agent-cli-provider/contract-fallback.d.ts +7 -0
- package/lib/agent-cli-provider/contract-fallback.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-fallback.js +102 -0
- package/lib/agent-cli-provider/contract-fallback.js.map +1 -0
- package/lib/agent-cli-provider/contract-invoke.d.ts +5 -0
- package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-invoke.js +89 -0
- package/lib/agent-cli-provider/contract-invoke.js.map +1 -0
- package/lib/agent-cli-provider/contract-options.d.ts +3 -0
- package/lib/agent-cli-provider/contract-options.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-options.js +140 -0
- package/lib/agent-cli-provider/contract-options.js.map +1 -0
- package/lib/agent-cli-provider/contract-parse.d.ts +15 -0
- package/lib/agent-cli-provider/contract-parse.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-parse.js +81 -0
- package/lib/agent-cli-provider/contract-parse.js.map +1 -0
- package/lib/agent-cli-provider/contract-support.d.ts +18 -0
- package/lib/agent-cli-provider/contract-support.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract-support.js +154 -0
- package/lib/agent-cli-provider/contract-support.js.map +1 -0
- package/lib/agent-cli-provider/contract.d.ts +13 -0
- package/lib/agent-cli-provider/contract.d.ts.map +1 -0
- package/lib/agent-cli-provider/contract.js +30 -0
- package/lib/agent-cli-provider/contract.js.map +1 -0
- package/lib/agent-cli-provider/env-safety.d.ts +11 -0
- package/lib/agent-cli-provider/env-safety.d.ts.map +1 -0
- package/lib/agent-cli-provider/env-safety.js +83 -0
- package/lib/agent-cli-provider/env-safety.js.map +1 -0
- package/lib/agent-cli-provider/errors.d.ts +5 -0
- package/lib/agent-cli-provider/errors.d.ts.map +1 -0
- package/lib/agent-cli-provider/errors.js +115 -0
- package/lib/agent-cli-provider/errors.js.map +1 -0
- package/lib/agent-cli-provider/executable.d.ts +3 -0
- package/lib/agent-cli-provider/executable.d.ts.map +1 -0
- package/lib/agent-cli-provider/executable.js +24 -0
- package/lib/agent-cli-provider/executable.js.map +1 -0
- package/lib/agent-cli-provider/index.d.ts +8 -0
- package/lib/agent-cli-provider/index.d.ts.map +1 -0
- package/lib/agent-cli-provider/index.js +31 -0
- package/lib/agent-cli-provider/index.js.map +1 -0
- package/lib/agent-cli-provider/invoke-evidence.d.ts +4 -0
- package/lib/agent-cli-provider/invoke-evidence.d.ts.map +1 -0
- package/lib/agent-cli-provider/invoke-evidence.js +17 -0
- package/lib/agent-cli-provider/invoke-evidence.js.map +1 -0
- package/lib/agent-cli-provider/json.d.ts +16 -0
- package/lib/agent-cli-provider/json.d.ts.map +1 -0
- package/lib/agent-cli-provider/json.js +110 -0
- package/lib/agent-cli-provider/json.js.map +1 -0
- package/lib/agent-cli-provider/log-prefix.d.ts +2 -0
- package/lib/agent-cli-provider/log-prefix.d.ts.map +1 -0
- package/lib/agent-cli-provider/log-prefix.js +22 -0
- package/lib/agent-cli-provider/log-prefix.js.map +1 -0
- package/lib/agent-cli-provider/process-runner.d.ts +17 -0
- package/lib/agent-cli-provider/process-runner.d.ts.map +1 -0
- package/lib/agent-cli-provider/process-runner.js +89 -0
- package/lib/agent-cli-provider/process-runner.js.map +1 -0
- package/lib/agent-cli-provider/redaction.d.ts +9 -0
- package/lib/agent-cli-provider/redaction.d.ts.map +1 -0
- package/lib/agent-cli-provider/redaction.js +227 -0
- package/lib/agent-cli-provider/redaction.js.map +1 -0
- package/lib/agent-cli-provider/schema.d.ts +5 -0
- package/lib/agent-cli-provider/schema.d.ts.map +1 -0
- package/lib/agent-cli-provider/schema.js +136 -0
- package/lib/agent-cli-provider/schema.js.map +1 -0
- package/lib/agent-cli-provider/single-agent-runtime.d.ts +15 -0
- package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -0
- package/lib/agent-cli-provider/single-agent-runtime.js +228 -0
- package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -0
- package/lib/agent-cli-provider/types.d.ts +194 -0
- package/lib/agent-cli-provider/types.d.ts.map +1 -0
- package/lib/agent-cli-provider/types.js +12 -0
- package/lib/agent-cli-provider/types.js.map +1 -0
- package/lib/completion.js +174 -0
- package/lib/detached-startup.js +220 -0
- package/lib/docker-config.js +220 -0
- package/lib/git-remote-utils.js +165 -0
- package/lib/id-detector.js +55 -0
- package/lib/provider-defaults.js +62 -0
- package/lib/provider-detection.js +59 -0
- package/lib/provider-names.js +57 -0
- package/lib/repo-settings.js +69 -0
- package/lib/settings/claude-auth.js +78 -0
- package/lib/settings.js +542 -0
- package/lib/start-cluster.js +321 -0
- package/lib/stream-json-parser.js +67 -0
- package/package.json +162 -0
- package/scripts/fix-node-pty-permissions.js +75 -0
- package/scripts/record-demo.sh +279 -0
- package/scripts/setup-merge-queue.sh +170 -0
- package/scripts/test-install.sh +40 -0
- package/scripts/validate-templates.js +107 -0
- package/src/agent/agent-config.js +266 -0
- package/src/agent/agent-context-builder.js +189 -0
- package/src/agent/agent-context-sections.js +338 -0
- package/src/agent/agent-context-sources.js +147 -0
- package/src/agent/agent-hook-executor.js +721 -0
- package/src/agent/agent-input-injector.js +141 -0
- package/src/agent/agent-lifecycle.js +982 -0
- package/src/agent/agent-quality-gate-schema.js +93 -0
- package/src/agent/agent-quality-gates-context.js +51 -0
- package/src/agent/agent-stuck-detector.js +256 -0
- package/src/agent/agent-task-executor.js +2028 -0
- package/src/agent/agent-trigger-evaluator.js +67 -0
- package/src/agent/context-metrics.js +160 -0
- package/src/agent/context-pack-builder.js +367 -0
- package/src/agent/context-replay-policy.js +51 -0
- package/src/agent/guidance-queue.js +77 -0
- package/src/agent/output-extraction.js +367 -0
- package/src/agent/output-reformatter.js +175 -0
- package/src/agent/pr-verification.js +653 -0
- package/src/agent/rate-limit-backoff.js +82 -0
- package/src/agent/schema-utils.js +146 -0
- package/src/agent/validation-platform.js +35 -0
- package/src/agent-cli-provider/adapters/claude-parser.ts +133 -0
- package/src/agent-cli-provider/adapters/claude-recovery.ts +203 -0
- package/src/agent-cli-provider/adapters/claude.ts +247 -0
- package/src/agent-cli-provider/adapters/codex-parser.ts +211 -0
- package/src/agent-cli-provider/adapters/codex.ts +217 -0
- package/src/agent-cli-provider/adapters/common.ts +124 -0
- package/src/agent-cli-provider/adapters/gemini.ts +243 -0
- package/src/agent-cli-provider/adapters/index.ts +126 -0
- package/src/agent-cli-provider/adapters/opencode.ts +286 -0
- package/src/agent-cli-provider/contract-actions.ts +150 -0
- package/src/agent-cli-provider/contract-env.ts +111 -0
- package/src/agent-cli-provider/contract-envelope.ts +110 -0
- package/src/agent-cli-provider/contract-errors.ts +66 -0
- package/src/agent-cli-provider/contract-fallback.ts +121 -0
- package/src/agent-cli-provider/contract-invoke.ts +104 -0
- package/src/agent-cli-provider/contract-options.ts +173 -0
- package/src/agent-cli-provider/contract-parse.ts +94 -0
- package/src/agent-cli-provider/contract-support.ts +167 -0
- package/src/agent-cli-provider/contract.ts +56 -0
- package/src/agent-cli-provider/env-safety.ts +82 -0
- package/src/agent-cli-provider/errors.ts +122 -0
- package/src/agent-cli-provider/executable.ts +24 -0
- package/src/agent-cli-provider/index.ts +83 -0
- package/src/agent-cli-provider/invoke-evidence.ts +18 -0
- package/src/agent-cli-provider/json.ts +114 -0
- package/src/agent-cli-provider/log-prefix.ts +20 -0
- package/src/agent-cli-provider/process-runner.ts +145 -0
- package/src/agent-cli-provider/redaction.ts +282 -0
- package/src/agent-cli-provider/schema.ts +115 -0
- package/src/agent-cli-provider/single-agent-runtime.ts +311 -0
- package/src/agent-cli-provider/types.ts +237 -0
- package/src/agent-wrapper.js +615 -0
- package/src/agents/git-pusher-template.js +705 -0
- package/src/attach/attach-client.js +438 -0
- package/src/attach/attach-server.js +543 -0
- package/src/attach/index.js +37 -0
- package/src/attach/protocol.js +220 -0
- package/src/attach/ring-buffer.js +121 -0
- package/src/attach/send-input.js +88 -0
- package/src/attach/socket-discovery.js +267 -0
- package/src/claude-task-runner.js +661 -0
- package/src/config-router.js +89 -0
- package/src/config-validator.js +2202 -0
- package/src/copy-worker.js +43 -0
- package/src/guidance-topics.js +10 -0
- package/src/input-helpers.js +65 -0
- package/src/isolation-manager.js +1734 -0
- package/src/issue-providers/README.md +305 -0
- package/src/issue-providers/azure-devops-provider.js +307 -0
- package/src/issue-providers/base-provider.js +232 -0
- package/src/issue-providers/github-provider.js +210 -0
- package/src/issue-providers/gitlab-provider.js +262 -0
- package/src/issue-providers/index.js +196 -0
- package/src/issue-providers/jira-provider.js +260 -0
- package/src/ledger.js +692 -0
- package/src/lib/gc.js +232 -0
- package/src/lib/safe-exec.js +88 -0
- package/src/logic-engine.js +201 -0
- package/src/message-buffer.js +81 -0
- package/src/message-bus-bridge.js +144 -0
- package/src/message-bus.js +256 -0
- package/src/name-generator.js +232 -0
- package/src/orchestrator.js +3924 -0
- package/src/preflight.js +712 -0
- package/src/process-metrics.js +608 -0
- package/src/providers/anthropic/index.js +3 -0
- package/src/providers/base-provider.js +355 -0
- package/src/providers/capabilities.js +60 -0
- package/src/providers/google/index.js +3 -0
- package/src/providers/index.js +293 -0
- package/src/providers/openai/index.js +3 -0
- package/src/providers/opencode/index.js +3 -0
- package/src/quality-gates.js +143 -0
- package/src/schemas/sub-cluster.js +208 -0
- package/src/state-snapshot.js +398 -0
- package/src/state-snapshotter.js +142 -0
- package/src/status-footer.js +1026 -0
- package/src/sub-cluster-wrapper.js +693 -0
- package/src/task-runner.js +30 -0
- package/src/template-resolver.js +425 -0
- package/src/template-validation/index.js +338 -0
- package/src/template-validation/simulate-consensus-gates.js +324 -0
- package/src/template-validation/simulate-random-topology.js +541 -0
- package/src/template-validation/simulate-two-stage-validation.js +270 -0
- package/src/worktree-claude-config.js +135 -0
- package/src/worktree-tooling-env.js +150 -0
- package/task-lib/attachable-watcher.js +381 -0
- package/task-lib/commands/clean.js +50 -0
- package/task-lib/commands/episodes.js +105 -0
- package/task-lib/commands/get-log-path.js +23 -0
- package/task-lib/commands/kill.js +32 -0
- package/task-lib/commands/list.js +105 -0
- package/task-lib/commands/logs.js +439 -0
- package/task-lib/commands/resume.js +42 -0
- package/task-lib/commands/run.js +57 -0
- package/task-lib/commands/schedule.js +105 -0
- package/task-lib/commands/scheduler-cmd.js +96 -0
- package/task-lib/commands/schedules.js +148 -0
- package/task-lib/commands/status.js +44 -0
- package/task-lib/commands/unschedule.js +16 -0
- package/task-lib/completion.js +9 -0
- package/task-lib/config.js +11 -0
- package/task-lib/name-generator.js +230 -0
- package/task-lib/package.json +3 -0
- package/task-lib/provider-helper-runtime.js +29 -0
- package/task-lib/runner.js +190 -0
- package/task-lib/scheduler.js +252 -0
- package/task-lib/store.js +529 -0
- package/task-lib/watcher.js +305 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-runner.js","sourceRoot":"","sources":["../../src/agent-cli-provider/process-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RedactionMetadata } from './types';
|
|
2
|
+
export interface RedactionResult {
|
|
3
|
+
readonly value: unknown;
|
|
4
|
+
readonly redactions: readonly RedactionMetadata[];
|
|
5
|
+
}
|
|
6
|
+
export declare function redactString(value: string, env?: Readonly<Record<string, string>>): RedactionResult;
|
|
7
|
+
export declare function redactObject(value: unknown, env?: Readonly<Record<string, string>>): RedactionResult;
|
|
8
|
+
export declare function mergeRedactions(...metadataGroups: readonly (readonly RedactionMetadata[] | undefined)[]): readonly RedactionMetadata[];
|
|
9
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/redaction.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA6BjD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACnD;AA0ND,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GACzC,eAAe,CAMjB;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,GAAG,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,GACzC,eAAe,CAUjB;AAED,wBAAgB,eAAe,CAC7B,GAAG,cAAc,EAAE,SAAS,CAAC,SAAS,iBAAiB,EAAE,GAAG,SAAS,CAAC,EAAE,GACvE,SAAS,iBAAiB,EAAE,CAE9B"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.redactString = redactString;
|
|
4
|
+
exports.redactObject = redactObject;
|
|
5
|
+
exports.mergeRedactions = mergeRedactions;
|
|
6
|
+
const json_1 = require("./json");
|
|
7
|
+
const SECRET_KEY_PATTERN = /TOKEN|KEY|SECRET|PASSWORD/i;
|
|
8
|
+
const REDACTED_PREFIX = '[REDACTED:';
|
|
9
|
+
const SECRET_VALUE_PATTERNS = [
|
|
10
|
+
/\b(?:sk|rk|pk)-[A-Za-z0-9][A-Za-z0-9._-]{5,}\b/g,
|
|
11
|
+
/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,
|
|
12
|
+
/\bgh[pousr]_[A-Za-z0-9]{20,}\b/g,
|
|
13
|
+
/\bxox[baprs]?-[A-Za-z0-9-]{10,}\b/g,
|
|
14
|
+
/\bAIza[A-Za-z0-9_-]{20,}\b/g,
|
|
15
|
+
];
|
|
16
|
+
const UNTRUSTED_OUTPUT_PATHS = new Set([
|
|
17
|
+
'error.message',
|
|
18
|
+
'evidence.message',
|
|
19
|
+
'evidence.code',
|
|
20
|
+
'result.evidence.message',
|
|
21
|
+
'result.evidence.code',
|
|
22
|
+
'result.evidence.stdout',
|
|
23
|
+
'result.evidence.stderr',
|
|
24
|
+
]);
|
|
25
|
+
function metadataFor(target) {
|
|
26
|
+
if (target.source === undefined)
|
|
27
|
+
return { kind: target.kind, key: target.key };
|
|
28
|
+
return { kind: target.kind, key: target.key, source: target.source };
|
|
29
|
+
}
|
|
30
|
+
function metadataKey(metadata) {
|
|
31
|
+
return `${metadata.kind}:${metadata.key}:${metadata.source ?? ''}`;
|
|
32
|
+
}
|
|
33
|
+
function dedupeMetadata(metadata) {
|
|
34
|
+
const seen = new Set();
|
|
35
|
+
const result = [];
|
|
36
|
+
for (const item of metadata) {
|
|
37
|
+
const key = metadataKey(item);
|
|
38
|
+
if (seen.has(key))
|
|
39
|
+
continue;
|
|
40
|
+
seen.add(key);
|
|
41
|
+
result.push(item);
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
function targetsFromEnv(env) {
|
|
46
|
+
return Object.entries(env)
|
|
47
|
+
.filter(([, value]) => value.length > 0)
|
|
48
|
+
.map(([key, value]) => ({ kind: 'env', key, scope: 'env-or-untrusted', value }));
|
|
49
|
+
}
|
|
50
|
+
function shouldRedactSecretKey(key) {
|
|
51
|
+
return SECRET_KEY_PATTERN.test(key);
|
|
52
|
+
}
|
|
53
|
+
function isRedactionMetadataRecord(value) {
|
|
54
|
+
if (!(0, json_1.isRecord)(value))
|
|
55
|
+
return false;
|
|
56
|
+
const keys = Object.keys(value);
|
|
57
|
+
if (!keys.every((key) => key === 'kind' || key === 'key' || key === 'source'))
|
|
58
|
+
return false;
|
|
59
|
+
if (value.kind !== 'env' && value.kind !== 'secret-key' && value.kind !== 'secret-value') {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
if (typeof value.key !== 'string')
|
|
63
|
+
return false;
|
|
64
|
+
return value.source === undefined || typeof value.source === 'string';
|
|
65
|
+
}
|
|
66
|
+
function isRedactionMetadataPath(path) {
|
|
67
|
+
return /(^|\.)redactions\[\d+\]$/.test(path);
|
|
68
|
+
}
|
|
69
|
+
function shouldPreserveRedactionMetadataRecord(value, path) {
|
|
70
|
+
return isRedactionMetadataRecord(value) && isRedactionMetadataPath(path);
|
|
71
|
+
}
|
|
72
|
+
function isCredentialPresenceRecord(value) {
|
|
73
|
+
if (!(0, json_1.isRecord)(value))
|
|
74
|
+
return false;
|
|
75
|
+
const keys = Object.keys(value);
|
|
76
|
+
return (keys.length === 2 &&
|
|
77
|
+
typeof value.key === 'string' &&
|
|
78
|
+
typeof value.present === 'boolean' &&
|
|
79
|
+
keys.every((key) => key === 'key' || key === 'present'));
|
|
80
|
+
}
|
|
81
|
+
function isProbeCredentialPresencePath(path) {
|
|
82
|
+
return /^result\.credentials\[\d+\]$/.test(path);
|
|
83
|
+
}
|
|
84
|
+
function shouldPreserveCredentialPresenceRecord(value, path) {
|
|
85
|
+
return isCredentialPresenceRecord(value) && isProbeCredentialPresencePath(path);
|
|
86
|
+
}
|
|
87
|
+
function collectSecretKeyTargets(value, path = '') {
|
|
88
|
+
if (Array.isArray(value)) {
|
|
89
|
+
return value.flatMap((item, index) => collectSecretKeyTargets(item, `${path}[${index}]`));
|
|
90
|
+
}
|
|
91
|
+
if (!(0, json_1.isRecord)(value))
|
|
92
|
+
return [];
|
|
93
|
+
if (shouldPreserveRedactionMetadataRecord(value, path))
|
|
94
|
+
return [];
|
|
95
|
+
if (shouldPreserveCredentialPresenceRecord(value, path))
|
|
96
|
+
return [];
|
|
97
|
+
const targets = [];
|
|
98
|
+
for (const [key, item] of Object.entries(value)) {
|
|
99
|
+
const keyPath = path ? `${path}.${key}` : key;
|
|
100
|
+
if (typeof item === 'string' && item.length > 0 && shouldRedactSecretKey(key)) {
|
|
101
|
+
targets.push({ kind: 'secret-key', key: keyPath, scope: 'untrusted', value: item });
|
|
102
|
+
}
|
|
103
|
+
targets.push(...collectSecretKeyTargets(item, keyPath));
|
|
104
|
+
}
|
|
105
|
+
return targets;
|
|
106
|
+
}
|
|
107
|
+
function collectSecretValueTargets(value, path = '') {
|
|
108
|
+
if (typeof value === 'string') {
|
|
109
|
+
return SECRET_VALUE_PATTERNS.flatMap((pattern) => collectSecretValuePatternTargets(value, path, pattern));
|
|
110
|
+
}
|
|
111
|
+
if (Array.isArray(value)) {
|
|
112
|
+
return value.flatMap((item, index) => collectSecretValueTargets(item, `${path}[${index}]`));
|
|
113
|
+
}
|
|
114
|
+
if (!(0, json_1.isRecord)(value))
|
|
115
|
+
return [];
|
|
116
|
+
if (shouldPreserveRedactionMetadataRecord(value, path))
|
|
117
|
+
return [];
|
|
118
|
+
if (shouldPreserveCredentialPresenceRecord(value, path))
|
|
119
|
+
return [];
|
|
120
|
+
return Object.entries(value).flatMap(([key, item]) => {
|
|
121
|
+
const keyPath = path ? `${path}.${key}` : key;
|
|
122
|
+
return collectSecretValueTargets(item, keyPath);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function collectSecretValuePatternTargets(value, path, pattern) {
|
|
126
|
+
const targets = [];
|
|
127
|
+
pattern.lastIndex = 0;
|
|
128
|
+
let match = pattern.exec(value);
|
|
129
|
+
while (match !== null) {
|
|
130
|
+
const secret = match[0];
|
|
131
|
+
if (secret) {
|
|
132
|
+
targets.push({
|
|
133
|
+
kind: 'secret-value',
|
|
134
|
+
key: path || 'value',
|
|
135
|
+
scope: 'global',
|
|
136
|
+
value: secret,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
match = pattern.exec(value);
|
|
140
|
+
}
|
|
141
|
+
return targets;
|
|
142
|
+
}
|
|
143
|
+
function applyTargets(input, targets) {
|
|
144
|
+
let output = input;
|
|
145
|
+
for (const target of targets) {
|
|
146
|
+
if (!target.value)
|
|
147
|
+
continue;
|
|
148
|
+
output = output.split(target.value).join(`${REDACTED_PREFIX}${target.key}]`);
|
|
149
|
+
}
|
|
150
|
+
return output;
|
|
151
|
+
}
|
|
152
|
+
function envTargetPathKey(target) {
|
|
153
|
+
return target.key.split(':', 1)[0] ?? target.key;
|
|
154
|
+
}
|
|
155
|
+
function isEnvValuePath(path, target) {
|
|
156
|
+
const key = envTargetPathKey(target);
|
|
157
|
+
return path === `env.${key}` || path.endsWith(`.env.${key}`);
|
|
158
|
+
}
|
|
159
|
+
function isUntrustedOutputPath(path) {
|
|
160
|
+
if (path.length === 0 || path === 'value')
|
|
161
|
+
return true;
|
|
162
|
+
return (UNTRUSTED_OUTPUT_PATHS.has(path) ||
|
|
163
|
+
path.startsWith('result.events') ||
|
|
164
|
+
path.startsWith('result.diagnostics'));
|
|
165
|
+
}
|
|
166
|
+
function shouldApplyTargetAtPath(target, path) {
|
|
167
|
+
if (target.scope === 'global')
|
|
168
|
+
return true;
|
|
169
|
+
if (target.scope === 'untrusted')
|
|
170
|
+
return isUntrustedOutputPath(path);
|
|
171
|
+
return isEnvValuePath(path, target) || isUntrustedOutputPath(path);
|
|
172
|
+
}
|
|
173
|
+
function applyTargetsAtPath(input, targets, path) {
|
|
174
|
+
return applyTargets(input, targets.filter((target) => shouldApplyTargetAtPath(target, path)));
|
|
175
|
+
}
|
|
176
|
+
function redactValue(value, targets, path = '') {
|
|
177
|
+
if (typeof value === 'string')
|
|
178
|
+
return applyTargetsAtPath(value, targets, path);
|
|
179
|
+
if (Array.isArray(value)) {
|
|
180
|
+
return value.map((item, index) => redactValue(item, targets, `${path}[${index}]`));
|
|
181
|
+
}
|
|
182
|
+
if (!(0, json_1.isRecord)(value))
|
|
183
|
+
return value;
|
|
184
|
+
if (shouldPreserveRecord(value, path))
|
|
185
|
+
return value;
|
|
186
|
+
return redactRecord(value, targets, path);
|
|
187
|
+
}
|
|
188
|
+
function shouldPreserveRecord(value, path) {
|
|
189
|
+
return (shouldPreserveRedactionMetadataRecord(value, path) ||
|
|
190
|
+
shouldPreserveCredentialPresenceRecord(value, path));
|
|
191
|
+
}
|
|
192
|
+
function redactRecord(value, targets, path) {
|
|
193
|
+
const redacted = {};
|
|
194
|
+
for (const [key, item] of Object.entries(value)) {
|
|
195
|
+
const keyPath = path ? `${path}.${key}` : key;
|
|
196
|
+
redacted[key] = redactRecordItem(key, item, targets, keyPath);
|
|
197
|
+
}
|
|
198
|
+
return redacted;
|
|
199
|
+
}
|
|
200
|
+
function redactRecordItem(key, item, targets, path) {
|
|
201
|
+
if (typeof item === 'string' && item.length > 0 && shouldRedactSecretKey(key)) {
|
|
202
|
+
return `${REDACTED_PREFIX}${key}]`;
|
|
203
|
+
}
|
|
204
|
+
return redactValue(item, targets, path);
|
|
205
|
+
}
|
|
206
|
+
function redactString(value, env = {}) {
|
|
207
|
+
const targets = targetsFromEnv(env);
|
|
208
|
+
return {
|
|
209
|
+
value: applyTargetsAtPath(value, targets, 'value'),
|
|
210
|
+
redactions: dedupeMetadata(targets.map(metadataFor)),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function redactObject(value, env = {}) {
|
|
214
|
+
const targets = [
|
|
215
|
+
...targetsFromEnv(env),
|
|
216
|
+
...collectSecretKeyTargets(value),
|
|
217
|
+
...collectSecretValueTargets(value),
|
|
218
|
+
];
|
|
219
|
+
return {
|
|
220
|
+
value: redactValue(value, targets),
|
|
221
|
+
redactions: dedupeMetadata(targets.map(metadataFor)),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function mergeRedactions(...metadataGroups) {
|
|
225
|
+
return dedupeMetadata(metadataGroups.flatMap((metadata) => metadata ?? []));
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/agent-cli-provider/redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function enforceOpenAIStrictSchema(schema: unknown): unknown;
|
|
2
|
+
export declare function schemaToPromptString(schema: unknown): string;
|
|
3
|
+
export declare function appendJsonSchemaPrompt(context: string, schema: unknown): string;
|
|
4
|
+
export declare function writeStrictOutputSchemaFile(schema: unknown): string;
|
|
5
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/schema.ts"],"names":[],"mappings":"AAiFA,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAElE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAE5D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAe/E;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAQnE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.enforceOpenAIStrictSchema = enforceOpenAIStrictSchema;
|
|
37
|
+
exports.schemaToPromptString = schemaToPromptString;
|
|
38
|
+
exports.appendJsonSchemaPrompt = appendJsonSchemaPrompt;
|
|
39
|
+
exports.writeStrictOutputSchemaFile = writeStrictOutputSchemaFile;
|
|
40
|
+
const node_crypto_1 = require("node:crypto");
|
|
41
|
+
const fs = __importStar(require("node:fs"));
|
|
42
|
+
const os = __importStar(require("node:os"));
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
const json_1 = require("./json");
|
|
45
|
+
function isSchemaObject(schema) {
|
|
46
|
+
return typeof schema === 'object' && schema !== null;
|
|
47
|
+
}
|
|
48
|
+
function shallowCopySchemaObject(schema) {
|
|
49
|
+
const result = {};
|
|
50
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
51
|
+
result[key] = value;
|
|
52
|
+
}
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
function objectKeys(schema) {
|
|
56
|
+
return isSchemaObject(schema) ? Object.keys(schema) : [];
|
|
57
|
+
}
|
|
58
|
+
function enforceSchemaNode(schema) {
|
|
59
|
+
if (!isSchemaObject(schema)) {
|
|
60
|
+
return schema;
|
|
61
|
+
}
|
|
62
|
+
const result = shallowCopySchemaObject(schema);
|
|
63
|
+
enforceObjectSchema(result);
|
|
64
|
+
enforceProperties(result);
|
|
65
|
+
enforceItems(result);
|
|
66
|
+
enforceCompositionKeywords(result);
|
|
67
|
+
enforceAdditionalProperties(result);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
function enforceObjectSchema(result) {
|
|
71
|
+
if (result.type === 'object') {
|
|
72
|
+
result.additionalProperties = false;
|
|
73
|
+
if (result.properties) {
|
|
74
|
+
result.required = objectKeys(result.properties);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function enforceProperties(result) {
|
|
79
|
+
const properties = result.properties;
|
|
80
|
+
if (isSchemaObject(properties)) {
|
|
81
|
+
const strictProperties = {};
|
|
82
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
83
|
+
strictProperties[key] = enforceSchemaNode(value);
|
|
84
|
+
}
|
|
85
|
+
result.properties = strictProperties;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function enforceItems(result) {
|
|
89
|
+
if (result.items) {
|
|
90
|
+
result.items = enforceSchemaNode(result.items);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function enforceCompositionKeywords(result) {
|
|
94
|
+
for (const key of ['anyOf', 'oneOf', 'allOf']) {
|
|
95
|
+
const value = result[key];
|
|
96
|
+
if (Array.isArray(value)) {
|
|
97
|
+
result[key] = value.map((item) => enforceSchemaNode(item));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function enforceAdditionalProperties(result) {
|
|
102
|
+
const additionalProperties = result.additionalProperties;
|
|
103
|
+
if (additionalProperties && isSchemaObject(additionalProperties)) {
|
|
104
|
+
result.additionalProperties = enforceSchemaNode(additionalProperties);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function enforceOpenAIStrictSchema(schema) {
|
|
108
|
+
return enforceSchemaNode(schema);
|
|
109
|
+
}
|
|
110
|
+
function schemaToPromptString(schema) {
|
|
111
|
+
return typeof schema === 'string' ? schema : (0, json_1.stringifyJson)(schema, 2);
|
|
112
|
+
}
|
|
113
|
+
function appendJsonSchemaPrompt(context, schema) {
|
|
114
|
+
const schemaString = schemaToPromptString(schema);
|
|
115
|
+
return (context +
|
|
116
|
+
`\n\n## OUTPUT FORMAT (CRITICAL - REQUIRED)
|
|
117
|
+
|
|
118
|
+
You MUST respond with a JSON object that exactly matches this schema. NO markdown, NO explanation, NO code blocks. ONLY the raw JSON object.
|
|
119
|
+
|
|
120
|
+
Schema:
|
|
121
|
+
\`\`\`json
|
|
122
|
+
${schemaString}
|
|
123
|
+
\`\`\`
|
|
124
|
+
|
|
125
|
+
Your response must be ONLY valid JSON. Start with { and end with }. Nothing else.`);
|
|
126
|
+
}
|
|
127
|
+
function writeStrictOutputSchemaFile(schema) {
|
|
128
|
+
const parsedSchema = typeof schema === 'string' ? (0, json_1.parseJson)(schema) : schema;
|
|
129
|
+
const strictSchema = enforceOpenAIStrictSchema(parsedSchema);
|
|
130
|
+
const schemaText = (0, json_1.stringifyJson)(strictSchema, 2);
|
|
131
|
+
const schemaDir = fs.mkdtempSync(path.join(os.tmpdir(), 'zeroshot-schema-'));
|
|
132
|
+
const schemaFile = path.join(schemaDir, `${(0, node_crypto_1.randomUUID)()}.json`);
|
|
133
|
+
fs.writeFileSync(schemaFile, schemaText, { flag: 'wx', mode: 0o600 });
|
|
134
|
+
return schemaFile;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/agent-cli-provider/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BuildProviderCommandOptions, CliFeatureOverrides, CommandSpec, ProviderAdapter, ProviderCliFeatures } from './types';
|
|
2
|
+
export interface SingleAgentProviderCommandInput {
|
|
3
|
+
readonly provider?: string | null;
|
|
4
|
+
readonly context: string;
|
|
5
|
+
readonly options?: BuildProviderCommandOptions;
|
|
6
|
+
}
|
|
7
|
+
export interface PreparedSingleAgentProviderCommand {
|
|
8
|
+
readonly adapter: ProviderAdapter;
|
|
9
|
+
readonly commandSpec: CommandSpec;
|
|
10
|
+
readonly options: BuildProviderCommandOptions;
|
|
11
|
+
readonly cliFeatures: CliFeatureOverrides;
|
|
12
|
+
}
|
|
13
|
+
export declare function prepareSingleAgentProviderCommand(input: SingleAgentProviderCommandInput): PreparedSingleAgentProviderCommand;
|
|
14
|
+
export declare function detectRuntimeProviderCliFeatures(provider: string): ProviderCliFeatures;
|
|
15
|
+
//# sourceMappingURL=single-agent-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-agent-runtime.d.ts","sourceRoot":"","sources":["../../src/agent-cli-provider/single-agent-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,2BAA2B,EAC3B,mBAAmB,EACnB,WAAW,EAIX,eAAe,EACf,mBAAmB,EAGpB,MAAM,SAAS,CAAC;AAcjB,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,2BAA2B,CAAC;CAChD;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,mBAAmB,CAAC;CAC3C;AAoBD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,+BAA+B,GACrC,kCAAkC,CAcpC;AAED,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,MAAM,GAAG,mBAAmB,CAKtF"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareSingleAgentProviderCommand = prepareSingleAgentProviderCommand;
|
|
4
|
+
exports.detectRuntimeProviderCliFeatures = detectRuntimeProviderCliFeatures;
|
|
5
|
+
const adapters_1 = require("./adapters");
|
|
6
|
+
const json_1 = require("./json");
|
|
7
|
+
const MODEL_LEVELS = ['level1', 'level2', 'level3'];
|
|
8
|
+
const REASONING_EFFORTS = ['low', 'medium', 'high', 'xhigh'];
|
|
9
|
+
const settingsModule = require('../../lib/settings');
|
|
10
|
+
const providerDetectionModule = require('../../lib/provider-detection');
|
|
11
|
+
const claudeAuthModule = require('../../lib/settings/claude-auth');
|
|
12
|
+
const loadSettingsFn = moduleFunction(settingsModule, 'loadSettings');
|
|
13
|
+
const getClaudeCommandFn = moduleFunction(settingsModule, 'getClaudeCommand');
|
|
14
|
+
const getHelpOutputFn = moduleFunction(providerDetectionModule, 'getHelpOutput');
|
|
15
|
+
const resolveClaudeAuthFn = moduleFunction(claudeAuthModule, 'resolveClaudeAuth');
|
|
16
|
+
function prepareSingleAgentProviderCommand(input) {
|
|
17
|
+
const settings = loadRuntimeSettings();
|
|
18
|
+
const adapter = adapterForRuntimeInput(input.provider, settings);
|
|
19
|
+
const providerSettings = runtimeProviderSettings(settings, adapter.id);
|
|
20
|
+
const baseOptions = input.options ?? {};
|
|
21
|
+
const cliFeatures = baseOptions.cliFeatures ?? detectRuntimeProviderCliFeatures(adapter.id);
|
|
22
|
+
const authEnv = baseOptions.authEnv ?? resolveRuntimeAuthEnv(adapter.id, settings);
|
|
23
|
+
const options = buildRuntimeOptions(baseOptions, adapter, providerSettings, cliFeatures, authEnv);
|
|
24
|
+
return {
|
|
25
|
+
adapter,
|
|
26
|
+
options,
|
|
27
|
+
cliFeatures,
|
|
28
|
+
commandSpec: adapter.buildCommand(input.context, options),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function detectRuntimeProviderCliFeatures(provider) {
|
|
32
|
+
const adapter = (0, adapters_1.getProviderAdapter)(provider);
|
|
33
|
+
const helpCommand = runtimeHelpCommand(adapter.id);
|
|
34
|
+
const helpText = stringResult(getHelpOutputFn(helpCommand.command, helpCommand.args));
|
|
35
|
+
return adapter.detectCliFeatures(helpText);
|
|
36
|
+
}
|
|
37
|
+
function buildRuntimeOptions(baseOptions, adapter, providerSettings, cliFeatures, authEnv) {
|
|
38
|
+
const resolved = {
|
|
39
|
+
...baseOptions,
|
|
40
|
+
modelSpec: resolveRuntimeModelSpec(adapter, baseOptions.modelSpec, providerSettings),
|
|
41
|
+
cliFeatures,
|
|
42
|
+
};
|
|
43
|
+
if (!shouldIncludeAuthEnv(baseOptions, authEnv))
|
|
44
|
+
return resolved;
|
|
45
|
+
return { ...resolved, authEnv };
|
|
46
|
+
}
|
|
47
|
+
function shouldIncludeAuthEnv(baseOptions, authEnv) {
|
|
48
|
+
return baseOptions.authEnv !== undefined || Object.keys(authEnv).length > 0;
|
|
49
|
+
}
|
|
50
|
+
function resolveRuntimeModelSpec(adapter, explicit, providerSettings) {
|
|
51
|
+
if (explicit?.model !== undefined) {
|
|
52
|
+
adapter.validateModelId(explicit.model);
|
|
53
|
+
return explicit;
|
|
54
|
+
}
|
|
55
|
+
const level = explicit?.level ?? providerSettings.defaultLevel ?? adapter.defaultLevel;
|
|
56
|
+
const resolved = adapter.resolveModelSpec(level, providerSettings.levelOverrides);
|
|
57
|
+
const modelSpec = modelSpecFromResolved(resolved);
|
|
58
|
+
if (explicit?.reasoningEffort === undefined)
|
|
59
|
+
return modelSpec;
|
|
60
|
+
return { ...modelSpec, reasoningEffort: explicit.reasoningEffort };
|
|
61
|
+
}
|
|
62
|
+
function modelSpecFromResolved(resolved) {
|
|
63
|
+
const result = {
|
|
64
|
+
level: resolved.level,
|
|
65
|
+
model: resolved.model,
|
|
66
|
+
};
|
|
67
|
+
if (resolved.reasoningEffort !== undefined)
|
|
68
|
+
result.reasoningEffort = resolved.reasoningEffort;
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
function resolveRuntimeAuthEnv(provider, settings) {
|
|
72
|
+
if (provider !== 'claude')
|
|
73
|
+
return {};
|
|
74
|
+
return stringRecordFromUnknown(resolveClaudeAuthFn(settings), 'resolveClaudeAuth');
|
|
75
|
+
}
|
|
76
|
+
function adapterForRuntimeInput(provider, settings) {
|
|
77
|
+
const configured = provider ?? optionalString(settings.defaultProvider, 'settings.defaultProvider');
|
|
78
|
+
return (0, adapters_1.getProviderAdapter)(configured ?? 'claude');
|
|
79
|
+
}
|
|
80
|
+
function runtimeProviderSettings(settings, provider) {
|
|
81
|
+
const allSettings = optionalRecord(settings.providerSettings, 'settings.providerSettings');
|
|
82
|
+
const providerValue = allSettings?.[provider];
|
|
83
|
+
if (providerValue === undefined)
|
|
84
|
+
return { levelOverrides: {} };
|
|
85
|
+
const providerSettings = requiredRecord(providerValue, `settings.providerSettings.${provider}`);
|
|
86
|
+
const defaultLevel = optionalModelLevel(providerSettings.defaultLevel, `settings.providerSettings.${provider}.defaultLevel`);
|
|
87
|
+
const levelOverrides = levelOverridesFromUnknown(providerSettings.levelOverrides, `settings.providerSettings.${provider}.levelOverrides`);
|
|
88
|
+
if (defaultLevel === undefined)
|
|
89
|
+
return { levelOverrides };
|
|
90
|
+
return { defaultLevel, levelOverrides };
|
|
91
|
+
}
|
|
92
|
+
function runtimeHelpCommand(provider) {
|
|
93
|
+
if (provider === 'claude')
|
|
94
|
+
return getClaudeRuntimeCommand();
|
|
95
|
+
if (provider === 'codex')
|
|
96
|
+
return { command: 'codex', args: ['exec'] };
|
|
97
|
+
if (provider === 'opencode')
|
|
98
|
+
return { command: 'opencode', args: ['run'] };
|
|
99
|
+
return { command: 'gemini', args: [] };
|
|
100
|
+
}
|
|
101
|
+
function getClaudeRuntimeCommand() {
|
|
102
|
+
return commandPartsFromUnknown(getClaudeCommandFn(), 'getClaudeCommand');
|
|
103
|
+
}
|
|
104
|
+
function loadRuntimeSettings() {
|
|
105
|
+
const settings = loadSettingsFn();
|
|
106
|
+
return requiredRecord(settings, 'loadSettings');
|
|
107
|
+
}
|
|
108
|
+
function moduleFunction(moduleValue, field) {
|
|
109
|
+
const record = requiredRecord(moduleValue, 'module');
|
|
110
|
+
const value = record[field];
|
|
111
|
+
if (isUnknownFunction(value))
|
|
112
|
+
return value;
|
|
113
|
+
throw new Error(`Expected ${field} to be a function.`);
|
|
114
|
+
}
|
|
115
|
+
function isUnknownFunction(value) {
|
|
116
|
+
return typeof value === 'function';
|
|
117
|
+
}
|
|
118
|
+
function commandPartsFromUnknown(value, field) {
|
|
119
|
+
const record = requiredRecord(value, field);
|
|
120
|
+
return {
|
|
121
|
+
command: requiredStringValue(record.command, `${field}.command`),
|
|
122
|
+
args: stringArray(record.args, `${field}.args`),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function levelOverridesFromUnknown(value, field) {
|
|
126
|
+
if (value === undefined)
|
|
127
|
+
return {};
|
|
128
|
+
const record = requiredRecord(value, field);
|
|
129
|
+
const result = {};
|
|
130
|
+
for (const level of MODEL_LEVELS) {
|
|
131
|
+
if (record[level] !== undefined)
|
|
132
|
+
result[level] = modelSpecFromUnknown(record[level], field);
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
function modelSpecFromUnknown(value, field) {
|
|
137
|
+
const record = requiredRecord(value, field);
|
|
138
|
+
const result = {};
|
|
139
|
+
addModelLevel(result, record.level, `${field}.level`);
|
|
140
|
+
addModel(result, record.model, `${field}.model`);
|
|
141
|
+
addReasoningEffort(result, record.reasoningEffort, `${field}.reasoningEffort`);
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
function addModelLevel(result, value, field) {
|
|
145
|
+
const level = optionalModelLevel(value, field);
|
|
146
|
+
if (level !== undefined)
|
|
147
|
+
result.level = level;
|
|
148
|
+
}
|
|
149
|
+
function addModel(result, value, field) {
|
|
150
|
+
if (value === undefined)
|
|
151
|
+
return;
|
|
152
|
+
if (value === null || typeof value === 'string') {
|
|
153
|
+
result.model = value;
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
throw new Error(`${field} must be a string or null.`);
|
|
157
|
+
}
|
|
158
|
+
function addReasoningEffort(result, value, field) {
|
|
159
|
+
const effort = optionalReasoningEffort(value, field);
|
|
160
|
+
if (effort !== undefined)
|
|
161
|
+
result.reasoningEffort = effort;
|
|
162
|
+
}
|
|
163
|
+
function optionalModelLevel(value, field) {
|
|
164
|
+
if (value === undefined)
|
|
165
|
+
return undefined;
|
|
166
|
+
if (value === 'level1' || value === 'level2' || value === 'level3')
|
|
167
|
+
return value;
|
|
168
|
+
throw new Error(`${field} must be one of: ${MODEL_LEVELS.join(', ')}.`);
|
|
169
|
+
}
|
|
170
|
+
function optionalReasoningEffort(value, field) {
|
|
171
|
+
if (value === undefined)
|
|
172
|
+
return undefined;
|
|
173
|
+
if (value === 'low' || value === 'medium' || value === 'high' || value === 'xhigh') {
|
|
174
|
+
return value;
|
|
175
|
+
}
|
|
176
|
+
throw new Error(`${field} must be one of: ${REASONING_EFFORTS.join(', ')}.`);
|
|
177
|
+
}
|
|
178
|
+
function optionalString(value, field) {
|
|
179
|
+
if (value === undefined || value === null)
|
|
180
|
+
return undefined;
|
|
181
|
+
if (typeof value === 'string')
|
|
182
|
+
return value;
|
|
183
|
+
throw new Error(`${field} must be a string.`);
|
|
184
|
+
}
|
|
185
|
+
function requiredStringValue(value, field) {
|
|
186
|
+
if (typeof value === 'string' && value.length > 0)
|
|
187
|
+
return value;
|
|
188
|
+
throw new Error(`${field} must be a non-empty string.`);
|
|
189
|
+
}
|
|
190
|
+
function optionalRecord(value, field) {
|
|
191
|
+
if (value === undefined || value === null)
|
|
192
|
+
return undefined;
|
|
193
|
+
return requiredRecord(value, field);
|
|
194
|
+
}
|
|
195
|
+
function requiredRecord(value, field) {
|
|
196
|
+
if ((0, json_1.isRecord)(value))
|
|
197
|
+
return value;
|
|
198
|
+
throw new Error(`${field} must be an object.`);
|
|
199
|
+
}
|
|
200
|
+
function stringRecordFromUnknown(value, field) {
|
|
201
|
+
if (value === undefined || value === null)
|
|
202
|
+
return {};
|
|
203
|
+
const record = requiredRecord(value, field);
|
|
204
|
+
const result = {};
|
|
205
|
+
for (const [key, item] of Object.entries(record)) {
|
|
206
|
+
if (typeof item !== 'string')
|
|
207
|
+
throw new Error(`${field}.${key} must be a string.`);
|
|
208
|
+
result[key] = item;
|
|
209
|
+
}
|
|
210
|
+
return result;
|
|
211
|
+
}
|
|
212
|
+
function stringArray(value, field) {
|
|
213
|
+
if (!Array.isArray(value))
|
|
214
|
+
throw new Error(`${field} must be an array.`);
|
|
215
|
+
const result = [];
|
|
216
|
+
for (const item of value) {
|
|
217
|
+
if (typeof item !== 'string')
|
|
218
|
+
throw new Error(`${field} entries must be strings.`);
|
|
219
|
+
result.push(item);
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
function stringResult(value) {
|
|
224
|
+
if (typeof value === 'string')
|
|
225
|
+
return value;
|
|
226
|
+
throw new Error('Provider help output must be a string.');
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=single-agent-runtime.js.map
|