@event4u/agent-config 7.5.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +8 -1
- package/AGENTS.md +9 -9
- package/CHANGELOG.md +325 -0
- package/README.md +35 -5
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +1 -1
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/incident.md +2 -2
- package/dist/agent-src/commands/analyze/near-miss.md +2 -2
- package/dist/agent-src/commands/analyze/postmortem.md +2 -2
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/cost-report.md +25 -0
- package/dist/agent-src/commands/evals/analyze.json +30 -0
- package/dist/agent-src/commands/evals/mission-upgrade.json +30 -0
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +1 -1
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/load.md +12 -11
- package/dist/agent-src/commands/memory/promote.md +30 -0
- package/dist/agent-src/commands/memory/propose.md +16 -2
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/module/explore.md +11 -7
- package/dist/agent-src/commands/optimize-project.md +243 -0
- package/dist/agent-src/commands/optimize.md +5 -0
- package/dist/agent-src/commands/pr/create.md +37 -8
- package/dist/agent-src/commands/prediction-pool.md +2 -2
- package/dist/agent-src/commands/profile/activate.md +3 -3
- package/dist/agent-src/commands/profile/deactivate.md +2 -2
- package/dist/agent-src/commands/profile/show.md +3 -3
- package/dist/agent-src/commands/research/deep.md +5 -0
- package/dist/agent-src/commands/research/report.md +2 -1
- package/dist/agent-src/commands/roadmap/create.md +88 -10
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +15 -2
- package/dist/agent-src/commands/roadmap/process-phase.md +18 -6
- package/dist/agent-src/commands/roadmap/process-step.md +4 -0
- package/dist/agent-src/commands/roadmap.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync-agent-settings.md +1 -1
- package/dist/agent-src/commands/sync-gitignore/fix.md +42 -6
- package/dist/agent-src/commands/team-knowledge/bootstrap.md +106 -0
- package/dist/agent-src/commands/team-knowledge/consolidate.md +105 -0
- package/dist/agent-src/commands/team-knowledge.md +64 -0
- package/dist/agent-src/contexts/authority/commit-mechanics.md +8 -0
- package/dist/agent-src/contexts/authority/destructive-mechanics.md +11 -0
- package/dist/agent-src/contexts/authority/scope-mechanics.md +25 -0
- package/dist/agent-src/contexts/communication/rules-auto/reply-close-mechanics.md +43 -0
- package/dist/agent-src/contexts/contracts/agents-md-anatomy.md +1 -1
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +2 -2
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +14 -4
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +11 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +32 -8
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +107 -0
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +71 -15
- package/dist/agent-src/contexts/execution/subagent-steering.md +41 -1
- package/dist/agent-src/contexts/override-system.md +1 -1
- package/dist/agent-src/personas/brand-strategist.md +0 -1
- package/dist/agent-src/personas/data-integrity.md +66 -0
- package/dist/agent-src/personas/design-director.md +0 -1
- package/dist/agent-src/personas/performance-engineer.md +66 -0
- package/dist/agent-src/personas/production-validator.md +73 -0
- package/dist/agent-src/rules/agent-authority.md +3 -4
- package/dist/agent-src/rules/analysis-skill-routing.md +3 -5
- package/dist/agent-src/rules/architecture.md +2 -4
- package/dist/agent-src/rules/artifact-drafting-protocol.md +35 -6
- package/dist/agent-src/rules/artifact-engagement-recording.md +2 -4
- package/dist/agent-src/rules/ask-when-uncertain.md +10 -14
- package/dist/agent-src/rules/augment-edit-discipline.md +3 -5
- package/dist/agent-src/rules/autonomous-execution.md +3 -5
- package/dist/agent-src/rules/brand-consistency.md +3 -5
- package/dist/agent-src/rules/brand-source-of-truth.md +3 -5
- package/dist/agent-src/rules/cli-output-handling.md +4 -6
- package/dist/agent-src/rules/command-suggestion-policy.md +3 -5
- package/dist/agent-src/rules/commit-conventions.md +3 -5
- package/dist/agent-src/rules/commit-policy.md +8 -10
- package/dist/agent-src/rules/content-quoting-floor.md +88 -0
- package/dist/agent-src/rules/context-hygiene.md +3 -5
- package/dist/agent-src/rules/copilot-routing.md +4 -6
- package/dist/agent-src/rules/decision-revisit-gate.md +120 -0
- package/dist/agent-src/rules/delegation-policy.md +10 -6
- package/dist/agent-src/rules/design-fidelity.md +3 -5
- package/dist/agent-src/rules/devcontainer-routing.md +4 -6
- package/dist/agent-src/rules/direct-answers.md +13 -17
- package/dist/agent-src/rules/docker-commands.md +3 -5
- package/dist/agent-src/rules/domain-adoption-policy.md +3 -5
- package/dist/agent-src/rules/domain-safety-disclaimer.md +3 -5
- package/dist/agent-src/rules/domain-safety-pii.md +3 -5
- package/dist/agent-src/rules/domain-safety-retention.md +3 -5
- package/dist/agent-src/rules/downstream-changes.md +3 -4
- package/dist/agent-src/rules/engineering-safety-floor.md +3 -5
- package/dist/agent-src/rules/external-reference-deep-dive.md +3 -5
- package/dist/agent-src/rules/fast-path-marker-visibility.md +3 -5
- package/dist/agent-src/rules/finance-safety-floor.md +3 -6
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +3 -5
- package/dist/agent-src/rules/git-history-discipline.md +3 -5
- package/dist/agent-src/rules/guidelines.md +2 -4
- package/dist/agent-src/rules/icon-consistency.md +3 -5
- package/dist/agent-src/rules/image-likeness-and-rights.md +3 -5
- package/dist/agent-src/rules/improve-before-implement.md +5 -5
- package/dist/agent-src/rules/invite-challenge.md +3 -5
- package/dist/agent-src/rules/language-and-tone.md +13 -15
- package/dist/agent-src/rules/laravel-routing.md +3 -5
- package/dist/agent-src/rules/laravel-translations.md +3 -5
- package/dist/agent-src/rules/legal-safety-floor.md +3 -5
- package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -5
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +4 -7
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -5
- package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -4
- package/dist/agent-src/rules/media-governance-routing.md +3 -5
- package/dist/agent-src/rules/media-sync-ground-truth.md +3 -5
- package/dist/agent-src/rules/minimal-safe-diff.md +5 -5
- package/dist/agent-src/rules/missing-tool-handling.md +3 -5
- package/dist/agent-src/rules/model-recommendation.md +4 -6
- package/dist/agent-src/rules/no-attribution-footers.md +3 -5
- package/dist/agent-src/rules/no-cheap-questions.md +5 -8
- package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +3 -6
- package/dist/agent-src/rules/no-pr-progress-comments.md +3 -6
- package/dist/agent-src/rules/no-roadmap-references.md +3 -5
- package/dist/agent-src/rules/non-destructive-by-default.md +11 -13
- package/dist/agent-src/rules/notes-first-reasoning.md +3 -5
- package/dist/agent-src/rules/onboarding-gate.md +4 -6
- package/dist/agent-src/rules/output-discipline.md +3 -5
- package/dist/agent-src/rules/package-ci-checks.md +3 -5
- package/dist/agent-src/rules/persona-governance.md +2 -4
- package/dist/agent-src/rules/php-coding.md +3 -5
- package/dist/agent-src/rules/preservation-guard.md +2 -4
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +3 -5
- package/dist/agent-src/rules/reviewer-awareness.md +5 -6
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +3 -5
- package/dist/agent-src/rules/roadmap-progress-sync.md +5 -5
- package/dist/agent-src/rules/role-mode-adherence.md +2 -4
- package/dist/agent-src/rules/rule-type-governance.md +3 -5
- package/dist/agent-src/rules/runtime-safety.md +2 -4
- package/dist/agent-src/rules/scope-control.md +10 -11
- package/dist/agent-src/rules/security-sensitive-stop.md +4 -5
- package/dist/agent-src/rules/size-enforcement.md +2 -4
- package/dist/agent-src/rules/skill-improvement-trigger.md +3 -5
- package/dist/agent-src/rules/skill-quality.md +3 -5
- package/dist/agent-src/rules/slash-command-routing-policy.md +3 -5
- package/dist/agent-src/rules/source-confidentiality.md +3 -5
- package/dist/agent-src/rules/source-discovery-gate.md +3 -5
- package/dist/agent-src/rules/source-of-truth.md +3 -5
- package/dist/agent-src/rules/strategy-safety-floor.md +3 -5
- package/dist/agent-src/rules/symfony-routing.md +4 -6
- package/dist/agent-src/rules/telegraph-speak.md +4 -5
- package/dist/agent-src/rules/think-before-action.md +7 -4
- package/dist/agent-src/rules/token-budget-discipline.md +29 -5
- package/dist/agent-src/rules/token-efficiency.md +3 -5
- package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -5
- package/dist/agent-src/rules/tool-safety.md +2 -4
- package/dist/agent-src/rules/ui-audit-gate.md +3 -6
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -5
- package/dist/agent-src/rules/upstream-proposal.md +4 -6
- package/dist/agent-src/rules/user-interaction.md +7 -5
- package/dist/agent-src/rules/user-interrupt-priority.md +17 -8
- package/dist/agent-src/rules/verify-before-complete.md +12 -22
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +3 -3
- package/dist/agent-src/scripts/update_roadmap_progress.ts +197 -7
- package/dist/agent-src/skills/adr-create/SKILL.md +48 -42
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +18 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/SKILL.md +14 -1
- package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +0 -3
- package/dist/agent-src/skills/brand/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-identity/SKILL.md +3 -3
- package/dist/agent-src/skills/brand-strategy/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +3 -3
- package/dist/agent-src/skills/canvas-design/SKILL.md +6 -0
- package/dist/agent-src/skills/check-refs/SKILL.md +7 -4
- package/dist/agent-src/skills/code-review/SKILL.md +1 -0
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +6 -5
- package/dist/agent-src/skills/condense-memory/SKILL.md +11 -11
- package/dist/agent-src/skills/context-document/SKILL.md +17 -0
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-record/SKILL.md +6 -0
- package/dist/agent-src/skills/decision-review/SKILL.md +5 -3
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +6 -1
- package/dist/agent-src/skills/design-intelligence/SKILL.md +5 -2
- package/dist/agent-src/skills/design-intelligence/references/design-languages.md +1 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +10 -4
- package/dist/agent-src/skills/design-variations/SKILL.md +127 -0
- package/dist/agent-src/skills/design-variations/evals/triggers.json +17 -0
- package/dist/agent-src/skills/emit-tickets/SKILL.md +4 -4
- package/dist/agent-src/skills/fe-design/SKILL.md +20 -0
- package/dist/agent-src/skills/html-deck/SKILL.md +123 -0
- package/dist/agent-src/skills/html-deck/evals/triggers.json +17 -0
- package/dist/agent-src/skills/html-deck/templates/deck-shell.html +77 -0
- package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -0
- package/dist/agent-src/skills/laravel/SKILL.md +0 -1
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +46 -0
- package/dist/agent-src/skills/lint-skills/SKILL.md +6 -6
- package/dist/agent-src/skills/md-language-check/SKILL.md +3 -3
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +66 -1
- package/dist/agent-src/skills/migration-architect/SKILL.md +1 -0
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +2 -2
- package/dist/agent-src/skills/performance-analysis/SKILL.md +2 -0
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/premortem/SKILL.md +0 -3
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +16 -0
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +3 -1
- package/dist/agent-src/skills/release-comms/SKILL.md +46 -45
- package/dist/agent-src/skills/roadmap-management/SKILL.md +21 -0
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +32 -2
- package/dist/agent-src/skills/root-cause-frameworks/SKILL.md +0 -3
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -0
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +4 -0
- package/dist/agent-src/skills/source-discovery/SKILL.md +22 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +33 -14
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +11 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +8 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +29 -0
- package/dist/agent-src/skills/threat-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +2 -0
- package/dist/agent-src/skills/wireframe/SKILL.md +118 -0
- package/dist/agent-src/skills/wireframe/evals/triggers.json +17 -0
- package/dist/agent-src/templates/agent-settings.md +22 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +2 -2
- package/dist/agent-src/templates/contexts/knowledge-pages.md +116 -0
- package/dist/agent-src/templates/hooks/pre-commit-frontmatter +1 -1
- package/dist/agent-src/templates/roadmaps.md +70 -2
- package/dist/agent-src/templates/rule.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +3 -3
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +109 -0
- package/dist/agent-src/templates/tickets.md +8 -8
- package/dist/cli/commands/recordTriggerEval.test.js +1 -1
- package/dist/cli/commands/recordTriggerEval.test.js.map +1 -1
- package/dist/cli/initRouting.js +4 -2
- package/dist/cli/initRouting.js.map +1 -1
- package/dist/cli/registry.js +1 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +718 -240
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +8 -8
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +43 -28
- package/dist/discovery/trust-report.md +12 -11
- package/dist/discovery/workspaces.json +29 -18
- package/dist/install/preflight.js +173 -0
- package/dist/install/preflight.js.map +1 -0
- package/dist/mcp/registry-manifest.json +4 -4
- package/dist/router.json +1 -1
- package/dist/server/routes/settings.js +4 -0
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/schemas/settings.js +3 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +108 -0
- package/docs/MIGRATION.md +3 -3
- package/docs/architecture.md +5 -5
- package/docs/benchmark.md +133 -2
- package/docs/benchmark.pinned.yml +31 -0
- package/docs/capability-matrix.md +1 -0
- package/docs/catalog.md +70 -60
- package/docs/command-flows.md +15 -3
- package/docs/comparison.yaml +35 -0
- package/docs/contracts/agents-layout.md +148 -0
- package/docs/contracts/brand-token-consumption.md +5 -0
- package/docs/contracts/capability-boundary.md +5 -0
- package/docs/contracts/command-category-governance.md +5 -0
- package/docs/contracts/command-clusters.md +1 -0
- package/docs/contracts/command-surface-tiers.md +1 -1
- package/docs/contracts/conformance.md +84 -0
- package/docs/contracts/creative-pack-boundary.md +5 -0
- package/docs/contracts/discovery-manifest.schema.json +5 -4
- package/docs/contracts/file-ownership-matrix.json +4605 -985
- package/docs/contracts/governance-enforcement-projection.md +5 -0
- package/docs/contracts/gui-wizard.md +1 -1
- package/docs/contracts/hook-architecture-v1.md +2 -2
- package/docs/contracts/implement-ticket-flow.md +1 -1
- package/docs/contracts/kernel-membership.md +13 -0
- package/docs/contracts/mcp-tool-inventory.md +23 -23
- package/docs/contracts/no-runtime-boundary.md +6 -1
- package/docs/contracts/review-lens-schema.md +5 -0
- package/docs/contracts/rule-router.md +102 -8
- package/docs/contracts/skill-bundled-assets.md +1 -1
- package/docs/contracts/skill-dry-run.md +1 -1
- package/docs/contracts/subagent-boundary.md +5 -0
- package/docs/contracts/ticket-bundle-format.md +9 -4
- package/docs/contracts/tier-3-contrib-plugin.md +2 -2
- package/docs/contracts/write-engine.md +3 -0
- package/docs/customization.md +87 -15
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +1 -1
- package/docs/decisions/ADR-109-subagent-v1-contract.md +246 -0
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +105 -0
- package/docs/decisions/INDEX.md +2 -0
- package/docs/distribution/awesome-list-submission.md +46 -0
- package/docs/distribution/launch-story-draft.md +58 -0
- package/docs/end-to-end-walkthroughs.md +2 -2
- package/docs/getting-started.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +24 -0
- package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +1 -1
- package/docs/guidelines/agent-infra/linked-projects-onboarding-gate.md +2 -2
- package/docs/guidelines/agent-infra/missing-tool-handling.md +3 -3
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +1 -1
- package/docs/guidelines/code-clarity.md +19 -0
- package/docs/guidelines/design-antipatterns-triggers.json +2 -1
- package/docs/guidelines/design-antipatterns.md +10 -1
- package/docs/guidelines/design-modes.md +6 -0
- package/docs/guidelines/php/general.md +9 -1
- package/docs/guidelines/php/php-coding-patterns.md +7 -0
- package/docs/guides/cross-repo-retrieval.md +1 -1
- package/docs/guides/frontend-design-corpus-refresh.md +2 -2
- package/docs/guides/local-analytics.md +4 -4
- package/docs/guides/skill-discovery.md +1 -1
- package/docs/guides/skill-preview.md +1 -1
- package/docs/hook-payload-capture.md +6 -6
- package/docs/install-friction-report.md +66 -0
- package/docs/installation.md +1 -1
- package/docs/maintainers/optional-media-deps.md +50 -0
- package/docs/mcp-server.md +11 -12
- package/docs/media/proof-demo.cast +14 -0
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +1 -1
- package/docs/migration/divergences/bench-stats-float-precision.md +1 -1
- package/docs/migration/node-floor.md +1 -1
- package/docs/migration/yaml-roundtrip-spike.md +1 -1
- package/docs/personas.md +16 -5
- package/docs/positioning-evidence.md +86 -0
- package/docs/proof.md +86 -0
- package/docs/skills-catalog.md +1 -1
- package/docs/troubleshooting.md +8 -8
- package/docs/wedge/production-validator/README.md +57 -0
- package/docs/wedge/production-validator/production-validator.md +56 -0
- package/docs/wizard.md +2 -2
- package/package.json +1 -1
- package/src/config/agent-settings.template.yml +59 -4
- package/src/config/agents-paths.yml +254 -0
- package/src/config/budgets.yml +16 -0
- package/src/config/discovery/packs.yml +1 -0
- package/src/config/discovery/unassigned-artefacts.yml +2 -0
- package/src/config/gitignore-block.txt +25 -0
- package/src/config/host-capabilities.yml +31 -0
- package/src/config/profiles/balanced.ini +4 -0
- package/src/config/profiles/full.ini +4 -0
- package/src/config/profiles/minimal.ini +4 -0
- package/src/scripts/_cli/cmd_conformance.ts +716 -0
- package/src/scripts/_cli/cmd_doctor.ts +23 -2
- package/src/scripts/_cli/cmd_fleet.ts +401 -0
- package/src/scripts/_cli/cmd_preflight.ts +159 -0
- package/src/scripts/_dispatch.bash +10 -0
- package/src/scripts/_lib/knowledge_events.ts +193 -0
- package/src/scripts/_lib/subagent_steering.ts +115 -3
- package/src/scripts/_lib/text_similarity.ts +75 -0
- package/src/scripts/ai-video/test-pipeline.sh +1 -1
- package/src/scripts/ai_council/clients.ts +19 -3
- package/src/scripts/append_contested.ts +112 -0
- package/src/scripts/audit_auto_rules.ts +11 -1
- package/src/scripts/audit_mcp_tools.ts +25 -11
- package/src/scripts/bench_ab_v2_run.ts +527 -40
- package/src/scripts/bench_ab_v2_stats.ts +6 -0
- package/src/scripts/bench_matrix.ts +266 -0
- package/src/scripts/bootstrap_knowledge.ts +267 -0
- package/src/scripts/build_discovery_manifest.ts +42 -2
- package/src/scripts/build_proof.ts +214 -0
- package/src/scripts/check_always_budget.ts +3 -0
- package/src/scripts/check_augment_description_cap.ts +2 -2
- package/src/scripts/check_claims.ts +270 -0
- package/src/scripts/check_comparison.ts +79 -0
- package/src/scripts/check_generated_artefact_headers.ts +109 -0
- package/src/scripts/check_generator_output_coverage.ts +142 -0
- package/src/scripts/check_gitignore_freshness.ts +127 -0
- package/src/scripts/check_knowledge_pages.ts +210 -0
- package/src/scripts/check_knowledge_sharing.ts +162 -0
- package/src/scripts/check_media_deps.ts +91 -0
- package/src/scripts/check_memory_contradiction.ts +280 -0
- package/src/scripts/check_memory_similarity.ts +134 -0
- package/src/scripts/check_quality_regression.ts +56 -10
- package/src/scripts/check_references.ts +3 -1
- package/src/scripts/check_release_pr_shape.ts +4 -0
- package/src/scripts/check_site_links.ts +135 -0
- package/src/scripts/check_skill_gaps.ts +99 -0
- package/src/scripts/check_token_quality_golden.ts +197 -11
- package/src/scripts/check_tracked_but_ignored.ts +67 -0
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/compile_router.ts +30 -3
- package/src/scripts/condense.ts +350 -14
- package/src/scripts/consolidate_knowledge_events.ts +192 -0
- package/src/scripts/degrade_to_pointer.ts +136 -0
- package/src/scripts/design_slop_rules.test.ts +15 -0
- package/src/scripts/design_slop_rules.ts +28 -0
- package/src/scripts/emit_knowledge_event.ts +158 -0
- package/src/scripts/export_replay_corpus.ts +187 -0
- package/src/scripts/external_sources_denylist.json +7 -2
- package/src/scripts/fold_intake.ts +281 -0
- package/src/scripts/generate_capability_matrix.ts +9 -1
- package/src/scripts/generate_knowledge_index.ts +222 -0
- package/src/scripts/hook_manifest.yaml +26 -14
- package/src/scripts/hooks/dispatch_hook.ts +18 -0
- package/src/scripts/hot_context_hook.ts +372 -0
- package/src/scripts/install +47 -0
- package/src/scripts/install-hooks.sh +17 -0
- package/src/scripts/inventory_meta_layers.ts +11 -0
- package/src/scripts/janitor.ts +258 -0
- package/src/scripts/lint_agents_layout.ts +74 -15
- package/src/scripts/lint_bench_ab.ts +4 -1
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_framework_leakage_allowlist.json +26 -3
- package/src/scripts/lint_knowledge_scale.ts +250 -0
- package/src/scripts/lint_legal_pack.ts +67 -0
- package/src/scripts/lint_persona_governance.ts +8 -3
- package/src/scripts/lint_regression.ts +15 -0
- package/src/scripts/lint_roadmap_blockers.ts +202 -0
- package/src/scripts/lint_roadmap_complexity.ts +81 -2
- package/src/scripts/lint_subagent_determinism.ts +125 -0
- package/src/scripts/measure_augment_budget.ts +46 -6
- package/src/scripts/measure_patterns.ts +4 -3
- package/src/scripts/measure_skill_reduction.ts +6 -6
- package/src/scripts/migration_status.ts +6 -2
- package/src/scripts/mine_missing_guardrails.ts +189 -0
- package/src/scripts/parity/phase_gate.ts +1 -1
- package/src/scripts/parity/replay.ts +21 -0
- package/src/scripts/project_thin_rules.ts +120 -16
- package/src/scripts/release.ts +39 -1
- package/src/scripts/render_benchmark_composite.ts +378 -0
- package/src/scripts/roadmap_progress_hook.ts +101 -43
- package/src/scripts/schemas/skill.schema.json +27 -0
- package/src/scripts/schemas/subagent.schema.json +106 -0
- package/src/scripts/skill_linter.ts +1 -0
- package/src/scripts/smoke/kernel.sh +5 -4
- package/src/scripts/surface-tiers.yml +1 -0
- package/src/scripts/sync_gitignore.ts +4 -0
- package/src/scripts/update_skill_candidates.ts +172 -0
- package/src/scripts/validate_frontmatter.ts +1 -0
|
@@ -67,11 +67,14 @@ export const DASHBOARD_PATH = "agents/roadmaps-progress.md";
|
|
|
67
67
|
export const REGEN_NAME = "update_roadmap_progress.ts";
|
|
68
68
|
// Distributed-content script subtrees that may ship the regenerator,
|
|
69
69
|
// in priority order. Project-scoped installs land it under .augment/ or
|
|
70
|
-
// dist/agent-src/; the package itself carries the same projection
|
|
70
|
+
// dist/agent-src/; the package itself carries the same projection, and the
|
|
71
|
+
// source checkout carries it under src/agent-src/scripts (so a standalone,
|
|
72
|
+
// env-less invocation from the source tree still resolves it).
|
|
71
73
|
export const DIST_SCRIPT_SUBDIRS = [
|
|
72
74
|
path.join(".augment", "scripts"),
|
|
73
75
|
path.join("dist/agent-src", "scripts"),
|
|
74
76
|
path.join(".agent-src.uncondensed", "scripts"),
|
|
77
|
+
path.join("src/agent-src", "scripts"),
|
|
75
78
|
];
|
|
76
79
|
// Set by the dispatcher (scripts/hooks/dispatch_hook) to its own resolved
|
|
77
80
|
// package root, so a globally-installed binary (ADR-020 global-only) can
|
|
@@ -177,15 +180,54 @@ export function _is_roadmap_touch(p: string): boolean {
|
|
|
177
180
|
return true;
|
|
178
181
|
}
|
|
179
182
|
|
|
183
|
+
/**
|
|
184
|
+
* The repo root whose dashboard an edited roadmap path belongs to, or null
|
|
185
|
+
* when the path is not a roadmap touch.
|
|
186
|
+
*
|
|
187
|
+
* The dashboard the hook must regenerate is the one in the SAME repo as the
|
|
188
|
+
* edited roadmap — which is not necessarily `--project-dir`. An autonomous
|
|
189
|
+
* agent (or a monorepo dev) routinely edits `…/<worktree>/agents/roadmaps/x.md`
|
|
190
|
+
* while the session's project dir is a sibling checkout; keying off
|
|
191
|
+
* `--project-dir` alone silently skipped those edits and let the worktree's
|
|
192
|
+
* dashboard drift. So:
|
|
193
|
+
* - an ABSOLUTE path containing `/agents/roadmaps/` resolves to the prefix
|
|
194
|
+
* before that segment (the edited file's own repo root), wherever it is;
|
|
195
|
+
* - a RELATIVE roadmap path resolves to `consumer_root` (the Augment
|
|
196
|
+
* repo-relative case, where the file genuinely sits under `--project-dir`).
|
|
197
|
+
*/
|
|
198
|
+
export function _target_root(p: string, consumer_root: string): string | null {
|
|
199
|
+
const norm = p.replace(/\\/g, "/");
|
|
200
|
+
if (path.isAbsolute(norm)) {
|
|
201
|
+
const marker = "/" + ROADMAP_PREFIX; // "/agents/roadmaps/"
|
|
202
|
+
const idx = norm.indexOf(marker);
|
|
203
|
+
if (idx < 0) {
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
const rel = norm.slice(idx + 1); // "agents/roadmaps/…"
|
|
207
|
+
if (!_is_roadmap_touch(rel)) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
return norm.slice(0, idx) || "/";
|
|
211
|
+
}
|
|
212
|
+
return _is_roadmap_touch(norm) ? consumer_root : null;
|
|
213
|
+
}
|
|
214
|
+
|
|
180
215
|
/**
|
|
181
216
|
* Package roots to search for the shipped regenerator, in priority order,
|
|
182
217
|
* when the consumer carries no project-local copy.
|
|
183
218
|
*
|
|
184
219
|
* 1. ``AGENT_CONFIG_PACKAGE_ROOT`` — the dispatcher passes its own
|
|
185
220
|
* resolved package root.
|
|
186
|
-
* 2. This hook's own location
|
|
187
|
-
*
|
|
188
|
-
*
|
|
221
|
+
* 2. This hook's own location — last-resort fallback for a standalone
|
|
222
|
+
* invocation the dispatcher never wrapped. The hook ships at
|
|
223
|
+
* ``<pkg>/src/scripts/roadmap_progress_hook.ts``, so BOTH ``<pkg>/src``
|
|
224
|
+
* (one dir up from ``scripts/``) AND ``<pkg>`` are searched: the shipped
|
|
225
|
+
* regenerator lives under ``<pkg>/dist/agent-src/scripts`` (built /
|
|
226
|
+
* installed) or ``<pkg>/src/agent-src/scripts`` (source), i.e. under
|
|
227
|
+
* ``<pkg>`` — NOT under ``<pkg>/src``. The previous single
|
|
228
|
+
* ``parent.parent`` walk stopped at ``<pkg>/src`` and therefore never
|
|
229
|
+
* found the regenerator when the env var was unset (silent no-op → the
|
|
230
|
+
* dashboard drifted with no signal).
|
|
189
231
|
*/
|
|
190
232
|
export function _package_roots(): string[] {
|
|
191
233
|
const roots: string[] = [];
|
|
@@ -193,7 +235,9 @@ export function _package_roots(): string[] {
|
|
|
193
235
|
if (env_root) {
|
|
194
236
|
roots.push(_expanduser(env_root));
|
|
195
237
|
}
|
|
196
|
-
|
|
238
|
+
const scriptsDir = path.dirname(path.resolve(__filename)); // <pkg>/src/scripts
|
|
239
|
+
roots.push(path.dirname(scriptsDir)); // <pkg>/src
|
|
240
|
+
roots.push(path.dirname(path.dirname(scriptsDir))); // <pkg>
|
|
197
241
|
return roots;
|
|
198
242
|
}
|
|
199
243
|
|
|
@@ -300,33 +344,17 @@ export function run(
|
|
|
300
344
|
return 0;
|
|
301
345
|
}
|
|
302
346
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
// issue directly (this hook runs as a subprocess from the universal
|
|
312
|
-
// dispatcher; routing through the dispatcher would add latency for
|
|
313
|
-
// no benefit).
|
|
314
|
-
try {
|
|
315
|
-
log_dispatch_issue(
|
|
316
|
-
consumer_root,
|
|
317
|
-
"roadmap-progress",
|
|
318
|
-
"prerequisite_missing",
|
|
319
|
-
"update_roadmap_progress.ts not found at any of: " +
|
|
320
|
-
".augment/scripts/, dist/agent-src/scripts/, " +
|
|
321
|
-
"src/agent-src/scripts/",
|
|
322
|
-
"./agent-config hooks:install --regen " + "(or ./agent-config init)",
|
|
323
|
-
);
|
|
324
|
-
} catch {
|
|
325
|
-
// observability never breaks the hook
|
|
326
|
-
}
|
|
327
|
-
if (verbose) {
|
|
328
|
-
process.stderr.write("roadmap-progress-hook: regenerator not found, skipping\n");
|
|
347
|
+
// Each touched roadmap regenerates the dashboard of ITS OWN repo (which may
|
|
348
|
+
// be a worktree/sibling of `consumer_root`, not consumer_root itself). Dedupe
|
|
349
|
+
// so N edits in one repo regenerate once.
|
|
350
|
+
const targetRoots = new Set<string>();
|
|
351
|
+
for (const p of _candidate_paths(payload)) {
|
|
352
|
+
const root = _target_root(p, consumer_root);
|
|
353
|
+
if (root !== null) {
|
|
354
|
+
targetRoots.add(root);
|
|
329
355
|
}
|
|
356
|
+
}
|
|
357
|
+
if (targetRoots.size === 0) {
|
|
330
358
|
return 0;
|
|
331
359
|
}
|
|
332
360
|
|
|
@@ -339,18 +367,48 @@ export function run(
|
|
|
339
367
|
return 0;
|
|
340
368
|
}
|
|
341
369
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
370
|
+
for (const root of targetRoots) {
|
|
371
|
+
const script = _resolve_regenerator(root);
|
|
372
|
+
if (script === null) {
|
|
373
|
+
// Phase 1 of road-to-hooks-actually-fire-in-consumers: log dispatch
|
|
374
|
+
// issue directly (this hook runs as a subprocess from the universal
|
|
375
|
+
// dispatcher; routing through the dispatcher would add latency for
|
|
376
|
+
// no benefit).
|
|
377
|
+
try {
|
|
378
|
+
log_dispatch_issue(
|
|
379
|
+
root,
|
|
380
|
+
"roadmap-progress",
|
|
381
|
+
"prerequisite_missing",
|
|
382
|
+
"update_roadmap_progress.ts not found at any of: " +
|
|
383
|
+
".augment/scripts/, dist/agent-src/scripts/, " +
|
|
384
|
+
"src/agent-src/scripts/",
|
|
385
|
+
"./agent-config hooks:install --regen " + "(or ./agent-config init)",
|
|
386
|
+
);
|
|
387
|
+
} catch {
|
|
388
|
+
// observability never breaks the hook
|
|
389
|
+
}
|
|
390
|
+
if (verbose) {
|
|
391
|
+
process.stderr.write(
|
|
392
|
+
`roadmap-progress-hook: regenerator not found for ${root}, skipping\n`,
|
|
393
|
+
);
|
|
394
|
+
}
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
try {
|
|
399
|
+
// The regenerator is a `.ts` script; run it through tsx (resolved from
|
|
400
|
+
// a node_modules/.bin found by walking up from the regenerator's dir,
|
|
401
|
+
// falling back to `npx tsx`), mirroring the dispatcher's `.ts` concerns.
|
|
402
|
+
// `--repo-root` + cwd pin the regeneration to the edited file's own repo.
|
|
403
|
+
const inv = _resolve_tsx_invocation(script);
|
|
404
|
+
spawnSync(inv.command, [...inv.args, "--repo-root", root], {
|
|
405
|
+
cwd: root,
|
|
406
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
407
|
+
timeout: 30000,
|
|
408
|
+
});
|
|
409
|
+
} catch {
|
|
410
|
+
// never propagate regenerator failures into the agent loop
|
|
411
|
+
}
|
|
354
412
|
}
|
|
355
413
|
|
|
356
414
|
if (verbose) {
|
|
@@ -187,6 +187,33 @@
|
|
|
187
187
|
"type": "string",
|
|
188
188
|
"enum": ["lean", "standard", "rich"],
|
|
189
189
|
"description": "Token-cost class for this skill. `lean` (default): subject to telegraph-speak condensation and thin-projector trimming; optimize for <500 tokens. `standard`: balanced guidance, normal condensation. `rich`: exempt from telegraph-speak and thin-projector trimming; detailed examples preserved; eager-load eligible; ≤15% of skills in a suite may be `rich` (CI-enforced). A `rich` skill MUST carry a '## Why this skill is rich' section explaining the irreducible complexity that makes condensation harmful. Governed by `token-budget-discipline` rule + `tokens.rich_skills` consumer setting. See docs/guidelines/token-budget-governance.md."
|
|
190
|
+
},
|
|
191
|
+
"parallelizable": {
|
|
192
|
+
"type": "string",
|
|
193
|
+
"enum": ["steps", "files", "independent"],
|
|
194
|
+
"description": "Classifier signal for auto-dispatch. 'steps' = ordered multi-step plan → do-in-steps. 'files' = N independent files of the same shape → do-in-parallel. 'independent' = N independent same-shape targets (not files) → do-in-parallel. Omit for skills that are always single-pass. Read by auto-dispatch-classification.md classifier signal 1."
|
|
195
|
+
},
|
|
196
|
+
"gaps": {
|
|
197
|
+
"type": "array",
|
|
198
|
+
"description": "B6 — honest-null known limitations. Human-curated (NOT auto-discovered), not all skills. Each entry documents a real limitation and cites a witness test that reproduces it. Rendered on the proof page's 'Known Limits'; check_skill_gaps enforces every witness path exists. The offensive-transparency surface a headline-benchmark cannot ship.",
|
|
199
|
+
"items": {
|
|
200
|
+
"type": "object",
|
|
201
|
+
"additionalProperties": false,
|
|
202
|
+
"required": ["description", "witness"],
|
|
203
|
+
"properties": {
|
|
204
|
+
"description": {
|
|
205
|
+
"type": "string",
|
|
206
|
+
"minLength": 1,
|
|
207
|
+
"maxLength": 280,
|
|
208
|
+
"description": "The limitation, stated honestly (what the skill does NOT do / where it fails)."
|
|
209
|
+
},
|
|
210
|
+
"witness": {
|
|
211
|
+
"type": "string",
|
|
212
|
+
"minLength": 1,
|
|
213
|
+
"description": "Repo-relative path to a test that reproduces/demonstrates this limitation (passes while the gap is real; a failing witness = stale gap to remove)."
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
190
217
|
}
|
|
191
218
|
}
|
|
192
219
|
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://github.com/event4u-app/agent-config/scripts/schemas/subagent.schema.json",
|
|
4
|
+
"title": "Subagent frontmatter (subagent-v1)",
|
|
5
|
+
"$comment": "Source: ADR-109. A subagent is an addressable, tool-scoped execution context projected to a host's native subagent format (Claude Code `.claude/agents/`) or, on non-subagent hosts, to a loadable context file. Static projection only — dispatch stays with the host/user, never runtime-enforced. Governance fields (trust, lifecycle, discovery.visible) are REQUIRED, mirroring the skill trust block so subagents share one governance model. model_tier reuses model_tier.ts (ADR-034/035).",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"required": [
|
|
9
|
+
"schema_version",
|
|
10
|
+
"name",
|
|
11
|
+
"description",
|
|
12
|
+
"model_tier",
|
|
13
|
+
"tools",
|
|
14
|
+
"trust",
|
|
15
|
+
"lifecycle",
|
|
16
|
+
"discovery",
|
|
17
|
+
"source"
|
|
18
|
+
],
|
|
19
|
+
"properties": {
|
|
20
|
+
"schema_version": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"const": "subagent-v1"
|
|
23
|
+
},
|
|
24
|
+
"name": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
27
|
+
"description": "Addressable handle. Must match the subagent filename stem and be globally unique within the subagent category (projection-path collision guard)."
|
|
28
|
+
},
|
|
29
|
+
"description": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"minLength": 1,
|
|
32
|
+
"maxLength": 240,
|
|
33
|
+
"description": "User-facing summary. On Claude Code this drives `@`-menu discoverability; keep it action-oriented."
|
|
34
|
+
},
|
|
35
|
+
"model_tier": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"enum": ["lite", "medium", "high", "inherit"],
|
|
38
|
+
"description": "Vendor-neutral capability band (ADR-034/035). high/medium/lite project to a native Claude `model:` (high→opus, medium→sonnet, lite→haiku) via model_tier.ts; `inherit` is a documented passthrough sentinel (→ CC `model: inherit`), not a new mapping."
|
|
39
|
+
},
|
|
40
|
+
"tools": {
|
|
41
|
+
"type": "array",
|
|
42
|
+
"minItems": 1,
|
|
43
|
+
"uniqueItems": true,
|
|
44
|
+
"items": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"enum": ["Read", "Write", "Edit", "Grep", "Glob", "Bash", "WebFetch", "WebSearch", "NotebookEdit"]
|
|
47
|
+
},
|
|
48
|
+
"description": "Enum-validated at build time against the Claude Code tool set, so a bad value fails CI rather than producing broken `.claude/agents/` YAML in the user's IDE."
|
|
49
|
+
},
|
|
50
|
+
"trust": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": false,
|
|
53
|
+
"required": ["level", "confidence", "human_review_required"],
|
|
54
|
+
"properties": {
|
|
55
|
+
"level": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"enum": ["core", "professional", "experimental", "advisory", "restricted"],
|
|
58
|
+
"default": "core"
|
|
59
|
+
},
|
|
60
|
+
"confidence": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"enum": ["high", "medium", "low"],
|
|
63
|
+
"default": "high"
|
|
64
|
+
},
|
|
65
|
+
"human_review_required": {
|
|
66
|
+
"type": "boolean",
|
|
67
|
+
"default": false
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"description": "ADR-013 trust block, mirrored from the skill schema so subagents share one governance model."
|
|
71
|
+
},
|
|
72
|
+
"lifecycle": {
|
|
73
|
+
"type": "string",
|
|
74
|
+
"enum": ["active", "deprecated", "experimental", "archived"],
|
|
75
|
+
"default": "active",
|
|
76
|
+
"description": "ADR-013 lifecycle state."
|
|
77
|
+
},
|
|
78
|
+
"discovery": {
|
|
79
|
+
"type": "object",
|
|
80
|
+
"additionalProperties": false,
|
|
81
|
+
"required": ["visible", "requires_capability"],
|
|
82
|
+
"properties": {
|
|
83
|
+
"visible": {
|
|
84
|
+
"const": false,
|
|
85
|
+
"description": "Subagents are default-off. The value MUST be false; a pack/profile opts in explicitly via include: [\"subagent:<name>\"]."
|
|
86
|
+
},
|
|
87
|
+
"requires_capability": {
|
|
88
|
+
"type": "string",
|
|
89
|
+
"minLength": 1,
|
|
90
|
+
"description": "Host-capability gate (e.g. claude_subagents). Hosts without the capability receive the loadable-context-file degradation, not native dispatch."
|
|
91
|
+
},
|
|
92
|
+
"categories": {
|
|
93
|
+
"type": "array",
|
|
94
|
+
"items": { "type": "string" },
|
|
95
|
+
"uniqueItems": true,
|
|
96
|
+
"description": "Optional pack-include tags (include: [\"subagent:category:<tag>\"])."
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"source": {
|
|
101
|
+
"type": "string",
|
|
102
|
+
"enum": ["package", "project"],
|
|
103
|
+
"default": "package"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
# scripts/smoke/kernel.sh — kernel-tier smoke (step-11 Phase 3 Step 2).
|
|
3
3
|
#
|
|
4
4
|
# Asserts:
|
|
5
|
-
# 1. router.json lists exactly
|
|
5
|
+
# 1. router.json lists exactly 9 kernel rules.
|
|
6
6
|
# 2. Every kernel rule file exists at dist/agent-src/rules/<id>.md.
|
|
7
|
-
# 3.
|
|
7
|
+
# 3. 8 of 9 carry at least one Iron-Law fenced block (agent-authority
|
|
8
|
+
# is the fence-less priority index).
|
|
8
9
|
# agent-authority is the dispatch index, exempt from the fence
|
|
9
10
|
# requirement (docs/contracts/smoke-contracts.md § 3.1).
|
|
10
11
|
# 4. Kernel-bucket char budget breaches ≤ EXPECTED_BREACHES.
|
|
@@ -16,8 +17,8 @@
|
|
|
16
17
|
|
|
17
18
|
set -euo pipefail
|
|
18
19
|
|
|
19
|
-
EXPECTED_KERNEL_COUNT=
|
|
20
|
-
EXPECTED_FENCE_CARRIERS=
|
|
20
|
+
EXPECTED_KERNEL_COUNT=9
|
|
21
|
+
EXPECTED_FENCE_CARRIERS=8
|
|
21
22
|
# Bumped 2 → 3 in v4.0.0: the `fix(authority): block execution offers
|
|
22
23
|
# after roadmap/vision artifact save` commit (d30d441e) pushed
|
|
23
24
|
# scope-control and commit-policy past their per-rule caps; kernel-bucket
|
|
@@ -37,6 +37,7 @@ clusters:
|
|
|
37
37
|
cost: lab # cost tracking / budget gate (observability, Node .mjs)
|
|
38
38
|
mcp_server: lab # MCP stdio server, separate runtime, pilot distribution
|
|
39
39
|
media: lab # shared adapter substrate for ai-video / ai-image
|
|
40
|
+
parity: lab # py2ts parity rigs (compare / coverage-diff), migration tooling
|
|
40
41
|
prediction-pool: lab # prediction-pool optimizer (fun pack, experimental)
|
|
41
42
|
|
|
42
43
|
# Top-level src/scripts/*.py modules that belong to lab (module stem, no .py).
|
|
@@ -55,6 +55,10 @@ export const DEFAULT_TEMPLATE = path.join(
|
|
|
55
55
|
// managed block or outside (older installers / hand-edits). Current canonical
|
|
56
56
|
// equivalents (e.g. /agents/runtime/.agent-prices.md) come from the template
|
|
57
57
|
// and are NOT affected. Leading-slash variants are matched defensively.
|
|
58
|
+
//
|
|
59
|
+
// Authoritative source: src/config/agents-paths.yml entries with `legacy: true`.
|
|
60
|
+
// Manual sync until the generation step from the manifest is implemented
|
|
61
|
+
// (road-to-agents-dir-and-gitignore-hygiene Phase 3.2 follow-on).
|
|
58
62
|
export const LEGACY_PATTERNS: readonly string[] = [
|
|
59
63
|
'.agent-chat-history',
|
|
60
64
|
'.agent-chat-history.bak',
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* Cross-cycle recurrence tracker for `agents/knowledge/procedures/skill-candidates.md`
|
|
4
|
+
* — road-to-knowledge-system Phase 2 (capture hygiene).
|
|
5
|
+
*
|
|
6
|
+
* Each `/memory:mine-session` / `memory-consolidation` cycle that finds an
|
|
7
|
+
* unpromoted, recurring topic calls this to increment a durable per-topic
|
|
8
|
+
* counter. At >= 3 mentions the topic is a live skill/procedure candidate —
|
|
9
|
+
* `learning-to-rule-or-skill` picks it up from here for human-gated
|
|
10
|
+
* promotion. This script only maintains the counter file; it never proposes
|
|
11
|
+
* or writes a skill/rule itself.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* update_skill_candidates.ts --topic <slug> --session <id> --date <YYYY-MM-DD> [--file <path>]
|
|
15
|
+
*
|
|
16
|
+
* Exit codes: 0 = updated (prints whether the candidate threshold (3) was
|
|
17
|
+
* crossed BY this call), 1 = usage error.
|
|
18
|
+
*/
|
|
19
|
+
import * as fs from 'node:fs';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
import process from 'node:process';
|
|
22
|
+
import { fileURLToPath } from 'node:url';
|
|
23
|
+
|
|
24
|
+
const PROG = 'update_skill_candidates.ts';
|
|
25
|
+
export const CANDIDATE_THRESHOLD = 3;
|
|
26
|
+
const DEFAULT_FILE = path.join('agents', 'knowledge', 'procedures', 'skill-candidates.md');
|
|
27
|
+
|
|
28
|
+
export interface CandidateRecord {
|
|
29
|
+
topic: string;
|
|
30
|
+
mentions: number;
|
|
31
|
+
first: string; // YYYY-MM-DD
|
|
32
|
+
lastSeen: string; // YYYY-MM-DD
|
|
33
|
+
sessions: string[]; // unique, insertion order
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const HEADING_RE = /^## (.+)$/;
|
|
37
|
+
const FIELD_RE = /^- (\w[\w ]*): (.*)$/;
|
|
38
|
+
|
|
39
|
+
/** Parse the skill-candidates.md body into topic → record. Tolerant of a missing/empty file. */
|
|
40
|
+
export function parseCandidates(body: string): Map<string, CandidateRecord> {
|
|
41
|
+
const out = new Map<string, CandidateRecord>();
|
|
42
|
+
let current: CandidateRecord | null = null;
|
|
43
|
+
|
|
44
|
+
for (const rawLine of body.split(/\r?\n/)) {
|
|
45
|
+
const headingMatch = HEADING_RE.exec(rawLine);
|
|
46
|
+
if (headingMatch?.[1] !== undefined) {
|
|
47
|
+
current = { topic: headingMatch[1].trim(), mentions: 0, first: '', lastSeen: '', sessions: [] };
|
|
48
|
+
out.set(current.topic, current);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (!current) continue;
|
|
52
|
+
const fieldMatch = FIELD_RE.exec(rawLine);
|
|
53
|
+
if (!fieldMatch) continue;
|
|
54
|
+
const [, key, value] = fieldMatch;
|
|
55
|
+
if (key === undefined || value === undefined) continue;
|
|
56
|
+
if (key === 'Mentions') current.mentions = Number.parseInt(value, 10) || 0;
|
|
57
|
+
else if (key === 'First seen') current.first = value.trim();
|
|
58
|
+
else if (key === 'Last seen') current.lastSeen = value.trim();
|
|
59
|
+
else if (key === 'Sessions') {
|
|
60
|
+
current.sessions = value
|
|
61
|
+
.split(',')
|
|
62
|
+
.map((s) => s.trim())
|
|
63
|
+
.filter(Boolean);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function renderCandidates(records: Map<string, CandidateRecord>): string {
|
|
70
|
+
const lines: string[] = [];
|
|
71
|
+
lines.push('# Skill Candidates');
|
|
72
|
+
lines.push('');
|
|
73
|
+
lines.push(
|
|
74
|
+
`_Auto-maintained by \`src/scripts/update_skill_candidates.ts\`. A topic reaches candidate status at ${CANDIDATE_THRESHOLD}+ mentions across distinct sessions — see \`learning-to-rule-or-skill\` for the human-gated promotion path._`,
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const topics = [...records.keys()].sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
|
|
78
|
+
for (const topic of topics) {
|
|
79
|
+
const r = records.get(topic)!;
|
|
80
|
+
lines.push('');
|
|
81
|
+
lines.push(`## ${r.topic}`);
|
|
82
|
+
lines.push('');
|
|
83
|
+
lines.push(`- Mentions: ${r.mentions}`);
|
|
84
|
+
lines.push(`- First seen: ${r.first}`);
|
|
85
|
+
lines.push(`- Last seen: ${r.lastSeen}`);
|
|
86
|
+
lines.push(`- Sessions: ${r.sessions.join(', ')}`);
|
|
87
|
+
}
|
|
88
|
+
lines.push('');
|
|
89
|
+
return lines.join('\n');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Increment (or create) a topic's recurrence record. Mutates and returns the map; returns whether this call crossed the candidate threshold. */
|
|
93
|
+
export function upsertCandidate(
|
|
94
|
+
records: Map<string, CandidateRecord>,
|
|
95
|
+
topic: string,
|
|
96
|
+
sessionId: string,
|
|
97
|
+
date: string,
|
|
98
|
+
): { crossedThreshold: boolean; record: CandidateRecord } {
|
|
99
|
+
let record = records.get(topic);
|
|
100
|
+
const wasBelowThreshold = !record || record.mentions < CANDIDATE_THRESHOLD;
|
|
101
|
+
|
|
102
|
+
if (!record) {
|
|
103
|
+
record = { topic, mentions: 0, first: date, lastSeen: date, sessions: [] };
|
|
104
|
+
records.set(topic, record);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (!record.sessions.includes(sessionId)) {
|
|
108
|
+
record.sessions.push(sessionId);
|
|
109
|
+
record.mentions += 1;
|
|
110
|
+
}
|
|
111
|
+
record.lastSeen = date;
|
|
112
|
+
|
|
113
|
+
const crossedThreshold = wasBelowThreshold && record.mentions >= CANDIDATE_THRESHOLD;
|
|
114
|
+
return { crossedThreshold, record };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function printUsage(): void {
|
|
118
|
+
process.stderr.write(`usage: ${PROG} --topic TOPIC --session ID --date YYYY-MM-DD [--file PATH]\n`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function main(argv: string[]): number {
|
|
122
|
+
let topic: string | null = null;
|
|
123
|
+
let session: string | null = null;
|
|
124
|
+
let date: string | null = null;
|
|
125
|
+
let file = DEFAULT_FILE;
|
|
126
|
+
|
|
127
|
+
for (let i = 0; i < argv.length; i++) {
|
|
128
|
+
const arg = argv[i];
|
|
129
|
+
if (arg === '-h' || arg === '--help') {
|
|
130
|
+
printUsage();
|
|
131
|
+
return 0;
|
|
132
|
+
} else if (arg === '--topic') {
|
|
133
|
+
topic = argv[++i] ?? null;
|
|
134
|
+
} else if (arg === '--session') {
|
|
135
|
+
session = argv[++i] ?? null;
|
|
136
|
+
} else if (arg === '--date') {
|
|
137
|
+
date = argv[++i] ?? null;
|
|
138
|
+
} else if (arg === '--file') {
|
|
139
|
+
file = argv[++i] ?? file;
|
|
140
|
+
} else {
|
|
141
|
+
process.stderr.write(`${PROG}: error: unrecognized argument: ${arg}\n`);
|
|
142
|
+
printUsage();
|
|
143
|
+
return 1;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (!topic || !session || !date) {
|
|
148
|
+
process.stderr.write(`${PROG}: error: --topic, --session, and --date are required\n`);
|
|
149
|
+
printUsage();
|
|
150
|
+
return 1;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const existingBody = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : '';
|
|
154
|
+
const records = parseCandidates(existingBody);
|
|
155
|
+
const { crossedThreshold, record } = upsertCandidate(records, topic, session, date);
|
|
156
|
+
|
|
157
|
+
fs.mkdirSync(path.dirname(file), { recursive: true });
|
|
158
|
+
fs.writeFileSync(file, renderCandidates(records), 'utf8');
|
|
159
|
+
|
|
160
|
+
if (crossedThreshold) {
|
|
161
|
+
process.stdout.write(
|
|
162
|
+
`${PROG}: "${topic}" reached candidate status (${record.mentions} mentions) — surface for learning-to-rule-or-skill.\n`,
|
|
163
|
+
);
|
|
164
|
+
} else {
|
|
165
|
+
process.stdout.write(`${PROG}: "${topic}" now at ${record.mentions} mention(s).\n`);
|
|
166
|
+
}
|
|
167
|
+
return 0;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (fileURLToPath(import.meta.url) === path.resolve(process.argv[1] ?? '')) {
|
|
171
|
+
process.exit(main(process.argv.slice(2)));
|
|
172
|
+
}
|
|
@@ -816,6 +816,7 @@ export function _iter_artefacts(root: string): Array<[string, string]> {
|
|
|
816
816
|
['skill', _rglobSorted(path.join(root, 'skills'), 'SKILL.md')],
|
|
817
817
|
['rule', _rglobSorted(path.join(root, 'rules'), '*.md')],
|
|
818
818
|
['command', _rglobSorted(path.join(root, 'commands'), '*.md')],
|
|
819
|
+
['subagent', _rglobSorted(path.join(root, 'subagents'), '*.md')],
|
|
819
820
|
[
|
|
820
821
|
'persona',
|
|
821
822
|
_globSorted(path.join(root, 'personas'), '*.md').filter(
|