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 @@
|
|
|
1
|
+
{"version":3,"file":"local-export.js","sourceRoot":"","sources":["../../../src/seo/sources/local-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentionCitationExtractor — deterministic host/brand matcher over a
|
|
3
|
+
* grounded-search answer (in-house-ai-visibility, Sprint 2;
|
|
4
|
+
* arch-20260717-in-house-oss-ai-visibility-architecture.md:148-159,240-245),
|
|
5
|
+
* with an OPTIONAL injected LLM-as-judge fuzzy-mention path added in
|
|
6
|
+
* Sprint 8.
|
|
7
|
+
*
|
|
8
|
+
* PURE, synchronous, network-free transform: given `{target, answerText,
|
|
9
|
+
* citations}` it decides `{mentioned, rank?, citationPresent, sourceUrls}`
|
|
10
|
+
* by string/host matching alone — no `CitationVerifier` call (Sprint 4,
|
|
11
|
+
* a nonGoal here — `sourceUrls` here are candidate URLs, not verified
|
|
12
|
+
* ones).
|
|
13
|
+
*
|
|
14
|
+
* Matching strategy (deterministic only, per the architecture):
|
|
15
|
+
* 1. Normalize `target` to a bare host (strip scheme, `www.`) via the
|
|
16
|
+
* local `safeHost` guard — mirrors `safeOrigin`
|
|
17
|
+
* (`damcrawler-crawl-engine.ts:122-129`) and the "no shared URL/host
|
|
18
|
+
* util exists in `src`" note (`citation-gate.ts:30-32`).
|
|
19
|
+
* 2. `mentioned` = the target's brand token (the host's first label) OR
|
|
20
|
+
* its full bare host appears, case-insensitive and on a word
|
|
21
|
+
* boundary, in `answerText` OR in any citation's `title`. Word-
|
|
22
|
+
* boundary matching (not naive `includes`) avoids substring false
|
|
23
|
+
* positives (e.g. brand "ace" must not match inside "space").
|
|
24
|
+
* 3. `sourceUrls` = citation URLs whose host equals the target host (or
|
|
25
|
+
* is a subdomain of it) — candidate URLs only, never verified.
|
|
26
|
+
* 4. `citationPresent` = `sourceUrls.length > 0`.
|
|
27
|
+
* 5. `rank` is never derivable deterministically this sprint, so the key
|
|
28
|
+
* is always omitted (never `rank: undefined`) — sc-2-1 does not
|
|
29
|
+
* require it.
|
|
30
|
+
*
|
|
31
|
+
* Empty/whitespace/malformed input (empty `target`, empty/whitespace
|
|
32
|
+
* `answerText`, empty `citations`) always yields
|
|
33
|
+
* `{ mentioned: false, citationPresent: false, sourceUrls: [] }` — this
|
|
34
|
+
* class NEVER fabricates a positive observation (sc-2-1, stopConditions).
|
|
35
|
+
*
|
|
36
|
+
* Sprint 8 — LLM-as-judge fuzzy-mention path (`LlmJudgeMentionCitationExtractor`):
|
|
37
|
+
* an OPTIONAL, injected-`llm` extractor that COMPOSES the deterministic one.
|
|
38
|
+
* It runs the deterministic pass first; only when that pass left
|
|
39
|
+
* `mentioned:false` (cost control, evaluatorNotes) does it sanitize the
|
|
40
|
+
* answer text and ask a bounded, schema-parsed LLM judge whether the
|
|
41
|
+
* answer fuzzily/paraphrasedly mentions the target. The judge FAILS SAFE
|
|
42
|
+
* to the deterministic result on any transport error or unparseable
|
|
43
|
+
* verdict — it never fabricates `mentioned:true` (sc-8-3). Production
|
|
44
|
+
* wiring (`ai-visibility-provider.ts`, `runner.ts`) still constructs the
|
|
45
|
+
* plain `DeterministicMentionCitationExtractor` with no `llm`, so the
|
|
46
|
+
* deterministic-only path remains byte-identical and this class is opt-in
|
|
47
|
+
* (sc-8-2, nonGoals: judge is NOT the default).
|
|
48
|
+
*/
|
|
49
|
+
import { z } from "zod";
|
|
50
|
+
import type { GroundedCitation } from "../../providers/grounded-search.js";
|
|
51
|
+
import type { LLMClient } from "../../providers/types.js";
|
|
52
|
+
import type { ContentSanitizer } from "../content-sanitizer.js";
|
|
53
|
+
/** Locked output shape — MUST match the architecture data model exactly (feeds `AiVisibilityRow`). */
|
|
54
|
+
export type SampleObservation = {
|
|
55
|
+
mentioned: boolean;
|
|
56
|
+
rank?: number;
|
|
57
|
+
citationPresent: boolean;
|
|
58
|
+
sourceUrls: string[];
|
|
59
|
+
};
|
|
60
|
+
export interface MentionCitationExtractor {
|
|
61
|
+
extract(input: {
|
|
62
|
+
target: string;
|
|
63
|
+
answerText: string;
|
|
64
|
+
citations: GroundedCitation[];
|
|
65
|
+
}): SampleObservation | Promise<SampleObservation>;
|
|
66
|
+
}
|
|
67
|
+
export declare class DeterministicMentionCitationExtractor implements MentionCitationExtractor {
|
|
68
|
+
extract({ target, answerText, citations, }: {
|
|
69
|
+
target: string;
|
|
70
|
+
answerText: string;
|
|
71
|
+
citations: GroundedCitation[];
|
|
72
|
+
}): SampleObservation;
|
|
73
|
+
}
|
|
74
|
+
/** Bounded judge verdict — the ONLY shape the judge is allowed to return. */
|
|
75
|
+
export declare const JudgeVerdictSchema: z.ZodObject<{
|
|
76
|
+
mentioned: z.ZodBoolean;
|
|
77
|
+
rank: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
}, "strip", z.ZodTypeAny, {
|
|
79
|
+
mentioned: boolean;
|
|
80
|
+
rank?: number | undefined;
|
|
81
|
+
}, {
|
|
82
|
+
mentioned: boolean;
|
|
83
|
+
rank?: number | undefined;
|
|
84
|
+
}>;
|
|
85
|
+
export type JudgeVerdict = z.infer<typeof JudgeVerdictSchema>;
|
|
86
|
+
export type ParseJudgeVerdictResult = {
|
|
87
|
+
ok: true;
|
|
88
|
+
verdict: JudgeVerdict;
|
|
89
|
+
} | {
|
|
90
|
+
ok: false;
|
|
91
|
+
error: string;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Never-throws 3-tier verdict parser — mirrors
|
|
95
|
+
* `validateGroundingVerdict` (`src/medical/retrieval/grounding-critic.ts:40-88`):
|
|
96
|
+
* try a direct parse, then a fenced ```json block, then the first
|
|
97
|
+
* `{...}` span; `safeParse` at the end never throws. On total failure
|
|
98
|
+
* returns `{ ok: false, error }` so the caller can fail SAFE to the
|
|
99
|
+
* deterministic result (sc-8-3) rather than propagate a throw.
|
|
100
|
+
*/
|
|
101
|
+
export declare function parseJudgeVerdict(rawText: string): ParseJudgeVerdictResult;
|
|
102
|
+
/**
|
|
103
|
+
* OPTIONAL, injected LLM-as-judge fuzzy-mention extractor (Sprint 8;
|
|
104
|
+
* sc-8-1..sc-8-4). COMPOSES `DeterministicMentionCitationExtractor` —
|
|
105
|
+
* always runs the deterministic pass first and returns it verbatim
|
|
106
|
+
* (no judge call, cost control) when it already found a mention. Only
|
|
107
|
+
* when the deterministic pass left `mentioned:false` on a non-empty
|
|
108
|
+
* answer does this class sanitize the text (sc-8-4) and ask a bounded,
|
|
109
|
+
* schema-parsed judge whether the answer fuzzily mentions the target.
|
|
110
|
+
*
|
|
111
|
+
* FAIL-SAFE (sc-8-3): a thrown `llm.chat` transport error or an
|
|
112
|
+
* unparseable/malformed verdict falls back to the deterministic result
|
|
113
|
+
* VERBATIM — this class never fabricates `mentioned:true`. The judge
|
|
114
|
+
* only ever overrides `mentioned`/`rank`; `citationPresent`/`sourceUrls`
|
|
115
|
+
* always come from the deterministic pass (the judge does not re-derive
|
|
116
|
+
* URLs — nonGoals: not used for citation URL verification).
|
|
117
|
+
*
|
|
118
|
+
* NOT wired into production callers this sprint (`ai-visibility-provider.ts`,
|
|
119
|
+
* `runner.ts` still construct the plain `DeterministicMentionCitationExtractor`
|
|
120
|
+
* with no `llm`) — this class is exercised via unit tests injecting a
|
|
121
|
+
* scripted `LLMClient`, keeping the deterministic-only path byte-identical
|
|
122
|
+
* (sc-8-2).
|
|
123
|
+
*/
|
|
124
|
+
export declare class LlmJudgeMentionCitationExtractor implements MentionCitationExtractor {
|
|
125
|
+
private readonly deterministic;
|
|
126
|
+
private readonly llm;
|
|
127
|
+
private readonly model;
|
|
128
|
+
private readonly sanitizer;
|
|
129
|
+
constructor(deterministic: DeterministicMentionCitationExtractor, llm: LLMClient, model: string, sanitizer: ContentSanitizer);
|
|
130
|
+
extract(input: {
|
|
131
|
+
target: string;
|
|
132
|
+
answerText: string;
|
|
133
|
+
citations: GroundedCitation[];
|
|
134
|
+
}): Promise<SampleObservation>;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=mention-citation-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention-citation-extractor.d.ts","sourceRoot":"","sources":["../../../src/seo/sources/mention-citation-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,sGAAsG;AACtG,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,KAAK,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;KAC/B,GAAG,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACpD;AAyDD,qBAAa,qCAAsC,YAAW,wBAAwB;IACpF,OAAO,CAAC,EACN,MAAM,EACN,UAAU,EACV,SAAS,GACV,EAAE;QACD,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;KAC/B,GAAG,iBAAiB;CA6BtB;AAID,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzG;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB,CAqC1E;AAwBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,gCAAiC,YAAW,wBAAwB;IAE7E,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,aAAa,EAAE,qCAAqC,EACpD,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,gBAAgB;IAGxC,OAAO,CAAC,KAAK,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;KAC/B,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA2C/B"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MentionCitationExtractor — deterministic host/brand matcher over a
|
|
3
|
+
* grounded-search answer (in-house-ai-visibility, Sprint 2;
|
|
4
|
+
* arch-20260717-in-house-oss-ai-visibility-architecture.md:148-159,240-245),
|
|
5
|
+
* with an OPTIONAL injected LLM-as-judge fuzzy-mention path added in
|
|
6
|
+
* Sprint 8.
|
|
7
|
+
*
|
|
8
|
+
* PURE, synchronous, network-free transform: given `{target, answerText,
|
|
9
|
+
* citations}` it decides `{mentioned, rank?, citationPresent, sourceUrls}`
|
|
10
|
+
* by string/host matching alone — no `CitationVerifier` call (Sprint 4,
|
|
11
|
+
* a nonGoal here — `sourceUrls` here are candidate URLs, not verified
|
|
12
|
+
* ones).
|
|
13
|
+
*
|
|
14
|
+
* Matching strategy (deterministic only, per the architecture):
|
|
15
|
+
* 1. Normalize `target` to a bare host (strip scheme, `www.`) via the
|
|
16
|
+
* local `safeHost` guard — mirrors `safeOrigin`
|
|
17
|
+
* (`damcrawler-crawl-engine.ts:122-129`) and the "no shared URL/host
|
|
18
|
+
* util exists in `src`" note (`citation-gate.ts:30-32`).
|
|
19
|
+
* 2. `mentioned` = the target's brand token (the host's first label) OR
|
|
20
|
+
* its full bare host appears, case-insensitive and on a word
|
|
21
|
+
* boundary, in `answerText` OR in any citation's `title`. Word-
|
|
22
|
+
* boundary matching (not naive `includes`) avoids substring false
|
|
23
|
+
* positives (e.g. brand "ace" must not match inside "space").
|
|
24
|
+
* 3. `sourceUrls` = citation URLs whose host equals the target host (or
|
|
25
|
+
* is a subdomain of it) — candidate URLs only, never verified.
|
|
26
|
+
* 4. `citationPresent` = `sourceUrls.length > 0`.
|
|
27
|
+
* 5. `rank` is never derivable deterministically this sprint, so the key
|
|
28
|
+
* is always omitted (never `rank: undefined`) — sc-2-1 does not
|
|
29
|
+
* require it.
|
|
30
|
+
*
|
|
31
|
+
* Empty/whitespace/malformed input (empty `target`, empty/whitespace
|
|
32
|
+
* `answerText`, empty `citations`) always yields
|
|
33
|
+
* `{ mentioned: false, citationPresent: false, sourceUrls: [] }` — this
|
|
34
|
+
* class NEVER fabricates a positive observation (sc-2-1, stopConditions).
|
|
35
|
+
*
|
|
36
|
+
* Sprint 8 — LLM-as-judge fuzzy-mention path (`LlmJudgeMentionCitationExtractor`):
|
|
37
|
+
* an OPTIONAL, injected-`llm` extractor that COMPOSES the deterministic one.
|
|
38
|
+
* It runs the deterministic pass first; only when that pass left
|
|
39
|
+
* `mentioned:false` (cost control, evaluatorNotes) does it sanitize the
|
|
40
|
+
* answer text and ask a bounded, schema-parsed LLM judge whether the
|
|
41
|
+
* answer fuzzily/paraphrasedly mentions the target. The judge FAILS SAFE
|
|
42
|
+
* to the deterministic result on any transport error or unparseable
|
|
43
|
+
* verdict — it never fabricates `mentioned:true` (sc-8-3). Production
|
|
44
|
+
* wiring (`ai-visibility-provider.ts`, `runner.ts`) still constructs the
|
|
45
|
+
* plain `DeterministicMentionCitationExtractor` with no `llm`, so the
|
|
46
|
+
* deterministic-only path remains byte-identical and this class is opt-in
|
|
47
|
+
* (sc-8-2, nonGoals: judge is NOT the default).
|
|
48
|
+
*/
|
|
49
|
+
import { z } from "zod";
|
|
50
|
+
/**
|
|
51
|
+
* `try { new URL(...).hostname } catch { "" }` — URL parsing must never
|
|
52
|
+
* throw here. Accepts both a full URL (`https://target.example/page`) and
|
|
53
|
+
* a bare domain (`target.example`, `www.target.example`) by prefixing a
|
|
54
|
+
* scheme when one is absent, mirroring `safeOrigin`
|
|
55
|
+
* (`damcrawler-crawl-engine.ts:122-129`).
|
|
56
|
+
*/
|
|
57
|
+
function safeHost(raw) {
|
|
58
|
+
if (typeof raw !== "string" || raw.trim().length === 0)
|
|
59
|
+
return "";
|
|
60
|
+
const hasScheme = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//.test(raw);
|
|
61
|
+
const candidate = hasScheme ? raw : `https://${raw}`;
|
|
62
|
+
try {
|
|
63
|
+
return new URL(candidate).hostname.toLowerCase();
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** Strips a leading `www.` label — hosts are compared without it. */
|
|
70
|
+
function stripWww(host) {
|
|
71
|
+
return host.startsWith("www.") ? host.slice(4) : host;
|
|
72
|
+
}
|
|
73
|
+
/** Bare, `www.`-stripped host for `raw` — `""` when `raw` is empty/malformed. */
|
|
74
|
+
function bareHost(raw) {
|
|
75
|
+
return stripWww(safeHost(raw));
|
|
76
|
+
}
|
|
77
|
+
/** The host's first label — the brand token (e.g. `"target"` from `"target.example"`). */
|
|
78
|
+
function brandToken(host) {
|
|
79
|
+
const [first] = host.split(".");
|
|
80
|
+
return first ?? "";
|
|
81
|
+
}
|
|
82
|
+
function escapeRegExp(value) {
|
|
83
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Case-insensitive, word-boundary substring test. Word-boundary (not
|
|
87
|
+
* `includes`) prevents a brand token from matching inside an unrelated
|
|
88
|
+
* larger word (e.g. `"ace"` must not match `"space"`).
|
|
89
|
+
*/
|
|
90
|
+
function containsWordBoundary(haystack, needle) {
|
|
91
|
+
if (!needle)
|
|
92
|
+
return false;
|
|
93
|
+
const pattern = new RegExp(`\\b${escapeRegExp(needle)}\\b`, "i");
|
|
94
|
+
return pattern.test(haystack);
|
|
95
|
+
}
|
|
96
|
+
/** `true` when `citationHost` is exactly `targetHost` or a subdomain of it. Both inputs are already bare/`www.`-stripped. */
|
|
97
|
+
function hostMatches(citationHost, targetHost) {
|
|
98
|
+
if (!citationHost || !targetHost)
|
|
99
|
+
return false;
|
|
100
|
+
return citationHost === targetHost || citationHost.endsWith(`.${targetHost}`);
|
|
101
|
+
}
|
|
102
|
+
export class DeterministicMentionCitationExtractor {
|
|
103
|
+
extract({ target, answerText, citations, }) {
|
|
104
|
+
const targetHost = bareHost(target);
|
|
105
|
+
const brand = brandToken(targetHost);
|
|
106
|
+
const safeCitations = Array.isArray(citations) ? citations : [];
|
|
107
|
+
// -- sourceUrls / citationPresent: candidate URLs whose host matches the target's host --
|
|
108
|
+
const sourceUrls = targetHost
|
|
109
|
+
? safeCitations.filter((c) => hostMatches(bareHost(c.url), targetHost)).map((c) => c.url)
|
|
110
|
+
: [];
|
|
111
|
+
const citationPresent = sourceUrls.length > 0;
|
|
112
|
+
// -- mentioned: brand/host in answerText or any citation title, word-boundary matched --
|
|
113
|
+
const hasAnswerText = typeof answerText === "string" && answerText.trim().length > 0;
|
|
114
|
+
const mentionedInAnswer = targetHost.length > 0 &&
|
|
115
|
+
hasAnswerText &&
|
|
116
|
+
(containsWordBoundary(answerText, brand) || containsWordBoundary(answerText, targetHost));
|
|
117
|
+
const mentionedInCitationTitle = targetHost.length > 0 &&
|
|
118
|
+
safeCitations.some((c) => containsWordBoundary(c.title, brand) || containsWordBoundary(c.title, targetHost));
|
|
119
|
+
return {
|
|
120
|
+
mentioned: mentionedInAnswer || mentionedInCitationTitle,
|
|
121
|
+
citationPresent,
|
|
122
|
+
sourceUrls,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// ── Sprint 8 — LLM-as-judge fuzzy-mention path (opt-in) ─────────────────
|
|
127
|
+
/** Bounded judge verdict — the ONLY shape the judge is allowed to return. */
|
|
128
|
+
export const JudgeVerdictSchema = z.object({
|
|
129
|
+
mentioned: z.boolean(),
|
|
130
|
+
rank: z.number().int().positive().optional(),
|
|
131
|
+
});
|
|
132
|
+
/**
|
|
133
|
+
* Never-throws 3-tier verdict parser — mirrors
|
|
134
|
+
* `validateGroundingVerdict` (`src/medical/retrieval/grounding-critic.ts:40-88`):
|
|
135
|
+
* try a direct parse, then a fenced ```json block, then the first
|
|
136
|
+
* `{...}` span; `safeParse` at the end never throws. On total failure
|
|
137
|
+
* returns `{ ok: false, error }` so the caller can fail SAFE to the
|
|
138
|
+
* deterministic result (sc-8-3) rather than propagate a throw.
|
|
139
|
+
*/
|
|
140
|
+
export function parseJudgeVerdict(rawText) {
|
|
141
|
+
let parsed;
|
|
142
|
+
try {
|
|
143
|
+
parsed = JSON.parse(rawText.trim());
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
const fenceMatch = /```(?:json)?\s*\n?([\s\S]*?)\n?\s*```/.exec(rawText);
|
|
147
|
+
if (fenceMatch) {
|
|
148
|
+
try {
|
|
149
|
+
parsed = JSON.parse(fenceMatch[1].trim());
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Fall through
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (!parsed) {
|
|
156
|
+
const braceStart = rawText.indexOf("{");
|
|
157
|
+
const braceEnd = rawText.lastIndexOf("}");
|
|
158
|
+
if (braceStart !== -1 && braceEnd > braceStart) {
|
|
159
|
+
try {
|
|
160
|
+
parsed = JSON.parse(rawText.slice(braceStart, braceEnd + 1));
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return { ok: false, error: `No valid JSON object found in judge response. Raw: ${rawText.slice(0, 200)}` };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
return { ok: false, error: `No JSON object found in judge response. Raw: ${rawText.slice(0, 200)}` };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const result = JudgeVerdictSchema.safeParse(parsed);
|
|
172
|
+
if (!result.success) {
|
|
173
|
+
const issues = result.error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n");
|
|
174
|
+
return { ok: false, error: issues };
|
|
175
|
+
}
|
|
176
|
+
return { ok: true, verdict: result.data };
|
|
177
|
+
}
|
|
178
|
+
function buildJudgeSystemPrompt(target) {
|
|
179
|
+
return (`You are an independent fact-checker judging whether a search-engine answer ` +
|
|
180
|
+
`mentions a specific brand/website, INCLUDING fuzzy/paraphrased references ` +
|
|
181
|
+
`that clearly refer to it without using its exact name or domain.\n\n` +
|
|
182
|
+
`Target brand/site: ${target}\n\n` +
|
|
183
|
+
`Output ONLY a single JSON object (no prose, no markdown fences, no tool calls) with EXACTLY this shape:\n` +
|
|
184
|
+
`{"mentioned": boolean, "rank": number}\n\n` +
|
|
185
|
+
`Rules:\n` +
|
|
186
|
+
`- "mentioned" must be true ONLY if the answer text meaningfully refers to the target brand/site (fuzzy/paraphrased mentions count; a coincidental or unrelated similar word does not).\n` +
|
|
187
|
+
`- "rank" is OPTIONAL: include it ONLY as a positive integer giving the target's approximate position among ranked/listed items in the answer; omit the key entirely if the answer has no ranking or you are unsure.\n` +
|
|
188
|
+
`- If the answer text is empty, unrelated, or you are unsure whether it refers to the target, "mentioned" must be false.\n` +
|
|
189
|
+
`- Output the JSON object and nothing else.`);
|
|
190
|
+
}
|
|
191
|
+
function buildJudgeUserContent(sanitizedAnswerText, citations) {
|
|
192
|
+
const citationBlock = citations.length > 0 ? citations.map((c, i) => `[${i + 1}] ${c.title} — ${c.url}`).join("\n") : "(no citations)";
|
|
193
|
+
return `Answer text to judge:\n${sanitizedAnswerText}\n\nCitations:\n${citationBlock}`;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* OPTIONAL, injected LLM-as-judge fuzzy-mention extractor (Sprint 8;
|
|
197
|
+
* sc-8-1..sc-8-4). COMPOSES `DeterministicMentionCitationExtractor` —
|
|
198
|
+
* always runs the deterministic pass first and returns it verbatim
|
|
199
|
+
* (no judge call, cost control) when it already found a mention. Only
|
|
200
|
+
* when the deterministic pass left `mentioned:false` on a non-empty
|
|
201
|
+
* answer does this class sanitize the text (sc-8-4) and ask a bounded,
|
|
202
|
+
* schema-parsed judge whether the answer fuzzily mentions the target.
|
|
203
|
+
*
|
|
204
|
+
* FAIL-SAFE (sc-8-3): a thrown `llm.chat` transport error or an
|
|
205
|
+
* unparseable/malformed verdict falls back to the deterministic result
|
|
206
|
+
* VERBATIM — this class never fabricates `mentioned:true`. The judge
|
|
207
|
+
* only ever overrides `mentioned`/`rank`; `citationPresent`/`sourceUrls`
|
|
208
|
+
* always come from the deterministic pass (the judge does not re-derive
|
|
209
|
+
* URLs — nonGoals: not used for citation URL verification).
|
|
210
|
+
*
|
|
211
|
+
* NOT wired into production callers this sprint (`ai-visibility-provider.ts`,
|
|
212
|
+
* `runner.ts` still construct the plain `DeterministicMentionCitationExtractor`
|
|
213
|
+
* with no `llm`) — this class is exercised via unit tests injecting a
|
|
214
|
+
* scripted `LLMClient`, keeping the deterministic-only path byte-identical
|
|
215
|
+
* (sc-8-2).
|
|
216
|
+
*/
|
|
217
|
+
export class LlmJudgeMentionCitationExtractor {
|
|
218
|
+
deterministic;
|
|
219
|
+
llm;
|
|
220
|
+
model;
|
|
221
|
+
sanitizer;
|
|
222
|
+
constructor(deterministic, llm, model, sanitizer) {
|
|
223
|
+
this.deterministic = deterministic;
|
|
224
|
+
this.llm = llm;
|
|
225
|
+
this.model = model;
|
|
226
|
+
this.sanitizer = sanitizer;
|
|
227
|
+
}
|
|
228
|
+
async extract(input) {
|
|
229
|
+
const { target, answerText, citations } = input;
|
|
230
|
+
const deterministicResult = this.deterministic.extract(input);
|
|
231
|
+
// Cost control (evaluatorNotes): the judge only runs on answers the
|
|
232
|
+
// deterministic pass did NOT already mark mentioned.
|
|
233
|
+
if (deterministicResult.mentioned)
|
|
234
|
+
return deterministicResult;
|
|
235
|
+
// Never spend an LLM call on an empty/whitespace answer, and never let
|
|
236
|
+
// a judge turn one into `mentioned:true` (sc-8-3).
|
|
237
|
+
const hasAnswerText = typeof answerText === "string" && answerText.trim().length > 0;
|
|
238
|
+
if (!hasAnswerText)
|
|
239
|
+
return deterministicResult;
|
|
240
|
+
// sc-8-4: sanitize BEFORE building the judge prompt. A sanitizer that
|
|
241
|
+
// drops the text entirely (fail-closed, e.g. threats detected) leaves
|
|
242
|
+
// nothing for the judge to reason about — fail safe without calling it.
|
|
243
|
+
const sanitizedAnswerText = this.sanitizer.clean(answerText, target).content;
|
|
244
|
+
if (sanitizedAnswerText.trim().length === 0)
|
|
245
|
+
return deterministicResult;
|
|
246
|
+
let rawText;
|
|
247
|
+
try {
|
|
248
|
+
const response = await this.llm.chat({
|
|
249
|
+
model: this.model,
|
|
250
|
+
system: buildJudgeSystemPrompt(target),
|
|
251
|
+
messages: [{ role: "user", content: buildJudgeUserContent(sanitizedAnswerText, citations) }],
|
|
252
|
+
jsonObjectMode: true,
|
|
253
|
+
});
|
|
254
|
+
rawText = response.text;
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return deterministicResult; // fail-safe: transport error -> deterministic result (sc-8-3)
|
|
258
|
+
}
|
|
259
|
+
const parsed = parseJudgeVerdict(rawText);
|
|
260
|
+
if (!parsed.ok)
|
|
261
|
+
return deterministicResult; // fail-safe: unparseable verdict -> deterministic result (sc-8-3)
|
|
262
|
+
const result = {
|
|
263
|
+
mentioned: parsed.verdict.mentioned,
|
|
264
|
+
citationPresent: deterministicResult.citationPresent,
|
|
265
|
+
sourceUrls: deterministicResult.sourceUrls,
|
|
266
|
+
};
|
|
267
|
+
if (parsed.verdict.rank !== undefined)
|
|
268
|
+
result.rank = parsed.verdict.rank; // never `rank: undefined`
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=mention-citation-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention-citation-extractor.js","sourceRoot":"","sources":["../../../src/seo/sources/mention-citation-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ScrapeArmEngineProvider — the damcrawler UI-scrape `AiVisibilityProvider`
|
|
3
|
+
* arm (in-house-ai-visibility, Sprint 10; arch-20260717-in-house-oss-ai-
|
|
4
|
+
* visibility-architecture.md:101-114,307-310; ADR-4).
|
|
5
|
+
*
|
|
6
|
+
* A near-fusion of TWO existing templates, deliberately mirrored rather than
|
|
7
|
+
* reinvented:
|
|
8
|
+
* - `DamcrawlerSerpProvider` (`./damcrawler-serp-provider.ts:69-106`) —
|
|
9
|
+
* guard-first/lazy-load/never-throw shape, and its docstring's rationale
|
|
10
|
+
* for omitting an `assertSafeUrl` SSRF guard (`:14-18`): the scrape
|
|
11
|
+
* target is PROVIDER-constructed (the ChatGPT-UI endpoint for a given
|
|
12
|
+
* prompt), not caller-supplied free-text, so there is no SSRF surface
|
|
13
|
+
* here the way there is for `DamcrawlerCitationVerifier`'s
|
|
14
|
+
* caller-supplied candidate urls.
|
|
15
|
+
* - `ApiSpineEngineProvider` (`./api-spine-provider.ts:72-125`) — the
|
|
16
|
+
* N-samples-per-prompt loop: sanitize -> extract -> verify -> emit one
|
|
17
|
+
* raw `AiVisibilityRow` per real observation, never a pre-aggregate.
|
|
18
|
+
*
|
|
19
|
+
* This class is the FIRST live consumer of the `"ai-visibility-scrape"`
|
|
20
|
+
* egress axis (previously axis-only, `../egress.ts:6-7`). The axis is
|
|
21
|
+
* self-asserted as the FIRST statement inside `probe()` — the load-bearing
|
|
22
|
+
* barrier per ADR-4 — so axis-off means zero sockets AND zero damcrawler
|
|
23
|
+
* import AND zero `ScrapeThrottle.acquire` calls (sc-10-1,
|
|
24
|
+
* byte-identical-when-off).
|
|
25
|
+
*
|
|
26
|
+
* When the axis is ON, each sample runs:
|
|
27
|
+
* `throttle.acquire` -> `dam.scrape` -> `ContentSanitizer.clean` (BEFORE
|
|
28
|
+
* the parser — the Sprint-9 F1 prompt-injection lesson: an unsanitized
|
|
29
|
+
* scraped answer reaching the extractor/verifier/builder would re-open
|
|
30
|
+
* that regression, arch:346 "critical") -> `EngineScrapeParser.parse`
|
|
31
|
+
* (PURE) -> `MentionCitationExtractor.extract` -> `CitationVerifier.verify`
|
|
32
|
+
* -> `ScrapeThrottle.recordProxyCost` (only after a row is produced) ->
|
|
33
|
+
* push a row labeled `this.name` (`"chatgpt-ui"` (Sprint 10) or
|
|
34
|
+
* `"perplexity-ui"` (Sprint 11) — distinct from every API-arm provider
|
|
35
|
+
* label, sc-10-4/sc-11-1 unmixable-by-label).
|
|
36
|
+
*
|
|
37
|
+
* `estCostUsdPerPrompt = 0` — the scrape arm books ZERO USD to the
|
|
38
|
+
* `SeoQuotaGovernor`; its real proxy cost lives entirely in the
|
|
39
|
+
* `ScrapeThrottle`'s independent ledger (Sprint 9). Unlike
|
|
40
|
+
* `ApiSpineEngineProvider.probe` (which THROWS when every attempted sample
|
|
41
|
+
* fails, so its non-zero USD is never over-booked, `api-spine-provider.ts
|
|
42
|
+
* :117-122`), this arm books $0 — a total failure has no over-book risk, so
|
|
43
|
+
* it returns `[]` (abstain) instead of throwing (sc-10-3, "a scrape error
|
|
44
|
+
* degrades to abstain (never throws)", read literally).
|
|
45
|
+
*/
|
|
46
|
+
import type { SeoEgressGuard } from "../egress.js";
|
|
47
|
+
import type { AiVisibilityRow } from "../data-source.js";
|
|
48
|
+
import type { AiVisibilityProvider } from "./ai-visibility-adapter.js";
|
|
49
|
+
import type { MentionCitationExtractor } from "./mention-citation-extractor.js";
|
|
50
|
+
import type { CitationVerifier } from "./citation-verifier.js";
|
|
51
|
+
import type { ScrapeThrottle } from "../scrape-throttle.js";
|
|
52
|
+
import type { EngineScrapeParser } from "./engine-scrape-parser-chatgpt.js";
|
|
53
|
+
/** The scrape arm's engine labels (net-new; `AiVisibilityRow.provider` is a plain string). Both `"chatgpt-ui"` (Sprint 10) and `"perplexity-ui"` (Sprint 11) are live — see `scrapeUrlFor` below. */
|
|
54
|
+
export type ScrapeEngine = "chatgpt-ui" | "perplexity-ui";
|
|
55
|
+
/**
|
|
56
|
+
* NARROW view of the ONLY damcrawler surface this arm calls — mirrors
|
|
57
|
+
* `DamcrawlerSearchModule` (`./damcrawler-serp-provider.ts:43-49`) and
|
|
58
|
+
* `DamcrawlerVerifyModule` (`./citation-verifier.ts:62-69`). Defined LOCALLY
|
|
59
|
+
* (never imported from the real dep) so tests never need the package.
|
|
60
|
+
* `options` carries the operator-supplied auth session / proxy opaquely —
|
|
61
|
+
* this class does no auth harvesting or proxy sourcing (nonGoals).
|
|
62
|
+
*/
|
|
63
|
+
export interface DamcrawlerScrapeModule {
|
|
64
|
+
scrape(urls: string[], options: {
|
|
65
|
+
formats?: string[];
|
|
66
|
+
proxy?: string;
|
|
67
|
+
authSession?: unknown;
|
|
68
|
+
}): Promise<Array<{
|
|
69
|
+
url: string;
|
|
70
|
+
title: string;
|
|
71
|
+
markdown: string;
|
|
72
|
+
links?: Array<{
|
|
73
|
+
url: string;
|
|
74
|
+
text?: string;
|
|
75
|
+
}>;
|
|
76
|
+
error?: string;
|
|
77
|
+
}>>;
|
|
78
|
+
sanitize(raw: string, options?: {
|
|
79
|
+
sourceUrl?: string;
|
|
80
|
+
}): {
|
|
81
|
+
content: string;
|
|
82
|
+
hadThreats: boolean;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** Loader seam — the default performs the lazy dynamic import; tests inject a FAKE module (or `undefined` to simulate the dep being absent). */
|
|
86
|
+
export type DamcrawlerScrapeLoader = () => Promise<DamcrawlerScrapeModule | undefined>;
|
|
87
|
+
/**
|
|
88
|
+
* `AiVisibilityProvider` backed by a gated damcrawler UI scrape.
|
|
89
|
+
* Guard-first, lazy-load, throttle-metered, sanitize-before-parse,
|
|
90
|
+
* never-throw; books zero USD to the governor (proxy cost is tracked
|
|
91
|
+
* independently by the injected `ScrapeThrottle`).
|
|
92
|
+
*/
|
|
93
|
+
export declare class ScrapeArmEngineProvider implements AiVisibilityProvider {
|
|
94
|
+
private readonly egress;
|
|
95
|
+
private readonly parser;
|
|
96
|
+
private readonly extractor;
|
|
97
|
+
private readonly verifier;
|
|
98
|
+
private readonly throttle;
|
|
99
|
+
private readonly samplesPerPrompt;
|
|
100
|
+
private readonly authSession;
|
|
101
|
+
private readonly proxyUsdPerScrape;
|
|
102
|
+
private readonly proxy;
|
|
103
|
+
private readonly load;
|
|
104
|
+
readonly name: ScrapeEngine;
|
|
105
|
+
readonly estCostUsdPerPrompt = 0;
|
|
106
|
+
constructor(egress: SeoEgressGuard, engine: ScrapeEngine, parser: EngineScrapeParser, extractor: MentionCitationExtractor, verifier: CitationVerifier, throttle: ScrapeThrottle, samplesPerPrompt: number, authSession: unknown, proxyUsdPerScrape: number, proxy?: string | undefined, load?: DamcrawlerScrapeLoader);
|
|
107
|
+
probe(target: string, prompts: string[], _locale?: string): Promise<AiVisibilityRow[]>;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=scrape-arm-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrape-arm-provider.d.ts","sourceRoot":"","sources":["../../../src/seo/sources/scrape-arm-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAa,MAAM,mCAAmC,CAAC;AAGvF,qMAAqM;AACrM,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,eAAe,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CACJ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACrE,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACnI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;CACnG;AAED,gJAAgJ;AAChJ,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAAC;AAmCvF;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,oBAAoB;IAKhE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAKjC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAlBvB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,mBAAmB,KAAK;gBAGd,MAAM,EAAE,cAAc,EACvC,MAAM,EAAE,YAAY,EACH,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,wBAAwB,EACnC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,cAAc,EACxB,gBAAgB,EAAE,MAAM,EAKxB,WAAW,EAAE,OAAO,EACpB,iBAAiB,EAAE,MAAM,EACzB,KAAK,GAAE,MAAM,GAAG,SAAqB,EACrC,IAAI,GAAE,sBAAsC;IAKzD,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CA8D7F"}
|