@event4u/agent-config 6.0.0 → 7.0.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/marketplace.json +39 -7
- package/AGENTS.md +8 -7
- package/CHANGELOG.md +557 -422
- package/CONTRIBUTING.md +1 -1
- package/README.md +18 -16
- package/dist/agent-src/commands/agent-handoff.md +5 -4
- package/dist/agent-src/commands/agent-status.md +3 -2
- package/dist/agent-src/commands/agents/audit.md +4 -3
- package/dist/agent-src/commands/agents/init.md +4 -1
- package/dist/agent-src/commands/agents/optimize.md +5 -4
- package/dist/agent-src/commands/agents/user/accept.md +1 -0
- package/dist/agent-src/commands/agents/user/init.md +1 -0
- package/dist/agent-src/commands/agents/user/review.md +1 -0
- package/dist/agent-src/commands/agents/user/show.md +1 -0
- package/dist/agent-src/commands/agents/user/update.md +1 -0
- package/dist/agent-src/commands/agents/user.md +1 -0
- package/dist/agent-src/commands/agents.md +1 -0
- package/dist/agent-src/commands/analytics/prune.md +3 -2
- package/dist/agent-src/commands/analytics/show.md +3 -2
- package/dist/agent-src/commands/analytics.md +3 -2
- package/dist/agent-src/commands/analyze/decision.md +108 -0
- package/dist/agent-src/commands/analyze/incident.md +120 -0
- package/dist/agent-src/commands/analyze/near-miss.md +113 -0
- package/dist/agent-src/commands/analyze/postmortem.md +130 -0
- package/dist/agent-src/commands/analyze/premortem.md +104 -0
- package/dist/agent-src/commands/analyze-reference-repo.md +1 -0
- package/dist/agent-src/commands/analyze.md +124 -0
- package/dist/agent-src/commands/brand/identity.md +27 -0
- package/dist/agent-src/commands/brand/review.md +27 -0
- package/dist/agent-src/commands/brand/strategy.md +27 -0
- package/dist/agent-src/commands/brand/tokens.md +28 -0
- package/dist/agent-src/commands/brand/voice.md +27 -0
- package/dist/agent-src/commands/brand.md +58 -0
- package/dist/agent-src/commands/bug-fix.md +1 -0
- package/dist/agent-src/commands/bug-investigate.md +1 -0
- package/dist/agent-src/commands/challenge-me/vision.md +3 -2
- package/dist/agent-src/commands/challenge-me/with-docs.md +3 -2
- package/dist/agent-src/commands/challenge-me.md +3 -2
- package/dist/agent-src/commands/chat-history/import.md +9 -9
- package/dist/agent-src/commands/chat-history.md +32 -30
- package/dist/agent-src/commands/check-current-md.md +4 -3
- package/dist/agent-src/commands/commit/in-chunks.md +1 -0
- package/dist/agent-src/commands/commit.md +1 -0
- package/dist/agent-src/commands/condense.md +3 -2
- package/dist/agent-src/commands/context/create.md +1 -0
- package/dist/agent-src/commands/context/refactor.md +1 -0
- package/dist/agent-src/commands/context.md +1 -0
- package/dist/agent-src/commands/cost-report.md +5 -4
- package/dist/agent-src/commands/council/analysis.md +3 -2
- package/dist/agent-src/commands/council/debate.md +7 -6
- package/dist/agent-src/commands/council/default.md +48 -20
- package/dist/agent-src/commands/council/design.md +3 -2
- package/dist/agent-src/commands/council/optimize.md +3 -2
- package/dist/agent-src/commands/council/pr.md +3 -2
- package/dist/agent-src/commands/council.md +4 -3
- package/dist/agent-src/commands/e2e-heal.md +1 -0
- package/dist/agent-src/commands/e2e-plan.md +1 -0
- package/dist/agent-src/commands/estimate-ticket.md +1 -0
- package/dist/agent-src/commands/feature/dev.md +1 -0
- package/dist/agent-src/commands/feature/explore.md +1 -0
- package/dist/agent-src/commands/feature/plan.md +6 -6
- package/dist/agent-src/commands/feature/refactor.md +1 -0
- package/dist/agent-src/commands/feature/roadmap.md +1 -0
- package/dist/agent-src/commands/feature.md +1 -0
- package/dist/agent-src/commands/fix/ci.md +1 -0
- package/dist/agent-src/commands/fix/portability.md +4 -3
- package/dist/agent-src/commands/fix/pr-comments.md +147 -15
- package/dist/agent-src/commands/fix/refs.md +4 -3
- package/dist/agent-src/commands/fix/seeder.md +1 -0
- package/dist/agent-src/commands/fix.md +8 -8
- package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
- package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
- package/dist/agent-src/commands/ghostwriter/list.md +1 -0
- package/dist/agent-src/commands/ghostwriter/show.md +1 -0
- package/dist/agent-src/commands/ghostwriter/write.md +1 -0
- package/dist/agent-src/commands/ghostwriter.md +1 -0
- package/dist/agent-src/commands/grill-me.md +3 -2
- package/dist/agent-src/commands/image/analyse.md +1 -0
- package/dist/agent-src/commands/image/create.md +1 -0
- package/dist/agent-src/commands/image/verify.md +1 -0
- package/dist/agent-src/commands/image.md +1 -0
- package/dist/agent-src/commands/implement-ticket.md +37 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -0
- package/dist/agent-src/commands/judge/on-diff.md +1 -0
- package/dist/agent-src/commands/judge/solo.md +1 -0
- package/dist/agent-src/commands/judge/steps.md +1 -0
- package/dist/agent-src/commands/judge.md +1 -0
- package/dist/agent-src/commands/knowledge/cross-repo.md +2 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -0
- package/dist/agent-src/commands/knowledge/ingest.md +1 -0
- package/dist/agent-src/commands/knowledge/list.md +1 -0
- package/dist/agent-src/commands/knowledge.md +1 -0
- package/dist/agent-src/commands/memory/add.md +9 -7
- package/dist/agent-src/commands/memory/learn-low-impact.md +3 -2
- package/dist/agent-src/commands/memory/load.md +7 -7
- package/dist/agent-src/commands/memory/mine-session.md +39 -12
- package/dist/agent-src/commands/memory/promote.md +3 -2
- package/dist/agent-src/commands/memory/propose.md +7 -6
- package/dist/agent-src/commands/memory.md +3 -2
- package/dist/agent-src/commands/mission/upgrade.md +182 -0
- package/dist/agent-src/commands/mode.md +1 -0
- package/dist/agent-src/commands/module/create.md +1 -0
- package/dist/agent-src/commands/module/explore.md +1 -0
- package/dist/agent-src/commands/module.md +1 -0
- package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
- package/dist/agent-src/commands/optimize/augmentignore.md +1 -0
- package/dist/agent-src/commands/optimize/rtk.md +1 -0
- package/dist/agent-src/commands/optimize/skills.md +3 -2
- package/dist/agent-src/commands/optimize-prompt.md +1 -0
- package/dist/agent-src/commands/optimize.md +1 -0
- package/dist/agent-src/commands/orchestrate.md +2 -1
- package/dist/agent-src/commands/override/create.md +1 -0
- package/dist/agent-src/commands/override/manage.md +1 -0
- package/dist/agent-src/commands/override.md +1 -0
- package/dist/agent-src/commands/package-reset.md +1 -0
- package/dist/agent-src/commands/package-test.md +1 -0
- package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
- package/dist/agent-src/commands/post-as/me.md +1 -0
- package/dist/agent-src/commands/post-as.md +1 -0
- package/dist/agent-src/commands/pr/create/description-only.md +1 -0
- package/dist/agent-src/commands/pr/create.md +31 -4
- package/dist/agent-src/commands/prediction-pool.md +1 -0
- package/dist/agent-src/commands/prepare-for-review.md +1 -0
- package/dist/agent-src/commands/profile/activate.md +1 -0
- package/dist/agent-src/commands/profile/deactivate.md +1 -0
- package/dist/agent-src/commands/profile/show.md +1 -0
- package/dist/agent-src/commands/profile.md +1 -0
- package/dist/agent-src/commands/project-analyze.md +1 -0
- package/dist/agent-src/commands/project-health.md +1 -0
- package/dist/agent-src/commands/quality-fix.md +1 -0
- package/dist/agent-src/commands/refine-ticket.md +1 -0
- package/dist/agent-src/commands/research/deep.md +1 -0
- package/dist/agent-src/commands/research/report.md +1 -0
- package/dist/agent-src/commands/research.md +1 -0
- package/dist/agent-src/commands/review-changes.md +9 -0
- package/dist/agent-src/commands/review-routing.md +1 -0
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
- package/dist/agent-src/commands/roadmap/create.md +1 -0
- package/dist/agent-src/commands/roadmap/materialize.md +73 -0
- package/dist/agent-src/commands/roadmap/process-full.md +1 -0
- package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
- package/dist/agent-src/commands/roadmap/process-step.md +1 -0
- package/dist/agent-src/commands/roadmap.md +1 -0
- package/dist/agent-src/commands/rule-compliance-audit.md +1 -0
- package/dist/agent-src/commands/security-audit-config.md +84 -0
- package/dist/agent-src/commands/set-cost-profile.md +1 -0
- package/dist/agent-src/commands/skill/preview.md +2 -1
- package/dist/agent-src/commands/skill.md +1 -0
- package/dist/agent-src/commands/skills/discover.md +2 -1
- package/dist/agent-src/commands/skills.md +1 -0
- package/dist/agent-src/commands/sync-agent-settings.md +1 -0
- package/dist/agent-src/commands/sync-gitignore/fix.md +1 -0
- package/dist/agent-src/commands/sync-gitignore.md +1 -0
- package/dist/agent-src/commands/tests/create.md +1 -0
- package/dist/agent-src/commands/tests/execute.md +1 -0
- package/dist/agent-src/commands/tests.md +1 -0
- package/dist/agent-src/commands/threat-model.md +5 -4
- package/dist/agent-src/commands/update-form-request-messages.md +1 -0
- package/dist/agent-src/commands/upstream-contribute.md +4 -3
- package/dist/agent-src/commands/video/from-script.md +3 -2
- package/dist/agent-src/commands/video/from-song.md +4 -3
- package/dist/agent-src/commands/video/scene.md +2 -1
- package/dist/agent-src/commands/video/stitch.md +1 -0
- package/dist/agent-src/commands/video/storyboard.md +2 -1
- package/dist/agent-src/commands/video.md +4 -3
- package/dist/agent-src/commands/work.md +1 -0
- package/dist/agent-src/contexts/augment-infrastructure.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/source-of-truth-mechanics.md +3 -3
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
- package/dist/agent-src/contexts/contracts/consumer-agents-md-guide.md +2 -2
- package/dist/agent-src/contexts/execution/evidence-discipline.md +153 -0
- package/dist/agent-src/contexts/execution/project-intelligence.md +264 -0
- package/dist/agent-src/contexts/execution/rdp-gate.md +75 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +2 -1
- package/dist/agent-src/contexts/subagent-configuration.md +1 -0
- package/dist/agent-src/personas/advisors/contrarian.md +1 -1
- package/dist/agent-src/personas/advisors/executor.md +1 -1
- package/dist/agent-src/personas/advisors/expansionist.md +1 -1
- package/dist/agent-src/personas/advisors/first-principles.md +1 -1
- package/dist/agent-src/personas/advisors/outsider.md +1 -1
- package/dist/agent-src/personas/ai-video-technical-director.md +1 -1
- package/dist/agent-src/personas/brand-strategist.md +74 -0
- package/dist/agent-src/personas/design-director.md +74 -0
- package/dist/agent-src/rules/autonomous-execution.md +12 -0
- package/dist/agent-src/rules/brand-consistency.md +77 -0
- package/dist/agent-src/rules/brand-source-of-truth.md +57 -0
- package/dist/agent-src/rules/direct-answers.md +2 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
- package/dist/agent-src/rules/external-reference-deep-dive.md +1 -1
- package/dist/agent-src/rules/git-history-discipline.md +48 -1
- package/dist/agent-src/rules/icon-consistency.md +53 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +67 -0
- package/dist/agent-src/rules/improve-before-implement.md +12 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +80 -0
- package/dist/agent-src/rules/no-pr-progress-comments.md +3 -4
- package/dist/agent-src/rules/notes-first-reasoning.md +71 -0
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +58 -31
- package/dist/agent-src/rules/security-sensitive-stop.md +22 -3
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +97 -0
- package/dist/agent-src/rules/source-discovery-gate.md +98 -0
- package/dist/agent-src/rules/think-before-action.md +10 -1
- package/dist/agent-src/rules/ui-audit-gate.md +2 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +76 -0
- package/dist/agent-src/rules/user-interaction.md +1 -1
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +392 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +824 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/adversarial-review/SKILL.md +14 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +113 -0
- package/dist/agent-src/skills/agent-security-review/evals/triggers.json +52 -0
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +4 -4
- package/dist/agent-src/skills/analysis-autonomous-mode/SKILL.md +9 -13
- package/dist/agent-src/skills/async-python-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +12 -5
- package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +199 -0
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +12 -11
- package/dist/agent-src/skills/brand/ATTRIBUTION.md +38 -0
- package/dist/agent-src/skills/brand/SKILL.md +115 -0
- package/dist/agent-src/skills/brand/data/archetypes.csv +13 -0
- package/dist/agent-src/skills/brand/data/color-psychology.csv +14 -0
- package/dist/agent-src/skills/brand/data/logo-style-fit.csv +13 -0
- package/dist/agent-src/skills/brand/data/manifest.json +226 -0
- package/dist/agent-src/skills/brand/data/messaging-frameworks.csv +13 -0
- package/dist/agent-src/skills/brand/data/naming-patterns.csv +13 -0
- package/dist/agent-src/skills/brand/data/typography-principles.csv +13 -0
- package/dist/agent-src/skills/brand/data/voice-tone.csv +13 -0
- package/dist/agent-src/skills/brand/evals/triggers.json +17 -0
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +89 -0
- package/dist/agent-src/skills/brand-asset-generation/evals/triggers.json +17 -0
- package/dist/agent-src/skills/brand-audit/SKILL.md +67 -0
- package/dist/agent-src/skills/brand-audit/evals/triggers.json +17 -0
- package/dist/agent-src/skills/brand-identity/SKILL.md +101 -0
- package/dist/agent-src/skills/brand-identity/evals/triggers.json +17 -0
- package/dist/agent-src/skills/brand-strategy/SKILL.md +83 -0
- package/dist/agent-src/skills/brand-strategy/evals/triggers.json +17 -0
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +102 -0
- package/dist/agent-src/skills/brand-to-tokens/evals/triggers.json +17 -0
- package/dist/agent-src/skills/brand-to-tokens/templates/marp-brand-deck.md.example +46 -0
- package/dist/agent-src/skills/brand-to-tokens/templates/reveal-brand-deck.yaml +32 -0
- package/dist/agent-src/skills/canvas-design/evals/triggers.json +1 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +5 -5
- package/dist/agent-src/skills/code-review/SKILL.md +6 -15
- package/dist/agent-src/skills/command-routing/SKILL.md +1 -1
- package/dist/agent-src/skills/command-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +96 -0
- package/dist/agent-src/skills/complexity-first-planning/evals/triggers.json +17 -0
- package/dist/agent-src/skills/context-authoring/SKILL.md +2 -2
- package/dist/agent-src/skills/context-document/SKILL.md +35 -2
- package/dist/agent-src/skills/copilot-config/SKILL.md +3 -4
- package/dist/agent-src/skills/corpus-grounding/evals/triggers.json +1 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.ts +482 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.ts +803 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +541 -0
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.ts +309 -0
- package/dist/agent-src/skills/database/SKILL.md +26 -4
- package/dist/agent-src/skills/decision-record/SKILL.md +1 -1
- package/dist/agent-src/skills/decision-record/evals/triggers.json +17 -0
- package/dist/agent-src/skills/decision-review/SKILL.md +179 -0
- package/dist/agent-src/skills/defense-in-depth/SKILL.md +1 -1
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
- package/dist/agent-src/skills/design-intelligence/data/manifest.json +23 -6
- package/dist/agent-src/skills/design-intelligence/evals/triggers.json +1 -0
- package/dist/agent-src/skills/design-tokens/evals/triggers.json +1 -0
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +888 -0
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +5 -4
- package/dist/agent-src/skills/doc-coauthoring/evals/triggers.json +1 -0
- package/dist/agent-src/skills/eloquent/evals/triggers.json +1 -0
- package/dist/agent-src/skills/emit-tickets/SKILL.md +198 -0
- package/dist/agent-src/skills/error-handling-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/estimate-ticket/evals/triggers.json +1 -0
- package/dist/agent-src/skills/feature-planning/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/SKILL.md +33 -0
- package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/iconography/SKILL.md +88 -0
- package/dist/agent-src/skills/iconography/evals/triggers.json +17 -0
- package/dist/agent-src/skills/image-analyser/evals/triggers.json +1 -0
- package/dist/agent-src/skills/image-creator/evals/triggers.json +1 -0
- package/dist/agent-src/skills/image-editing/SKILL.md +100 -0
- package/dist/agent-src/skills/image-editing/evals/triggers.json +17 -0
- package/dist/agent-src/skills/image-generation/SKILL.md +95 -0
- package/dist/agent-src/skills/image-generation/evals/triggers.json +17 -0
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +96 -0
- package/dist/agent-src/skills/image-provider-routing/evals/triggers.json +17 -0
- package/dist/agent-src/skills/launch-readiness/SKILL.md +21 -0
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +12 -8
- package/dist/agent-src/skills/lint-skills/SKILL.md +5 -5
- package/dist/agent-src/skills/logo-generation/SKILL.md +98 -0
- package/dist/agent-src/skills/logo-generation/evals/triggers.json +17 -0
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +63 -17
- package/dist/agent-src/skills/motion-choreographer/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/evals/triggers.json +1 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/evals/triggers.json +1 -0
- package/dist/agent-src/skills/premortem/SKILL.md +137 -0
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +115 -0
- package/dist/agent-src/skills/prompt-engineering-image/evals/triggers.json +17 -0
- package/dist/agent-src/skills/prompt-engineering-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-validator/evals/triggers.json +1 -0
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +12 -5
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +388 -0
- package/dist/agent-src/skills/readme-writing-package/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +119 -0
- package/dist/agent-src/skills/reasoning-orchestrator/evals/triggers.json +17 -0
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +6 -6
- package/dist/agent-src/skills/refine-prompt/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/evals/triggers.json +1 -0
- package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/SKILL.md +16 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +76 -0
- package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +146 -0
- package/dist/agent-src/skills/rule-refactor/SKILL.md +9 -9
- package/dist/agent-src/skills/rule-writing/SKILL.md +7 -7
- package/dist/agent-src/skills/script-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/secrets-management/SKILL.md +1 -1
- package/dist/agent-src/skills/security-audit/SKILL.md +5 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +19 -3
- package/dist/agent-src/skills/skill-management/SKILL.md +3 -3
- package/dist/agent-src/skills/skill-reviewer/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/skill-writing/evals/triggers.json +1 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +182 -0
- package/dist/agent-src/skills/standards-from-config/SKILL.md +93 -0
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +10 -3
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +7 -0
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +561 -0
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +1 -1
- package/dist/agent-src/skills/threat-modeling/SKILL.md +1 -0
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +138 -0
- package/dist/agent-src/skills/typography-system/evals/triggers.json +17 -0
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +3 -3
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +209 -0
- package/dist/agent-src/skills/verify-repair-loop/evals/output-schema.yml +20 -0
- package/dist/agent-src/skills/verify-repair-loop/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agent-settings.md +7 -0
- package/dist/agent-src/templates/agents/.gitattributes.fragment +0 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +4 -4
- package/dist/agent-src/templates/contexts/knowledge-card.md +69 -0
- package/dist/agent-src/templates/contexts/lesson-card.md +73 -0
- package/dist/agent-src/templates/roadmaps.md +29 -1
- package/dist/agent-src/templates/scripts/README.md +6 -6
- package/dist/agent-src/templates/scripts/check_memory.ts +640 -0
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +351 -0
- package/dist/agent-src/templates/scripts/implement_ticket/__main__.ts +27 -0
- package/dist/agent-src/templates/scripts/memory_hash.ts +333 -0
- package/dist/agent-src/templates/scripts/memory_lookup.ts +1067 -0
- package/dist/agent-src/templates/scripts/memory_report.ts +846 -0
- package/dist/agent-src/templates/scripts/memory_signal.ts +422 -0
- package/dist/agent-src/templates/scripts/memory_status.ts +191 -0
- package/dist/agent-src/templates/scripts/pr_review_routing.ts +523 -0
- package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry/boundary.ts +164 -0
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +479 -0
- package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +394 -0
- package/dist/agent-src/templates/scripts/telemetry/settings.ts +210 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +255 -0
- package/dist/agent-src/templates/scripts/telemetry_report.ts +189 -0
- package/dist/agent-src/templates/scripts/telemetry_status.ts +312 -0
- package/dist/agent-src/templates/scripts/tier_usage_report.ts +597 -0
- package/dist/agent-src/templates/scripts/work_engine/__main__.ts +14 -0
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +1118 -0
- package/dist/agent-src/templates/scripts/work_engine/_lib/user_global_paths.ts +329 -0
- package/dist/agent-src/templates/scripts/work_engine/cli.ts +206 -0
- package/dist/agent-src/templates/scripts/work_engine/cli_args.ts +249 -0
- package/dist/agent-src/templates/scripts/work_engine/delivery_state.ts +225 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/analyze.ts +125 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +189 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +94 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/memory.ts +193 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/plan.ts +267 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/refine.ts +518 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/report.ts +379 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +268 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +258 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/index.ts +32 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/contract.ts +243 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/index.ts +108 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +259 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/ui.ts +216 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.ts +40 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +241 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +216 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +506 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.ts +325 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/index.ts +102 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +462 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.ts +474 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +352 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.ts +33 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.ts +213 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/index.ts +111 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.ts +126 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.ts +112 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.ts +164 -0
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.ts +515 -0
- package/dist/agent-src/templates/scripts/work_engine/emitters.ts +119 -0
- package/dist/agent-src/templates/scripts/work_engine/errors.ts +24 -0
- package/dist/agent-src/templates/scripts/work_engine/hook_bootstrap.ts +104 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +176 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.ts +41 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.ts +89 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.ts +193 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +304 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.ts +110 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.ts +118 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/index.ts +17 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +161 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.ts +45 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/trace.ts +134 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/context.ts +94 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/events.ts +58 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/exceptions.ts +85 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/index.ts +27 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/registry.ts +66 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/runner.ts +90 -0
- package/dist/agent-src/templates/scripts/work_engine/hooks/settings.ts +260 -0
- package/dist/agent-src/templates/scripts/work_engine/input_builders.ts +260 -0
- package/dist/agent-src/templates/scripts/work_engine/intent/classify.ts +466 -0
- package/dist/agent-src/templates/scripts/work_engine/migration/v0_to_v1.ts +531 -0
- package/dist/agent-src/templates/scripts/work_engine/orchestration.ts +366 -0
- package/dist/agent-src/templates/scripts/work_engine/persona_policy.ts +97 -0
- package/dist/agent-src/templates/scripts/work_engine/resolvers/diff.ts +135 -0
- package/dist/agent-src/templates/scripts/work_engine/resolvers/file.ts +175 -0
- package/dist/agent-src/templates/scripts/work_engine/resolvers/prompt.ts +115 -0
- package/dist/agent-src/templates/scripts/work_engine/scoring/confidence.ts +415 -0
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +466 -0
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_trace.ts +298 -0
- package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +444 -0
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.ts +252 -0
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +745 -0
- package/dist/agent-src/templates/scripts/work_engine/state.ts +1151 -0
- package/dist/agent-src/templates/scripts/work_engine/state_io.ts +413 -0
- package/dist/agent-src/templates/tickets.md +120 -0
- package/dist/cli/agent-config.js +31 -300
- package/dist/cli/agent-config.js.map +1 -1
- package/dist/cli/commands/commands.js +11 -6
- package/dist/cli/commands/commands.js.map +1 -1
- package/dist/cli/commands/doctorShell.js +4 -22
- package/dist/cli/commands/doctorShell.js.map +1 -1
- package/dist/cli/commands/packs.js +1 -1
- package/dist/cli/commands/packs.js.map +1 -1
- package/dist/cli/commands/recordTriggerEval.js +179 -0
- package/dist/cli/commands/recordTriggerEval.js.map +1 -0
- package/dist/cli/commands/recordTriggerEval.test.js +113 -0
- package/dist/cli/commands/recordTriggerEval.test.js.map +1 -0
- package/dist/cli/commands/workspaces.js +1 -1
- package/dist/cli/commands/workspaces.js.map +1 -1
- package/dist/cli/discovery/loadManifest.js.map +1 -1
- package/dist/cli/main.js +330 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/python/knowledge_ingest.js +1048 -0
- package/dist/cli/python/knowledge_ingest.js.map +1 -0
- package/dist/cli/python/workspace_analytics.js +1085 -0
- package/dist/cli/python/workspace_analytics.js.map +1 -0
- package/dist/cli/python/workspace_crypto.js +544 -0
- package/dist/cli/python/workspace_crypto.js.map +1 -0
- package/dist/cli/python/workspace_documents.js +1216 -0
- package/dist/cli/python/workspace_documents.js.map +1 -0
- package/dist/cli/python/workspace_drive.js +574 -0
- package/dist/cli/python/workspace_drive.js.map +1 -0
- package/dist/cli/python/workspace_drive_health.js +628 -0
- package/dist/cli/python/workspace_drive_health.js.map +1 -0
- package/dist/cli/python/workspace_explain.js +765 -0
- package/dist/cli/python/workspace_explain.js.map +1 -0
- package/dist/cli/python/workspace_hosts.js +349 -0
- package/dist/cli/python/workspace_hosts.js.map +1 -0
- package/dist/cli/python/workspace_inbox.js +692 -0
- package/dist/cli/python/workspace_inbox.js.map +1 -0
- package/dist/cli/python/workspace_render.js +816 -0
- package/dist/cli/python/workspace_render.js.map +1 -0
- package/dist/cli/python/workspace_roles.js +487 -0
- package/dist/cli/python/workspace_roles.js.map +1 -0
- package/dist/cli/python/workspace_secrets.js +180 -0
- package/dist/cli/python/workspace_secrets.js.map +1 -0
- package/dist/cli/python/workspace_sessions.js +1079 -0
- package/dist/cli/python/workspace_sessions.js.map +1 -0
- package/dist/cli/python/workspace_skills.js +417 -0
- package/dist/cli/python/workspace_skills.js.map +1 -0
- package/dist/cli/registry.js +2 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +1802 -448
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +12 -6
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +303 -43
- package/dist/discovery/trust-report.md +4 -4
- package/dist/discovery/workspaces.json +127 -41
- package/dist/install/install.mjs +13934 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/server/routes/wizard.js +54 -24
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/routes/workspace.js +44 -25
- package/dist/server/routes/workspace.js.map +1 -1
- package/dist/server/schemas/settings.js +33 -0
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/SKILL_CENSUS.md +344 -0
- package/docs/adrs/cost/0001-hard-stop-hook.md +5 -5
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +15 -7
- package/docs/adrs/memory/README.md +6 -5
- package/docs/adrs/router/0001-three-tier-routing.md +2 -2
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +2 -2
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +5 -5
- package/docs/adrs/telegraph/0001-default-off-until-bench.md +3 -3
- package/docs/architecture/augment-projection.md +1 -1
- package/docs/architecture/multi-tool-projection.md +3 -3
- package/docs/architecture.md +42 -11
- package/docs/archive/CHANGELOG-pre-2.2.0.md +30 -30
- package/docs/archive/CHANGELOG-pre-2.25.0.md +1 -1
- package/docs/archive/CHANGELOG-pre-4.5.0.md +1 -1
- package/docs/archive/CHANGELOG-pre-6.0.0.md +473 -0
- package/docs/benchmark.md +51 -53
- package/docs/benchmarks.md +2 -2
- package/docs/capability-matrix.md +32 -0
- package/docs/case-studies/frontend-design-positioning.md +86 -0
- package/docs/catalog.md +63 -15
- package/docs/command-flows.md +90 -92
- package/docs/command-naming-audit.md +60 -0
- package/docs/contracts/STABILITY.md +32 -0
- package/docs/contracts/adr-layout.md +2 -3
- package/docs/contracts/adr-level-6-productization.md +1 -1
- package/docs/contracts/agents-md-tech-stack.md +1 -1
- package/docs/contracts/ai-council-config.md +64 -29
- package/docs/contracts/analysis-memory-loop.md +149 -0
- package/docs/contracts/benchmark-ab-contract.md +3 -3
- package/docs/contracts/branch-protection-policy.md +27 -0
- package/docs/contracts/brand-token-consumption.md +69 -0
- package/docs/contracts/command-clusters.md +3 -2
- package/docs/contracts/command-surface-tiers.md +13 -0
- package/docs/contracts/cost-enforcement.md +1 -1
- package/docs/contracts/cost-summary-schema.md +1 -1
- package/docs/contracts/daily-workspace.md +1 -0
- package/docs/contracts/discovery-manifest.schema.json +25 -4
- package/docs/contracts/explain-modes.md +1 -1
- package/docs/contracts/implement-ticket-flow.md +15 -16
- package/docs/contracts/install-layout.md +249 -0
- package/docs/contracts/kernel-membership.md +1 -1
- package/docs/contracts/linear-ai-rules-inclusion.md +2 -2
- package/docs/contracts/linter-structural-model.md +1 -1
- package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
- package/docs/contracts/mcp-tool-inventory.md +10 -10
- package/docs/contracts/measurement-baseline.md +1 -1
- package/docs/contracts/memory-visibility-v1.md +1 -5
- package/docs/contracts/multi-tool-projection-fidelity.md +1 -1
- package/docs/contracts/namespace.md +3 -3
- package/docs/contracts/no-runtime-boundary.md +56 -0
- package/docs/contracts/package-self-orientation.md +24 -0
- package/docs/contracts/persona-schema.md +1 -1
- package/docs/contracts/provider-lifecycle.md +3 -3
- package/docs/contracts/reasoning-discipline-protocol.md +83 -0
- package/docs/contracts/rule-classification.md +3 -3
- package/docs/contracts/rule-interactions.md +1 -1
- package/docs/contracts/skill-domains.md +1 -1
- package/docs/contracts/smoke-contracts.md +2 -2
- package/docs/contracts/surface-tiers.md +81 -0
- package/docs/contracts/ticket-bundle-format.md +228 -0
- package/docs/contracts/universal-skills.md +0 -1
- package/docs/contracts/workspace-boundary.md +84 -0
- package/docs/cookbook.md +152 -0
- package/docs/customization.md +15 -4
- package/docs/decisions/ADR-009-event4u-namespace.md +1 -1
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +17 -1
- package/docs/decisions/ADR-026-explain-mode-translation.md +1 -1
- package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +1 -1
- package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +1 -1
- package/docs/decisions/ADR-060-comfyui-sandbox-model.md +1 -1
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +48 -1
- package/docs/decisions/ADR-088-no-external-runtime-federation.md +26 -27
- package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +95 -0
- package/docs/decisions/ADR-091-split-meta-capability-packs.md +113 -0
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +93 -0
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +111 -0
- package/docs/decisions/ADR-094-agent-memory-layer-removal.md +94 -0
- package/docs/decisions/ADR-095-workspace-boundary-contract.md +108 -0
- package/docs/decisions/ADR-096-analysis-workbench.md +110 -0
- package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +121 -0
- package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +154 -0
- package/docs/decisions/ADR-099-file-first-pattern-library.md +87 -0
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +133 -0
- package/docs/decisions/ADR-101-ticket-bundle-emission.md +109 -0
- package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +72 -0
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +92 -0
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +193 -0
- package/docs/decisions/INDEX.md +15 -0
- package/docs/development.md +5 -7
- package/docs/distribution/mcp-submission-checklist.md +3 -3
- package/docs/featured-commands.md +1 -1
- package/docs/featured-skills.md +1 -1
- package/docs/getting-started-by-role.md +2 -0
- package/docs/getting-started.md +4 -4
- package/docs/guidelines/agent-infra/5w2h-analysis.md +1 -1
- package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
- package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
- package/docs/guidelines/agent-infra/critical-thinking.md +1 -1
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +1 -5
- package/docs/guidelines/agent-infra/failure-signatures.md +35 -0
- package/docs/guidelines/agent-infra/first-principles.md +1 -1
- package/docs/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/docs/guidelines/agent-infra/inversion-thinking.md +1 -1
- package/docs/guidelines/agent-infra/ios-simulator-guide.md +9 -14
- package/docs/guidelines/agent-infra/mcp-request-signing.md +19 -22
- package/docs/guidelines/agent-infra/memory-access.md +25 -31
- package/docs/guidelines/agent-infra/mental-models.md +1 -1
- package/docs/guidelines/agent-infra/model-recommendation.md +29 -0
- package/docs/guidelines/agent-infra/scqa-framework.md +3 -3
- package/docs/guidelines/agent-infra/security-lint-containment.md +81 -0
- package/docs/guidelines/agent-infra/six-hats.md +1 -1
- package/docs/guidelines/agent-infra/size-and-scope.md +17 -0
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +2 -2
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/untrusted-input-spotlighting.md +72 -0
- package/docs/guides/frontend-design-corpus-refresh.md +83 -0
- package/docs/guides/skill-preview.md +1 -1
- package/docs/hook-payload-capture.md +4 -4
- package/docs/installation.md +1 -1
- package/docs/mcp.md +3 -3
- package/docs/migration/consumer-template-consumption-model.md +145 -0
- package/docs/migration/divergences/README.md +55 -0
- package/docs/migration/divergences/_template.md +50 -0
- package/docs/migration/divergences/bench-stats-float-precision.md +72 -0
- package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +61 -0
- package/docs/migration/divergences/pack-mcp-content-gzip-body.md +53 -0
- package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +63 -0
- package/docs/migration/divergences/src-scripts-check_memory.md +91 -0
- package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +65 -0
- package/docs/migration/divergences/src-scripts-lint_marketplace.md +57 -0
- package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +70 -0
- package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +60 -0
- package/docs/migration/divergences/src-scripts-validate_agent_settings.md +58 -0
- package/docs/migration/node-floor.md +86 -0
- package/docs/migration/yaml-roundtrip-spike.md +163 -0
- package/docs/parity/bench-external.json +58 -0
- package/docs/parity/external-runtime.md +46 -0
- package/docs/personas.md +6 -1
- package/docs/quality.md +3 -3
- package/docs/role-experiences.md +19 -0
- package/docs/safety.md +3 -3
- package/docs/setup/per-ide/windsurf.md +1 -1
- package/docs/skills-catalog.md +26 -2
- package/docs/threat-model.md +28 -0
- package/llms.txt +25 -1
- package/package.json +10 -15
- package/src/config/agent-settings.template.yml +128 -3
- package/src/config/discovery/packs.yml +60 -0
- package/src/config/discovery/unassigned-artefacts.yml +6 -0
- package/src/config/discovery/workspaces.yml +5 -3
- package/src/config/gitignore-block.txt +13 -0
- package/src/scripts/_cli/cmd_doctor.ts +2306 -0
- package/src/scripts/_cli/cmd_explain.ts +748 -0
- package/src/scripts/_cli/cmd_export.ts +375 -0
- package/src/scripts/_cli/cmd_migrate.ts +951 -0
- package/src/scripts/_cli/cmd_prune.ts +610 -0
- package/src/scripts/_cli/cmd_refresh.ts +530 -0
- package/src/scripts/_cli/cmd_settings_check.ts +407 -0
- package/src/scripts/_cli/cmd_settings_migrate.ts +344 -0
- package/src/scripts/_cli/cmd_sync.ts +381 -0
- package/src/scripts/_cli/cmd_uninstall.ts +833 -0
- package/src/scripts/_cli/cmd_update.ts +585 -0
- package/src/scripts/_cli/cmd_upgrade.ts +390 -0
- package/src/scripts/_cli/cmd_validate.ts +394 -0
- package/src/scripts/_cli/cmd_versions.ts +492 -0
- package/src/scripts/_cli/explain_last/assumptions.ts +114 -0
- package/src/scripts/_cli/explain_last/council.ts +197 -0
- package/src/scripts/_cli/explain_last/halt.ts +73 -0
- package/src/scripts/_cli/explain_last/index.ts +155 -0
- package/src/scripts/_cli/explain_last/inputs.ts +211 -0
- package/src/scripts/_cli/explain_last/memory.ts +231 -0
- package/src/scripts/_cli/explain_last/provider.ts +82 -0
- package/src/scripts/_cli/explain_last/render.ts +54 -0
- package/src/scripts/_cli/explain_last/route.ts +70 -0
- package/src/scripts/_cli/explain_last/scrubber.ts +138 -0
- package/src/scripts/_cli/explain_last/sections/assumptions.ts +51 -0
- package/src/scripts/_cli/explain_last/sections/council.ts +56 -0
- package/src/scripts/_cli/explain_last/sections/halt.ts +60 -0
- package/src/scripts/_cli/explain_last/sections/header.ts +50 -0
- package/src/scripts/_cli/explain_last/sections/index.ts +21 -0
- package/src/scripts/_cli/explain_last/sections/inputs.ts +63 -0
- package/src/scripts/_cli/explain_last/sections/memory.ts +124 -0
- package/src/scripts/_cli/explain_last/sections/pack.ts +42 -0
- package/src/scripts/_cli/explain_last/sections/provider.ts +51 -0
- package/src/scripts/_cli/explain_last/sections/route.ts +48 -0
- package/src/scripts/_cli/explain_last/state_loader.ts +119 -0
- package/src/scripts/_dispatch.bash +179 -163
- package/src/scripts/_lib/agent_settings.ts +1123 -0
- package/src/scripts/_lib/agent_src.ts +654 -0
- package/src/scripts/_lib/agents_overlay.ts +183 -0
- package/src/scripts/_lib/bench_ab_cache.ts +399 -0
- package/src/scripts/_lib/bench_ab_scoring.ts +352 -0
- package/src/scripts/_lib/bench_ab_scoring_v2.ts +751 -0
- package/src/scripts/_lib/bench_cost.ts +396 -0
- package/src/scripts/_lib/bench_quality.ts +237 -0
- package/src/scripts/_lib/bench_report.ts +255 -0
- package/src/scripts/_lib/bench_telegraph.ts +516 -0
- package/src/scripts/_lib/bench_telegraph_report.ts +272 -0
- package/src/scripts/_lib/changelog_eras.ts +398 -0
- package/src/scripts/_lib/claude_desktop_bundler.ts +324 -0
- package/src/scripts/_lib/cli_wrapper.ts +89 -0
- package/src/scripts/_lib/fs_atomic.ts +172 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +639 -0
- package/src/scripts/_lib/install_layout.ts +87 -0
- package/src/scripts/_lib/install_regenerator.ts +157 -0
- package/src/scripts/_lib/installed_lock.ts +451 -0
- package/src/scripts/_lib/installed_tools.ts +518 -0
- package/src/scripts/_lib/json_pointers.ts +388 -0
- package/src/scripts/_lib/knowledge_global.ts +770 -0
- package/src/scripts/_lib/knowledge_global_promote.ts +453 -0
- package/src/scripts/_lib/knowledge_global_redaction.ts +448 -0
- package/src/scripts/_lib/link_crypto.ts +325 -0
- package/src/scripts/_lib/linked_projects.ts +613 -0
- package/src/scripts/_lib/model_tier.ts +65 -0
- package/src/scripts/_lib/module_detection.ts +275 -0
- package/src/scripts/_lib/node_sqlite.d.ts +32 -0
- package/src/scripts/_lib/pin_resolver.ts +264 -0
- package/src/scripts/_lib/py_random.ts +212 -0
- package/src/scripts/_lib/script_output.ts +147 -0
- package/src/scripts/_lib/security_lint.ts +623 -0
- package/src/scripts/_lib/surface_tiers.ts +127 -0
- package/src/scripts/_lib/token_count.ts +126 -0
- package/src/scripts/_lib/update_check.ts +297 -0
- package/src/scripts/_lib/user_global_paths.ts +329 -0
- package/src/scripts/_lib/value_ladder.ts +882 -0
- package/src/scripts/_lib/value_report.ts +617 -0
- package/src/scripts/_lib/zip_min.ts +175 -0
- package/src/scripts/adoption_report.ts +357 -0
- package/src/scripts/adoption_snapshot.ts +392 -0
- package/src/scripts/adoption_status.ts +424 -0
- package/src/scripts/adr/regenerate_index.ts +257 -0
- package/src/scripts/ai-image/adapters/flux.sh +45 -0
- package/src/scripts/ai-image/adapters/gemini-image.sh +45 -0
- package/src/scripts/ai-image/adapters/ideogram.sh +45 -0
- package/src/scripts/ai-image/adapters/recraft.sh +47 -0
- package/src/scripts/ai-video/adapters/comfyui.sh +3 -3
- package/src/scripts/ai-video/adapters/fal.sh +3 -3
- package/src/scripts/ai-video/adapters/gemini-veo.sh +3 -3
- package/src/scripts/ai-video/adapters/higgsfield.sh +3 -3
- package/src/scripts/ai-video/adapters/kling.sh +3 -3
- package/src/scripts/ai-video/adapters/musetalk.sh +2 -2
- package/src/scripts/ai-video/adapters/openai-images.sh +3 -3
- package/src/scripts/ai-video/adapters/replicate.sh +3 -3
- package/src/scripts/ai-video/adapters/sora.sh +3 -3
- package/src/scripts/ai-video/adapters/syncso.sh +3 -3
- package/src/scripts/ai-video/audio-adapters/allin1.sh +2 -2
- package/src/scripts/ai-video/audio-adapters/whisperx.sh +2 -2
- package/src/scripts/ai-video/lib/audio-adapter-contract.md +1 -1
- package/src/scripts/ai-video/lib/embed-provenance.sh +2 -2
- package/src/scripts/ai-video/lib/ingest-song.sh +2 -2
- package/src/scripts/ai-video/lib/parse-blueprint.sh +1 -1
- package/src/scripts/ai-video/lib/resume-scan.sh +2 -2
- package/src/scripts/ai-video/smoke-trace.sh +16 -7
- package/src/scripts/ai-video/stitch.sh +2 -2
- package/src/scripts/ai_council/_default_prices.ts +73 -0
- package/src/scripts/ai_council/advisors.ts +244 -0
- package/src/scripts/ai_council/airgap.ts +249 -0
- package/src/scripts/ai_council/budget_guard.ts +492 -0
- package/src/scripts/ai_council/bundler.ts +376 -0
- package/src/scripts/ai_council/cli_hints.ts +120 -0
- package/src/scripts/ai_council/clients.ts +2214 -0
- package/src/scripts/ai_council/compile_corpus.ts +681 -0
- package/src/scripts/ai_council/confidence_gate.ts +230 -0
- package/src/scripts/ai_council/config.ts +1729 -0
- package/src/scripts/ai_council/consensus.ts +551 -0
- package/src/scripts/ai_council/events_log.ts +327 -0
- package/src/scripts/ai_council/learn_low_impact_preview.ts +317 -0
- package/src/scripts/ai_council/low_impact.ts +1069 -0
- package/src/scripts/ai_council/low_impact_corpus.ts +662 -0
- package/src/scripts/ai_council/low_impact_intake.ts +222 -0
- package/src/scripts/ai_council/modes.ts +169 -0
- package/src/scripts/ai_council/necessity.ts +933 -0
- package/src/scripts/ai_council/orchestrator.ts +1689 -0
- package/src/scripts/ai_council/pricing.ts +267 -0
- package/src/scripts/ai_council/probation_gate.ts +282 -0
- package/src/scripts/ai_council/project_context.ts +308 -0
- package/src/scripts/ai_council/prompts.ts +600 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +291 -0
- package/src/scripts/ai_council/replay.ts +314 -0
- package/src/scripts/ai_council/session.ts +558 -0
- package/src/scripts/ai_council/shadow_dispatch.ts +509 -0
- package/src/scripts/ai_council/solo_dispatch.ts +281 -0
- package/src/scripts/analysis_freshness.ts +343 -0
- package/src/scripts/annotate_discovery.ts +288 -0
- package/src/scripts/apply_modules_config.ts +537 -0
- package/src/scripts/audit_adr_coverage.ts +357 -0
- package/src/scripts/audit_auto_rules.ts +415 -0
- package/src/scripts/audit_cloud_compatibility.ts +608 -0
- package/src/scripts/audit_command_surface.ts +1227 -0
- package/src/scripts/audit_initial_context.ts +694 -0
- package/src/scripts/audit_likelihood.ts +434 -0
- package/src/scripts/audit_mcp_tools.ts +252 -0
- package/src/scripts/audit_overlap.ts +421 -0
- package/src/scripts/audit_skill_descriptions.ts +402 -0
- package/src/scripts/audit_skill_overlap.ts +576 -0
- package/src/scripts/audit_user_type_axis.ts +264 -0
- package/src/scripts/backfill_model_tier.ts +349 -0
- package/src/scripts/bench_ab_cache_dispatch.ts +126 -0
- package/src/scripts/bench_ab_clone.ts +610 -0
- package/src/scripts/bench_ab_diff.ts +609 -0
- package/src/scripts/bench_ab_integrity.ts +261 -0
- package/src/scripts/bench_ab_run.ts +417 -0
- package/src/scripts/bench_ab_task_runner.ts +1382 -0
- package/src/scripts/bench_ab_tracka_run.ts +436 -0
- package/src/scripts/bench_ab_v2_run.ts +585 -0
- package/src/scripts/bench_ab_v2_stats.ts +1018 -0
- package/src/scripts/bench_baseline_ready.ts +326 -0
- package/src/scripts/bench_condense_memory.ts +479 -0
- package/src/scripts/bench_drift_check.ts +503 -0
- package/src/scripts/bench_per_tool.ts +591 -0
- package/src/scripts/bench_rtk_savings.ts +710 -0
- package/src/scripts/bench_run.ts +509 -0
- package/src/scripts/bench_runner.ts +519 -0
- package/src/scripts/build_cloud_bundle.ts +692 -0
- package/src/scripts/build_discovery_manifest.ts +1371 -0
- package/src/scripts/build_linear_digest.ts +368 -0
- package/src/scripts/build_mcp_registry_manifest.ts +351 -0
- package/src/scripts/build_rule_trigger_matrix.ts +469 -0
- package/src/scripts/capture_showcase_session.ts +735 -0
- package/src/scripts/chat_history.ts +2301 -0
- package/src/scripts/check_always_budget.ts +694 -0
- package/src/scripts/check_artefact_checksums.ts +281 -0
- package/src/scripts/check_augment_description_cap.ts +133 -0
- package/src/scripts/check_augmentignore.ts +108 -0
- package/src/scripts/check_beta_review_markers.ts +234 -0
- package/src/scripts/check_bite_sized_granularity.ts +116 -0
- package/src/scripts/check_cluster_patterns.ts +285 -0
- package/src/scripts/check_command_count_messaging.ts +224 -0
- package/src/scripts/check_condensation.ts +900 -0
- package/src/scripts/check_condensed_paths.ts +414 -0
- package/src/scripts/check_context_paths.ts +388 -0
- package/src/scripts/check_council_config_location.ts +260 -0
- package/src/scripts/check_council_layout.ts +180 -0
- package/src/scripts/check_council_references.ts +345 -0
- package/src/scripts/check_discovery_determinism.ts +124 -0
- package/src/scripts/check_gate_paths.ts +230 -0
- package/src/scripts/check_iron_law_prominence.ts +298 -0
- package/src/scripts/check_kernel_rule_bundle.ts +242 -0
- package/src/scripts/check_knowledge_cards.ts +759 -0
- package/src/scripts/check_md_language.ts +291 -0
- package/src/scripts/check_memory.ts +845 -0
- package/src/scripts/check_memory_proposal.ts +351 -0
- package/src/scripts/check_module_management_neutral.ts +238 -0
- package/src/scripts/check_no_conflict_markers.ts +298 -0
- package/src/scripts/check_no_conflict_markers_allowlist.json +4 -0
- package/src/scripts/check_no_external_sources.ts +351 -0
- package/src/scripts/check_no_local_settings_committed.ts +69 -0
- package/src/scripts/check_no_new_legacy_path.ts +188 -0
- package/src/scripts/check_no_roadmap_refs.ts +304 -0
- package/src/scripts/check_one_off_location.ts +165 -0
- package/src/scripts/check_overlay_cascade_subdirs.ts +188 -0
- package/src/scripts/check_portability.ts +860 -0
- package/src/scripts/check_proposal.ts +0 -0
- package/src/scripts/check_public_catalog_links.ts +204 -0
- package/src/scripts/check_public_links.ts +357 -0
- package/src/scripts/check_references.ts +963 -0
- package/src/scripts/check_release_includes_discovery.ts +94 -0
- package/src/scripts/check_release_pr_shape.ts +222 -0
- package/src/scripts/check_release_published.ts +235 -0
- package/src/scripts/check_release_trunk_sync.ts +203 -0
- package/src/scripts/check_reply_consistency.ts +359 -0
- package/src/scripts/check_roadmap_trackable.ts +268 -0
- package/src/scripts/check_role_doc_links.ts +187 -0
- package/src/scripts/check_safety_floor_untouched.ts +160 -0
- package/src/scripts/check_skill_requires.ts +205 -0
- package/src/scripts/check_structural_breaking.ts +170 -0
- package/src/scripts/check_surface_tiers.ts +567 -0
- package/src/scripts/check_template_pin_drift.ts +222 -0
- package/src/scripts/check_test_coverage_diff.ts +235 -0
- package/src/scripts/check_token_optimizer_freshness.ts +183 -0
- package/src/scripts/check_trigger_evals.ts +375 -0
- package/src/scripts/check_update_banner.ts +143 -0
- package/src/scripts/ci_status.ts +0 -0
- package/src/scripts/ci_summary.ts +235 -0
- package/src/scripts/ci_time_ratio.ts +526 -0
- package/src/scripts/command_suggester/cooldown.ts +176 -0
- package/src/scripts/command_suggester/index.ts +41 -0
- package/src/scripts/command_suggester/loader.ts +205 -0
- package/src/scripts/command_suggester/match.ts +294 -0
- package/src/scripts/command_suggester/rank.ts +201 -0
- package/src/scripts/command_suggester/render.ts +122 -0
- package/src/scripts/command_suggester/sanitize.ts +114 -0
- package/src/scripts/command_suggester/settings.ts +186 -0
- package/src/scripts/command_suggester/types.ts +0 -0
- package/src/scripts/compile_router.ts +297 -0
- package/src/scripts/condense.sh +7 -1
- package/src/scripts/condense.ts +2035 -0
- package/src/scripts/condense_memory.ts +334 -0
- package/src/scripts/config/index.ts +15 -0
- package/src/scripts/config/packs.ts +310 -0
- package/src/scripts/config/presets.ts +369 -0
- package/src/scripts/config/profile_explain.ts +114 -0
- package/src/scripts/config/profiles.ts +277 -0
- package/src/scripts/config/session_profiles.ts +1064 -0
- package/src/scripts/context_hygiene_hook.ts +272 -0
- package/src/scripts/cost_by_conversation.ts +444 -0
- package/src/scripts/cost_summary.ts +407 -0
- package/src/scripts/council_cli.ts +2827 -0
- package/src/scripts/council_prune.ts +153 -0
- package/src/scripts/cross_repo_retrieve.ts +694 -0
- package/src/scripts/discovery_stats.ts +218 -0
- package/src/scripts/evidence_report.ts +580 -0
- package/src/scripts/external_sources_denylist.json +92 -0
- package/src/scripts/extract_audit_patterns.ts +394 -0
- package/src/scripts/first_run_gate_hook.ts +246 -0
- package/src/scripts/gen_discovery_baseline.ts +297 -0
- package/src/scripts/generate_capabilities_index.ts +496 -0
- package/src/scripts/generate_capability_matrix.ts +430 -0
- package/src/scripts/generate_catalog.ts +178 -0
- package/src/scripts/generate_command_flows.ts +316 -0
- package/src/scripts/generate_cookbook.ts +302 -0
- package/src/scripts/generate_index.ts +500 -0
- package/src/scripts/generate_ownership_matrix.ts +646 -0
- package/src/scripts/generate_pack_manifests.ts +1025 -0
- package/src/scripts/generate_role_experiences_catalog.ts +265 -0
- package/src/scripts/hermetic-install.sh +22 -11
- package/src/scripts/hook_manifest.yaml +37 -15
- package/src/scripts/hooks/augment-chat-history.sh +3 -10
- package/src/scripts/hooks/augment-context-hygiene.sh +3 -10
- package/src/scripts/hooks/augment-dispatcher.sh +3 -10
- package/src/scripts/hooks/augment-onboarding-gate.sh +3 -10
- package/src/scripts/hooks/augment-roadmap-progress.sh +3 -10
- package/src/scripts/hooks/block_no_verify.ts +413 -0
- package/src/scripts/hooks/cline-dispatcher.sh +3 -10
- package/src/scripts/hooks/cowork-dispatcher.sh +3 -14
- package/src/scripts/hooks/cursor-dispatcher.sh +3 -10
- package/src/scripts/hooks/dispatch_hook.ts +851 -0
- package/src/scripts/hooks/dispatch_issues.ts +226 -0
- package/src/scripts/hooks/envelope.ts +140 -0
- package/src/scripts/hooks/gemini-dispatcher.sh +3 -8
- package/src/scripts/hooks/replay_hook.ts +364 -0
- package/src/scripts/hooks/state_io.ts +293 -0
- package/src/scripts/hooks/windsurf-dispatcher.sh +3 -9
- package/src/scripts/hooks_doctor.ts +418 -0
- package/src/scripts/hooks_status.ts +292 -0
- package/src/scripts/injection_scan_hook.ts +285 -0
- package/src/scripts/install +36 -22
- package/src/scripts/install-hooks.sh +29 -12
- package/src/scripts/install.sh +38 -14
- package/src/scripts/install.ts +4515 -0
- package/src/scripts/inventory_abstraction_budget.ts +1104 -0
- package/src/scripts/inventory_frontmatter.ts +320 -0
- package/src/scripts/inventory_meta_layers.ts +516 -0
- package/src/scripts/iron_law_sha.ts +233 -0
- package/src/scripts/knowledge_global_cli.ts +1105 -0
- package/src/scripts/linked_projects_list.ts +310 -0
- package/src/scripts/lint_agent_security.ts +224 -0
- package/src/scripts/lint_agent_skill_names.ts +241 -0
- package/src/scripts/lint_agents_layout.ts +205 -0
- package/src/scripts/lint_agents_md.ts +294 -0
- package/src/scripts/lint_archived_skills.ts +309 -0
- package/src/scripts/lint_artefact_frontmatter.ts +359 -0
- package/src/scripts/lint_bench_ab.ts +319 -0
- package/src/scripts/lint_bench_corpus.ts +421 -0
- package/src/scripts/lint_command_flow_coverage.ts +231 -0
- package/src/scripts/lint_command_routing.ts +377 -0
- package/src/scripts/lint_command_tiers.ts +345 -0
- package/src/scripts/lint_command_verbs.ts +379 -0
- package/src/scripts/lint_commit_subjects.ts +243 -0
- package/src/scripts/lint_context_spine_usage.ts +198 -0
- package/src/scripts/lint_discovery_manifest.ts +540 -0
- package/src/scripts/lint_discovery_vocabulary.ts +393 -0
- package/src/scripts/lint_empty_roadmaps.ts +147 -0
- package/src/scripts/lint_eval_freshness.ts +335 -0
- package/src/scripts/lint_examples.ts +183 -0
- package/src/scripts/lint_explain_trace.ts +381 -0
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_flows.ts +701 -0
- package/src/scripts/lint_framework_leakage.ts +497 -0
- package/src/scripts/lint_framework_leakage_allowlist.json +8 -1
- package/src/scripts/lint_frontmatter_boilerplate.ts +356 -0
- package/src/scripts/lint_ghostwriter_source.ts +389 -0
- package/src/scripts/lint_global_paths.ts +420 -0
- package/src/scripts/lint_handoffs.ts +362 -0
- package/src/scripts/lint_hidden_unicode.ts +350 -0
- package/src/scripts/lint_hook_concern_budget.ts +319 -0
- package/src/scripts/lint_hook_manifest.ts +354 -0
- package/src/scripts/lint_instruction_smuggling.ts +173 -0
- package/src/scripts/lint_load_context.ts +371 -0
- package/src/scripts/lint_marketplace.ts +286 -0
- package/src/scripts/lint_marketplace_install_completeness.ts +309 -0
- package/src/scripts/lint_mcp_config_security.ts +225 -0
- package/src/scripts/lint_mcp_registry_manifest.ts +350 -0
- package/src/scripts/lint_media_policy_linkage.ts +224 -0
- package/src/scripts/lint_missions.ts +774 -0
- package/src/scripts/lint_model_tier_coverage.ts +151 -0
- package/src/scripts/lint_namespace.ts +295 -0
- package/src/scripts/lint_namespace_collisions.ts +203 -0
- package/src/scripts/lint_new_skill_gate.ts +462 -0
- package/src/scripts/lint_no_new_atomic_commands.ts +342 -0
- package/src/scripts/lint_one_off_age.ts +348 -0
- package/src/scripts/lint_orchestration_dsl.ts +377 -0
- package/src/scripts/lint_orchestrator_auto_detect.ts +177 -0
- package/src/scripts/lint_pack_boundaries.ts +366 -0
- package/src/scripts/lint_pack_dependencies.ts +541 -0
- package/src/scripts/lint_pack_first_win.ts +202 -0
- package/src/scripts/lint_persona_governance.ts +292 -0
- package/src/scripts/lint_positioning.ts +257 -0
- package/src/scripts/lint_profile_overlay_set_only.ts +324 -0
- package/src/scripts/lint_readme_jargon.ts +189 -0
- package/src/scripts/lint_readme_size.ts +73 -0
- package/src/scripts/lint_regression.ts +497 -0
- package/src/scripts/lint_roadmap_ci_steps.ts +252 -0
- package/src/scripts/lint_roadmap_complexity.ts +295 -0
- package/src/scripts/lint_roadmap_later_disposition.ts +357 -0
- package/src/scripts/lint_role_experiences.ts +410 -0
- package/src/scripts/lint_rule_interactions.ts +281 -0
- package/src/scripts/lint_rule_tiers.ts +169 -0
- package/src/scripts/lint_showcase_sessions.ts +254 -0
- package/src/scripts/lint_skill_frontmatter_safety.ts +279 -0
- package/src/scripts/lint_skill_originality.ts +586 -0
- package/src/scripts/lint_skill_originality_allowlist.json +20 -0
- package/src/scripts/lint_skill_tools.ts +320 -0
- package/src/scripts/lint_ticket_buildable.ts +1027 -0
- package/src/scripts/lint_topics_yaml.ts +203 -0
- package/src/scripts/lint_trust_coherence.ts +377 -0
- package/src/scripts/lint_value_dashboard.ts +314 -0
- package/src/scripts/lint_workflow_security.ts +637 -0
- package/src/scripts/lint_workflow_security_allowlist.json +20 -0
- package/src/scripts/lint_workspace_boundary.ts +248 -0
- package/src/scripts/mcp_parity_smoke.ts +638 -0
- package/src/scripts/mcp_render.ts +346 -0
- package/src/scripts/mcp_server/__main__.ts +28 -0
- package/src/scripts/mcp_server/catalog.ts +154 -0
- package/src/scripts/mcp_server/consumer_tool_catalog.json +2 -3
- package/src/scripts/mcp_server/index.ts +24 -0
- package/src/scripts/mcp_server/metadata.ts +83 -0
- package/src/scripts/mcp_server/prompts.ts +711 -0
- package/src/scripts/mcp_server/resources.ts +343 -0
- package/src/scripts/mcp_server/server.ts +439 -0
- package/src/scripts/mcp_server/telemetry.ts +154 -0
- package/src/scripts/mcp_server/tools.ts +1031 -0
- package/src/scripts/mcp_setup.sh +25 -52
- package/src/scripts/mcp_telemetry_health.ts +362 -0
- package/src/scripts/mcp_telemetry_query.ts +371 -0
- package/src/scripts/mcp_telemetry_store.ts +422 -0
- package/src/scripts/measure_augment_budget.ts +453 -0
- package/src/scripts/measure_density.ts +618 -0
- package/src/scripts/measure_frugality_savings.ts +353 -0
- package/src/scripts/measure_markitdown_lift.ts +299 -0
- package/src/scripts/measure_patterns.ts +682 -0
- package/src/scripts/measure_projection_bytes.ts +425 -0
- package/src/scripts/measure_rule_budget.ts +627 -0
- package/src/scripts/measure_skill_reduction.ts +442 -0
- package/src/scripts/media/lib/adapter-common.sh +247 -0
- package/src/scripts/media/lib/adapter-contract.md +329 -0
- package/src/scripts/media/lib/fixtures/comfyui/result.json +1 -0
- package/src/scripts/media/lib/fixtures/fal/result.json +1 -0
- package/src/scripts/media/lib/fixtures/flux/asset-0001.png +0 -0
- package/src/scripts/media/lib/fixtures/flux/result.json +1 -0
- package/src/scripts/media/lib/fixtures/gemini-image/asset-0001.png +0 -0
- package/src/scripts/media/lib/fixtures/gemini-image/result.json +1 -0
- package/src/scripts/media/lib/fixtures/gemini-veo/result.json +1 -0
- package/src/scripts/media/lib/fixtures/higgsfield/result.json +1 -0
- package/src/scripts/media/lib/fixtures/ideogram/asset-0001.png +0 -0
- package/src/scripts/media/lib/fixtures/ideogram/result.json +1 -0
- package/src/scripts/media/lib/fixtures/kling/result.json +1 -0
- package/src/scripts/media/lib/fixtures/musetalk/result.json +1 -0
- package/src/scripts/media/lib/fixtures/openai-images/result.json +1 -0
- package/src/scripts/media/lib/fixtures/recraft/asset-0001.svg +1 -0
- package/src/scripts/media/lib/fixtures/recraft/result.json +1 -0
- package/src/scripts/media/lib/fixtures/replicate/result.json +1 -0
- package/src/scripts/media/lib/fixtures/sora/result.json +1 -0
- package/src/scripts/media/lib/fixtures/syncso/result.json +1 -0
- package/src/scripts/media/lib/load-config.sh +180 -0
- package/src/scripts/media/lib/redact.sh +85 -0
- package/src/scripts/memory_hash.ts +331 -0
- package/src/scripts/memory_lookup.ts +1278 -0
- package/src/scripts/memory_report.ts +845 -0
- package/src/scripts/memory_signal.ts +417 -0
- package/src/scripts/memory_status.ts +189 -0
- package/src/scripts/migrate_command_suggestions.ts +341 -0
- package/src/scripts/migrate_frontmatter_defaults.ts +539 -0
- package/src/scripts/migration_status.ts +301 -0
- package/src/scripts/mine_session.ts +645 -0
- package/src/scripts/minimal_safe_diff_hook.ts +355 -0
- package/src/scripts/move_artefact.ts +869 -0
- package/src/scripts/new_skill.ts +404 -0
- package/src/scripts/onboarding_gate_hook.ts +224 -0
- package/src/scripts/pack_dependency_allowlist.json +2 -2
- package/src/scripts/pack_mcp_content.ts +552 -0
- package/src/scripts/parity/README.md +140 -0
- package/src/scripts/parity/compare.ts +189 -0
- package/src/scripts/parity/coverage_diff.ts +199 -0
- package/src/scripts/parity/phase-manifest.json +93 -0
- package/src/scripts/parity/phase_gate.ts +270 -0
- package/src/scripts/parity/replay.ts +320 -0
- package/src/scripts/pattern_share.ts +363 -0
- package/src/scripts/plan_physical_move.ts +605 -0
- package/src/scripts/prediction-pool/poisson_sim.ts +537 -0
- package/src/scripts/prediction-pool/pool_winsim.ts +677 -0
- package/src/scripts/prediction-pool/score_ev.ts +546 -0
- package/src/scripts/print_required_checks.ts +249 -0
- package/src/scripts/probe_projection_fidelity.ts +468 -0
- package/src/scripts/probe_skill_registration.ts +787 -0
- package/src/scripts/profile_staleness_hook.ts +169 -0
- package/src/scripts/profile_use.ts +227 -0
- package/src/scripts/project_thin_rules.ts +387 -0
- package/src/scripts/propose_modules_config.ts +311 -0
- package/src/scripts/prototype_lint_contradictions.ts +414 -0
- package/src/scripts/prove_pack_extractable.ts +388 -0
- package/src/scripts/readme_linter.ts +913 -0
- package/src/scripts/redact_hook_capture.ts +325 -0
- package/src/scripts/refine_ticket_detect.ts +703 -0
- package/src/scripts/release.ts +1697 -0
- package/src/scripts/render_benchmark_md.ts +664 -0
- package/src/scripts/render_value_md.ts +506 -0
- package/src/scripts/repro/repro_marketplace_install_gap.sh +1 -1
- package/src/scripts/roadmap_progress_hook.ts +410 -0
- package/src/scripts/router_telemetry.ts +972 -0
- package/src/scripts/run.ts +98 -0
- package/src/scripts/run_skill_evals.ts +477 -0
- package/src/scripts/runtime_dispatcher.ts +586 -0
- package/src/scripts/runtime_handler.ts +231 -0
- package/src/scripts/runtime_registry.ts +394 -0
- package/src/scripts/schemas/command.schema.json +7 -1
- package/src/scripts/schemas/mission-catalog.schema.json +112 -0
- package/src/scripts/schemas/mission.schema.json +87 -0
- package/src/scripts/schemas/pack.schema.json +6 -0
- package/src/scripts/schemas/rule.schema.json +1 -0
- package/src/scripts/schemas/skill.schema.json +1 -0
- package/src/scripts/schemas/ticket-manifest.schema.json +35 -0
- package/src/scripts/schemas/ticket.schema.json +60 -0
- package/src/scripts/score_skill_selection.ts +570 -0
- package/src/scripts/security_audit_config.ts +423 -0
- package/src/scripts/skill_collision_clusters.ts +448 -0
- package/src/scripts/skill_discovery.ts +690 -0
- package/src/scripts/skill_linter.ts +4276 -0
- package/src/scripts/skill_overlap.ts +414 -0
- package/src/scripts/skill_preview.ts +548 -0
- package/src/scripts/skill_tools/audit_persona_coverage.ts +427 -0
- package/src/scripts/skill_tools/audit_user_type_coverage.ts +507 -0
- package/src/scripts/skill_tools/index.ts +28 -0
- package/src/scripts/skill_tools/run_block_d_eval.ts +373 -0
- package/src/scripts/skill_tools/score_skill_relevance.ts +475 -0
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +288 -0
- package/src/scripts/skill_trigger_eval.ts +1046 -0
- package/src/scripts/skill_usage_collect.ts +465 -0
- package/src/scripts/skill_usage_report.ts +364 -0
- package/src/scripts/smoke/kernel.sh +4 -5
- package/src/scripts/smoke/router.sh +76 -76
- package/src/scripts/smoke/schema.sh +2 -2
- package/src/scripts/smoke/skills.sh +73 -52
- package/src/scripts/smoke_path_resolution.ts +194 -0
- package/src/scripts/smoke_quickstart.ts +224 -0
- package/src/scripts/snapshot_agent_outputs.ts +375 -0
- package/src/scripts/spotcheck_thin_root.ts +247 -0
- package/src/scripts/surface-tiers.yml +68 -0
- package/src/scripts/sync_agent_settings.ts +763 -0
- package/src/scripts/sync_github_metadata.ts +550 -0
- package/src/scripts/sync_gitignore.ts +630 -0
- package/src/scripts/sync_yaml_rt.ts +910 -0
- package/src/scripts/telegraph_stats.ts +447 -0
- package/src/scripts/tool_registry.ts +330 -0
- package/src/scripts/tools/adapter_errors.ts +93 -0
- package/src/scripts/tools/base_adapter.ts +147 -0
- package/src/scripts/tools/github_adapter.ts +229 -0
- package/src/scripts/tools/jira_adapter.ts +196 -0
- package/src/scripts/trigger_coverage.ts +251 -0
- package/src/scripts/update_counts.ts +284 -0
- package/src/scripts/update_prices.ts +219 -0
- package/src/scripts/validate_agent_settings.ts +265 -0
- package/src/scripts/validate_decision_engine.ts +366 -0
- package/src/scripts/validate_discovery_manifest.ts +160 -0
- package/src/scripts/validate_frontmatter.ts +1030 -0
- package/src/scripts/validate_pack_yaml.ts +0 -0
- package/src/scripts/validate_safe_paths.ts +164 -0
- package/src/scripts/validate_telegraph_carveouts.ts +485 -0
- package/src/scripts/verify_before_complete_hook.ts +306 -0
- package/src/scripts/verify_physical_move.ts +411 -0
- package/src/scripts/wrapper_freshness_hook.ts +179 -0
- package/dist/agent-src/commands/chat-history/learn.md +0 -184
- package/dist/agent-src/commands/chat-history/show.md +0 -113
- package/dist/agent-src/commands/fix/pr-bot-comments.md +0 -157
- package/dist/agent-src/commands/fix/pr-developer-comments.md +0 -163
- package/dist/agent-src/scripts/update_roadmap_progress.py +0 -537
- package/dist/agent-src/skills/corpus-grounding/scripts/bm25_search.py +0 -212
- package/dist/agent-src/skills/corpus-grounding/scripts/decision_engine.py +0 -438
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.py +0 -166
- package/dist/agent-src/skills/corpus-grounding/scripts/schema_validator.py +0 -160
- package/dist/agent-src/skills/design-tokens/scripts/tokens.py +0 -296
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.py +0 -299
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.py +0 -463
- package/dist/agent-src/templates/agents/memory/architecture-decisions.example.yml +0 -95
- package/dist/agent-src/templates/scripts/check_memory.py +0 -283
- package/dist/agent-src/templates/scripts/check_memory_proposal.py +0 -180
- package/dist/agent-src/templates/scripts/implement_ticket/__init__.py +0 -94
- package/dist/agent-src/templates/scripts/implement_ticket/__main__.py +0 -15
- package/dist/agent-src/templates/scripts/memory_hash.py +0 -75
- package/dist/agent-src/templates/scripts/memory_lookup.py +0 -577
- package/dist/agent-src/templates/scripts/memory_report.py +0 -184
- package/dist/agent-src/templates/scripts/memory_signal.py +0 -167
- package/dist/agent-src/templates/scripts/memory_status.py +0 -257
- package/dist/agent-src/templates/scripts/pr_review_routing.py +0 -340
- package/dist/agent-src/templates/scripts/pr_risk_review.py +0 -211
- package/dist/agent-src/templates/scripts/telemetry/__init__.py +0 -42
- package/dist/agent-src/templates/scripts/telemetry/aggregator.py +0 -169
- package/dist/agent-src/templates/scripts/telemetry/boundary.py +0 -171
- package/dist/agent-src/templates/scripts/telemetry/engagement.py +0 -297
- package/dist/agent-src/templates/scripts/telemetry/report_renderer.py +0 -197
- package/dist/agent-src/templates/scripts/telemetry/settings.py +0 -177
- package/dist/agent-src/templates/scripts/telemetry_record.py +0 -179
- package/dist/agent-src/templates/scripts/telemetry_report.py +0 -161
- package/dist/agent-src/templates/scripts/telemetry_status.py +0 -142
- package/dist/agent-src/templates/scripts/tier_usage_report.py +0 -183
- package/dist/agent-src/templates/scripts/work_engine/__init__.py +0 -58
- package/dist/agent-src/templates/scripts/work_engine/__main__.py +0 -9
- package/dist/agent-src/templates/scripts/work_engine/_lib/__init__.py +0 -7
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.py +0 -840
- package/dist/agent-src/templates/scripts/work_engine/_lib/user_global_paths.py +0 -249
- package/dist/agent-src/templates/scripts/work_engine/cli.py +0 -195
- package/dist/agent-src/templates/scripts/work_engine/cli_args.py +0 -116
- package/dist/agent-src/templates/scripts/work_engine/delivery_state.py +0 -137
- package/dist/agent-src/templates/scripts/work_engine/directives/__init__.py +0 -33
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/__init__.py +0 -98
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/analyze.py +0 -98
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.py +0 -145
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/memory.py +0 -136
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/plan.py +0 -175
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/refine.py +0 -396
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/report.py +0 -227
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.py +0 -180
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.py +0 -170
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/__init__.py +0 -116
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/contract.py +0 -254
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.py +0 -229
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/ui.py +0 -231
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/__init__.py +0 -113
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.py +0 -44
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.py +0 -241
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.py +0 -414
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/design.py +0 -335
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/polish.py +0 -513
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/review.py +0 -471
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/__init__.py +0 -119
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.py +0 -37
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.py +0 -165
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.py +0 -66
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.py +0 -62
- package/dist/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.py +0 -115
- package/dist/agent-src/templates/scripts/work_engine/dispatcher.py +0 -331
- package/dist/agent-src/templates/scripts/work_engine/emitters.py +0 -68
- package/dist/agent-src/templates/scripts/work_engine/errors.py +0 -19
- package/dist/agent-src/templates/scripts/work_engine/hook_bootstrap.py +0 -91
- package/dist/agent-src/templates/scripts/work_engine/hooks/__init__.py +0 -54
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/__init__.py +0 -35
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.py +0 -59
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.py +0 -43
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.py +0 -41
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.py +0 -162
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +0 -163
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.py +0 -53
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.py +0 -50
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +0 -141
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.py +0 -52
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/trace.py +0 -84
- package/dist/agent-src/templates/scripts/work_engine/hooks/context.py +0 -66
- package/dist/agent-src/templates/scripts/work_engine/hooks/events.py +0 -44
- package/dist/agent-src/templates/scripts/work_engine/hooks/exceptions.py +0 -79
- package/dist/agent-src/templates/scripts/work_engine/hooks/registry.py +0 -60
- package/dist/agent-src/templates/scripts/work_engine/hooks/runner.py +0 -73
- package/dist/agent-src/templates/scripts/work_engine/hooks/settings.py +0 -196
- package/dist/agent-src/templates/scripts/work_engine/input_builders.py +0 -163
- package/dist/agent-src/templates/scripts/work_engine/intent/__init__.py +0 -47
- package/dist/agent-src/templates/scripts/work_engine/intent/classify.py +0 -280
- package/dist/agent-src/templates/scripts/work_engine/migration/__init__.py +0 -8
- package/dist/agent-src/templates/scripts/work_engine/migration/v0_to_v1.py +0 -231
- package/dist/agent-src/templates/scripts/work_engine/orchestration.py +0 -193
- package/dist/agent-src/templates/scripts/work_engine/persona_policy.py +0 -85
- package/dist/agent-src/templates/scripts/work_engine/resolvers/__init__.py +0 -22
- package/dist/agent-src/templates/scripts/work_engine/resolvers/diff.py +0 -106
- package/dist/agent-src/templates/scripts/work_engine/resolvers/file.py +0 -113
- package/dist/agent-src/templates/scripts/work_engine/resolvers/prompt.py +0 -90
- package/dist/agent-src/templates/scripts/work_engine/scoring/__init__.py +0 -14
- package/dist/agent-src/templates/scripts/work_engine/scoring/confidence.py +0 -300
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_engine.py +0 -351
- package/dist/agent-src/templates/scripts/work_engine/scoring/decision_trace.py +0 -141
- package/dist/agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +0 -284
- package/dist/agent-src/templates/scripts/work_engine/stack/__init__.py +0 -31
- package/dist/agent-src/templates/scripts/work_engine/stack/detect.py +0 -187
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.py +0 -481
- package/dist/agent-src/templates/scripts/work_engine/state.py +0 -694
- package/dist/agent-src/templates/scripts/work_engine/state_io.py +0 -202
- package/dist/cli/python/resolvePython.js +0 -38
- package/dist/cli/python/resolvePython.js.map +0 -1
- package/docs/case-studies/frontend-design-vs-ui-ux-pro-max.md +0 -86
- package/docs/contracts/agent-memory-contract.md +0 -159
- package/docs/parity/bench-ruflo.json +0 -58
- package/docs/parity/ruflo.md +0 -46
- package/src/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/src/scripts/_archive/_backfill_skill_domains.py +0 -140
- package/src/scripts/_archive/_bootstrap_tier_frontmatter.py +0 -151
- package/src/scripts/_archive/_p43_bodies.py +0 -235
- package/src/scripts/_archive/_p43_condense.py +0 -118
- package/src/scripts/_archive/_p4_migrate.py +0 -199
- package/src/scripts/_archive/_phase2_shim_helper.py +0 -109
- package/src/scripts/_archive/_pilot_council_question.py +0 -57
- package/src/scripts/_cli/__init__.py +0 -0
- package/src/scripts/_cli/cmd_doctor.py +0 -1583
- package/src/scripts/_cli/cmd_explain.py +0 -355
- package/src/scripts/_cli/cmd_export.py +0 -157
- package/src/scripts/_cli/cmd_migrate.py +0 -524
- package/src/scripts/_cli/cmd_prune.py +0 -322
- package/src/scripts/_cli/cmd_refresh.py +0 -179
- package/src/scripts/_cli/cmd_settings_check.py +0 -171
- package/src/scripts/_cli/cmd_settings_migrate.py +0 -147
- package/src/scripts/_cli/cmd_sync.py +0 -166
- package/src/scripts/_cli/cmd_uninstall.py +0 -476
- package/src/scripts/_cli/cmd_update.py +0 -279
- package/src/scripts/_cli/cmd_upgrade.py +0 -172
- package/src/scripts/_cli/cmd_validate.py +0 -177
- package/src/scripts/_cli/cmd_versions.py +0 -160
- package/src/scripts/_cli/explain_last/__init__.py +0 -122
- package/src/scripts/_cli/explain_last/assumptions.py +0 -59
- package/src/scripts/_cli/explain_last/council.py +0 -105
- package/src/scripts/_cli/explain_last/halt.py +0 -44
- package/src/scripts/_cli/explain_last/inputs.py +0 -128
- package/src/scripts/_cli/explain_last/memory.py +0 -94
- package/src/scripts/_cli/explain_last/provider.py +0 -52
- package/src/scripts/_cli/explain_last/render.py +0 -52
- package/src/scripts/_cli/explain_last/route.py +0 -59
- package/src/scripts/_cli/explain_last/scrubber.py +0 -105
- package/src/scripts/_cli/explain_last/sections/__init__.py +0 -35
- package/src/scripts/_cli/explain_last/sections/assumptions.py +0 -21
- package/src/scripts/_cli/explain_last/sections/council.py +0 -27
- package/src/scripts/_cli/explain_last/sections/halt.py +0 -31
- package/src/scripts/_cli/explain_last/sections/header.py +0 -24
- package/src/scripts/_cli/explain_last/sections/inputs.py +0 -27
- package/src/scripts/_cli/explain_last/sections/memory.py +0 -21
- package/src/scripts/_cli/explain_last/sections/pack.py +0 -16
- package/src/scripts/_cli/explain_last/sections/provider.py +0 -26
- package/src/scripts/_cli/explain_last/sections/route.py +0 -22
- package/src/scripts/_cli/explain_last/state_loader.py +0 -76
- package/src/scripts/_emit_domain_table.py +0 -35
- package/src/scripts/_lib/__init__.py +0 -5
- package/src/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/src/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/src/scripts/_lib/agent_settings.py +0 -840
- package/src/scripts/_lib/agent_src.py +0 -491
- package/src/scripts/_lib/agents_overlay.py +0 -120
- package/src/scripts/_lib/bench_ab_cache.py +0 -162
- package/src/scripts/_lib/bench_ab_scoring.py +0 -209
- package/src/scripts/_lib/bench_cost.py +0 -138
- package/src/scripts/_lib/bench_quality.py +0 -118
- package/src/scripts/_lib/bench_report.py +0 -149
- package/src/scripts/_lib/bench_telegraph.py +0 -273
- package/src/scripts/_lib/bench_telegraph_report.py +0 -151
- package/src/scripts/_lib/changelog_eras.py +0 -330
- package/src/scripts/_lib/claude_desktop_bundler.py +0 -238
- package/src/scripts/_lib/cli_wrapper.py +0 -64
- package/src/scripts/_lib/fs_atomic.py +0 -116
- package/src/scripts/_lib/global_deploy_inventory.py +0 -282
- package/src/scripts/_lib/install_regenerator.py +0 -134
- package/src/scripts/_lib/installed_lock.py +0 -256
- package/src/scripts/_lib/installed_tools.py +0 -381
- package/src/scripts/_lib/json_pointers.py +0 -260
- package/src/scripts/_lib/linked_projects.py +0 -238
- package/src/scripts/_lib/model_tier.py +0 -52
- package/src/scripts/_lib/module_detection.py +0 -223
- package/src/scripts/_lib/pin_resolver.py +0 -152
- package/src/scripts/_lib/script_output.py +0 -144
- package/src/scripts/_lib/token_count.py +0 -95
- package/src/scripts/_lib/update_check.py +0 -207
- package/src/scripts/_lib/user_global_paths.py +0 -249
- package/src/scripts/_lib/value_ladder.py +0 -696
- package/src/scripts/_lib/value_report.py +0 -455
- package/src/scripts/_phase4_bucket.py +0 -210
- package/src/scripts/_pilot_measure.py +0 -53
- package/src/scripts/_tmp_scan_framework_leakage.py +0 -119
- package/src/scripts/adoption_report.py +0 -195
- package/src/scripts/adoption_snapshot.py +0 -219
- package/src/scripts/adoption_status.py +0 -166
- package/src/scripts/adr/regenerate_index.py +0 -79
- package/src/scripts/ai-video/lib/adapter-common.sh +0 -231
- package/src/scripts/ai-video/lib/adapter-contract.md +0 -329
- package/src/scripts/ai-video/lib/fixtures/comfyui/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/fal/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/gemini-veo/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/higgsfield/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/kling/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/musetalk/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/openai-images/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/replicate/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/sora/result.json +0 -1
- package/src/scripts/ai-video/lib/fixtures/syncso/result.json +0 -1
- package/src/scripts/ai-video/lib/load-config.sh +0 -180
- package/src/scripts/ai-video/lib/redact.sh +0 -85
- package/src/scripts/ai_council/__init__.py +0 -40
- package/src/scripts/ai_council/_default_prices.py +0 -50
- package/src/scripts/ai_council/advisors.py +0 -148
- package/src/scripts/ai_council/airgap.py +0 -165
- package/src/scripts/ai_council/budget_guard.py +0 -202
- package/src/scripts/ai_council/bundler.py +0 -263
- package/src/scripts/ai_council/cli_hints.py +0 -123
- package/src/scripts/ai_council/clients.py +0 -1385
- package/src/scripts/ai_council/compile_corpus.py +0 -179
- package/src/scripts/ai_council/confidence_gate.py +0 -156
- package/src/scripts/ai_council/config.py +0 -1364
- package/src/scripts/ai_council/consensus.py +0 -329
- package/src/scripts/ai_council/events_log.py +0 -141
- package/src/scripts/ai_council/learn_low_impact_preview.py +0 -252
- package/src/scripts/ai_council/low_impact.py +0 -714
- package/src/scripts/ai_council/low_impact_corpus.py +0 -466
- package/src/scripts/ai_council/low_impact_intake.py +0 -163
- package/src/scripts/ai_council/modes.py +0 -131
- package/src/scripts/ai_council/necessity.py +0 -782
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_2a4_acceptance.py +0 -208
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_add_quiet.py +0 -149
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +0 -206
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_estimate.py +0 -67
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_context_layer_v1_review.py +0 -292
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_followups_review.py +0 -259
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_inject_quiet_flag.py +0 -33
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_v2.sh +0 -36
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_measure_verbosity.sh +0 -26
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_nondestructive_inline_audit.py +0 -209
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_per_task.sh +0 -41
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase4_dispatch_latency.py +0 -108
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase6_trigger_jaccard.py +0 -92
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_budget_rebalance.py +0 -257
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_phase_2a_post_revert.py +0 -197
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rebalancing_audit.py +0 -149
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_roundtrip.py +0 -111
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_rule_hardening_v1.py +0 -251
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_silent_taskfiles.py +0 -98
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_open_questions.py +0 -232
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +0 -144
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_gaps.py +0 -252
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_v3_review.py +0 -240
- package/src/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +0 -180
- package/src/scripts/ai_council/orchestrator.py +0 -1206
- package/src/scripts/ai_council/pricing.py +0 -215
- package/src/scripts/ai_council/probation_gate.py +0 -152
- package/src/scripts/ai_council/project_context.py +0 -159
- package/src/scripts/ai_council/prompts.py +0 -567
- package/src/scripts/ai_council/redact_low_impact_entry.py +0 -155
- package/src/scripts/ai_council/replay.py +0 -155
- package/src/scripts/ai_council/session.py +0 -366
- package/src/scripts/ai_council/shadow_dispatch.py +0 -235
- package/src/scripts/ai_council/solo_dispatch.py +0 -226
- package/src/scripts/annotate_discovery.py +0 -149
- package/src/scripts/apply_modules_config.py +0 -290
- package/src/scripts/audit_adr_coverage.py +0 -175
- package/src/scripts/audit_auto_rules.py +0 -175
- package/src/scripts/audit_cloud_compatibility.py +0 -362
- package/src/scripts/audit_command_surface.py +0 -669
- package/src/scripts/audit_initial_context.py +0 -237
- package/src/scripts/audit_likelihood.py +0 -148
- package/src/scripts/audit_mcp_tools.py +0 -146
- package/src/scripts/audit_overlap.py +0 -145
- package/src/scripts/audit_skill_descriptions.py +0 -180
- package/src/scripts/audit_skill_overlap.py +0 -207
- package/src/scripts/audit_user_type_axis.py +0 -140
- package/src/scripts/backfill_model_tier.py +0 -184
- package/src/scripts/bench_ab_cache_dispatch.py +0 -68
- package/src/scripts/bench_ab_clone.py +0 -170
- package/src/scripts/bench_ab_diff.py +0 -220
- package/src/scripts/bench_ab_integrity.py +0 -143
- package/src/scripts/bench_ab_run.py +0 -235
- package/src/scripts/bench_ab_task_runner.py +0 -369
- package/src/scripts/bench_ab_tracka_run.py +0 -202
- package/src/scripts/bench_baseline_ready.py +0 -108
- package/src/scripts/bench_condense_memory.py +0 -168
- package/src/scripts/bench_drift_check.py +0 -151
- package/src/scripts/bench_per_tool.py +0 -216
- package/src/scripts/bench_rtk_savings.py +0 -320
- package/src/scripts/bench_run.py +0 -272
- package/src/scripts/bench_runner.py +0 -158
- package/src/scripts/build_cloud_bundle.py +0 -458
- package/src/scripts/build_discovery_manifest.py +0 -747
- package/src/scripts/build_linear_digest.py +0 -260
- package/src/scripts/build_mcp_registry_manifest.py +0 -181
- package/src/scripts/build_rule_trigger_matrix.py +0 -350
- package/src/scripts/capture_showcase_session.py +0 -361
- package/src/scripts/chat_history.py +0 -1799
- package/src/scripts/check_always_budget.py +0 -532
- package/src/scripts/check_artefact_checksums.py +0 -111
- package/src/scripts/check_augment_description_cap.py +0 -79
- package/src/scripts/check_augmentignore.py +0 -72
- package/src/scripts/check_beta_review_markers.py +0 -127
- package/src/scripts/check_bite_sized_granularity.py +0 -99
- package/src/scripts/check_cluster_patterns.py +0 -206
- package/src/scripts/check_command_count_messaging.py +0 -152
- package/src/scripts/check_condensation.py +0 -375
- package/src/scripts/check_condensed_paths.py +0 -231
- package/src/scripts/check_context_paths.py +0 -202
- package/src/scripts/check_council_layout.py +0 -125
- package/src/scripts/check_council_references.py +0 -228
- package/src/scripts/check_discovery_determinism.py +0 -70
- package/src/scripts/check_gate_paths.py +0 -128
- package/src/scripts/check_iron_law_prominence.py +0 -145
- package/src/scripts/check_kernel_rule_bundle.py +0 -151
- package/src/scripts/check_md_language.py +0 -161
- package/src/scripts/check_memory.py +0 -443
- package/src/scripts/check_memory_proposal.py +0 -182
- package/src/scripts/check_module_management_neutral.py +0 -147
- package/src/scripts/check_no_local_settings_committed.py +0 -51
- package/src/scripts/check_no_new_legacy_path.py +0 -100
- package/src/scripts/check_no_roadmap_refs.py +0 -155
- package/src/scripts/check_one_off_location.py +0 -81
- package/src/scripts/check_overlay_cascade_subdirs.py +0 -129
- package/src/scripts/check_portability.py +0 -574
- package/src/scripts/check_proposal.py +0 -269
- package/src/scripts/check_public_catalog_links.py +0 -125
- package/src/scripts/check_public_links.py +0 -185
- package/src/scripts/check_references.py +0 -557
- package/src/scripts/check_release_includes_discovery.py +0 -61
- package/src/scripts/check_release_pr_shape.py +0 -123
- package/src/scripts/check_release_published.py +0 -145
- package/src/scripts/check_release_trunk_sync.py +0 -152
- package/src/scripts/check_reply_consistency.py +0 -169
- package/src/scripts/check_roadmap_trackable.py +0 -114
- package/src/scripts/check_role_doc_links.py +0 -110
- package/src/scripts/check_safety_floor_untouched.py +0 -125
- package/src/scripts/check_skill_requires.py +0 -147
- package/src/scripts/check_template_pin_drift.py +0 -129
- package/src/scripts/check_test_coverage_diff.py +0 -180
- package/src/scripts/check_token_optimizer_freshness.py +0 -146
- package/src/scripts/check_update_banner.py +0 -86
- package/src/scripts/ci_status.py +0 -301
- package/src/scripts/ci_summary.py +0 -131
- package/src/scripts/ci_time_ratio.py +0 -168
- package/src/scripts/command_suggester/__init__.py +0 -51
- package/src/scripts/command_suggester/cooldown.py +0 -132
- package/src/scripts/command_suggester/loader.py +0 -73
- package/src/scripts/command_suggester/match.py +0 -180
- package/src/scripts/command_suggester/rank.py +0 -120
- package/src/scripts/command_suggester/render.py +0 -86
- package/src/scripts/command_suggester/sanitize.py +0 -113
- package/src/scripts/command_suggester/settings.py +0 -127
- package/src/scripts/command_suggester/types.py +0 -78
- package/src/scripts/compile_router.py +0 -232
- package/src/scripts/condense.py +0 -1919
- package/src/scripts/condense_memory.py +0 -178
- package/src/scripts/config/__init__.py +0 -9
- package/src/scripts/config/packs.py +0 -157
- package/src/scripts/config/presets.py +0 -224
- package/src/scripts/config/profile_explain.py +0 -89
- package/src/scripts/config/profiles.py +0 -191
- package/src/scripts/config/session_profiles.py +0 -542
- package/src/scripts/context_hygiene_hook.py +0 -181
- package/src/scripts/cost_by_conversation.py +0 -78
- package/src/scripts/cost_summary.py +0 -97
- package/src/scripts/council_cli.py +0 -2557
- package/src/scripts/council_prune.py +0 -81
- package/src/scripts/cross_repo_retrieve.py +0 -172
- package/src/scripts/discovery_stats.py +0 -70
- package/src/scripts/extract_audit_patterns.py +0 -202
- package/src/scripts/first_run_gate_hook.py +0 -179
- package/src/scripts/gen_discovery_baseline.py +0 -127
- package/src/scripts/generate_catalog.py +0 -116
- package/src/scripts/generate_command_flows.py +0 -191
- package/src/scripts/generate_index.py +0 -303
- package/src/scripts/generate_ownership_matrix.py +0 -378
- package/src/scripts/generate_pack_manifests.py +0 -340
- package/src/scripts/hooks/__init__.py +0 -1
- package/src/scripts/hooks/dispatch_hook.py +0 -461
- package/src/scripts/hooks/dispatch_issues.py +0 -136
- package/src/scripts/hooks/envelope.py +0 -98
- package/src/scripts/hooks/replay_hook.py +0 -144
- package/src/scripts/hooks/state_io.py +0 -145
- package/src/scripts/hooks_doctor.py +0 -223
- package/src/scripts/hooks_status.py +0 -157
- package/src/scripts/install.py +0 -5183
- package/src/scripts/inventory_abstraction_budget.py +0 -622
- package/src/scripts/inventory_frontmatter.py +0 -164
- package/src/scripts/inventory_meta_layers.py +0 -288
- package/src/scripts/iron_law_sha.py +0 -107
- package/src/scripts/linked_projects_list.py +0 -91
- package/src/scripts/lint_agent_skill_names.py +0 -150
- package/src/scripts/lint_agents_layout.py +0 -197
- package/src/scripts/lint_agents_md.py +0 -210
- package/src/scripts/lint_archived_skills.py +0 -159
- package/src/scripts/lint_artefact_frontmatter.py +0 -188
- package/src/scripts/lint_bench_ab.py +0 -172
- package/src/scripts/lint_bench_corpus.py +0 -255
- package/src/scripts/lint_command_flow_coverage.py +0 -132
- package/src/scripts/lint_command_routing.py +0 -160
- package/src/scripts/lint_command_tiers.py +0 -175
- package/src/scripts/lint_command_verbs.py +0 -206
- package/src/scripts/lint_commit_subjects.py +0 -139
- package/src/scripts/lint_context_spine_usage.py +0 -137
- package/src/scripts/lint_discovery_manifest.py +0 -176
- package/src/scripts/lint_discovery_vocabulary.py +0 -220
- package/src/scripts/lint_examples.py +0 -102
- package/src/scripts/lint_explain_trace.py +0 -80
- package/src/scripts/lint_featured_skills.py +0 -144
- package/src/scripts/lint_flows.py +0 -215
- package/src/scripts/lint_framework_leakage.py +0 -375
- package/src/scripts/lint_frontmatter_boilerplate.py +0 -77
- package/src/scripts/lint_ghostwriter_source.py +0 -242
- package/src/scripts/lint_global_paths.py +0 -148
- package/src/scripts/lint_handoffs.py +0 -217
- package/src/scripts/lint_hook_concern_budget.py +0 -207
- package/src/scripts/lint_hook_manifest.py +0 -217
- package/src/scripts/lint_load_context.py +0 -196
- package/src/scripts/lint_marketplace.py +0 -180
- package/src/scripts/lint_marketplace_install_completeness.py +0 -198
- package/src/scripts/lint_mcp_registry_manifest.py +0 -69
- package/src/scripts/lint_media_policy_linkage.py +0 -140
- package/src/scripts/lint_model_tier_coverage.py +0 -73
- package/src/scripts/lint_namespace.py +0 -135
- package/src/scripts/lint_namespace_collisions.py +0 -103
- package/src/scripts/lint_new_skill_gate.py +0 -144
- package/src/scripts/lint_no_new_atomic_commands.py +0 -180
- package/src/scripts/lint_one_off_age.py +0 -184
- package/src/scripts/lint_orchestration_dsl.py +0 -217
- package/src/scripts/lint_orchestrator_auto_detect.py +0 -111
- package/src/scripts/lint_pack_boundaries.py +0 -147
- package/src/scripts/lint_pack_dependencies.py +0 -137
- package/src/scripts/lint_pack_first_win.py +0 -121
- package/src/scripts/lint_persona_governance.py +0 -164
- package/src/scripts/lint_positioning.py +0 -143
- package/src/scripts/lint_profile_overlay_set_only.py +0 -179
- package/src/scripts/lint_readme_jargon.py +0 -131
- package/src/scripts/lint_readme_size.py +0 -33
- package/src/scripts/lint_regression.py +0 -251
- package/src/scripts/lint_roadmap_ci_steps.py +0 -186
- package/src/scripts/lint_roadmap_complexity.py +0 -220
- package/src/scripts/lint_role_experiences.py +0 -255
- package/src/scripts/lint_rule_interactions.py +0 -170
- package/src/scripts/lint_rule_tiers.py +0 -90
- package/src/scripts/lint_showcase_sessions.py +0 -148
- package/src/scripts/lint_skill_tools.py +0 -168
- package/src/scripts/lint_topics_yaml.py +0 -89
- package/src/scripts/lint_trust_coherence.py +0 -212
- package/src/scripts/lint_value_dashboard.py +0 -218
- package/src/scripts/mcp_parity_smoke.py +0 -316
- package/src/scripts/mcp_render.py +0 -173
- package/src/scripts/mcp_server/__init__.py +0 -19
- package/src/scripts/mcp_server/__main__.py +0 -12
- package/src/scripts/mcp_server/catalog.py +0 -125
- package/src/scripts/mcp_server/metadata.py +0 -75
- package/src/scripts/mcp_server/prompts.py +0 -442
- package/src/scripts/mcp_server/requirements.txt +0 -4
- package/src/scripts/mcp_server/resources.py +0 -201
- package/src/scripts/mcp_server/server.py +0 -270
- package/src/scripts/mcp_server/telemetry.py +0 -128
- package/src/scripts/mcp_server/tools.py +0 -950
- package/src/scripts/mcp_telemetry_health.py +0 -214
- package/src/scripts/mcp_telemetry_query.py +0 -203
- package/src/scripts/mcp_telemetry_store.py +0 -211
- package/src/scripts/measure_augment_budget.py +0 -214
- package/src/scripts/measure_density.py +0 -232
- package/src/scripts/measure_frugality_savings.py +0 -164
- package/src/scripts/measure_markitdown_lift.py +0 -127
- package/src/scripts/measure_patterns.py +0 -376
- package/src/scripts/measure_projection_bytes.py +0 -159
- package/src/scripts/measure_rule_budget.py +0 -347
- package/src/scripts/measure_skill_reduction.py +0 -102
- package/src/scripts/memory_hash.py +0 -75
- package/src/scripts/memory_lookup.py +0 -705
- package/src/scripts/memory_report.py +0 -336
- package/src/scripts/memory_signal.py +0 -212
- package/src/scripts/memory_status.py +0 -257
- package/src/scripts/migrate_command_suggestions.py +0 -151
- package/src/scripts/migrate_frontmatter_defaults.py +0 -245
- package/src/scripts/mine_session.py +0 -279
- package/src/scripts/minimal_safe_diff_hook.py +0 -245
- package/src/scripts/move_artefact.py +0 -143
- package/src/scripts/new_skill.py +0 -148
- package/src/scripts/onboarding_gate_hook.py +0 -142
- package/src/scripts/pack_mcp_content.py +0 -293
- package/src/scripts/plan_physical_move.py +0 -353
- package/src/scripts/prediction-pool/poisson_sim.py +0 -167
- package/src/scripts/prediction-pool/pool_winsim.py +0 -236
- package/src/scripts/prediction-pool/score_ev.py +0 -188
- package/src/scripts/print_required_checks.py +0 -196
- package/src/scripts/probe_projection_fidelity.py +0 -202
- package/src/scripts/probe_skill_registration.py +0 -413
- package/src/scripts/profile_staleness_hook.py +0 -69
- package/src/scripts/profile_use.py +0 -164
- package/src/scripts/project_thin_rules.py +0 -168
- package/src/scripts/propose_modules_config.py +0 -145
- package/src/scripts/prototype_lint_contradictions.py +0 -150
- package/src/scripts/prove_pack_extractable.py +0 -187
- package/src/scripts/readme_linter.py +0 -589
- package/src/scripts/redact_hook_capture.py +0 -148
- package/src/scripts/refine_ticket_detect.py +0 -646
- package/src/scripts/release.py +0 -1091
- package/src/scripts/render_benchmark_md.py +0 -312
- package/src/scripts/render_value_md.py +0 -347
- package/src/scripts/requirements-evals.txt +0 -8
- package/src/scripts/roadmap_progress_hook.py +0 -274
- package/src/scripts/router_telemetry.py +0 -470
- package/src/scripts/run_skill_evals.py +0 -185
- package/src/scripts/runtime_dispatcher.py +0 -276
- package/src/scripts/runtime_handler.py +0 -148
- package/src/scripts/runtime_registry.py +0 -166
- package/src/scripts/score_skill_selection.py +0 -198
- package/src/scripts/setup_eval_venv.sh +0 -58
- package/src/scripts/skill_collision_clusters.py +0 -162
- package/src/scripts/skill_discovery.py +0 -254
- package/src/scripts/skill_linter.py +0 -3694
- package/src/scripts/skill_overlap.py +0 -204
- package/src/scripts/skill_preview.py +0 -179
- package/src/scripts/skill_tools/__init__.py +0 -22
- package/src/scripts/skill_tools/audit_persona_coverage.py +0 -147
- package/src/scripts/skill_tools/audit_user_type_coverage.py +0 -148
- package/src/scripts/skill_tools/run_block_d_eval.py +0 -129
- package/src/scripts/skill_tools/score_skill_relevance.py +0 -169
- package/src/scripts/skill_tools/suggest_skill_for_task.py +0 -113
- package/src/scripts/skill_trigger_eval.py +0 -682
- package/src/scripts/skill_usage_collect.py +0 -191
- package/src/scripts/skill_usage_report.py +0 -162
- package/src/scripts/smoke_path_resolution.py +0 -93
- package/src/scripts/smoke_quickstart.py +0 -144
- package/src/scripts/snapshot_agent_outputs.py +0 -144
- package/src/scripts/spotcheck_thin_root.py +0 -134
- package/src/scripts/sync_agent_settings.py +0 -180
- package/src/scripts/sync_github_metadata.py +0 -147
- package/src/scripts/sync_gitignore.py +0 -291
- package/src/scripts/sync_yaml_rt.py +0 -734
- package/src/scripts/telegraph_stats.py +0 -119
- package/src/scripts/tool_registry.py +0 -146
- package/src/scripts/tools/__init__.py +0 -1
- package/src/scripts/tools/adapter_errors.py +0 -63
- package/src/scripts/tools/base_adapter.py +0 -91
- package/src/scripts/tools/github_adapter.py +0 -128
- package/src/scripts/tools/jira_adapter.py +0 -115
- package/src/scripts/trigger_coverage.py +0 -129
- package/src/scripts/update_counts.py +0 -199
- package/src/scripts/update_prices.py +0 -125
- package/src/scripts/validate_agent_settings.py +0 -124
- package/src/scripts/validate_decision_engine.py +0 -136
- package/src/scripts/validate_discovery_manifest.py +0 -94
- package/src/scripts/validate_frontmatter.py +0 -647
- package/src/scripts/validate_pack_yaml.py +0 -179
- package/src/scripts/validate_safe_paths.py +0 -118
- package/src/scripts/validate_telegraph_carveouts.py +0 -129
- package/src/scripts/verify_before_complete_hook.py +0 -216
- package/src/scripts/verify_physical_move.py +0 -185
- package/src/scripts/wrapper_freshness_hook.py +0 -86
- /package/dist/agent-src/skills/design-intelligence/data/{typography.csv → font-pairings-reference.csv} +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/allin1/analysis.json +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/comfyui/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/fal/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/gemini-veo/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/higgsfield/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/kling/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/musetalk/lipsync-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/openai-images/scene-0001.png +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/replicate/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/sora/scene-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/syncso/lipsync-0001.mp4 +0 -0
- /package/src/scripts/{ai-video → media}/lib/fixtures/whisperx/transcript.json +0 -0
- /package/src/scripts/{ai-video → media}/lib/telemetry.sh +0 -0
|
@@ -0,0 +1,1151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema v1 of the universal-engine work state.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript twin of `work_engine/state.py` (ADR-200 py2ts). Byte-for-byte
|
|
5
|
+
* serialization parity with the Python original is the contract: field order,
|
|
6
|
+
* defaults, validation order, and error text are all part of the wire format
|
|
7
|
+
* the dispatcher and the freeze-guard replay depend on.
|
|
8
|
+
*
|
|
9
|
+
* The wire format adds five envelope fields on top of the legacy
|
|
10
|
+
* `DeliveryState` shape from `implement_ticket.delivery_state`:
|
|
11
|
+
*
|
|
12
|
+
* - `version` — integer schema version, currently `1`.
|
|
13
|
+
* - `input.kind` — typed input variant (only `"ticket"` for R1).
|
|
14
|
+
* - `input.data` — the original payload (was `state.ticket` in v0).
|
|
15
|
+
* - `intent` — coarse intent label (`"backend-coding"` for R1).
|
|
16
|
+
* - `directive_set` — name of the directive bundle the dispatcher
|
|
17
|
+
* loads. The enum is forward-compatible: `ui`, `ui-trivial`, and
|
|
18
|
+
* `mixed` are accepted by the schema even though only `backend`
|
|
19
|
+
* has working directives in R1 (Phase 4 Step 4 — pre-listed to avoid
|
|
20
|
+
* a schema bump when R3 V2 lands).
|
|
21
|
+
* - `stack` — optional `{frontend, mtime}` cache populated by
|
|
22
|
+
* `work_engine.stack.detect` (R3 Phase 1). `null` while the
|
|
23
|
+
* detector has not yet run; the dispatcher fills it on the first UI
|
|
24
|
+
* dispatch and re-runs detection when `mtime` no longer matches the
|
|
25
|
+
* filesystem (manifest edited).
|
|
26
|
+
* - `ui_audit` — optional inventory written by the
|
|
27
|
+
* `existing-ui-audit` skill (R3 Phase 2). `null` while the audit
|
|
28
|
+
* has not run; populated dict once the skill returns. `greenfield`
|
|
29
|
+
* flag plus `greenfield_decision` carry the user's scaffolding
|
|
30
|
+
* pick. The audit gate (`work_engine.directives.ui.audit`)
|
|
31
|
+
* refuses to advance to design/apply while the slot is empty or
|
|
32
|
+
* while `greenfield` is set without a recorded decision.
|
|
33
|
+
* - `app_spec` — optional greenfield grounding artifact written by
|
|
34
|
+
* `work_engine.directives.ui.app_spec` (greenfield-scaffold
|
|
35
|
+
* Phase 2). Derives a `pages` set, `entity_model`, and `flow_map`
|
|
36
|
+
* from the prompt and carries a `confirmed` flag (the lightweight
|
|
37
|
+
* confirm halt) plus a `bypassed` flag (the "just scaffold" escape).
|
|
38
|
+
* `null` for every non-greenfield-scaffold flow — the app-spec gate
|
|
39
|
+
* is a no-op outside `greenfield_decision == "scaffold"`.
|
|
40
|
+
* - `ui_design` — optional design brief produced by
|
|
41
|
+
* `work_engine.directives.ui.design` (R3 Phase 3 Step 1). Locks
|
|
42
|
+
* layout / components / states / microcopy / a11y; `design_confirmed`
|
|
43
|
+
* carries the user's sign-off.
|
|
44
|
+
* - `ui_scaffold` — optional greenfield scaffold plan written by
|
|
45
|
+
* `work_engine.directives.ui.scaffold` (greenfield-scaffold
|
|
46
|
+
* Phase 3). Plan-only and stack-agnostic
|
|
47
|
+
* (`{pages, routes, layout_strategy, component_manifest, token_seed}`);
|
|
48
|
+
* the engine writes no files — a stack scaffold skill consumes the plan,
|
|
49
|
+
* creates the skeleton, and sets `scaffolded = true` + `artifacts`.
|
|
50
|
+
* `null` for every non-greenfield-scaffold flow. The scaffold gate
|
|
51
|
+
* sits in the `plan` slot (after design): design fixes the abstract
|
|
52
|
+
* visual language, scaffold maps it onto concrete structure.
|
|
53
|
+
* - `ui_review` — optional review-pass output written by
|
|
54
|
+
* `work_engine.directives.ui.review` (R3 Phase 3 Step 4). Carries
|
|
55
|
+
* the design-review findings list and a `review_clean` flag set when
|
|
56
|
+
* no findings remain.
|
|
57
|
+
* - `ui_polish` — optional polish-pass log written by
|
|
58
|
+
* `work_engine.directives.ui.polish` (R3 Phase 3 Step 5). Tracks
|
|
59
|
+
* the round counter (`rounds` <= 2 ceiling) and the per-round
|
|
60
|
+
* applied-fix list so a re-entry knows whether the loop has been
|
|
61
|
+
* exhausted.
|
|
62
|
+
* - `contract` — optional backend-contract envelope written by
|
|
63
|
+
* `work_engine.directives.mixed.contract` (R3 Phase 4 Step 1).
|
|
64
|
+
* Locks `data_model` and `api_surface` before any UI work starts;
|
|
65
|
+
* `contract_confirmed` carries the user's sign-off. The mixed UI
|
|
66
|
+
* step refuses to advance without a confirmed contract — this is the
|
|
67
|
+
* sentinel that prevents UI work from racing ahead of the backend.
|
|
68
|
+
* - `stitch` — optional integration-verification envelope written by
|
|
69
|
+
* `work_engine.directives.mixed.stitch` (R3 Phase 4 Step 3).
|
|
70
|
+
* Carries the end-to-end smoke `scenarios` list, an aggregate
|
|
71
|
+
* `verdict` (success / blocked / partial), and the
|
|
72
|
+
* `integration_confirmed` flag the user sets after reviewing the
|
|
73
|
+
* integration evidence.
|
|
74
|
+
* - `halts` — append-only log of `HookHalt` events the engine
|
|
75
|
+
* persisted into state. Populated by `emitters._emit_halt` when
|
|
76
|
+
* it runs against an already-persisted state file (the P3 branch table
|
|
77
|
+
* is preserved: fresh-run halts before the first `_save` still leave
|
|
78
|
+
* no state on disk). The `explain_last` trace builder reads the
|
|
79
|
+
* tail entry to fill the `trace.halt` slot. Each entry is
|
|
80
|
+
* `{reason, step, surface, timestamp}`. The list defaults to empty
|
|
81
|
+
* and is omitted from older state files via `from_dict`'s tolerant
|
|
82
|
+
* reader — no schema-version bump.
|
|
83
|
+
*
|
|
84
|
+
* All other fields keep their v0 names so the dispatcher can read the
|
|
85
|
+
* legacy slice unchanged once Phase 3 wires the steps over.
|
|
86
|
+
*
|
|
87
|
+
* The module exposes:
|
|
88
|
+
*
|
|
89
|
+
* - `SCHEMA_VERSION` — the integer carried in `version`.
|
|
90
|
+
* - `KNOWN_INPUT_KINDS` / `KNOWN_DIRECTIVE_SETS` — the
|
|
91
|
+
* whitelists used by validation.
|
|
92
|
+
* - `Input`, `WorkState` — typed classes.
|
|
93
|
+
* - `from_dict` / `to_dict` — JSON round-trip helpers.
|
|
94
|
+
* - `SchemaError` — raised on every validation failure.
|
|
95
|
+
*/
|
|
96
|
+
import * as fs from 'node:fs';
|
|
97
|
+
import * as path from 'node:path';
|
|
98
|
+
|
|
99
|
+
// ── JSON value model ────────────────────────────────────────────────────
|
|
100
|
+
//
|
|
101
|
+
// The persisted state carries arbitrary user JSON (the input payload, the
|
|
102
|
+
// plan / changes / tests / verify slots). Model it as the standard JSON
|
|
103
|
+
// union so the heterogeneous dict shape and any-missing-key access survive
|
|
104
|
+
// without `any`.
|
|
105
|
+
|
|
106
|
+
export type JsonValue =
|
|
107
|
+
| string
|
|
108
|
+
| number
|
|
109
|
+
| boolean
|
|
110
|
+
| null
|
|
111
|
+
| JsonValue[]
|
|
112
|
+
| { [key: string]: JsonValue };
|
|
113
|
+
|
|
114
|
+
/** A heterogeneous JSON object, mirroring a Python `dict[str, Any]`. */
|
|
115
|
+
export type Dict = { [key: string]: JsonValue };
|
|
116
|
+
|
|
117
|
+
export const SCHEMA_VERSION = 1;
|
|
118
|
+
/** Integer version stored under the `version` key on disk. */
|
|
119
|
+
|
|
120
|
+
export const DEFAULT_INTENT = 'backend-coding';
|
|
121
|
+
/** Intent applied when migrating a v0 file or building a fresh state. */
|
|
122
|
+
|
|
123
|
+
export const DEFAULT_DIRECTIVE_SET = 'backend';
|
|
124
|
+
/** Directive set applied when migrating a v0 file or building a fresh state. */
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Input kinds accepted by the schema.
|
|
128
|
+
*
|
|
129
|
+
* `ticket` is the R1 kind: pre-structured `{id, title, acceptance_criteria, ...}`
|
|
130
|
+
* fed by the `/implement-ticket` flow. `prompt` is the R2 kind: a free-form
|
|
131
|
+
* user prompt wrapped via `work_engine.resolvers.prompt` into
|
|
132
|
+
* `{raw, reconstructed_ac, assumptions}`; the engine refines the raw text
|
|
133
|
+
* into actionable AC + a confidence band before plan/apply/test/review run.
|
|
134
|
+
*
|
|
135
|
+
* `diff` and `file` are the R3 Phase 1 UI-improve kinds. `diff` carries a
|
|
136
|
+
* unified-diff / patch payload (`{raw, reconstructed_ac, assumptions}`) so the
|
|
137
|
+
* `directives/ui` set can take an "improve this screen" PR-style input; `file`
|
|
138
|
+
* carries a path reference to an existing component/page (`{path,
|
|
139
|
+
* reconstructed_ac, assumptions}`) for the same surface. Both default-route to
|
|
140
|
+
* `ui-improve` via `work_engine.intent.populate_routing`.
|
|
141
|
+
*
|
|
142
|
+
* Per the schema/capability split documented on
|
|
143
|
+
* `work_engine.directives.backend.SUPPORTED_KINDS`, presence here only
|
|
144
|
+
* means the *envelope* is accepted on disk — a directive set still has to
|
|
145
|
+
* list the kind in its `SUPPORTED_KINDS` tuple before the dispatcher will
|
|
146
|
+
* route it. R2 widens the envelope; R2 Phase 3 widens backend's capability
|
|
147
|
+
* tuple in lockstep with the `refine-prompt` skill landing. R3 Phase 1 widens
|
|
148
|
+
* the envelope further; `ui` capability is wired in Phase 3 of the UI track.
|
|
149
|
+
*
|
|
150
|
+
* Other kinds are rejected so unknown values surface as errors instead of
|
|
151
|
+
* silently falling through to a default branch.
|
|
152
|
+
*/
|
|
153
|
+
export const KNOWN_INPUT_KINDS: ReadonlySet<string> = new Set([
|
|
154
|
+
'ticket',
|
|
155
|
+
'prompt',
|
|
156
|
+
'diff',
|
|
157
|
+
'file',
|
|
158
|
+
]);
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Directive sets recognised by the schema.
|
|
162
|
+
*
|
|
163
|
+
* Per the roadmap (Phase 4 Step 4), `ui`, `ui-trivial`, and `mixed`
|
|
164
|
+
* are intentionally pre-listed so a future R3 V2 release does not need a
|
|
165
|
+
* schema bump. Only `backend` has working directives in R1; the others
|
|
166
|
+
* raise `NotImplementedError` at dispatch time.
|
|
167
|
+
*/
|
|
168
|
+
export const KNOWN_DIRECTIVE_SETS: ReadonlySet<string> = new Set([
|
|
169
|
+
'backend',
|
|
170
|
+
'ui',
|
|
171
|
+
'ui-trivial',
|
|
172
|
+
'mixed',
|
|
173
|
+
]);
|
|
174
|
+
|
|
175
|
+
/** Raised when a state payload violates the v1 contract. */
|
|
176
|
+
export class SchemaError extends Error {
|
|
177
|
+
constructor(message: string) {
|
|
178
|
+
super(message);
|
|
179
|
+
this.name = 'SchemaError';
|
|
180
|
+
Object.setPrototypeOf(this, SchemaError.prototype);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Typed envelope for the user-supplied work item.
|
|
186
|
+
*
|
|
187
|
+
* `kind` is one of `KNOWN_INPUT_KINDS`; `data` is the raw
|
|
188
|
+
* payload. The legacy `state.ticket` dict lands here as
|
|
189
|
+
* `Input(kind="ticket", data=<dict>)` after migration.
|
|
190
|
+
*/
|
|
191
|
+
export class Input {
|
|
192
|
+
kind: string;
|
|
193
|
+
data: Dict;
|
|
194
|
+
|
|
195
|
+
constructor(kind: string, data: Dict | null = null) {
|
|
196
|
+
this.kind = kind;
|
|
197
|
+
// Mirror `field(default_factory=dict)` — a fresh empty dict per instance.
|
|
198
|
+
this.data = data ?? {};
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Schema v1 of the persisted work state.
|
|
204
|
+
*
|
|
205
|
+
* Field order mirrors the on-disk JSON: envelope (`version`,
|
|
206
|
+
* `input`, `intent`, `directive_set`, `stack`) first, then
|
|
207
|
+
* the legacy `DeliveryState` slice (`persona` ... `report`) so a
|
|
208
|
+
* diff between a v1 file and its v0 ancestor stays readable.
|
|
209
|
+
*/
|
|
210
|
+
export class WorkState {
|
|
211
|
+
input: Input;
|
|
212
|
+
intent: string;
|
|
213
|
+
directive_set: string;
|
|
214
|
+
stack: Dict | null;
|
|
215
|
+
ui_audit: Dict | null;
|
|
216
|
+
app_spec: Dict | null;
|
|
217
|
+
ui_design: Dict | null;
|
|
218
|
+
ui_scaffold: Dict | null;
|
|
219
|
+
ui_review: Dict | null;
|
|
220
|
+
ui_polish: Dict | null;
|
|
221
|
+
contract: Dict | null;
|
|
222
|
+
stitch: Dict | null;
|
|
223
|
+
halts: Dict[];
|
|
224
|
+
version: number;
|
|
225
|
+
persona: string;
|
|
226
|
+
memory: Dict[];
|
|
227
|
+
plan: JsonValue;
|
|
228
|
+
changes: Dict[];
|
|
229
|
+
tests: JsonValue;
|
|
230
|
+
verify: JsonValue;
|
|
231
|
+
outcomes: { [key: string]: string };
|
|
232
|
+
questions: string[];
|
|
233
|
+
report: string;
|
|
234
|
+
|
|
235
|
+
constructor(opts: {
|
|
236
|
+
input: Input;
|
|
237
|
+
intent?: string;
|
|
238
|
+
directive_set?: string;
|
|
239
|
+
stack?: Dict | null;
|
|
240
|
+
ui_audit?: Dict | null;
|
|
241
|
+
app_spec?: Dict | null;
|
|
242
|
+
ui_design?: Dict | null;
|
|
243
|
+
ui_scaffold?: Dict | null;
|
|
244
|
+
ui_review?: Dict | null;
|
|
245
|
+
ui_polish?: Dict | null;
|
|
246
|
+
contract?: Dict | null;
|
|
247
|
+
stitch?: Dict | null;
|
|
248
|
+
halts?: Dict[];
|
|
249
|
+
version?: number;
|
|
250
|
+
persona?: string;
|
|
251
|
+
memory?: Dict[];
|
|
252
|
+
plan?: JsonValue;
|
|
253
|
+
changes?: Dict[];
|
|
254
|
+
tests?: JsonValue;
|
|
255
|
+
verify?: JsonValue;
|
|
256
|
+
outcomes?: { [key: string]: string };
|
|
257
|
+
questions?: string[];
|
|
258
|
+
report?: string;
|
|
259
|
+
}) {
|
|
260
|
+
this.input = opts.input;
|
|
261
|
+
this.intent = opts.intent ?? DEFAULT_INTENT;
|
|
262
|
+
this.directive_set = opts.directive_set ?? DEFAULT_DIRECTIVE_SET;
|
|
263
|
+
this.stack = opts.stack ?? null;
|
|
264
|
+
this.ui_audit = opts.ui_audit ?? null;
|
|
265
|
+
this.app_spec = opts.app_spec ?? null;
|
|
266
|
+
this.ui_design = opts.ui_design ?? null;
|
|
267
|
+
this.ui_scaffold = opts.ui_scaffold ?? null;
|
|
268
|
+
this.ui_review = opts.ui_review ?? null;
|
|
269
|
+
this.ui_polish = opts.ui_polish ?? null;
|
|
270
|
+
this.contract = opts.contract ?? null;
|
|
271
|
+
this.stitch = opts.stitch ?? null;
|
|
272
|
+
this.halts = opts.halts ?? [];
|
|
273
|
+
this.version = opts.version ?? SCHEMA_VERSION;
|
|
274
|
+
this.persona = opts.persona ?? 'senior-engineer';
|
|
275
|
+
this.memory = opts.memory ?? [];
|
|
276
|
+
this.plan = opts.plan ?? null;
|
|
277
|
+
this.changes = opts.changes ?? [];
|
|
278
|
+
this.tests = opts.tests ?? null;
|
|
279
|
+
this.verify = opts.verify ?? null;
|
|
280
|
+
this.outcomes = opts.outcomes ?? {};
|
|
281
|
+
this.questions = opts.questions ?? [];
|
|
282
|
+
this.report = opts.report ?? '';
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Serialise `state` to the canonical v1 JSON shape.
|
|
288
|
+
*
|
|
289
|
+
* Field order is fixed: `version` -> `input` -> `intent` ->
|
|
290
|
+
* `directive_set` -> legacy slice. Stable order keeps state
|
|
291
|
+
* snapshots diff-friendly across re-runs and across the freeze-guard
|
|
292
|
+
* replay. Validation runs before serialisation so an in-memory
|
|
293
|
+
* object that was mutated past the schema cannot reach disk.
|
|
294
|
+
*/
|
|
295
|
+
export function to_dict(state: WorkState): Dict {
|
|
296
|
+
_validate_kind(state.input.kind);
|
|
297
|
+
_validate_directive_set(state.directive_set);
|
|
298
|
+
if (state.version !== SCHEMA_VERSION) {
|
|
299
|
+
throw new SchemaError(
|
|
300
|
+
`version must be ${SCHEMA_VERSION}; got ${pyRepr(state.version)}`,
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
_validate_stack(state.stack);
|
|
304
|
+
_validate_ui_audit(state.ui_audit);
|
|
305
|
+
_validate_app_spec(state.app_spec);
|
|
306
|
+
_validate_ui_design(state.ui_design);
|
|
307
|
+
_validate_ui_scaffold(state.ui_scaffold);
|
|
308
|
+
_validate_ui_review(state.ui_review);
|
|
309
|
+
_validate_ui_polish(state.ui_polish);
|
|
310
|
+
_validate_contract(state.contract);
|
|
311
|
+
_validate_stitch(state.stitch);
|
|
312
|
+
_validate_halts(state.halts);
|
|
313
|
+
return {
|
|
314
|
+
version: state.version,
|
|
315
|
+
input: { kind: state.input.kind, data: state.input.data },
|
|
316
|
+
intent: state.intent,
|
|
317
|
+
directive_set: state.directive_set,
|
|
318
|
+
stack: state.stack,
|
|
319
|
+
ui_audit: state.ui_audit,
|
|
320
|
+
app_spec: state.app_spec,
|
|
321
|
+
ui_design: state.ui_design,
|
|
322
|
+
ui_scaffold: state.ui_scaffold,
|
|
323
|
+
ui_review: state.ui_review,
|
|
324
|
+
ui_polish: state.ui_polish,
|
|
325
|
+
contract: state.contract,
|
|
326
|
+
stitch: state.stitch,
|
|
327
|
+
halts: [...state.halts],
|
|
328
|
+
persona: state.persona,
|
|
329
|
+
memory: state.memory,
|
|
330
|
+
plan: state.plan,
|
|
331
|
+
changes: state.changes,
|
|
332
|
+
tests: state.tests,
|
|
333
|
+
verify: state.verify,
|
|
334
|
+
outcomes: state.outcomes,
|
|
335
|
+
questions: state.questions,
|
|
336
|
+
report: state.report,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Build a `WorkState` from a parsed JSON payload.
|
|
342
|
+
*
|
|
343
|
+
* Validates the envelope (`version`, `input.kind`,
|
|
344
|
+
* `directive_set`) before instantiating the class. Unknown
|
|
345
|
+
* top-level keys are tolerated and dropped — the schema is additive,
|
|
346
|
+
* not strict-rejecting, so a future field rolled out by a newer
|
|
347
|
+
* engine version does not crash an older reader.
|
|
348
|
+
*/
|
|
349
|
+
export function from_dict(payload: JsonValue): WorkState {
|
|
350
|
+
if (!_isDict(payload)) {
|
|
351
|
+
throw new SchemaError(
|
|
352
|
+
`state payload must be a JSON object; got ${pyTypeName(payload)}`,
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
const version = payload['version'];
|
|
357
|
+
if (version !== SCHEMA_VERSION) {
|
|
358
|
+
throw new SchemaError(
|
|
359
|
+
`version must be ${SCHEMA_VERSION}; got ${pyRepr(version)}. ` +
|
|
360
|
+
'Run the v0→v1 migration before loading legacy files.',
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
const raw_input = payload['input'];
|
|
365
|
+
if (!_isDict(raw_input)) {
|
|
366
|
+
throw new SchemaError(
|
|
367
|
+
"state.input must be a JSON object with 'kind' and 'data' keys",
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
const kind = raw_input['kind'];
|
|
371
|
+
_validate_kind(kind);
|
|
372
|
+
const data = 'data' in raw_input ? raw_input['data'] : {};
|
|
373
|
+
if (!_isDict(data)) {
|
|
374
|
+
throw new SchemaError(
|
|
375
|
+
`state.input.data must be a JSON object; got ${pyTypeName(data)}`,
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const directive_set = _get(payload, 'directive_set', DEFAULT_DIRECTIVE_SET);
|
|
380
|
+
_validate_directive_set(directive_set);
|
|
381
|
+
|
|
382
|
+
const stack = payload['stack'] ?? null;
|
|
383
|
+
_validate_stack(stack);
|
|
384
|
+
|
|
385
|
+
const ui_audit = payload['ui_audit'] ?? null;
|
|
386
|
+
_validate_ui_audit(ui_audit);
|
|
387
|
+
|
|
388
|
+
const app_spec = payload['app_spec'] ?? null;
|
|
389
|
+
_validate_app_spec(app_spec);
|
|
390
|
+
|
|
391
|
+
const ui_design = payload['ui_design'] ?? null;
|
|
392
|
+
_validate_ui_design(ui_design);
|
|
393
|
+
|
|
394
|
+
const ui_scaffold = payload['ui_scaffold'] ?? null;
|
|
395
|
+
_validate_ui_scaffold(ui_scaffold);
|
|
396
|
+
|
|
397
|
+
const ui_review = payload['ui_review'] ?? null;
|
|
398
|
+
_validate_ui_review(ui_review);
|
|
399
|
+
|
|
400
|
+
const ui_polish = payload['ui_polish'] ?? null;
|
|
401
|
+
_validate_ui_polish(ui_polish);
|
|
402
|
+
|
|
403
|
+
const contract = payload['contract'] ?? null;
|
|
404
|
+
_validate_contract(contract);
|
|
405
|
+
|
|
406
|
+
const stitch = payload['stitch'] ?? null;
|
|
407
|
+
_validate_stitch(stitch);
|
|
408
|
+
|
|
409
|
+
const halts = 'halts' in payload ? payload['halts'] : [];
|
|
410
|
+
_validate_halts(halts);
|
|
411
|
+
|
|
412
|
+
return new WorkState({
|
|
413
|
+
input: new Input(kind as string, { ...(data as Dict) }),
|
|
414
|
+
intent: _get(payload, 'intent', DEFAULT_INTENT) as string,
|
|
415
|
+
directive_set: directive_set as string,
|
|
416
|
+
stack: _isDict(stack) ? { ...stack } : null,
|
|
417
|
+
ui_audit: _isDict(ui_audit) ? { ...ui_audit } : null,
|
|
418
|
+
app_spec: _isDict(app_spec) ? { ...app_spec } : null,
|
|
419
|
+
ui_design: _isDict(ui_design) ? { ...ui_design } : null,
|
|
420
|
+
ui_scaffold: _isDict(ui_scaffold) ? { ...ui_scaffold } : null,
|
|
421
|
+
ui_review: _isDict(ui_review) ? { ...ui_review } : null,
|
|
422
|
+
ui_polish: _isDict(ui_polish) ? { ...ui_polish } : null,
|
|
423
|
+
contract: _isDict(contract) ? { ...contract } : null,
|
|
424
|
+
stitch: _isDict(stitch) ? { ...stitch } : null,
|
|
425
|
+
halts: Array.isArray(halts) ? ([...halts] as Dict[]) : [],
|
|
426
|
+
version: version as number,
|
|
427
|
+
persona: _get(payload, 'persona', 'senior-engineer') as string,
|
|
428
|
+
memory: [...(_listOrEmpty(_get(payload, 'memory', [])))] as Dict[],
|
|
429
|
+
plan: _get(payload, 'plan', null),
|
|
430
|
+
changes: [...(_listOrEmpty(_get(payload, 'changes', [])))] as Dict[],
|
|
431
|
+
tests: _get(payload, 'tests', null),
|
|
432
|
+
verify: _get(payload, 'verify', null),
|
|
433
|
+
outcomes: { ...(_dictOrEmpty(_get(payload, 'outcomes', {}))) } as {
|
|
434
|
+
[key: string]: string;
|
|
435
|
+
},
|
|
436
|
+
questions: [
|
|
437
|
+
...(_listOrEmpty(_get(payload, 'questions', []))),
|
|
438
|
+
] as string[],
|
|
439
|
+
report: _get(payload, 'report', '') as string,
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/** Read a v1 state file from disk and return a `WorkState`. */
|
|
444
|
+
export function load(p: string): WorkState {
|
|
445
|
+
const raw = fs.readFileSync(p, 'utf-8');
|
|
446
|
+
let payload: JsonValue;
|
|
447
|
+
try {
|
|
448
|
+
payload = JSON.parse(raw) as JsonValue;
|
|
449
|
+
} catch (exc) {
|
|
450
|
+
throw new SchemaError(`invalid JSON in ${p}: ${(exc as Error).message}`);
|
|
451
|
+
}
|
|
452
|
+
return from_dict(payload);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/** Write `state` to `p` as pretty JSON, terminating newline included. */
|
|
456
|
+
export function dump(state: WorkState, p: string): void {
|
|
457
|
+
fs.mkdirSync(path.dirname(p), { recursive: true });
|
|
458
|
+
fs.writeFileSync(p, jsonDumps(to_dict(state)) + '\n', 'utf-8');
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
function _validate_kind(kind: JsonValue | undefined): void {
|
|
462
|
+
if (typeof kind !== 'string') {
|
|
463
|
+
throw new SchemaError(
|
|
464
|
+
`state.input.kind must be a string; got ${pyTypeName(kind)}`,
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
if (!KNOWN_INPUT_KINDS.has(kind)) {
|
|
468
|
+
throw new SchemaError(
|
|
469
|
+
`unknown input.kind ${pyRepr(kind)}; ` +
|
|
470
|
+
`expected one of ${pyListRepr(pySorted(KNOWN_INPUT_KINDS))}`,
|
|
471
|
+
);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
function _validate_directive_set(name: JsonValue): void {
|
|
476
|
+
if (typeof name !== 'string') {
|
|
477
|
+
throw new SchemaError(
|
|
478
|
+
`state.directive_set must be a string; got ${pyTypeName(name)}`,
|
|
479
|
+
);
|
|
480
|
+
}
|
|
481
|
+
if (!KNOWN_DIRECTIVE_SETS.has(name)) {
|
|
482
|
+
throw new SchemaError(
|
|
483
|
+
`unknown directive_set ${pyRepr(name)}; ` +
|
|
484
|
+
`expected one of ${pyListRepr(pySorted(KNOWN_DIRECTIVE_SETS))}`,
|
|
485
|
+
);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Reject malformed stack envelopes; tolerate `null` (not yet detected).
|
|
491
|
+
*
|
|
492
|
+
* The detector populates `state.stack` lazily — the first dispatch
|
|
493
|
+
* of a new state file may run without it set, then the dispatcher
|
|
494
|
+
* fills it in before any UI handler reads it. We only validate the
|
|
495
|
+
* shape when present so the absence-of-detection case stays a normal
|
|
496
|
+
* code path, not an error.
|
|
497
|
+
*/
|
|
498
|
+
function _validate_stack(stack: JsonValue): void {
|
|
499
|
+
if (stack === null) {
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
if (!_isDict(stack)) {
|
|
503
|
+
throw new SchemaError(
|
|
504
|
+
`state.stack must be a JSON object or null; ` +
|
|
505
|
+
`got ${pyTypeName(stack)}`,
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
const frontend = stack['frontend'];
|
|
509
|
+
if (typeof frontend !== 'string' || !frontend) {
|
|
510
|
+
throw new SchemaError('state.stack.frontend must be a non-empty string');
|
|
511
|
+
}
|
|
512
|
+
const mtime = 'mtime' in stack ? stack['mtime'] : 0.0;
|
|
513
|
+
if (!_isNumber(mtime)) {
|
|
514
|
+
throw new SchemaError(
|
|
515
|
+
`state.stack.mtime must be a number; got ${pyTypeName(mtime)}`,
|
|
516
|
+
);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* Reject malformed `ui_audit` envelopes; tolerate `null` and `{}`.
|
|
522
|
+
*
|
|
523
|
+
* `null` means the audit has not run yet — the dispatcher's audit
|
|
524
|
+
* gate (`directives.ui.audit`) will emit the agent-directive that
|
|
525
|
+
* populates it. An empty dict is the in-progress shape after the
|
|
526
|
+
* skill returns but before findings land; the gate treats it the
|
|
527
|
+
* same as `null`. Once populated, `greenfield` (when present)
|
|
528
|
+
* must be a bool, and `greenfield_decision` (when present) must
|
|
529
|
+
* be one of the three documented choices. Other keys (`components`,
|
|
530
|
+
* `patterns`, ...) are validated by the audit handler against the
|
|
531
|
+
* skill contract — the schema only enforces shape, not content.
|
|
532
|
+
*/
|
|
533
|
+
function _validate_ui_audit(ui_audit: JsonValue): void {
|
|
534
|
+
if (ui_audit === null) {
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
if (!_isDict(ui_audit)) {
|
|
538
|
+
throw new SchemaError(
|
|
539
|
+
`state.ui_audit must be a JSON object or null; ` +
|
|
540
|
+
`got ${pyTypeName(ui_audit)}`,
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
if ('greenfield' in ui_audit && typeof ui_audit['greenfield'] !== 'boolean') {
|
|
544
|
+
throw new SchemaError(
|
|
545
|
+
'state.ui_audit.greenfield must be a boolean when present',
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
const decision = 'greenfield_decision' in ui_audit
|
|
549
|
+
? ui_audit['greenfield_decision']
|
|
550
|
+
: null;
|
|
551
|
+
if (
|
|
552
|
+
decision !== null &&
|
|
553
|
+
decision !== 'scaffold' &&
|
|
554
|
+
decision !== 'bare' &&
|
|
555
|
+
decision !== 'external_reference'
|
|
556
|
+
) {
|
|
557
|
+
throw new SchemaError(
|
|
558
|
+
`state.ui_audit.greenfield_decision must be one of ` +
|
|
559
|
+
`'scaffold', 'bare', 'external_reference', or null; ` +
|
|
560
|
+
`got ${pyRepr(decision)}`,
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
if (
|
|
564
|
+
'a11y_baseline' in ui_audit &&
|
|
565
|
+
!Array.isArray(ui_audit['a11y_baseline'])
|
|
566
|
+
) {
|
|
567
|
+
throw new SchemaError(
|
|
568
|
+
'state.ui_audit.a11y_baseline must be a list when present',
|
|
569
|
+
);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Reject malformed `app_spec` envelopes; tolerate `null` and `{}`.
|
|
575
|
+
*
|
|
576
|
+
* `null` means the app-spec gate has not produced a grounding
|
|
577
|
+
* artifact yet — the greenfield-scaffold `app_spec` directive
|
|
578
|
+
* (greenfield-scaffold Phase 2) emits the agent-directive that
|
|
579
|
+
* populates it, and the gate is a no-op for every non-greenfield
|
|
580
|
+
* flow so the slot stays `null` there. An empty dict is the
|
|
581
|
+
* in-progress shape after the skill returns but before the page-set
|
|
582
|
+
* lands; the gate treats it the same as `null`. Once populated,
|
|
583
|
+
* `pages` / `entity_model` (when present) must be lists,
|
|
584
|
+
* `flow_map` (when present) must be a list or dict, and
|
|
585
|
+
* `confirmed` / `bypassed` (when present) must be bools — the
|
|
586
|
+
* app-spec gate's confirm/bypass sentinels are simple equality
|
|
587
|
+
* tests, so the schema enforces only shape, not content.
|
|
588
|
+
*/
|
|
589
|
+
function _validate_app_spec(app_spec: JsonValue): void {
|
|
590
|
+
if (app_spec === null) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
if (!_isDict(app_spec)) {
|
|
594
|
+
throw new SchemaError(
|
|
595
|
+
`state.app_spec must be a JSON object or null; ` +
|
|
596
|
+
`got ${pyTypeName(app_spec)}`,
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
for (const key of ['pages', 'entity_model']) {
|
|
600
|
+
if (key in app_spec && !Array.isArray(app_spec[key])) {
|
|
601
|
+
throw new SchemaError(
|
|
602
|
+
`state.app_spec.${key} must be a list when present`,
|
|
603
|
+
);
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
if (
|
|
607
|
+
'flow_map' in app_spec &&
|
|
608
|
+
!Array.isArray(app_spec['flow_map']) &&
|
|
609
|
+
!_isDict(app_spec['flow_map'])
|
|
610
|
+
) {
|
|
611
|
+
throw new SchemaError(
|
|
612
|
+
'state.app_spec.flow_map must be a list or object when present',
|
|
613
|
+
);
|
|
614
|
+
}
|
|
615
|
+
for (const key of ['confirmed', 'bypassed']) {
|
|
616
|
+
if (key in app_spec && typeof app_spec[key] !== 'boolean') {
|
|
617
|
+
throw new SchemaError(
|
|
618
|
+
`state.app_spec.${key} must be a boolean when present`,
|
|
619
|
+
);
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* Reject malformed `ui_design` envelopes; tolerate `null` and `{}`.
|
|
626
|
+
*
|
|
627
|
+
* `null` means the design step has not produced a brief yet — the
|
|
628
|
+
* dispatcher's design gate (`directives.ui.design`) emits the
|
|
629
|
+
* agent-directive that populates it. An empty dict is the in-progress
|
|
630
|
+
* shape after the skill returns but before the brief lands; the gate
|
|
631
|
+
* treats it the same as `null`. Once populated, `design_confirmed`
|
|
632
|
+
* (when present) must be a bool. Other keys (`layout`, `components`,
|
|
633
|
+
* `states`, `microcopy`, `a11y`, `reused_from_audit`) are
|
|
634
|
+
* validated by the design handler against the skill contract — the
|
|
635
|
+
* schema only enforces shape, not content.
|
|
636
|
+
*/
|
|
637
|
+
function _validate_ui_design(ui_design: JsonValue): void {
|
|
638
|
+
if (ui_design === null) {
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
if (!_isDict(ui_design)) {
|
|
642
|
+
throw new SchemaError(
|
|
643
|
+
`state.ui_design must be a JSON object or null; ` +
|
|
644
|
+
`got ${pyTypeName(ui_design)}`,
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
if (
|
|
648
|
+
'design_confirmed' in ui_design &&
|
|
649
|
+
typeof ui_design['design_confirmed'] !== 'boolean'
|
|
650
|
+
) {
|
|
651
|
+
throw new SchemaError(
|
|
652
|
+
'state.ui_design.design_confirmed must be a boolean when present',
|
|
653
|
+
);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Reject malformed `ui_scaffold` envelopes; tolerate `null` and `{}`.
|
|
659
|
+
*
|
|
660
|
+
* `null` means the scaffold gate has not produced a plan yet — the
|
|
661
|
+
* greenfield-scaffold `scaffold` directive (greenfield-scaffold
|
|
662
|
+
* Phase 3) emits the agent-directive that populates it, and the gate
|
|
663
|
+
* is a no-op for every non-greenfield flow so the slot stays `null`
|
|
664
|
+
* there. An empty dict is the in-progress shape. Once populated, the
|
|
665
|
+
* stack-agnostic plan keys `pages` / `routes` / `component_manifest`
|
|
666
|
+
* / `artifacts` (when present) must be lists, `layout_strategy`
|
|
667
|
+
* (when present) must be a string, `token_seed` (when present) must
|
|
668
|
+
* be an object, and `scaffolded` (when present) must be a bool — the
|
|
669
|
+
* scaffold gate's "plan produced" and "files created" sentinels are
|
|
670
|
+
* simple shape/equality tests, so the schema enforces only shape.
|
|
671
|
+
*/
|
|
672
|
+
function _validate_ui_scaffold(ui_scaffold: JsonValue): void {
|
|
673
|
+
if (ui_scaffold === null) {
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
if (!_isDict(ui_scaffold)) {
|
|
677
|
+
throw new SchemaError(
|
|
678
|
+
`state.ui_scaffold must be a JSON object or null; ` +
|
|
679
|
+
`got ${pyTypeName(ui_scaffold)}`,
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
for (const key of ['pages', 'routes', 'component_manifest', 'artifacts']) {
|
|
683
|
+
if (key in ui_scaffold && !Array.isArray(ui_scaffold[key])) {
|
|
684
|
+
throw new SchemaError(
|
|
685
|
+
`state.ui_scaffold.${key} must be a list when present`,
|
|
686
|
+
);
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
if (
|
|
690
|
+
'layout_strategy' in ui_scaffold &&
|
|
691
|
+
typeof ui_scaffold['layout_strategy'] !== 'string'
|
|
692
|
+
) {
|
|
693
|
+
throw new SchemaError(
|
|
694
|
+
'state.ui_scaffold.layout_strategy must be a string when present',
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
if ('token_seed' in ui_scaffold && !_isDict(ui_scaffold['token_seed'])) {
|
|
698
|
+
throw new SchemaError(
|
|
699
|
+
'state.ui_scaffold.token_seed must be a JSON object when present',
|
|
700
|
+
);
|
|
701
|
+
}
|
|
702
|
+
if (
|
|
703
|
+
'scaffolded' in ui_scaffold &&
|
|
704
|
+
typeof ui_scaffold['scaffolded'] !== 'boolean'
|
|
705
|
+
) {
|
|
706
|
+
throw new SchemaError(
|
|
707
|
+
'state.ui_scaffold.scaffolded must be a boolean when present',
|
|
708
|
+
);
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* Reject malformed `ui_review` envelopes; tolerate `null` and `{}`.
|
|
714
|
+
*
|
|
715
|
+
* `null` means the review pass has not run yet — the dispatcher's
|
|
716
|
+
* review gate (`directives.ui.review`) emits the agent-directive
|
|
717
|
+
* that populates it. An empty dict is the in-progress shape after
|
|
718
|
+
* the skill returns but before findings land. Once populated,
|
|
719
|
+
* `findings` (when present) must be a list and `review_clean`
|
|
720
|
+
* (when present) must be a bool. Field content (severity labels,
|
|
721
|
+
* fix suggestions) is validated by the review handler; the schema
|
|
722
|
+
* enforces only shape.
|
|
723
|
+
*/
|
|
724
|
+
function _validate_ui_review(ui_review: JsonValue): void {
|
|
725
|
+
if (ui_review === null) {
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
728
|
+
if (!_isDict(ui_review)) {
|
|
729
|
+
throw new SchemaError(
|
|
730
|
+
`state.ui_review must be a JSON object or null; ` +
|
|
731
|
+
`got ${pyTypeName(ui_review)}`,
|
|
732
|
+
);
|
|
733
|
+
}
|
|
734
|
+
if ('findings' in ui_review && !Array.isArray(ui_review['findings'])) {
|
|
735
|
+
throw new SchemaError(
|
|
736
|
+
'state.ui_review.findings must be a list when present',
|
|
737
|
+
);
|
|
738
|
+
}
|
|
739
|
+
if (
|
|
740
|
+
'review_clean' in ui_review &&
|
|
741
|
+
typeof ui_review['review_clean'] !== 'boolean'
|
|
742
|
+
) {
|
|
743
|
+
throw new SchemaError(
|
|
744
|
+
'state.ui_review.review_clean must be a boolean when present',
|
|
745
|
+
);
|
|
746
|
+
}
|
|
747
|
+
const a11y = 'a11y' in ui_review ? ui_review['a11y'] : null;
|
|
748
|
+
if (a11y !== null) {
|
|
749
|
+
if (!_isDict(a11y)) {
|
|
750
|
+
throw new SchemaError(
|
|
751
|
+
'state.ui_review.a11y must be a JSON object or null when present',
|
|
752
|
+
);
|
|
753
|
+
}
|
|
754
|
+
if ('violations' in a11y && !Array.isArray(a11y['violations'])) {
|
|
755
|
+
throw new SchemaError(
|
|
756
|
+
'state.ui_review.a11y.violations must be a list when present',
|
|
757
|
+
);
|
|
758
|
+
}
|
|
759
|
+
const floor = 'severity_floor' in a11y ? a11y['severity_floor'] : null;
|
|
760
|
+
if (
|
|
761
|
+
floor !== null &&
|
|
762
|
+
floor !== 'minor' &&
|
|
763
|
+
floor !== 'moderate' &&
|
|
764
|
+
floor !== 'serious' &&
|
|
765
|
+
floor !== 'critical'
|
|
766
|
+
) {
|
|
767
|
+
throw new SchemaError(
|
|
768
|
+
`state.ui_review.a11y.severity_floor must be one of ` +
|
|
769
|
+
`'minor', 'moderate', 'serious', 'critical', or null; ` +
|
|
770
|
+
`got ${pyRepr(floor)}`,
|
|
771
|
+
);
|
|
772
|
+
}
|
|
773
|
+
if (
|
|
774
|
+
'accepted_violations' in a11y &&
|
|
775
|
+
!Array.isArray(a11y['accepted_violations'])
|
|
776
|
+
) {
|
|
777
|
+
throw new SchemaError(
|
|
778
|
+
'state.ui_review.a11y.accepted_violations must be a list when present',
|
|
779
|
+
);
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
const preview = 'preview' in ui_review ? ui_review['preview'] : null;
|
|
783
|
+
if (preview !== null) {
|
|
784
|
+
if (!_isDict(preview)) {
|
|
785
|
+
throw new SchemaError(
|
|
786
|
+
'state.ui_review.preview must be a JSON object or null when present',
|
|
787
|
+
);
|
|
788
|
+
}
|
|
789
|
+
if ('render_ok' in preview && typeof preview['render_ok'] !== 'boolean') {
|
|
790
|
+
throw new SchemaError(
|
|
791
|
+
'state.ui_review.preview.render_ok must be a boolean when present',
|
|
792
|
+
);
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Reject malformed `ui_polish` envelopes; tolerate `null` and `{}`.
|
|
799
|
+
*
|
|
800
|
+
* `null` means the polish loop has not entered yet. Once
|
|
801
|
+
* populated, `rounds` (when present) must be an int in `[0, 2]`
|
|
802
|
+
* by default — the polish-loop ceiling defined in
|
|
803
|
+
* `agents/roadmaps/road-to-product-ui-track.md` Phase 3 Step 5.
|
|
804
|
+
* R4 Phase 2 widens the upper bound to `3` when
|
|
805
|
+
* `extension_used` is `True` (one-shot a11y extension halt).
|
|
806
|
+
* `applied` (when present) must be a list. The polish handler
|
|
807
|
+
* enforces ceiling semantics; the schema enforces only shape.
|
|
808
|
+
*/
|
|
809
|
+
function _validate_ui_polish(ui_polish: JsonValue): void {
|
|
810
|
+
if (ui_polish === null) {
|
|
811
|
+
return;
|
|
812
|
+
}
|
|
813
|
+
if (!_isDict(ui_polish)) {
|
|
814
|
+
throw new SchemaError(
|
|
815
|
+
`state.ui_polish must be a JSON object or null; ` +
|
|
816
|
+
`got ${pyTypeName(ui_polish)}`,
|
|
817
|
+
);
|
|
818
|
+
}
|
|
819
|
+
if (
|
|
820
|
+
'extension_used' in ui_polish &&
|
|
821
|
+
typeof ui_polish['extension_used'] !== 'boolean'
|
|
822
|
+
) {
|
|
823
|
+
throw new SchemaError(
|
|
824
|
+
'state.ui_polish.extension_used must be a boolean when present',
|
|
825
|
+
);
|
|
826
|
+
}
|
|
827
|
+
const extension_used = _pyBool(
|
|
828
|
+
'extension_used' in ui_polish ? ui_polish['extension_used'] : false,
|
|
829
|
+
);
|
|
830
|
+
if ('rounds' in ui_polish) {
|
|
831
|
+
const rounds = ui_polish['rounds'];
|
|
832
|
+
if (!_isPyInt(rounds)) {
|
|
833
|
+
throw new SchemaError(
|
|
834
|
+
`state.ui_polish.rounds must be an integer; got ${pyTypeName(rounds)}`,
|
|
835
|
+
);
|
|
836
|
+
}
|
|
837
|
+
const max_rounds = extension_used ? 3 : 2;
|
|
838
|
+
if (rounds < 0 || rounds > max_rounds) {
|
|
839
|
+
throw new SchemaError(
|
|
840
|
+
`state.ui_polish.rounds must be in [0, ${max_rounds}]; ` +
|
|
841
|
+
`got ${rounds} (extension_used=${pyBoolRepr(extension_used)})`,
|
|
842
|
+
);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
if ('applied' in ui_polish && !Array.isArray(ui_polish['applied'])) {
|
|
846
|
+
throw new SchemaError(
|
|
847
|
+
'state.ui_polish.applied must be a list when present',
|
|
848
|
+
);
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* Reject malformed `contract` envelopes; tolerate `null` and `{}`.
|
|
854
|
+
*
|
|
855
|
+
* `null` means the contract step has not run yet — the mixed
|
|
856
|
+
* `contract` directive (R3 Phase 4 Step 1) emits the
|
|
857
|
+
* agent-directive that populates it. Once populated,
|
|
858
|
+
* `data_model` and `api_surface` (when present) must be lists,
|
|
859
|
+
* and `contract_confirmed` (when present) must be a bool. Field
|
|
860
|
+
* content (entity names, endpoint shapes) is validated by the
|
|
861
|
+
* contract handler; the schema enforces only shape so the mixed UI
|
|
862
|
+
* step's sentinel check (`contract_confirmed is True`) stays a
|
|
863
|
+
* simple equality test.
|
|
864
|
+
*/
|
|
865
|
+
function _validate_contract(contract: JsonValue): void {
|
|
866
|
+
if (contract === null) {
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
if (!_isDict(contract)) {
|
|
870
|
+
throw new SchemaError(
|
|
871
|
+
`state.contract must be a JSON object or null; ` +
|
|
872
|
+
`got ${pyTypeName(contract)}`,
|
|
873
|
+
);
|
|
874
|
+
}
|
|
875
|
+
if ('data_model' in contract && !Array.isArray(contract['data_model'])) {
|
|
876
|
+
throw new SchemaError(
|
|
877
|
+
'state.contract.data_model must be a list when present',
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
if ('api_surface' in contract && !Array.isArray(contract['api_surface'])) {
|
|
881
|
+
throw new SchemaError(
|
|
882
|
+
'state.contract.api_surface must be a list when present',
|
|
883
|
+
);
|
|
884
|
+
}
|
|
885
|
+
if (
|
|
886
|
+
'contract_confirmed' in contract &&
|
|
887
|
+
typeof contract['contract_confirmed'] !== 'boolean'
|
|
888
|
+
) {
|
|
889
|
+
throw new SchemaError(
|
|
890
|
+
'state.contract.contract_confirmed must be a bool when present',
|
|
891
|
+
);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
/**
|
|
896
|
+
* Reject malformed `stitch` envelopes; tolerate `null` and `{}`.
|
|
897
|
+
*
|
|
898
|
+
* `null` means the integration-verification step has not run yet
|
|
899
|
+
* — the mixed `stitch` directive (R3 Phase 4 Step 3) emits the
|
|
900
|
+
* agent-directive that populates it. Once populated, `scenarios`
|
|
901
|
+
* (when present) must be a list of integration smoke cases,
|
|
902
|
+
* `verdict` (when present) must be one of
|
|
903
|
+
* `{"success", "blocked", "partial"}`, and
|
|
904
|
+
* `integration_confirmed` (when present) must be a bool. The
|
|
905
|
+
* stitch handler enforces verdict semantics; the schema enforces
|
|
906
|
+
* only shape.
|
|
907
|
+
*/
|
|
908
|
+
function _validate_stitch(stitch: JsonValue): void {
|
|
909
|
+
if (stitch === null) {
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
if (!_isDict(stitch)) {
|
|
913
|
+
throw new SchemaError(
|
|
914
|
+
`state.stitch must be a JSON object or null; ` +
|
|
915
|
+
`got ${pyTypeName(stitch)}`,
|
|
916
|
+
);
|
|
917
|
+
}
|
|
918
|
+
if ('scenarios' in stitch && !Array.isArray(stitch['scenarios'])) {
|
|
919
|
+
throw new SchemaError(
|
|
920
|
+
'state.stitch.scenarios must be a list when present',
|
|
921
|
+
);
|
|
922
|
+
}
|
|
923
|
+
if ('verdict' in stitch) {
|
|
924
|
+
const verdict = stitch['verdict'];
|
|
925
|
+
if (
|
|
926
|
+
verdict !== 'success' &&
|
|
927
|
+
verdict !== 'blocked' &&
|
|
928
|
+
verdict !== 'partial'
|
|
929
|
+
) {
|
|
930
|
+
throw new SchemaError(
|
|
931
|
+
`state.stitch.verdict must be one of success/blocked/partial; ` +
|
|
932
|
+
`got ${pyRepr(verdict)}`,
|
|
933
|
+
);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
if (
|
|
937
|
+
'integration_confirmed' in stitch &&
|
|
938
|
+
typeof stitch['integration_confirmed'] !== 'boolean'
|
|
939
|
+
) {
|
|
940
|
+
throw new SchemaError(
|
|
941
|
+
'state.stitch.integration_confirmed must be a bool when present',
|
|
942
|
+
);
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
/**
|
|
947
|
+
* Reject malformed `halts` envelopes; tolerate `[]`.
|
|
948
|
+
*
|
|
949
|
+
* Each entry must be a dict with at minimum `reason` (str) and
|
|
950
|
+
* `surface` (list of str). `step` and `timestamp` are optional
|
|
951
|
+
* metadata appended by `emitters._emit_halt`. The schema enforces
|
|
952
|
+
* only shape — the explain renderer is responsible for fallback
|
|
953
|
+
* rendering when optional fields are absent.
|
|
954
|
+
*/
|
|
955
|
+
function _validate_halts(halts: JsonValue): void {
|
|
956
|
+
if (!Array.isArray(halts)) {
|
|
957
|
+
throw new SchemaError(
|
|
958
|
+
`state.halts must be a list; got ${pyTypeName(halts)}`,
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
for (let idx = 0; idx < halts.length; idx++) {
|
|
962
|
+
const entry = halts[idx];
|
|
963
|
+
if (!_isDict(entry)) {
|
|
964
|
+
throw new SchemaError(
|
|
965
|
+
`state.halts[${idx}] must be a JSON object; ` +
|
|
966
|
+
`got ${pyTypeName(entry)}`,
|
|
967
|
+
);
|
|
968
|
+
}
|
|
969
|
+
const reason = 'reason' in entry ? entry['reason'] : undefined;
|
|
970
|
+
if (typeof reason !== 'string' || !reason) {
|
|
971
|
+
throw new SchemaError(
|
|
972
|
+
`state.halts[${idx}].reason must be a non-empty string`,
|
|
973
|
+
);
|
|
974
|
+
}
|
|
975
|
+
const surface = 'surface' in entry ? entry['surface'] : [];
|
|
976
|
+
if (!Array.isArray(surface)) {
|
|
977
|
+
throw new SchemaError(
|
|
978
|
+
`state.halts[${idx}].surface must be a list; ` +
|
|
979
|
+
`got ${pyTypeName(surface)}`,
|
|
980
|
+
);
|
|
981
|
+
}
|
|
982
|
+
for (let j = 0; j < surface.length; j++) {
|
|
983
|
+
if (typeof surface[j] !== 'string') {
|
|
984
|
+
throw new SchemaError(
|
|
985
|
+
`state.halts[${idx}].surface[${j}] must be a string`,
|
|
986
|
+
);
|
|
987
|
+
}
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
// ── Python-parity helpers ───────────────────────────────────────────────
|
|
993
|
+
|
|
994
|
+
/**
|
|
995
|
+
* True when `v` is a plain JSON object (Python `dict`). Arrays and `null`
|
|
996
|
+
* are excluded, mirroring `isinstance(x, dict)`.
|
|
997
|
+
*/
|
|
998
|
+
function _isDict(v: JsonValue | undefined): v is Dict {
|
|
999
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
/**
|
|
1003
|
+
* Mirror Python `isinstance(x, (int, float))` for the `mtime` check. JSON
|
|
1004
|
+
* numbers (int or float) are all JS `number`; booleans are NOT numbers in
|
|
1005
|
+
* Python's `(int, float)` test only because `bool` IS a subclass of `int`
|
|
1006
|
+
* — but `_validate_stack` does not exclude bools, so neither do we: a JSON
|
|
1007
|
+
* `true`/`false` never reaches `mtime` as a JS boolean is `typeof boolean`,
|
|
1008
|
+
* not `number`. Python's `isinstance(True, (int, float))` is True; to match
|
|
1009
|
+
* that edge we treat a JS boolean as a number here too.
|
|
1010
|
+
*/
|
|
1011
|
+
function _isNumber(v: JsonValue): boolean {
|
|
1012
|
+
return typeof v === 'number' || typeof v === 'boolean';
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/**
|
|
1016
|
+
* Mirror Python `isinstance(x, int) and not isinstance(x, bool)` for the
|
|
1017
|
+
* `rounds` check. A JSON integer parses to a JS `number` with no fractional
|
|
1018
|
+
* part; a JSON float with a fractional part is rejected; a JSON bool is
|
|
1019
|
+
* rejected (Python excludes bool explicitly).
|
|
1020
|
+
*/
|
|
1021
|
+
function _isPyInt(v: JsonValue | undefined): v is number {
|
|
1022
|
+
return typeof v === 'number' && Number.isInteger(v);
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
/** Mirror Python `bool(x)` truthiness for the values `ui_polish` can hold. */
|
|
1026
|
+
function _pyBool(v: JsonValue | undefined): boolean {
|
|
1027
|
+
if (v === null || v === undefined) return false;
|
|
1028
|
+
if (typeof v === 'boolean') return v;
|
|
1029
|
+
if (typeof v === 'number') return v !== 0;
|
|
1030
|
+
if (typeof v === 'string') return v.length > 0;
|
|
1031
|
+
if (Array.isArray(v)) return v.length > 0;
|
|
1032
|
+
if (_isDict(v)) return Object.keys(v).length > 0;
|
|
1033
|
+
return true;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
/** Python `dict.get(key, default)` over a JSON object. */
|
|
1037
|
+
function _get(obj: Dict, key: string, dflt: JsonValue): JsonValue {
|
|
1038
|
+
return key in obj ? (obj[key] as JsonValue) : dflt;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/** `list(x)` where x may be a list (copy) or anything else (Python would error,
|
|
1042
|
+
* but `from_dict` only feeds it the result of `payload.get(k, [])`, so it is a
|
|
1043
|
+
* list or the default `[]`). Returns the array itself for spreading. */
|
|
1044
|
+
function _listOrEmpty(v: JsonValue): JsonValue[] {
|
|
1045
|
+
return Array.isArray(v) ? v : [];
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
/** `dict(x)` where x is the result of `payload.get(k, {})`. */
|
|
1049
|
+
function _dictOrEmpty(v: JsonValue): Dict {
|
|
1050
|
+
return _isDict(v) ? v : {};
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
/**
|
|
1054
|
+
* Python `type(x).__name__` for the JSON value classes that appear in the
|
|
1055
|
+
* error messages: `dict`, `list`, `str`, `int`, `float`, `bool`, `NoneType`.
|
|
1056
|
+
*/
|
|
1057
|
+
function pyTypeName(v: JsonValue | undefined): string {
|
|
1058
|
+
if (v === null || v === undefined) return 'NoneType';
|
|
1059
|
+
if (typeof v === 'boolean') return 'bool';
|
|
1060
|
+
if (typeof v === 'string') return 'str';
|
|
1061
|
+
if (typeof v === 'number') return Number.isInteger(v) ? 'int' : 'float';
|
|
1062
|
+
if (Array.isArray(v)) return 'list';
|
|
1063
|
+
return 'dict';
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Python `repr(x)` for the scalar values that flow into error messages
|
|
1068
|
+
* (`version`, `kind`, `decision`, `floor`, `verdict`). Strings → single-quoted
|
|
1069
|
+
* with Python escaping; `None` → `None`; bools → `True`/`False`; numbers as-is.
|
|
1070
|
+
*/
|
|
1071
|
+
function pyRepr(v: JsonValue | undefined): string {
|
|
1072
|
+
if (v === undefined || v === null) return 'None';
|
|
1073
|
+
if (typeof v === 'boolean') return v ? 'True' : 'False';
|
|
1074
|
+
if (typeof v === 'number') return _pyNumRepr(v);
|
|
1075
|
+
if (typeof v === 'string') return pyStrRepr(v);
|
|
1076
|
+
if (Array.isArray(v)) {
|
|
1077
|
+
return '[' + v.map((x) => pyRepr(x)).join(', ') + ']';
|
|
1078
|
+
}
|
|
1079
|
+
// dict repr is not exercised by the .py error paths; render Python-ish.
|
|
1080
|
+
const items = Object.keys(v).map((k) => `${pyStrRepr(k)}: ${pyRepr(v[k])}`);
|
|
1081
|
+
return '{' + items.join(', ') + '}';
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/** Python numeric repr — integer-valued floats are never produced here because
|
|
1085
|
+
* JSON-parsed numbers carry no float/int tag; an integer renders without `.0`. */
|
|
1086
|
+
function _pyNumRepr(n: number): string {
|
|
1087
|
+
return String(n);
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
/**
|
|
1091
|
+
* Python `repr(str)` — prefers single quotes, switches to double quotes only
|
|
1092
|
+
* when the string contains a single quote but no double quote, and escapes
|
|
1093
|
+
* backslash plus the active quote and the standard control characters.
|
|
1094
|
+
*/
|
|
1095
|
+
function pyStrRepr(s: string): string {
|
|
1096
|
+
const hasSingle = s.includes("'");
|
|
1097
|
+
const hasDouble = s.includes('"');
|
|
1098
|
+
const quote = hasSingle && !hasDouble ? '"' : "'";
|
|
1099
|
+
let out = quote;
|
|
1100
|
+
for (const ch of s) {
|
|
1101
|
+
const code = ch.codePointAt(0) as number;
|
|
1102
|
+
if (ch === '\\') out += '\\\\';
|
|
1103
|
+
else if (ch === quote) out += '\\' + quote;
|
|
1104
|
+
else if (ch === '\n') out += '\\n';
|
|
1105
|
+
else if (ch === '\r') out += '\\r';
|
|
1106
|
+
else if (ch === '\t') out += '\\t';
|
|
1107
|
+
else if (code < 0x20 || code === 0x7f) {
|
|
1108
|
+
out += `\\x${code.toString(16).padStart(2, '0')}`;
|
|
1109
|
+
} else {
|
|
1110
|
+
out += ch;
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
return out + quote;
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
/** Python `repr(list_of_str)` for the `sorted(KNOWN_*)` error tails. */
|
|
1117
|
+
function pyListRepr(items: string[]): string {
|
|
1118
|
+
return '[' + items.map((s) => pyStrRepr(s)).join(', ') + ']';
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1121
|
+
/** Python `repr(bool)` — `True` / `False`. */
|
|
1122
|
+
function pyBoolRepr(b: boolean): string {
|
|
1123
|
+
return b ? 'True' : 'False';
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
/**
|
|
1127
|
+
* Python `sorted(set_of_str)` — code-point ascending, the default `str`
|
|
1128
|
+
* ordering CPython uses. `Array.prototype.sort()` with no comparator sorts
|
|
1129
|
+
* by UTF-16 code unit, which matches for the BMP ASCII tokens in these sets;
|
|
1130
|
+
* use an explicit code-point comparator to be faithful for any input.
|
|
1131
|
+
*/
|
|
1132
|
+
function pySorted(values: ReadonlySet<string>): string[] {
|
|
1133
|
+
return [...values].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
/**
|
|
1137
|
+
* Mirror Python `json.dumps(obj, indent=2, ensure_ascii=False)`.
|
|
1138
|
+
*
|
|
1139
|
+
* For round-tripped JSON (the only producer of a state dict), `JSON.stringify`
|
|
1140
|
+
* with a 2-space indent matches CPython byte-for-byte: 2-space indent,
|
|
1141
|
+
* `": "` key separator, no trailing space after the array/object item commas,
|
|
1142
|
+
* `{}` / `[]` for empties, non-ASCII left verbatim. The one structural
|
|
1143
|
+
* difference CPython has — integer-valued floats rendered as `N.0` — cannot
|
|
1144
|
+
* arise here: JSON has no float/int tag, so a parsed `1.0` is already the JS
|
|
1145
|
+
* number `1` before it ever reaches this serialiser, exactly as a Python
|
|
1146
|
+
* reader that parsed the same bytes would diverge. `to_dict` never injects a
|
|
1147
|
+
* float that did not come from the parsed payload.
|
|
1148
|
+
*/
|
|
1149
|
+
function jsonDumps(obj: Dict): string {
|
|
1150
|
+
return JSON.stringify(obj, null, 2);
|
|
1151
|
+
}
|