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
package/dist/config/loader.js
CHANGED
|
@@ -3,6 +3,7 @@ import { join } from "node:path";
|
|
|
3
3
|
import { constants } from "node:fs";
|
|
4
4
|
import { BoberConfigSchema, PartialBoberConfigSchema, } from "./schema.js";
|
|
5
5
|
import { getDefaults } from "./defaults.js";
|
|
6
|
+
import { resolveRoleProviders } from "./role-providers.js";
|
|
6
7
|
/**
|
|
7
8
|
* Migrate a v1 config (with `project.type`) to the v2 format (with `project.mode` / `project.preset`).
|
|
8
9
|
* Returns the input unchanged if it is not a v1 config.
|
|
@@ -163,6 +164,7 @@ export async function loadConfig(projectRoot) {
|
|
|
163
164
|
model: "sonnet",
|
|
164
165
|
strategies: [],
|
|
165
166
|
maxIterations: 3,
|
|
167
|
+
panel: { enabled: false, lenses: [], maxConcurrent: 4 },
|
|
166
168
|
},
|
|
167
169
|
sprint: defaults.sprint ?? {
|
|
168
170
|
maxSprints: 10,
|
|
@@ -184,6 +186,7 @@ export async function loadConfig(projectRoot) {
|
|
|
184
186
|
eventQueueBound: 1000,
|
|
185
187
|
worktreeRoot: ".bober/worktrees",
|
|
186
188
|
cleanupWorktreeOnSuccess: true,
|
|
189
|
+
engine: "ts",
|
|
187
190
|
},
|
|
188
191
|
commands: defaults.commands ?? {},
|
|
189
192
|
}, partial);
|
|
@@ -203,6 +206,10 @@ export async function loadConfig(projectRoot) {
|
|
|
203
206
|
process.stderr.write("warn: pipeline.mode='careful' with checkpointMechanism='noop' — checkpoints will auto-approve. " +
|
|
204
207
|
"Did you mean 'disk' or 'cli'?\n");
|
|
205
208
|
}
|
|
209
|
+
// Resolve and validate per-role providers. Throws at load time (not mid-sprint) if a
|
|
210
|
+
// tool-using role would land on claude-code with no alternative provider configured.
|
|
211
|
+
// Prompt roles (planner, researcher) are always allowed on claude-code.
|
|
212
|
+
resolveRoleProviders(cfg);
|
|
206
213
|
return cfg;
|
|
207
214
|
}
|
|
208
215
|
//# sourceMappingURL=loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,EACL,iBAAiB,EACjB,wBAAwB,GAEzB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;GAGG;AACH,SAAS,eAAe,CAAC,GAAY;IACnC,IACE,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,EACnB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,OAA8C,CAAC;IAEnE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,EAAE,CAAC;QACpE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7B,oCAAoC;IACpC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC;IACrD,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAkC,CAAC;IACpE,OAAO,eAAe,CAAC,IAAI,CAAC;IAE5B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,iBAAiB;YACpB,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC;YACpC,eAAe,CAAC,MAAM,GAAG,YAAY,CAAC;YACtC,MAAM;QACR,KAAK,YAAY;YACf,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC;YACpC,MAAM;QACR,KAAK,SAAS;YACZ,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC;YACpC,MAAM;QACR;YACE,yCAAyC;YACzC,eAAe,CAAC,IAAI,GAAG,YAAY,CAAC;YACpC,MAAM;IACV,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACxB,mBAAmB;IACnB,oBAAoB;CACZ,CAAC;AAEX;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,WAAmB;IAC/C,KAAK,MAAM,SAAS,IAAI,iBAAiB,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACvC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IAChD,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAChB,IAAO,EACP,QAAoB;IAEpB,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAA6B,CAAC;IAEtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,WAAW,GAAI,QAAoC,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAE5B,IACE,WAAW,KAAK,SAAS;YACzB,WAAW,KAAK,IAAI;YACpB,OAAO,WAAW,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;YAC3B,OAAO,OAAO,KAAK,QAAQ;YAC3B,OAAO,KAAK,IAAI;YAChB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CACrB,OAAkC,EAClC,WAAsC,CACvC,CAAC;QACJ,CAAC;aAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,MAAW,CAAC;AACrB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,qCAAqC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrG,CAAC;IACJ,CAAC;IAED,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,iCAAiC,UAAU,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAClG,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+BAA+B,UAAU,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAChG,EAAE,KAAK,EAAE,GAAG,EAAE,CACf,CAAC;IACJ,CAAC;IAED,uCAAuC;IACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEzC,+EAA+E;IAC/E,MAAM,aAAa,GAAG,wBAAwB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnE,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM;aACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACnD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,MAAM,MAAM,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC;IACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE3E,uEAAuE;IACvE,MAAM,MAAM,GAAG,SAAS,CACtB;QACE,OAAO,EAAE;YACP,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS;YACvC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YAC1B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;YAC9B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;YAC5B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;SACzC;QACD,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI;YAC3B,iBAAiB,EAAE,CAAC;YACpB,KAAK,EAAE,MAAe;SACvB;QACD,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI;YAC/B,KAAK,EAAE,QAAiB;YACxB,iBAAiB,EAAE,EAAE;YACrB,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,sBAAsB;SACtC;QACD,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI;YAC/B,KAAK,EAAE,QAAiB;YACxB,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;SACxD;QACD,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI;YACzB,UAAU,EAAE,EAAE;YACd,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,QAAiB;SAC9B;QACD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI;YAC7B,aAAa,EAAE,EAAE;YACjB,uBAAuB,EAAE,CAAC;YAC1B,eAAe,EAAE,KAAK;YACtB,YAAY,EAAE,QAAiB;YAC/B,aAAa,EAAE,IAAI;YACnB,cAAc,EAAE,KAAK;YACrB,IAAI,EAAE,WAAoB;YAC1B,mBAAmB,EAAE,EAAE;YACvB,iBAAiB,EAAE,UAAU;YAC7B,QAAQ,EAAE,MAAM;YAChB,0BAA0B,EAAE,KAAK;YACjC,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,kBAAkB;YAChC,wBAAwB,EAAE,IAAI;YAC9B,MAAM,EAAE,IAAa;SACtB;QACD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;KAClC,EACD,OAA+B,CAChC,CAAC;IAEF,wBAAwB;IACxB,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aACnD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,qDAAqD,MAAM,EAAE,CAC9D,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC;IAE5B,0FAA0F;IAC1F,wFAAwF;IACxF,iFAAiF;IACjF,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,KAAK,MAAM,EAAE,CAAC;QACnF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iGAAiG;YACjG,iCAAiC,CAClC,CAAC;IACJ,CAAC;IAED,qFAAqF;IACrF,qFAAqF;IACrF,wEAAwE;IACxE,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAE1B,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BoberConfig } from "./schema.js";
|
|
2
|
+
/**
|
|
3
|
+
* All six logical roles the orchestrator routes to.
|
|
4
|
+
* Tool roles require a non-claude-code provider (claude-code cannot drive tools).
|
|
5
|
+
* Prompt roles (planner, researcher) are allowed on claude-code unconditionally.
|
|
6
|
+
*/
|
|
7
|
+
export type RoleName = "planner" | "researcher" | "curator" | "generator" | "evaluator" | "codeReview";
|
|
8
|
+
export type RoleProviderMap = Record<RoleName, string>;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the finally-effective provider for every role in the config.
|
|
11
|
+
*
|
|
12
|
+
* Rules (PRD US-006):
|
|
13
|
+
* 1. Compute raw effective provider per role via resolveProviderModel.
|
|
14
|
+
* 2. Determine the fallback target: the first non-claude-code provider found
|
|
15
|
+
* across ALL roles in stable iteration order (prompt roles first, then tool roles).
|
|
16
|
+
* 3. For each role:
|
|
17
|
+
* - PROMPT_ROLES: use raw provider (claude-code is allowed).
|
|
18
|
+
* - TOOL_ROLES:
|
|
19
|
+
* - If raw provider !== "claude-code": use it directly.
|
|
20
|
+
* - Else if a fallback exists: redirect to fallback.
|
|
21
|
+
* - Else: THROW — naming the role — because claude-code cannot drive tools
|
|
22
|
+
* and no alternative provider is configured.
|
|
23
|
+
* 4. Log one line per role (role name + finally-resolved provider) for auditability.
|
|
24
|
+
*
|
|
25
|
+
* @throws Error naming the first offending tool role when claude-code is the sole
|
|
26
|
+
* provider option for that role and no alternative exists.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveRoleProviders(config: BoberConfig): RoleProviderMap;
|
|
29
|
+
//# sourceMappingURL=role-providers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-providers.d.ts","sourceRoot":"","sources":["../../src/config/role-providers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,YAAY,GACZ,SAAS,GACT,WAAW,GACX,WAAW,GACX,YAAY,CAAC;AAEjB,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAuDvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,eAAe,CAgDzE"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { resolveProviderModel } from "../orchestrator/model-resolver.js";
|
|
2
|
+
import { logger } from "../utils/logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Roles that drive tool use — cannot use the claude-code provider.
|
|
5
|
+
* Order determines which role's provider is chosen as the fallback target.
|
|
6
|
+
*/
|
|
7
|
+
const TOOL_ROLES = ["curator", "generator", "evaluator", "codeReview"];
|
|
8
|
+
/**
|
|
9
|
+
* Roles that are prompt-only — claude-code is always allowed.
|
|
10
|
+
* Researcher has no dedicated config section; it shares planner's config.
|
|
11
|
+
*/
|
|
12
|
+
const PROMPT_ROLES = ["planner", "researcher"];
|
|
13
|
+
/**
|
|
14
|
+
* Stable iteration order over ALL roles (prompt first, then tool).
|
|
15
|
+
* This order determines which non-claude-code provider is chosen as the
|
|
16
|
+
* fallback when a tool role would otherwise land on claude-code.
|
|
17
|
+
*/
|
|
18
|
+
const ALL_ROLES = [...PROMPT_ROLES, ...TOOL_ROLES];
|
|
19
|
+
/**
|
|
20
|
+
* Compute the raw effective provider for a single role from the config.
|
|
21
|
+
*
|
|
22
|
+
* Resolution:
|
|
23
|
+
* - researcher → use planner's section (no dedicated researcher section)
|
|
24
|
+
* - codeReview absent → mirror code-reviewer-agent.ts:63/75: fall back to evaluator
|
|
25
|
+
* - For the resolved section: resolveProviderModel(model, provider).provider
|
|
26
|
+
* (explicitProvider wins; otherwise model shorthand → provider)
|
|
27
|
+
*/
|
|
28
|
+
function effectiveProvider(role, config) {
|
|
29
|
+
let model;
|
|
30
|
+
let provider;
|
|
31
|
+
if (role === "researcher") {
|
|
32
|
+
// No dedicated researcher section — shares planner config
|
|
33
|
+
model = config.planner?.model;
|
|
34
|
+
provider = config.planner?.provider;
|
|
35
|
+
}
|
|
36
|
+
else if (role === "codeReview") {
|
|
37
|
+
// codeReview is optional — mirror code-reviewer-agent.ts:63/75 fallback to evaluator
|
|
38
|
+
model = config.codeReview?.model ?? config.evaluator?.model;
|
|
39
|
+
provider = config.codeReview?.provider ?? config.evaluator?.provider;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const section = config[role];
|
|
43
|
+
model = section?.model;
|
|
44
|
+
provider = section?.provider;
|
|
45
|
+
}
|
|
46
|
+
// model is always defined for planner/generator/evaluator post-schema-parse due to .default()
|
|
47
|
+
// For curator and codeReview (optional sections), model may be undefined when section is absent.
|
|
48
|
+
// Fall back to "sonnet" so the resolver has something to work with.
|
|
49
|
+
const resolvedModel = model ?? "sonnet";
|
|
50
|
+
return resolveProviderModel(resolvedModel, provider).provider;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the finally-effective provider for every role in the config.
|
|
54
|
+
*
|
|
55
|
+
* Rules (PRD US-006):
|
|
56
|
+
* 1. Compute raw effective provider per role via resolveProviderModel.
|
|
57
|
+
* 2. Determine the fallback target: the first non-claude-code provider found
|
|
58
|
+
* across ALL roles in stable iteration order (prompt roles first, then tool roles).
|
|
59
|
+
* 3. For each role:
|
|
60
|
+
* - PROMPT_ROLES: use raw provider (claude-code is allowed).
|
|
61
|
+
* - TOOL_ROLES:
|
|
62
|
+
* - If raw provider !== "claude-code": use it directly.
|
|
63
|
+
* - Else if a fallback exists: redirect to fallback.
|
|
64
|
+
* - Else: THROW — naming the role — because claude-code cannot drive tools
|
|
65
|
+
* and no alternative provider is configured.
|
|
66
|
+
* 4. Log one line per role (role name + finally-resolved provider) for auditability.
|
|
67
|
+
*
|
|
68
|
+
* @throws Error naming the first offending tool role when claude-code is the sole
|
|
69
|
+
* provider option for that role and no alternative exists.
|
|
70
|
+
*/
|
|
71
|
+
export function resolveRoleProviders(config) {
|
|
72
|
+
// Step 1: compute raw effective provider for every role
|
|
73
|
+
const raw = {};
|
|
74
|
+
for (const role of ALL_ROLES) {
|
|
75
|
+
raw[role] = effectiveProvider(role, config);
|
|
76
|
+
}
|
|
77
|
+
// Step 2: find the fallback target — first non-claude-code provider in stable order
|
|
78
|
+
let fallback;
|
|
79
|
+
for (const role of ALL_ROLES) {
|
|
80
|
+
if (raw[role] !== "claude-code") {
|
|
81
|
+
fallback = raw[role];
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Step 3: resolve each role, applying claude-code redirect/throw for tool roles
|
|
86
|
+
const resolved = {};
|
|
87
|
+
for (const role of ALL_ROLES) {
|
|
88
|
+
const p = raw[role];
|
|
89
|
+
if (PROMPT_ROLES.includes(role)) {
|
|
90
|
+
// Prompt roles: claude-code is always allowed
|
|
91
|
+
resolved[role] = p;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// Tool roles: redirect or throw if stuck on claude-code
|
|
95
|
+
if (p !== "claude-code") {
|
|
96
|
+
resolved[role] = p;
|
|
97
|
+
}
|
|
98
|
+
else if (fallback !== undefined) {
|
|
99
|
+
// Redirect to the first non-claude-code provider among all roles
|
|
100
|
+
resolved[role] = fallback;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
throw new Error(`Role "${role}" resolves to the claude-code provider, which cannot drive tools, ` +
|
|
104
|
+
`and no alternative provider is configured. Set a per-role provider for "${role}" ` +
|
|
105
|
+
`or change the default provider away from claude-code.`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Step 4: log the finally-resolved provider for every role (sc-5-4)
|
|
110
|
+
for (const role of ALL_ROLES) {
|
|
111
|
+
logger.info(`role ${role} resolved to provider ${resolved[role]}`);
|
|
112
|
+
}
|
|
113
|
+
return resolved;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=role-providers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"role-providers.js","sourceRoot":"","sources":["../../src/config/role-providers.ts"],"names":[],"mappings":"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"}
|