agent-bober 0.18.0 → 0.19.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/plugin.json +1 -1
- package/CHANGELOG.md +11 -0
- package/README.md +245 -6
- package/agents/bober-art-director.md +100 -0
- package/agents/bober-design-critic.md +114 -0
- package/agents/bober-frontend-builder.md +101 -0
- package/agents/bober-security-auditor.md +193 -0
- package/agents/bober-security-verifier.md +104 -0
- package/agents/bober-seo-strategist.md +144 -0
- package/agents/bober-seo-verifier.md +103 -0
- package/dist/calendar/calendar-egress.d.ts +26 -0
- package/dist/calendar/calendar-egress.d.ts.map +1 -0
- package/dist/calendar/calendar-egress.js +35 -0
- package/dist/calendar/calendar-egress.js.map +1 -0
- package/dist/calendar/calendar-token.d.ts +34 -0
- package/dist/calendar/calendar-token.d.ts.map +1 -0
- package/dist/calendar/calendar-token.js +56 -0
- package/dist/calendar/calendar-token.js.map +1 -0
- package/dist/calendar/connector.d.ts +22 -0
- package/dist/calendar/connector.d.ts.map +1 -0
- package/dist/calendar/connector.js +3 -0
- package/dist/calendar/connector.js.map +1 -0
- package/dist/calendar/finding-source.d.ts +20 -0
- package/dist/calendar/finding-source.d.ts.map +1 -0
- package/dist/calendar/finding-source.js +35 -0
- package/dist/calendar/finding-source.js.map +1 -0
- package/dist/calendar/google-connector.d.ts +65 -0
- package/dist/calendar/google-connector.d.ts.map +1 -0
- package/dist/calendar/google-connector.js +129 -0
- package/dist/calendar/google-connector.js.map +1 -0
- package/dist/calendar/ics-connector.d.ts +12 -0
- package/dist/calendar/ics-connector.d.ts.map +1 -0
- package/dist/calendar/ics-connector.js +48 -0
- package/dist/calendar/ics-connector.js.map +1 -0
- package/dist/calendar/proposal-gate.d.ts +84 -0
- package/dist/calendar/proposal-gate.d.ts.map +1 -0
- package/dist/calendar/proposal-gate.js +126 -0
- package/dist/calendar/proposal-gate.js.map +1 -0
- package/dist/calendar/slotter.d.ts +34 -0
- package/dist/calendar/slotter.d.ts.map +1 -0
- package/dist/calendar/slotter.js +196 -0
- package/dist/calendar/slotter.js.map +1 -0
- package/dist/calendar/types.d.ts +162 -0
- package/dist/calendar/types.d.ts.map +1 -0
- package/dist/calendar/types.js +28 -0
- package/dist/calendar/types.js.map +1 -0
- package/dist/chat/chat-session.d.ts +27 -0
- package/dist/chat/chat-session.d.ts.map +1 -1
- package/dist/chat/chat-session.js +101 -1
- package/dist/chat/chat-session.js.map +1 -1
- package/dist/chat/slash-commands.d.ts +6 -2
- package/dist/chat/slash-commands.d.ts.map +1 -1
- package/dist/chat/slash-commands.js +22 -2
- package/dist/chat/slash-commands.js.map +1 -1
- package/dist/chat/turn-classifier.d.ts +3 -0
- package/dist/chat/turn-classifier.d.ts.map +1 -1
- package/dist/chat/turn-classifier.js +7 -0
- package/dist/chat/turn-classifier.js.map +1 -1
- package/dist/cli/commands/calendar.d.ts +75 -0
- package/dist/cli/commands/calendar.d.ts.map +1 -0
- package/dist/cli/commands/calendar.js +203 -0
- package/dist/cli/commands/calendar.js.map +1 -0
- package/dist/cli/commands/do.d.ts +52 -0
- package/dist/cli/commands/do.d.ts.map +1 -0
- package/dist/cli/commands/do.js +216 -0
- package/dist/cli/commands/do.js.map +1 -0
- package/dist/cli/commands/hub.d.ts +29 -0
- package/dist/cli/commands/hub.d.ts.map +1 -0
- package/dist/cli/commands/hub.js +233 -0
- package/dist/cli/commands/hub.js.map +1 -0
- package/dist/cli/commands/medical.d.ts +25 -0
- package/dist/cli/commands/medical.d.ts.map +1 -1
- package/dist/cli/commands/medical.js +233 -0
- package/dist/cli/commands/medical.js.map +1 -1
- package/dist/cli/commands/research.d.ts +41 -0
- package/dist/cli/commands/research.d.ts.map +1 -0
- package/dist/cli/commands/research.js +313 -0
- package/dist/cli/commands/research.js.map +1 -0
- package/dist/cli/commands/security-audit.d.ts +89 -0
- package/dist/cli/commands/security-audit.d.ts.map +1 -0
- package/dist/cli/commands/security-audit.js +238 -0
- package/dist/cli/commands/security-audit.js.map +1 -0
- package/dist/cli/commands/task.d.ts +64 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +422 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/telegram.d.ts +10 -0
- package/dist/cli/commands/telegram.d.ts.map +1 -0
- package/dist/cli/commands/telegram.js +44 -0
- package/dist/cli/commands/telegram.js.map +1 -0
- package/dist/cli/commands/vault.d.ts +40 -0
- package/dist/cli/commands/vault.d.ts.map +1 -0
- package/dist/cli/commands/vault.js +122 -0
- package/dist/cli/commands/vault.js.map +1 -0
- package/dist/cli/index.js +33 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/role-providers.d.ts +15 -0
- package/dist/config/role-providers.d.ts.map +1 -1
- package/dist/config/role-providers.js +8 -1
- package/dist/config/role-providers.js.map +1 -1
- package/dist/config/schema.d.ts +3522 -171
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +405 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/do-bridge/coding-promoter.d.ts +19 -0
- package/dist/do-bridge/coding-promoter.d.ts.map +1 -0
- package/dist/do-bridge/coding-promoter.js +43 -0
- package/dist/do-bridge/coding-promoter.js.map +1 -0
- package/dist/do-bridge/finding-port.d.ts +88 -0
- package/dist/do-bridge/finding-port.d.ts.map +1 -0
- package/dist/do-bridge/finding-port.js +95 -0
- package/dist/do-bridge/finding-port.js.map +1 -0
- package/dist/do-bridge/launcher.d.ts +55 -0
- package/dist/do-bridge/launcher.d.ts.map +1 -0
- package/dist/do-bridge/launcher.js +37 -0
- package/dist/do-bridge/launcher.js.map +1 -0
- package/dist/do-bridge/promote.d.ts +50 -0
- package/dist/do-bridge/promote.d.ts.map +1 -0
- package/dist/do-bridge/promote.js +116 -0
- package/dist/do-bridge/promote.js.map +1 -0
- package/dist/do-bridge/reconcile.d.ts +50 -0
- package/dist/do-bridge/reconcile.d.ts.map +1 -0
- package/dist/do-bridge/reconcile.js +70 -0
- package/dist/do-bridge/reconcile.js.map +1 -0
- package/dist/do-bridge/registry.d.ts +23 -0
- package/dist/do-bridge/registry.d.ts.map +1 -0
- package/dist/do-bridge/registry.js +42 -0
- package/dist/do-bridge/registry.js.map +1 -0
- package/dist/do-bridge/types.d.ts +50 -0
- package/dist/do-bridge/types.d.ts.map +1 -0
- package/dist/do-bridge/types.js +17 -0
- package/dist/do-bridge/types.js.map +1 -0
- package/dist/fleet/child-config.d.ts.map +1 -1
- package/dist/fleet/child-config.js +7 -0
- package/dist/fleet/child-config.js.map +1 -1
- package/dist/fleet/coordinator.d.ts +27 -1
- package/dist/fleet/coordinator.d.ts.map +1 -1
- package/dist/fleet/coordinator.js +70 -0
- package/dist/fleet/coordinator.js.map +1 -1
- package/dist/fleet/critic-deep.d.ts +9 -1
- package/dist/fleet/critic-deep.d.ts.map +1 -1
- package/dist/fleet/critic-deep.js +5 -2
- package/dist/fleet/critic-deep.js.map +1 -1
- package/dist/fleet/decomposer-deep.d.ts +4 -11
- package/dist/fleet/decomposer-deep.d.ts.map +1 -1
- package/dist/fleet/decomposer-deep.js +5 -5
- package/dist/fleet/decomposer-deep.js.map +1 -1
- package/dist/fleet/index.d.ts +9 -0
- package/dist/fleet/index.d.ts.map +1 -1
- package/dist/fleet/index.js +87 -8
- package/dist/fleet/index.js.map +1 -1
- package/dist/fleet/manifest.d.ts +26 -0
- package/dist/fleet/manifest.d.ts.map +1 -1
- package/dist/fleet/manifest.js +8 -0
- package/dist/fleet/manifest.js.map +1 -1
- package/dist/fleet/reporter.d.ts +4 -1
- package/dist/fleet/reporter.d.ts.map +1 -1
- package/dist/fleet/reporter.js +2 -1
- package/dist/fleet/reporter.js.map +1 -1
- package/dist/fleet/scaffolder.d.ts +5 -1
- package/dist/fleet/scaffolder.d.ts.map +1 -1
- package/dist/fleet/scaffolder.js +11 -2
- package/dist/fleet/scaffolder.js.map +1 -1
- package/dist/graph/client.d.ts.map +1 -1
- package/dist/graph/client.js +115 -23
- package/dist/graph/client.js.map +1 -1
- package/dist/graph/mcp-client.d.ts +1 -0
- package/dist/graph/mcp-client.d.ts.map +1 -1
- package/dist/graph/mcp-client.js +58 -7
- package/dist/graph/mcp-client.js.map +1 -1
- package/dist/hub/collector.d.ts +12 -0
- package/dist/hub/collector.d.ts.map +1 -0
- package/dist/hub/collector.js +36 -0
- package/dist/hub/collector.js.map +1 -0
- package/dist/hub/finding-source.d.ts +22 -0
- package/dist/hub/finding-source.d.ts.map +1 -0
- package/dist/hub/finding-source.js +41 -0
- package/dist/hub/finding-source.js.map +1 -0
- package/dist/hub/finding-store.d.ts +68 -0
- package/dist/hub/finding-store.d.ts.map +1 -0
- package/dist/hub/finding-store.js +122 -0
- package/dist/hub/finding-store.js.map +1 -0
- package/dist/hub/finding.d.ts +54 -0
- package/dist/hub/finding.d.ts.map +1 -0
- package/dist/hub/finding.js +24 -0
- package/dist/hub/finding.js.map +1 -0
- package/dist/hub/gmail-to-task.d.ts +69 -0
- package/dist/hub/gmail-to-task.d.ts.map +1 -0
- package/dist/hub/gmail-to-task.js +102 -0
- package/dist/hub/gmail-to-task.js.map +1 -0
- package/dist/hub/hub-config.d.ts +18 -0
- package/dist/hub/hub-config.d.ts.map +1 -0
- package/dist/hub/hub-config.js +40 -0
- package/dist/hub/hub-config.js.map +1 -0
- package/dist/hub/judge.d.ts +30 -0
- package/dist/hub/judge.d.ts.map +1 -0
- package/dist/hub/judge.js +177 -0
- package/dist/hub/judge.js.map +1 -0
- package/dist/hub/lenses.d.ts +60 -0
- package/dist/hub/lenses.d.ts.map +1 -0
- package/dist/hub/lenses.js +123 -0
- package/dist/hub/lenses.js.map +1 -0
- package/dist/hub/priority-md.d.ts +21 -0
- package/dist/hub/priority-md.d.ts.map +1 -0
- package/dist/hub/priority-md.js +64 -0
- package/dist/hub/priority-md.js.map +1 -0
- package/dist/hub/repo-resolver.d.ts +11 -0
- package/dist/hub/repo-resolver.d.ts.map +1 -0
- package/dist/hub/repo-resolver.js +39 -0
- package/dist/hub/repo-resolver.js.map +1 -0
- package/dist/hub/scope.d.ts +39 -0
- package/dist/hub/scope.d.ts.map +1 -0
- package/dist/hub/scope.js +62 -0
- package/dist/hub/scope.js.map +1 -0
- package/dist/hub/task-inbox.d.ts +16 -0
- package/dist/hub/task-inbox.d.ts.map +1 -0
- package/dist/hub/task-inbox.js +39 -0
- package/dist/hub/task-inbox.js.map +1 -0
- package/dist/incident/resolution-verify.d.ts +2 -2
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/medical/adapters/apple-health.js +1 -1
- package/dist/medical/adapters/apple-health.js.map +1 -1
- package/dist/medical/analysis/cadence.d.ts +32 -0
- package/dist/medical/analysis/cadence.d.ts.map +1 -0
- package/dist/medical/analysis/cadence.js +72 -0
- package/dist/medical/analysis/cadence.js.map +1 -0
- package/dist/medical/analysis/cross-marker.d.ts +33 -0
- package/dist/medical/analysis/cross-marker.d.ts.map +1 -0
- package/dist/medical/analysis/cross-marker.js +79 -0
- package/dist/medical/analysis/cross-marker.js.map +1 -0
- package/dist/medical/analysis/finding-writer.d.ts +26 -0
- package/dist/medical/analysis/finding-writer.d.ts.map +1 -0
- package/dist/medical/analysis/finding-writer.js +60 -0
- package/dist/medical/analysis/finding-writer.js.map +1 -0
- package/dist/medical/analysis/finding.d.ts +63 -0
- package/dist/medical/analysis/finding.d.ts.map +1 -0
- package/dist/medical/analysis/finding.js +70 -0
- package/dist/medical/analysis/finding.js.map +1 -0
- package/dist/medical/analysis/review-pass.d.ts +76 -0
- package/dist/medical/analysis/review-pass.d.ts.map +1 -0
- package/dist/medical/analysis/review-pass.js +119 -0
- package/dist/medical/analysis/review-pass.js.map +1 -0
- package/dist/medical/analysis/trends.d.ts +36 -0
- package/dist/medical/analysis/trends.d.ts.map +1 -0
- package/dist/medical/analysis/trends.js +157 -0
- package/dist/medical/analysis/trends.js.map +1 -0
- package/dist/medical/health-store.d.ts +5 -0
- package/dist/medical/health-store.d.ts.map +1 -1
- package/dist/medical/health-store.js +10 -0
- package/dist/medical/health-store.js.map +1 -1
- package/dist/medical/lab-note.d.ts +72 -0
- package/dist/medical/lab-note.d.ts.map +1 -0
- package/dist/medical/lab-note.js +161 -0
- package/dist/medical/lab-note.js.map +1 -0
- package/dist/medical/lab-pdf-parser.d.ts +19 -0
- package/dist/medical/lab-pdf-parser.d.ts.map +1 -0
- package/dist/medical/lab-pdf-parser.js +57 -0
- package/dist/medical/lab-pdf-parser.js.map +1 -0
- package/dist/medical/lab-reindex.d.ts +24 -0
- package/dist/medical/lab-reindex.d.ts.map +1 -0
- package/dist/medical/lab-reindex.js +45 -0
- package/dist/medical/lab-reindex.js.map +1 -0
- package/dist/medical/lab-types.d.ts +75 -0
- package/dist/medical/lab-types.d.ts.map +1 -0
- package/dist/medical/lab-types.js +17 -0
- package/dist/medical/lab-types.js.map +1 -0
- package/dist/medical/profile.d.ts +96 -0
- package/dist/medical/profile.d.ts.map +1 -0
- package/dist/medical/profile.js +273 -0
- package/dist/medical/profile.js.map +1 -0
- package/dist/medical/recommend/context.d.ts +48 -0
- package/dist/medical/recommend/context.d.ts.map +1 -0
- package/dist/medical/recommend/context.js +109 -0
- package/dist/medical/recommend/context.js.map +1 -0
- package/dist/medical/recommend/judge-panel.d.ts +49 -0
- package/dist/medical/recommend/judge-panel.d.ts.map +1 -0
- package/dist/medical/recommend/judge-panel.js +164 -0
- package/dist/medical/recommend/judge-panel.js.map +1 -0
- package/dist/medical/recommend/lenses.d.ts +72 -0
- package/dist/medical/recommend/lenses.d.ts.map +1 -0
- package/dist/medical/recommend/lenses.js +220 -0
- package/dist/medical/recommend/lenses.js.map +1 -0
- package/dist/medical/recommend/recommend.d.ts +86 -0
- package/dist/medical/recommend/recommend.d.ts.map +1 -0
- package/dist/medical/recommend/recommend.js +211 -0
- package/dist/medical/recommend/recommend.js.map +1 -0
- package/dist/medical/recommend/types.d.ts +98 -0
- package/dist/medical/recommend/types.d.ts.map +1 -0
- package/dist/medical/recommend/types.js +20 -0
- package/dist/medical/recommend/types.js.map +1 -0
- package/dist/medical/recommend/urgency.d.ts +26 -0
- package/dist/medical/recommend/urgency.d.ts.map +1 -0
- package/dist/medical/recommend/urgency.js +124 -0
- package/dist/medical/recommend/urgency.js.map +1 -0
- package/dist/medical/research/online-research.d.ts +65 -0
- package/dist/medical/research/online-research.d.ts.map +1 -0
- package/dist/medical/research/online-research.js +101 -0
- package/dist/medical/research/online-research.js.map +1 -0
- package/dist/medical/research/research-note.d.ts +32 -0
- package/dist/medical/research/research-note.d.ts.map +1 -0
- package/dist/medical/research/research-note.js +55 -0
- package/dist/medical/research/research-note.js.map +1 -0
- package/dist/medical/supplements.d.ts +82 -0
- package/dist/medical/supplements.d.ts.map +1 -0
- package/dist/medical/supplements.js +173 -0
- package/dist/medical/supplements.js.map +1 -0
- package/dist/orchestrator/agentic-loop.d.ts +160 -1
- package/dist/orchestrator/agentic-loop.d.ts.map +1 -1
- package/dist/orchestrator/agentic-loop.js +350 -41
- package/dist/orchestrator/agentic-loop.js.map +1 -1
- package/dist/orchestrator/compaction.d.ts +47 -0
- package/dist/orchestrator/compaction.d.ts.map +1 -0
- package/dist/orchestrator/compaction.js +75 -0
- package/dist/orchestrator/compaction.js.map +1 -0
- package/dist/orchestrator/generator-agent.d.ts +19 -0
- package/dist/orchestrator/generator-agent.d.ts.map +1 -1
- package/dist/orchestrator/generator-agent.js +27 -1
- package/dist/orchestrator/generator-agent.js.map +1 -1
- package/dist/orchestrator/loop-events.d.ts +98 -0
- package/dist/orchestrator/loop-events.d.ts.map +1 -0
- package/dist/orchestrator/loop-events.js +2 -0
- package/dist/orchestrator/loop-events.js.map +1 -0
- package/dist/orchestrator/model-resolver.d.ts.map +1 -1
- package/dist/orchestrator/model-resolver.js +10 -6
- package/dist/orchestrator/model-resolver.js.map +1 -1
- package/dist/orchestrator/pipeline.d.ts +10 -1
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +102 -4
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/security-audit-types.d.ts +53 -0
- package/dist/orchestrator/security-audit-types.d.ts.map +1 -0
- package/dist/orchestrator/security-audit-types.js +10 -0
- package/dist/orchestrator/security-audit-types.js.map +1 -0
- package/dist/orchestrator/security-auditor-agent.d.ts +68 -0
- package/dist/orchestrator/security-auditor-agent.d.ts.map +1 -0
- package/dist/orchestrator/security-auditor-agent.js +482 -0
- package/dist/orchestrator/security-auditor-agent.js.map +1 -0
- package/dist/orchestrator/security-gate.d.ts +73 -0
- package/dist/orchestrator/security-gate.d.ts.map +1 -0
- package/dist/orchestrator/security-gate.js +174 -0
- package/dist/orchestrator/security-gate.js.map +1 -0
- package/dist/orchestrator/security-hub.d.ts +45 -0
- package/dist/orchestrator/security-hub.d.ts.map +1 -0
- package/dist/orchestrator/security-hub.js +147 -0
- package/dist/orchestrator/security-hub.js.map +1 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts +43 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.js +13 -0
- package/dist/orchestrator/security-knowledge/benchmark/harness.js.map +1 -0
- package/dist/orchestrator/security-knowledge/diff-provider.d.ts +79 -0
- package/dist/orchestrator/security-knowledge/diff-provider.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/diff-provider.js +320 -0
- package/dist/orchestrator/security-knowledge/diff-provider.js.map +1 -0
- package/dist/orchestrator/security-knowledge/index.d.ts +22 -0
- package/dist/orchestrator/security-knowledge/index.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/index.js +66 -0
- package/dist/orchestrator/security-knowledge/index.js.map +1 -0
- package/dist/orchestrator/security-knowledge/parser.d.ts +9 -0
- package/dist/orchestrator/security-knowledge/parser.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/parser.js +137 -0
- package/dist/orchestrator/security-knowledge/parser.js.map +1 -0
- package/dist/orchestrator/security-knowledge/registry.d.ts +25 -0
- package/dist/orchestrator/security-knowledge/registry.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/registry.js +114 -0
- package/dist/orchestrator/security-knowledge/registry.js.map +1 -0
- package/dist/orchestrator/security-knowledge/resolver.d.ts +48 -0
- package/dist/orchestrator/security-knowledge/resolver.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/resolver.js +63 -0
- package/dist/orchestrator/security-knowledge/resolver.js.map +1 -0
- package/dist/orchestrator/security-knowledge/selector.d.ts +18 -0
- package/dist/orchestrator/security-knowledge/selector.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/selector.js +46 -0
- package/dist/orchestrator/security-knowledge/selector.js.map +1 -0
- package/dist/orchestrator/security-knowledge/signature.d.ts +37 -0
- package/dist/orchestrator/security-knowledge/signature.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/signature.js +2 -0
- package/dist/orchestrator/security-knowledge/signature.js.map +1 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts +29 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.d.ts.map +1 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.js +211 -0
- package/dist/orchestrator/security-knowledge/supply-chain-inspector.js.map +1 -0
- package/dist/orchestrator/security-scanners.d.ts +126 -0
- package/dist/orchestrator/security-scanners.d.ts.map +1 -0
- package/dist/orchestrator/security-scanners.js +501 -0
- package/dist/orchestrator/security-scanners.js.map +1 -0
- package/dist/orchestrator/security-verifier-agent.d.ts +62 -0
- package/dist/orchestrator/security-verifier-agent.d.ts.map +1 -0
- package/dist/orchestrator/security-verifier-agent.js +230 -0
- package/dist/orchestrator/security-verifier-agent.js.map +1 -0
- package/dist/orchestrator/session-store.d.ts +95 -0
- package/dist/orchestrator/session-store.d.ts.map +1 -0
- package/dist/orchestrator/session-store.js +186 -0
- package/dist/orchestrator/session-store.js.map +1 -0
- package/dist/orchestrator/stack-knowledge.d.ts +17 -0
- package/dist/orchestrator/stack-knowledge.d.ts.map +1 -0
- package/dist/orchestrator/stack-knowledge.js +35 -0
- package/dist/orchestrator/stack-knowledge.js.map +1 -0
- package/dist/orchestrator/subagents.d.ts +62 -0
- package/dist/orchestrator/subagents.d.ts.map +1 -0
- package/dist/orchestrator/subagents.js +143 -0
- package/dist/orchestrator/subagents.js.map +1 -0
- package/dist/orchestrator/tools/executor.d.ts +68 -0
- package/dist/orchestrator/tools/executor.d.ts.map +1 -0
- package/dist/orchestrator/tools/executor.js +104 -0
- package/dist/orchestrator/tools/executor.js.map +1 -0
- package/dist/orchestrator/tools/mcp-bridge.d.ts +76 -0
- package/dist/orchestrator/tools/mcp-bridge.d.ts.map +1 -0
- package/dist/orchestrator/tools/mcp-bridge.js +154 -0
- package/dist/orchestrator/tools/mcp-bridge.js.map +1 -0
- package/dist/orchestrator/tools/schemas.d.ts.map +1 -1
- package/dist/orchestrator/tools/schemas.js +3 -0
- package/dist/orchestrator/tools/schemas.js.map +1 -1
- package/dist/orchestrator/workflow/budget.d.ts +24 -2
- package/dist/orchestrator/workflow/budget.d.ts.map +1 -1
- package/dist/orchestrator/workflow/budget.js +39 -1
- package/dist/orchestrator/workflow/budget.js.map +1 -1
- package/dist/orchestrator/workflow/engine.d.ts +1 -1
- package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.js +10 -0
- package/dist/orchestrator/workflow/selector.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +116 -26
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/claude-code.d.ts.map +1 -1
- package/dist/providers/claude-code.js +17 -0
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/providers/cost-meter.d.ts +52 -0
- package/dist/providers/cost-meter.d.ts.map +1 -0
- package/dist/providers/cost-meter.js +81 -0
- package/dist/providers/cost-meter.js.map +1 -0
- package/dist/providers/factory.d.ts +6 -1
- package/dist/providers/factory.d.ts.map +1 -1
- package/dist/providers/factory.js +24 -5
- package/dist/providers/factory.js.map +1 -1
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +29 -0
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/grounded-search.d.ts +128 -0
- package/dist/providers/grounded-search.d.ts.map +1 -0
- package/dist/providers/grounded-search.js +160 -0
- package/dist/providers/grounded-search.js.map +1 -0
- package/dist/providers/openai-compat.d.ts +15 -1
- package/dist/providers/openai-compat.d.ts.map +1 -1
- package/dist/providers/openai-compat.js +24 -0
- package/dist/providers/openai-compat.js.map +1 -1
- package/dist/providers/openai.d.ts +7 -0
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +95 -4
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/types.d.ts +88 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/research/cadence.d.ts +33 -0
- package/dist/research/cadence.d.ts.map +1 -0
- package/dist/research/cadence.js +55 -0
- package/dist/research/cadence.js.map +1 -0
- package/dist/research/digest.d.ts +80 -0
- package/dist/research/digest.d.ts.map +1 -0
- package/dist/research/digest.js +119 -0
- package/dist/research/digest.js.map +1 -0
- package/dist/research/egress.d.ts +28 -0
- package/dist/research/egress.d.ts.map +1 -0
- package/dist/research/egress.js +41 -0
- package/dist/research/egress.js.map +1 -0
- package/dist/research/job-store.d.ts +30 -0
- package/dist/research/job-store.d.ts.map +1 -0
- package/dist/research/job-store.js +100 -0
- package/dist/research/job-store.js.map +1 -0
- package/dist/research/model-diversity.d.ts +27 -0
- package/dist/research/model-diversity.d.ts.map +1 -0
- package/dist/research/model-diversity.js +52 -0
- package/dist/research/model-diversity.js.map +1 -0
- package/dist/research/note-writer.d.ts +36 -0
- package/dist/research/note-writer.d.ts.map +1 -0
- package/dist/research/note-writer.js +53 -0
- package/dist/research/note-writer.js.map +1 -0
- package/dist/research/online-retrieval.d.ts +27 -0
- package/dist/research/online-retrieval.d.ts.map +1 -0
- package/dist/research/online-retrieval.js +22 -0
- package/dist/research/online-retrieval.js.map +1 -0
- package/dist/research/runner.d.ts +80 -0
- package/dist/research/runner.d.ts.map +1 -0
- package/dist/research/runner.js +115 -0
- package/dist/research/runner.js.map +1 -0
- package/dist/research/scheduler.d.ts +61 -0
- package/dist/research/scheduler.d.ts.map +1 -0
- package/dist/research/scheduler.js +58 -0
- package/dist/research/scheduler.js.map +1 -0
- package/dist/research/types.d.ts +81 -0
- package/dist/research/types.d.ts.map +1 -0
- package/dist/research/types.js +57 -0
- package/dist/research/types.js.map +1 -0
- package/dist/seo/adapters/http.d.ts +43 -0
- package/dist/seo/adapters/http.d.ts.map +1 -0
- package/dist/seo/adapters/http.js +35 -0
- package/dist/seo/adapters/http.js.map +1 -0
- package/dist/seo/ai-visibility-provider.d.ts +171 -0
- package/dist/seo/ai-visibility-provider.d.ts.map +1 -0
- package/dist/seo/ai-visibility-provider.js +165 -0
- package/dist/seo/ai-visibility-provider.js.map +1 -0
- package/dist/seo/ai-visibility-scorer.d.ts +43 -0
- package/dist/seo/ai-visibility-scorer.d.ts.map +1 -0
- package/dist/seo/ai-visibility-scorer.js +102 -0
- package/dist/seo/ai-visibility-scorer.js.map +1 -0
- package/dist/seo/analyzer.d.ts +58 -0
- package/dist/seo/analyzer.d.ts.map +1 -0
- package/dist/seo/analyzer.js +265 -0
- package/dist/seo/analyzer.js.map +1 -0
- package/dist/seo/benchmark/harness.d.ts +56 -0
- package/dist/seo/benchmark/harness.d.ts.map +1 -0
- package/dist/seo/benchmark/harness.js +172 -0
- package/dist/seo/benchmark/harness.js.map +1 -0
- package/dist/seo/builder/approved-finding.d.ts +115 -0
- package/dist/seo/builder/approved-finding.d.ts.map +1 -0
- package/dist/seo/builder/approved-finding.js +145 -0
- package/dist/seo/builder/approved-finding.js.map +1 -0
- package/dist/seo/builder/build-runner.d.ts +41 -0
- package/dist/seo/builder/build-runner.d.ts.map +1 -0
- package/dist/seo/builder/build-runner.js +156 -0
- package/dist/seo/builder/build-runner.js.map +1 -0
- package/dist/seo/builder/draft-generators.d.ts +32 -0
- package/dist/seo/builder/draft-generators.d.ts.map +1 -0
- package/dist/seo/builder/draft-generators.js +31 -0
- package/dist/seo/builder/draft-generators.js.map +1 -0
- package/dist/seo/builder/draft-store.d.ts +30 -0
- package/dist/seo/builder/draft-store.d.ts.map +1 -0
- package/dist/seo/builder/draft-store.js +76 -0
- package/dist/seo/builder/draft-store.js.map +1 -0
- package/dist/seo/builder/draft-types.d.ts +36 -0
- package/dist/seo/builder/draft-types.d.ts.map +1 -0
- package/dist/seo/builder/draft-types.js +14 -0
- package/dist/seo/builder/draft-types.js.map +1 -0
- package/dist/seo/builder/hub-approved-source.d.ts +11 -0
- package/dist/seo/builder/hub-approved-source.d.ts.map +1 -0
- package/dist/seo/builder/hub-approved-source.js +48 -0
- package/dist/seo/builder/hub-approved-source.js.map +1 -0
- package/dist/seo/builder/seo-builder.d.ts +72 -0
- package/dist/seo/builder/seo-builder.d.ts.map +1 -0
- package/dist/seo/builder/seo-builder.js +72 -0
- package/dist/seo/builder/seo-builder.js.map +1 -0
- package/dist/seo/citation-gate.d.ts +36 -0
- package/dist/seo/citation-gate.d.ts.map +1 -0
- package/dist/seo/citation-gate.js +59 -0
- package/dist/seo/citation-gate.js.map +1 -0
- package/dist/seo/command.d.ts +11 -0
- package/dist/seo/command.d.ts.map +1 -0
- package/dist/seo/command.js +90 -0
- package/dist/seo/command.js.map +1 -0
- package/dist/seo/content-sanitizer.d.ts +56 -0
- package/dist/seo/content-sanitizer.d.ts.map +1 -0
- package/dist/seo/content-sanitizer.js +55 -0
- package/dist/seo/content-sanitizer.js.map +1 -0
- package/dist/seo/crawl-engine.d.ts +35 -0
- package/dist/seo/crawl-engine.d.ts.map +1 -0
- package/dist/seo/crawl-engine.js +2 -0
- package/dist/seo/crawl-engine.js.map +1 -0
- package/dist/seo/data-source.d.ts +156 -0
- package/dist/seo/data-source.d.ts.map +1 -0
- package/dist/seo/data-source.js +2 -0
- package/dist/seo/data-source.js.map +1 -0
- package/dist/seo/egress.d.ts +39 -0
- package/dist/seo/egress.d.ts.map +1 -0
- package/dist/seo/egress.js +64 -0
- package/dist/seo/egress.js.map +1 -0
- package/dist/seo/hub-emitter.d.ts +28 -0
- package/dist/seo/hub-emitter.d.ts.map +1 -0
- package/dist/seo/hub-emitter.js +95 -0
- package/dist/seo/hub-emitter.js.map +1 -0
- package/dist/seo/index.d.ts +42 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +19 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/never-encode-filter.d.ts +45 -0
- package/dist/seo/never-encode-filter.d.ts.map +1 -0
- package/dist/seo/never-encode-filter.js +51 -0
- package/dist/seo/never-encode-filter.js.map +1 -0
- package/dist/seo/parser.d.ts +46 -0
- package/dist/seo/parser.d.ts.map +1 -0
- package/dist/seo/parser.js +113 -0
- package/dist/seo/parser.js.map +1 -0
- package/dist/seo/playbook-index.d.ts +19 -0
- package/dist/seo/playbook-index.d.ts.map +1 -0
- package/dist/seo/playbook-index.js +74 -0
- package/dist/seo/playbook-index.js.map +1 -0
- package/dist/seo/quota-governor.d.ts +100 -0
- package/dist/seo/quota-governor.d.ts.map +1 -0
- package/dist/seo/quota-governor.js +199 -0
- package/dist/seo/quota-governor.js.map +1 -0
- package/dist/seo/quota-ledger.d.ts +50 -0
- package/dist/seo/quota-ledger.d.ts.map +1 -0
- package/dist/seo/quota-ledger.js +95 -0
- package/dist/seo/quota-ledger.js.map +1 -0
- package/dist/seo/report-store.d.ts +30 -0
- package/dist/seo/report-store.d.ts.map +1 -0
- package/dist/seo/report-store.js +94 -0
- package/dist/seo/report-store.js.map +1 -0
- package/dist/seo/retriever.d.ts +34 -0
- package/dist/seo/retriever.d.ts.map +1 -0
- package/dist/seo/retriever.js +95 -0
- package/dist/seo/retriever.js.map +1 -0
- package/dist/seo/runner.d.ts +108 -0
- package/dist/seo/runner.d.ts.map +1 -0
- package/dist/seo/runner.js +512 -0
- package/dist/seo/runner.js.map +1 -0
- package/dist/seo/scrape-throttle.d.ts +84 -0
- package/dist/seo/scrape-throttle.d.ts.map +1 -0
- package/dist/seo/scrape-throttle.js +149 -0
- package/dist/seo/scrape-throttle.js.map +1 -0
- package/dist/seo/serp-provider.d.ts +52 -0
- package/dist/seo/serp-provider.d.ts.map +1 -0
- package/dist/seo/serp-provider.js +17 -0
- package/dist/seo/serp-provider.js.map +1 -0
- package/dist/seo/sources/ai-visibility-adapter.d.ts +87 -0
- package/dist/seo/sources/ai-visibility-adapter.d.ts.map +1 -0
- package/dist/seo/sources/ai-visibility-adapter.js +85 -0
- package/dist/seo/sources/ai-visibility-adapter.js.map +1 -0
- package/dist/seo/sources/api-spine-provider.d.ts +66 -0
- package/dist/seo/sources/api-spine-provider.d.ts.map +1 -0
- package/dist/seo/sources/api-spine-provider.js +68 -0
- package/dist/seo/sources/api-spine-provider.js.map +1 -0
- package/dist/seo/sources/citation-verifier.d.ts +95 -0
- package/dist/seo/sources/citation-verifier.d.ts.map +1 -0
- package/dist/seo/sources/citation-verifier.js +106 -0
- package/dist/seo/sources/citation-verifier.js.map +1 -0
- package/dist/seo/sources/crawl-source.d.ts +62 -0
- package/dist/seo/sources/crawl-source.d.ts.map +1 -0
- package/dist/seo/sources/crawl-source.js +87 -0
- package/dist/seo/sources/crawl-source.js.map +1 -0
- package/dist/seo/sources/damcrawler-crawl-engine.d.ts +151 -0
- package/dist/seo/sources/damcrawler-crawl-engine.d.ts.map +1 -0
- package/dist/seo/sources/damcrawler-crawl-engine.js +154 -0
- package/dist/seo/sources/damcrawler-crawl-engine.js.map +1 -0
- package/dist/seo/sources/damcrawler-serp-provider.d.ts +75 -0
- package/dist/seo/sources/damcrawler-serp-provider.d.ts.map +1 -0
- package/dist/seo/sources/damcrawler-serp-provider.js +60 -0
- package/dist/seo/sources/damcrawler-serp-provider.js.map +1 -0
- package/dist/seo/sources/dataforseo-adapter.d.ts +46 -0
- package/dist/seo/sources/dataforseo-adapter.d.ts.map +1 -0
- package/dist/seo/sources/dataforseo-adapter.js +335 -0
- package/dist/seo/sources/dataforseo-adapter.js.map +1 -0
- package/dist/seo/sources/dataforseo-serp-provider.d.ts +30 -0
- package/dist/seo/sources/dataforseo-serp-provider.d.ts.map +1 -0
- package/dist/seo/sources/dataforseo-serp-provider.js +20 -0
- package/dist/seo/sources/dataforseo-serp-provider.js.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts +62 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.d.ts.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.js +72 -0
- package/dist/seo/sources/engine-scrape-parser-chatgpt.js.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts +10 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.d.ts.map +1 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.js +72 -0
- package/dist/seo/sources/engine-scrape-parser-perplexity.js.map +1 -0
- package/dist/seo/sources/gsc-adapter.d.ts +64 -0
- package/dist/seo/sources/gsc-adapter.d.ts.map +1 -0
- package/dist/seo/sources/gsc-adapter.js +221 -0
- package/dist/seo/sources/gsc-adapter.js.map +1 -0
- package/dist/seo/sources/local-export.d.ts +53 -0
- package/dist/seo/sources/local-export.d.ts.map +1 -0
- package/dist/seo/sources/local-export.js +307 -0
- package/dist/seo/sources/local-export.js.map +1 -0
- package/dist/seo/sources/mention-citation-extractor.d.ts +136 -0
- package/dist/seo/sources/mention-citation-extractor.d.ts.map +1 -0
- package/dist/seo/sources/mention-citation-extractor.js +272 -0
- package/dist/seo/sources/mention-citation-extractor.js.map +1 -0
- package/dist/seo/sources/scrape-arm-provider.d.ts +109 -0
- package/dist/seo/sources/scrape-arm-provider.d.ts.map +1 -0
- package/dist/seo/sources/scrape-arm-provider.js +129 -0
- package/dist/seo/sources/scrape-arm-provider.js.map +1 -0
- package/dist/seo/tracked-prompt-store.d.ts +33 -0
- package/dist/seo/tracked-prompt-store.d.ts.map +1 -0
- package/dist/seo/tracked-prompt-store.js +68 -0
- package/dist/seo/tracked-prompt-store.js.map +1 -0
- package/dist/seo/types.d.ts +128 -0
- package/dist/seo/types.d.ts.map +1 -0
- package/dist/seo/types.js +14 -0
- package/dist/seo/types.js.map +1 -0
- package/dist/seo/verifier.d.ts +34 -0
- package/dist/seo/verifier.d.ts.map +1 -0
- package/dist/seo/verifier.js +204 -0
- package/dist/seo/verifier.js.map +1 -0
- package/dist/seo/workflow-capabilities.d.ts +26 -0
- package/dist/seo/workflow-capabilities.d.ts.map +1 -0
- package/dist/seo/workflow-capabilities.js +12 -0
- package/dist/seo/workflow-capabilities.js.map +1 -0
- package/dist/state/facts.d.ts +5 -1
- package/dist/state/facts.d.ts.map +1 -1
- package/dist/state/facts.js +29 -19
- package/dist/state/facts.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/outline-state.d.ts +0 -12
- package/dist/state/outline-state.d.ts.map +1 -1
- package/dist/state/outline-state.js +1 -18
- package/dist/state/outline-state.js.map +1 -1
- package/dist/state/security-audit-state.d.ts +20 -0
- package/dist/state/security-audit-state.d.ts.map +1 -0
- package/dist/state/security-audit-state.js +59 -0
- package/dist/state/security-audit-state.js.map +1 -0
- package/dist/teams/registry.d.ts.map +1 -1
- package/dist/teams/registry.js +17 -0
- package/dist/teams/registry.js.map +1 -1
- package/dist/telegram/bot.d.ts +137 -0
- package/dist/telegram/bot.d.ts.map +1 -0
- package/dist/telegram/bot.js +323 -0
- package/dist/telegram/bot.js.map +1 -0
- package/dist/telegram/digest.d.ts +19 -0
- package/dist/telegram/digest.d.ts.map +1 -0
- package/dist/telegram/digest.js +23 -0
- package/dist/telegram/digest.js.map +1 -0
- package/dist/telegram/fleet-view.d.ts +38 -0
- package/dist/telegram/fleet-view.d.ts.map +1 -0
- package/dist/telegram/fleet-view.js +98 -0
- package/dist/telegram/fleet-view.js.map +1 -0
- package/dist/telegram/handlers/approvals.d.ts +61 -0
- package/dist/telegram/handlers/approvals.d.ts.map +1 -0
- package/dist/telegram/handlers/approvals.js +122 -0
- package/dist/telegram/handlers/approvals.js.map +1 -0
- package/dist/telegram/handlers/capture.d.ts +43 -0
- package/dist/telegram/handlers/capture.d.ts.map +1 -0
- package/dist/telegram/handlers/capture.js +51 -0
- package/dist/telegram/handlers/capture.js.map +1 -0
- package/dist/telegram/handlers/prioritize.d.ts +50 -0
- package/dist/telegram/handlers/prioritize.d.ts.map +1 -0
- package/dist/telegram/handlers/prioritize.js +99 -0
- package/dist/telegram/handlers/prioritize.js.map +1 -0
- package/dist/telegram/handlers/upload.d.ts +105 -0
- package/dist/telegram/handlers/upload.d.ts.map +1 -0
- package/dist/telegram/handlers/upload.js +149 -0
- package/dist/telegram/handlers/upload.js.map +1 -0
- package/dist/telegram/keyboard.d.ts +48 -0
- package/dist/telegram/keyboard.d.ts.map +1 -0
- package/dist/telegram/keyboard.js +81 -0
- package/dist/telegram/keyboard.js.map +1 -0
- package/dist/telegram/outbound.d.ts +77 -0
- package/dist/telegram/outbound.d.ts.map +1 -0
- package/dist/telegram/outbound.js +45 -0
- package/dist/telegram/outbound.js.map +1 -0
- package/dist/telegram/router.d.ts +46 -0
- package/dist/telegram/router.d.ts.map +1 -0
- package/dist/telegram/router.js +63 -0
- package/dist/telegram/router.js.map +1 -0
- package/dist/telegram/streaming.d.ts +36 -0
- package/dist/telegram/streaming.d.ts.map +1 -0
- package/dist/telegram/streaming.js +55 -0
- package/dist/telegram/streaming.js.map +1 -0
- package/dist/telegram/whitelist.d.ts +20 -0
- package/dist/telegram/whitelist.d.ts.map +1 -0
- package/dist/telegram/whitelist.js +34 -0
- package/dist/telegram/whitelist.js.map +1 -0
- package/dist/utils/git.d.ts +0 -6
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +0 -19
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/vault/conventions.d.ts +23 -0
- package/dist/vault/conventions.d.ts.map +1 -0
- package/dist/vault/conventions.js +22 -0
- package/dist/vault/conventions.js.map +1 -0
- package/dist/vault/frontmatter.d.ts +47 -0
- package/dist/vault/frontmatter.d.ts.map +1 -0
- package/dist/vault/frontmatter.js +149 -0
- package/dist/vault/frontmatter.js.map +1 -0
- package/dist/vault/index-map.d.ts +35 -0
- package/dist/vault/index-map.d.ts.map +1 -0
- package/dist/vault/index-map.js +67 -0
- package/dist/vault/index-map.js.map +1 -0
- package/dist/vault/mcp-adapter.d.ts +96 -0
- package/dist/vault/mcp-adapter.d.ts.map +1 -0
- package/dist/vault/mcp-adapter.js +176 -0
- package/dist/vault/mcp-adapter.js.map +1 -0
- package/dist/vault/note-io.d.ts +29 -0
- package/dist/vault/note-io.d.ts.map +1 -0
- package/dist/vault/note-io.js +44 -0
- package/dist/vault/note-io.js.map +1 -0
- package/dist/vault/profile.d.ts +35 -0
- package/dist/vault/profile.d.ts.map +1 -0
- package/dist/vault/profile.js +50 -0
- package/dist/vault/profile.js.map +1 -0
- package/dist/vault/reindex.d.ts +55 -0
- package/dist/vault/reindex.d.ts.map +1 -0
- package/dist/vault/reindex.js +69 -0
- package/dist/vault/reindex.js.map +1 -0
- package/dist/vault/types.d.ts +25 -0
- package/dist/vault/types.d.ts.map +1 -0
- package/dist/vault/types.js +9 -0
- package/dist/vault/types.js.map +1 -0
- package/package.json +20 -4
- package/scripts/sync-targets.json +2 -1
- package/skills/bober.design/SKILL.md +190 -0
- package/skills/bober.design/references/1-anti-slop.md +102 -0
- package/skills/bober.design/references/2-design-brief.md +84 -0
- package/skills/bober.design/references/3-critique-rubric.md +62 -0
- package/skills/bober.design/references/4-copy-guide.md +43 -0
- package/skills/bober.plan/SKILL.md +15 -1
- package/skills/bober.run/SKILL.md +7 -4
- package/skills/bober.security-anchor/SKILL.md +172 -0
- package/skills/bober.security-audit/SKILL.md +288 -0
- package/skills/bober.security-dex-backend/SKILL.md +306 -0
- package/skills/bober.security-generic/SKILL.md +295 -0
- package/skills/bober.security-igaming/SKILL.md +290 -0
- package/skills/bober.security-node/SKILL.md +267 -0
- package/skills/bober.security-payments/SKILL.md +249 -0
- package/skills/bober.security-react/SKILL.md +194 -0
- package/skills/bober.security-solidity/SKILL.md +306 -0
- package/skills/bober.seo/SKILL.md +132 -0
- package/skills/bober.seo-ai-visibility/SKILL.md +110 -0
- package/skills/bober.seo-content-decay/SKILL.md +99 -0
- package/skills/bober.seo-generic/SKILL.md +173 -0
- package/skills/bober.seo-internal-linking/SKILL.md +87 -0
- package/skills/bober.seo-parasite-watch/SKILL.md +121 -0
- package/skills/bober.seo-rank-track/SKILL.md +98 -0
- package/skills/bober.seo-schema-audit/SKILL.md +97 -0
- package/skills/bober.seo-technical-audit/SKILL.md +113 -0
- package/skills/bober.seo-topical-map/SKILL.md +100 -0
- package/skills/bober.seo-verticals/SKILL.md +133 -0
- package/skills/bober.using-bober/SKILL.md +1 -0
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
import { sessionForkId } from "./session-store.js";
|
|
1
2
|
import { logger } from "../utils/logger.js";
|
|
3
|
+
import { executeToolBatch } from "./tools/executor.js";
|
|
4
|
+
import { summarizeMessages } from "./compaction.js";
|
|
5
|
+
import { buildSubagentTool } from "./subagents.js";
|
|
2
6
|
// ── Transient-error retry ──────────────────────────────────────────
|
|
3
7
|
/** Max retry attempts for transient API failures before giving up. */
|
|
4
8
|
const MAX_CHAT_RETRIES = 5;
|
|
@@ -31,6 +35,18 @@ function isTransientError(message) {
|
|
|
31
35
|
return TRANSIENT_ERROR_PATTERNS.some((p) => m.includes(p));
|
|
32
36
|
}
|
|
33
37
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
38
|
+
/**
|
|
39
|
+
* Thrown by `chatWithRetry` (agent-loop-capability-port sprint 9) when a chat
|
|
40
|
+
* call fails because the run's `abortSignal` fired. Never retried and never
|
|
41
|
+
* escapes `runAgenticLoop` — the loop's chat catch maps it to a graceful
|
|
42
|
+
* `stopReason: "aborted"` return instead of `"error"`.
|
|
43
|
+
*/
|
|
44
|
+
export class AbortedError extends Error {
|
|
45
|
+
constructor() {
|
|
46
|
+
super("Run aborted.");
|
|
47
|
+
this.name = "AbortedError";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
34
50
|
/**
|
|
35
51
|
* Call client.chat() with exponential backoff on transient errors.
|
|
36
52
|
* Non-transient errors are rethrown immediately (no point retrying a 401).
|
|
@@ -42,6 +58,17 @@ async function chatWithRetry(client, params, turn) {
|
|
|
42
58
|
return await client.chat(params);
|
|
43
59
|
}
|
|
44
60
|
catch (err) {
|
|
61
|
+
// An abort is terminal, never transient/retryable (sc-9-2). Checked
|
|
62
|
+
// FIRST, before isTransientError. The primary signal is the caller's
|
|
63
|
+
// own `abortSignal.aborted` flag — provider-agnostic and always true
|
|
64
|
+
// when OUR signal caused the cancel. The Anthropic SDK's real abort
|
|
65
|
+
// error (`APIUserAbortError`) does NOT set `err.name` to "AbortError"
|
|
66
|
+
// (it stays "Error"), so `err.name === "AbortError"` is kept only as a
|
|
67
|
+
// secondary guard for raw fetch/DOMException aborts and test doubles.
|
|
68
|
+
if (params.abortSignal?.aborted === true ||
|
|
69
|
+
(err instanceof Error && err.name === "AbortError")) {
|
|
70
|
+
throw new AbortedError();
|
|
71
|
+
}
|
|
45
72
|
lastErr = err;
|
|
46
73
|
const message = err instanceof Error ? err.message : String(err);
|
|
47
74
|
if (!isTransientError(message) || attempt === MAX_CHAT_RETRIES) {
|
|
@@ -112,17 +139,123 @@ export async function coerceJsonOutput(params) {
|
|
|
112
139
|
* @returns The final text response and metadata about the conversation.
|
|
113
140
|
*/
|
|
114
141
|
export async function runAgenticLoop(params) {
|
|
115
|
-
const { client, model, systemPrompt, userMessage,
|
|
142
|
+
const { client, model, systemPrompt, userMessage, maxTurns, maxTokens = 16384, effort, budget, parallelReadOnlyTools, onToolUse, onTurnComplete, completionCheck, maxNudges = 2, nudgeMessage, onTextDelta, onEvent, hooks, session, initialMessages, compaction, abortSignal, } = params;
|
|
143
|
+
// Locally-augmentable tool set (sprint 10). When `params.subagents` is
|
|
144
|
+
// absent/empty, `tools`/`toolHandlers` keep the SAME reference as
|
|
145
|
+
// `params.tools`/`params.toolHandlers` — so `readOnlyTools` below and every
|
|
146
|
+
// `chat` call's `tools` argument stay byte-identical to the pre-sprint-10
|
|
147
|
+
// behavior (sc-10-4). Registered BEFORE `readOnlyTools` is derived so the
|
|
148
|
+
// spawn_subagent tool itself participates in that derivation (it is never
|
|
149
|
+
// marked readOnly — ADR-2).
|
|
150
|
+
let tools = params.tools;
|
|
151
|
+
let toolHandlers = params.toolHandlers;
|
|
152
|
+
if (params.subagents && params.subagents.length > 0) {
|
|
153
|
+
const { tool, handler } = buildSubagentTool(params.subagents, params, {
|
|
154
|
+
runLoop: runAgenticLoop,
|
|
155
|
+
});
|
|
156
|
+
tools = [...params.tools, tool];
|
|
157
|
+
toolHandlers = new Map(params.toolHandlers);
|
|
158
|
+
toolHandlers.set(tool.name, handler);
|
|
159
|
+
}
|
|
160
|
+
// Derived once, from the caller-supplied tool schemas — the loop never
|
|
161
|
+
// hard-codes a tool-name allow-list (ADR-2). Absent `readOnly` => not in
|
|
162
|
+
// the set => always serial for that tool, regardless of the flag.
|
|
163
|
+
const readOnlyTools = new Set(tools.filter((t) => t.readOnly === true).map((t) => t.name));
|
|
116
164
|
const messages = [
|
|
165
|
+
...(initialMessages ?? []),
|
|
117
166
|
{ role: "user", content: userMessage },
|
|
118
167
|
];
|
|
119
168
|
let totalInputTokens = 0;
|
|
120
169
|
let totalOutputTokens = 0;
|
|
170
|
+
let totalCostUsd;
|
|
121
171
|
const allToolsCalled = [];
|
|
122
172
|
let finalText = "";
|
|
123
173
|
let nudgesUsed = 0;
|
|
174
|
+
// Persist the transcript to the opted-in session store, swallowing (and
|
|
175
|
+
// logging) any save failure — persistence is a convenience, and losing a
|
|
176
|
+
// transcript write must never fail an otherwise-successful run (sc-6-1).
|
|
177
|
+
// A no-op when `session` is absent, so calling this unconditionally at
|
|
178
|
+
// every turn boundary keeps the no-session path byte-identical (sc-6-4).
|
|
179
|
+
const persistSession = async (turnsUsed, extraMessages = []) => {
|
|
180
|
+
if (!session)
|
|
181
|
+
return;
|
|
182
|
+
try {
|
|
183
|
+
await session.store.save({
|
|
184
|
+
sessionId: session.sessionId,
|
|
185
|
+
model,
|
|
186
|
+
turnsUsed,
|
|
187
|
+
messages: extraMessages.length > 0 ? [...messages, ...extraMessages] : messages,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
192
|
+
logger.warn(`Session persistence failed for '${session.sessionId}' (swallowed): ${message}`);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
// Emit a LoopEvent, swallowing (and logging) any throw from the consumer —
|
|
196
|
+
// an observe-only channel must never crash the loop (sc-5-4).
|
|
197
|
+
const safeEmit = (event) => {
|
|
198
|
+
if (!onEvent)
|
|
199
|
+
return;
|
|
200
|
+
try {
|
|
201
|
+
onEvent(event);
|
|
202
|
+
}
|
|
203
|
+
catch (err) {
|
|
204
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
205
|
+
logger.warn(`onEvent hook threw (swallowed): ${message}`);
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
// Every stop path routes through here so `result` fires and `onStop` runs
|
|
209
|
+
// exactly once, regardless of which of the 4 returns below is taken.
|
|
210
|
+
async function finish(result) {
|
|
211
|
+
safeEmit({ type: "result", stopReason: result.stopReason, turnsUsed: result.turnsUsed });
|
|
212
|
+
if (hooks?.onStop) {
|
|
213
|
+
try {
|
|
214
|
+
await hooks.onStop(result);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
218
|
+
logger.warn(`onStop hook threw (swallowed): ${message}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
// Aborted-run result (sprint 9). Mirrors the `budget_exceeded` shape at
|
|
224
|
+
// line ~560 below, reusing the SAME usage/cost accumulators so partial
|
|
225
|
+
// telemetry is preserved (sc-9-3). `turnsUsed` is the count of FULLY
|
|
226
|
+
// completed turns — the in-progress/discarded turn is never counted, same
|
|
227
|
+
// discipline as the existing `stopReason: "error"` catch (which also uses
|
|
228
|
+
// `turn - 1`).
|
|
229
|
+
const abortedResult = (turnsUsed) => ({
|
|
230
|
+
finalText: finalText || "Run aborted before completion. Partial result returned.",
|
|
231
|
+
turnsUsed,
|
|
232
|
+
toolsCalled: allToolsCalled,
|
|
233
|
+
usage: { inputTokens: totalInputTokens, outputTokens: totalOutputTokens },
|
|
234
|
+
stopReason: "aborted",
|
|
235
|
+
...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),
|
|
236
|
+
});
|
|
237
|
+
safeEmit({ type: "init", model, maxTurns });
|
|
124
238
|
for (let turn = 1; turn <= maxTurns; turn++) {
|
|
239
|
+
// Turn-boundary abort check (sc-9-1): fires BEFORE the next chat call is
|
|
240
|
+
// ever made, so an abort between turns costs zero further chat calls.
|
|
241
|
+
if (abortSignal?.aborted) {
|
|
242
|
+
await persistSession(turn - 1);
|
|
243
|
+
return finish(abortedResult(turn - 1));
|
|
244
|
+
}
|
|
125
245
|
logger.debug(`Agentic loop turn ${turn}/${maxTurns}...`);
|
|
246
|
+
safeEmit({ type: "turn-start", turn });
|
|
247
|
+
// Combined per-turn delta callback: emits the text-delta LoopEvent FIRST
|
|
248
|
+
// (safeEmit self-catches), then the caller's onTextDelta (adapter wraps
|
|
249
|
+
// this in try/catch), so a throwing caller callback never suppresses the
|
|
250
|
+
// loop event. Defined INSIDE the loop so it captures the current `turn`.
|
|
251
|
+
// Left undefined when neither onTextDelta nor onEvent is set, so the
|
|
252
|
+
// no-callback path never carries an `onTextDelta` key (byte-identical).
|
|
253
|
+
const emitTextDelta = onTextDelta !== undefined || onEvent !== undefined
|
|
254
|
+
? (delta) => {
|
|
255
|
+
safeEmit({ type: "text-delta", turn, delta });
|
|
256
|
+
onTextDelta?.(delta);
|
|
257
|
+
}
|
|
258
|
+
: undefined;
|
|
126
259
|
let response;
|
|
127
260
|
try {
|
|
128
261
|
response = await chatWithRetry(client, {
|
|
@@ -131,13 +264,26 @@ export async function runAgenticLoop(params) {
|
|
|
131
264
|
messages,
|
|
132
265
|
tools: tools.length > 0 ? tools : undefined,
|
|
133
266
|
maxTokens,
|
|
267
|
+
...(effort !== undefined ? { effort } : {}),
|
|
268
|
+
...(emitTextDelta ? { onTextDelta: emitTextDelta } : {}),
|
|
269
|
+
...(abortSignal !== undefined ? { abortSignal } : {}),
|
|
134
270
|
}, turn);
|
|
135
271
|
}
|
|
136
272
|
catch (err) {
|
|
273
|
+
// An abort is terminal, not an error (sc-9-2/9-3): chatWithRetry
|
|
274
|
+
// rethrows AbortedError immediately (never retried) whenever the
|
|
275
|
+
// signal caused the failure. Also guard on the flag directly for
|
|
276
|
+
// provider-agnostic robustness (a non-Anthropic adapter might reject
|
|
277
|
+
// for its own reasons right as the signal fires).
|
|
278
|
+
if (err instanceof AbortedError || abortSignal?.aborted) {
|
|
279
|
+
await persistSession(turn - 1);
|
|
280
|
+
return finish(abortedResult(turn - 1));
|
|
281
|
+
}
|
|
137
282
|
// Handle context window exhaustion or other API errors
|
|
138
283
|
const message = err instanceof Error ? err.message : String(err);
|
|
139
284
|
logger.warn(`Agentic loop API error on turn ${turn}: ${message}`);
|
|
140
|
-
|
|
285
|
+
await persistSession(turn - 1);
|
|
286
|
+
return finish({
|
|
141
287
|
finalText: finalText || `Error on turn ${turn}: ${message}`,
|
|
142
288
|
turnsUsed: turn - 1,
|
|
143
289
|
toolsCalled: allToolsCalled,
|
|
@@ -146,11 +292,93 @@ export async function runAgenticLoop(params) {
|
|
|
146
292
|
outputTokens: totalOutputTokens,
|
|
147
293
|
},
|
|
148
294
|
stopReason: "error",
|
|
149
|
-
|
|
295
|
+
...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
// Post-response abort check (sc-9-4): a non-cancellable adapter's request
|
|
299
|
+
// may have completed anyway after the signal fired mid-flight. Discard
|
|
300
|
+
// this response entirely — do not accumulate usage, do not compact, and
|
|
301
|
+
// do not execute its tool batch. `turnsUsed` only ever counts fully
|
|
302
|
+
// completed turns, so this uses `turn - 1`, same as the chat-catch above.
|
|
303
|
+
if (abortSignal?.aborted) {
|
|
304
|
+
await persistSession(turn - 1);
|
|
305
|
+
return finish(abortedResult(turn - 1));
|
|
150
306
|
}
|
|
151
307
|
// Accumulate usage
|
|
152
308
|
totalInputTokens += response.usage.inputTokens;
|
|
153
309
|
totalOutputTokens += response.usage.outputTokens;
|
|
310
|
+
// Accumulate cost (only tracks a sum when at least one turn reports cost)
|
|
311
|
+
if (response.costUsd !== undefined) {
|
|
312
|
+
totalCostUsd = (totalCostUsd ?? 0) + response.costUsd;
|
|
313
|
+
}
|
|
314
|
+
// Charge the budget (tokens + USD) once per turn. `chargeUsd`/`chargeTokens`
|
|
315
|
+
// are no-op-safe on missing/non-finite input. ADR-4: a hit ceiling ends the
|
|
316
|
+
// run gracefully — the loop NEVER throws and NEVER calls assertWithinBudget().
|
|
317
|
+
budget?.chargeTokens(response.usage);
|
|
318
|
+
budget?.chargeUsd(response.costUsd ?? 0);
|
|
319
|
+
// In-context auto-compaction (agent-loop-capability-port sprint 7). Trigger
|
|
320
|
+
// on the PER-REQUEST prompt size (response.usage.inputTokens), never the
|
|
321
|
+
// running total — a shrunken prompt then naturally resets the trigger
|
|
322
|
+
// (anti-thrash). Only worth doing when the loop will make another request
|
|
323
|
+
// (tool_use); the final completion turn never pays for a useless summary.
|
|
324
|
+
// Placed BEFORE the exceeded() gate below so the summarizer's own charge is
|
|
325
|
+
// caught by the SAME post-turn budget check, with no new exit path.
|
|
326
|
+
if (compaction &&
|
|
327
|
+
response.stopReason === "tool_use" &&
|
|
328
|
+
response.usage.inputTokens > compaction.maxContextTokens) {
|
|
329
|
+
const keep = (compaction.keepRecentTurns ?? 2) * 2;
|
|
330
|
+
if (messages.length > keep) {
|
|
331
|
+
const head = messages.slice(0, messages.length - keep);
|
|
332
|
+
const outcome = await summarizeMessages({
|
|
333
|
+
client,
|
|
334
|
+
model,
|
|
335
|
+
head,
|
|
336
|
+
instructions: compaction.instructions,
|
|
337
|
+
});
|
|
338
|
+
if (outcome) {
|
|
339
|
+
const before = messages.length;
|
|
340
|
+
// Replace the head in place with the single summary message; splice
|
|
341
|
+
// preserves the tail's object identity so the recent turns stay
|
|
342
|
+
// deep-equal (sc-7-1). `messages` is declared `const`.
|
|
343
|
+
messages.splice(0, head.length, outcome.summaryMessage);
|
|
344
|
+
// Charge the extra call to the SAME accumulators/Budget used for
|
|
345
|
+
// every other turn (sc-7-3).
|
|
346
|
+
totalInputTokens += outcome.usage.inputTokens;
|
|
347
|
+
totalOutputTokens += outcome.usage.outputTokens;
|
|
348
|
+
if (outcome.costUsd !== undefined) {
|
|
349
|
+
totalCostUsd = (totalCostUsd ?? 0) + outcome.costUsd;
|
|
350
|
+
}
|
|
351
|
+
budget?.chargeTokens(outcome.usage);
|
|
352
|
+
budget?.chargeUsd(outcome.costUsd ?? 0);
|
|
353
|
+
safeEmit({
|
|
354
|
+
type: "compact-boundary",
|
|
355
|
+
turn,
|
|
356
|
+
messagesBefore: before,
|
|
357
|
+
messagesAfter: messages.length,
|
|
358
|
+
inputTokensAtTrigger: response.usage.inputTokens,
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
// outcome === undefined => the summarizer failed; summarizeMessages
|
|
362
|
+
// already logged. Fail open: skip compaction this turn, continue
|
|
363
|
+
// uncompacted (sc-7-4) — no message is ever dropped without a summary.
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
if (budget?.exceeded()) {
|
|
367
|
+
logger.warn(`Agentic loop hit budget ceiling on turn ${turn}. Returning partial result.`);
|
|
368
|
+
await persistSession(turn);
|
|
369
|
+
return finish({
|
|
370
|
+
finalText: finalText ||
|
|
371
|
+
"Budget ceiling reached before completion. Partial result returned.",
|
|
372
|
+
turnsUsed: turn,
|
|
373
|
+
toolsCalled: allToolsCalled,
|
|
374
|
+
usage: {
|
|
375
|
+
inputTokens: totalInputTokens,
|
|
376
|
+
outputTokens: totalOutputTokens,
|
|
377
|
+
},
|
|
378
|
+
stopReason: "budget_exceeded",
|
|
379
|
+
...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),
|
|
380
|
+
});
|
|
381
|
+
}
|
|
154
382
|
const turnStopReason = response.stopReason;
|
|
155
383
|
// If the model is done (no more tool use), return — UNLESS a completion
|
|
156
384
|
// predicate says this tool-less turn isn't actually complete (model narrated
|
|
@@ -175,7 +403,19 @@ export async function runAgenticLoop(params) {
|
|
|
175
403
|
});
|
|
176
404
|
continue;
|
|
177
405
|
}
|
|
178
|
-
|
|
406
|
+
// A refusal is a normal (non-throwing) response, not a transient error —
|
|
407
|
+
// detect it here at the completion branch, never in chatWithRetry.
|
|
408
|
+
const refused = turnStopReason === "refusal";
|
|
409
|
+
// A tool-less completion turn calls no tools, but it is still "a turn"
|
|
410
|
+
// — emit its turn-end symmetrically with the tool-turn case below.
|
|
411
|
+
safeEmit({ type: "turn-end", turn, toolsCalled: [] });
|
|
412
|
+
// This completion path never pushes its assistant text onto `messages`
|
|
413
|
+
// (the loop is about to return, so there's no next turn to read it
|
|
414
|
+
// back) — pass it as an extra so the persisted transcript still
|
|
415
|
+
// captures the final answer (sc-6-1). `messages` itself is untouched,
|
|
416
|
+
// so the no-session path stays byte-identical.
|
|
417
|
+
await persistSession(turn, [{ role: "assistant", content: finalText }]);
|
|
418
|
+
return finish({
|
|
179
419
|
finalText,
|
|
180
420
|
turnsUsed: turn,
|
|
181
421
|
toolsCalled: allToolsCalled,
|
|
@@ -184,7 +424,9 @@ export async function runAgenticLoop(params) {
|
|
|
184
424
|
outputTokens: totalOutputTokens,
|
|
185
425
|
},
|
|
186
426
|
stopReason: turnStopReason,
|
|
187
|
-
|
|
427
|
+
...(refused ? { refused: true } : {}),
|
|
428
|
+
...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),
|
|
429
|
+
});
|
|
188
430
|
}
|
|
189
431
|
// Model wants to use tools — append the assistant's full response
|
|
190
432
|
// (text + tool calls) as an AssistantMessage.
|
|
@@ -194,43 +436,68 @@ export async function runAgenticLoop(params) {
|
|
|
194
436
|
toolCalls: response.toolCalls,
|
|
195
437
|
};
|
|
196
438
|
messages.push(assistantMessage);
|
|
197
|
-
//
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
toolResults.push({
|
|
210
|
-
toolUseId: toolCall.id,
|
|
211
|
-
content: `Error: Unknown tool "${toolName}". Available tools: ${[...toolHandlers.keys()].join(", ")}`,
|
|
212
|
-
isError: true,
|
|
213
|
-
});
|
|
214
|
-
continue;
|
|
439
|
+
// Name accumulation MUST follow input order regardless of parallelism —
|
|
440
|
+
// done up front, in a dedicated pass, so it's unaffected by the executor's
|
|
441
|
+
// internal concurrency.
|
|
442
|
+
const turnTools = response.toolCalls.map((tc) => tc.name);
|
|
443
|
+
allToolsCalled.push(...turnTools);
|
|
444
|
+
// Tool-level event/hook callbacks for this turn (sprint 5). Each is left
|
|
445
|
+
// `undefined` when its underlying capability (onEvent / hooks) is unset,
|
|
446
|
+
// so `executeToolBatch`/`executeOne` take their pre-sprint-5 code path
|
|
447
|
+
// exactly — byte-identical when nothing new is configured (sc-5-5).
|
|
448
|
+
const onToolStart = onEvent
|
|
449
|
+
? (call) => {
|
|
450
|
+
safeEmit({ type: "tool-start", turn, name: call.name, input: call.input, toolUseId: call.id });
|
|
215
451
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
content: result.output,
|
|
221
|
-
isError: result.isError,
|
|
222
|
-
});
|
|
452
|
+
: undefined;
|
|
453
|
+
const onToolEnd = onEvent
|
|
454
|
+
? (call, result) => {
|
|
455
|
+
safeEmit({ type: "tool-end", turn, name: call.name, toolUseId: call.id, isError: result.isError === true });
|
|
223
456
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
457
|
+
: undefined;
|
|
458
|
+
// Fail-closed: a throwing preToolUse is treated as a deny, never as a
|
|
459
|
+
// crash (sc-5-4). Veto-only — never transforms `call.input` (nonGoal).
|
|
460
|
+
const preToolUseHook = hooks?.preToolUse;
|
|
461
|
+
const preToolUse = preToolUseHook
|
|
462
|
+
? async (call) => {
|
|
463
|
+
try {
|
|
464
|
+
return await preToolUseHook({ name: call.name, input: call.input, toolUseId: call.id });
|
|
465
|
+
}
|
|
466
|
+
catch (err) {
|
|
467
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
468
|
+
logger.warn(`preToolUse hook threw (treated as fail-closed deny): ${message}`);
|
|
469
|
+
return { allow: false, reason: "hook error (fail-closed)" };
|
|
470
|
+
}
|
|
232
471
|
}
|
|
233
|
-
|
|
472
|
+
: undefined;
|
|
473
|
+
// Swallow-and-log: a throwing postToolUse never crashes the loop (sc-5-4).
|
|
474
|
+
const postToolUseHook = hooks?.postToolUse;
|
|
475
|
+
const postToolUse = postToolUseHook
|
|
476
|
+
? async (call, result) => {
|
|
477
|
+
try {
|
|
478
|
+
await postToolUseHook({ name: call.name, input: call.input, toolUseId: call.id }, result);
|
|
479
|
+
}
|
|
480
|
+
catch (err) {
|
|
481
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
482
|
+
logger.warn(`postToolUse hook threw (swallowed): ${message}`);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
: undefined;
|
|
486
|
+
// Execute each tool and collect results — delegated to executeToolBatch,
|
|
487
|
+
// which runs contiguous read-only-annotated runs concurrently when
|
|
488
|
+
// `parallelReadOnlyTools` is true, and everything else strictly serially
|
|
489
|
+
// (byte-identical to the old for-await loop when the flag is off).
|
|
490
|
+
const toolResults = await executeToolBatch({
|
|
491
|
+
toolCalls: response.toolCalls,
|
|
492
|
+
toolHandlers,
|
|
493
|
+
readOnlyTools,
|
|
494
|
+
parallel: parallelReadOnlyTools === true,
|
|
495
|
+
onToolUse,
|
|
496
|
+
onToolStart,
|
|
497
|
+
onToolEnd,
|
|
498
|
+
preToolUse,
|
|
499
|
+
postToolUse,
|
|
500
|
+
});
|
|
234
501
|
// Append tool results as a ToolResultMessage (user role).
|
|
235
502
|
// The adapter converts this to provider-specific format.
|
|
236
503
|
const toolResultMessage = {
|
|
@@ -238,11 +505,18 @@ export async function runAgenticLoop(params) {
|
|
|
238
505
|
toolResults,
|
|
239
506
|
};
|
|
240
507
|
messages.push(toolResultMessage);
|
|
508
|
+
// Crash-resumable snapshot: `messages` now holds this turn's assistant
|
|
509
|
+
// message AND tool results (sc-6-1).
|
|
510
|
+
await persistSession(turn);
|
|
241
511
|
onTurnComplete?.(turn, turnTools);
|
|
512
|
+
safeEmit({ type: "turn-end", turn, toolsCalled: turnTools });
|
|
242
513
|
}
|
|
243
514
|
// Max turns exceeded — return what we have
|
|
244
515
|
logger.warn(`Agentic loop exceeded max turns (${maxTurns}). Returning partial result.`);
|
|
245
|
-
|
|
516
|
+
// Covers the edge case where the last iteration ended via the nudge path
|
|
517
|
+
// (pushed messages but `continue`d without an intervening save).
|
|
518
|
+
await persistSession(maxTurns);
|
|
519
|
+
return finish({
|
|
246
520
|
finalText: finalText ||
|
|
247
521
|
"Max turns exceeded. The agent ran out of tool-use budget before completing.",
|
|
248
522
|
turnsUsed: maxTurns,
|
|
@@ -252,6 +526,41 @@ export async function runAgenticLoop(params) {
|
|
|
252
526
|
outputTokens: totalOutputTokens,
|
|
253
527
|
},
|
|
254
528
|
stopReason: "max_turns_exceeded",
|
|
255
|
-
|
|
529
|
+
...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
// ── Session resume / fork (sprint 6) ────────────────────────────────────
|
|
533
|
+
/**
|
|
534
|
+
* Load a persisted transcript so a NEW `runAgenticLoop` call can continue it
|
|
535
|
+
* with full prior context: pass the returned `initialMessages` (seeded
|
|
536
|
+
* AHEAD of the new `userMessage`) alongside `session: { store, sessionId }`
|
|
537
|
+
* so new turns append to the same session file.
|
|
538
|
+
*
|
|
539
|
+
* Never throws. A missing or corrupt session file returns a typed
|
|
540
|
+
* `{ error }` result instead — conceptually aligned with the loop's own
|
|
541
|
+
* `stopReason: "error"` path, but this runs BEFORE the loop starts, so it is
|
|
542
|
+
* a separate discriminated-union return, not a shared code path. The loop is
|
|
543
|
+
* never started on the error branch, so no empty session ever silently
|
|
544
|
+
* replaces the requested one (sc-6-5).
|
|
545
|
+
*/
|
|
546
|
+
export async function resumeSession(store, sessionId) {
|
|
547
|
+
const record = await store.load(sessionId);
|
|
548
|
+
if (!record) {
|
|
549
|
+
return { error: `Session '${sessionId}' not found or corrupt.` };
|
|
550
|
+
}
|
|
551
|
+
return { initialMessages: record.messages, sessionId };
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Copy the transcript at `sessionId` into a new session file so a new
|
|
555
|
+
* `runAgenticLoop` invocation can branch from it without mutating the
|
|
556
|
+
* original (sc-6-3). `newId` may be supplied explicitly (e.g. by tests);
|
|
557
|
+
* when omitted, a deterministic id is derived from `sessionId` + the
|
|
558
|
+
* store's injected clock (`sessionForkId` — no argless randomness).
|
|
559
|
+
*
|
|
560
|
+
* @returns The new session id (== `newId` when supplied).
|
|
561
|
+
*/
|
|
562
|
+
export async function forkSession(store, sessionId, newId) {
|
|
563
|
+
const targetId = newId ?? sessionForkId(sessionId, store.now());
|
|
564
|
+
return store.fork(sessionId, targetId);
|
|
256
565
|
}
|
|
257
566
|
//# sourceMappingURL=agentic-loop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentic-loop.js","sourceRoot":"","sources":["../../src/orchestrator/agentic-loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agentic-loop.js","sourceRoot":"","sources":["../../src/orchestrator/agentic-loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-context auto-compaction (agent-loop-capability-port sprint 7).
|
|
3
|
+
*
|
|
4
|
+
* A pure, testable helper that summarizes the older ("head") messages of a
|
|
5
|
+
* conversation into a single replacement message via ONE extra `client.chat`
|
|
6
|
+
* call, so `runAgenticLoop` can keep long runs inside the context window
|
|
7
|
+
* without the coarse sprint-boundary reset (`summarizeOlderSprints` /
|
|
8
|
+
* `contextReset` — a different, unrelated layer; see `context-handoff.ts`).
|
|
9
|
+
*
|
|
10
|
+
* Fails open: any error from the summarization call is caught, logged, and
|
|
11
|
+
* surfaced as `undefined` so the caller can skip compaction for that turn
|
|
12
|
+
* and continue uncompacted (sc-7-4). Never throws.
|
|
13
|
+
*/
|
|
14
|
+
import type { LLMClient, Message } from "../providers/types.js";
|
|
15
|
+
export interface CompactionParams {
|
|
16
|
+
/** Provider-agnostic LLM client — the SAME client the run is using. */
|
|
17
|
+
client: LLMClient;
|
|
18
|
+
/** Model ID — the SAME model the run is using. */
|
|
19
|
+
model: string;
|
|
20
|
+
/** The HEAD messages being summarized away (older, completed turns). */
|
|
21
|
+
head: Message[];
|
|
22
|
+
/** Optional caller steering appended to the base summarization prompt. */
|
|
23
|
+
instructions?: string;
|
|
24
|
+
/** Bounded output cap for the summary call. Default 4096. */
|
|
25
|
+
maxTokens?: number;
|
|
26
|
+
}
|
|
27
|
+
export interface CompactionOutcome {
|
|
28
|
+
/** The single replacement message: { role:"user", content:"[Conversation summary] ..." }. */
|
|
29
|
+
summaryMessage: Message;
|
|
30
|
+
/** Token usage of the summarization call itself (to be charged by the caller). */
|
|
31
|
+
usage: {
|
|
32
|
+
inputTokens: number;
|
|
33
|
+
outputTokens: number;
|
|
34
|
+
};
|
|
35
|
+
/** USD cost of the summarization call, when the provider reports one. */
|
|
36
|
+
costUsd?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Summarize `head` into a single replacement message via ONE `client.chat`
|
|
40
|
+
* call. Passes NO `tools` and a bounded `maxTokens` — mirrors the existing
|
|
41
|
+
* one-shot `coerceJsonOutput` precedent (`agentic-loop.ts`).
|
|
42
|
+
*
|
|
43
|
+
* @returns `undefined` on any failure (fail-open, sc-7-4) — the caller must
|
|
44
|
+
* skip compaction for that turn and continue uncompacted, never throw.
|
|
45
|
+
*/
|
|
46
|
+
export declare function summarizeMessages(params: CompactionParams): Promise<CompactionOutcome | undefined>;
|
|
47
|
+
//# sourceMappingURL=compaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../../src/orchestrator/compaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAK7E,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,MAAM,EAAE,SAAS,CAAC;IAClB,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,6FAA6F;IAC7F,cAAc,EAAE,OAAO,CAAC;IACxB,kFAAkF;IAClF,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAqCD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAqBxC"}
|