@event4u/agent-config 2.26.0 → 3.1.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/.agent-src/commands/agent-handoff.md +15 -3
- package/.agent-src/commands/agent-status.md +12 -0
- package/.agent-src/commands/agents/audit.md +12 -0
- package/.agent-src/commands/agents/init.md +12 -0
- package/.agent-src/commands/agents/optimize.md +12 -0
- package/.agent-src/commands/agents/user/accept.md +12 -0
- package/.agent-src/commands/agents/user/init.md +12 -0
- package/.agent-src/commands/agents/user/review.md +12 -0
- package/.agent-src/commands/agents/user/show.md +12 -0
- package/.agent-src/commands/agents/user/update.md +12 -0
- package/.agent-src/commands/agents/user.md +12 -0
- package/.agent-src/commands/agents.md +12 -0
- package/.agent-src/commands/analyze-reference-repo.md +15 -3
- package/.agent-src/commands/bug-fix.md +12 -0
- package/.agent-src/commands/bug-investigate.md +13 -1
- package/.agent-src/commands/challenge-me/vision.md +12 -0
- package/.agent-src/commands/challenge-me/with-docs.md +12 -0
- package/.agent-src/commands/challenge-me.md +12 -0
- package/.agent-src/commands/chat-history/import.md +16 -4
- package/.agent-src/commands/chat-history/learn.md +15 -3
- package/.agent-src/commands/chat-history/show.md +17 -5
- package/.agent-src/commands/chat-history.md +14 -2
- package/.agent-src/commands/check-current-md.md +12 -0
- package/.agent-src/commands/commit/in-chunks.md +12 -0
- package/.agent-src/commands/commit.md +12 -0
- package/.agent-src/commands/compress.md +12 -0
- package/.agent-src/commands/context/create.md +17 -5
- package/.agent-src/commands/context/refactor.md +15 -3
- package/.agent-src/commands/context.md +12 -0
- package/.agent-src/commands/cost-report.md +12 -0
- package/.agent-src/commands/council/analysis.md +15 -3
- package/.agent-src/commands/council/debate.md +17 -5
- package/.agent-src/commands/council/default.md +17 -5
- package/.agent-src/commands/council/design.md +12 -0
- package/.agent-src/commands/council/optimize.md +12 -0
- package/.agent-src/commands/council/pr.md +12 -0
- package/.agent-src/commands/council.md +13 -1
- package/.agent-src/commands/create-pr/description-only.md +12 -0
- package/.agent-src/commands/create-pr.md +39 -0
- package/.agent-src/commands/e2e-heal.md +12 -0
- package/.agent-src/commands/e2e-plan.md +12 -0
- package/.agent-src/commands/estimate-ticket.md +12 -0
- package/.agent-src/commands/feature/dev.md +13 -1
- package/.agent-src/commands/feature/explore.md +12 -0
- package/.agent-src/commands/feature/plan.md +14 -2
- package/.agent-src/commands/feature/refactor.md +12 -0
- package/.agent-src/commands/feature/roadmap.md +12 -0
- package/.agent-src/commands/feature.md +12 -0
- package/.agent-src/commands/fix/ci.md +12 -0
- package/.agent-src/commands/fix/portability.md +12 -0
- package/.agent-src/commands/fix/pr-bot-comments.md +12 -0
- package/.agent-src/commands/fix/pr-comments.md +12 -0
- package/.agent-src/commands/fix/pr-developer-comments.md +12 -0
- package/.agent-src/commands/fix/refs.md +12 -0
- package/.agent-src/commands/fix/seeder.md +12 -0
- package/.agent-src/commands/fix.md +12 -0
- package/.agent-src/commands/ghostwriter/delete.md +20 -8
- package/.agent-src/commands/ghostwriter/fetch.md +19 -7
- package/.agent-src/commands/ghostwriter/list.md +19 -7
- package/.agent-src/commands/ghostwriter/show.md +14 -2
- package/.agent-src/commands/ghostwriter/write.md +15 -3
- package/.agent-src/commands/ghostwriter.md +14 -2
- package/.agent-src/commands/grill-me.md +12 -0
- package/.agent-src/commands/implement-ticket.md +12 -0
- package/.agent-src/commands/install-via-agent.md +129 -0
- package/.agent-src/commands/jira-ticket.md +12 -0
- package/.agent-src/commands/judge/on-diff.md +12 -0
- package/.agent-src/commands/judge/solo.md +12 -0
- package/.agent-src/commands/judge/steps.md +12 -0
- package/.agent-src/commands/judge.md +12 -0
- package/.agent-src/commands/memory/add.md +12 -0
- package/.agent-src/commands/memory/learn-low-impact.md +18 -6
- package/.agent-src/commands/memory/load.md +12 -0
- package/.agent-src/commands/memory/mine-session.md +12 -0
- package/.agent-src/commands/memory/promote.md +12 -0
- package/.agent-src/commands/memory/propose.md +12 -0
- package/.agent-src/commands/memory.md +12 -0
- package/.agent-src/commands/mode.md +12 -0
- package/.agent-src/commands/module/create.md +12 -0
- package/.agent-src/commands/module/explore.md +13 -1
- package/.agent-src/commands/module.md +12 -0
- package/.agent-src/commands/optimize/agents-dir.md +14 -2
- package/.agent-src/commands/optimize/augmentignore.md +12 -0
- package/.agent-src/commands/optimize/rtk.md +12 -0
- package/.agent-src/commands/optimize/skills.md +12 -0
- package/.agent-src/commands/optimize-prompt.md +12 -0
- package/.agent-src/commands/optimize.md +12 -0
- package/.agent-src/commands/orchestrate.md +13 -1
- package/.agent-src/commands/override/create.md +12 -0
- package/.agent-src/commands/override/manage.md +12 -0
- package/.agent-src/commands/override.md +12 -0
- package/.agent-src/commands/package-reset.md +12 -0
- package/.agent-src/commands/package-test.md +12 -0
- package/.agent-src/commands/post-as/ghostwriter.md +12 -0
- package/.agent-src/commands/post-as/me.md +13 -1
- package/.agent-src/commands/post-as.md +12 -0
- package/.agent-src/commands/prepare-for-review.md +12 -0
- package/.agent-src/commands/project-analyze.md +27 -15
- package/.agent-src/commands/project-health.md +13 -1
- package/.agent-src/commands/quality-fix.md +12 -0
- package/.agent-src/commands/refine-ticket.md +12 -0
- package/.agent-src/commands/research/deep.md +12 -0
- package/.agent-src/commands/research/report.md +12 -0
- package/.agent-src/commands/research.md +12 -0
- package/.agent-src/commands/review-changes.md +12 -0
- package/.agent-src/commands/review-routing.md +12 -0
- package/.agent-src/commands/roadmap/ai-council.md +15 -3
- package/.agent-src/commands/roadmap/create.md +13 -1
- package/.agent-src/commands/roadmap/process-full.md +12 -0
- package/.agent-src/commands/roadmap/process-phase.md +12 -0
- package/.agent-src/commands/roadmap/process-step.md +12 -0
- package/.agent-src/commands/roadmap.md +12 -0
- package/.agent-src/commands/rule-compliance-audit.md +12 -0
- package/.agent-src/commands/set-cost-profile.md +12 -0
- package/.agent-src/commands/sync-agent-settings.md +12 -0
- package/.agent-src/commands/sync-gitignore/fix.md +32 -13
- package/.agent-src/commands/sync-gitignore.md +13 -1
- package/.agent-src/commands/tests/create.md +12 -0
- package/.agent-src/commands/tests/execute.md +12 -0
- package/.agent-src/commands/tests.md +12 -0
- package/.agent-src/commands/threat-model.md +12 -0
- package/.agent-src/commands/update-form-request-messages.md +12 -0
- package/.agent-src/commands/upstream-contribute.md +12 -0
- package/.agent-src/commands/video/from-script.md +13 -1
- package/.agent-src/commands/video/scene.md +12 -0
- package/.agent-src/commands/video/stitch.md +13 -1
- package/.agent-src/commands/video/storyboard.md +12 -0
- package/.agent-src/commands/video.md +13 -1
- package/.agent-src/commands/work.md +12 -0
- package/.agent-src/contexts/augment-infrastructure.md +2 -2
- package/.agent-src/contexts/authority/scope-mechanics.md +11 -0
- package/.agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
- package/.agent-src/contexts/documentation-hierarchy.md +2 -2
- package/.agent-src/contexts/execution/cheap-question-mechanics.md +81 -0
- package/.agent-src/contexts/execution/roadmap-process-loop.md +19 -0
- package/.agent-src/ghostwriter/README.md +2 -2
- package/.agent-src/ghostwriter/fictional-fixture-v1.md +1 -1
- package/.agent-src/personas/README.md +1 -1
- package/.agent-src/personas/advisors/contrarian.md +1 -1
- package/.agent-src/personas/advisors/executor.md +1 -1
- package/.agent-src/personas/advisors/expansionist.md +1 -1
- package/.agent-src/personas/advisors/first-principles.md +1 -1
- package/.agent-src/personas/advisors/outsider.md +1 -1
- package/.agent-src/rules/agent-authority.md +12 -0
- package/.agent-src/rules/analysis-skill-routing.md +12 -0
- package/.agent-src/rules/architecture.md +13 -1
- package/.agent-src/rules/artifact-drafting-protocol.md +13 -1
- package/.agent-src/rules/artifact-engagement-recording.md +13 -1
- package/.agent-src/rules/ask-when-uncertain.md +12 -0
- package/.agent-src/rules/augment-edit-discipline.md +13 -1
- package/.agent-src/rules/augment-source-of-truth.md +13 -1
- package/.agent-src/rules/autonomous-execution.md +13 -1
- package/.agent-src/rules/caveman-speak.md +15 -3
- package/.agent-src/rules/cli-output-handling.md +13 -1
- package/.agent-src/rules/command-suggestion-policy.md +13 -1
- package/.agent-src/rules/commit-conventions.md +13 -1
- package/.agent-src/rules/commit-policy.md +12 -0
- package/.agent-src/rules/context-hygiene.md +51 -3
- package/.agent-src/rules/copilot-routing.md +13 -1
- package/.agent-src/rules/devcontainer-routing.md +13 -1
- package/.agent-src/rules/direct-answers.md +12 -0
- package/.agent-src/rules/docker-commands.md +13 -1
- package/.agent-src/rules/domain-adoption-policy.md +17 -5
- package/.agent-src/rules/domain-safety-disclaimer.md +13 -1
- package/.agent-src/rules/domain-safety-pii.md +13 -1
- package/.agent-src/rules/domain-safety-retention.md +13 -1
- package/.agent-src/rules/downstream-changes.md +13 -1
- package/.agent-src/rules/engineering-safety-floor.md +102 -0
- package/.agent-src/rules/external-reference-deep-dive.md +13 -1
- package/.agent-src/rules/fast-path-marker-visibility.md +21 -1
- package/.agent-src/rules/finance-safety-floor.md +114 -0
- package/.agent-src/rules/framework-neutrality-in-generic-skills.md +13 -1
- package/.agent-src/rules/git-history-discipline.md +14 -2
- package/.agent-src/rules/guidelines.md +12 -0
- package/.agent-src/rules/improve-before-implement.md +13 -1
- package/.agent-src/rules/invite-challenge.md +13 -1
- package/.agent-src/rules/language-and-tone.md +12 -0
- package/.agent-src/rules/laravel-routing.md +13 -1
- package/.agent-src/rules/laravel-translations.md +13 -1
- package/.agent-src/rules/low-impact-corpus-privacy-floor.md +17 -5
- package/.agent-src/rules/markdown-safe-codeblocks.md +13 -1
- package/.agent-src/rules/media-governance-routing.md +27 -15
- package/.agent-src/rules/minimal-safe-diff.md +13 -1
- package/.agent-src/rules/missing-tool-handling.md +13 -1
- package/.agent-src/rules/model-recommendation.md +13 -1
- package/.agent-src/rules/no-attribution-footers.md +13 -1
- package/.agent-src/rules/no-cheap-questions.md +46 -32
- package/.agent-src/rules/no-roadmap-references.md +28 -16
- package/.agent-src/rules/non-destructive-by-default.md +12 -0
- package/.agent-src/rules/onboarding-gate.md +19 -6
- package/.agent-src/rules/package-ci-checks.md +12 -0
- package/.agent-src/rules/persona-governance.md +13 -1
- package/.agent-src/rules/php-coding.md +13 -1
- package/.agent-src/rules/preservation-guard.md +13 -1
- package/.agent-src/rules/provider-lifecycle-discipline.md +18 -6
- package/.agent-src/rules/reviewer-awareness.md +13 -1
- package/.agent-src/rules/roadmap-ci-steps-policy.md +13 -1
- package/.agent-src/rules/roadmap-progress-sync.md +18 -1
- package/.agent-src/rules/role-mode-adherence.md +13 -1
- package/.agent-src/rules/rule-type-governance.md +13 -1
- package/.agent-src/rules/runtime-safety.md +13 -1
- package/.agent-src/rules/scope-control.md +12 -0
- package/.agent-src/rules/security-sensitive-stop.md +13 -1
- package/.agent-src/rules/size-enforcement.md +12 -0
- package/.agent-src/rules/skill-improvement-trigger.md +13 -1
- package/.agent-src/rules/skill-quality.md +13 -1
- package/.agent-src/rules/slash-command-routing-policy.md +13 -1
- package/.agent-src/rules/strategy-safety-floor.md +114 -0
- package/.agent-src/rules/symfony-routing.md +13 -1
- package/.agent-src/rules/think-before-action.md +13 -1
- package/.agent-src/rules/token-efficiency.md +13 -1
- package/.agent-src/rules/token-optimizer-maintenance.md +12 -0
- package/.agent-src/rules/tool-safety.md +13 -1
- package/.agent-src/rules/ui-audit-gate.md +13 -1
- package/.agent-src/rules/upstream-proposal.md +13 -1
- package/.agent-src/rules/user-interaction.md +13 -1
- package/.agent-src/rules/user-interrupt-priority.md +12 -0
- package/.agent-src/rules/verify-before-complete.md +12 -0
- package/.agent-src/skills/accessibility-auditor/SKILL.md +12 -0
- package/.agent-src/skills/activation-design/SKILL.md +12 -0
- package/.agent-src/skills/adr-create/SKILL.md +12 -0
- package/.agent-src/skills/adversarial-review/SKILL.md +12 -0
- package/.agent-src/skills/agent-docs-writing/SKILL.md +16 -4
- package/.agent-src/skills/agents-md-thin-root/SKILL.md +28 -10
- package/.agent-src/skills/ai-council/SKILL.md +28 -15
- package/.agent-src/skills/analysis-autonomous-mode/SKILL.md +12 -0
- package/.agent-src/skills/analysis-skill-router/SKILL.md +12 -0
- package/.agent-src/skills/api-design/SKILL.md +13 -3
- package/.agent-src/skills/api-endpoint/SKILL.md +12 -0
- package/.agent-src/skills/api-testing/SKILL.md +12 -0
- package/.agent-src/skills/architecture-review-lens/SKILL.md +12 -0
- package/.agent-src/skills/artisan-commands/SKILL.md +12 -0
- package/.agent-src/skills/async-python-patterns/SKILL.md +13 -1
- package/.agent-src/skills/authz-review/SKILL.md +12 -2
- package/.agent-src/skills/aws-infrastructure/SKILL.md +12 -0
- package/.agent-src/skills/blade-ui/SKILL.md +12 -0
- package/.agent-src/skills/blast-radius-analyzer/SKILL.md +12 -0
- package/.agent-src/skills/bug-analyzer/SKILL.md +14 -2
- package/.agent-src/skills/build-buy-partner/SKILL.md +12 -0
- package/.agent-src/skills/canvas-design/SKILL.md +12 -0
- package/.agent-src/skills/character-consistency/SKILL.md +23 -11
- package/.agent-src/skills/check-refs/SKILL.md +12 -0
- package/.agent-src/skills/churn-prevention/SKILL.md +12 -0
- package/.agent-src/skills/code-refactoring/SKILL.md +16 -4
- package/.agent-src/skills/code-review/SKILL.md +12 -0
- package/.agent-src/skills/command-routing/SKILL.md +12 -0
- package/.agent-src/skills/command-writing/SKILL.md +14 -2
- package/.agent-src/skills/comp-banding/SKILL.md +12 -0
- package/.agent-src/skills/competitive-moat-analysis/SKILL.md +12 -2
- package/.agent-src/skills/competitive-positioning/SKILL.md +12 -2
- package/.agent-src/skills/composer-packages/SKILL.md +12 -0
- package/.agent-src/skills/compress-memory/SKILL.md +12 -0
- package/.agent-src/skills/content-funnel-design/SKILL.md +12 -2
- package/.agent-src/skills/context-authoring/SKILL.md +18 -6
- package/.agent-src/skills/context-document/SKILL.md +17 -5
- package/.agent-src/skills/contracts-cognition/SKILL.md +12 -2
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +12 -0
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +13 -1
- package/.agent-src/skills/copilot-config/SKILL.md +12 -0
- package/.agent-src/skills/customer-research/SKILL.md +12 -0
- package/.agent-src/skills/dashboard-design/SKILL.md +12 -0
- package/.agent-src/skills/data-flow-mapper/SKILL.md +12 -0
- package/.agent-src/skills/data-handling-judgment/SKILL.md +12 -2
- package/.agent-src/skills/database/SKILL.md +14 -2
- package/.agent-src/skills/dcf-modeling/SKILL.md +12 -2
- package/.agent-src/skills/deal-qualification-meddic/SKILL.md +12 -2
- package/.agent-src/skills/decision-record/SKILL.md +12 -0
- package/.agent-src/skills/deep-reading-analyst/SKILL.md +12 -0
- package/.agent-src/skills/defense-in-depth/SKILL.md +13 -1
- package/.agent-src/skills/dependency-upgrade/SKILL.md +12 -0
- package/.agent-src/skills/description-assist/SKILL.md +12 -0
- package/.agent-src/skills/design-review/SKILL.md +12 -0
- package/.agent-src/skills/devcontainer/SKILL.md +12 -0
- package/.agent-src/skills/developer-like-execution/SKILL.md +12 -0
- package/.agent-src/skills/discovery-interview/SKILL.md +12 -2
- package/.agent-src/skills/doc-coauthoring/SKILL.md +12 -0
- package/.agent-src/skills/docker/SKILL.md +12 -0
- package/.agent-src/skills/editorial-calendar/SKILL.md +12 -2
- package/.agent-src/skills/eloquent/SKILL.md +12 -0
- package/.agent-src/skills/eloquent/evals/triggers.json +1 -1
- package/.agent-src/skills/error-handling-patterns/SKILL.md +13 -1
- package/.agent-src/skills/estimate-ticket/SKILL.md +12 -0
- package/.agent-src/skills/existing-ui-audit/SKILL.md +12 -0
- package/.agent-src/skills/expansion-playbook/SKILL.md +12 -0
- package/.agent-src/skills/fe-design/SKILL.md +12 -0
- package/.agent-src/skills/feature-planning/SKILL.md +12 -0
- package/.agent-src/skills/file-editor/SKILL.md +12 -0
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +12 -0
- package/.agent-src/skills/flux/SKILL.md +12 -0
- package/.agent-src/skills/forecast-accuracy/SKILL.md +12 -2
- package/.agent-src/skills/forecasting/SKILL.md +12 -2
- package/.agent-src/skills/form-handler/SKILL.md +12 -0
- package/.agent-src/skills/fundraising-narrative/SKILL.md +12 -2
- package/.agent-src/skills/funnel-analysis/SKILL.md +12 -0
- package/.agent-src/skills/git-workflow/SKILL.md +12 -0
- package/.agent-src/skills/github-ci/SKILL.md +12 -0
- package/.agent-src/skills/grafana/SKILL.md +12 -0
- package/.agent-src/skills/gtm-launch/SKILL.md +12 -2
- package/.agent-src/skills/guideline-writing/SKILL.md +12 -0
- package/.agent-src/skills/hiring-loop-design/SKILL.md +12 -0
- package/.agent-src/skills/incident-commander/SKILL.md +12 -2
- package/.agent-src/skills/jira-integration/SKILL.md +12 -0
- package/.agent-src/skills/jobs-events/SKILL.md +12 -0
- package/.agent-src/skills/judge-bug-hunter/SKILL.md +12 -0
- package/.agent-src/skills/judge-code-quality/SKILL.md +12 -0
- package/.agent-src/skills/judge-security-auditor/SKILL.md +12 -0
- package/.agent-src/skills/judge-test-coverage/SKILL.md +12 -0
- package/.agent-src/skills/laravel/SKILL.md +12 -0
- package/.agent-src/skills/laravel-api-endpoint/SKILL.md +15 -3
- package/.agent-src/skills/laravel-dto/SKILL.md +14 -2
- package/.agent-src/skills/laravel-horizon/SKILL.md +12 -0
- package/.agent-src/skills/laravel-mail/SKILL.md +12 -0
- package/.agent-src/skills/laravel-middleware/SKILL.md +12 -0
- package/.agent-src/skills/laravel-migration/SKILL.md +12 -0
- package/.agent-src/skills/laravel-notifications/SKILL.md +12 -0
- package/.agent-src/skills/laravel-pennant/SKILL.md +12 -0
- package/.agent-src/skills/laravel-pulse/SKILL.md +12 -0
- package/.agent-src/skills/laravel-reverb/SKILL.md +12 -0
- package/.agent-src/skills/laravel-scheduling/SKILL.md +12 -0
- package/.agent-src/skills/laravel-validation/SKILL.md +12 -0
- package/.agent-src/skills/laravel-websocket/SKILL.md +12 -0
- package/.agent-src/skills/launch-readiness/SKILL.md +12 -2
- package/.agent-src/skills/learning-to-rule-or-skill/SKILL.md +15 -3
- package/.agent-src/skills/lint-skills/SKILL.md +12 -0
- package/.agent-src/skills/livewire/SKILL.md +12 -0
- package/.agent-src/skills/livewire-architect/SKILL.md +12 -0
- package/.agent-src/skills/logging-monitoring/SKILL.md +12 -0
- package/.agent-src/skills/market-entry-analysis/SKILL.md +12 -0
- package/.agent-src/skills/markitdown/SKILL.md +14 -2
- package/.agent-src/skills/mcp/SKILL.md +12 -0
- package/.agent-src/skills/mcp-builder/SKILL.md +14 -2
- package/.agent-src/skills/md-language-check/SKILL.md +13 -1
- package/.agent-src/skills/memory-consolidation/SKILL.md +12 -0
- package/.agent-src/skills/merge-conflicts/SKILL.md +12 -0
- package/.agent-src/skills/messaging-architecture/SKILL.md +12 -2
- package/.agent-src/skills/migration-architect/SKILL.md +12 -0
- package/.agent-src/skills/mobile-e2e-strategy/SKILL.md +12 -0
- package/.agent-src/skills/module-management/SKILL.md +12 -0
- package/.agent-src/skills/motion-choreographer/SKILL.md +16 -4
- package/.agent-src/skills/multi-tenancy/SKILL.md +14 -2
- package/.agent-src/skills/nextjs-patterns/SKILL.md +12 -0
- package/.agent-src/skills/okr-tree-modeling/SKILL.md +12 -2
- package/.agent-src/skills/onboarding-design/SKILL.md +12 -0
- package/.agent-src/skills/onboarding-program/SKILL.md +12 -0
- package/.agent-src/skills/one-on-one-cadence/SKILL.md +12 -0
- package/.agent-src/skills/openapi/SKILL.md +13 -1
- package/.agent-src/skills/org-design/SKILL.md +12 -0
- package/.agent-src/skills/override-management/SKILL.md +12 -0
- package/.agent-src/skills/perf-feedback-craft/SKILL.md +12 -0
- package/.agent-src/skills/performance/SKILL.md +12 -0
- package/.agent-src/skills/performance-analysis/SKILL.md +12 -0
- package/.agent-src/skills/persona-writing/SKILL.md +12 -0
- package/.agent-src/skills/pest-testing/SKILL.md +12 -0
- package/.agent-src/skills/php-coder/SKILL.md +12 -0
- package/.agent-src/skills/php-debugging/SKILL.md +12 -0
- package/.agent-src/skills/php-service/SKILL.md +12 -0
- package/.agent-src/skills/pipeline-strategy/SKILL.md +12 -2
- package/.agent-src/skills/pixar-storyteller/SKILL.md +17 -5
- package/.agent-src/skills/playwright-architect/SKILL.md +12 -2
- package/.agent-src/skills/playwright-testing/SKILL.md +12 -0
- package/.agent-src/skills/po-discovery/SKILL.md +12 -0
- package/.agent-src/skills/positioning-strategy/SKILL.md +12 -0
- package/.agent-src/skills/privacy-review/SKILL.md +12 -2
- package/.agent-src/skills/project-analysis-core/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-laravel/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-nextjs/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-node-express/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-react/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-symfony/SKILL.md +12 -0
- package/.agent-src/skills/project-analysis-zend-laminas/SKILL.md +12 -0
- package/.agent-src/skills/project-analyzer/SKILL.md +30 -18
- package/.agent-src/skills/project-docs/SKILL.md +25 -13
- package/.agent-src/skills/prompt-engineering-patterns/SKILL.md +13 -1
- package/.agent-src/skills/prompt-optimizer/SKILL.md +13 -1
- package/.agent-src/skills/quality-tools/SKILL.md +12 -2
- package/.agent-src/skills/react-native-setup/SKILL.md +12 -0
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +12 -0
- package/.agent-src/skills/readme-reviewer/SKILL.md +64 -3
- package/.agent-src/skills/readme-writing/SKILL.md +64 -4
- package/.agent-src/skills/readme-writing-package/SKILL.md +60 -5
- package/.agent-src/skills/receiving-code-review/SKILL.md +12 -0
- package/.agent-src/skills/refine-prompt/SKILL.md +13 -1
- package/.agent-src/skills/refine-ticket/SKILL.md +14 -2
- package/.agent-src/skills/refine-ticket/detection-map.yml +2 -2
- package/.agent-src/skills/release-comms/SKILL.md +12 -2
- package/.agent-src/skills/repomix-packer/SKILL.md +13 -1
- package/.agent-src/skills/requesting-code-review/SKILL.md +12 -0
- package/.agent-src/skills/retention-loops/SKILL.md +12 -0
- package/.agent-src/skills/review-routing/SKILL.md +12 -0
- package/.agent-src/skills/rice-prioritization/SKILL.md +12 -0
- package/.agent-src/skills/risk-officer/SKILL.md +12 -0
- package/.agent-src/skills/roadmap-management/SKILL.md +12 -0
- package/.agent-src/skills/roadmap-writing/SKILL.md +12 -0
- package/.agent-src/skills/rtk-output-filtering/SKILL.md +12 -0
- package/.agent-src/skills/rule-refactor/SKILL.md +15 -3
- package/.agent-src/skills/rule-writing/SKILL.md +13 -1
- package/.agent-src/skills/runway-cognition/SKILL.md +12 -2
- package/.agent-src/skills/scenario-modeling/SKILL.md +12 -2
- package/.agent-src/skills/scene-expander/SKILL.md +18 -6
- package/.agent-src/skills/script-writing/SKILL.md +13 -1
- package/.agent-src/skills/secrets-management/SKILL.md +13 -3
- package/.agent-src/skills/security/SKILL.md +12 -0
- package/.agent-src/skills/security-audit/SKILL.md +12 -0
- package/.agent-src/skills/sentry-integration/SKILL.md +12 -0
- package/.agent-src/skills/sequential-thinking/SKILL.md +12 -0
- package/.agent-src/skills/skill-improvement-pipeline/SKILL.md +12 -0
- package/.agent-src/skills/skill-management/SKILL.md +12 -0
- package/.agent-src/skills/skill-reviewer/SKILL.md +12 -0
- package/.agent-src/skills/skill-writing/SKILL.md +12 -0
- package/.agent-src/skills/sql-writing/SKILL.md +12 -0
- package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +12 -0
- package/.agent-src/skills/subagent-orchestration/SKILL.md +13 -1
- package/.agent-src/skills/symfony-workflow/SKILL.md +12 -0
- package/.agent-src/skills/systematic-debugging/SKILL.md +53 -0
- package/.agent-src/skills/tailwind-engineer/SKILL.md +12 -0
- package/.agent-src/skills/tech-debt-tracker/SKILL.md +12 -2
- package/.agent-src/skills/technical-specification/SKILL.md +12 -0
- package/.agent-src/skills/terraform/SKILL.md +12 -0
- package/.agent-src/skills/terragrunt/SKILL.md +12 -0
- package/.agent-src/skills/test-driven-development/SKILL.md +12 -0
- package/.agent-src/skills/test-performance/SKILL.md +13 -1
- package/.agent-src/skills/testing-anti-patterns/SKILL.md +13 -1
- package/.agent-src/skills/threat-modeling/SKILL.md +12 -0
- package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +12 -0
- package/.agent-src/skills/token-optimizer/SKILL.md +12 -0
- package/.agent-src/skills/traefik/SKILL.md +12 -0
- package/.agent-src/skills/ui-component-architect/SKILL.md +12 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +12 -2
- package/.agent-src/skills/universal-project-analysis/SKILL.md +12 -0
- package/.agent-src/skills/upstream-contribute/SKILL.md +12 -0
- package/.agent-src/skills/using-git-worktrees/SKILL.md +12 -0
- package/.agent-src/skills/validate-feature-fit/SKILL.md +12 -0
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +12 -0
- package/.agent-src/skills/video-director/SKILL.md +18 -6
- package/.agent-src/skills/vision-articulation/SKILL.md +12 -0
- package/.agent-src/skills/voc-extract/SKILL.md +12 -2
- package/.agent-src/skills/voice-and-tone-design/SKILL.md +12 -2
- package/.agent-src/templates/agent-settings.md +5 -5
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/agents/memory/ownership.example.yml +1 -1
- package/.agent-src/templates/agents/proposal.example.md +12 -0
- package/.agent-src/templates/command.md +1 -1
- package/.agent-src/templates/contexts/auth-model.md +2 -2
- package/.agent-src/templates/contexts/data-sensitivity.md +3 -3
- package/.agent-src/templates/contexts/deployment-order.md +2 -2
- package/.agent-src/templates/contexts/observability.md +3 -3
- package/.agent-src/templates/contexts/tenant-boundaries.md +3 -3
- package/.agent-src/templates/contexts.md +1 -1
- package/.agent-src/templates/hooks/pre-commit-frontmatter +66 -0
- package/.agent-src/templates/hooks/pre-commit-roadmap-progress +78 -39
- package/.agent-src/templates/rule.md +1 -1
- package/.agent-src/templates/scripts/work_engine/_lib/agent_settings.py +7 -4
- package/.agent-src/templates/scripts/work_engine/cli.py +6 -6
- package/.agent-src/templates/scripts/work_engine/emitters.py +29 -4
- package/.agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.py +3 -3
- package/.agent-src/templates/scripts/work_engine/orchestration.py +25 -11
- package/.agent-src/templates/scripts/work_engine/state.py +53 -0
- package/.agent-src/templates/skill-archive-note.md +4 -4
- package/.claude-plugin/marketplace.json +2 -2
- package/AGENTS.md +12 -9
- package/CHANGELOG.md +268 -90
- package/CONTRIBUTING.md +61 -0
- package/README.md +173 -558
- package/config/agent-settings.template.yml +11 -8
- package/config/discovery/packs.yml +162 -0
- package/config/discovery/unassigned-artefacts.yml +68 -0
- package/config/discovery/workspaces.yml +59 -0
- package/config/gitignore-block.txt +36 -23
- package/dist/cli/agent-config.js +199 -0
- package/dist/cli/agent-config.js.map +1 -0
- package/dist/cli/bash/runBash.js +40 -0
- package/dist/cli/bash/runBash.js.map +1 -0
- package/dist/cli/commands/doctorShell.js +91 -0
- package/dist/cli/commands/doctorShell.js.map +1 -0
- package/dist/cli/commands/packs.js +59 -0
- package/dist/cli/commands/packs.js.map +1 -0
- package/dist/cli/commands/settings.js +35 -0
- package/dist/cli/commands/settings.js.map +1 -0
- package/dist/cli/commands/uiServe.js +119 -0
- package/dist/cli/commands/uiServe.js.map +1 -0
- package/dist/cli/commands/versions.js +64 -0
- package/dist/cli/commands/versions.js.map +1 -0
- package/dist/cli/commands/workspaces.js +58 -0
- package/dist/cli/commands/workspaces.js.map +1 -0
- package/dist/cli/discovery/loadManifest.js +62 -0
- package/dist/cli/discovery/loadManifest.js.map +1 -0
- package/dist/cli/log/logger.js +41 -0
- package/dist/cli/log/logger.js.map +1 -0
- package/dist/cli/paths.js +60 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/python/resolvePython.js +38 -0
- package/dist/cli/python/resolvePython.js.map +1 -0
- package/dist/cli/registry.js +77 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/discovery/deprecation-report.md +7 -0
- package/dist/discovery/discovery-manifest.json +9893 -0
- package/dist/discovery/discovery-manifest.json.sha256 +1 -0
- package/dist/discovery/discovery-manifest.summary.md +93 -0
- package/dist/discovery/orphan-report.md +10 -0
- package/dist/discovery/packs.json +1002 -0
- package/dist/discovery/trust-report.md +26 -0
- package/dist/discovery/workspaces.json +705 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -0
- package/dist/mcp/mcp-cloudflare-catalogue.json +27 -0
- package/dist/mcp/registry-manifest.json +63 -0
- package/dist/router.json +1623 -0
- package/dist/server/app.js +125 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/io/atomicMultiWrite.js +204 -0
- package/dist/server/io/atomicMultiWrite.js.map +1 -0
- package/dist/server/io/atomicWrite.js +79 -0
- package/dist/server/io/atomicWrite.js.map +1 -0
- package/dist/server/io/substituteTemplate.js +87 -0
- package/dist/server/io/substituteTemplate.js.map +1 -0
- package/dist/server/io/yamlIO.js +162 -0
- package/dist/server/io/yamlIO.js.map +1 -0
- package/dist/server/port.js +97 -0
- package/dist/server/port.js.map +1 -0
- package/dist/server/routes/discovery.js +72 -0
- package/dist/server/routes/discovery.js.map +1 -0
- package/dist/server/routes/ping.js +57 -0
- package/dist/server/routes/ping.js.map +1 -0
- package/dist/server/routes/schema.js +41 -0
- package/dist/server/routes/schema.js.map +1 -0
- package/dist/server/routes/settings.js +236 -0
- package/dist/server/routes/settings.js.map +1 -0
- package/dist/server/routes/userMd.js +127 -0
- package/dist/server/routes/userMd.js.map +1 -0
- package/dist/server/routes/wizard.js +374 -0
- package/dist/server/routes/wizard.js.map +1 -0
- package/dist/server/schemas/settings.js +137 -0
- package/dist/server/schemas/settings.js.map +1 -0
- package/dist/server/token.js +75 -0
- package/dist/server/token.js.map +1 -0
- package/dist/server/writeRoot.js +84 -0
- package/dist/server/writeRoot.js.map +1 -0
- package/dist/server/writeRoot.test.js +91 -0
- package/dist/server/writeRoot.test.js.map +1 -0
- package/dist/shared/userMd/formAdapter.js +83 -0
- package/dist/shared/userMd/formAdapter.js.map +1 -0
- package/dist/shared/userMd/schema.js +46 -0
- package/dist/shared/userMd/schema.js.map +1 -0
- package/dist/shared/userMd/utils.js +88 -0
- package/dist/shared/userMd/utils.js.map +1 -0
- package/dist/ui/assets/index-D-DY1ywI.js +35 -0
- package/dist/ui/assets/index-D-DY1ywI.js.map +1 -0
- package/dist/ui/assets/index-Dqfhmg-d.css +1 -0
- package/dist/ui/index.html +14 -0
- package/docs/adrs/caveman/0001-default-off-until-bench.md +2 -2
- package/docs/adrs/cost/0001-hard-stop-hook.md +1 -1
- package/docs/adrs/router/0001-three-tier-routing.md +5 -5
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +4 -4
- package/docs/adrs/schema/README.md +1 -1
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +3 -3
- package/docs/architecture/setup-vs-settings-shared-surface.md +114 -0
- package/docs/architecture.md +3 -2
- package/docs/archive/CHANGELOG-pre-2.2.0.md +7 -7
- package/docs/archive/CHANGELOG-pre-3.0.0.md +130 -0
- package/docs/archive/CHANGELOG-pre-3.1.0.md +167 -0
- package/docs/catalog.md +92 -100
- package/docs/contracts/CHANGELOG-conventions.md +1 -1
- package/docs/contracts/STABILITY.md +1 -1
- package/docs/contracts/adr-architectural-consensus-mechanism.md +5 -5
- package/docs/contracts/adr-chat-history-split.md +1 -1
- package/docs/contracts/adr-implement-ticket-runtime.md +1 -1
- package/docs/contracts/adr-install-user-type-axis.md +1 -1
- package/docs/contracts/adr-mcp-runtime.md +2 -2
- package/docs/contracts/agent-user-schema.md +17 -11
- package/docs/contracts/ai-council-config.md +13 -13
- package/docs/contracts/audit-log-v1.md +2 -2
- package/docs/contracts/command-clusters.md +2 -2
- package/docs/contracts/compression-default-kill-criterion.md +3 -3
- package/docs/contracts/consumer-bridge.md +79 -0
- package/docs/contracts/decision-trace-v1.md +5 -5
- package/docs/contracts/discovery-manifest.md +209 -0
- package/docs/contracts/discovery-manifest.schema.json +219 -0
- package/docs/contracts/explain-trace.schema.json +144 -0
- package/docs/contracts/file-ownership-matrix.json +288 -328
- package/docs/contracts/file-ownership-matrix.md +1 -1
- package/docs/contracts/frontmatter-contract.md +140 -0
- package/docs/contracts/ghostwriter-schema.md +3 -3
- package/docs/contracts/gui-wizard.md +223 -0
- package/docs/contracts/hook-architecture-v1.md +10 -10
- package/docs/contracts/installer-agent-mode.md +137 -0
- package/docs/contracts/kernel-membership.md +5 -5
- package/docs/contracts/linter-structural-model.md +3 -3
- package/docs/contracts/load-context-schema.md +5 -5
- package/docs/contracts/local-server-api.md +134 -0
- package/docs/contracts/low-impact-corpus-format.md +1 -1
- package/docs/contracts/mcp-cloud-scope.md +2 -2
- package/docs/contracts/mcp-discovery-phase-notice.md +1 -1
- package/docs/contracts/mcp-phase-1-scope.md +5 -4
- package/docs/contracts/mcp-registry-manifest.schema.json +129 -0
- package/docs/contracts/mcp-tool-inventory.md +9 -9
- package/docs/contracts/mcp-tool-stub-envelope.md +1 -1
- package/docs/contracts/memory-visibility-v1.md +2 -2
- package/docs/contracts/multi-tool-projection-fidelity.md +3 -3
- package/docs/contracts/namespace.md +7 -7
- package/docs/contracts/one-off-script-lifecycle.md +1 -1
- package/docs/contracts/package-self-orientation.md +1 -1
- package/docs/contracts/provider-lifecycle.md +7 -7
- package/docs/contracts/router-blending.md +1 -1
- package/docs/contracts/rule-classification.md +2 -2
- package/docs/contracts/rule-router.md +4 -4
- package/docs/contracts/settings-api.md +207 -0
- package/docs/contracts/settings-gui-agent-mode.schema.json +128 -0
- package/docs/contracts/smoke-contracts.md +3 -3
- package/docs/contracts/tier-3-contrib-plugin.md +1 -1
- package/docs/contracts/trust-and-safety.md +144 -0
- package/docs/contracts/universal-skills.md +1 -1
- package/docs/contracts/write-engine.md +1 -1
- package/docs/customization.md +139 -13
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +1 -1
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +1 -1
- package/docs/decisions/ADR-004-rule-governance-pruning.md +8 -8
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +5 -5
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +16 -4
- package/docs/decisions/ADR-008-installed-tools-manifest.md +2 -2
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +2 -2
- package/docs/decisions/ADR-011-domain-pack-readiness.md +4 -4
- package/docs/decisions/ADR-012-typescript-cli-shell.md +162 -0
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +234 -0
- package/docs/decisions/ADR-014-gui-framework-choice.md +136 -0
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +146 -0
- package/docs/decisions/ADR-016-installer-architecture.md +189 -0
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +261 -0
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +159 -0
- package/docs/decisions/ADR-019-router-json-dist-location.md +124 -0
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +123 -0
- package/docs/decisions/ADR-021-deployment-shape.md +153 -0
- package/docs/decisions/ADR-rule-kernel-and-router.md +2 -2
- package/docs/decisions/INDEX.md +10 -0
- package/docs/deploy/connector-setup.md +129 -0
- package/docs/deploy/env-vars.md +70 -0
- package/docs/deploy/policy-cookbook.md +130 -0
- package/docs/deploy/quickstart.md +112 -0
- package/docs/distribution/mcp-submission-checklist.md +95 -0
- package/docs/distribution/public-install-smoke.md +68 -0
- package/docs/distribution/registries.md +55 -0
- package/docs/distribution/telemetry-privacy.md +128 -0
- package/docs/distribution/telemetry-schema.md +174 -0
- package/docs/distribution/topics-equivalents-decay-policy.md +51 -0
- package/docs/examples/agent-user.example.md +3 -1
- package/docs/featured-skills.md +95 -0
- package/docs/getting-started-by-role.md +19 -1
- package/docs/getting-started.md +5 -4
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +1 -1
- package/docs/guidelines/agent-infra/installed-tools-manifest.md +11 -8
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +10 -1
- package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
- package/docs/guidelines/agent-infra/tool-integration.md +1 -1
- package/docs/guidelines/docs/readme-size-and-splitting.md +53 -1
- package/docs/guidelines/php/api-design.md +1 -1
- package/docs/guidelines/prompt-templates.md +2 -2
- package/docs/hook-payload-capture.md +3 -3
- package/docs/installation.md +39 -18
- package/docs/maintainers/dev-mode.md +105 -0
- package/docs/migrations/commands-1.15.0.md +3 -3
- package/docs/parity/bench-ruflo.json +1 -1
- package/docs/parity/ruflo.md +3 -3
- package/docs/profiles.md +1 -1
- package/docs/quality.md +2 -2
- package/docs/recruits/_template.md +3 -3
- package/docs/setup/enterprise-and-offline.md +3 -3
- package/docs/setup/mcp-server-docker.md +5 -3
- package/docs/setup/per-ide/claude-desktop.md +3 -2
- package/docs/skills-catalog.md +62 -18
- package/docs/wizard.md +156 -0
- package/llms.txt +61 -17
- package/package.json +63 -3
- package/scripts/__pycache__/validate_frontmatter.cpython-312.pyc +0 -0
- package/scripts/_archive/README.md +2 -2
- package/scripts/_archive/_p4_migrate.py +1 -1
- package/scripts/_cli/cmd_doctor.py +155 -7
- package/scripts/_cli/cmd_explain.py +108 -3
- package/scripts/_cli/cmd_migrate.py +2 -2
- package/scripts/_cli/cmd_migrate_to_global.py +415 -0
- package/scripts/_cli/cmd_settings_migrate.py +146 -0
- package/scripts/_cli/explain_last/__init__.py +122 -0
- package/scripts/_cli/explain_last/assumptions.py +59 -0
- package/scripts/_cli/explain_last/council.py +105 -0
- package/scripts/_cli/explain_last/halt.py +44 -0
- package/scripts/_cli/explain_last/inputs.py +125 -0
- package/scripts/_cli/explain_last/memory.py +94 -0
- package/scripts/_cli/explain_last/provider.py +52 -0
- package/scripts/_cli/explain_last/render.py +52 -0
- package/scripts/_cli/explain_last/route.py +59 -0
- package/scripts/_cli/explain_last/scrubber.py +105 -0
- package/scripts/_cli/explain_last/sections/__init__.py +35 -0
- package/scripts/_cli/explain_last/sections/assumptions.py +21 -0
- package/scripts/_cli/explain_last/sections/council.py +27 -0
- package/scripts/_cli/explain_last/sections/halt.py +31 -0
- package/scripts/_cli/explain_last/sections/header.py +24 -0
- package/scripts/_cli/explain_last/sections/inputs.py +27 -0
- package/scripts/_cli/explain_last/sections/memory.py +21 -0
- package/scripts/_cli/explain_last/sections/pack.py +16 -0
- package/scripts/_cli/explain_last/sections/provider.py +26 -0
- package/scripts/_cli/explain_last/sections/route.py +22 -0
- package/scripts/_cli/explain_last/state_loader.py +76 -0
- package/scripts/_dispatch.bash +987 -0
- package/scripts/_lib/__pycache__/__init__.cpython-312.pyc +0 -0
- package/scripts/_lib/__pycache__/agent_src.cpython-312.pyc +0 -0
- package/scripts/_lib/agent_settings.py +7 -4
- package/scripts/_lib/agent_src.py +157 -0
- package/scripts/_lib/agents_overlay.py +3 -3
- package/scripts/_phase4_bucket.py +210 -0
- package/scripts/agent-config +50 -947
- package/scripts/ai-video/adapters/higgsfield.sh +1 -1
- package/scripts/ai-video/adapters/sora.sh +1 -1
- package/scripts/ai-video/test-pipeline.sh +2 -2
- package/scripts/ai_council/_default_prices.py +5 -5
- package/scripts/ai_council/advisors.py +1 -1
- package/scripts/ai_council/clients.py +2 -2
- package/scripts/ai_council/compile_corpus.py +9 -8
- package/scripts/ai_council/config.py +3 -3
- package/scripts/ai_council/events_log.py +8 -4
- package/scripts/ai_council/low_impact_corpus.py +1 -1
- package/scripts/ai_council/low_impact_intake.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_budget_v2_audit.py +2 -2
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_structural_optimization.py +1 -1
- package/scripts/ai_council/one_off_archive/2026-05/_one_off_tier_retrofit.py +3 -3
- package/scripts/ai_council/pricing.py +8 -7
- package/scripts/ai_council/probation_gate.py +1 -1
- package/scripts/ai_council/redact_low_impact_entry.py +1 -1
- package/scripts/ai_council/session.py +13 -13
- package/scripts/ai_council/shadow_dispatch.py +2 -2
- package/scripts/annotate_discovery.py +149 -0
- package/scripts/audit_adr_coverage.py +1 -1
- package/scripts/audit_auto_rules.py +2 -2
- package/scripts/audit_cloud_compatibility.py +1 -1
- package/scripts/audit_command_surface.py +2 -2
- package/scripts/audit_likelihood.py +4 -4
- package/scripts/audit_overlap.py +3 -3
- package/scripts/audit_skill_descriptions.py +18 -6
- package/scripts/audit_user_type_axis.py +1 -1
- package/scripts/build_discovery_manifest.py +658 -0
- package/scripts/build_mcp_registry_manifest.py +181 -0
- package/scripts/build_rule_trigger_matrix.py +2 -2
- package/scripts/capture_showcase_session.py +1 -1
- package/scripts/chat_history.py +5 -5
- package/scripts/check_always_budget.py +7 -2
- package/scripts/check_artefact_checksums.py +104 -0
- package/scripts/check_cluster_patterns.py +20 -4
- package/scripts/check_command_count_messaging.py +33 -14
- package/scripts/check_council_layout.py +26 -20
- package/scripts/check_council_references.py +53 -14
- package/scripts/check_discovery_determinism.py +70 -0
- package/scripts/check_kernel_rule_bundle.py +2 -2
- package/scripts/check_no_roadmap_refs.py +2 -2
- package/scripts/check_one_off_location.py +1 -1
- package/scripts/check_overlay_cascade_subdirs.py +7 -3
- package/scripts/check_public_links.py +2 -2
- package/scripts/check_references.py +19 -23
- package/scripts/check_release_includes_discovery.py +61 -0
- package/scripts/check_reply_consistency.py +32 -9
- package/scripts/check_template_pin_drift.py +24 -7
- package/scripts/check_token_optimizer_freshness.py +18 -3
- package/scripts/ci_summary.py +2 -2
- package/scripts/ci_time_ratio.py +1 -1
- package/scripts/command_suggester/__init__.py +1 -1
- package/scripts/compile_router.py +34 -2
- package/scripts/compress.py +162 -44
- package/scripts/config/presets.py +19 -1
- package/scripts/config/profiles.py +16 -1
- package/scripts/context_hygiene_hook.py +2 -2
- package/scripts/council_cli.py +22 -22
- package/scripts/council_prune.py +3 -3
- package/scripts/discovery_stats.py +70 -0
- package/scripts/expected_perms.json +47 -0
- package/scripts/extract_audit_patterns.py +2 -2
- package/scripts/gen_discovery_baseline.py +127 -0
- package/scripts/generate_index.py +78 -46
- package/scripts/generate_ownership_matrix.py +99 -44
- package/scripts/generate_pack_manifests.py +183 -0
- package/scripts/hook_manifest.yaml +5 -5
- package/scripts/hooks/cline-dispatcher.sh +1 -1
- package/scripts/hooks/cowork-dispatcher.sh +1 -1
- package/scripts/hooks/dispatch_hook.py +3 -3
- package/scripts/hooks/gemini-dispatcher.sh +1 -1
- package/scripts/hooks/replay_hook.py +1 -1
- package/scripts/hooks/state_io.py +5 -5
- package/scripts/hooks_doctor.py +4 -4
- package/scripts/install +18 -1
- package/scripts/install-hooks.sh +2 -2
- package/scripts/install.py +937 -62
- package/scripts/install.sh +147 -27
- package/scripts/inventory_frontmatter.py +1 -1
- package/scripts/lint_agents_layout.py +183 -0
- package/scripts/lint_agents_md.py +1 -1
- package/scripts/lint_archived_skills.py +35 -19
- package/scripts/lint_artefact_frontmatter.py +180 -0
- package/scripts/lint_bench_corpus.py +14 -2
- package/scripts/lint_command_tiers.py +15 -2
- package/scripts/lint_discovery_manifest.py +136 -0
- package/scripts/lint_discovery_vocabulary.py +148 -0
- package/scripts/lint_explain_trace.py +80 -0
- package/scripts/lint_featured_skills.py +139 -0
- package/scripts/lint_framework_leakage.py +33 -6
- package/scripts/lint_framework_leakage_allowlist.json +63 -62
- package/scripts/lint_ghostwriter_source.py +1 -1
- package/scripts/lint_global_paths.py +147 -0
- package/scripts/lint_load_context.py +3 -3
- package/scripts/lint_mcp_registry_manifest.py +69 -0
- package/scripts/lint_media_policy_linkage.py +6 -6
- package/scripts/lint_orchestration_dsl.py +6 -3
- package/scripts/lint_pack_boundaries.py +147 -0
- package/scripts/lint_pack_first_win.py +103 -0
- package/scripts/lint_positioning.py +143 -0
- package/scripts/lint_readme_jargon.py +131 -0
- package/scripts/lint_readme_size.py +33 -0
- package/scripts/lint_rule_interactions.py +23 -5
- package/scripts/lint_rule_tiers.py +14 -5
- package/scripts/lint_skill_tools.py +1 -1
- package/scripts/lint_topics_yaml.py +89 -0
- package/scripts/lint_trust_coherence.py +212 -0
- package/scripts/mcp_server/consumer_tool_catalog.json +3 -3
- package/scripts/mcp_server/telemetry.py +2 -2
- package/scripts/mcp_server/tools.py +27 -11
- package/scripts/mcp_telemetry_health.py +2 -2
- package/scripts/mcp_telemetry_store.py +1 -1
- package/scripts/measure_augment_budget.py +3 -3
- package/scripts/measure_density.py +2 -2
- package/scripts/measure_frugality_savings.py +3 -3
- package/scripts/measure_roadmap_trajectory.py +1 -1
- package/scripts/measure_rule_budget.py +25 -7
- package/scripts/memory_report.py +1 -1
- package/scripts/migrate_command_suggestions.py +3 -3
- package/scripts/minimal_safe_diff_hook.py +1 -1
- package/scripts/move_artefact.py +143 -0
- package/scripts/new_skill.py +148 -0
- package/scripts/onboarding_gate_hook.py +4 -4
- package/scripts/plan_physical_move.py +353 -0
- package/scripts/prepack-check.mjs +62 -0
- package/scripts/probe_projection_fidelity.py +2 -2
- package/scripts/refine_ticket_detect.py +31 -8
- package/scripts/schemas/command.schema.json +45 -1
- package/scripts/schemas/persona.schema.json +1 -1
- package/scripts/schemas/rule.schema.json +44 -4
- package/scripts/schemas/skill.schema.json +41 -1
- package/scripts/score_skill_selection.py +1 -1
- package/scripts/skill_collision_clusters.py +1 -1
- package/scripts/skill_linter.py +250 -120
- package/scripts/skill_overlap.py +1 -1
- package/scripts/skill_tools/run_block_d_eval.py +1 -1
- package/scripts/skill_trigger_eval.py +28 -8
- package/scripts/skill_usage_collect.py +3 -3
- package/scripts/skill_usage_report.py +3 -3
- package/scripts/smoke/kernel.sh +1 -1
- package/scripts/smoke/router.sh +24 -5
- package/scripts/smoke/skills.sh +15 -7
- package/scripts/smoke_quickstart.py +12 -3
- package/scripts/snapshot_agent_outputs.py +144 -0
- package/scripts/spotcheck_thin_root.py +1 -1
- package/scripts/sync_github_metadata.py +147 -0
- package/scripts/sync_gitignore.py +15 -5
- package/scripts/update_counts.py +45 -17
- package/scripts/update_prices.py +4 -3
- package/scripts/validate_decision_engine.py +9 -1
- package/scripts/validate_discovery_manifest.py +94 -0
- package/scripts/validate_frontmatter.py +39 -20
- package/scripts/verify_before_complete_hook.py +1 -1
- package/scripts/verify_physical_move.py +185 -0
- package/scripts/verify_roadmap_closure.py +1 -1
- package/templates/agent-user.md +34 -0
- package/templates/agent-user.yml +21 -0
- package/templates/minimal/agents-overrides-readme.md +46 -0
- package/templates/minimal/overrides-gitkeep +2 -0
- package/.agent-src/commands/onboard.md +0 -467
- package/templates/minimal/agents-gitkeep +0 -2
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""CI guard for README.md line budget.
|
|
3
|
+
|
|
4
|
+
The role-first-onboarding roadmap (Phase 2 Step 6) freezes README at
|
|
5
|
+
its current length: replace, do not grow. Every line added above the
|
|
6
|
+
fold must displace an existing line. Budget: 750 lines max.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
README = Path("README.md")
|
|
15
|
+
LIMIT = 750
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main() -> int:
|
|
19
|
+
quiet = "--quiet" in sys.argv
|
|
20
|
+
if not README.exists():
|
|
21
|
+
print(f"error: {README} not found", file=sys.stderr)
|
|
22
|
+
return 1
|
|
23
|
+
n = sum(1 for _ in README.read_text(encoding="utf-8").splitlines())
|
|
24
|
+
if n > LIMIT:
|
|
25
|
+
print(f"FAIL {README}: {n} lines (limit {LIMIT}). Trim before merge.")
|
|
26
|
+
return 1
|
|
27
|
+
if not quiet:
|
|
28
|
+
print(f"OK {README}: {n} lines (limit {LIMIT}).")
|
|
29
|
+
return 0
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
sys.exit(main())
|
|
@@ -25,8 +25,27 @@ import yaml
|
|
|
25
25
|
QUIET = "--quiet" in sys.argv
|
|
26
26
|
|
|
27
27
|
ROOT = Path(__file__).resolve().parent.parent
|
|
28
|
+
sys.path.insert(0, str(ROOT / "scripts"))
|
|
29
|
+
from _lib.agent_src import resolve_logical, strip_source_prefix # noqa: E402
|
|
30
|
+
|
|
28
31
|
MATRIX = ROOT / "docs" / "contracts" / "rule-interactions.yml"
|
|
29
|
-
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _rule_exists(slug: str) -> bool:
|
|
35
|
+
return resolve_logical(f"rules/{slug}.md") is not None
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _evidence_exists(file_part: str) -> bool:
|
|
39
|
+
"""Return True if the evidence path resolves under any source root.
|
|
40
|
+
|
|
41
|
+
Accepts legacy ``.agent-src.uncompressed/...`` citations and resolves
|
|
42
|
+
them through the multi-root layout; falls back to a literal repo
|
|
43
|
+
path check for non-source citations (docs/, agents/, ...).
|
|
44
|
+
"""
|
|
45
|
+
logical = strip_source_prefix(file_part)
|
|
46
|
+
if logical is not None:
|
|
47
|
+
return resolve_logical(logical) is not None
|
|
48
|
+
return (ROOT / file_part).exists()
|
|
30
49
|
|
|
31
50
|
ALLOWED_RELATIONS = {
|
|
32
51
|
"overrides",
|
|
@@ -77,9 +96,8 @@ def main() -> int:
|
|
|
77
96
|
if not isinstance(slug, str):
|
|
78
97
|
errors.append(f"rule slug not a string: {slug!r}")
|
|
79
98
|
continue
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
errors.append(f"rule slug `{slug}` has no file at {rule_path.relative_to(ROOT)}")
|
|
99
|
+
if not _rule_exists(slug):
|
|
100
|
+
errors.append(f"rule slug `{slug}` has no file under any source root (rules/{slug}.md)")
|
|
83
101
|
|
|
84
102
|
pairs = data.get("pairs") or []
|
|
85
103
|
if not isinstance(pairs, list) or not pairs:
|
|
@@ -124,7 +142,7 @@ def main() -> int:
|
|
|
124
142
|
errors.append(f"pair `{pid}` evidence item not a string: {citation!r}")
|
|
125
143
|
continue
|
|
126
144
|
file_part = citation.split("#", 1)[0]
|
|
127
|
-
if not (
|
|
145
|
+
if not _evidence_exists(file_part):
|
|
128
146
|
errors.append(f"pair `{pid}` evidence path does not exist: {file_part}")
|
|
129
147
|
|
|
130
148
|
# Anchor coverage check
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
Hard-fails CI if any rule under .agent-src.uncompressed/rules/ lacks a
|
|
5
5
|
`tier:` declaration or uses an unknown tier value. The valid tier set is
|
|
6
|
-
locked by agents/contexts/hardening-pattern.md and the matrix in
|
|
7
|
-
agents/contexts/rule-trigger-matrix.md.
|
|
6
|
+
locked by agents/settings/contexts/hardening-pattern.md and the matrix in
|
|
7
|
+
agents/settings/contexts/rule-trigger-matrix.md.
|
|
8
8
|
|
|
9
9
|
Hooked into `task ci` after `task lint-skills`.
|
|
10
10
|
|
|
@@ -20,7 +20,12 @@ from pathlib import Path
|
|
|
20
20
|
QUIET = "--quiet" in sys.argv
|
|
21
21
|
|
|
22
22
|
REPO = Path(__file__).resolve().parents[1]
|
|
23
|
-
|
|
23
|
+
|
|
24
|
+
# Rules live under every artefact root post-monorepo Phase 4.
|
|
25
|
+
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
26
|
+
from _lib.agent_src import artefact_roots # noqa: E402
|
|
27
|
+
|
|
28
|
+
RULES_DIRS = [root / "rules" for root in artefact_roots() if (root / "rules").is_dir()]
|
|
24
29
|
|
|
25
30
|
VALID_TIERS = frozenset({"1", "2a", "2b", "3", "safety-floor", "mechanical-already"})
|
|
26
31
|
|
|
@@ -41,9 +46,13 @@ def parse_tier(text: str) -> str | None:
|
|
|
41
46
|
|
|
42
47
|
|
|
43
48
|
def main() -> int:
|
|
44
|
-
rules =
|
|
49
|
+
rules: list[Path] = []
|
|
50
|
+
for rules_dir in RULES_DIRS:
|
|
51
|
+
rules.extend(rules_dir.glob("*.md"))
|
|
52
|
+
rules.sort()
|
|
45
53
|
if not rules:
|
|
46
|
-
|
|
54
|
+
roots_label = ", ".join(str(d) for d in RULES_DIRS) or "<no rules root>"
|
|
55
|
+
print(f"lint_rule_tiers: no rules found under {roots_label}", file=sys.stderr)
|
|
47
56
|
return 1
|
|
48
57
|
|
|
49
58
|
missing: list[str] = []
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""Block D · D1 — meta-linter for ``scripts/skill_tools/*.py``.
|
|
3
3
|
|
|
4
4
|
Enforces the four pilot-tool invariants locked by the Block D council
|
|
5
|
-
verdict (`agents/council
|
|
5
|
+
verdict (`agents/runtime/council/responses/block-d-python-tools-pilot-verdict.md`):
|
|
6
6
|
|
|
7
7
|
1. **stdlib-only** — no third-party imports. Internal package imports
|
|
8
8
|
(``scripts.*``) are allowed.
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Linter for `.github/topics.yml`.
|
|
3
|
+
|
|
4
|
+
Asserts:
|
|
5
|
+
* file exists and parses as YAML
|
|
6
|
+
* `topics:` is a non-empty list
|
|
7
|
+
* every topic matches `^[a-z0-9][a-z0-9-]*$` and is \u2264 50 chars
|
|
8
|
+
* no duplicates
|
|
9
|
+
* `notes:` key exists (may be empty mapping/string), so the
|
|
10
|
+
rationale slot is never silently dropped
|
|
11
|
+
* `equivalents:` (if present) is a mapping whose keys are all
|
|
12
|
+
listed in `topics:`
|
|
13
|
+
|
|
14
|
+
Roadmap: agents/roadmaps/strategic-visibility-mcp-topics-positioning.md Phase 1.3.
|
|
15
|
+
"""
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import re
|
|
19
|
+
import sys
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
|
|
22
|
+
import yaml
|
|
23
|
+
|
|
24
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
25
|
+
TOPICS_FILE = ROOT / ".github" / "topics.yml"
|
|
26
|
+
SLUG_RE = re.compile(r"^[a-z0-9][a-z0-9-]*$")
|
|
27
|
+
QUIET = "--quiet" in sys.argv
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _fail(msg: str) -> None:
|
|
31
|
+
print(f"\u274c topics.yml: {msg}", file=sys.stderr)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def main() -> int:
|
|
35
|
+
if not TOPICS_FILE.exists():
|
|
36
|
+
_fail(f"missing file: {TOPICS_FILE.relative_to(ROOT)}")
|
|
37
|
+
return 1
|
|
38
|
+
try:
|
|
39
|
+
doc = yaml.safe_load(TOPICS_FILE.read_text(encoding="utf-8")) or {}
|
|
40
|
+
except yaml.YAMLError as e:
|
|
41
|
+
_fail(f"YAML parse error: {e}")
|
|
42
|
+
return 1
|
|
43
|
+
|
|
44
|
+
errors: list[str] = []
|
|
45
|
+
|
|
46
|
+
topics = doc.get("topics")
|
|
47
|
+
if not isinstance(topics, list) or not topics:
|
|
48
|
+
errors.append("`topics:` must be a non-empty list")
|
|
49
|
+
topics = []
|
|
50
|
+
|
|
51
|
+
seen: set[str] = set()
|
|
52
|
+
for t in topics:
|
|
53
|
+
if not isinstance(t, str):
|
|
54
|
+
errors.append(f"non-string topic entry: {t!r}")
|
|
55
|
+
continue
|
|
56
|
+
if len(t) > 50:
|
|
57
|
+
errors.append(f"topic too long (>50 chars): {t!r}")
|
|
58
|
+
if not SLUG_RE.match(t):
|
|
59
|
+
errors.append(f"invalid slug (expect ^[a-z0-9][a-z0-9-]*$): {t!r}")
|
|
60
|
+
if t in seen:
|
|
61
|
+
errors.append(f"duplicate topic: {t!r}")
|
|
62
|
+
seen.add(t)
|
|
63
|
+
|
|
64
|
+
if "notes" not in doc:
|
|
65
|
+
errors.append("`notes:` key missing (may be empty, but must be present)")
|
|
66
|
+
|
|
67
|
+
equivalents = doc.get("equivalents")
|
|
68
|
+
if equivalents is not None:
|
|
69
|
+
if not isinstance(equivalents, dict):
|
|
70
|
+
errors.append("`equivalents:` must be a mapping")
|
|
71
|
+
else:
|
|
72
|
+
for key, val in equivalents.items():
|
|
73
|
+
if key not in seen:
|
|
74
|
+
errors.append(f"`equivalents:` key {key!r} not in `topics:`")
|
|
75
|
+
if not isinstance(val, list) or not all(isinstance(v, str) for v in val):
|
|
76
|
+
errors.append(f"`equivalents.{key}` must be a list of strings")
|
|
77
|
+
|
|
78
|
+
if errors:
|
|
79
|
+
for e in errors:
|
|
80
|
+
_fail(e)
|
|
81
|
+
return 1
|
|
82
|
+
|
|
83
|
+
if not QUIET:
|
|
84
|
+
print(f"\u2705 topics.yml: {len(topics)} topic(s), all valid")
|
|
85
|
+
return 0
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
if __name__ == "__main__":
|
|
89
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Lint trust/safety coherence across the discovery manifest.
|
|
3
|
+
|
|
4
|
+
Phase 5.4 of the monorepo trust-and-safety layer. Walks the freshly
|
|
5
|
+
built `dist/discovery/discovery-manifest.json` and asserts three
|
|
6
|
+
invariants:
|
|
7
|
+
|
|
8
|
+
1. Every pack whose ``trust_summary`` declares ``advisory`` or
|
|
9
|
+
``restricted`` artefacts ships at least one ``*safety-floor*``
|
|
10
|
+
rule in the same pack.
|
|
11
|
+
2. Every artefact with ``trust.human_review_required: true`` carries
|
|
12
|
+
the ``_HRR_BANNER_MARKER`` in its compiled output under
|
|
13
|
+
``.agent-src/<logical>``.
|
|
14
|
+
3. Every rule listed in ``router.json`` ``kernel[]`` declares
|
|
15
|
+
``trust.level: core`` (no escalation to advisory/restricted,
|
|
16
|
+
no demotion to experimental).
|
|
17
|
+
|
|
18
|
+
Exits 0 clean, 1 on any violation. Stdlib + pyyaml. Cap: ≤ 200 LOC.
|
|
19
|
+
"""
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import argparse
|
|
23
|
+
import json
|
|
24
|
+
import sys
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
from typing import Any
|
|
27
|
+
|
|
28
|
+
ROOT = Path(__file__).resolve().parents[1]
|
|
29
|
+
MANIFEST = ROOT / "dist" / "discovery" / "discovery-manifest.json"
|
|
30
|
+
ROUTER = ROOT / "dist" / "router.json"
|
|
31
|
+
COMPILED_SRC = ROOT / ".agent-src"
|
|
32
|
+
|
|
33
|
+
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
34
|
+
from _lib.agent_src import strip_source_prefix # noqa: E402
|
|
35
|
+
|
|
36
|
+
# Imported lazily inside _banner_marker() to keep the cap loose if compress.py
|
|
37
|
+
# grows additional top-level side effects.
|
|
38
|
+
_BANNER_MARKER = "<!-- agent-config:human-review-banner -->"
|
|
39
|
+
|
|
40
|
+
# Trust levels that demand a domain-safety floor in the same pack.
|
|
41
|
+
_FLAGGED_LEVELS = ("advisory", "restricted")
|
|
42
|
+
_SAFETY_FLOOR_FRAGMENT = "safety-floor"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _load_manifest(path: Path) -> dict[str, Any]:
|
|
46
|
+
if not path.exists():
|
|
47
|
+
raise SystemExit(
|
|
48
|
+
f"ERROR: manifest not found: {path}\n"
|
|
49
|
+
" Run `task build-discovery` first."
|
|
50
|
+
)
|
|
51
|
+
return json.loads(path.read_text("utf-8"))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _load_kernel(path: Path) -> set[str]:
|
|
55
|
+
if not path.exists():
|
|
56
|
+
raise SystemExit(f"ERROR: router.json not found: {path}")
|
|
57
|
+
data = json.loads(path.read_text("utf-8"))
|
|
58
|
+
kernel = data.get("kernel") or []
|
|
59
|
+
if not isinstance(kernel, list):
|
|
60
|
+
raise SystemExit("ERROR: router.json `kernel` must be a list")
|
|
61
|
+
return {str(name) for name in kernel}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def _check_pack_safety_floors(manifest: dict[str, Any]) -> list[str]:
|
|
65
|
+
"""Check 1: advisory/restricted packs ship a *safety-floor* rule."""
|
|
66
|
+
errs: list[str] = []
|
|
67
|
+
# Build pack -> [artefact path] index from the artefact list so we can
|
|
68
|
+
# spot the safety-floor regardless of how trust_summary was computed.
|
|
69
|
+
pack_paths: dict[str, list[str]] = {}
|
|
70
|
+
for art in manifest.get("artefacts", []):
|
|
71
|
+
for pack in art.get("packs", []) or []:
|
|
72
|
+
pack_paths.setdefault(pack, []).append(art["path"])
|
|
73
|
+
|
|
74
|
+
for pack in manifest.get("packs", []):
|
|
75
|
+
summary = pack.get("trust_summary", {}) or {}
|
|
76
|
+
flagged_total = sum(int(summary.get(lvl, 0)) for lvl in _FLAGGED_LEVELS)
|
|
77
|
+
if flagged_total == 0:
|
|
78
|
+
continue
|
|
79
|
+
paths = pack_paths.get(pack["id"], [])
|
|
80
|
+
has_floor = any(_SAFETY_FLOOR_FRAGMENT in p for p in paths)
|
|
81
|
+
if not has_floor:
|
|
82
|
+
counts = ", ".join(
|
|
83
|
+
f"{lvl}={int(summary.get(lvl, 0))}" for lvl in _FLAGGED_LEVELS
|
|
84
|
+
)
|
|
85
|
+
errs.append(
|
|
86
|
+
f"pack `{pack['id']}` declares flagged artefacts ({counts})"
|
|
87
|
+
f" but ships no `*{_SAFETY_FLOOR_FRAGMENT}*` rule"
|
|
88
|
+
)
|
|
89
|
+
return errs
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def _check_human_review_banners(
|
|
93
|
+
manifest: dict[str, Any], compiled_src: Path
|
|
94
|
+
) -> list[str]:
|
|
95
|
+
"""Check 2: every human_review_required artefact has the banner."""
|
|
96
|
+
errs: list[str] = []
|
|
97
|
+
for art in manifest.get("artefacts", []):
|
|
98
|
+
trust = art.get("trust", {}) or {}
|
|
99
|
+
if not trust.get("human_review_required"):
|
|
100
|
+
continue
|
|
101
|
+
rel = art["path"]
|
|
102
|
+
logical = strip_source_prefix(rel)
|
|
103
|
+
if logical is None:
|
|
104
|
+
errs.append(
|
|
105
|
+
f"{rel}: human_review_required=true but path is not under"
|
|
106
|
+
" any known source root"
|
|
107
|
+
)
|
|
108
|
+
continue
|
|
109
|
+
compiled = compiled_src / logical
|
|
110
|
+
if not compiled.exists():
|
|
111
|
+
errs.append(
|
|
112
|
+
f"{rel}: human_review_required=true but compiled output"
|
|
113
|
+
f" missing at `{compiled.relative_to(ROOT)}`"
|
|
114
|
+
)
|
|
115
|
+
continue
|
|
116
|
+
body = compiled.read_text("utf-8", errors="replace")
|
|
117
|
+
if _BANNER_MARKER not in body:
|
|
118
|
+
errs.append(
|
|
119
|
+
f"{rel}: human_review_required=true but compiled output"
|
|
120
|
+
f" `{compiled.relative_to(ROOT)}` is missing the HRR banner"
|
|
121
|
+
f" (`{_BANNER_MARKER}`) — re-run `task compress`."
|
|
122
|
+
)
|
|
123
|
+
return errs
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def _check_kernel_trust(
|
|
127
|
+
manifest: dict[str, Any], kernel: set[str]
|
|
128
|
+
) -> list[str]:
|
|
129
|
+
"""Check 3: every kernel rule declares trust.level=core."""
|
|
130
|
+
errs: list[str] = []
|
|
131
|
+
# name -> artefact for category=rule entries. Manifest does not always
|
|
132
|
+
# populate `name` for rules, so fall back to the logical filename stem.
|
|
133
|
+
rule_by_name: dict[str, dict[str, Any]] = {}
|
|
134
|
+
for art in manifest.get("artefacts", []):
|
|
135
|
+
if art.get("category") != "rule":
|
|
136
|
+
continue
|
|
137
|
+
name = art.get("name")
|
|
138
|
+
if not name:
|
|
139
|
+
logical = strip_source_prefix(art.get("path", ""))
|
|
140
|
+
if logical is None:
|
|
141
|
+
continue
|
|
142
|
+
stem = Path(logical).stem
|
|
143
|
+
name = stem
|
|
144
|
+
rule_by_name[name] = art
|
|
145
|
+
|
|
146
|
+
for kname in sorted(kernel):
|
|
147
|
+
art = rule_by_name.get(kname)
|
|
148
|
+
if art is None:
|
|
149
|
+
errs.append(
|
|
150
|
+
f"kernel rule `{kname}` listed in router.json but no"
|
|
151
|
+
" matching artefact in manifest"
|
|
152
|
+
)
|
|
153
|
+
continue
|
|
154
|
+
level = (art.get("trust", {}) or {}).get("level")
|
|
155
|
+
if level != "core":
|
|
156
|
+
errs.append(
|
|
157
|
+
f"kernel rule `{kname}` has trust.level=`{level}`"
|
|
158
|
+
" — must be `core` (router.json kernel guarantees Iron-Law"
|
|
159
|
+
" floor)"
|
|
160
|
+
)
|
|
161
|
+
return errs
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def main(argv: list[str] | None = None) -> int:
|
|
165
|
+
parser = argparse.ArgumentParser(description=__doc__.splitlines()[0])
|
|
166
|
+
parser.add_argument("--quiet", action="store_true")
|
|
167
|
+
parser.add_argument(
|
|
168
|
+
"--manifest", type=Path, default=MANIFEST, help="discovery manifest"
|
|
169
|
+
)
|
|
170
|
+
parser.add_argument(
|
|
171
|
+
"--router", type=Path, default=ROUTER, help="router.json with kernel[]"
|
|
172
|
+
)
|
|
173
|
+
parser.add_argument(
|
|
174
|
+
"--compiled-src",
|
|
175
|
+
type=Path,
|
|
176
|
+
default=COMPILED_SRC,
|
|
177
|
+
help="compiled output root (.agent-src/)",
|
|
178
|
+
)
|
|
179
|
+
args = parser.parse_args(argv)
|
|
180
|
+
|
|
181
|
+
manifest = _load_manifest(args.manifest)
|
|
182
|
+
kernel = _load_kernel(args.router)
|
|
183
|
+
|
|
184
|
+
errs: list[str] = []
|
|
185
|
+
errs.extend(_check_pack_safety_floors(manifest))
|
|
186
|
+
errs.extend(_check_human_review_banners(manifest, args.compiled_src))
|
|
187
|
+
errs.extend(_check_kernel_trust(manifest, kernel))
|
|
188
|
+
|
|
189
|
+
if errs:
|
|
190
|
+
for e in errs:
|
|
191
|
+
print(f"ERROR: {e}", file=sys.stderr)
|
|
192
|
+
print(
|
|
193
|
+
f"\n{len(errs)} trust-coherence violation(s) across"
|
|
194
|
+
f" {len(manifest.get('packs', []))} pack(s) and"
|
|
195
|
+
f" {len(manifest.get('artefacts', []))} artefact(s).",
|
|
196
|
+
file=sys.stderr,
|
|
197
|
+
)
|
|
198
|
+
return 1
|
|
199
|
+
|
|
200
|
+
if not args.quiet:
|
|
201
|
+
print(
|
|
202
|
+
"✅ lint-trust-coherence:"
|
|
203
|
+
f" {len(manifest.get('packs', []))} pack(s),"
|
|
204
|
+
f" {len(kernel)} kernel rule(s),"
|
|
205
|
+
f" {sum(1 for a in manifest.get('artefacts', []) if (a.get('trust') or {}).get('human_review_required'))}"
|
|
206
|
+
" HRR artefact(s) clean."
|
|
207
|
+
)
|
|
208
|
+
return 0
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
if __name__ == "__main__":
|
|
212
|
+
raise SystemExit(main())
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"name": "chat_history_append",
|
|
25
|
-
"description": "Append one entry to the consumer's chat-history JSONL (`agents/.agent-chat-history`). Path-scoped — writes outside the allowlist raise ValueError. Use `dry_run` to preview the payload without touching the filesystem.",
|
|
25
|
+
"description": "Append one entry to the consumer's chat-history JSONL (`agents/runtime/.agent-chat-history`; `agents/.agent-chat-history` and `.agent-chat-history` accepted for back-compat). Path-scoped — writes outside the allowlist raise ValueError. Use `dry_run` to preview the payload without touching the filesystem.",
|
|
26
26
|
"side_effect": "fs-write",
|
|
27
27
|
"implemented_on": ["stdio"],
|
|
28
28
|
"input_schema": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"properties": {
|
|
31
31
|
"text": {"type": "string"},
|
|
32
32
|
"entry_type": {"type": "string", "description": "Short `t` tag (e.g. note, decision). Defaults to `note`."},
|
|
33
|
-
"path": {"type": "string", "description": "Optional path override. Must resolve to `agents/.agent-chat-history` or `.agent-chat-history` under consumer_root."},
|
|
33
|
+
"path": {"type": "string", "description": "Optional path override. Must resolve to `agents/runtime/.agent-chat-history` (current default), `agents/.agent-chat-history`, or `.agent-chat-history` under consumer_root."},
|
|
34
34
|
"session": {"type": "string"},
|
|
35
35
|
"dry_run": {"type": "boolean", "default": false},
|
|
36
36
|
"min_schema_version": {"type": "integer"}
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"name": "chat_history_read",
|
|
44
|
-
"description": "Read recent chat-history entries from `agents/.agent-chat-history
|
|
44
|
+
"description": "Read recent chat-history entries from `agents/runtime/.agent-chat-history` (`agents/.agent-chat-history` accepted for back-compat). Filter by session, limit, or entry-type. Read-only.",
|
|
45
45
|
"side_effect": "ro",
|
|
46
46
|
"implemented_on": ["stdio"],
|
|
47
47
|
"input_schema": {
|
|
@@ -14,7 +14,7 @@ Outcomes:
|
|
|
14
14
|
envelope returned.
|
|
15
15
|
- ``latent_demand`` — caller asked for a tool not in the catalog.
|
|
16
16
|
|
|
17
|
-
The sink writes JSONL to ``agents
|
|
17
|
+
The sink writes JSONL to ``agents/runtime/mcp-telemetry/calls.jsonl`` under the
|
|
18
18
|
consumer root. Failure to write must not break the wire surface: the
|
|
19
19
|
``record_call`` helper swallows OSError + ValueError and emits a single
|
|
20
20
|
warning to stderr.
|
|
@@ -33,7 +33,7 @@ Outcome = Literal["implemented", "stub", "latent_demand"]
|
|
|
33
33
|
|
|
34
34
|
# Stable file location relative to consumer_root. Phase 2 K1 routes
|
|
35
35
|
# this into a queryable store; Phase 1 only needs the file to exist.
|
|
36
|
-
TELEMETRY_REL_DIR = "agents
|
|
36
|
+
TELEMETRY_REL_DIR = "agents/runtime/mcp-telemetry"
|
|
37
37
|
TELEMETRY_FILENAME = "calls.jsonl"
|
|
38
38
|
|
|
39
39
|
# Truncation length for the client_id hash. 12 hex chars = 48 bits of
|
|
@@ -12,8 +12,11 @@ Names that are neither implemented nor catalog-listed raise
|
|
|
12
12
|
|
|
13
13
|
Path-scoping is mandatory for any tool that writes: the resolved target
|
|
14
14
|
path must stay under ``<consumer_root>`` and within the allowlist of
|
|
15
|
-
filenames (
|
|
16
|
-
|
|
15
|
+
filenames (`agents/runtime/.agent-chat-history` — current default;
|
|
16
|
+
`agents/.agent-chat-history` and `.agent-chat-history` — kept for
|
|
17
|
+
back-compat with older consumer installs that have not migrated yet).
|
|
18
|
+
Escape attempts surface as ``ValueError`` before the underlying writer
|
|
19
|
+
runs.
|
|
17
20
|
|
|
18
21
|
This module deliberately does **not** import the ``subprocess`` module
|
|
19
22
|
or ``os``-level shell-execution helpers directly. It imports project
|
|
@@ -48,6 +51,12 @@ STDIO_TRANSPORT = "stdio"
|
|
|
48
51
|
# guard before the underlying writer touches the filesystem.
|
|
49
52
|
_ALLOWED_WRITE_REL_PATHS: frozenset[str] = frozenset(
|
|
50
53
|
{
|
|
54
|
+
# Current default (Volatile Runtime policy — agents/runtime/ is
|
|
55
|
+
# local-only and ignored by git).
|
|
56
|
+
"agents/runtime/.agent-chat-history",
|
|
57
|
+
# Back-compat: older consumer installs still write to the flat
|
|
58
|
+
# location. Additive — both paths stay accepted until the next
|
|
59
|
+
# major tool version bump.
|
|
51
60
|
"agents/.agent-chat-history",
|
|
52
61
|
".agent-chat-history",
|
|
53
62
|
}
|
|
@@ -93,7 +102,7 @@ def _validate_in_tree_path(raw: str | None, consumer_root: Path) -> Path:
|
|
|
93
102
|
"""
|
|
94
103
|
root = consumer_root.resolve()
|
|
95
104
|
if raw is None or raw == "":
|
|
96
|
-
target = root / "agents" / ".agent-chat-history"
|
|
105
|
+
target = root / "agents" / "runtime" / ".agent-chat-history"
|
|
97
106
|
else:
|
|
98
107
|
candidate = Path(raw)
|
|
99
108
|
if candidate.is_absolute():
|
|
@@ -178,7 +187,8 @@ async def _chat_history_append_handler(
|
|
|
178
187
|
text: free-form entry text. Stored under the ``text`` field.
|
|
179
188
|
entry_type: short ``t`` tag (e.g. ``note``, ``decision``).
|
|
180
189
|
path: optional override of the target file. Must resolve to one
|
|
181
|
-
of ``agents/.agent-chat-history``
|
|
190
|
+
of ``agents/runtime/.agent-chat-history`` (current default),
|
|
191
|
+
``agents/.agent-chat-history``, or ``.agent-chat-history``
|
|
182
192
|
under ``consumer_root``.
|
|
183
193
|
session: optional 16-char session tag. Falls back to the most
|
|
184
194
|
recent body entry's ``s`` (see ``chat_history.append``).
|
|
@@ -277,7 +287,8 @@ async def _chat_history_read_handler(
|
|
|
277
287
|
session: optional 16-char session id.
|
|
278
288
|
entry_type: optional ``t`` field exact-match filter.
|
|
279
289
|
path: optional override; must resolve under
|
|
280
|
-
``agents/.agent-chat-history``
|
|
290
|
+
``agents/runtime/.agent-chat-history`` (current default),
|
|
291
|
+
``agents/.agent-chat-history``, or ``.agent-chat-history``.
|
|
281
292
|
"""
|
|
282
293
|
from scripts.chat_history import read_entries # noqa: PLC0415
|
|
283
294
|
|
|
@@ -536,9 +547,11 @@ ALLOWLIST: dict[str, BuiltinTool] = {
|
|
|
536
547
|
name="chat_history_append",
|
|
537
548
|
description=(
|
|
538
549
|
"Append one entry to the consumer's chat-history JSONL "
|
|
539
|
-
"(`agents/.agent-chat-history
|
|
540
|
-
"
|
|
541
|
-
"
|
|
550
|
+
"(`agents/runtime/.agent-chat-history`; "
|
|
551
|
+
"`agents/.agent-chat-history` accepted for back-compat). "
|
|
552
|
+
"Path-scoped — writes outside the allowlist raise "
|
|
553
|
+
"ValueError. Use `dry_run` to preview the payload without "
|
|
554
|
+
"touching the filesystem."
|
|
542
555
|
),
|
|
543
556
|
input_schema={
|
|
544
557
|
"type": "object",
|
|
@@ -555,7 +568,9 @@ ALLOWLIST: dict[str, BuiltinTool] = {
|
|
|
555
568
|
"type": "string",
|
|
556
569
|
"description": (
|
|
557
570
|
"Optional path override. Must resolve to "
|
|
558
|
-
"`agents/.agent-chat-history`
|
|
571
|
+
"`agents/runtime/.agent-chat-history` "
|
|
572
|
+
"(current default), "
|
|
573
|
+
"`agents/.agent-chat-history`, or "
|
|
559
574
|
"`.agent-chat-history` under consumer_root."
|
|
560
575
|
),
|
|
561
576
|
},
|
|
@@ -572,8 +587,9 @@ ALLOWLIST: dict[str, BuiltinTool] = {
|
|
|
572
587
|
name="chat_history_read",
|
|
573
588
|
description=(
|
|
574
589
|
"Read recent chat-history entries from "
|
|
575
|
-
"`agents/.agent-chat-history
|
|
576
|
-
"
|
|
590
|
+
"`agents/runtime/.agent-chat-history` "
|
|
591
|
+
"(`agents/.agent-chat-history` accepted for back-compat). "
|
|
592
|
+
"Filter by session, trailing-N, or entry-type. Read-only."
|
|
577
593
|
),
|
|
578
594
|
input_schema={
|
|
579
595
|
"type": "object",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""MCP telemetry healthcheck — Phase 1 J6.
|
|
2
2
|
|
|
3
3
|
Asserts that the per-consumer JSONL sink at
|
|
4
|
-
``<consumer_root>/agents
|
|
4
|
+
``<consumer_root>/agents/runtime/mcp-telemetry/calls.jsonl`` received at least
|
|
5
5
|
one record inside a configurable window (default 24 h). Exits non-zero
|
|
6
6
|
on silence so the caller's alert sink — Sentry, email, GitHub Actions
|
|
7
7
|
failure, cron mailer — fires.
|
|
@@ -166,7 +166,7 @@ def _build_parser() -> argparse.ArgumentParser:
|
|
|
166
166
|
"--consumer-root",
|
|
167
167
|
type=Path,
|
|
168
168
|
default=None,
|
|
169
|
-
help="Root directory containing agents
|
|
169
|
+
help="Root directory containing agents/runtime/mcp-telemetry/ (default: cwd).",
|
|
170
170
|
)
|
|
171
171
|
parser.add_argument(
|
|
172
172
|
"--window-hours",
|
|
@@ -21,7 +21,7 @@ Output:
|
|
|
21
21
|
- Default: stdout summary (totals + per-component breakdown).
|
|
22
22
|
- `--json`: deterministic JSON.
|
|
23
23
|
- `--trend-append`: append a snapshot record to
|
|
24
|
-
`agents/.augment-budget-history.jsonl`.
|
|
24
|
+
`agents/runtime/.augment-budget-history.jsonl`.
|
|
25
25
|
|
|
26
26
|
Exit codes: 0 = under fail threshold, 1 = at/above fail threshold,
|
|
27
27
|
3 = internal error.
|
|
@@ -39,7 +39,7 @@ from pathlib import Path
|
|
|
39
39
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
40
40
|
AGENTS_MD = REPO_ROOT / "AGENTS.md"
|
|
41
41
|
RULES_DIR = REPO_ROOT / ".augment" / "rules"
|
|
42
|
-
TREND_FILE = REPO_ROOT / "agents" / ".augment-budget-history.jsonl"
|
|
42
|
+
TREND_FILE = REPO_ROOT / "agents" / "runtime" / ".augment-budget-history.jsonl"
|
|
43
43
|
|
|
44
44
|
# Augment workspace-guidelines ceiling — empirical 2026-05-08.
|
|
45
45
|
# TOTAL_CAP is the hard ceiling Augment itself enforces. FAIL_THRESHOLD is the
|
|
@@ -170,7 +170,7 @@ def main() -> int:
|
|
|
170
170
|
parser.add_argument(
|
|
171
171
|
"--trend-append",
|
|
172
172
|
action="store_true",
|
|
173
|
-
help="Append a snapshot record to agents/.augment-budget-history.jsonl",
|
|
173
|
+
help="Append a snapshot record to agents/runtime/.augment-budget-history.jsonl",
|
|
174
174
|
)
|
|
175
175
|
parser.add_argument(
|
|
176
176
|
"--check",
|
|
@@ -22,7 +22,7 @@ Companion signals collected per artifact (consumed by Phases 1.2-1.4):
|
|
|
22
22
|
Output:
|
|
23
23
|
- Default stdout: per-type distribution buckets + tail (lowest density).
|
|
24
24
|
- ``--json`` deterministic JSON of every artifact.
|
|
25
|
-
- ``--snapshot`` writes JSONL to ``agents
|
|
25
|
+
- ``--snapshot`` writes JSONL to ``agents/runtime/density/snapshot.jsonl``.
|
|
26
26
|
|
|
27
27
|
Stdlib only; no network. Re-runnable.
|
|
28
28
|
"""
|
|
@@ -44,7 +44,7 @@ from skill_linter import ( # noqa: E402
|
|
|
44
44
|
gather_all_candidate_files,
|
|
45
45
|
)
|
|
46
46
|
|
|
47
|
-
SNAPSHOT_FILE = REPO_ROOT / "agents" / "
|
|
47
|
+
SNAPSHOT_FILE = REPO_ROOT / "agents" / "runtime" / "density" / "snapshot.jsonl"
|
|
48
48
|
|
|
49
49
|
_TABLE_ROW = re.compile(r"^\s*\|.*\|\s*$")
|
|
50
50
|
_BULLET = re.compile(r"^\s*[-*]\s+\S")
|