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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import type { EvalStrategy } from "../config/schema.js";
|
|
2
|
+
import type { SecurityFinding } from "./security-audit-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Deterministic scanner pre-filter (arch-20260712 ADR-4).
|
|
5
|
+
*
|
|
6
|
+
* Runs each `config.security.scanners` command under the shared audit
|
|
7
|
+
* AbortSignal, parses known scanner output (slither, semgrep) into
|
|
8
|
+
* SecurityFinding[] priors, and degrades unknown scanners to a bounded
|
|
9
|
+
* raw-text excerpt finding. Every scanner is isolated: a missing binary,
|
|
10
|
+
* nonzero exit, or thrown error yields `[]` for that scanner only — the
|
|
11
|
+
* pre-filter itself NEVER rejects (runSecurityAudit's Promise.race time-box
|
|
12
|
+
* must be able to trust that this always settles).
|
|
13
|
+
*/
|
|
14
|
+
/** The minimal result shape runScannerPreFilter needs from a child process. */
|
|
15
|
+
export interface ScannerRunResult {
|
|
16
|
+
exitCode: number | undefined;
|
|
17
|
+
stdout: string;
|
|
18
|
+
failed: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Runs one scanner command and resolves with its outcome. NEVER expected to
|
|
22
|
+
* reject in production (the default implementation uses execa's `reject:
|
|
23
|
+
* false`); the caller wraps every invocation in try/catch anyway as a
|
|
24
|
+
* defensive backstop (mirrors src/fleet/runner.ts's "reject:false plus
|
|
25
|
+
* try/catch" belt-and-suspenders pattern).
|
|
26
|
+
*/
|
|
27
|
+
export type ScannerRunner = (cmd: string, args: string[], opts: {
|
|
28
|
+
cwd: string;
|
|
29
|
+
signal: AbortSignal;
|
|
30
|
+
}) => Promise<ScannerRunResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Parse slither `--json` output into SecurityFinding[].
|
|
33
|
+
*
|
|
34
|
+
* Real shape: `{ success, error, results: { detectors: [...] } }`. Each
|
|
35
|
+
* detector: `{ check, impact, confidence, description, elements: [{ type,
|
|
36
|
+
* name, source_mapping: { filename_relative, filename_absolute, lines[],
|
|
37
|
+
* starting_column } }] }`.
|
|
38
|
+
*
|
|
39
|
+
* SecurityFinding has no top-level severity field (ReviewFinding locks
|
|
40
|
+
* description + evidence[]) — the impact bucket is encoded as a `[High]`
|
|
41
|
+
* style prefix on `description`, and `source: "slither"` marks provenance.
|
|
42
|
+
*
|
|
43
|
+
* Defensive narrowing at every level (Pattern A / medline-source.ts style):
|
|
44
|
+
* any structural mismatch returns `[]` rather than throwing. Accepts a raw
|
|
45
|
+
* (non-object) value too — e.g. a truncated JSON string passed directly —
|
|
46
|
+
* so callers never need to guard before calling this.
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseSlitherOutput(json: unknown): SecurityFinding[];
|
|
49
|
+
/**
|
|
50
|
+
* Parse semgrep `--json` output into SecurityFinding[].
|
|
51
|
+
*
|
|
52
|
+
* Real shape: `{ results: [...], errors: [], paths: {...} }`. Each result:
|
|
53
|
+
* `{ check_id, path, start: { line, col }, end: {...}, extra: { severity,
|
|
54
|
+
* message, lines } }`.
|
|
55
|
+
*
|
|
56
|
+
* Same severity-in-description convention as the slither parser
|
|
57
|
+
* (`[ERROR]`/`[WARNING]`/`[INFO]` prefix + `source: "semgrep"`); same
|
|
58
|
+
* defensive narrowing (malformed input → `[]`, never throws).
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseSemgrepOutput(json: unknown): SecurityFinding[];
|
|
61
|
+
/**
|
|
62
|
+
* Parse `npm audit --json` output into SecurityFinding[].
|
|
63
|
+
*
|
|
64
|
+
* v7+ shape: `{ vulnerabilities: { <pkgName>: { name, severity, via: [...],
|
|
65
|
+
* range, nodes: [...], fixAvailable } }, metadata: {...} }`. `via` entries
|
|
66
|
+
* mix plain advisory-source strings and objects `{ title, url, severity }`
|
|
67
|
+
* in the same array — real npm output does this.
|
|
68
|
+
*
|
|
69
|
+
* v6 fallback shape: `{ advisories: { <id>: { module_name, severity, title,
|
|
70
|
+
* url } } }`. Both shapes are supported (whichever key is a well-formed
|
|
71
|
+
* object wins); neither present, or malformed -> [].
|
|
72
|
+
*
|
|
73
|
+
* All findings map to `vulnClass: "supply-chain"` (sc-7-2). Defensive
|
|
74
|
+
* narrowing at every level (Pattern A) — never throws.
|
|
75
|
+
*/
|
|
76
|
+
export declare function parseNpmAuditOutput(json: unknown): SecurityFinding[];
|
|
77
|
+
/**
|
|
78
|
+
* Parse `osv-scanner --format json` output into SecurityFinding[].
|
|
79
|
+
*
|
|
80
|
+
* Real shape: `{ results: [ { source: { path, type }, packages: [ {
|
|
81
|
+
* package: { name, ecosystem, version }, vulnerabilities: [ { id, summary,
|
|
82
|
+
* severity } ] } ] } ] }`. Every finding maps to `vulnClass: "supply-chain"`
|
|
83
|
+
* (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
|
|
84
|
+
*/
|
|
85
|
+
export declare function parseOsvOutput(json: unknown): SecurityFinding[];
|
|
86
|
+
/**
|
|
87
|
+
* Parse `gitleaks --report-format json` output into SecurityFinding[]. Its
|
|
88
|
+
* report is a TOP-LEVEL ARRAY (unlike npm-audit/osv-scanner's object root)
|
|
89
|
+
* of `{ Description, File, StartLine, EndLine, RuleID, Secret, Match,
|
|
90
|
+
* Commit }`.
|
|
91
|
+
*
|
|
92
|
+
* The raw `Secret` field is a live credential — it is NEVER echoed into a
|
|
93
|
+
* finding; `Match` (or a redacted placeholder) is used for the evidence
|
|
94
|
+
* snippet instead. Every finding maps to `vulnClass: "secret-handling"`
|
|
95
|
+
* (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
|
|
96
|
+
*/
|
|
97
|
+
export declare function parseGitleaksOutput(json: unknown): SecurityFinding[];
|
|
98
|
+
/**
|
|
99
|
+
* Whether a configured scanner requires network access to run (hits a
|
|
100
|
+
* remote registry or vulnerability database). Used by the supply-chain axis
|
|
101
|
+
* (sprint 7, security-auditor-agent.ts) to gate network-capable scanner
|
|
102
|
+
* kinds behind `config.security.egress.onlineResearch` — `gitleaks` is a
|
|
103
|
+
* purely local secret scan and is NOT gated.
|
|
104
|
+
*/
|
|
105
|
+
export declare function isNetworkScanner(scanner: EvalStrategy): boolean;
|
|
106
|
+
export interface ScannerPreFilterInput {
|
|
107
|
+
scanners: EvalStrategy[];
|
|
108
|
+
projectRoot: string;
|
|
109
|
+
signal: AbortSignal;
|
|
110
|
+
/** Injected runner — default wraps execa. Tests inject a fake for CI-offline coverage. */
|
|
111
|
+
runner?: ScannerRunner;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Run every configured scanner and return the combined SecurityFinding
|
|
115
|
+
* priors. `scanners: []` is a pure no-op — no runner is invoked and zero
|
|
116
|
+
* child processes are spawned (ADR-4, sc-5-4).
|
|
117
|
+
*
|
|
118
|
+
* Per-scanner isolation: each scanner is wrapped in its own try/catch and
|
|
119
|
+
* contributes `[]` on any failure (missing binary, nonzero exit, thrown
|
|
120
|
+
* error) without affecting the others (sc-5-2). The whole function NEVER
|
|
121
|
+
* rejects — even when the shared AbortSignal fires mid-scan, the killed
|
|
122
|
+
* scanner simply contributes `[]` while already-finished scanners' findings
|
|
123
|
+
* are preserved (sc-5-3).
|
|
124
|
+
*/
|
|
125
|
+
export declare function runScannerPreFilter(input: ScannerPreFilterInput): Promise<SecurityFinding[]>;
|
|
126
|
+
//# sourceMappingURL=security-scanners.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-scanners.d.ts","sourceRoot":"","sources":["../../src/orchestrator/security-scanners.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,2BAA2B,CAAC;AAI5E;;;;;;;;;;GAUG;AAIH,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,KACvC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAuF/B;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAyDnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAoCnE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CAgEpE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CA0C/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CA0BpE;AAqGD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAG/D;AAID,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,WAAW,CAAC;IACpB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAUlG"}
|
|
@@ -0,0 +1,501 @@
|
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
import { ALL_VULN_CLASSES } from "./stack-knowledge.js";
|
|
3
|
+
import { logger } from "../utils/logger.js";
|
|
4
|
+
// bober: 10 MB cap on captured stdout — a pathological scanner (infinite
|
|
5
|
+
// output loop, huge repo dump) cannot exhaust memory or blow the prompt.
|
|
6
|
+
const MAX_SCANNER_BUFFER = 1024 * 1024 * 10;
|
|
7
|
+
/**
|
|
8
|
+
* Default runner: wraps execa. `cancelSignal` ties the child's lifetime to
|
|
9
|
+
* the shared audit AbortSignal; `killSignal: "SIGKILL"` makes both a normal
|
|
10
|
+
* `.kill()` and a cancelSignal-triggered termination send SIGKILL directly
|
|
11
|
+
* (no SIGTERM grace period) so an aborted scan cannot linger (sc-5-3).
|
|
12
|
+
* `reject: false` means a missing binary (ENOENT) or nonzero exit resolves
|
|
13
|
+
* normally instead of throwing (sc-5-2).
|
|
14
|
+
*/
|
|
15
|
+
const defaultRunner = async (cmd, args, opts) => {
|
|
16
|
+
const result = await execa(cmd, args, {
|
|
17
|
+
cwd: opts.cwd,
|
|
18
|
+
cancelSignal: opts.signal,
|
|
19
|
+
killSignal: "SIGKILL",
|
|
20
|
+
reject: false,
|
|
21
|
+
all: true,
|
|
22
|
+
maxBuffer: MAX_SCANNER_BUFFER,
|
|
23
|
+
env: { ...process.env, FORCE_COLOR: "0" },
|
|
24
|
+
});
|
|
25
|
+
return {
|
|
26
|
+
exitCode: result.exitCode,
|
|
27
|
+
stdout: result.all ?? result.stdout ?? "",
|
|
28
|
+
failed: result.failed,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
// ── vulnClass heuristic (shared by both parsers) ─────────────────────
|
|
32
|
+
function isVulnClass(value) {
|
|
33
|
+
return ALL_VULN_CLASSES.includes(value);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Heuristically infer a VulnClass from a scanner check/rule id, by matching
|
|
37
|
+
* well-known keyword tokens. Returns undefined (never a guess) when nothing
|
|
38
|
+
* matches — per generatorNotes[1], forcing a wrong class is worse than
|
|
39
|
+
* leaving vulnClass unset. e.g. slither's "reentrancy-eth" has no clean
|
|
40
|
+
* VulnClass home and correctly stays undefined; "tx-origin" cleanly maps to
|
|
41
|
+
* authn-authz (tx.origin-based authorization is exactly that bug class).
|
|
42
|
+
*
|
|
43
|
+
* bober: substring/keyword matching, not a per-scanner mapping table — good
|
|
44
|
+
* enough to ground the advisory priors; if this proves noisy, replace with
|
|
45
|
+
* an explicit per-check-id map keyed by scanner name.
|
|
46
|
+
*/
|
|
47
|
+
function inferVulnClass(checkId) {
|
|
48
|
+
const id = checkId.toLowerCase();
|
|
49
|
+
const candidate = /sql-?injection|sqli|command-injection|code-injection|\binjection\b/.test(id)
|
|
50
|
+
? "injection"
|
|
51
|
+
: /\bxss\b|cross-site-scripting/.test(id)
|
|
52
|
+
? "xss"
|
|
53
|
+
: /path-traversal|directory-traversal/.test(id)
|
|
54
|
+
? "path-traversal"
|
|
55
|
+
: /hardcoded|secret|credential|api-key/.test(id)
|
|
56
|
+
? "secret-handling"
|
|
57
|
+
: /tx-origin|access-control|\bauth\b|authn|authz|authentication|authorization|privilege/.test(id)
|
|
58
|
+
? "authn-authz"
|
|
59
|
+
: /unvalidated|input-validation|missing-validation|sanitiz/.test(id)
|
|
60
|
+
? "input-validation"
|
|
61
|
+
: /\brace\b|toctou|time-of-check/.test(id)
|
|
62
|
+
? "race-condition"
|
|
63
|
+
: /\bssrf\b|server-side-request/.test(id)
|
|
64
|
+
? "ssrf"
|
|
65
|
+
: /weak-random|insecure-random|predictable-random/.test(id)
|
|
66
|
+
? "insecure-randomness"
|
|
67
|
+
: /\bmd5\b|\bsha1\b|weak-crypto|weak-hash|weak-cipher/.test(id)
|
|
68
|
+
? "crypto-weakness"
|
|
69
|
+
: /deserial|unmarshal|pickle/.test(id)
|
|
70
|
+
? "deserialization"
|
|
71
|
+
: /\bidor\b|\bbola\b|broken-object-level/.test(id)
|
|
72
|
+
? "idor-bola"
|
|
73
|
+
: /\bdos\b|denial-of-service|resource-exhaustion/.test(id)
|
|
74
|
+
? "denial-of-service"
|
|
75
|
+
: undefined;
|
|
76
|
+
return candidate !== undefined && isVulnClass(candidate) ? candidate : undefined;
|
|
77
|
+
}
|
|
78
|
+
// ── Pure parsers (unknown → SecurityFinding[]; never throw) ──────────
|
|
79
|
+
/**
|
|
80
|
+
* Parse slither `--json` output into SecurityFinding[].
|
|
81
|
+
*
|
|
82
|
+
* Real shape: `{ success, error, results: { detectors: [...] } }`. Each
|
|
83
|
+
* detector: `{ check, impact, confidence, description, elements: [{ type,
|
|
84
|
+
* name, source_mapping: { filename_relative, filename_absolute, lines[],
|
|
85
|
+
* starting_column } }] }`.
|
|
86
|
+
*
|
|
87
|
+
* SecurityFinding has no top-level severity field (ReviewFinding locks
|
|
88
|
+
* description + evidence[]) — the impact bucket is encoded as a `[High]`
|
|
89
|
+
* style prefix on `description`, and `source: "slither"` marks provenance.
|
|
90
|
+
*
|
|
91
|
+
* Defensive narrowing at every level (Pattern A / medline-source.ts style):
|
|
92
|
+
* any structural mismatch returns `[]` rather than throwing. Accepts a raw
|
|
93
|
+
* (non-object) value too — e.g. a truncated JSON string passed directly —
|
|
94
|
+
* so callers never need to guard before calling this.
|
|
95
|
+
*/
|
|
96
|
+
export function parseSlitherOutput(json) {
|
|
97
|
+
if (!json || typeof json !== "object" || Array.isArray(json))
|
|
98
|
+
return [];
|
|
99
|
+
const root = json;
|
|
100
|
+
const results = root.results;
|
|
101
|
+
if (!results || typeof results !== "object" || Array.isArray(results))
|
|
102
|
+
return [];
|
|
103
|
+
const detectors = results.detectors;
|
|
104
|
+
if (!Array.isArray(detectors))
|
|
105
|
+
return [];
|
|
106
|
+
const findings = [];
|
|
107
|
+
for (const detector of detectors) {
|
|
108
|
+
if (!detector || typeof detector !== "object")
|
|
109
|
+
continue;
|
|
110
|
+
const d = detector;
|
|
111
|
+
const check = typeof d.check === "string" ? d.check : "unknown-check";
|
|
112
|
+
const impact = typeof d.impact === "string" ? d.impact : "Informational";
|
|
113
|
+
const description = typeof d.description === "string" ? d.description.trim() : check;
|
|
114
|
+
const elements = Array.isArray(d.elements) ? d.elements : [];
|
|
115
|
+
const evidence = [];
|
|
116
|
+
for (const el of elements) {
|
|
117
|
+
if (!el || typeof el !== "object")
|
|
118
|
+
continue;
|
|
119
|
+
const e = el;
|
|
120
|
+
const sourceMapping = e.source_mapping;
|
|
121
|
+
if (!sourceMapping || typeof sourceMapping !== "object")
|
|
122
|
+
continue;
|
|
123
|
+
const sm = sourceMapping;
|
|
124
|
+
const path = typeof sm.filename_relative === "string"
|
|
125
|
+
? sm.filename_relative
|
|
126
|
+
: typeof sm.filename_absolute === "string"
|
|
127
|
+
? sm.filename_absolute
|
|
128
|
+
: "unknown";
|
|
129
|
+
const lines = Array.isArray(sm.lines) ? sm.lines : [];
|
|
130
|
+
const line = typeof lines[0] === "number" ? lines[0] : 0;
|
|
131
|
+
const elName = typeof e.name === "string" ? e.name : "";
|
|
132
|
+
const elType = typeof e.type === "string" ? e.type : "";
|
|
133
|
+
const snippet = [elType, elName].filter(Boolean).join(" ") || check;
|
|
134
|
+
evidence.push({ path, line, snippet });
|
|
135
|
+
}
|
|
136
|
+
findings.push({
|
|
137
|
+
description: `[${impact}] ${check}: ${description}`,
|
|
138
|
+
evidence,
|
|
139
|
+
source: "slither",
|
|
140
|
+
...(inferVulnClass(check) !== undefined ? { vulnClass: inferVulnClass(check) } : {}),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return findings;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parse semgrep `--json` output into SecurityFinding[].
|
|
147
|
+
*
|
|
148
|
+
* Real shape: `{ results: [...], errors: [], paths: {...} }`. Each result:
|
|
149
|
+
* `{ check_id, path, start: { line, col }, end: {...}, extra: { severity,
|
|
150
|
+
* message, lines } }`.
|
|
151
|
+
*
|
|
152
|
+
* Same severity-in-description convention as the slither parser
|
|
153
|
+
* (`[ERROR]`/`[WARNING]`/`[INFO]` prefix + `source: "semgrep"`); same
|
|
154
|
+
* defensive narrowing (malformed input → `[]`, never throws).
|
|
155
|
+
*/
|
|
156
|
+
export function parseSemgrepOutput(json) {
|
|
157
|
+
if (!json || typeof json !== "object" || Array.isArray(json))
|
|
158
|
+
return [];
|
|
159
|
+
const root = json;
|
|
160
|
+
const results = root.results;
|
|
161
|
+
if (!Array.isArray(results))
|
|
162
|
+
return [];
|
|
163
|
+
const findings = [];
|
|
164
|
+
for (const r of results) {
|
|
165
|
+
if (!r || typeof r !== "object")
|
|
166
|
+
continue;
|
|
167
|
+
const item = r;
|
|
168
|
+
const checkId = typeof item.check_id === "string" ? item.check_id : "unknown-rule";
|
|
169
|
+
const path = typeof item.path === "string" ? item.path : "unknown";
|
|
170
|
+
const start = item.start;
|
|
171
|
+
const line = start && typeof start === "object" && typeof start.line === "number"
|
|
172
|
+
? start.line
|
|
173
|
+
: 0;
|
|
174
|
+
const extra = item.extra && typeof item.extra === "object" ? item.extra : {};
|
|
175
|
+
const severity = typeof extra.severity === "string" ? extra.severity : "INFO";
|
|
176
|
+
const message = typeof extra.message === "string" ? extra.message.trim() : checkId;
|
|
177
|
+
const snippet = typeof extra.lines === "string" ? extra.lines : "";
|
|
178
|
+
findings.push({
|
|
179
|
+
description: `[${severity}] ${checkId}: ${message}`,
|
|
180
|
+
evidence: [{ path, line, snippet }],
|
|
181
|
+
source: "semgrep",
|
|
182
|
+
...(inferVulnClass(checkId) !== undefined ? { vulnClass: inferVulnClass(checkId) } : {}),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
return findings;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Parse `npm audit --json` output into SecurityFinding[].
|
|
189
|
+
*
|
|
190
|
+
* v7+ shape: `{ vulnerabilities: { <pkgName>: { name, severity, via: [...],
|
|
191
|
+
* range, nodes: [...], fixAvailable } }, metadata: {...} }`. `via` entries
|
|
192
|
+
* mix plain advisory-source strings and objects `{ title, url, severity }`
|
|
193
|
+
* in the same array — real npm output does this.
|
|
194
|
+
*
|
|
195
|
+
* v6 fallback shape: `{ advisories: { <id>: { module_name, severity, title,
|
|
196
|
+
* url } } }`. Both shapes are supported (whichever key is a well-formed
|
|
197
|
+
* object wins); neither present, or malformed -> [].
|
|
198
|
+
*
|
|
199
|
+
* All findings map to `vulnClass: "supply-chain"` (sc-7-2). Defensive
|
|
200
|
+
* narrowing at every level (Pattern A) — never throws.
|
|
201
|
+
*/
|
|
202
|
+
export function parseNpmAuditOutput(json) {
|
|
203
|
+
if (!json || typeof json !== "object" || Array.isArray(json))
|
|
204
|
+
return [];
|
|
205
|
+
const root = json;
|
|
206
|
+
const vulnerabilities = root.vulnerabilities;
|
|
207
|
+
if (vulnerabilities && typeof vulnerabilities === "object" && !Array.isArray(vulnerabilities)) {
|
|
208
|
+
const findings = [];
|
|
209
|
+
for (const [pkgName, raw] of Object.entries(vulnerabilities)) {
|
|
210
|
+
if (!raw || typeof raw !== "object")
|
|
211
|
+
continue;
|
|
212
|
+
const v = raw;
|
|
213
|
+
const name = typeof v.name === "string" ? v.name : pkgName;
|
|
214
|
+
const severity = typeof v.severity === "string" ? v.severity : "unknown";
|
|
215
|
+
const range = typeof v.range === "string" ? v.range : "";
|
|
216
|
+
const via = Array.isArray(v.via) ? v.via : [];
|
|
217
|
+
const titles = via
|
|
218
|
+
.map((entry) => {
|
|
219
|
+
if (typeof entry === "string")
|
|
220
|
+
return entry;
|
|
221
|
+
if (entry && typeof entry === "object" && typeof entry.title === "string") {
|
|
222
|
+
return entry.title;
|
|
223
|
+
}
|
|
224
|
+
return undefined;
|
|
225
|
+
})
|
|
226
|
+
.filter((t) => typeof t === "string");
|
|
227
|
+
const summary = titles.length > 0 ? titles.join("; ") : `vulnerable range ${range || "unknown"}`;
|
|
228
|
+
const nodes = Array.isArray(v.nodes)
|
|
229
|
+
? v.nodes.filter((n) => typeof n === "string")
|
|
230
|
+
: [];
|
|
231
|
+
const path = nodes[0] ?? "package.json";
|
|
232
|
+
findings.push({
|
|
233
|
+
description: `[${severity}] ${name}: ${summary}`,
|
|
234
|
+
evidence: [{ path, line: 0, snippet: range || name }],
|
|
235
|
+
source: "npm-audit",
|
|
236
|
+
vulnClass: "supply-chain",
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
return findings;
|
|
240
|
+
}
|
|
241
|
+
const advisories = root.advisories;
|
|
242
|
+
if (advisories && typeof advisories === "object" && !Array.isArray(advisories)) {
|
|
243
|
+
const findings = [];
|
|
244
|
+
for (const raw of Object.values(advisories)) {
|
|
245
|
+
if (!raw || typeof raw !== "object")
|
|
246
|
+
continue;
|
|
247
|
+
const a = raw;
|
|
248
|
+
const name = typeof a.module_name === "string" ? a.module_name : "unknown-package";
|
|
249
|
+
const severity = typeof a.severity === "string" ? a.severity : "unknown";
|
|
250
|
+
const title = typeof a.title === "string" ? a.title : "vulnerability";
|
|
251
|
+
findings.push({
|
|
252
|
+
description: `[${severity}] ${name}: ${title}`,
|
|
253
|
+
evidence: [{ path: "package.json", line: 0, snippet: name }],
|
|
254
|
+
source: "npm-audit",
|
|
255
|
+
vulnClass: "supply-chain",
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
return findings;
|
|
259
|
+
}
|
|
260
|
+
return [];
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Parse `osv-scanner --format json` output into SecurityFinding[].
|
|
264
|
+
*
|
|
265
|
+
* Real shape: `{ results: [ { source: { path, type }, packages: [ {
|
|
266
|
+
* package: { name, ecosystem, version }, vulnerabilities: [ { id, summary,
|
|
267
|
+
* severity } ] } ] } ] }`. Every finding maps to `vulnClass: "supply-chain"`
|
|
268
|
+
* (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
|
|
269
|
+
*/
|
|
270
|
+
export function parseOsvOutput(json) {
|
|
271
|
+
if (!json || typeof json !== "object" || Array.isArray(json))
|
|
272
|
+
return [];
|
|
273
|
+
const root = json;
|
|
274
|
+
const results = root.results;
|
|
275
|
+
if (!Array.isArray(results))
|
|
276
|
+
return [];
|
|
277
|
+
const findings = [];
|
|
278
|
+
for (const result of results) {
|
|
279
|
+
if (!result || typeof result !== "object")
|
|
280
|
+
continue;
|
|
281
|
+
const r = result;
|
|
282
|
+
const source = r.source && typeof r.source === "object" ? r.source : {};
|
|
283
|
+
const path = typeof source.path === "string" ? source.path : "unknown";
|
|
284
|
+
const packages = Array.isArray(r.packages) ? r.packages : [];
|
|
285
|
+
for (const pkg of packages) {
|
|
286
|
+
if (!pkg || typeof pkg !== "object")
|
|
287
|
+
continue;
|
|
288
|
+
const p = pkg;
|
|
289
|
+
const pkgInfo = p.package && typeof p.package === "object" ? p.package : {};
|
|
290
|
+
const pkgName = typeof pkgInfo.name === "string" ? pkgInfo.name : "unknown-package";
|
|
291
|
+
const vulns = Array.isArray(p.vulnerabilities) ? p.vulnerabilities : [];
|
|
292
|
+
for (const vuln of vulns) {
|
|
293
|
+
if (!vuln || typeof vuln !== "object")
|
|
294
|
+
continue;
|
|
295
|
+
const vv = vuln;
|
|
296
|
+
const id = typeof vv.id === "string" ? vv.id : "unknown-id";
|
|
297
|
+
const summary = typeof vv.summary === "string" ? vv.summary : "no summary";
|
|
298
|
+
findings.push({
|
|
299
|
+
description: `[${id}] ${pkgName}: ${summary}`,
|
|
300
|
+
evidence: [{ path, line: 0, snippet: pkgName }],
|
|
301
|
+
source: "osv-scanner",
|
|
302
|
+
vulnClass: "supply-chain",
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return findings;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Parse `gitleaks --report-format json` output into SecurityFinding[]. Its
|
|
311
|
+
* report is a TOP-LEVEL ARRAY (unlike npm-audit/osv-scanner's object root)
|
|
312
|
+
* of `{ Description, File, StartLine, EndLine, RuleID, Secret, Match,
|
|
313
|
+
* Commit }`.
|
|
314
|
+
*
|
|
315
|
+
* The raw `Secret` field is a live credential — it is NEVER echoed into a
|
|
316
|
+
* finding; `Match` (or a redacted placeholder) is used for the evidence
|
|
317
|
+
* snippet instead. Every finding maps to `vulnClass: "secret-handling"`
|
|
318
|
+
* (sc-7-2). Defensive narrowing at every level (Pattern A) — never throws.
|
|
319
|
+
*/
|
|
320
|
+
export function parseGitleaksOutput(json) {
|
|
321
|
+
if (!Array.isArray(json))
|
|
322
|
+
return [];
|
|
323
|
+
const findings = [];
|
|
324
|
+
for (const item of json) {
|
|
325
|
+
if (!item || typeof item !== "object")
|
|
326
|
+
continue;
|
|
327
|
+
const g = item;
|
|
328
|
+
const description = typeof g.Description === "string" ? g.Description : "Secret detected";
|
|
329
|
+
const ruleId = typeof g.RuleID === "string" ? g.RuleID : "unknown-rule";
|
|
330
|
+
const path = typeof g.File === "string" ? g.File : "unknown";
|
|
331
|
+
const line = typeof g.StartLine === "number" ? g.StartLine : 0;
|
|
332
|
+
// Never the raw `Secret` — `Match` is the closest thing to a redacted
|
|
333
|
+
// excerpt gitleaks provides; fall back to a placeholder if absent.
|
|
334
|
+
const snippet = typeof g.Match === "string" ? g.Match : "(redacted)";
|
|
335
|
+
findings.push({
|
|
336
|
+
description: `[${ruleId}] ${description}`,
|
|
337
|
+
evidence: [{ path, line, snippet }],
|
|
338
|
+
source: "gitleaks",
|
|
339
|
+
vulnClass: "secret-handling",
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
return findings;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Fallback for unrecognized scanners: a single finding carrying a bounded
|
|
346
|
+
* excerpt of the raw stdout, so an unmapped tool still contributes SOME
|
|
347
|
+
* ground truth to the auditor prompt instead of being silently dropped.
|
|
348
|
+
* Truncated to ~2000 chars (generatorNotes[2]) to keep the prompt bounded.
|
|
349
|
+
* Returns `[]` for blank output — no point manufacturing an empty finding.
|
|
350
|
+
*/
|
|
351
|
+
function rawTextFallback(name, output) {
|
|
352
|
+
const trimmed = output.trim();
|
|
353
|
+
if (!trimmed)
|
|
354
|
+
return [];
|
|
355
|
+
const excerpt = trimmed.length > 2000 ? `${trimmed.slice(0, 2000)}…` : trimmed;
|
|
356
|
+
return [
|
|
357
|
+
{
|
|
358
|
+
description: `Raw output from scanner "${name}" (no dedicated parser; showing excerpt)`,
|
|
359
|
+
evidence: [{ path: "unknown", line: 0, snippet: excerpt }],
|
|
360
|
+
source: name,
|
|
361
|
+
},
|
|
362
|
+
];
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Name/command-based parser selection (sc-5-4, widened sc-7-2): a
|
|
366
|
+
* "slither"/"semgrep"/"npm audit"/"npm-audit"/"osv-scanner"/"gitleaks"
|
|
367
|
+
* substring anywhere in the strategy's type/label/command selects the
|
|
368
|
+
* matching parser; anything else falls back to raw-text excerpting. The
|
|
369
|
+
* longer "osv-scanner" literal is checked before the bare "osv" substring
|
|
370
|
+
* so a command like `osv-scanner --format json` matches unambiguously.
|
|
371
|
+
*/
|
|
372
|
+
function detectScannerKind(scanner) {
|
|
373
|
+
const haystack = [scanner.type, scanner.label, scanner.command]
|
|
374
|
+
.filter((v) => typeof v === "string")
|
|
375
|
+
.join(" ")
|
|
376
|
+
.toLowerCase();
|
|
377
|
+
if (haystack.includes("slither"))
|
|
378
|
+
return "slither";
|
|
379
|
+
if (haystack.includes("semgrep"))
|
|
380
|
+
return "semgrep";
|
|
381
|
+
if (haystack.includes("npm audit") || haystack.includes("npm-audit"))
|
|
382
|
+
return "npm-audit";
|
|
383
|
+
if (haystack.includes("osv-scanner") || haystack.includes("osv"))
|
|
384
|
+
return "osv-scanner";
|
|
385
|
+
if (haystack.includes("gitleaks"))
|
|
386
|
+
return "gitleaks";
|
|
387
|
+
return "unknown";
|
|
388
|
+
}
|
|
389
|
+
function parseScannerStdout(kind, label, stdout) {
|
|
390
|
+
if (kind === "unknown")
|
|
391
|
+
return rawTextFallback(label, stdout);
|
|
392
|
+
let json;
|
|
393
|
+
try {
|
|
394
|
+
json = JSON.parse(stdout);
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
// A scanner with a recognized kind that didn't emit valid JSON (e.g.
|
|
398
|
+
// --json flag omitted, or a banner printed before the payload) degrades
|
|
399
|
+
// to the raw-text fallback rather than silently dropping its output.
|
|
400
|
+
return rawTextFallback(label, stdout);
|
|
401
|
+
}
|
|
402
|
+
switch (kind) {
|
|
403
|
+
case "slither":
|
|
404
|
+
return parseSlitherOutput(json);
|
|
405
|
+
case "npm-audit":
|
|
406
|
+
return parseNpmAuditOutput(json);
|
|
407
|
+
case "osv-scanner":
|
|
408
|
+
return parseOsvOutput(json);
|
|
409
|
+
case "gitleaks":
|
|
410
|
+
return parseGitleaksOutput(json);
|
|
411
|
+
case "semgrep":
|
|
412
|
+
default:
|
|
413
|
+
return parseSemgrepOutput(json);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Exit-code convention for a given scanner kind (G9). Most scanners (the
|
|
418
|
+
* default semgrep invocation, and unknown kinds) exit 0 on a clean run and
|
|
419
|
+
* nonzero on an internal error — nonzero legitimately means "discard, don't
|
|
420
|
+
* trust the output" (`'zero-clean'`). `npm-audit`/`osv-scanner`/`gitleaks`
|
|
421
|
+
* invert this: their OWN convention is to exit nonzero precisely WHEN they
|
|
422
|
+
* find something (vulnerabilities/secrets present), so a nonzero exit with
|
|
423
|
+
* valid stdout must still be parsed (`'nonzero-means-findings'`). semgrep
|
|
424
|
+
* has an optional `--error` flag with the same nonzero-on-findings
|
|
425
|
+
* convention, but it stays `'zero-clean'` by default here — flipping it
|
|
426
|
+
* would break the existing sc-5-2 isolation test, which asserts a nonzero
|
|
427
|
+
* semgrep exit yields no findings.
|
|
428
|
+
*/
|
|
429
|
+
function scannerExitPolicy(kind) {
|
|
430
|
+
return kind === "npm-audit" || kind === "osv-scanner" || kind === "gitleaks"
|
|
431
|
+
? "nonzero-means-findings"
|
|
432
|
+
: "zero-clean";
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Whether a configured scanner requires network access to run (hits a
|
|
436
|
+
* remote registry or vulnerability database). Used by the supply-chain axis
|
|
437
|
+
* (sprint 7, security-auditor-agent.ts) to gate network-capable scanner
|
|
438
|
+
* kinds behind `config.security.egress.onlineResearch` — `gitleaks` is a
|
|
439
|
+
* purely local secret scan and is NOT gated.
|
|
440
|
+
*/
|
|
441
|
+
export function isNetworkScanner(scanner) {
|
|
442
|
+
const kind = detectScannerKind(scanner);
|
|
443
|
+
return kind === "npm-audit" || kind === "osv-scanner";
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Run every configured scanner and return the combined SecurityFinding
|
|
447
|
+
* priors. `scanners: []` is a pure no-op — no runner is invoked and zero
|
|
448
|
+
* child processes are spawned (ADR-4, sc-5-4).
|
|
449
|
+
*
|
|
450
|
+
* Per-scanner isolation: each scanner is wrapped in its own try/catch and
|
|
451
|
+
* contributes `[]` on any failure (missing binary, nonzero exit, thrown
|
|
452
|
+
* error) without affecting the others (sc-5-2). The whole function NEVER
|
|
453
|
+
* rejects — even when the shared AbortSignal fires mid-scan, the killed
|
|
454
|
+
* scanner simply contributes `[]` while already-finished scanners' findings
|
|
455
|
+
* are preserved (sc-5-3).
|
|
456
|
+
*/
|
|
457
|
+
export async function runScannerPreFilter(input) {
|
|
458
|
+
const { scanners, projectRoot, signal, runner = defaultRunner } = input;
|
|
459
|
+
if (scanners.length === 0)
|
|
460
|
+
return [];
|
|
461
|
+
const perScanner = await Promise.all(scanners.map((scanner) => runOneScanner(scanner, projectRoot, signal, runner)));
|
|
462
|
+
return perScanner.flat();
|
|
463
|
+
}
|
|
464
|
+
async function runOneScanner(scanner, projectRoot, signal, runner) {
|
|
465
|
+
const label = scanner.label ?? scanner.type;
|
|
466
|
+
const command = scanner.command;
|
|
467
|
+
if (!command) {
|
|
468
|
+
logger.debug(`[security-scanners] scanner "${label}" has no command configured — skipping`);
|
|
469
|
+
return [];
|
|
470
|
+
}
|
|
471
|
+
const parts = command.split(/\s+/).filter(Boolean);
|
|
472
|
+
const cmd = parts[0];
|
|
473
|
+
const args = parts.slice(1);
|
|
474
|
+
const kind = detectScannerKind(scanner);
|
|
475
|
+
try {
|
|
476
|
+
const result = await runner(cmd, args, { cwd: projectRoot, signal });
|
|
477
|
+
// G9 fix: distinguish "the process could not even be spawned"
|
|
478
|
+
// (exitCode undefined -- ENOENT/spawn failure) from "the process ran
|
|
479
|
+
// and exited nonzero". Only the former is unconditionally discarded.
|
|
480
|
+
const spawnFailed = result.exitCode === undefined;
|
|
481
|
+
if (spawnFailed) {
|
|
482
|
+
logger.debug(`[security-scanners] scanner "${label}" failed to spawn — no findings contributed`);
|
|
483
|
+
return [];
|
|
484
|
+
}
|
|
485
|
+
// Scanners whose OWN convention treats nonzero as "findings present"
|
|
486
|
+
// (npm-audit/osv-scanner/gitleaks — scannerExitPolicy) still have their
|
|
487
|
+
// stdout parsed on a nonzero-but-defined exit code; everything else
|
|
488
|
+
// (including semgrep's default 0-clean convention) is discarded on any
|
|
489
|
+
// nonzero/failed exit, exactly as before.
|
|
490
|
+
if (scannerExitPolicy(kind) === "zero-clean" && (result.exitCode !== 0 || result.failed)) {
|
|
491
|
+
logger.debug(`[security-scanners] scanner "${label}" exited ${result.exitCode} (failed=${result.failed}) — no findings contributed`);
|
|
492
|
+
return [];
|
|
493
|
+
}
|
|
494
|
+
return parseScannerStdout(kind, label, result.stdout);
|
|
495
|
+
}
|
|
496
|
+
catch (err) {
|
|
497
|
+
logger.debug(`[security-scanners] scanner "${label}" threw: ${err instanceof Error ? err.message : String(err)} — no findings contributed`);
|
|
498
|
+
return [];
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
//# sourceMappingURL=security-scanners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-scanners.js","sourceRoot":"","sources":["../../src/orchestrator/security-scanners.ts"],"names":[],"mappings":"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"}
|