@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://github.com/event4u-app/agent-config/scripts/schemas/skill.schema.json",
|
|
4
4
|
"title": "Skill frontmatter",
|
|
5
|
-
"$comment": "Source: agents/docs/frontmatter-contract.md#skills. Keep in sync with inventory_frontmatter.py and the linter's lint_skill().",
|
|
5
|
+
"$comment": "Source: agents/reference/docs/frontmatter-contract.md#skills. Keep in sync with inventory_frontmatter.py and the linter's lint_skill().",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"additionalProperties": false,
|
|
8
8
|
"required": ["name", "description", "source", "domain"],
|
|
@@ -122,6 +122,46 @@
|
|
|
122
122
|
"items": { "type": "string" }
|
|
123
123
|
}
|
|
124
124
|
}
|
|
125
|
+
},
|
|
126
|
+
"workspaces": {
|
|
127
|
+
"type": "array",
|
|
128
|
+
"minItems": 1,
|
|
129
|
+
"uniqueItems": true,
|
|
130
|
+
"items": {"type": "string", "pattern": "^[a-z][a-z0-9-]*$"},
|
|
131
|
+
"description": "ADR-013 workspace ids (additive discovery axis). Closed vocabulary enforced by scripts/lint_artefact_frontmatter.py against config/discovery/workspaces.yml."
|
|
132
|
+
},
|
|
133
|
+
"packs": {
|
|
134
|
+
"type": "array",
|
|
135
|
+
"minItems": 1,
|
|
136
|
+
"uniqueItems": true,
|
|
137
|
+
"items": {"type": "string", "pattern": "^[a-z][a-z0-9-]*$"},
|
|
138
|
+
"description": "ADR-013 pack ids (additive discovery axis). Closed vocabulary enforced by scripts/lint_artefact_frontmatter.py against config/discovery/packs.yml."
|
|
139
|
+
},
|
|
140
|
+
"lifecycle": {
|
|
141
|
+
"type": "string",
|
|
142
|
+
"enum": ["active", "deprecated", "experimental", "archived"],
|
|
143
|
+
"description": "ADR-013 lifecycle state."
|
|
144
|
+
},
|
|
145
|
+
"trust": {
|
|
146
|
+
"type": "object",
|
|
147
|
+
"additionalProperties": false,
|
|
148
|
+
"required": ["level", "confidence", "human_review_required"],
|
|
149
|
+
"properties": {
|
|
150
|
+
"level": {"type": "string", "enum": ["core", "professional", "experimental", "advisory", "restricted"]},
|
|
151
|
+
"confidence": {"type": "string", "enum": ["high", "medium", "low"]},
|
|
152
|
+
"human_review_required": {"type": "boolean"}
|
|
153
|
+
},
|
|
154
|
+
"description": "ADR-013 trust block. Vocabulary mirrored by scripts/lint_artefact_frontmatter.py."
|
|
155
|
+
},
|
|
156
|
+
"install": {
|
|
157
|
+
"type": "object",
|
|
158
|
+
"additionalProperties": false,
|
|
159
|
+
"required": ["default", "removable"],
|
|
160
|
+
"properties": {
|
|
161
|
+
"default": {"type": "boolean"},
|
|
162
|
+
"removable": {"type": "boolean"}
|
|
163
|
+
},
|
|
164
|
+
"description": "ADR-013 install hints (default-on at consumer install; user-removable)."
|
|
125
165
|
}
|
|
126
166
|
}
|
|
127
167
|
}
|
|
@@ -18,7 +18,7 @@ Predictions source:
|
|
|
18
18
|
pure description-matching would do and provides a numeric floor.
|
|
19
19
|
|
|
20
20
|
Output: human-readable summary on stdout + machine JSON to
|
|
21
|
-
`agents/reports/skill-selection-accuracy.json` (or `--out`).
|
|
21
|
+
`agents/runtime/reports/skill-selection-accuracy.json` (or `--out`).
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
24
|
from __future__ import annotations
|
|
@@ -7,7 +7,7 @@ high-overlap skill pairs into clusters. The output drives the
|
|
|
7
7
|
selection-accuracy fixture set defined by council file 05 (Round-3
|
|
8
8
|
protocol — ≥ 3 shared significant terms → collision cluster).
|
|
9
9
|
|
|
10
|
-
Output: `agents/reports/skill-collision-clusters.json`
|
|
10
|
+
Output: `agents/runtime/reports/skill-collision-clusters.json`
|
|
11
11
|
|
|
12
12
|
Schema:
|
|
13
13
|
{
|
package/scripts/skill_linter.py
CHANGED
|
@@ -37,6 +37,7 @@ from validate_frontmatter import ( # noqa: E402
|
|
|
37
37
|
load_schema,
|
|
38
38
|
validate as validate_against_schema,
|
|
39
39
|
)
|
|
40
|
+
from _lib.agent_src import artefact_roots, resolve_logical # noqa: E402
|
|
40
41
|
|
|
41
42
|
Severity = Literal["error", "warning", "info"]
|
|
42
43
|
ArtifactType = Literal["skill", "rule", "command", "guideline", "persona", "user-type", "unknown"]
|
|
@@ -403,7 +404,7 @@ def _fenced_content_ratio(text: str) -> float:
|
|
|
403
404
|
# --- Structural-density model (docs/contracts/linter-structural-model.md) ---
|
|
404
405
|
# Replaces the raw line/word/fenced-ratio gates with four primitives that
|
|
405
406
|
# distinguish complexity from bloat. Calibrated 2026-05-08 against the full
|
|
406
|
-
# 310-artefact corpus (agents
|
|
407
|
+
# 310-artefact corpus (agents/runtime/density/snapshot.jsonl).
|
|
407
408
|
|
|
408
409
|
PROCEDURE_HEADING_PATTERN = re.compile(
|
|
409
410
|
r"^##\s+Procedure(\s*[:\u2014\-].*)?\s*$", re.MULTILINE
|
|
@@ -974,6 +975,30 @@ def extract_frontmatter(text: str) -> Optional[str]:
|
|
|
974
975
|
return match.group(1) if match else None
|
|
975
976
|
|
|
976
977
|
|
|
978
|
+
def _parse_trust_level(frontmatter: str) -> Optional[str]:
|
|
979
|
+
"""Parse `trust.level:` from the nested `trust:` mapping in frontmatter.
|
|
980
|
+
|
|
981
|
+
Returns the level string (e.g. ``"core"``, ``"advisory"``) or ``None``
|
|
982
|
+
if absent. Stdlib-only — mirrors the line-walking approach of
|
|
983
|
+
``_parse_yaml_list`` so the linter stays pyyaml-free.
|
|
984
|
+
"""
|
|
985
|
+
lines = frontmatter.splitlines()
|
|
986
|
+
in_block = False
|
|
987
|
+
for line in lines:
|
|
988
|
+
if not in_block:
|
|
989
|
+
if line.startswith("trust:"):
|
|
990
|
+
rhs = line[len("trust:"):].strip()
|
|
991
|
+
if rhs == "":
|
|
992
|
+
in_block = True
|
|
993
|
+
continue
|
|
994
|
+
if line.startswith(" level:"):
|
|
995
|
+
return line[len(" level:"):].strip().strip('"').strip("'")
|
|
996
|
+
if line.startswith(" "):
|
|
997
|
+
continue
|
|
998
|
+
break
|
|
999
|
+
return None
|
|
1000
|
+
|
|
1001
|
+
|
|
977
1002
|
def _parse_yaml_list(frontmatter: str, key: str) -> Optional[list]:
|
|
978
1003
|
"""Parse a simple top-level YAML list `key:` from frontmatter.
|
|
979
1004
|
|
|
@@ -1028,6 +1053,10 @@ def lint_router_frontmatter(rule_id: str, frontmatter: str,
|
|
|
1028
1053
|
Lenient checks (info-level until Phase 4 migrations land): non-kernel
|
|
1029
1054
|
rules without `triggers:` / `routes_to:` get an informational note,
|
|
1030
1055
|
not an error — the existing description-matching path still works.
|
|
1056
|
+
|
|
1057
|
+
Trust-tier carve-out: rules with ``trust.level: core`` are exempt from
|
|
1058
|
+
the ``router_routes_to_missing`` migration hint — they are authoritative
|
|
1059
|
+
by design and their body legitimately lives inline.
|
|
1031
1060
|
"""
|
|
1032
1061
|
issues: List[Issue] = []
|
|
1033
1062
|
triggers = _parse_yaml_list(frontmatter, "triggers")
|
|
@@ -1068,9 +1097,15 @@ def lint_router_frontmatter(rule_id: str, frontmatter: str,
|
|
|
1068
1097
|
f"triggers[{idx}] key '{k}' not in allowed set ({allowed})"))
|
|
1069
1098
|
|
|
1070
1099
|
if routes_to is None:
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1100
|
+
# Trust-tier carve-out: rules pinned at trust.level: core are
|
|
1101
|
+
# authoritative — their body IS the behavior and may legitimately
|
|
1102
|
+
# live inline without a routes_to: delegation. The Phase 4
|
|
1103
|
+
# migration hint applies only to lower-trust rules.
|
|
1104
|
+
trust_level = _parse_trust_level(frontmatter)
|
|
1105
|
+
if trust_level != "core":
|
|
1106
|
+
issues.append(Issue("info", "router_routes_to_missing",
|
|
1107
|
+
"Non-kernel rule has no routes_to: — body should migrate to skill / "
|
|
1108
|
+
"guideline in Phase 4"))
|
|
1074
1109
|
else:
|
|
1075
1110
|
repo_root = Path(__file__).resolve().parent.parent
|
|
1076
1111
|
for idx, item in enumerate(routes_to):
|
|
@@ -1079,29 +1114,34 @@ def lint_router_frontmatter(rule_id: str, frontmatter: str,
|
|
|
1079
1114
|
f"routes_to[{idx}] must be 'kind:id'"))
|
|
1080
1115
|
continue
|
|
1081
1116
|
kind, _, target_id = item.partition(":")
|
|
1117
|
+
# Multi-root aware (ADR-017): resolve logical paths via every
|
|
1118
|
+
# source root so kernel rules keep routing to skills/commands
|
|
1119
|
+
# that moved into packages/*/.
|
|
1120
|
+
target: Optional[Path] = None
|
|
1082
1121
|
if kind == "skill":
|
|
1083
|
-
target =
|
|
1122
|
+
target = resolve_logical(f"skills/{target_id}/SKILL.md")
|
|
1084
1123
|
elif kind == "guideline":
|
|
1085
|
-
|
|
1124
|
+
gpath = repo_root / "docs" / "guidelines" / f"{target_id}.md"
|
|
1125
|
+
target = gpath if gpath.exists() else None
|
|
1086
1126
|
elif kind == "command":
|
|
1087
|
-
target =
|
|
1127
|
+
target = resolve_logical(f"commands/{target_id}.md")
|
|
1088
1128
|
elif kind == "contract":
|
|
1089
1129
|
# Contracts live in two places: stable host docs in
|
|
1090
|
-
# docs/contracts/ and load-bearing flows
|
|
1091
|
-
#
|
|
1130
|
+
# docs/contracts/ and load-bearing flows under
|
|
1131
|
+
# contexts/contracts/ inside any source root (road-to-path-fixes
|
|
1092
1132
|
# P4 / Council R2). Try both before failing.
|
|
1093
|
-
|
|
1094
|
-
if
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1133
|
+
cpath = repo_root / "docs" / "contracts" / f"{target_id}.md"
|
|
1134
|
+
if cpath.exists():
|
|
1135
|
+
target = cpath
|
|
1136
|
+
else:
|
|
1137
|
+
target = resolve_logical(f"contexts/contracts/{target_id}.md")
|
|
1098
1138
|
else:
|
|
1099
1139
|
issues.append(Issue("error", "route_kind_unknown",
|
|
1100
1140
|
f"routes_to[{idx}] kind '{kind}' must be 'skill', 'guideline', 'command', or 'contract'"))
|
|
1101
1141
|
continue
|
|
1102
|
-
if not target.exists():
|
|
1142
|
+
if target is None or not target.exists():
|
|
1103
1143
|
issues.append(Issue("error", "route_target_missing",
|
|
1104
|
-
f"routes_to[{idx}] target '{item}' not found
|
|
1144
|
+
f"routes_to[{idx}] target '{item}' not found under any artefact root"))
|
|
1105
1145
|
return issues
|
|
1106
1146
|
|
|
1107
1147
|
|
|
@@ -2019,86 +2059,126 @@ def lint_usertype(path: Path, text: str) -> LintResult:
|
|
|
2019
2059
|
|
|
2020
2060
|
|
|
2021
2061
|
def gather_all_candidate_files(root: Path) -> list[Path]:
|
|
2022
|
-
"""Gather all lintable files
|
|
2023
|
-
|
|
2024
|
-
|
|
2062
|
+
"""Gather all lintable files across every source root (ADR-017 multi-root).
|
|
2063
|
+
|
|
2064
|
+
Walks ``artefact_roots()`` (legacy ``.agent-src.uncompressed/`` plus every
|
|
2065
|
+
``packages/*/.agent-src.uncompressed/``). Falls back to ``.agent-src/``
|
|
2066
|
+
only when no source root exists. Skips symlinks to avoid double-counting.
|
|
2067
|
+
Deduplicates on logical relpath \u2014 first root wins per the agent_src
|
|
2068
|
+
contract.
|
|
2069
|
+
"""
|
|
2025
2070
|
candidates: list[Path] = []
|
|
2071
|
+
seen_logical: set[str] = set()
|
|
2026
2072
|
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
if
|
|
2086
|
-
|
|
2087
|
-
if not f.is_symlink():
|
|
2088
|
-
candidates.append(f)
|
|
2089
|
-
|
|
2090
|
-
# Frugality charter (Phase 0.4 Layer 2). Lives in contexts/, not
|
|
2091
|
-
# walked by the artifact-type loops above, but still needs the
|
|
2092
|
-
# index-integrity check.
|
|
2093
|
-
for base in (root / ".agent-src.uncompressed", root / ".agent-src"):
|
|
2094
|
-
charter = base / FRUGALITY_CHARTER_RELPATH
|
|
2095
|
-
if charter.exists() and not charter.is_symlink():
|
|
2096
|
-
candidates.append(charter)
|
|
2097
|
-
break
|
|
2073
|
+
def _add(file: Path, source_root: Path) -> None:
|
|
2074
|
+
if file.is_symlink() or not file.is_file():
|
|
2075
|
+
return
|
|
2076
|
+
try:
|
|
2077
|
+
logical = file.relative_to(source_root).as_posix()
|
|
2078
|
+
except ValueError:
|
|
2079
|
+
logical = file.name
|
|
2080
|
+
# Namespace by artefact-kind subdir so the same skill name across
|
|
2081
|
+
# packs would still dedupe (but the agent_src layout guarantees
|
|
2082
|
+
# each logical path lives in exactly one root post-move).
|
|
2083
|
+
if logical in seen_logical:
|
|
2084
|
+
return
|
|
2085
|
+
seen_logical.add(logical)
|
|
2086
|
+
candidates.append(file)
|
|
2087
|
+
|
|
2088
|
+
sources = artefact_roots()
|
|
2089
|
+
if sources:
|
|
2090
|
+
for src_root in sources:
|
|
2091
|
+
for f in (src_root / "skills").rglob("SKILL.md") if (src_root / "skills").exists() else []:
|
|
2092
|
+
_add(f, src_root)
|
|
2093
|
+
for sub in ("rules", "commands", "guidelines"):
|
|
2094
|
+
base = src_root / sub
|
|
2095
|
+
if base.exists():
|
|
2096
|
+
for f in base.rglob("*.md"):
|
|
2097
|
+
_add(f, src_root)
|
|
2098
|
+
for sub in ("personas", "user-types"):
|
|
2099
|
+
base = src_root / sub
|
|
2100
|
+
if base.exists():
|
|
2101
|
+
for f in base.glob("*.md"):
|
|
2102
|
+
if f.name.lower() == "readme.md":
|
|
2103
|
+
continue
|
|
2104
|
+
_add(f, src_root)
|
|
2105
|
+
charter = src_root / FRUGALITY_CHARTER_RELPATH
|
|
2106
|
+
if charter.exists() and not charter.is_symlink():
|
|
2107
|
+
_add(charter, src_root)
|
|
2108
|
+
else:
|
|
2109
|
+
# Pure-compressed fallback (.agent-src/ only). Used by consumer
|
|
2110
|
+
# projects that vendor the compressed tree without sources.
|
|
2111
|
+
augment_root = root / ".agent-src"
|
|
2112
|
+
if augment_root.exists():
|
|
2113
|
+
for sub_pattern in (
|
|
2114
|
+
("skills", "SKILL.md"),
|
|
2115
|
+
("rules", "*.md"),
|
|
2116
|
+
("commands", "*.md"),
|
|
2117
|
+
("guidelines", "*.md"),
|
|
2118
|
+
):
|
|
2119
|
+
base = augment_root / sub_pattern[0]
|
|
2120
|
+
if base.exists():
|
|
2121
|
+
for f in base.rglob(sub_pattern[1]):
|
|
2122
|
+
_add(f, augment_root)
|
|
2123
|
+
for sub in ("personas", "user-types"):
|
|
2124
|
+
base = augment_root / sub
|
|
2125
|
+
if base.exists():
|
|
2126
|
+
for f in base.glob("*.md"):
|
|
2127
|
+
if f.name.lower() == "readme.md":
|
|
2128
|
+
continue
|
|
2129
|
+
_add(f, augment_root)
|
|
2130
|
+
charter = augment_root / FRUGALITY_CHARTER_RELPATH
|
|
2131
|
+
if charter.exists() and not charter.is_symlink():
|
|
2132
|
+
_add(charter, augment_root)
|
|
2098
2133
|
|
|
2099
2134
|
return sorted(set(candidates))
|
|
2100
2135
|
|
|
2101
2136
|
|
|
2137
|
+
def gather_candidate_files_under(src_root: Path) -> list[Path]:
|
|
2138
|
+
"""Gather lintable files under an arbitrary source root.
|
|
2139
|
+
|
|
2140
|
+
Mirrors the per-root walk used by ``gather_all_candidate_files`` but
|
|
2141
|
+
scoped to a single directory \u2014 e.g. ``packages/pack-laravel/.agent-src.uncompressed/``
|
|
2142
|
+
so CI can lint a single pack in parallel (ADR-017 Phase 4.4).
|
|
2143
|
+
Skips symlinks and ``README.md`` siblings under ``personas/`` /
|
|
2144
|
+
``user-types/``.
|
|
2145
|
+
"""
|
|
2146
|
+
out: list[Path] = []
|
|
2147
|
+
if not src_root.is_dir():
|
|
2148
|
+
return out
|
|
2149
|
+
seen: set[Path] = set()
|
|
2150
|
+
|
|
2151
|
+
def _push(file: Path) -> None:
|
|
2152
|
+
if file.is_symlink() or not file.is_file():
|
|
2153
|
+
return
|
|
2154
|
+
resolved = file.resolve()
|
|
2155
|
+
if resolved in seen:
|
|
2156
|
+
return
|
|
2157
|
+
seen.add(resolved)
|
|
2158
|
+
out.append(file)
|
|
2159
|
+
|
|
2160
|
+
skills_dir = src_root / "skills"
|
|
2161
|
+
if skills_dir.exists():
|
|
2162
|
+
for f in skills_dir.rglob("SKILL.md"):
|
|
2163
|
+
_push(f)
|
|
2164
|
+
for sub in ("rules", "commands", "guidelines"):
|
|
2165
|
+
base = src_root / sub
|
|
2166
|
+
if base.exists():
|
|
2167
|
+
for f in base.rglob("*.md"):
|
|
2168
|
+
_push(f)
|
|
2169
|
+
for sub in ("personas", "user-types"):
|
|
2170
|
+
base = src_root / sub
|
|
2171
|
+
if base.exists():
|
|
2172
|
+
for f in base.glob("*.md"):
|
|
2173
|
+
if f.name.lower() == "readme.md":
|
|
2174
|
+
continue
|
|
2175
|
+
_push(f)
|
|
2176
|
+
charter = src_root / FRUGALITY_CHARTER_RELPATH
|
|
2177
|
+
if charter.exists() and not charter.is_symlink():
|
|
2178
|
+
_push(charter)
|
|
2179
|
+
return sorted(set(out))
|
|
2180
|
+
|
|
2181
|
+
|
|
2102
2182
|
def gather_changed_candidate_files(root: Path) -> list[Path]:
|
|
2103
2183
|
"""Find changed skill/rule files using git diff.
|
|
2104
2184
|
|
|
@@ -2138,10 +2218,15 @@ def gather_changed_candidate_files(root: Path) -> list[Path]:
|
|
|
2138
2218
|
# dirs (.windsurf/, .cursor/, .clinerules/, .claude/) use
|
|
2139
2219
|
# tool-native frontmatter (e.g. Windsurf's trigger/globs) that
|
|
2140
2220
|
# the linter does not validate — they regenerate from source.
|
|
2141
|
-
|
|
2221
|
+
# ADR-017: accept legacy flat layout AND
|
|
2222
|
+
# packages/*/.agent-src.uncompressed/ paths.
|
|
2223
|
+
in_source = (
|
|
2142
2224
|
norm.startswith(".agent-src.uncompressed/")
|
|
2143
2225
|
or norm.startswith(".agent-src/")
|
|
2144
|
-
|
|
2226
|
+
or "/.agent-src.uncompressed/" in norm
|
|
2227
|
+
or "/.agent-src/" in norm
|
|
2228
|
+
)
|
|
2229
|
+
if not in_source:
|
|
2145
2230
|
continue
|
|
2146
2231
|
if path.name == "SKILL.md" or "/rules/" in norm or "/commands/" in norm:
|
|
2147
2232
|
files.append(path)
|
|
@@ -2770,20 +2855,37 @@ def lint_governance(path: Path, text: str, artifact_type: str, repo_root: Path |
|
|
|
2770
2855
|
return issues
|
|
2771
2856
|
|
|
2772
2857
|
# --- Check: compressed/uncompressed pair exists ---
|
|
2858
|
+
# ADR-017: sources live under packages/*/.agent-src.uncompressed/ but
|
|
2859
|
+
# all packs project into the single repo-root .agent-src/ tree. The
|
|
2860
|
+
# pair-check now resolves via logical relpath, not a path-swap.
|
|
2861
|
+
from _lib.agent_src import strip_source_prefix as _strip
|
|
2862
|
+
norm = path_str.replace("\\", "/")
|
|
2773
2863
|
if is_uncompressed:
|
|
2774
|
-
#
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2864
|
+
# Compute logical path then map to .agent-src/ at repo root.
|
|
2865
|
+
# Try direct strip first; fall back to substring split for absolute paths.
|
|
2866
|
+
logical = _strip(norm)
|
|
2867
|
+
if logical is None:
|
|
2868
|
+
marker = "/.agent-src.uncompressed/"
|
|
2869
|
+
idx = norm.rfind(marker)
|
|
2870
|
+
logical = norm[idx + len(marker):] if idx != -1 else None
|
|
2871
|
+
if logical:
|
|
2872
|
+
compressed_path = repo_root / ".agent-src" / logical
|
|
2873
|
+
if not compressed_path.exists():
|
|
2874
|
+
issues.append(Issue("warning", "compressed_variant_missing",
|
|
2875
|
+
f"Uncompressed file exists but compressed variant missing: "
|
|
2876
|
+
f"{compressed_path.name}"))
|
|
2780
2877
|
elif is_compressed:
|
|
2781
|
-
#
|
|
2782
|
-
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2878
|
+
# Compressed lives at repo-root .agent-src/<logical>. Source could
|
|
2879
|
+
# be at any source root \u2014 resolve via artefact_roots.
|
|
2880
|
+
marker = "/.agent-src/"
|
|
2881
|
+
idx = norm.rfind(marker)
|
|
2882
|
+
logical = norm[idx + len(marker):] if idx != -1 else None
|
|
2883
|
+
if logical:
|
|
2884
|
+
uncompressed_path = resolve_logical(logical)
|
|
2885
|
+
if uncompressed_path is None or not uncompressed_path.exists():
|
|
2886
|
+
issues.append(Issue("warning", "uncompressed_variant_missing",
|
|
2887
|
+
f"Compressed file exists but uncompressed source missing: "
|
|
2888
|
+
f"{Path(logical).name}"))
|
|
2787
2889
|
|
|
2788
2890
|
# --- Check: file in correct location for type ---
|
|
2789
2891
|
location_map = {
|
|
@@ -2972,7 +3074,7 @@ def lint_frontmatter_schema(path: Path, text: str, artifact_type: str) -> List[I
|
|
|
2972
3074
|
"""Validate the frontmatter of an artefact against its JSON-Schema.
|
|
2973
3075
|
|
|
2974
3076
|
Schemas live in ``scripts/schemas/``. One schema per artefact type;
|
|
2975
|
-
see ``agents/docs/frontmatter-contract.md`` for the human-readable
|
|
3077
|
+
see ``agents/reference/docs/frontmatter-contract.md`` for the human-readable
|
|
2976
3078
|
contract the schemas encode. Guidelines have no frontmatter and are
|
|
2977
3079
|
skipped.
|
|
2978
3080
|
"""
|
|
@@ -3186,18 +3288,23 @@ def check_compression_pairs(root: Path) -> list[LintResult]:
|
|
|
3186
3288
|
]
|
|
3187
3289
|
|
|
3188
3290
|
for subdir, pattern, is_nested in pairs:
|
|
3189
|
-
|
|
3291
|
+
# ADR-017: union across every source root.
|
|
3190
3292
|
compressed_dir = root / ".agent-src" / subdir
|
|
3293
|
+
uncompressed_names: set[str] = set()
|
|
3294
|
+
any_source = False
|
|
3295
|
+
for src_root in artefact_roots():
|
|
3296
|
+
uncompressed_dir = src_root / subdir
|
|
3297
|
+
if not uncompressed_dir.exists():
|
|
3298
|
+
continue
|
|
3299
|
+
any_source = True
|
|
3300
|
+
if is_nested:
|
|
3301
|
+
uncompressed_names |= {d.name for d in uncompressed_dir.iterdir() if d.is_dir() and (d / pattern).exists()}
|
|
3302
|
+
else:
|
|
3303
|
+
uncompressed_names |= {f.name for f in uncompressed_dir.glob(pattern) if f.is_file()}
|
|
3191
3304
|
|
|
3192
|
-
if not
|
|
3305
|
+
if not any_source:
|
|
3193
3306
|
continue
|
|
3194
3307
|
|
|
3195
|
-
# Collect names from uncompressed
|
|
3196
|
-
if is_nested:
|
|
3197
|
-
uncompressed_names = {d.name for d in uncompressed_dir.iterdir() if d.is_dir() and (d / pattern).exists()}
|
|
3198
|
-
else:
|
|
3199
|
-
uncompressed_names = {f.name for f in uncompressed_dir.glob(pattern) if f.is_file()}
|
|
3200
|
-
|
|
3201
3308
|
# Collect names from compressed
|
|
3202
3309
|
if compressed_dir.exists():
|
|
3203
3310
|
if is_nested:
|
|
@@ -3235,16 +3342,23 @@ def check_compression_pairs(root: Path) -> list[LintResult]:
|
|
|
3235
3342
|
def check_compression_quality(root: Path) -> list[LintResult]:
|
|
3236
3343
|
"""Check that compressed skills preserve key content from their uncompressed source."""
|
|
3237
3344
|
results: list[LintResult] = []
|
|
3238
|
-
uncompressed_dir = root / ".agent-src.uncompressed" / "skills"
|
|
3239
3345
|
compressed_dir = root / ".agent-src" / "skills"
|
|
3346
|
+
if not compressed_dir.exists():
|
|
3347
|
+
return results
|
|
3240
3348
|
|
|
3241
|
-
|
|
3349
|
+
# ADR-017: collect skill dirs from every source root.
|
|
3350
|
+
skill_sources: list[Path] = []
|
|
3351
|
+
for src_root in artefact_roots():
|
|
3352
|
+
uncompressed_dir = src_root / "skills"
|
|
3353
|
+
if uncompressed_dir.exists():
|
|
3354
|
+
skill_sources.extend(sorted(uncompressed_dir.iterdir()))
|
|
3355
|
+
if not skill_sources:
|
|
3242
3356
|
return results
|
|
3243
3357
|
|
|
3244
3358
|
# Sections that MUST exist in compressed if they exist in uncompressed
|
|
3245
3359
|
preserved_sections = ["When to use", "Procedure", "Gotcha", "Gotchas", "Do NOT", "Output format", "Output"]
|
|
3246
3360
|
|
|
3247
|
-
for skill_dir in
|
|
3361
|
+
for skill_dir in skill_sources:
|
|
3248
3362
|
src = skill_dir / "SKILL.md"
|
|
3249
3363
|
dst = compressed_dir / skill_dir.name / "SKILL.md"
|
|
3250
3364
|
if not src.exists() or not dst.exists():
|
|
@@ -3306,13 +3420,23 @@ def check_compression_quality(root: Path) -> list[LintResult]:
|
|
|
3306
3420
|
def check_duplication(root: Path) -> list[LintResult]:
|
|
3307
3421
|
"""Detect skills with highly similar names or descriptions."""
|
|
3308
3422
|
results: list[LintResult] = []
|
|
3309
|
-
|
|
3310
|
-
|
|
3423
|
+
# ADR-017: collect skill dirs across every source root, dedup by name.
|
|
3424
|
+
skill_dirs: list[Path] = []
|
|
3425
|
+
seen: set[str] = set()
|
|
3426
|
+
for src_root in artefact_roots():
|
|
3427
|
+
sd = src_root / "skills"
|
|
3428
|
+
if not sd.exists():
|
|
3429
|
+
continue
|
|
3430
|
+
for d in sorted(sd.iterdir()):
|
|
3431
|
+
if d.is_dir() and d.name not in seen:
|
|
3432
|
+
seen.add(d.name)
|
|
3433
|
+
skill_dirs.append(d)
|
|
3434
|
+
if not skill_dirs:
|
|
3311
3435
|
return results
|
|
3312
3436
|
|
|
3313
3437
|
# Collect all skill names and descriptions
|
|
3314
3438
|
skill_data: list[tuple[str, str, Path]] = []
|
|
3315
|
-
for skill_dir in
|
|
3439
|
+
for skill_dir in skill_dirs:
|
|
3316
3440
|
skill_file = skill_dir / "SKILL.md"
|
|
3317
3441
|
if not skill_file.exists():
|
|
3318
3442
|
continue
|
|
@@ -3497,7 +3621,13 @@ def main() -> int:
|
|
|
3497
3621
|
paths.extend(gather_changed_candidate_files(root))
|
|
3498
3622
|
for raw in args.paths:
|
|
3499
3623
|
path = (root / raw).resolve() if not Path(raw).is_absolute() else Path(raw)
|
|
3500
|
-
if path.exists():
|
|
3624
|
+
if not path.exists():
|
|
3625
|
+
continue
|
|
3626
|
+
if path.is_dir():
|
|
3627
|
+
# Walk the directory like a source root so callers can pass
|
|
3628
|
+
# `packages/pack-laravel/.agent-src.uncompressed/` (ADR-017 Phase 4.4).
|
|
3629
|
+
paths.extend(gather_candidate_files_under(path))
|
|
3630
|
+
else:
|
|
3501
3631
|
paths.append(path)
|
|
3502
3632
|
|
|
3503
3633
|
paths = sorted(set(paths))
|
package/scripts/skill_overlap.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Implements step-2-skill-inventory-rationalization.md Phase 2 Step 2.
|
|
5
5
|
Mirrors `scripts/audit_overlap.py` (the rule-side analog) but reads
|
|
6
6
|
`.agent-src.uncompressed/skills/<slug>/SKILL.md` frontmatter directly
|
|
7
|
-
and emits `agents/metrics/skill-overlap.md` listing pairs scoring
|
|
7
|
+
and emits `agents/runtime/metrics/skill-overlap.md` listing pairs scoring
|
|
8
8
|
≥ 0.6 on either:
|
|
9
9
|
|
|
10
10
|
- description-trigger Jaccard (tokenized union of `description` +
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
Runs D2 (`score_skill_relevance`), D3 (`audit_persona_coverage`), and
|
|
5
5
|
D4 (`suggest_skill_for_task`) against the corpora in
|
|
6
|
-
`agents/eval-corpora/block-d/` and emits a pass/fail summary per the
|
|
6
|
+
`agents/evidence/eval-corpora/block-d/` and emits a pass/fail summary per the
|
|
7
7
|
council verdict targets:
|
|
8
8
|
|
|
9
9
|
- **D2**: ≥ 85 % of corpus tasks have an `expected_top3` skill in
|