agent-bober 0.17.1 → 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 +26 -0
- package/README.md +402 -10
- 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/answerer.d.ts +17 -0
- package/dist/chat/answerer.d.ts.map +1 -0
- package/dist/chat/answerer.js +52 -0
- package/dist/chat/answerer.js.map +1 -0
- package/dist/chat/approval-cursor.d.ts +25 -0
- package/dist/chat/approval-cursor.d.ts.map +1 -0
- package/dist/chat/approval-cursor.js +61 -0
- package/dist/chat/approval-cursor.js.map +1 -0
- package/dist/chat/approval-reader.d.ts +11 -0
- package/dist/chat/approval-reader.d.ts.map +1 -0
- package/dist/chat/approval-reader.js +20 -0
- package/dist/chat/approval-reader.js.map +1 -0
- package/dist/chat/careful-sidecar.d.ts +15 -0
- package/dist/chat/careful-sidecar.d.ts.map +1 -0
- package/dist/chat/careful-sidecar.js +39 -0
- package/dist/chat/careful-sidecar.js.map +1 -0
- package/dist/chat/chat-session.d.ts +156 -0
- package/dist/chat/chat-session.d.ts.map +1 -0
- package/dist/chat/chat-session.js +570 -0
- package/dist/chat/chat-session.js.map +1 -0
- package/dist/chat/completion-tailer.d.ts +27 -0
- package/dist/chat/completion-tailer.d.ts.map +1 -0
- package/dist/chat/completion-tailer.js +187 -0
- package/dist/chat/completion-tailer.js.map +1 -0
- package/dist/chat/conversation-store.d.ts +22 -0
- package/dist/chat/conversation-store.d.ts.map +1 -0
- package/dist/chat/conversation-store.js +66 -0
- package/dist/chat/conversation-store.js.map +1 -0
- package/dist/chat/cursor-store.d.ts +23 -0
- package/dist/chat/cursor-store.d.ts.map +1 -0
- package/dist/chat/cursor-store.js +42 -0
- package/dist/chat/cursor-store.js.map +1 -0
- package/dist/chat/pid-sidecar.d.ts +22 -0
- package/dist/chat/pid-sidecar.d.ts.map +1 -0
- package/dist/chat/pid-sidecar.js +42 -0
- package/dist/chat/pid-sidecar.js.map +1 -0
- package/dist/chat/roster-reader.d.ts +16 -0
- package/dist/chat/roster-reader.d.ts.map +1 -0
- package/dist/chat/roster-reader.js +39 -0
- package/dist/chat/roster-reader.js.map +1 -0
- package/dist/chat/run-spawner.d.ts +71 -0
- package/dist/chat/run-spawner.d.ts.map +1 -0
- package/dist/chat/run-spawner.js +121 -0
- package/dist/chat/run-spawner.js.map +1 -0
- package/dist/chat/slash-commands.d.ts +40 -0
- package/dist/chat/slash-commands.d.ts.map +1 -0
- package/dist/chat/slash-commands.js +153 -0
- package/dist/chat/slash-commands.js.map +1 -0
- package/dist/chat/steer-cleanup.d.ts +12 -0
- package/dist/chat/steer-cleanup.d.ts.map +1 -0
- package/dist/chat/steer-cleanup.js +60 -0
- package/dist/chat/steer-cleanup.js.map +1 -0
- package/dist/chat/turn-classifier.d.ts +46 -0
- package/dist/chat/turn-classifier.d.ts.map +1 -0
- package/dist/chat/turn-classifier.js +157 -0
- package/dist/chat/turn-classifier.js.map +1 -0
- package/dist/cli/commands/blackboard.d.ts +33 -0
- package/dist/cli/commands/blackboard.d.ts.map +1 -0
- package/dist/cli/commands/blackboard.js +114 -0
- package/dist/cli/commands/blackboard.js.map +1 -0
- 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/chat.d.ts +13 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +43 -0
- package/dist/cli/commands/chat.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/evolve.d.ts +18 -0
- package/dist/cli/commands/evolve.d.ts.map +1 -0
- package/dist/cli/commands/evolve.js +72 -0
- package/dist/cli/commands/evolve.js.map +1 -0
- package/dist/cli/commands/facts.d.ts +15 -0
- package/dist/cli/commands/facts.d.ts.map +1 -0
- package/dist/cli/commands/facts.js +213 -0
- package/dist/cli/commands/facts.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 +49 -0
- package/dist/cli/commands/medical.d.ts.map +1 -0
- package/dist/cli/commands/medical.js +365 -0
- package/dist/cli/commands/medical.js.map +1 -0
- package/dist/cli/commands/memory.d.ts +2 -1
- package/dist/cli/commands/memory.d.ts.map +1 -1
- package/dist/cli/commands/memory.js +94 -7
- package/dist/cli/commands/memory.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +29 -3
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/replay.d.ts +17 -0
- package/dist/cli/commands/replay.d.ts.map +1 -0
- package/dist/cli/commands/replay.js +261 -0
- package/dist/cli/commands/replay.js.map +1 -0
- 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/run.d.ts +9 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +27 -1
- package/dist/cli/commands/run.js.map +1 -1
- 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/sprint.d.ts.map +1 -1
- package/dist/cli/commands/sprint.js +17 -3
- package/dist/cli/commands/sprint.js.map +1 -1
- 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 +45 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +8 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/role-providers.d.ts +16 -1
- package/dist/config/role-providers.d.ts.map +1 -1
- package/dist/config/role-providers.js +14 -2
- package/dist/config/role-providers.js.map +1 -1
- package/dist/config/schema.d.ts +4050 -454
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +429 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/contracts/eval-result.d.ts +84 -84
- package/dist/contracts/spec.d.ts +28 -28
- package/dist/contracts/sprint-contract.d.ts +4 -4
- 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 +61 -0
- package/dist/fleet/critic-deep.d.ts.map +1 -0
- package/dist/fleet/critic-deep.js +202 -0
- package/dist/fleet/critic-deep.js.map +1 -0
- package/dist/fleet/decomposer-deep-constants.d.ts +4 -0
- package/dist/fleet/decomposer-deep-constants.d.ts.map +1 -0
- package/dist/fleet/decomposer-deep-constants.js +14 -0
- package/dist/fleet/decomposer-deep-constants.js.map +1 -0
- package/dist/fleet/decomposer-deep-types.d.ts +8 -0
- package/dist/fleet/decomposer-deep-types.d.ts.map +1 -0
- package/dist/fleet/decomposer-deep-types.js +9 -0
- package/dist/fleet/decomposer-deep-types.js.map +1 -0
- package/dist/fleet/decomposer-deep.d.ts +44 -0
- package/dist/fleet/decomposer-deep.d.ts.map +1 -0
- package/dist/fleet/decomposer-deep.js +261 -0
- package/dist/fleet/decomposer-deep.js.map +1 -0
- package/dist/fleet/decomposer.d.ts +22 -0
- package/dist/fleet/decomposer.d.ts.map +1 -0
- package/dist/fleet/decomposer.js +144 -0
- package/dist/fleet/decomposer.js.map +1 -0
- package/dist/fleet/index.d.ts +102 -0
- package/dist/fleet/index.d.ts.map +1 -1
- package/dist/fleet/index.js +316 -9
- package/dist/fleet/index.js.map +1 -1
- package/dist/fleet/manifest-write.d.ts +30 -0
- package/dist/fleet/manifest-write.d.ts.map +1 -0
- package/dist/fleet/manifest-write.js +90 -0
- package/dist/fleet/manifest-write.js.map +1 -0
- package/dist/fleet/manifest.d.ts +32 -6
- 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/fleet/shared-blackboard.d.ts +51 -0
- package/dist/fleet/shared-blackboard.d.ts.map +1 -0
- package/dist/fleet/shared-blackboard.js +79 -0
- package/dist/fleet/shared-blackboard.js.map +1 -0
- package/dist/fleet/synthesis.d.ts +16 -0
- package/dist/fleet/synthesis.d.ts.map +1 -0
- package/dist/fleet/synthesis.js +22 -0
- package/dist/fleet/synthesis.js.map +1 -0
- package/dist/fleet/tier-policy.d.ts +18 -0
- package/dist/fleet/tier-policy.d.ts.map +1 -0
- package/dist/fleet/tier-policy.js +53 -0
- package/dist/fleet/tier-policy.js.map +1 -0
- package/dist/fleet/tool-role-guard.d.ts +24 -0
- package/dist/fleet/tool-role-guard.d.ts.map +1 -0
- package/dist/fleet/tool-role-guard.js +55 -0
- package/dist/fleet/tool-role-guard.js.map +1 -0
- 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/incident/types.d.ts +8 -8
- 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/mcp/run-manager.d.ts +9 -1
- package/dist/mcp/run-manager.d.ts.map +1 -1
- package/dist/mcp/run-manager.js.map +1 -1
- package/dist/medical/adapters/apple-health.d.ts +32 -0
- package/dist/medical/adapters/apple-health.d.ts.map +1 -0
- package/dist/medical/adapters/apple-health.js +100 -0
- package/dist/medical/adapters/apple-health.js.map +1 -0
- 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/audit.d.ts +31 -0
- package/dist/medical/audit.d.ts.map +1 -0
- package/dist/medical/audit.js +56 -0
- package/dist/medical/audit.js.map +1 -0
- package/dist/medical/consent.d.ts +37 -0
- package/dist/medical/consent.d.ts.map +1 -0
- package/dist/medical/consent.js +73 -0
- package/dist/medical/consent.js.map +1 -0
- package/dist/medical/disclaimer.d.ts +11 -0
- package/dist/medical/disclaimer.d.ts.map +1 -0
- package/dist/medical/disclaimer.js +21 -0
- package/dist/medical/disclaimer.js.map +1 -0
- package/dist/medical/egress.d.ts +30 -0
- package/dist/medical/egress.d.ts.map +1 -0
- package/dist/medical/egress.js +50 -0
- package/dist/medical/egress.js.map +1 -0
- package/dist/medical/engine.d.ts +73 -0
- package/dist/medical/engine.d.ts.map +1 -0
- package/dist/medical/engine.js +333 -0
- package/dist/medical/engine.js.map +1 -0
- package/dist/medical/guardrails.d.ts +47 -0
- package/dist/medical/guardrails.d.ts.map +1 -0
- package/dist/medical/guardrails.js +92 -0
- package/dist/medical/guardrails.js.map +1 -0
- package/dist/medical/health-store.d.ts +85 -0
- package/dist/medical/health-store.d.ts.map +1 -0
- package/dist/medical/health-store.js +214 -0
- package/dist/medical/health-store.js.map +1 -0
- package/dist/medical/inference.d.ts +22 -0
- package/dist/medical/inference.d.ts.map +1 -0
- package/dist/medical/inference.js +39 -0
- package/dist/medical/inference.js.map +1 -0
- package/dist/medical/ingestion.d.ts +33 -0
- package/dist/medical/ingestion.d.ts.map +1 -0
- package/dist/medical/ingestion.js +52 -0
- package/dist/medical/ingestion.js.map +1 -0
- 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/numerics.d.ts +66 -0
- package/dist/medical/numerics.d.ts.map +1 -0
- package/dist/medical/numerics.js +216 -0
- package/dist/medical/numerics.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/red-flag.d.ts +42 -0
- package/dist/medical/red-flag.d.ts.map +1 -0
- package/dist/medical/red-flag.js +161 -0
- package/dist/medical/red-flag.js.map +1 -0
- package/dist/medical/refusal.d.ts +46 -0
- package/dist/medical/refusal.d.ts.map +1 -0
- package/dist/medical/refusal.js +131 -0
- package/dist/medical/refusal.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/retrieval/grounding-critic.d.ts +34 -0
- package/dist/medical/retrieval/grounding-critic.d.ts.map +1 -0
- package/dist/medical/retrieval/grounding-critic.js +153 -0
- package/dist/medical/retrieval/grounding-critic.js.map +1 -0
- package/dist/medical/retrieval/literature.d.ts +78 -0
- package/dist/medical/retrieval/literature.d.ts.map +1 -0
- package/dist/medical/retrieval/literature.js +292 -0
- package/dist/medical/retrieval/literature.js.map +1 -0
- package/dist/medical/retrieval/medline-source.d.ts +72 -0
- package/dist/medical/retrieval/medline-source.d.ts.map +1 -0
- package/dist/medical/retrieval/medline-source.js +120 -0
- package/dist/medical/retrieval/medline-source.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/medical/team.d.ts +15 -0
- package/dist/medical/team.d.ts.map +1 -0
- package/dist/medical/team.js +44 -0
- package/dist/medical/team.js.map +1 -0
- package/dist/medical/types.d.ts +175 -0
- package/dist/medical/types.d.ts.map +1 -0
- package/dist/medical/types.js +8 -0
- package/dist/medical/types.js.map +1 -0
- package/dist/medical/whoop/whoop-client.d.ts +114 -0
- package/dist/medical/whoop/whoop-client.d.ts.map +1 -0
- package/dist/medical/whoop/whoop-client.js +226 -0
- package/dist/medical/whoop/whoop-client.js.map +1 -0
- package/dist/medical/whoop/whoop-sync.d.ts +25 -0
- package/dist/medical/whoop/whoop-sync.d.ts.map +1 -0
- package/dist/medical/whoop/whoop-sync.js +97 -0
- package/dist/medical/whoop/whoop-sync.js.map +1 -0
- package/dist/medical/whoop/whoop-token.d.ts +44 -0
- package/dist/medical/whoop/whoop-token.d.ts.map +1 -0
- package/dist/medical/whoop/whoop-token.js +66 -0
- package/dist/medical/whoop/whoop-token.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/context-handoff.d.ts +60 -60
- package/dist/orchestrator/contract-materialization.d.ts +33 -0
- package/dist/orchestrator/contract-materialization.d.ts.map +1 -0
- package/dist/orchestrator/contract-materialization.js +113 -0
- package/dist/orchestrator/contract-materialization.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/memory/distill.d.ts +4 -1
- package/dist/orchestrator/memory/distill.d.ts.map +1 -1
- package/dist/orchestrator/memory/distill.js +41 -1
- package/dist/orchestrator/memory/distill.js.map +1 -1
- package/dist/orchestrator/memory/fact-detector.d.ts +61 -0
- package/dist/orchestrator/memory/fact-detector.d.ts.map +1 -0
- package/dist/orchestrator/memory/fact-detector.js +153 -0
- package/dist/orchestrator/memory/fact-detector.js.map +1 -0
- package/dist/orchestrator/memory/fact-judge.d.ts +19 -0
- package/dist/orchestrator/memory/fact-judge.d.ts.map +1 -0
- package/dist/orchestrator/memory/fact-judge.js +121 -0
- package/dist/orchestrator/memory/fact-judge.js.map +1 -0
- package/dist/orchestrator/memory/fact-retrieve.d.ts +52 -0
- package/dist/orchestrator/memory/fact-retrieve.d.ts.map +1 -0
- package/dist/orchestrator/memory/fact-retrieve.js +117 -0
- package/dist/orchestrator/memory/fact-retrieve.js.map +1 -0
- package/dist/orchestrator/memory/hygiene.d.ts +66 -0
- package/dist/orchestrator/memory/hygiene.d.ts.map +1 -0
- package/dist/orchestrator/memory/hygiene.js +153 -0
- package/dist/orchestrator/memory/hygiene.js.map +1 -0
- package/dist/orchestrator/memory/reconcile.d.ts +47 -0
- package/dist/orchestrator/memory/reconcile.d.ts.map +1 -0
- package/dist/orchestrator/memory/reconcile.js +116 -0
- package/dist/orchestrator/memory/reconcile.js.map +1 -0
- package/dist/orchestrator/memory/retrieve.d.ts +5 -3
- package/dist/orchestrator/memory/retrieve.d.ts.map +1 -1
- package/dist/orchestrator/memory/retrieve.js +9 -6
- package/dist/orchestrator/memory/retrieve.js.map +1 -1
- 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 +29 -4
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +165 -56
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/planner-agent.d.ts.map +1 -1
- package/dist/orchestrator/planner-agent.js +16 -1
- package/dist/orchestrator/planner-agent.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/selfimprove/eval-guards.d.ts +51 -0
- package/dist/orchestrator/selfimprove/eval-guards.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/eval-guards.js +120 -0
- package/dist/orchestrator/selfimprove/eval-guards.js.map +1 -0
- package/dist/orchestrator/selfimprove/gepa.d.ts +74 -0
- package/dist/orchestrator/selfimprove/gepa.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/gepa.js +227 -0
- package/dist/orchestrator/selfimprove/gepa.js.map +1 -0
- package/dist/orchestrator/selfimprove/replay-harness.d.ts +65 -0
- package/dist/orchestrator/selfimprove/replay-harness.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/replay-harness.js +134 -0
- package/dist/orchestrator/selfimprove/replay-harness.js.map +1 -0
- package/dist/orchestrator/selfimprove/replay-store.d.ts +45 -0
- package/dist/orchestrator/selfimprove/replay-store.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/replay-store.js +119 -0
- package/dist/orchestrator/selfimprove/replay-store.js.map +1 -0
- package/dist/orchestrator/selfimprove/replay-types.d.ts +32 -0
- package/dist/orchestrator/selfimprove/replay-types.d.ts.map +1 -0
- package/dist/orchestrator/selfimprove/replay-types.js +15 -0
- package/dist/orchestrator/selfimprove/replay-types.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 +4 -2
- package/dist/orchestrator/workflow/engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.d.ts +18 -0
- package/dist/orchestrator/workflow/selector.d.ts.map +1 -1
- package/dist/orchestrator/workflow/selector.js +51 -0
- package/dist/orchestrator/workflow/selector.js.map +1 -1
- package/dist/orchestrator/workflow/ts-engine.d.ts +3 -1
- package/dist/orchestrator/workflow/ts-engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/ts-engine.js +2 -2
- package/dist/orchestrator/workflow/ts-engine.js.map +1 -1
- package/dist/orchestrator/workflow/workflow-engine.d.ts +3 -1
- package/dist/orchestrator/workflow/workflow-engine.d.ts.map +1 -1
- package/dist/orchestrator/workflow/workflow-engine.js +3 -3
- package/dist/orchestrator/workflow/workflow-engine.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 +114 -0
- package/dist/state/facts.d.ts.map +1 -0
- package/dist/state/facts.js +218 -0
- package/dist/state/facts.js.map +1 -0
- package/dist/state/guidance.d.ts +37 -0
- package/dist/state/guidance.d.ts.map +1 -0
- package/dist/state/guidance.js +144 -0
- package/dist/state/guidance.js.map +1 -0
- package/dist/state/history.d.ts +2 -2
- package/dist/state/index.d.ts +2 -2
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +2 -2
- package/dist/state/index.js.map +1 -1
- package/dist/state/memory.d.ts +43 -11
- package/dist/state/memory.d.ts.map +1 -1
- package/dist/state/memory.js +93 -15
- package/dist/state/memory.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/pause.d.ts +47 -0
- package/dist/state/pause.d.ts.map +1 -0
- package/dist/state/pause.js +146 -0
- package/dist/state/pause.js.map +1 -0
- 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/state/sprint-state.d.ts +8 -0
- package/dist/state/sprint-state.d.ts.map +1 -1
- package/dist/state/sprint-state.js +32 -1
- package/dist/state/sprint-state.js.map +1 -1
- package/dist/teams/registry.d.ts +16 -0
- package/dist/teams/registry.d.ts.map +1 -0
- package/dist/teams/registry.js +70 -0
- package/dist/teams/registry.js.map +1 -0
- package/dist/teams/types.d.ts +25 -0
- package/dist/teams/types.d.ts.map +1 -0
- package/dist/teams/types.js +2 -0
- package/dist/teams/types.js.map +1 -0
- 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 +22 -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,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bober.design
|
|
3
|
+
description: Frontend design team workflow — build premium, non-generic landing pages and UI through a five-role pipeline (intake → art direction → build → screenshot critique → polish). Use when building or redesigning any user-facing page where visual quality matters: landing pages, portfolios, marketing sites, product pages, dashboards with a public face. Triggers on "build a landing page", "make this look premium", "design a site", "this looks too AI".
|
|
4
|
+
argument-hint: <what-to-build-or-improve>
|
|
5
|
+
handoffs:
|
|
6
|
+
- label: "Plan Feature"
|
|
7
|
+
command: /bober-plan
|
|
8
|
+
prompt: "Plan the engineering work behind this designed page"
|
|
9
|
+
- label: "E2E Tests"
|
|
10
|
+
command: /bober-playwright
|
|
11
|
+
prompt: "Write Playwright E2E tests for the designed page"
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# bober.design — Frontend Design Team Workflow
|
|
15
|
+
|
|
16
|
+
You are running the **bober.design** skill: a five-role design team compressed into one
|
|
17
|
+
pipeline. Its single purpose is output that could not be mistaken for AI-generated — pages with
|
|
18
|
+
a point of view, built to a hard quality floor.
|
|
19
|
+
|
|
20
|
+
The pipeline exists because genericness is not a vague quality problem; it is a named,
|
|
21
|
+
enumerable, machine-detectable failure mode. The team designs against an explicit catalog of
|
|
22
|
+
AI tells (see the **Anti-Slop Catalog** reference), plans before building, critiques
|
|
23
|
+
screenshots instead of trusting code, and gates on deterministic checks.
|
|
24
|
+
|
|
25
|
+
**The Iron Law of this skill: no design decision happens outside DESIGN.md during the build.**
|
|
26
|
+
Plan first, then build the plan. A builder that improvises palette or type on the fly produces
|
|
27
|
+
the average of its training data — that average is the enemy.
|
|
28
|
+
|
|
29
|
+
## The five roles
|
|
30
|
+
|
|
31
|
+
| Role | Who | Output |
|
|
32
|
+
|------|-----|--------|
|
|
33
|
+
| 1. Intake | You (orchestrator), interactive | Brief: subject, audience, job, references, constraints |
|
|
34
|
+
| 2. Art direction | `bober-art-director` subagent | `.bober/design/DESIGN.md` (the contract) |
|
|
35
|
+
| 3. Build | `bober-frontend-builder` subagent | Working code, DESIGN.md as law |
|
|
36
|
+
| 4. Critique | `bober-design-critic` subagent | Screenshot-verified findings + slop score + verdict |
|
|
37
|
+
| 5. Polish | builder again, one batch | Final pass: typography, motion, copy sweep |
|
|
38
|
+
|
|
39
|
+
Steps 3–4 loop (max 3 iterations) until the critic passes.
|
|
40
|
+
|
|
41
|
+
## Step 0 — Applicability & survey
|
|
42
|
+
|
|
43
|
+
- If the task has no visual surface (backend, infra, pure logic), stop and use the right skill.
|
|
44
|
+
- Survey the project: greenfield or existing? Stack (plain HTML / Vite+React / Next.js /
|
|
45
|
+
Astro…)? If greenfield with no stack preference, default to a single static page first
|
|
46
|
+
(HTML + modern CSS + minimal JS) — design quality is stack-independent and a static page
|
|
47
|
+
iterates fastest; migrate into a framework after the design is approved.
|
|
48
|
+
- Check for installed substrate (all optional, never required):
|
|
49
|
+
- **ui-ux-pro-max** plugin (`~/.claude/plugins/marketplaces/ui-ux-pro-max-skill/.claude/skills/ui-ux-pro-max/scripts/search.py`):
|
|
50
|
+
a searchable database of styles, palettes, font pairings, and per-stack guidelines. Treat
|
|
51
|
+
it as a *candidate generator only* — its recommendations trend generic (it will happily
|
|
52
|
+
suggest Inter/Inter for a premium portfolio), so everything it returns must pass the
|
|
53
|
+
art director's anti-slop gate.
|
|
54
|
+
- **frontend-design** skill (Anthropic) — its philosophy is already absorbed into this
|
|
55
|
+
pipeline; don't invoke it redundantly inside this workflow.
|
|
56
|
+
- **impeccable** (`npx impeccable detect`) and **axe-core** — deterministic gates for the
|
|
57
|
+
critic, used if available.
|
|
58
|
+
|
|
59
|
+
## Step 1 — Intake (interactive; you run this, not a subagent)
|
|
60
|
+
|
|
61
|
+
Subagents can't talk to the user. All discovery happens here, and its quality caps the quality
|
|
62
|
+
of everything downstream.
|
|
63
|
+
|
|
64
|
+
### 1a. References (worth more than any description)
|
|
65
|
+
|
|
66
|
+
Ask the user for visual references before anything else:
|
|
67
|
+
|
|
68
|
+
- A `reference/` folder in the project (screenshots, section by section — hero, content
|
|
69
|
+
sections, footer, detail pages, loading states — named or annotated for which section each
|
|
70
|
+
file informs). Read every image.
|
|
71
|
+
- Or URLs of sites they admire (capture screenshots via Playwright if available).
|
|
72
|
+
- **Borrow from several references, never copy one site.** For each reference, record WHAT
|
|
73
|
+
specifically to take (the spacing? type contrast? mood? one interaction?) — one sentence per
|
|
74
|
+
image, confirmed with the user if ambiguous.
|
|
75
|
+
- No references? Proceed — the art director designs from the subject's own world — but say
|
|
76
|
+
that references would raise the ceiling and give the user a moment to add some.
|
|
77
|
+
|
|
78
|
+
### 1b. Clarifying questions (one batch, 4–6 questions max)
|
|
79
|
+
|
|
80
|
+
Run two discovery tracks in the same batch:
|
|
81
|
+
|
|
82
|
+
**Vibe discovery:** subject and its world (materials, instruments, era, vernacular) ·
|
|
83
|
+
audience and the page's single job · 3-5 adjectives the user wants a stranger to feel ·
|
|
84
|
+
what competitors/peers look like (so we can NOT look like that) · any brand constraints
|
|
85
|
+
(existing colors/fonts/logo) · motion appetite (calm ↔ theatrical).
|
|
86
|
+
|
|
87
|
+
**Copy strategy:** what the thing actually does, in the user's own words · the one action a
|
|
88
|
+
visitor should take · proof available (real numbers, real names, real work).
|
|
89
|
+
|
|
90
|
+
Also: target stack, single-mode or light+dark, and any hard constraints (CMS, existing design
|
|
91
|
+
system, performance budget).
|
|
92
|
+
|
|
93
|
+
Use AskUserQuestion for the choice-shaped items; free text for the open ones. Do not proceed
|
|
94
|
+
until the subject, audience, and job are concrete. Real content only from here on — collect
|
|
95
|
+
actual copy inputs, names, numbers, and image assets now, not lorem ipsum later.
|
|
96
|
+
|
|
97
|
+
### 1c. Write the brief
|
|
98
|
+
|
|
99
|
+
Distill intake into `.bober/design/BRIEF.md`: subject/audience/job, reference notes (per-image,
|
|
100
|
+
what-to-take), both discovery tracks' answers, constraints, assets inventory. This is the art
|
|
101
|
+
director's entire knowledge of the user's intent — write it like a handoff, not notes.
|
|
102
|
+
|
|
103
|
+
## Step 2 — Art direction
|
|
104
|
+
|
|
105
|
+
Spawn **bober-art-director** with: the full text of BRIEF.md, the reference image paths (it can
|
|
106
|
+
Read them), the Anti-Slop Catalog and DESIGN.md template references (inlined below in this
|
|
107
|
+
command file — pass them verbatim), and `.bober/design/history.md` if it exists.
|
|
108
|
+
|
|
109
|
+
The art director returns DESIGN.md content after running its internal generic-twin self-critique.
|
|
110
|
+
Write it to `.bober/design/DESIGN.md`.
|
|
111
|
+
|
|
112
|
+
**Approval gate:** present to the user — the named vibe, the two influences and their collision,
|
|
113
|
+
the palette table, the type pairing, the signature element, the wildcard, and the Slop Ledger.
|
|
114
|
+
Ask: approve, or adjust? Iterate the art director (not the builder) until approved. This is the
|
|
115
|
+
cheapest point in the pipeline to change direction; after this, DESIGN.md is frozen for the
|
|
116
|
+
build. In a fully autonomous run (explicitly requested), apply the critic's brief-level review
|
|
117
|
+
instead and proceed.
|
|
118
|
+
|
|
119
|
+
Append the history ledger line to `.bober/design/history.md` once approved.
|
|
120
|
+
|
|
121
|
+
## Step 3 — Build
|
|
122
|
+
|
|
123
|
+
Spawn **bober-frontend-builder** with: DESIGN.md verbatim, the stack decision, the asset paths,
|
|
124
|
+
the Anti-Slop Catalog, and (iteration ≥2) the critic's full findings batch.
|
|
125
|
+
|
|
126
|
+
Build order: tokens first (CSS variables / theme file generated from DESIGN.md §3–4 — the only
|
|
127
|
+
place hex values may live), then section by section per the §5 wireframes, then the signature
|
|
128
|
+
element, then the motion plan. The builder self-verifies (builds clean, renders, no console
|
|
129
|
+
errors) before returning.
|
|
130
|
+
|
|
131
|
+
## Step 4 — Critique loop
|
|
132
|
+
|
|
133
|
+
Spawn **bober-design-critic** with: DESIGN.md, the Critique Rubric reference, how to run the
|
|
134
|
+
page (dev server command or file path), and the iteration number.
|
|
135
|
+
|
|
136
|
+
- Critic returns a verdict + findings (screenshot-verified, severity-ranked, slop score).
|
|
137
|
+
- `fail` → collect ALL findings into ONE batch (batched fixes beat drip-fed fixes; the builder
|
|
138
|
+
sees the full picture and fixes root causes, not symptoms), re-spawn the builder, re-critique.
|
|
139
|
+
Max 3 iterations; if still failing, stop and present the open findings honestly to the user
|
|
140
|
+
with the critic's screenshots — never silently ship a failing page.
|
|
141
|
+
- `design-brief` findings (page faithful to a weak DESIGN.md) → route to the art director,
|
|
142
|
+
not the builder, and re-run from Step 2 with the user's awareness.
|
|
143
|
+
- `pass` → Step 5.
|
|
144
|
+
|
|
145
|
+
## Step 5 — Polish
|
|
146
|
+
|
|
147
|
+
One final builder pass, one batch, guided by the critic's MEDIUM/NIT findings plus:
|
|
148
|
+
|
|
149
|
+
- **Typography micro-pass:** optical alignment, widows/orphans in headings, tabular figures on
|
|
150
|
+
data, letter-spacing on all-caps labels.
|
|
151
|
+
- **Motion audit:** every animation earns its place per DESIGN.md §8; reduced-motion path
|
|
152
|
+
actually verified.
|
|
153
|
+
- **Copy sweep:** the anti-slop copy sweep from the Copy Guide, applied line by line.
|
|
154
|
+
|
|
155
|
+
Then a final critic smoke pass (phases 1, 3, 8 + slop lint only) to confirm the polish didn't
|
|
156
|
+
regress anything.
|
|
157
|
+
|
|
158
|
+
## Step 6 — Report
|
|
159
|
+
|
|
160
|
+
Present to the user: the final 1440/768/375 screenshots, the named vibe and signature element
|
|
161
|
+
(one line each), the slop score and a11y result, how to run it, and what to iterate next.
|
|
162
|
+
Findings you chose not to fix stay listed — the user decides, not silence.
|
|
163
|
+
|
|
164
|
+
## Working with the sprint pipeline
|
|
165
|
+
|
|
166
|
+
For larger builds, this skill composes with the standard bober pipeline: run Steps 0–2 here,
|
|
167
|
+
then hand DESIGN.md to `/bober-plan` as a context file so sprint contracts inherit the design
|
|
168
|
+
contract, with `bober-design-critic` added as an evaluation strategy alongside typecheck/tests.
|
|
169
|
+
The design contract and the engineering contract stay separate documents with separate
|
|
170
|
+
evaluators.
|
|
171
|
+
|
|
172
|
+
## Error handling
|
|
173
|
+
|
|
174
|
+
- **Playwright unavailable to the critic** → critique falls back to static analysis of built
|
|
175
|
+
output + explicit note that visual verification was skipped; treat any such review as
|
|
176
|
+
provisional, never as a pass.
|
|
177
|
+
- **Fonts fail to load in review** (computed font-family shows a fallback) → CRITICAL: the
|
|
178
|
+
design was reviewed as a different design. Fix loading before judging anything visual.
|
|
179
|
+
- **User rejects the vibe late (during build/critique)** → back to Step 2; do not patch a
|
|
180
|
+
rejected direction section by section. Changing DESIGN.md mid-build without re-approval is
|
|
181
|
+
a pipeline violation.
|
|
182
|
+
- **Iteration budget exhausted** → present state honestly with screenshots and open findings.
|
|
183
|
+
|
|
184
|
+
## Attribution
|
|
185
|
+
|
|
186
|
+
The taste layer of this pipeline adapts Anthropic's `frontend-design` skill (three default
|
|
187
|
+
looks, signature element, two-pass plan/critique, writing-as-design). The genericness catalog
|
|
188
|
+
synthesizes Impeccable (pbakaus), Krebs' Show HN slop audit, and 2389-research's landing-page
|
|
189
|
+
system (entropy rules, named vibes, litmus gates). The critique protocol adapts OneRedOak's
|
|
190
|
+
design-review workflow (Live Environment First, 8 phases, three viewports).
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Anti-Slop Catalog — AI-Generic Tells, Blocklist, and Entropy Rules
|
|
2
|
+
|
|
3
|
+
This is the shared genericness knowledge base for the bober design team. The art director designs
|
|
4
|
+
against it, the builder is constrained by it, and the critic scores against it.
|
|
5
|
+
|
|
6
|
+
**How to apply it:** every rule here is a **scored lint, not an absolute ban**. Any single tell can
|
|
7
|
+
be the right choice for a specific brief — the failure mode is *stacking defaults*. An empirical
|
|
8
|
+
Playwright audit of 1,590 Show HN landing pages (Krebs, 2026) scored 4+ tells as "heavy slop" (22%
|
|
9
|
+
of pages), 2–3 as mild (32%), 0–1 as clean (46%). Target: **0–1 tells, and any tell present must be
|
|
10
|
+
a justified, written choice in DESIGN.md** — the brief's own words always win, including when the
|
|
11
|
+
brief explicitly asks for a "banned" look.
|
|
12
|
+
|
|
13
|
+
## The three whole-page default looks (never spend a free axis on these)
|
|
14
|
+
|
|
15
|
+
AI-generated design clusters around three complete looks that appear regardless of subject:
|
|
16
|
+
|
|
17
|
+
1. **Warm cream** (~#F4F1EA) background + high-contrast serif display + terracotta accent
|
|
18
|
+
2. **Near-black** background + single acid-green or vermilion accent
|
|
19
|
+
3. **Broadsheet**: hairline rules, zero border-radius, dense newspaper columns
|
|
20
|
+
|
|
21
|
+
All three are legitimate *when the brief pins them down*. When the brief leaves the visual
|
|
22
|
+
direction free, arriving at any of them means the direction was defaulted, not designed.
|
|
23
|
+
|
|
24
|
+
## Component & layout tells (each +1 slop score)
|
|
25
|
+
|
|
26
|
+
- Pill "badge" above the hero H1 ("✨ Now in beta", "Backed by…")
|
|
27
|
+
- Grid of identical icon-topped feature cards (3 or 6, same size, same radius)
|
|
28
|
+
- Numbered 1-2-3 "how it works" step sequence when the content is not truly sequential
|
|
29
|
+
- Stat banner row ("10k+ users · 99.9% uptime · 4.9★")
|
|
30
|
+
- Big number + small label + gradient accent as the hero (the template answer)
|
|
31
|
+
- Rounded-corner card grids as the answer to every layout question
|
|
32
|
+
- Dark mode with glowing box-shadows around cards
|
|
33
|
+
- Decorative gradient text on headlines
|
|
34
|
+
- Centered everything: every section a centered column with a centered heading
|
|
35
|
+
|
|
36
|
+
## Typography tells
|
|
37
|
+
|
|
38
|
+
- One font family for the entire page (most commonly Inter)
|
|
39
|
+
- The overused pool: **Inter, Roboto, Arial, Helvetica, Space Grotesk, Lato, Open Sans,
|
|
40
|
+
Source Sans Pro** — and the "escape hatch" combos that became their own tell:
|
|
41
|
+
Geist, Instrument Serif (already flagged as "the newest reflex")
|
|
42
|
+
- No deliberate type scale: sizes that drift (17/19/22px) instead of a named scale
|
|
43
|
+
|
|
44
|
+
## Color tells
|
|
45
|
+
|
|
46
|
+
- Purple/violet gradients ("VibeCode Purple"), generic blue-to-purple
|
|
47
|
+
- Cyan-on-dark "tech" scheme
|
|
48
|
+
- "The Stripe palette" — soft blurple gradients on white
|
|
49
|
+
- Remembered hex codes: reaching for #6366F1, #8B5CF6, #10B981 from muscle memory
|
|
50
|
+
|
|
51
|
+
## Copy tells (probabilistic — these predate LLMs; enforce specificity, don't just ban phrases)
|
|
52
|
+
|
|
53
|
+
- Averaged SaaS headlines: "Build the future of work", "Your all-in-one platform",
|
|
54
|
+
"Scale without limits", "Supercharge your workflow"
|
|
55
|
+
- **Headline litmus test (hard gate):** if a visitor sees ONLY the headline and nothing else,
|
|
56
|
+
will they know exactly what this product/person/thing is? If not, rewrite.
|
|
57
|
+
- Em-dash-heavy triads, "It's not X, it's Y", benefit-benefit-benefit rhythm
|
|
58
|
+
- Feature names that describe the implementation ("AI-Powered Engine") instead of what the
|
|
59
|
+
user gets
|
|
60
|
+
|
|
61
|
+
## Motion tells
|
|
62
|
+
|
|
63
|
+
- Bounce/elastic easing on UI elements
|
|
64
|
+
- Everything fades up on scroll, uniformly, at the same speed
|
|
65
|
+
- Scattered micro-animations instead of one orchestrated moment
|
|
66
|
+
- Animations >500ms, or animating width/height/top/left instead of transform/opacity
|
|
67
|
+
|
|
68
|
+
## Replacement pools (rotate — never reuse the previous project's pick)
|
|
69
|
+
|
|
70
|
+
**Display faces** (pair with a distinct body face, never self-paired): Newsreader, Playfair
|
|
71
|
+
Display, Clash Display, Outfit, Manrope, Satoshi, Bricolage Grotesque, Fraunces, Zodiak,
|
|
72
|
+
General Sans, Cabinet Grotesk, Big Shoulders, Crimson Pro. For developer products, JetBrains
|
|
73
|
+
Mono / IBM Plex Mono as a *utility* face.
|
|
74
|
+
**Icons:** Phosphor, Heroicons, Iconify Solar — one set per project, one stroke weight.
|
|
75
|
+
Lucide is now overused; avoid unless the project already uses it. Never emoji as icons.
|
|
76
|
+
|
|
77
|
+
⚠️ **This pool rots.** Everyone reading advice like this switches to the same replacements, which
|
|
78
|
+
is how Instrument Serif became a tell within months. The pools are a floor, not the method. The
|
|
79
|
+
method is the entropy rules below.
|
|
80
|
+
|
|
81
|
+
## Entropy rules (anti-convergence — these beat any static list)
|
|
82
|
+
|
|
83
|
+
1. **No hex-code memory.** Generate colors fresh from real-world references in the subject's
|
|
84
|
+
world (a material, a place, an era, a brand artifact) — never from remembered defaults.
|
|
85
|
+
Name each color after its source ("oxidized copper", not "green-500").
|
|
86
|
+
2. **Rotate the display face.** Check `.bober/design/history.md` for faces used in previous
|
|
87
|
+
projects; never repeat the last three.
|
|
88
|
+
3. **Two influences, visible collision.** Pick two unrelated influences discovered during
|
|
89
|
+
intake (e.g. "Swiss timetables × phosphor CRT terminals") and make the collision visible
|
|
90
|
+
in the design. One influence produces a theme; two produce an identity.
|
|
91
|
+
4. **One wildcard.** Include one deliberate element that doesn't "fit" — a texture, an odd
|
|
92
|
+
alignment, a typographic quirk. Perfectly coherent = obviously generated.
|
|
93
|
+
5. **Name the vibe.** Write down a 2–4 word name for the aesthetic direction ("brutalist
|
|
94
|
+
apothecary", "midnight radio"). Unnamed vibes become generic. Every subsequent decision
|
|
95
|
+
is tested against the name.
|
|
96
|
+
|
|
97
|
+
## The AI Slop Test (final gate, applied by the critic)
|
|
98
|
+
|
|
99
|
+
> If someone saw this page and was told "AI made this", would they believe it immediately?
|
|
100
|
+
|
|
101
|
+
If yes — the design has failed, regardless of how many individual rules pass. Identify which
|
|
102
|
+
tells create that impression and redesign those. If no — ship it.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# DESIGN.md — the Design Brief Contract
|
|
2
|
+
|
|
3
|
+
The art director produces `.bober/design/DESIGN.md`. It is the **single source of truth** for the
|
|
4
|
+
build: no design decision may be made outside this file during the build phase. If the builder
|
|
5
|
+
needs a value that isn't in DESIGN.md, that is a DESIGN.md bug — the orchestrator routes the
|
|
6
|
+
question back to art direction, the builder never improvises one.
|
|
7
|
+
|
|
8
|
+
Pages may add scoped deviations in `.bober/design/pages/<page>.md` (same sections, overrides
|
|
9
|
+
only). When building a page, its override file — if present — wins over the master.
|
|
10
|
+
|
|
11
|
+
## Required sections
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# DESIGN — <project name>
|
|
15
|
+
|
|
16
|
+
## 1. Subject & Job
|
|
17
|
+
One concrete subject, its audience, and the page's single job. If the user's brief didn't pin
|
|
18
|
+
these down, the intake answers did. Real content only — no lorem ipsum anywhere in the build.
|
|
19
|
+
|
|
20
|
+
## 2. Vibe
|
|
21
|
+
**Name:** <2–4 word named direction, e.g. "brutalist apothecary">
|
|
22
|
+
**Influences (exactly two, unrelated):** <influence A> × <influence B> — and one sentence on
|
|
23
|
+
where their collision will be visible on the page.
|
|
24
|
+
**Freshness check:** how this direction differs from (a) the three default looks, (b) the last
|
|
25
|
+
entry in .bober/design/history.md, (c) what a generic competitor page looks like.
|
|
26
|
+
|
|
27
|
+
## 3. Color Tokens (4–6, named after their real-world source)
|
|
28
|
+
| Token | Hex | Source | Role |
|
|
29
|
+
|-------|-----|--------|------|
|
|
30
|
+
| --color-ink | #1A1B18 | wet slate roof | foreground |
|
|
31
|
+
| ... | | | background / accent / surface / muted |
|
|
32
|
+
Include the fg/bg contrast ratios for every text-bearing pair (must meet 4.5:1 body, 3:1 large).
|
|
33
|
+
State light/dark behavior: single-mode (justify) or both (both fully specified).
|
|
34
|
+
|
|
35
|
+
## 4. Type Roles
|
|
36
|
+
| Role | Face | Weights | Scale steps |
|
|
37
|
+
Display / Body / Utility (captions, data). Display and body are different families. State the
|
|
38
|
+
type scale as named steps (e.g. 13/16/20/28/44/72) and where each is used. State what makes
|
|
39
|
+
this pairing specific to the brief — "it looks nice" is not a reason.
|
|
40
|
+
|
|
41
|
+
## 5. Layout Concept
|
|
42
|
+
One-sentence layout thesis, then ASCII wireframes per section (hero, each content section,
|
|
43
|
+
footer). Structural devices (numbering, eyebrows, dividers) listed with the information each
|
|
44
|
+
one encodes — a device that encodes nothing gets cut.
|
|
45
|
+
|
|
46
|
+
## 6. Signature Element
|
|
47
|
+
The ONE thing this page will be remembered by (an interaction, a hero treatment, a typographic
|
|
48
|
+
move). One paragraph: what it is, why it embodies this subject, and its reduced-motion fallback.
|
|
49
|
+
Spend the boldness budget here; everything else stays quiet.
|
|
50
|
+
|
|
51
|
+
## 7. Wildcard
|
|
52
|
+
One deliberate misfit detail and where it lives.
|
|
53
|
+
|
|
54
|
+
## 8. Motion Plan
|
|
55
|
+
The one orchestrated moment (usually page load or first scroll), listed hover/press
|
|
56
|
+
micro-interactions, duration/easing tokens (150–300ms micro, ≤400ms transitions, ease-out in /
|
|
57
|
+
ease-in out, no bounce on UI), and the prefers-reduced-motion story. Fewer, better.
|
|
58
|
+
|
|
59
|
+
## 9. Copy Deck
|
|
60
|
+
Final headline (must pass the litmus test), subhead, section headings, CTA labels (verbs that
|
|
61
|
+
say what happens: "Save changes", not "Submit"), and the empty/error-state voice. Copy is design
|
|
62
|
+
material: same intentionality as spacing and color.
|
|
63
|
+
|
|
64
|
+
## 10. Slop Ledger
|
|
65
|
+
Every anti-slop rule this design consciously breaks, each with a one-line justification tied to
|
|
66
|
+
the brief. An empty ledger and a rule-breaking design = art direction failure. Unjustified
|
|
67
|
+
entries = the critic bounces it.
|
|
68
|
+
|
|
69
|
+
## 11. Quality Floor (non-negotiable, inherited — restate, don't relitigate)
|
|
70
|
+
Responsive 375/768/1440. Visible keyboard focus. WCAG 2.2 AA contrast. Semantic HTML.
|
|
71
|
+
prefers-reduced-motion respected. No horizontal scroll on mobile. Touch targets ≥44px.
|
|
72
|
+
Real content, no placeholders.
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## History ledger
|
|
76
|
+
|
|
77
|
+
After every accepted DESIGN.md, append one line to `.bober/design/history.md`:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
2026-07-10 | <project> | vibe: <name> | display: <face> | body: <face> | palette: <3 main hex>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
The art director MUST read this file first and avoid repeating the last three display faces,
|
|
84
|
+
vibe names, and palettes. This is what keeps project #5 from converging with project #1.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Design Critique Rubric — Live-Environment Review Protocol
|
|
2
|
+
|
|
3
|
+
Used by `bober-design-critic`. Principle: **Live Environment First** — assess the rendered,
|
|
4
|
+
interactive page before reading a line of source. Static code analysis alone is rejected as a
|
|
5
|
+
review method; a picture is worth 1000 tokens.
|
|
6
|
+
|
|
7
|
+
## Setup
|
|
8
|
+
|
|
9
|
+
1. Start the dev server (or open the built HTML) and navigate with Playwright.
|
|
10
|
+
2. Capture the baseline screenshot set BEFORE judging anything:
|
|
11
|
+
- **1440px** (desktop), **768px** (tablet), **375px** (mobile) — full-page screenshot each
|
|
12
|
+
- Dark mode variants if DESIGN.md specifies dual-mode
|
|
13
|
+
3. Read `.bober/design/DESIGN.md` (and the page override, if any). The review judges the page
|
|
14
|
+
against DESIGN.md and the anti-slop catalog — not against the critic's personal taste.
|
|
15
|
+
If the page is faithful to DESIGN.md but DESIGN.md itself is weak, file that as a
|
|
16
|
+
`design-brief` finding, not a build finding.
|
|
17
|
+
|
|
18
|
+
## The eight phases (run in order, all mandatory)
|
|
19
|
+
|
|
20
|
+
| # | Phase | What to check |
|
|
21
|
+
|---|-------|---------------|
|
|
22
|
+
| 1 | Preparation | Page loads clean; no 404 assets; no console errors/warnings; fonts actually load (check computed font-family — a fallback serving Arial is a CRITICAL finding) |
|
|
23
|
+
| 2 | Interaction & user flow | Walk the primary user journey click-by-click. Every interactive element: hover, press, focus, disabled states present and on-style. CTAs do what their label says |
|
|
24
|
+
| 3 | Responsiveness | At each viewport: no horizontal scroll, no overlap/clipping, no orphaned layouts. Screenshot evidence for every finding |
|
|
25
|
+
| 4 | Visual polish | Spacing rhythm consistent with the scale; alignment true; type scale steps match DESIGN.md; images not stretched; visual hierarchy guides the eye to the one primary action |
|
|
26
|
+
| 5 | Accessibility (WCAG 2.2 AA) | Keyboard-only pass: tab order matches visual order, focus always visible, no traps, escape routes in modals. Contrast-check every text/bg pair. Alt text, labels, heading hierarchy, aria on icon-only buttons. Run axe if available (see gates) |
|
|
27
|
+
| 6 | Robustness | Long content, missing images, empty states, slow network (throttle), zoom 200%, prefers-reduced-motion actually reduces motion |
|
|
28
|
+
| 7 | Code health | ONLY now read source: token usage (no raw hex in components), CSS specificity sanity, semantic HTML, no dead selectors that cancel each other |
|
|
29
|
+
| 8 | Content & console | Copy against the copy deck: headline litmus, CTA verb rule, no lorem ipsum, no truncated text. Final console sweep after all interactions |
|
|
30
|
+
|
|
31
|
+
## Deterministic gates (run after the eight phases)
|
|
32
|
+
|
|
33
|
+
- **Slop lint:** if `npx impeccable detect` is available (requires network on first run), run it
|
|
34
|
+
with `--json` and record the score. Otherwise run the built-in checks: computed font-family
|
|
35
|
+
vs the overused pool; count of hero badge / icon-card grid / stat row / numbered steps
|
|
36
|
+
patterns in the DOM; gradient usage on text; purple-family dominance. Score = number of
|
|
37
|
+
tells present. **0–1 pass · 2–3 warn · 4+ fail.** A tell justified in DESIGN.md's Slop
|
|
38
|
+
Ledger does not count toward the score.
|
|
39
|
+
- **Accessibility scan:** if axe-core is available (`npx @axe-core/cli <url>` or injected via
|
|
40
|
+
Playwright evaluate), run it. Serious/critical violations are BLOCKER findings. If axe is
|
|
41
|
+
unavailable, the manual phase-5 pass stands but note the gap in the report.
|
|
42
|
+
- **The AI Slop Test** (from the anti-slop catalog): one honest verdict, looking at the 1440px
|
|
43
|
+
screenshot cold: "would a stranger immediately believe AI made this?" Yes → FAIL with the
|
|
44
|
+
specific tells that create the impression.
|
|
45
|
+
|
|
46
|
+
## Finding format & severities
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
[BLOCKER] breaks function, accessibility, or DESIGN.md's quality floor — must fix
|
|
50
|
+
[HIGH] visibly cheapens the page or violates DESIGN.md — fix this iteration
|
|
51
|
+
[MEDIUM] polish item — fix if the iteration budget allows
|
|
52
|
+
[NIT] preference — note, prefixed "Nit:", never blocks
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Every finding: `severity | phase | viewport | what + where | evidence (screenshot ref) |
|
|
56
|
+
suggested fix direction`. Findings describe **problems, not prescriptions** — the builder owns
|
|
57
|
+
the how. Praise what works in one line first; it anchors what must not regress.
|
|
58
|
+
|
|
59
|
+
## Verdict
|
|
60
|
+
|
|
61
|
+
`pass` — no BLOCKER/HIGH, slop score ≤1, AI Slop Test passed.
|
|
62
|
+
`fail` — anything else, with the full findings list for the next build iteration.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Copy Guide — Writing as Design Material
|
|
2
|
+
|
|
3
|
+
Words appear in a design for one reason: to make it easier to understand, and therefore easier
|
|
4
|
+
to use. They are design material, not decoration — bring the same intentionality to copy that
|
|
5
|
+
you bring to spacing and color. Copy can make a design feel as templated as the visuals can.
|
|
6
|
+
|
|
7
|
+
## Headline discipline
|
|
8
|
+
|
|
9
|
+
- **The litmus test (hard gate):** seeing ONLY the headline, does a visitor know exactly what
|
|
10
|
+
this is? "Build the future of work" fails. "Invoices your clients pay in one tap" passes.
|
|
11
|
+
- Specific beats clever, every time. Numbers, nouns from the subject's world, and verbs the
|
|
12
|
+
audience uses beat abstractions ("platform", "solution", "workflow", "supercharge").
|
|
13
|
+
- The headline is written from the visitor's side of the screen — what they get, not what the
|
|
14
|
+
system does.
|
|
15
|
+
|
|
16
|
+
## Voice rules
|
|
17
|
+
|
|
18
|
+
- Write from the end user's side: name things by what people control and recognize, never by
|
|
19
|
+
how the system is built. A person manages *notifications*, not *webhook config*.
|
|
20
|
+
- Active voice by default. A control says exactly what happens when it's used: "Save changes",
|
|
21
|
+
not "Submit". An action keeps its name through the whole flow — the button that says
|
|
22
|
+
"Publish" produces a toast that says "Published".
|
|
23
|
+
- Plain verbs, sentence case, no filler. Tone matched to the brand and audience, then held
|
|
24
|
+
consistent — the vocabulary of an interface is its signposting.
|
|
25
|
+
- Let each element do exactly one job: a label labels, an example demonstrates, nothing quietly
|
|
26
|
+
does double duty.
|
|
27
|
+
|
|
28
|
+
## Failure & emptiness are direction, not mood
|
|
29
|
+
|
|
30
|
+
- Errors state what went wrong and how to fix it, in the interface's voice. They never
|
|
31
|
+
apologize and are never vague ("Invalid input" is banned; "Card number is 15 digits — Amex
|
|
32
|
+
cards start with 34 or 37" passes).
|
|
33
|
+
- An empty screen is an invitation to act: what this space is for + the one action to fill it.
|
|
34
|
+
|
|
35
|
+
## Anti-slop copy sweep (polish pass)
|
|
36
|
+
|
|
37
|
+
- Kill averaged-SaaS phrasing: "all-in-one", "seamless", "supercharge", "unlock", "empower",
|
|
38
|
+
"take X to the next level", "built for the modern Y".
|
|
39
|
+
- Kill rhythm tells: em-dash triads, "It's not X, it's Y", three-benefit drumbeats.
|
|
40
|
+
- Every feature name says what the user gets, not the implementation ("Search that reads
|
|
41
|
+
handwriting", not "AI-Powered OCR Engine").
|
|
42
|
+
- Read every sentence asking: could this appear on a competitor's page unchanged? If yes,
|
|
43
|
+
it isn't copy yet — it's filler.
|
|
@@ -42,7 +42,21 @@ Based on the user's answers, determine the appropriate `mode` and `preset`:
|
|
|
42
42
|
|
|
43
43
|
The planner should be able to plan ANY type of project -- web apps, APIs, smart contracts, CLI tools, mobile apps, libraries, data pipelines, etc. Do not limit the user to predefined categories.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
**Write `bober.config.json` now — do not wait for further confirmation, and do NOT try to read `src/config/*.ts` or `templates/*` (those source files are absent in a plugin or standalone install; only relative project paths resolve).** Use the self-contained default below as your starting point. Set `project.name`, `project.mode` (`"greenfield"` or `"brownfield"`), and `project.description` from the user's answers; add `project.preset` and/or `project.stack` when they apply. Auto-detect the `commands` by examining `package.json`, `Cargo.toml`, `Anchor.toml`, `hardhat.config.*`, `foundry.toml`, or other manifests — omit any command you cannot detect rather than guessing.
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"project": { "name": "<name>", "mode": "greenfield", "description": "<what they are building>" },
|
|
50
|
+
"planner": { "maxClarifications": 5, "model": "opus" },
|
|
51
|
+
"generator": { "model": "sonnet", "maxTurnsPerSprint": 50, "autoCommit": true, "branchPattern": "bober/{feature-name}" },
|
|
52
|
+
"evaluator": { "model": "sonnet", "strategies": [ { "type": "build", "required": true } ], "maxIterations": 3 },
|
|
53
|
+
"sprint": { "maxSprints": 10, "requireContracts": true, "sprintSize": "medium" },
|
|
54
|
+
"pipeline": { "maxIterations": 20, "requireApproval": false, "contextReset": "always" },
|
|
55
|
+
"commands": {}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
`project.preset` (optional) is one of `"nextjs"`, `"react-vite"`, `"solidity"`, `"anchor"`, `"api-node"`, `"python-api"`; `project.stack` (optional) is a free-form object such as `{ "frontend": "react", "backend": "express", "database": "postgresql" }`. For richer stacks, add the matching `evaluator.strategies` (e.g. `typecheck`, `lint`, `unit-test`, `playwright`) alongside their `commands`. After writing the file, verify it exists on disk, then continue — the config now exists, so the "does not exist" branch must not trigger again.
|
|
46
60
|
|
|
47
61
|
Then create the `.bober/` directory structure:
|
|
48
62
|
```bash
|
|
@@ -74,8 +74,9 @@ ORCHESTRATOR (you — this session)
|
|
|
74
74
|
Read `bober.config.json`. If it does not exist:
|
|
75
75
|
- Ask the user the minimal initialization questions: project name, mode (greenfield vs brownfield), and what they are building.
|
|
76
76
|
- Determine the appropriate `mode` and `preset` (if any) from the user's description.
|
|
77
|
-
-
|
|
78
|
-
- Create the `.bober/` directory structure.
|
|
77
|
+
- **Write `bober.config.json` immediately** using the self-contained default config embedded in the `bober.plan` skill (Step 1) — do NOT wait for further confirmation, and do NOT try to read `src/config/*.ts` or `templates/*` (those source files are absent in a plugin or standalone install). Auto-detect `commands` from the project manifests; omit any you cannot detect.
|
|
78
|
+
- Create the `.bober/` directory structure: `mkdir -p .bober/specs .bober/contracts .bober/handoffs .bober/eval-results`.
|
|
79
|
+
- Verify `bober.config.json` now exists on disk before proceeding — every later step reads it.
|
|
79
80
|
|
|
80
81
|
If `bober.config.json` exists, read the configuration.
|
|
81
82
|
|
|
@@ -83,11 +84,13 @@ Read `.bober/principles.md` if it exists. You will pass the principles text into
|
|
|
83
84
|
|
|
84
85
|
### 1b. Run Prerequisites Check
|
|
85
86
|
|
|
87
|
+
If `scripts/check-prereqs.sh` exists in the project, run it:
|
|
88
|
+
|
|
86
89
|
```bash
|
|
87
|
-
bash scripts/check-prereqs.sh
|
|
90
|
+
[ -f scripts/check-prereqs.sh ] && bash scripts/check-prereqs.sh || echo "scripts/check-prereqs.sh not present (plugin/standalone install) — skipping prerequisites check"
|
|
88
91
|
```
|
|
89
92
|
|
|
90
|
-
If
|
|
93
|
+
If the script is present and fails, report the missing prerequisites and stop. If the script is absent — a plugin or standalone install where the agent-bober source tree is not in the project — skip this check and continue; it is not required.
|
|
91
94
|
|
|
92
95
|
### 1c. Check for Existing Plans
|
|
93
96
|
|