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,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runResearchJob — egress-gated online research job (schedulable entrypoint).
|
|
3
|
+
*
|
|
4
|
+
* When literature-retrieval is OFF: returns { disabled: true, notesWritten: 0, findingsWritten: 0 }
|
|
5
|
+
* IMMEDIATELY — NO retriever constructed, ZERO egress. This is the zero-egress proof (sc-5-2).
|
|
6
|
+
*
|
|
7
|
+
* When ON: retrieves MedlinePlus passages via LiteratureRetriever, grounds notes through
|
|
8
|
+
* synthesizeGrounded (fail-closed grounding critic), writes research notes and optional watch
|
|
9
|
+
* findings to the vault.
|
|
10
|
+
*
|
|
11
|
+
* PURE clock: `now` is injected — NEVER call Date.now()/new Date() here.
|
|
12
|
+
* NO network imports — ADR-6 restricts network to medline-source.ts only.
|
|
13
|
+
*
|
|
14
|
+
* Exported as the schedulable entrypoint for spec-20260628-research-scheduler.
|
|
15
|
+
* Signature: (projectRoot, config, {markers, now}, deps?) => Promise<ResearchSummary>
|
|
16
|
+
*/
|
|
17
|
+
import type { BoberConfig } from "../../config/schema.js";
|
|
18
|
+
import { type ClientFactory } from "../inference.js";
|
|
19
|
+
import { writeFinding } from "../analysis/finding-writer.js";
|
|
20
|
+
import type { LLMClient } from "../../providers/types.js";
|
|
21
|
+
import type { RetrievalOutcome } from "../retrieval/medline-source.js";
|
|
22
|
+
/** Summary returned by runResearchJob. */
|
|
23
|
+
export interface ResearchSummary {
|
|
24
|
+
notesWritten: number;
|
|
25
|
+
findingsWritten: number;
|
|
26
|
+
disabled: boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Injectable dependencies for runResearchJob.
|
|
30
|
+
* Production callers pass no deps — all defaults are wired from real modules.
|
|
31
|
+
* Tests inject fakes for: retriever (avoids MedlineSource), clientFactory (spy), writeFindingFn.
|
|
32
|
+
*/
|
|
33
|
+
export interface ResearchDeps {
|
|
34
|
+
/** Injectable retriever — defaults to a real LiteratureRetriever when axis is ON. */
|
|
35
|
+
retriever?: {
|
|
36
|
+
retrieve(query: string): Promise<RetrievalOutcome>;
|
|
37
|
+
};
|
|
38
|
+
/** Injectable LLMClient for synthesis — use clientFactory instead when testing sc-5-5. */
|
|
39
|
+
llmClient?: LLMClient;
|
|
40
|
+
/** Injectable client factory so tests can spy on which provider/endpoint is requested (sc-5-5). */
|
|
41
|
+
clientFactory?: ClientFactory;
|
|
42
|
+
/** Injectable finding writer so tests avoid real fs writes. Defaults to writeFinding. */
|
|
43
|
+
writeFindingFn?: typeof writeFinding;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Run the online research job for the given markers.
|
|
47
|
+
*
|
|
48
|
+
* Gating order (load-bearing — mirrors runImportLabs pattern at medical.ts:165-178):
|
|
49
|
+
* 1. Build EgressGuard.
|
|
50
|
+
* 2. axis OFF -> return {disabled:true, notesWritten:0, findingsWritten:0} BEFORE any construction.
|
|
51
|
+
* 3. Build synthesis client via buildMedicalInferenceClient (fail-closed local unless cloud-inference ON).
|
|
52
|
+
* 4. Resolve vault dir.
|
|
53
|
+
* 5. For each marker: retrieve -> synthesizeGrounded -> abstained? skip : write note + finding.
|
|
54
|
+
* 6. Return { disabled: false, notesWritten, findingsWritten }.
|
|
55
|
+
*
|
|
56
|
+
* @param projectRoot Absolute project root path
|
|
57
|
+
* @param config Loaded BoberConfig
|
|
58
|
+
* @param opts { markers: string[]; now: string } — clock injected NEVER read here
|
|
59
|
+
* @param deps Optional injectable dependencies (tests only)
|
|
60
|
+
*/
|
|
61
|
+
export declare function runResearchJob(projectRoot: string, config: BoberConfig, opts: {
|
|
62
|
+
markers: string[];
|
|
63
|
+
now: string;
|
|
64
|
+
}, deps?: ResearchDeps): Promise<ResearchSummary>;
|
|
65
|
+
//# sourceMappingURL=online-research.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"online-research.d.ts","sourceRoot":"","sources":["../../../src/medical/research/online-research.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAI7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAKvE,0CAA0C;AAC1C,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,qFAAqF;IACrF,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;KACpD,CAAC;IACF,0FAA0F;IAC1F,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,mGAAmG;IACnG,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,yFAAyF;IACzF,cAAc,CAAC,EAAE,OAAO,YAAY,CAAC;CACtC;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACxC,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,eAAe,CAAC,CAqE1B"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* runResearchJob — egress-gated online research job (schedulable entrypoint).
|
|
3
|
+
*
|
|
4
|
+
* When literature-retrieval is OFF: returns { disabled: true, notesWritten: 0, findingsWritten: 0 }
|
|
5
|
+
* IMMEDIATELY — NO retriever constructed, ZERO egress. This is the zero-egress proof (sc-5-2).
|
|
6
|
+
*
|
|
7
|
+
* When ON: retrieves MedlinePlus passages via LiteratureRetriever, grounds notes through
|
|
8
|
+
* synthesizeGrounded (fail-closed grounding critic), writes research notes and optional watch
|
|
9
|
+
* findings to the vault.
|
|
10
|
+
*
|
|
11
|
+
* PURE clock: `now` is injected — NEVER call Date.now()/new Date() here.
|
|
12
|
+
* NO network imports — ADR-6 restricts network to medline-source.ts only.
|
|
13
|
+
*
|
|
14
|
+
* Exported as the schedulable entrypoint for spec-20260628-research-scheduler.
|
|
15
|
+
* Signature: (projectRoot, config, {markers, now}, deps?) => Promise<ResearchSummary>
|
|
16
|
+
*/
|
|
17
|
+
import { writeFile } from "node:fs/promises";
|
|
18
|
+
import { join, dirname } from "node:path";
|
|
19
|
+
import { EgressGuard } from "../egress.js";
|
|
20
|
+
import { LiteratureRetriever } from "../retrieval/literature.js";
|
|
21
|
+
import { synthesizeGrounded } from "../retrieval/literature.js";
|
|
22
|
+
import { buildMedicalInferenceClient } from "../inference.js";
|
|
23
|
+
import { DisclaimerComposer } from "../disclaimer.js";
|
|
24
|
+
import { writeFinding } from "../analysis/finding-writer.js";
|
|
25
|
+
import { findingId } from "../analysis/finding.js";
|
|
26
|
+
import { ensureDir } from "../../utils/fs.js";
|
|
27
|
+
import { serializeResearchNote, researchNotePath } from "./research-note.js";
|
|
28
|
+
// ── runResearchJob ─────────────────────────────────────────────────────
|
|
29
|
+
/**
|
|
30
|
+
* Run the online research job for the given markers.
|
|
31
|
+
*
|
|
32
|
+
* Gating order (load-bearing — mirrors runImportLabs pattern at medical.ts:165-178):
|
|
33
|
+
* 1. Build EgressGuard.
|
|
34
|
+
* 2. axis OFF -> return {disabled:true, notesWritten:0, findingsWritten:0} BEFORE any construction.
|
|
35
|
+
* 3. Build synthesis client via buildMedicalInferenceClient (fail-closed local unless cloud-inference ON).
|
|
36
|
+
* 4. Resolve vault dir.
|
|
37
|
+
* 5. For each marker: retrieve -> synthesizeGrounded -> abstained? skip : write note + finding.
|
|
38
|
+
* 6. Return { disabled: false, notesWritten, findingsWritten }.
|
|
39
|
+
*
|
|
40
|
+
* @param projectRoot Absolute project root path
|
|
41
|
+
* @param config Loaded BoberConfig
|
|
42
|
+
* @param opts { markers: string[]; now: string } — clock injected NEVER read here
|
|
43
|
+
* @param deps Optional injectable dependencies (tests only)
|
|
44
|
+
*/
|
|
45
|
+
export async function runResearchJob(projectRoot, config, opts, deps = {}) {
|
|
46
|
+
// ── 1. Egress guard ─────────────────────────────────────────────────
|
|
47
|
+
const egress = EgressGuard.fromConfig(config);
|
|
48
|
+
// ── 2. Zero-egress short-circuit (sc-5-2) ────────────────────────────
|
|
49
|
+
// Return BEFORE constructing any LiteratureRetriever / MedlineSource (zero-egress proof).
|
|
50
|
+
if (!egress.isAllowed("literature-retrieval")) {
|
|
51
|
+
return { disabled: true, notesWritten: 0, findingsWritten: 0 };
|
|
52
|
+
}
|
|
53
|
+
// ── 3. Synthesis client (fail-closed local unless cloud-inference ON) (sc-5-5) ─
|
|
54
|
+
const { client, model } = buildMedicalInferenceClient(config, egress, deps.clientFactory);
|
|
55
|
+
const llm = deps.llmClient ?? client;
|
|
56
|
+
// ── 4. Vault dir resolution (mirrors review-pass.ts:78-79) ─────────
|
|
57
|
+
const vaultDir = config.medical?.vaultDir ?? join(projectRoot, ".bober", "medical", "vault");
|
|
58
|
+
// ── 5. Retriever (constructed ONLY here — axis-on branch) ───────────
|
|
59
|
+
// Injecting deps.retriever keeps tests free of real MedlineSource construction.
|
|
60
|
+
const retriever = deps.retriever ?? new LiteratureRetriever(egress);
|
|
61
|
+
const footer = new DisclaimerComposer().footer();
|
|
62
|
+
const writeFindingFn = deps.writeFindingFn ?? writeFinding;
|
|
63
|
+
let notesWritten = 0;
|
|
64
|
+
let findingsWritten = 0;
|
|
65
|
+
// ── 6. Per-marker retrieval + grounded synthesis ─────────────────────
|
|
66
|
+
for (const marker of opts.markers) {
|
|
67
|
+
const query = `Latest evidence on ${marker}`;
|
|
68
|
+
// Retrieve passages from MedlinePlus
|
|
69
|
+
const outcome = await retriever.retrieve(query);
|
|
70
|
+
// Grounded synthesis with fail-closed critic gate
|
|
71
|
+
const result = await synthesizeGrounded(query, outcome, llm, footer, model);
|
|
72
|
+
// sc-5-4: if critic rejected / abstained -> write NO clinical note for this topic
|
|
73
|
+
if (result.answer.abstained) {
|
|
74
|
+
// Count as abstained — do not persist uncited synthesis
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Non-abstained: write research note under <vault>/research/<date>-<marker>.md
|
|
78
|
+
const notePath = researchNotePath(vaultDir, marker, opts.now);
|
|
79
|
+
const noteContent = serializeResearchNote(marker, result.answer, opts.now);
|
|
80
|
+
await ensureDir(dirname(notePath));
|
|
81
|
+
await writeFile(notePath, noteContent, "utf-8");
|
|
82
|
+
notesWritten++;
|
|
83
|
+
// Optional watch finding (Pattern G)
|
|
84
|
+
const finding = {
|
|
85
|
+
id: findingId("medical", marker, "new-evidence"),
|
|
86
|
+
domain: "medical",
|
|
87
|
+
title: `New evidence on ${marker}`,
|
|
88
|
+
kind: "watch",
|
|
89
|
+
urgency: 2,
|
|
90
|
+
severity: 2,
|
|
91
|
+
evidence: result.answer.citations.map((c) => c.url),
|
|
92
|
+
surfacedAt: opts.now, // injected — never wall-clock
|
|
93
|
+
tags: ["research", marker],
|
|
94
|
+
status: "open",
|
|
95
|
+
};
|
|
96
|
+
await writeFindingFn(vaultDir, finding);
|
|
97
|
+
findingsWritten++;
|
|
98
|
+
}
|
|
99
|
+
return { disabled: false, notesWritten, findingsWritten };
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=online-research.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"online-research.js","sourceRoot":"","sources":["../../../src/medical/research/online-research.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research note serializer — PURE citation-frontmatter markdown note for MedlinePlus findings.
|
|
3
|
+
*
|
|
4
|
+
* PURE / NO network / NO LLM / NO Date.now()
|
|
5
|
+
* All timestamps are injected parameters; the wall clock is read ONLY at the CLI boundary.
|
|
6
|
+
*
|
|
7
|
+
* Produces a vault research note with flattened citation frontmatter (title/url/source
|
|
8
|
+
* as parallel arrays) so serializeFrontmatter (scalar/array-of-scalar only) renders correctly.
|
|
9
|
+
* See: Pattern E / briefing §2 (the nested-object pitfall with Citation[]).
|
|
10
|
+
*/
|
|
11
|
+
import type { MedicalAnswer } from "../types.js";
|
|
12
|
+
/**
|
|
13
|
+
* Derive the canonical path for a research note under the vault.
|
|
14
|
+
* Output: <vaultDir>/research/<YYYY-MM-DD>-<marker>.md
|
|
15
|
+
* Date is sliced from the injected ISO string — never wall-clock.
|
|
16
|
+
*/
|
|
17
|
+
export declare function researchNotePath(vaultDir: string, marker: string, now: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Serialize a grounded MedicalAnswer into a vault research note string.
|
|
20
|
+
*
|
|
21
|
+
* Frontmatter:
|
|
22
|
+
* title, domain, type, marker, source (scalar "medlineplus"),
|
|
23
|
+
* citationTitles[] (strings), citationUrls[] (strings), surfacedAt, status.
|
|
24
|
+
*
|
|
25
|
+
* PITFALL: Citation is an object {title, url, source}. Passing citations straight into
|
|
26
|
+
* serializeFrontmatter would render " - [object Object]". This function FLATTENS them
|
|
27
|
+
* into parallel arrays-of-strings (citationTitles, citationUrls) + a scalar `source`.
|
|
28
|
+
*
|
|
29
|
+
* Body: answer.body + disclaimerFooter.
|
|
30
|
+
*/
|
|
31
|
+
export declare function serializeResearchNote(marker: string, answer: MedicalAnswer, now: string): string;
|
|
32
|
+
//# sourceMappingURL=research-note.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-note.d.ts","sourceRoot":"","sources":["../../../src/medical/research/research-note.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtF;AAID;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAoBhG"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Research note serializer — PURE citation-frontmatter markdown note for MedlinePlus findings.
|
|
3
|
+
*
|
|
4
|
+
* PURE / NO network / NO LLM / NO Date.now()
|
|
5
|
+
* All timestamps are injected parameters; the wall clock is read ONLY at the CLI boundary.
|
|
6
|
+
*
|
|
7
|
+
* Produces a vault research note with flattened citation frontmatter (title/url/source
|
|
8
|
+
* as parallel arrays) so serializeFrontmatter (scalar/array-of-scalar only) renders correctly.
|
|
9
|
+
* See: Pattern E / briefing §2 (the nested-object pitfall with Citation[]).
|
|
10
|
+
*/
|
|
11
|
+
import { serializeFrontmatter } from "../../vault/frontmatter.js";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
// ── Path helper ──────────────────────────────────────────────────────
|
|
14
|
+
/**
|
|
15
|
+
* Derive the canonical path for a research note under the vault.
|
|
16
|
+
* Output: <vaultDir>/research/<YYYY-MM-DD>-<marker>.md
|
|
17
|
+
* Date is sliced from the injected ISO string — never wall-clock.
|
|
18
|
+
*/
|
|
19
|
+
export function researchNotePath(vaultDir, marker, now) {
|
|
20
|
+
const date = now.slice(0, 10); // YYYY-MM-DD
|
|
21
|
+
return join(vaultDir, "research", `${date}-${marker}.md`);
|
|
22
|
+
}
|
|
23
|
+
// ── Serializer ───────────────────────────────────────────────────────
|
|
24
|
+
/**
|
|
25
|
+
* Serialize a grounded MedicalAnswer into a vault research note string.
|
|
26
|
+
*
|
|
27
|
+
* Frontmatter:
|
|
28
|
+
* title, domain, type, marker, source (scalar "medlineplus"),
|
|
29
|
+
* citationTitles[] (strings), citationUrls[] (strings), surfacedAt, status.
|
|
30
|
+
*
|
|
31
|
+
* PITFALL: Citation is an object {title, url, source}. Passing citations straight into
|
|
32
|
+
* serializeFrontmatter would render " - [object Object]". This function FLATTENS them
|
|
33
|
+
* into parallel arrays-of-strings (citationTitles, citationUrls) + a scalar `source`.
|
|
34
|
+
*
|
|
35
|
+
* Body: answer.body + disclaimerFooter.
|
|
36
|
+
*/
|
|
37
|
+
export function serializeResearchNote(marker, answer, now) {
|
|
38
|
+
// Flatten Citation[] into scalar/array-of-string fields (Pattern E)
|
|
39
|
+
const citationTitles = answer.citations.map((c) => c.title);
|
|
40
|
+
const citationUrls = answer.citations.map((c) => c.url);
|
|
41
|
+
const frontmatter = {
|
|
42
|
+
title: `Latest evidence — ${marker}`,
|
|
43
|
+
domain: "medical",
|
|
44
|
+
type: "research",
|
|
45
|
+
marker,
|
|
46
|
+
source: "medlineplus", // scalar — satisfies sc-5-3 "source 'medlineplus'"
|
|
47
|
+
citationTitles, // array of strings — serializeFrontmatter safe
|
|
48
|
+
citationUrls, // array of strings — serializeFrontmatter safe
|
|
49
|
+
surfacedAt: now, // injected ISO string — never wall-clock
|
|
50
|
+
status: "open",
|
|
51
|
+
};
|
|
52
|
+
const body = `\n## Latest evidence on ${marker}\n\n${answer.body}\n\n${answer.disclaimerFooter}\n`;
|
|
53
|
+
return serializeFrontmatter(frontmatter, body);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=research-note.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-note.js","sourceRoot":"","sources":["../../../src/medical/research/research-note.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,wEAAwE;AAExE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB,EAAE,MAAc,EAAE,GAAW;IAC5E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;IAC5C,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,IAAI,MAAM,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,wEAAwE;AAExE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc,EAAE,MAAqB,EAAE,GAAW;IACtF,oEAAoE;IACpE,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAExD,MAAM,WAAW,GAA4B;QAC3C,KAAK,EAAE,qBAAqB,MAAM,EAAE;QACpC,MAAM,EAAE,SAAS;QACjB,IAAI,EAAE,UAAU;QAChB,MAAM;QACN,MAAM,EAAE,aAAa,EAAE,mDAAmD;QAC1E,cAAc,EAAE,+CAA+C;QAC/D,YAAY,EAAE,+CAA+C;QAC7D,UAAU,EAAE,GAAG,EAAE,yCAAyC;QAC1D,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,MAAM,IAAI,GAAG,2BAA2B,MAAM,OAAO,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,gBAAgB,IAAI,CAAC;IAEnG,OAAO,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supplements list -> FactStore. PURE deterministic reconcile.
|
|
3
|
+
* NO LLM, NO network, NO Date.now() — `now` is injected.
|
|
4
|
+
* Hand-rolled frontmatter parse mirrors lab-note.ts:120-148.
|
|
5
|
+
* NEVER import src/vault.
|
|
6
|
+
*/
|
|
7
|
+
import { FactStore } from "../state/facts.js";
|
|
8
|
+
/** A single supplement entry parsed from the markdown-frontmatter list. */
|
|
9
|
+
export interface SupplementEntry {
|
|
10
|
+
name: string;
|
|
11
|
+
dose: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
/** Placeholder value when --dose is omitted (FactSchema requires value.min(1)). */
|
|
14
|
+
export declare const DEFAULT_DOSE = "unspecified";
|
|
15
|
+
/**
|
|
16
|
+
* Parse a supplements markdown-frontmatter file into a list of entries.
|
|
17
|
+
*
|
|
18
|
+
* Expected format:
|
|
19
|
+
* ```
|
|
20
|
+
* ---
|
|
21
|
+
* supplements:
|
|
22
|
+
* - Vitamin D | 1000 IU
|
|
23
|
+
* - Magnesium | 200 mg
|
|
24
|
+
* ---
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* Replicates the hand-rolled fence-find loop from lab-note.ts:121-136.
|
|
28
|
+
* NEVER imports src/vault/frontmatter.ts (lab-note.ts:9-12 precedent).
|
|
29
|
+
* NEVER imports parseLabNote — it returns the lab flat-scalar shape and is list-unaware.
|
|
30
|
+
*/
|
|
31
|
+
export declare function parseSupplementsFile(raw: string): SupplementEntry[];
|
|
32
|
+
/**
|
|
33
|
+
* Build a FactInput from a supplement name + optional dose.
|
|
34
|
+
*
|
|
35
|
+
* scope = "medical", subject = supplement name, predicate = "dose", value = dose ?? DEFAULT_DOSE.
|
|
36
|
+
* `now` is injected (never reads the clock).
|
|
37
|
+
*
|
|
38
|
+
* bober: predicate "dose" makes each supplement its own subject row in FactStore;
|
|
39
|
+
* contrast with medications which use subject "patient", predicate "takes-medication".
|
|
40
|
+
*/
|
|
41
|
+
export declare function supplementToFact(name: string, dose: string | undefined, now: string): {
|
|
42
|
+
scope: string;
|
|
43
|
+
subject: string;
|
|
44
|
+
predicate: string;
|
|
45
|
+
value: string;
|
|
46
|
+
confidence: number;
|
|
47
|
+
sourceRunId: null;
|
|
48
|
+
tValid: string;
|
|
49
|
+
tCreated: string;
|
|
50
|
+
};
|
|
51
|
+
/** Injectable dependencies for runSupplementAdd — production callers pass undefined. */
|
|
52
|
+
export interface SupplementAddDeps {
|
|
53
|
+
/** Override the FactStore (e.g. in-memory store in tests). */
|
|
54
|
+
store?: FactStore;
|
|
55
|
+
/** Override the current time ISO string (default: new Date().toISOString()). */
|
|
56
|
+
now?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Core logic for `bober medical supplements add <name> [--dose <d>]`.
|
|
60
|
+
*
|
|
61
|
+
* Reconciles one supplement into FactStore (scope "medical") via writeFact.
|
|
62
|
+
* NO judge — deterministic ADD/UPDATE/NOOP path only.
|
|
63
|
+
* `now` is stamped at this boundary; the pure reconcile path never reads the clock.
|
|
64
|
+
*
|
|
65
|
+
* .action() MUST NOT throw — errors are caught, process.exitCode is set to 1, and the
|
|
66
|
+
* function returns. Pattern mirrors runImportLabs in medical.ts:203-212.
|
|
67
|
+
*/
|
|
68
|
+
export declare function runSupplementAdd(projectRoot: string, name: string, opts: {
|
|
69
|
+
dose?: string;
|
|
70
|
+
}, deps?: SupplementAddDeps): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Core logic for `bober medical supplements list [--file <path>]`.
|
|
73
|
+
*
|
|
74
|
+
* Reads the supplements markdown-frontmatter file and prints each entry to stdout.
|
|
75
|
+
* Default file path: <projectRoot>/.bober/medical/supplements.md
|
|
76
|
+
*
|
|
77
|
+
* .action() MUST NOT throw — errors are caught and process.exitCode is set to 1.
|
|
78
|
+
*/
|
|
79
|
+
export declare function runSupplementList(projectRoot: string, opts: {
|
|
80
|
+
file?: string;
|
|
81
|
+
}): Promise<void>;
|
|
82
|
+
//# sourceMappingURL=supplements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplements.d.ts","sourceRoot":"","sources":["../../src/medical/supplements.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,SAAS,EAA0C,MAAM,mBAAmB,CAAC;AAItF,2EAA2E;AAC3E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B;AAED,mFAAmF;AACnF,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAI1C;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,EAAE,CAmDnE;AAID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,GAAG,EAAE,MAAM;;;;;;;;;EAYZ;AAID,wFAAwF;AACxF,MAAM,WAAW,iBAAiB;IAChC,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gFAAgF;IAChF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAID;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACvB,IAAI,GAAE,iBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CAqBf"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supplements list -> FactStore. PURE deterministic reconcile.
|
|
3
|
+
* NO LLM, NO network, NO Date.now() — `now` is injected.
|
|
4
|
+
* Hand-rolled frontmatter parse mirrors lab-note.ts:120-148.
|
|
5
|
+
* NEVER import src/vault.
|
|
6
|
+
*/
|
|
7
|
+
import { readFile } from "node:fs/promises";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { FactStore, writeFact, factsDbPath, ensureFactsDir } from "../state/facts.js";
|
|
10
|
+
/** Placeholder value when --dose is omitted (FactSchema requires value.min(1)). */
|
|
11
|
+
export const DEFAULT_DOSE = "unspecified";
|
|
12
|
+
// -- Pure parser ---------------------------------------------------------
|
|
13
|
+
/**
|
|
14
|
+
* Parse a supplements markdown-frontmatter file into a list of entries.
|
|
15
|
+
*
|
|
16
|
+
* Expected format:
|
|
17
|
+
* ```
|
|
18
|
+
* ---
|
|
19
|
+
* supplements:
|
|
20
|
+
* - Vitamin D | 1000 IU
|
|
21
|
+
* - Magnesium | 200 mg
|
|
22
|
+
* ---
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* Replicates the hand-rolled fence-find loop from lab-note.ts:121-136.
|
|
26
|
+
* NEVER imports src/vault/frontmatter.ts (lab-note.ts:9-12 precedent).
|
|
27
|
+
* NEVER imports parseLabNote — it returns the lab flat-scalar shape and is list-unaware.
|
|
28
|
+
*/
|
|
29
|
+
export function parseSupplementsFile(raw) {
|
|
30
|
+
const lines = raw.split("\n");
|
|
31
|
+
if (lines[0]?.trim() !== "---") {
|
|
32
|
+
throw new Error("parseSupplementsFile: missing opening '---' fence");
|
|
33
|
+
}
|
|
34
|
+
let closingIdx = -1;
|
|
35
|
+
for (let i = 1; i < lines.length; i++) {
|
|
36
|
+
if (lines[i]?.trim() === "---") {
|
|
37
|
+
closingIdx = i;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (closingIdx === -1) {
|
|
42
|
+
throw new Error("parseSupplementsFile: missing closing '---' fence");
|
|
43
|
+
}
|
|
44
|
+
const yamlLines = lines.slice(1, closingIdx);
|
|
45
|
+
const entries = [];
|
|
46
|
+
let inSupplements = false;
|
|
47
|
+
for (const line of yamlLines) {
|
|
48
|
+
if (line.trim() === "supplements:") {
|
|
49
|
+
inSupplements = true;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (!inSupplements)
|
|
53
|
+
continue;
|
|
54
|
+
// Detect list items: lines starting with optional whitespace, then `- `
|
|
55
|
+
const listMatch = /^\s+-\s+(.+)$/.exec(line);
|
|
56
|
+
if (listMatch === null) {
|
|
57
|
+
// Non-indented non-empty line signals the end of the supplements list
|
|
58
|
+
if (line.trim().length > 0 && !/^\s/.test(line)) {
|
|
59
|
+
inSupplements = false;
|
|
60
|
+
}
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const itemText = (listMatch[1] ?? "").trim();
|
|
64
|
+
const pipeIdx = itemText.indexOf("|");
|
|
65
|
+
if (pipeIdx >= 0) {
|
|
66
|
+
const name = itemText.slice(0, pipeIdx).trim();
|
|
67
|
+
const dose = itemText.slice(pipeIdx + 1).trim() || undefined;
|
|
68
|
+
if (name.length > 0)
|
|
69
|
+
entries.push({ name, dose });
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (itemText.length > 0)
|
|
73
|
+
entries.push({ name: itemText, dose: undefined });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return entries;
|
|
77
|
+
}
|
|
78
|
+
// -- FactInput builder ---------------------------------------------------
|
|
79
|
+
/**
|
|
80
|
+
* Build a FactInput from a supplement name + optional dose.
|
|
81
|
+
*
|
|
82
|
+
* scope = "medical", subject = supplement name, predicate = "dose", value = dose ?? DEFAULT_DOSE.
|
|
83
|
+
* `now` is injected (never reads the clock).
|
|
84
|
+
*
|
|
85
|
+
* bober: predicate "dose" makes each supplement its own subject row in FactStore;
|
|
86
|
+
* contrast with medications which use subject "patient", predicate "takes-medication".
|
|
87
|
+
*/
|
|
88
|
+
export function supplementToFact(name, dose, now) {
|
|
89
|
+
return {
|
|
90
|
+
scope: "medical",
|
|
91
|
+
subject: name,
|
|
92
|
+
predicate: "dose",
|
|
93
|
+
value: dose ?? DEFAULT_DOSE,
|
|
94
|
+
confidence: 1,
|
|
95
|
+
sourceRunId: null,
|
|
96
|
+
tValid: now,
|
|
97
|
+
tCreated: now,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// -- Cores ---------------------------------------------------------------
|
|
101
|
+
/**
|
|
102
|
+
* Core logic for `bober medical supplements add <name> [--dose <d>]`.
|
|
103
|
+
*
|
|
104
|
+
* Reconciles one supplement into FactStore (scope "medical") via writeFact.
|
|
105
|
+
* NO judge — deterministic ADD/UPDATE/NOOP path only.
|
|
106
|
+
* `now` is stamped at this boundary; the pure reconcile path never reads the clock.
|
|
107
|
+
*
|
|
108
|
+
* .action() MUST NOT throw — errors are caught, process.exitCode is set to 1, and the
|
|
109
|
+
* function returns. Pattern mirrors runImportLabs in medical.ts:203-212.
|
|
110
|
+
*/
|
|
111
|
+
export async function runSupplementAdd(projectRoot, name, opts, deps = {}) {
|
|
112
|
+
// Stamp wall-clock ONCE at the CLI boundary (injected `now` used in tests).
|
|
113
|
+
const now = deps.now ?? new Date().toISOString();
|
|
114
|
+
// Track the store we own so we can close it in finally without closing injected stores.
|
|
115
|
+
let ownedStore;
|
|
116
|
+
try {
|
|
117
|
+
let store;
|
|
118
|
+
if (deps.store !== undefined) {
|
|
119
|
+
store = deps.store;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
await ensureFactsDir(projectRoot, "medical");
|
|
123
|
+
ownedStore = new FactStore(factsDbPath(projectRoot, "medical"));
|
|
124
|
+
store = ownedStore;
|
|
125
|
+
}
|
|
126
|
+
const input = supplementToFact(name, opts.dose, now);
|
|
127
|
+
const action = await writeFact(store, input, { now });
|
|
128
|
+
if (action === "add") {
|
|
129
|
+
process.stdout.write(`Added supplement: ${name} (${opts.dose ?? DEFAULT_DOSE})\n`);
|
|
130
|
+
}
|
|
131
|
+
else if (action === "update") {
|
|
132
|
+
process.stdout.write(`Updated supplement: ${name} -> ${opts.dose ?? DEFAULT_DOSE}\n`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// "noop" (or "delete", which only occurs with a judge — never here)
|
|
136
|
+
process.stdout.write(`Supplement unchanged: ${name}\n`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
process.stderr.write(`Failed to add supplement: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
141
|
+
process.exitCode = 1;
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
ownedStore?.close();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Core logic for `bober medical supplements list [--file <path>]`.
|
|
149
|
+
*
|
|
150
|
+
* Reads the supplements markdown-frontmatter file and prints each entry to stdout.
|
|
151
|
+
* Default file path: <projectRoot>/.bober/medical/supplements.md
|
|
152
|
+
*
|
|
153
|
+
* .action() MUST NOT throw — errors are caught and process.exitCode is set to 1.
|
|
154
|
+
*/
|
|
155
|
+
export async function runSupplementList(projectRoot, opts) {
|
|
156
|
+
try {
|
|
157
|
+
const filePath = opts.file ?? join(projectRoot, ".bober", "medical", "supplements.md");
|
|
158
|
+
const raw = await readFile(filePath, "utf-8");
|
|
159
|
+
const entries = parseSupplementsFile(raw);
|
|
160
|
+
if (entries.length === 0) {
|
|
161
|
+
process.stdout.write("No supplements found.\n");
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
for (const entry of entries) {
|
|
165
|
+
process.stdout.write(`${entry.name}: ${entry.dose ?? DEFAULT_DOSE}\n`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
process.stderr.write(`Failed to list supplements: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
170
|
+
process.exitCode = 1;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=supplements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supplements.js","sourceRoot":"","sources":["../../src/medical/supplements.ts"],"names":[],"mappings":"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"}
|