agent-bober 0.15.0 → 0.17.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/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +30 -0
- package/README.md +127 -3
- package/agents/bober-architect.md +34 -0
- package/agents/bober-code-reviewer.md +2 -0
- package/agents/bober-curator.md +12 -0
- package/agents/bober-documenter.md +129 -0
- package/agents/bober-evaluator.md +46 -0
- package/agents/bober-generator.md +12 -0
- package/agents/bober-planner.md +8 -1
- package/dist/cli/commands/graph.js +3 -3
- package/dist/cli/commands/graph.js.map +1 -1
- package/dist/cli/commands/init.js +4 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/memory.d.ts +14 -0
- package/dist/cli/commands/memory.d.ts.map +1 -0
- package/dist/cli/commands/memory.js +132 -0
- package/dist/cli/commands/memory.js.map +1 -0
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +14 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +7 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/role-providers.d.ts +29 -0
- package/dist/config/role-providers.d.ts.map +1 -0
- package/dist/config/role-providers.js +115 -0
- package/dist/config/role-providers.js.map +1 -0
- package/dist/config/schema.d.ts +383 -14
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +42 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/eval-result.d.ts +112 -56
- package/dist/contracts/eval-result.d.ts.map +1 -1
- package/dist/contracts/eval-result.js +3 -0
- package/dist/contracts/eval-result.js.map +1 -1
- package/dist/contracts/sprint-contract.d.ts +30 -30
- package/dist/fleet/aggregator.d.ts +5 -0
- package/dist/fleet/aggregator.d.ts.map +1 -0
- package/dist/fleet/aggregator.js +39 -0
- package/dist/fleet/aggregator.js.map +1 -0
- package/dist/fleet/child-config.d.ts +12 -0
- package/dist/fleet/child-config.d.ts.map +1 -0
- package/dist/fleet/child-config.js +38 -0
- package/dist/fleet/child-config.js.map +1 -0
- package/dist/fleet/coordinator.d.ts +25 -0
- package/dist/fleet/coordinator.d.ts.map +1 -0
- package/dist/fleet/coordinator.js +40 -0
- package/dist/fleet/coordinator.js.map +1 -0
- package/dist/fleet/index.d.ts +40 -0
- package/dist/fleet/index.d.ts.map +1 -0
- package/dist/fleet/index.js +117 -0
- package/dist/fleet/index.js.map +1 -0
- package/dist/fleet/manifest.d.ts +51 -0
- package/dist/fleet/manifest.d.ts.map +1 -0
- package/dist/fleet/manifest.js +32 -0
- package/dist/fleet/manifest.js.map +1 -0
- package/dist/fleet/reporter.d.ts +32 -0
- package/dist/fleet/reporter.d.ts.map +1 -0
- package/dist/fleet/reporter.js +71 -0
- package/dist/fleet/reporter.js.map +1 -0
- package/dist/fleet/runner.d.ts +48 -0
- package/dist/fleet/runner.d.ts.map +1 -0
- package/dist/fleet/runner.js +104 -0
- package/dist/fleet/runner.js.map +1 -0
- package/dist/fleet/scaffolder.d.ts +12 -0
- package/dist/fleet/scaffolder.d.ts.map +1 -0
- package/dist/fleet/scaffolder.js +82 -0
- package/dist/fleet/scaffolder.js.map +1 -0
- package/dist/fleet/types.d.ts +21 -0
- package/dist/fleet/types.d.ts.map +1 -0
- package/dist/fleet/types.js +2 -0
- package/dist/fleet/types.js.map +1 -0
- package/dist/graph/cli.d.ts +6 -2
- package/dist/graph/cli.d.ts.map +1 -1
- package/dist/graph/cli.js +53 -12
- package/dist/graph/cli.js.map +1 -1
- package/dist/graph/pipeline-lifecycle.d.ts +9 -0
- package/dist/graph/pipeline-lifecycle.d.ts.map +1 -1
- package/dist/graph/pipeline-lifecycle.js +12 -0
- package/dist/graph/pipeline-lifecycle.js.map +1 -1
- package/dist/graph/preflight-injector.d.ts +14 -0
- package/dist/graph/preflight-injector.d.ts.map +1 -1
- package/dist/graph/preflight-injector.js +84 -4
- package/dist/graph/preflight-injector.js.map +1 -1
- package/dist/incident/types.d.ts +24 -24
- package/dist/mcp/tools/graph-schemas.d.ts +7 -7
- package/dist/mcp/tools/init.d.ts.map +1 -1
- package/dist/mcp/tools/init.js +2 -0
- package/dist/mcp/tools/init.js.map +1 -1
- package/dist/orchestrator/agent-loader.d.ts.map +1 -1
- package/dist/orchestrator/agent-loader.js +15 -1
- package/dist/orchestrator/agent-loader.js.map +1 -1
- package/dist/orchestrator/agentic-loop.d.ts +51 -0
- package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
- package/dist/orchestrator/agentic-loop.js +123 -4
- package/dist/orchestrator/agentic-loop.js.map +1 -1
- package/dist/orchestrator/arch-lenses.d.ts +7 -0
- package/dist/orchestrator/arch-lenses.d.ts.map +1 -0
- package/dist/orchestrator/arch-lenses.js +22 -0
- package/dist/orchestrator/arch-lenses.js.map +1 -0
- package/dist/orchestrator/architect-agent.d.ts +16 -0
- package/dist/orchestrator/architect-agent.d.ts.map +1 -1
- package/dist/orchestrator/architect-agent.js +509 -1
- package/dist/orchestrator/architect-agent.js.map +1 -1
- package/dist/orchestrator/curator-agent.js +1 -1
- package/dist/orchestrator/curator-agent.js.map +1 -1
- package/dist/orchestrator/deploy/types.d.ts +2 -2
- package/dist/orchestrator/documenter-agent.d.ts +57 -0
- package/dist/orchestrator/documenter-agent.d.ts.map +1 -0
- package/dist/orchestrator/documenter-agent.js +195 -0
- package/dist/orchestrator/documenter-agent.js.map +1 -0
- package/dist/orchestrator/environment.d.ts +45 -0
- package/dist/orchestrator/environment.d.ts.map +1 -0
- package/dist/orchestrator/environment.js +151 -0
- package/dist/orchestrator/environment.js.map +1 -0
- package/dist/orchestrator/eval-lenses.d.ts +7 -0
- package/dist/orchestrator/eval-lenses.d.ts.map +1 -0
- package/dist/orchestrator/eval-lenses.js +19 -0
- package/dist/orchestrator/eval-lenses.js.map +1 -0
- package/dist/orchestrator/eval-persist.d.ts +25 -0
- package/dist/orchestrator/eval-persist.d.ts.map +1 -0
- package/dist/orchestrator/eval-persist.js +74 -0
- package/dist/orchestrator/eval-persist.js.map +1 -0
- package/dist/orchestrator/evaluator-agent.d.ts +23 -0
- package/dist/orchestrator/evaluator-agent.d.ts.map +1 -1
- package/dist/orchestrator/evaluator-agent.js +60 -3
- package/dist/orchestrator/evaluator-agent.js.map +1 -1
- package/dist/orchestrator/generator-agent.d.ts.map +1 -1
- package/dist/orchestrator/generator-agent.js +32 -0
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/memory/distill.d.ts +60 -0
- package/dist/orchestrator/memory/distill.d.ts.map +1 -0
- package/dist/orchestrator/memory/distill.js +177 -0
- package/dist/orchestrator/memory/distill.js.map +1 -0
- package/dist/orchestrator/memory/eval-source.d.ts +20 -0
- package/dist/orchestrator/memory/eval-source.d.ts.map +1 -0
- package/dist/orchestrator/memory/eval-source.js +88 -0
- package/dist/orchestrator/memory/eval-source.js.map +1 -0
- package/dist/orchestrator/memory/retrieve.d.ts +45 -0
- package/dist/orchestrator/memory/retrieve.d.ts.map +1 -0
- package/dist/orchestrator/memory/retrieve.js +102 -0
- package/dist/orchestrator/memory/retrieve.js.map +1 -0
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +12 -0
- package/dist/orchestrator/model-resolver.js.map +1 -1
- package/dist/orchestrator/pipeline.d.ts +10 -0
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +111 -3
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts +22 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +160 -4
- package/dist/orchestrator/planner-agent.js.map +1 -1
- package/dist/orchestrator/research-agent.js +2 -2
- package/dist/orchestrator/research-agent.js.map +1 -1
- package/dist/orchestrator/tools/handlers.d.ts +14 -0
- package/dist/orchestrator/tools/handlers.d.ts.map +1 -1
- package/dist/orchestrator/tools/handlers.js +29 -4
- package/dist/orchestrator/tools/handlers.js.map +1 -1
- package/dist/orchestrator/tools/schemas.js +5 -5
- package/dist/orchestrator/tools/schemas.js.map +1 -1
- package/dist/orchestrator/workflow/args-builder.d.ts +35 -0
- package/dist/orchestrator/workflow/args-builder.d.ts.map +1 -0
- package/dist/orchestrator/workflow/args-builder.js +142 -0
- package/dist/orchestrator/workflow/args-builder.js.map +1 -0
- package/dist/orchestrator/workflow/budget.d.ts +57 -0
- package/dist/orchestrator/workflow/budget.d.ts.map +1 -0
- package/dist/orchestrator/workflow/budget.js +80 -0
- package/dist/orchestrator/workflow/budget.js.map +1 -0
- package/dist/orchestrator/workflow/conformance.d.ts +27 -0
- package/dist/orchestrator/workflow/conformance.d.ts.map +1 -0
- package/dist/orchestrator/workflow/conformance.js +111 -0
- package/dist/orchestrator/workflow/conformance.js.map +1 -0
- package/dist/orchestrator/workflow/eligibility.d.ts +8 -0
- package/dist/orchestrator/workflow/eligibility.d.ts.map +1 -0
- package/dist/orchestrator/workflow/eligibility.js +10 -0
- package/dist/orchestrator/workflow/eligibility.js.map +1 -0
- package/dist/orchestrator/workflow/engine.d.ts +10 -0
- package/dist/orchestrator/workflow/engine.d.ts.map +1 -0
- package/dist/orchestrator/workflow/engine.js +2 -0
- package/dist/orchestrator/workflow/engine.js.map +1 -0
- package/dist/orchestrator/workflow/errors.d.ts +13 -0
- package/dist/orchestrator/workflow/errors.d.ts.map +1 -0
- package/dist/orchestrator/workflow/errors.js +26 -0
- package/dist/orchestrator/workflow/errors.js.map +1 -0
- package/dist/orchestrator/workflow/flusher.d.ts +19 -0
- package/dist/orchestrator/workflow/flusher.d.ts.map +1 -0
- package/dist/orchestrator/workflow/flusher.js +81 -0
- package/dist/orchestrator/workflow/flusher.js.map +1 -0
- package/dist/orchestrator/workflow/interpreter.d.ts +48 -0
- package/dist/orchestrator/workflow/interpreter.d.ts.map +1 -0
- package/dist/orchestrator/workflow/interpreter.js +92 -0
- package/dist/orchestrator/workflow/interpreter.js.map +1 -0
- package/dist/orchestrator/workflow/pure-sprint.d.ts +65 -0
- package/dist/orchestrator/workflow/pure-sprint.d.ts.map +1 -0
- package/dist/orchestrator/workflow/pure-sprint.js +82 -0
- package/dist/orchestrator/workflow/pure-sprint.js.map +1 -0
- package/dist/orchestrator/workflow/reconciler.d.ts +15 -0
- package/dist/orchestrator/workflow/reconciler.d.ts.map +1 -0
- package/dist/orchestrator/workflow/reconciler.js +65 -0
- package/dist/orchestrator/workflow/reconciler.js.map +1 -0
- package/dist/orchestrator/workflow/resume-cursor.d.ts +10 -0
- package/dist/orchestrator/workflow/resume-cursor.d.ts.map +1 -0
- package/dist/orchestrator/workflow/resume-cursor.js +25 -0
- package/dist/orchestrator/workflow/resume-cursor.js.map +1 -0
- package/dist/orchestrator/workflow/retry.d.ts +50 -0
- package/dist/orchestrator/workflow/retry.d.ts.map +1 -0
- package/dist/orchestrator/workflow/retry.js +100 -0
- package/dist/orchestrator/workflow/retry.js.map +1 -0
- package/dist/orchestrator/workflow/scheduler.d.ts +87 -0
- package/dist/orchestrator/workflow/scheduler.d.ts.map +1 -0
- package/dist/orchestrator/workflow/scheduler.js +158 -0
- package/dist/orchestrator/workflow/scheduler.js.map +1 -0
- package/dist/orchestrator/workflow/selector.d.ts +26 -0
- package/dist/orchestrator/workflow/selector.d.ts.map +1 -0
- package/dist/orchestrator/workflow/selector.js +54 -0
- package/dist/orchestrator/workflow/selector.js.map +1 -0
- package/dist/orchestrator/workflow/synthesizer.d.ts +52 -0
- package/dist/orchestrator/workflow/synthesizer.d.ts.map +1 -0
- package/dist/orchestrator/workflow/synthesizer.js +75 -0
- package/dist/orchestrator/workflow/synthesizer.js.map +1 -0
- package/dist/orchestrator/workflow/ts-engine.d.ts +13 -0
- package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -0
- package/dist/orchestrator/workflow/ts-engine.js +14 -0
- package/dist/orchestrator/workflow/ts-engine.js.map +1 -0
- package/dist/orchestrator/workflow/types.d.ts +55 -0
- package/dist/orchestrator/workflow/types.d.ts.map +1 -0
- package/dist/orchestrator/workflow/types.js +3 -0
- package/dist/orchestrator/workflow/types.js.map +1 -0
- package/dist/orchestrator/workflow/workflow-engine.d.ts +31 -0
- package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -0
- package/dist/orchestrator/workflow/workflow-engine.js +70 -0
- package/dist/orchestrator/workflow/workflow-engine.js.map +1 -0
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +49 -6
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/claude-code.d.ts +44 -0
- package/dist/providers/claude-code.d.ts.map +1 -0
- package/dist/providers/claude-code.js +143 -0
- package/dist/providers/claude-code.js.map +1 -0
- package/dist/providers/factory.d.ts +16 -2
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +66 -12
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +27 -3
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +24 -3
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/preflight.d.ts +22 -0
- package/dist/providers/preflight.d.ts.map +1 -0
- package/dist/providers/preflight.js +54 -0
- package/dist/providers/preflight.js.map +1 -0
- package/dist/providers/structured.d.ts +130 -0
- package/dist/providers/structured.d.ts.map +1 -0
- package/dist/providers/structured.js +205 -0
- package/dist/providers/structured.js.map +1 -0
- package/dist/providers/types.d.ts +28 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/state/history-rotation.d.ts +17 -0
- package/dist/state/history-rotation.d.ts.map +1 -0
- package/dist/state/history-rotation.js +84 -0
- package/dist/state/history-rotation.js.map +1 -0
- package/dist/state/history.d.ts +16 -4
- package/dist/state/history.d.ts.map +1 -1
- package/dist/state/history.js +62 -20
- package/dist/state/history.js.map +1 -1
- package/dist/state/index.d.ts +1 -1
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +1 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/memory.d.ts +60 -0
- package/dist/state/memory.d.ts.map +1 -0
- package/dist/state/memory.js +242 -0
- package/dist/state/memory.js.map +1 -0
- package/hooks/hooks.json +12 -2
- package/package.json +9 -5
- package/scripts/spike-claude-code-provider.mjs +66 -0
- package/scripts/spike-deepseek.mjs +63 -0
- package/scripts/sync-targets.json +12 -0
- package/scripts/update-all.mjs +255 -0
- package/skills/bober.architect/SKILL.md +13 -0
- package/skills/bober.architect/references/arch-lens-panel.md +126 -0
- package/skills/bober.eval/SKILL.md +9 -0
- package/skills/bober.eval/references/lens-panel.md +115 -0
- package/skills/bober.plan/SKILL.md +6 -0
- package/skills/bober.run/SKILL.md +23 -4
- package/skills/bober.run/references/lens-panel.md +115 -0
- package/skills/bober.sprint/SKILL.md +44 -2
- package/skills/bober.sprint/references/lens-panel.md +115 -0
- package/skills/shared/arch-lens-panel.md +126 -0
- package/skills/shared/lens-panel.md +115 -0
|
@@ -2,6 +2,8 @@ import { AnthropicAdapter } from "./anthropic.js";
|
|
|
2
2
|
import { OpenAIAdapter } from "./openai.js";
|
|
3
3
|
import { GoogleAdapter } from "./google.js";
|
|
4
4
|
import { OpenAICompatAdapter } from "./openai-compat.js";
|
|
5
|
+
import { ClaudeCodeAdapter } from "./claude-code.js";
|
|
6
|
+
import { execa } from "execa";
|
|
5
7
|
import { resolveProviderModel } from "../orchestrator/model-resolver.js";
|
|
6
8
|
// ── Deterministic stub (BOBER_TEST_DETERMINISTIC) ─────────────────────────────
|
|
7
9
|
//
|
|
@@ -26,15 +28,39 @@ class DeterministicStubClient {
|
|
|
26
28
|
};
|
|
27
29
|
}
|
|
28
30
|
}
|
|
31
|
+
const defaultBinaryProbe = async (binary) => {
|
|
32
|
+
try {
|
|
33
|
+
const r = await execa(binary, ["--version"], { reject: false, timeout: 5_000 });
|
|
34
|
+
return r.exitCode === 0;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false; // ENOENT → not on PATH
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Verify the claude CLI binary is on PATH. Throws an Error naming the binary
|
|
42
|
+
* when it is absent. Call this before using the claude-code provider.
|
|
43
|
+
*
|
|
44
|
+
* @param binary - CLI binary name/path (default "claude").
|
|
45
|
+
* @param probe - Injectable PATH-check function (default uses execa; override in tests).
|
|
46
|
+
*/
|
|
47
|
+
export async function preflightClaudeBinary(binary = "claude", probe = defaultBinaryProbe) {
|
|
48
|
+
const ok = await probe(binary);
|
|
49
|
+
if (!ok) {
|
|
50
|
+
throw new Error(`The "${binary}" CLI was not found on PATH. The claude-code provider ` +
|
|
51
|
+
`requires the Claude Code CLI. Install it and ensure "${binary}" is on your PATH.`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
29
54
|
/**
|
|
30
55
|
* Validate that the required API key environment variable is set for a given provider.
|
|
31
56
|
*
|
|
32
57
|
* @param resolvedProvider - The resolved provider name.
|
|
33
58
|
* @param role - Optional role label (e.g. "Planner", "Generator", "Evaluator") for the error message.
|
|
34
59
|
* @param apiKey - Optional explicit API key from providerConfig (skips env var check if set).
|
|
60
|
+
* @param endpoint - Optional endpoint URL used to distinguish DeepSeek from other openai-compat servers.
|
|
35
61
|
* @throws If the required environment variable is missing and no explicit apiKey was provided.
|
|
36
62
|
*/
|
|
37
|
-
export function validateApiKey(resolvedProvider, role, apiKey) {
|
|
63
|
+
export function validateApiKey(resolvedProvider, role, apiKey, endpoint) {
|
|
38
64
|
const roleLabel = role ?? resolvedProvider;
|
|
39
65
|
switch (resolvedProvider) {
|
|
40
66
|
case "anthropic": {
|
|
@@ -64,7 +90,19 @@ export function validateApiKey(resolvedProvider, role, apiKey) {
|
|
|
64
90
|
break;
|
|
65
91
|
}
|
|
66
92
|
case "openai-compat":
|
|
67
|
-
// API key is optional for Ollama and other local servers
|
|
93
|
+
// API key is optional for Ollama and other local servers.
|
|
94
|
+
// DeepSeek (api.deepseek.com) requires a key — check specifically for it.
|
|
95
|
+
if (endpoint?.includes("api.deepseek.com")) {
|
|
96
|
+
const key = apiKey ?? process.env["DEEPSEEK_API_KEY"];
|
|
97
|
+
if (!key) {
|
|
98
|
+
throw new Error(`${roleLabel} is configured to use DeepSeek but neither providerConfig.apiKey nor DEEPSEEK_API_KEY is set. ` +
|
|
99
|
+
`Set the DEEPSEEK_API_KEY environment variable and try again.`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
break;
|
|
103
|
+
case "claude-code":
|
|
104
|
+
// Subscription provider: no API key is read or required. The `claude`
|
|
105
|
+
// binary PATH preflight is async and runs via preflightClaudeBinary().
|
|
68
106
|
break;
|
|
69
107
|
default:
|
|
70
108
|
// Unknown providers: no validation, let createClient handle the error.
|
|
@@ -115,8 +153,16 @@ export function createClient(provider, endpoint, providerConfig, model, role) {
|
|
|
115
153
|
const apiKey = typeof providerConfig?.["apiKey"] === "string"
|
|
116
154
|
? providerConfig["apiKey"]
|
|
117
155
|
: undefined;
|
|
156
|
+
// Hoist endpoint resolution so validateApiKey can distinguish DeepSeek from
|
|
157
|
+
// other openai-compat servers (e.g. Ollama). Explicit arg wins, then model
|
|
158
|
+
// resolution (for deepseek/ and ollama/ shorthands), then providerConfig.
|
|
159
|
+
const resolvedEndpoint = endpoint ??
|
|
160
|
+
(!provider && model ? resolveProviderModel(model).endpoint : undefined) ??
|
|
161
|
+
(typeof providerConfig?.["endpoint"] === "string"
|
|
162
|
+
? providerConfig["endpoint"]
|
|
163
|
+
: undefined);
|
|
118
164
|
// Validate API key before constructing the adapter.
|
|
119
|
-
validateApiKey(resolvedProvider, role, apiKey);
|
|
165
|
+
validateApiKey(resolvedProvider, role, apiKey, resolvedEndpoint);
|
|
120
166
|
// Resolve the model ID (for cases where provider was inferred from shorthand)
|
|
121
167
|
const resolvedModelId = !provider && model
|
|
122
168
|
? resolveProviderModel(model).modelId
|
|
@@ -133,20 +179,28 @@ export function createClient(provider, endpoint, providerConfig, model, role) {
|
|
|
133
179
|
case "google":
|
|
134
180
|
return new GoogleAdapter(resolvedModelId, apiKey ?? process.env["GOOGLE_API_KEY"] ?? process.env["GEMINI_API_KEY"]);
|
|
135
181
|
case "openai-compat": {
|
|
136
|
-
// Resolve endpoint: explicit arg wins, then model resolution (for ollama/ prefix),
|
|
137
|
-
// then providerConfig, then error.
|
|
138
|
-
const resolvedEndpoint = endpoint ??
|
|
139
|
-
(!provider && model ? resolveProviderModel(model).endpoint : undefined) ??
|
|
140
|
-
(typeof providerConfig?.["endpoint"] === "string"
|
|
141
|
-
? providerConfig["endpoint"]
|
|
142
|
-
: undefined);
|
|
143
182
|
if (!resolvedEndpoint) {
|
|
144
183
|
throw new Error('OpenAI-compatible provider requires an endpoint. Set endpoint in provider config or use the "ollama/" model prefix.');
|
|
145
184
|
}
|
|
146
|
-
|
|
185
|
+
// Inject DEEPSEEK_API_KEY env fallback only for the api.deepseek.com endpoint.
|
|
186
|
+
// Ollama and other openai-compat endpoints keep the no-key (not-needed) behavior.
|
|
187
|
+
const compatKey = apiKey ??
|
|
188
|
+
(resolvedEndpoint.includes("api.deepseek.com")
|
|
189
|
+
? process.env["DEEPSEEK_API_KEY"]
|
|
190
|
+
: undefined);
|
|
191
|
+
return new OpenAICompatAdapter(resolvedEndpoint, resolvedModelId, compatKey);
|
|
192
|
+
}
|
|
193
|
+
case "claude-code": {
|
|
194
|
+
const binary = typeof providerConfig?.["binary"] === "string"
|
|
195
|
+
? providerConfig["binary"]
|
|
196
|
+
: "claude";
|
|
197
|
+
const timeoutMs = typeof providerConfig?.["timeoutMs"] === "number"
|
|
198
|
+
? providerConfig["timeoutMs"]
|
|
199
|
+
: 180_000;
|
|
200
|
+
return new ClaudeCodeAdapter(binary, timeoutMs);
|
|
147
201
|
}
|
|
148
202
|
default:
|
|
149
|
-
throw new Error(`Unsupported provider: "${resolvedProvider}". Supported providers: anthropic, openai, google, openai-compat.`);
|
|
203
|
+
throw new Error(`Unsupported provider: "${resolvedProvider}". Supported providers: anthropic, openai, google, openai-compat, claude-code.`);
|
|
150
204
|
}
|
|
151
205
|
}
|
|
152
206
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/providers/factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,YAAY,EAIb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,YAAY,EAIb,MAAM,YAAY,CAAC;AA6MpB;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,4DAA4D;IAC5D,OAAO,CAAC,KAAK,CAAmC;gBAEpC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAK1C;;;;;OAKG;YACW,QAAQ;IAmChB,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAuEtD"}
|
package/dist/providers/google.js
CHANGED
|
@@ -21,6 +21,17 @@ function toGeminiTool(tools) {
|
|
|
21
21
|
})),
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Sanitize a JSON Schema for Gemini's `responseSchema`.
|
|
26
|
+
*
|
|
27
|
+
* Gemini rejects the JSON-Schema keyword `additionalProperties`, so we return a
|
|
28
|
+
* shallow copy of the schema with the top-level `additionalProperties` key
|
|
29
|
+
* removed. A shallow strip is sufficient for the flat schemas we use.
|
|
30
|
+
*/
|
|
31
|
+
function sanitizeGeminiResponseSchema(schema) {
|
|
32
|
+
const { additionalProperties: _additionalProperties, ...rest } = schema;
|
|
33
|
+
return rest;
|
|
34
|
+
}
|
|
24
35
|
/**
|
|
25
36
|
* Normalize a Gemini finishReason to our StopReason type.
|
|
26
37
|
*/
|
|
@@ -157,17 +168,30 @@ export class GoogleAdapter {
|
|
|
157
168
|
return this.genAI;
|
|
158
169
|
}
|
|
159
170
|
async chat(params) {
|
|
160
|
-
const { model, system, messages, tools, maxTokens: _maxTokens = 16384 } = params;
|
|
171
|
+
const { model, system, messages, tools, responseSchema, maxTokens: _maxTokens = 16384, } = params;
|
|
161
172
|
const genAI = await this.getGenAI();
|
|
173
|
+
// When a responseSchema is set, request Gemini's native structured output.
|
|
174
|
+
// Gemini rejects `additionalProperties`, so strip it before forwarding.
|
|
175
|
+
const generationConfig = responseSchema
|
|
176
|
+
? {
|
|
177
|
+
responseMimeType: "application/json",
|
|
178
|
+
responseSchema: sanitizeGeminiResponseSchema(responseSchema),
|
|
179
|
+
}
|
|
180
|
+
: undefined;
|
|
162
181
|
// Get the generative model — system instruction set at model config level
|
|
163
182
|
const generativeModel = genAI.getGenerativeModel({
|
|
164
183
|
model: model || this.model,
|
|
165
184
|
...(system ? { systemInstruction: system } : {}),
|
|
185
|
+
...(generationConfig ? { generationConfig } : {}),
|
|
166
186
|
});
|
|
167
187
|
// Convert provider-agnostic Message[] to Gemini contents format
|
|
168
188
|
const contents = messages.flatMap(toGeminiContents);
|
|
169
|
-
// Convert ToolDef[] to Gemini tools format (all declarations in one tool)
|
|
170
|
-
|
|
189
|
+
// Convert ToolDef[] to Gemini tools format (all declarations in one tool).
|
|
190
|
+
// responseSchema is mutually exclusive with tools — when set, user tools
|
|
191
|
+
// are NOT forwarded (structured output wins).
|
|
192
|
+
const geminiTools = !responseSchema && tools && tools.length > 0
|
|
193
|
+
? [toGeminiTool(tools)]
|
|
194
|
+
: undefined;
|
|
171
195
|
const result = await generativeModel.generateContent({
|
|
172
196
|
contents,
|
|
173
197
|
...(geminiTools ? { tools: geminiTools } : {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"google.js","sourceRoot":"","sources":["../../src/providers/google.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,5 +3,7 @@ export { AnthropicAdapter } from "./anthropic.js";
|
|
|
3
3
|
export { OpenAIAdapter } from "./openai.js";
|
|
4
4
|
export { GoogleAdapter } from "./google.js";
|
|
5
5
|
export { OpenAICompatAdapter } from "./openai-compat.js";
|
|
6
|
-
export {
|
|
6
|
+
export { ClaudeCodeAdapter } from "./claude-code.js";
|
|
7
|
+
export { createClient, validateApiKey, preflightClaudeBinary, type ProviderName, type BinaryProbe } from "./factory.js";
|
|
8
|
+
export { coerceJson, zodValidator, runStructuredAgent, JsonCoercionError, StructuredOutputError, type Validator, type ValidationResult, type SafeParseable, type RunStructuredAgentOptions, type StructuredAgentResult, } from "./structured.js";
|
|
7
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAExH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC"}
|
package/dist/providers/index.js
CHANGED
|
@@ -2,5 +2,7 @@ export { AnthropicAdapter } from "./anthropic.js";
|
|
|
2
2
|
export { OpenAIAdapter } from "./openai.js";
|
|
3
3
|
export { GoogleAdapter } from "./google.js";
|
|
4
4
|
export { OpenAICompatAdapter } from "./openai-compat.js";
|
|
5
|
-
export {
|
|
5
|
+
export { ClaudeCodeAdapter } from "./claude-code.js";
|
|
6
|
+
export { createClient, validateApiKey, preflightClaudeBinary } from "./factory.js";
|
|
7
|
+
export { coerceJson, zodValidator, runStructuredAgent, JsonCoercionError, StructuredOutputError, } from "./structured.js";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAuC,MAAM,cAAc,CAAC;AAExH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,GAMtB,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,YAAY,EAKb,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,YAAY,EAKb,MAAM,YAAY,CAAC;AAyNpB;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAc,YAAW,SAAS;IAC7C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsC;IAErE,4DAA4D;IAC5D,OAAO,CAAC,MAAM,CAA8B;gBAG1C,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ1C;;;;OAIG;YACW,SAAS;IAqCjB,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;CAqEtD"}
|
package/dist/providers/openai.js
CHANGED
|
@@ -168,19 +168,40 @@ export class OpenAIAdapter {
|
|
|
168
168
|
return this.client;
|
|
169
169
|
}
|
|
170
170
|
async chat(params) {
|
|
171
|
-
const { model, system, messages, tools, maxTokens = 16384 } = params;
|
|
171
|
+
const { model, system, messages, tools, maxTokens = 16384, responseSchema, jsonObjectMode } = params;
|
|
172
172
|
const client = await this.getClient();
|
|
173
173
|
// Build the messages array: system message first, then conversation
|
|
174
174
|
const oaiMessages = [
|
|
175
175
|
{ role: "system", content: system },
|
|
176
176
|
...messages.flatMap(toOpenAIMessages),
|
|
177
177
|
];
|
|
178
|
-
//
|
|
179
|
-
|
|
178
|
+
// Structured output via response_format. `responseSchema` (strict json_schema)
|
|
179
|
+
// wins when set; otherwise `jsonObjectMode` requests the loose json_object
|
|
180
|
+
// mode (broadly supported, incl. DeepSeek, which rejects json_schema).
|
|
181
|
+
// Both disable tool forwarding (mutually exclusive with structured output).
|
|
182
|
+
// strict:false maximises compatibility; the caller validates/repairs output.
|
|
183
|
+
const responseFormat = responseSchema
|
|
184
|
+
? {
|
|
185
|
+
type: "json_schema",
|
|
186
|
+
json_schema: {
|
|
187
|
+
name: "structured_output",
|
|
188
|
+
schema: responseSchema,
|
|
189
|
+
strict: false,
|
|
190
|
+
},
|
|
191
|
+
}
|
|
192
|
+
: jsonObjectMode
|
|
193
|
+
? { type: "json_object" }
|
|
194
|
+
: undefined;
|
|
195
|
+
// Convert ToolDef[] to OpenAI tools format. Skipped entirely when structured
|
|
196
|
+
// output (responseSchema or json_object mode) is requested.
|
|
197
|
+
const oaiTools = !responseSchema && !jsonObjectMode && tools && tools.length > 0
|
|
198
|
+
? tools.map(toOpenAITool)
|
|
199
|
+
: undefined;
|
|
180
200
|
const response = await client.chat.completions.create({
|
|
181
201
|
model: model || this.model,
|
|
182
202
|
messages: oaiMessages,
|
|
183
203
|
...(oaiTools ? { tools: oaiTools } : {}),
|
|
204
|
+
...(responseFormat ? { response_format: responseFormat } : {}),
|
|
184
205
|
max_tokens: maxTokens,
|
|
185
206
|
});
|
|
186
207
|
const choice = response.choices[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { BoberConfig } from "../config/schema.js";
|
|
2
|
+
/** The actionable hint string. MUST contain 'npm install openai'. */
|
|
3
|
+
export declare const OPENAI_PEER_HINT: string;
|
|
4
|
+
/**
|
|
5
|
+
* Injectable importer so tests can simulate openai present/absent without
|
|
6
|
+
* touching the real module graph. Mirrors the getClient() pattern in openai.ts.
|
|
7
|
+
*/
|
|
8
|
+
export type OpenaiImporter = () => Promise<unknown>;
|
|
9
|
+
/** Returns true if any configured role resolves to an openai-family provider. */
|
|
10
|
+
export declare function usesOpenaiFamily(config: Partial<BoberConfig>): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Preflight: if an openai-family provider is configured but the openai package
|
|
13
|
+
* is absent, emit an install hint via logger.warn and return the hint string.
|
|
14
|
+
* If openai is installed OR no openai-family role is configured, return null.
|
|
15
|
+
* NEVER throws — this is a warning/hint only.
|
|
16
|
+
*
|
|
17
|
+
* @param config - The bober config (or partial). Scans planner/curator/generator/evaluator/codeReview roles.
|
|
18
|
+
* @param importer - Injectable importer for testability (default: dynamic import("openai")).
|
|
19
|
+
* @returns The hint string (contains 'npm install openai') if missing, otherwise null.
|
|
20
|
+
*/
|
|
21
|
+
export declare function preflightOpenaiPeer(config: Partial<BoberConfig>, importer?: OpenaiImporter): Promise<string | null>;
|
|
22
|
+
//# sourceMappingURL=preflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/providers/preflight.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKvD,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,QAEkD,CAAC;AAEhF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AASpD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAiBtE;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,EAC5B,QAAQ,GAAE,cAAgC,GACzC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { resolveProviderModel } from "../orchestrator/model-resolver.js";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
/** Providers that require the optional `openai` peer package. */
|
|
4
|
+
const OPENAI_FAMILY = new Set(["openai", "openai-compat"]);
|
|
5
|
+
/** The actionable hint string. MUST contain 'npm install openai'. */
|
|
6
|
+
export const OPENAI_PEER_HINT = 'A configured role uses an OpenAI-family provider (openai/openai-compat/DeepSeek), ' +
|
|
7
|
+
'but the optional "openai" package is not installed. Run: npm install openai';
|
|
8
|
+
const defaultImporter = () => {
|
|
9
|
+
// Construct the specifier at runtime so TypeScript does not attempt
|
|
10
|
+
// to statically resolve the optional peer dependency at compile time.
|
|
11
|
+
const specifier = "openai";
|
|
12
|
+
return import(/* @vite-ignore */ specifier);
|
|
13
|
+
};
|
|
14
|
+
/** Returns true if any configured role resolves to an openai-family provider. */
|
|
15
|
+
export function usesOpenaiFamily(config) {
|
|
16
|
+
const sections = [
|
|
17
|
+
config.planner,
|
|
18
|
+
config.curator,
|
|
19
|
+
config.generator,
|
|
20
|
+
config.evaluator,
|
|
21
|
+
config.codeReview,
|
|
22
|
+
];
|
|
23
|
+
for (const section of sections) {
|
|
24
|
+
if (!section?.model)
|
|
25
|
+
continue;
|
|
26
|
+
const { provider } = resolveProviderModel(section.model, section.provider);
|
|
27
|
+
if (OPENAI_FAMILY.has(provider))
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Preflight: if an openai-family provider is configured but the openai package
|
|
34
|
+
* is absent, emit an install hint via logger.warn and return the hint string.
|
|
35
|
+
* If openai is installed OR no openai-family role is configured, return null.
|
|
36
|
+
* NEVER throws — this is a warning/hint only.
|
|
37
|
+
*
|
|
38
|
+
* @param config - The bober config (or partial). Scans planner/curator/generator/evaluator/codeReview roles.
|
|
39
|
+
* @param importer - Injectable importer for testability (default: dynamic import("openai")).
|
|
40
|
+
* @returns The hint string (contains 'npm install openai') if missing, otherwise null.
|
|
41
|
+
*/
|
|
42
|
+
export async function preflightOpenaiPeer(config, importer = defaultImporter) {
|
|
43
|
+
if (!usesOpenaiFamily(config))
|
|
44
|
+
return null; // sc-3-4: anthropic-only => null
|
|
45
|
+
try {
|
|
46
|
+
await importer(); // sc-3-3: openai present => no hint
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
logger.warn(OPENAI_PEER_HINT); // sc-3-2: openai absent => emit hint
|
|
51
|
+
return OPENAI_PEER_HINT;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=preflight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/providers/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C,iEAAiE;AACjE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;AAE3D,qEAAqE;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAC3B,oFAAoF;IACpF,6EAA6E,CAAC;AAQhF,MAAM,eAAe,GAAmB,GAAG,EAAE;IAC3C,oEAAoE;IACpE,sEAAsE;IACtE,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC3B,OAAO,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,MAA4B;IAC3D,MAAM,QAAQ,GAAG;QACf,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,SAAS;QAChB,MAAM,CAAC,UAAU;KAClB,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,EAAE,KAAK;YAAE,SAAS;QAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CACvC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,QAAQ,CACjB,CAAC;QACF,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA4B,EAC5B,WAA2B,eAAe;IAE1C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,iCAAiC;IAC7E,IAAI,CAAC;QACH,MAAM,QAAQ,EAAE,CAAC,CAAC,oCAAoC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,qCAAqC;QACpE,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-constrained ("structured") output utilities.
|
|
3
|
+
*
|
|
4
|
+
* Provides a provider-agnostic single-shot structured call that makes JSON
|
|
5
|
+
* output reliable even on small local models (DeepSeek / Ollama / LM Studio),
|
|
6
|
+
* where the server may not honor a strict schema. It:
|
|
7
|
+
*
|
|
8
|
+
* 1. requests native structured output (`ChatParams.responseSchema`) AND
|
|
9
|
+
* injects the schema into the system prompt — belt-and-suspenders for
|
|
10
|
+
* models that ignore the native knob;
|
|
11
|
+
* 2. coerces the model's raw text into JSON, tolerating the failure modes
|
|
12
|
+
* 7B-class models exhibit (markdown fences, surrounding prose);
|
|
13
|
+
* 3. validates the parsed value against a caller-supplied validator
|
|
14
|
+
* (typically backed by a Zod schema); and
|
|
15
|
+
* 4. on failure, performs up to `maxRepairs` repair round-trips, feeding the
|
|
16
|
+
* validation error back to the model.
|
|
17
|
+
*
|
|
18
|
+
* See structured.test.ts for the recovery-rate fixture suite that pins the
|
|
19
|
+
* single-shot + one-repair reliability target.
|
|
20
|
+
*/
|
|
21
|
+
import type { LLMClient, JsonSchemaObject } from "./types.js";
|
|
22
|
+
/** Raised by {@link coerceJson} when no JSON value can be extracted from text. */
|
|
23
|
+
export declare class JsonCoercionError extends Error {
|
|
24
|
+
/** The raw model text that could not be coerced. */
|
|
25
|
+
readonly raw: string;
|
|
26
|
+
constructor(message: string,
|
|
27
|
+
/** The raw model text that could not be coerced. */
|
|
28
|
+
raw: string);
|
|
29
|
+
}
|
|
30
|
+
/** Raised by {@link runStructuredAgent} when every attempt fails validation. */
|
|
31
|
+
export declare class StructuredOutputError extends Error {
|
|
32
|
+
/** The last raw model text seen. */
|
|
33
|
+
readonly raw: string;
|
|
34
|
+
/** Total chat calls made before giving up. */
|
|
35
|
+
readonly attempts: number;
|
|
36
|
+
constructor(message: string,
|
|
37
|
+
/** The last raw model text seen. */
|
|
38
|
+
raw: string,
|
|
39
|
+
/** Total chat calls made before giving up. */
|
|
40
|
+
attempts: number);
|
|
41
|
+
}
|
|
42
|
+
export type ValidationResult<T> = {
|
|
43
|
+
ok: true;
|
|
44
|
+
value: T;
|
|
45
|
+
} | {
|
|
46
|
+
ok: false;
|
|
47
|
+
error: string;
|
|
48
|
+
};
|
|
49
|
+
/** Validates and narrows a coerced JSON value to `T`. */
|
|
50
|
+
export type Validator<T> = (raw: unknown) => ValidationResult<T>;
|
|
51
|
+
/**
|
|
52
|
+
* Structural shape of a Zod schema's `safeParse`. Declared here (instead of
|
|
53
|
+
* importing `zod`) so this module stays dependency-pure and accepts any
|
|
54
|
+
* validator exposing the same surface.
|
|
55
|
+
*/
|
|
56
|
+
export interface SafeParseable<T> {
|
|
57
|
+
safeParse(data: unknown): {
|
|
58
|
+
success: true;
|
|
59
|
+
data: T;
|
|
60
|
+
} | {
|
|
61
|
+
success: false;
|
|
62
|
+
error: {
|
|
63
|
+
issues: ReadonlyArray<{
|
|
64
|
+
path: ReadonlyArray<PropertyKey>;
|
|
65
|
+
message: string;
|
|
66
|
+
}>;
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Build a {@link Validator} from a Zod schema (or anything exposing
|
|
72
|
+
* `safeParse`). Flattens issues into one human-readable string the model can
|
|
73
|
+
* act on during a repair round-trip.
|
|
74
|
+
*/
|
|
75
|
+
export declare function zodValidator<T>(schema: SafeParseable<T>): Validator<T>;
|
|
76
|
+
/**
|
|
77
|
+
* Extract a JSON value from a model's raw text response.
|
|
78
|
+
*
|
|
79
|
+
* Handles the common local-model failure modes, in order:
|
|
80
|
+
* 1. direct `JSON.parse` (well-behaved providers / strict json mode);
|
|
81
|
+
* 2. strip a leading/trailing markdown code fence, then parse;
|
|
82
|
+
* 3. extract the substring spanning the first `{`/`[` to the matching last
|
|
83
|
+
* `}`/`]` (drops surrounding prose), then parse.
|
|
84
|
+
*
|
|
85
|
+
* @throws {JsonCoercionError} if nothing parses.
|
|
86
|
+
*/
|
|
87
|
+
export declare function coerceJson(text: string): unknown;
|
|
88
|
+
export interface RunStructuredAgentOptions<T> {
|
|
89
|
+
/** Provider-agnostic LLM client (any adapter from the provider factory). */
|
|
90
|
+
client: LLMClient;
|
|
91
|
+
/** Model ID (resolved via the factory / model-resolver). */
|
|
92
|
+
model: string;
|
|
93
|
+
/** Base system prompt. The schema instruction is appended automatically. */
|
|
94
|
+
system: string;
|
|
95
|
+
/** The task / user message. */
|
|
96
|
+
prompt: string;
|
|
97
|
+
/** Provider-facing JSON Schema (also injected into the system prompt). */
|
|
98
|
+
schema: JsonSchemaObject;
|
|
99
|
+
/** Validates + narrows the coerced JSON. Typically `zodValidator(SomeSchema)`. */
|
|
100
|
+
validate: Validator<T>;
|
|
101
|
+
/** Max repair round-trips after the first attempt. Default 1. */
|
|
102
|
+
maxRepairs?: number;
|
|
103
|
+
/** Per-call max tokens. */
|
|
104
|
+
maxTokens?: number;
|
|
105
|
+
}
|
|
106
|
+
export interface StructuredAgentResult<T> {
|
|
107
|
+
/** The validated, typed value. */
|
|
108
|
+
value: T;
|
|
109
|
+
/** Total chat calls made (1 = first-try success). */
|
|
110
|
+
attempts: number;
|
|
111
|
+
/** True if any repair round-trip was needed. */
|
|
112
|
+
repaired: boolean;
|
|
113
|
+
/** Cumulative token usage across all attempts. */
|
|
114
|
+
usage: {
|
|
115
|
+
inputTokens: number;
|
|
116
|
+
outputTokens: number;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Run a single-shot structured-output call with coercion, validation, and
|
|
121
|
+
* bounded repair. Returns a validated, typed value.
|
|
122
|
+
*
|
|
123
|
+
* The returned `ChatResponse.text` is parsed via {@link coerceJson} and checked
|
|
124
|
+
* with `validate`. If either fails and repairs remain, the bad output and the
|
|
125
|
+
* error are fed back as a follow-up turn.
|
|
126
|
+
*
|
|
127
|
+
* @throws {StructuredOutputError} if no attempt produces a schema-valid value.
|
|
128
|
+
*/
|
|
129
|
+
export declare function runStructuredAgent<T>(opts: RunStructuredAgentOptions<T>): Promise<StructuredAgentResult<T>>;
|
|
130
|
+
//# sourceMappingURL=structured.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured.d.ts","sourceRoot":"","sources":["../../src/providers/structured.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAW,MAAM,YAAY,CAAC;AAIvE,kFAAkF;AAClF,qBAAa,iBAAkB,SAAQ,KAAK;IAGxC,oDAAoD;IACpD,QAAQ,CAAC,GAAG,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM;IACf,oDAAoD;IAC3C,GAAG,EAAE,MAAM;CAKvB;AAED,gFAAgF;AAChF,qBAAa,qBAAsB,SAAQ,KAAK;IAG5C,oCAAoC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,EAAE,MAAM;gBAJzB,OAAO,EAAE,MAAM;IACf,oCAAoC;IAC3B,GAAG,EAAE,MAAM;IACpB,8CAA8C;IACrC,QAAQ,EAAE,MAAM;CAK5B;AAID,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjC,yDAAyD;AACzD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAEjE;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,SAAS,CAAC,IAAI,EAAE,OAAO,GACnB;QAAE,OAAO,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,GAC1B;QACE,OAAO,EAAE,KAAK,CAAC;QACf,KAAK,EAAE;YAAE,MAAM,EAAE,aAAa,CAAC;gBAAE,IAAI,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;KACzF,CAAC;CACP;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAWtE;AAID;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAoBhD;AAyCD,MAAM,WAAW,yBAAyB,CAAC,CAAC;IAC1C,4EAA4E;IAC5E,MAAM,EAAE,SAAS,CAAC;IAClB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,EAAE,gBAAgB,CAAC;IACzB,kFAAkF;IAClF,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACvB,iEAAiE;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,kCAAkC;IAClC,KAAK,EAAE,CAAC,CAAC;IACT,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,QAAQ,EAAE,OAAO,CAAC;IAClB,kDAAkD;IAClD,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAOD;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,IAAI,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAwDnC"}
|