@event4u/agent-config 14.22.0 → 15.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +333 -356
- package/README.md +1 -1
- package/dist/agent-src/commands/agent-handoff.md +8 -7
- package/dist/agent-src/commands/agents/init.md +1 -1
- package/dist/agent-src/commands/agents/user/accept.md +4 -4
- package/dist/agent-src/commands/agents/user/delete.md +2 -2
- package/dist/agent-src/commands/agents/user/init.md +3 -3
- package/dist/agent-src/commands/agents/user/review.md +3 -3
- package/dist/agent-src/commands/agents/user/show.md +3 -3
- package/dist/agent-src/commands/agents/user/update.md +2 -2
- package/dist/agent-src/commands/agents/user.md +6 -6
- package/dist/agent-src/commands/analytics/prune.md +1 -1
- package/dist/agent-src/commands/analytics/show.md +2 -2
- package/dist/agent-src/commands/analyze/decision.md +2 -2
- package/dist/agent-src/commands/analyze/inbox.md +5 -5
- package/dist/agent-src/commands/analyze/incident.md +3 -3
- package/dist/agent-src/commands/analyze/near-miss.md +3 -3
- package/dist/agent-src/commands/analyze/postmortem.md +4 -4
- package/dist/agent-src/commands/analyze/premortem.md +2 -2
- package/dist/agent-src/commands/analyze.md +2 -2
- package/dist/agent-src/commands/bug/fix.md +1 -1
- package/dist/agent-src/commands/bug/investigate.md +2 -2
- package/dist/agent-src/commands/cost/profile.md +3 -3
- package/dist/agent-src/commands/design.md +1 -1
- package/dist/agent-src/commands/feature/explore.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +2 -2
- package/dist/agent-src/commands/feature/roadmap.md +2 -2
- package/dist/agent-src/commands/ghostwriter/fetch.md +4 -4
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/show.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +9 -9
- package/dist/agent-src/commands/humanize.md +6 -6
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/judge/solo.md +1 -1
- package/dist/agent-src/commands/judge.md +1 -1
- package/dist/agent-src/commands/knowledge/cross-repo.md +1 -1
- package/dist/agent-src/commands/knowledge/forget.md +1 -1
- package/dist/agent-src/commands/knowledge/ingest.md +2 -2
- package/dist/agent-src/commands/knowledge/list.md +1 -1
- package/dist/agent-src/commands/memory/add.md +3 -3
- package/dist/agent-src/commands/memory/load.md +4 -4
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +4 -4
- package/dist/agent-src/commands/memory/propose.md +2 -2
- package/dist/agent-src/commands/mode.md +5 -5
- package/dist/agent-src/commands/post-as/ghostwriter.md +3 -3
- package/dist/agent-src/commands/post-as/me.md +7 -7
- package/dist/agent-src/commands/pr/create.md +1 -1
- package/dist/agent-src/commands/pr/merge.md +48 -39
- package/dist/agent-src/commands/profile/activate.md +1 -1
- package/dist/agent-src/commands/profile/show.md +1 -1
- package/dist/agent-src/commands/research/deep.md +2 -2
- package/dist/agent-src/commands/research/report.md +2 -2
- package/dist/agent-src/commands/review/changes.md +1 -1
- package/dist/agent-src/commands/review/routing.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +2 -2
- package/dist/agent-src/commands/roadmap/next.md +9 -1
- package/dist/agent-src/commands/roadmap/process-full.md +2 -2
- package/dist/agent-src/commands/security-audit-config.md +3 -3
- package/dist/agent-src/commands/skill/preview.md +1 -1
- package/dist/agent-src/commands/skills/discover.md +1 -1
- package/dist/agent-src/commands/sync/agent-settings.md +2 -2
- package/dist/agent-src/commands/sync/gitignore/fix.md +1 -1
- package/dist/agent-src/commands/tests/create.md +1 -1
- package/dist/agent-src/commands/tests/e2e-heal.md +1 -1
- package/dist/agent-src/commands/tests/e2e-plan.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +6 -6
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +1 -2
- package/dist/agent-src/contexts/communication/rules-auto/think-before-action-mechanics.md +2 -2
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +88 -1
- package/dist/agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +1 -1
- package/dist/agent-src/contexts/contracts/frugality-charter.md +1 -1
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +1 -1
- package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +13 -1
- package/dist/agent-src/contexts/execution/cheap-question-mechanics.md +1 -1
- package/dist/agent-src/contexts/execution/contract-decision-sheet.md +3 -3
- package/dist/agent-src/contexts/execution/mandated-lines.md +1 -1
- package/dist/agent-src/contexts/execution/non-interactive-contract.md +1 -1
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -1
- package/dist/agent-src/contexts/execution/plan-confidence-gate.md +5 -5
- package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +1 -1
- package/dist/agent-src/contexts/execution/subagent-routing.md +2 -2
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +1 -1
- package/dist/agent-src/contexts/execution/user-memory-channels.md +3 -3
- package/dist/agent-src/contexts/execution/verification-mechanics.md +1 -1
- package/dist/agent-src/contexts/judges/persona-voice-rubric.md +2 -2
- package/dist/agent-src/guidelines/abstraction-thresholds.md +88 -0
- package/dist/agent-src/guidelines/agent-infra/5w2h-analysis.md +260 -0
- package/dist/agent-src/guidelines/agent-infra/active-remediation-mechanics.md +99 -0
- package/dist/agent-src/guidelines/agent-infra/agent-interaction-and-decision-quality.md +325 -0
- package/dist/agent-src/guidelines/agent-infra/api-cost-levers.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +222 -0
- package/dist/agent-src/guidelines/agent-infra/ask-when-uncertain-demos.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/asking-and-brevity-examples.md +198 -0
- package/dist/agent-src/guidelines/agent-infra/break-glass-usage.md +113 -0
- package/dist/agent-src/guidelines/agent-infra/carve-out-predicates.md +17 -0
- package/dist/agent-src/guidelines/agent-infra/comparison-matrix.md +179 -0
- package/dist/agent-src/guidelines/agent-infra/context-hygiene-mechanics.md +165 -0
- package/dist/agent-src/guidelines/agent-infra/corpus-grounding-authoring.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/critical-thinking.md +156 -0
- package/dist/agent-src/guidelines/agent-infra/cross-source-consistency-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/developer-judgment.md +82 -0
- package/dist/agent-src/guidelines/agent-infra/direct-answers-demos.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/domain-adoption-gates.md +112 -0
- package/dist/agent-src/guidelines/agent-infra/domain-eval-anti-pattern.md +53 -0
- package/dist/agent-src/guidelines/agent-infra/domain-pack-architecture.md +56 -0
- package/dist/agent-src/guidelines/agent-infra/downstream-changes-mechanics.md +91 -0
- package/dist/agent-src/guidelines/agent-infra/emphasis-budget.md +45 -0
- package/dist/agent-src/guidelines/agent-infra/engineering-memory-data-format.md +210 -0
- package/dist/agent-src/guidelines/agent-infra/evaluator-independence-mechanics.md +92 -0
- package/dist/agent-src/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/failure-signatures.md +70 -0
- package/dist/agent-src/guidelines/agent-infra/false-green.md +233 -0
- package/dist/agent-src/guidelines/agent-infra/first-principles.md +192 -0
- package/dist/agent-src/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/frontier-reasoning-operating-profile.md +169 -0
- package/dist/agent-src/guidelines/agent-infra/gate-authoring.md +177 -0
- package/dist/agent-src/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/dist/agent-src/guidelines/agent-infra/installed-tools-manifest.md +142 -0
- package/dist/agent-src/guidelines/agent-infra/inversion-thinking.md +388 -0
- package/dist/agent-src/guidelines/agent-infra/ios-simulator-guide.md +378 -0
- package/dist/agent-src/guidelines/agent-infra/language-and-tone-examples.md +141 -0
- package/dist/agent-src/guidelines/agent-infra/layered-settings.md +317 -0
- package/dist/agent-src/guidelines/agent-infra/linked-projects-onboarding-gate.md +80 -0
- package/dist/agent-src/guidelines/agent-infra/mcp-request-signing.md +197 -0
- package/dist/agent-src/guidelines/agent-infra/memory-access.md +149 -0
- package/dist/agent-src/guidelines/agent-infra/mental-models.md +314 -0
- package/dist/agent-src/guidelines/agent-infra/minimal-safe-diff-mechanics.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/missing-tool-handling.md +66 -0
- package/dist/agent-src/guidelines/agent-infra/model-recommendation.md +101 -0
- package/dist/agent-src/guidelines/agent-infra/naming.md +69 -0
- package/dist/agent-src/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/dist/agent-src/guidelines/agent-infra/output-patterns.md +117 -0
- package/dist/agent-src/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
- package/dist/agent-src/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/dist/agent-src/guidelines/agent-infra/review-routing-data-format.md +143 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-deferred-resolution-provenance.md +54 -0
- package/dist/agent-src/guidelines/agent-infra/roadmap-progress-mechanics.md +274 -0
- package/dist/agent-src/guidelines/agent-infra/role-contracts.md +209 -0
- package/dist/agent-src/guidelines/agent-infra/role-mode-router.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/rule-body-migration-inventory.md +241 -0
- package/dist/agent-src/guidelines/agent-infra/rule-type-governance.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/runtime-layer.md +89 -0
- package/dist/agent-src/guidelines/agent-infra/scqa-framework.md +526 -0
- package/dist/agent-src/guidelines/agent-infra/security-lint-containment.md +121 -0
- package/dist/agent-src/guidelines/agent-infra/self-improvement-pipeline.md +134 -0
- package/dist/agent-src/guidelines/agent-infra/simplicity-and-goal-demos.md +211 -0
- package/dist/agent-src/guidelines/agent-infra/six-hats.md +353 -0
- package/dist/agent-src/guidelines/agent-infra/size-and-scope.md +229 -0
- package/dist/agent-src/guidelines/agent-infra/skill-quality-checklist.md +157 -0
- package/dist/agent-src/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/dist/agent-src/guidelines/agent-infra/symptom-driven-harvest-loop.md +104 -0
- package/dist/agent-src/guidelines/agent-infra/systems-thinking.md +220 -0
- package/dist/agent-src/guidelines/agent-infra/tool-description-as-policy.md +35 -0
- package/dist/agent-src/guidelines/agent-infra/tool-integration.md +73 -0
- package/dist/agent-src/guidelines/agent-infra/traceability-field-mechanics.md +50 -0
- package/dist/agent-src/guidelines/agent-infra/untrusted-input-spotlighting.md +166 -0
- package/dist/agent-src/guidelines/agent-infra/verify-before-complete-demos.md +128 -0
- package/dist/agent-src/guidelines/augment-portability-patterns.md +70 -0
- package/dist/agent-src/guidelines/code-clarity.md +350 -0
- package/dist/agent-src/guidelines/component-oriented-and-oop-development.md +189 -0
- package/dist/agent-src/guidelines/cross-role-handoff.md +127 -0
- package/dist/agent-src/guidelines/design-antipatterns-triggers.json +18 -0
- package/dist/agent-src/guidelines/design-antipatterns.md +327 -0
- package/dist/agent-src/guidelines/design-asset-discipline.md +38 -0
- package/dist/agent-src/guidelines/design-canon.md +63 -0
- package/dist/agent-src/guidelines/design-fidelity-mechanics.md +293 -0
- package/dist/agent-src/guidelines/design-fidelity-routing.md +78 -0
- package/dist/agent-src/guidelines/design-handover-extraction.md +117 -0
- package/dist/agent-src/guidelines/design-modes.md +143 -0
- package/dist/agent-src/guidelines/design-reconciliation.md +172 -0
- package/dist/agent-src/guidelines/docs/readme-size-and-splitting.md +209 -0
- package/dist/agent-src/guidelines/e2e/playwright.md +363 -0
- package/dist/agent-src/guidelines/gtm-handoff.md +114 -0
- package/dist/agent-src/guidelines/monorepo-antipatterns.md +141 -0
- package/dist/agent-src/guidelines/php/api-design.md +115 -0
- package/dist/agent-src/guidelines/php/artisan-commands.md +81 -0
- package/dist/agent-src/guidelines/php/blade-ui.md +78 -0
- package/dist/agent-src/guidelines/php/controllers.md +90 -0
- package/dist/agent-src/guidelines/php/database.md +194 -0
- package/dist/agent-src/guidelines/php/eloquent.md +208 -0
- package/dist/agent-src/guidelines/php/flux.md +80 -0
- package/dist/agent-src/guidelines/php/general.md +207 -0
- package/dist/agent-src/guidelines/php/git.md +164 -0
- package/dist/agent-src/guidelines/php/jobs.md +111 -0
- package/dist/agent-src/guidelines/php/livewire.md +71 -0
- package/dist/agent-src/guidelines/php/logging.md +79 -0
- package/dist/agent-src/guidelines/php/naming.md +89 -0
- package/dist/agent-src/guidelines/php/patterns/dependency-injection.md +57 -0
- package/dist/agent-src/guidelines/php/patterns/dtos.md +199 -0
- package/dist/agent-src/guidelines/php/patterns/events.md +67 -0
- package/dist/agent-src/guidelines/php/patterns/factory.md +53 -0
- package/dist/agent-src/guidelines/php/patterns/pipelines.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/policies.md +66 -0
- package/dist/agent-src/guidelines/php/patterns/repositories.md +122 -0
- package/dist/agent-src/guidelines/php/patterns/service-layer.md +64 -0
- package/dist/agent-src/guidelines/php/patterns/strategy.md +247 -0
- package/dist/agent-src/guidelines/php/patterns.md +28 -0
- package/dist/agent-src/guidelines/php/performance.md +92 -0
- package/dist/agent-src/guidelines/php/php-coding-patterns.md +80 -0
- package/dist/agent-src/guidelines/php/resources.md +100 -0
- package/dist/agent-src/guidelines/php/security.md +110 -0
- package/dist/agent-src/guidelines/php/sql.md +97 -0
- package/dist/agent-src/guidelines/php/validations.md +119 -0
- package/dist/agent-src/guidelines/php/websocket.md +100 -0
- package/dist/agent-src/guidelines/prompt-templates.md +189 -0
- package/dist/agent-src/guidelines/redundancy-taxonomy.md +208 -0
- package/dist/agent-src/guidelines/wing4-handoff.md +127 -0
- package/dist/agent-src/personas/README.md +1 -1
- package/dist/agent-src/personas/_template-specialist/persona.md +1 -1
- package/dist/agent-src/personas/product-owner.md +1 -1
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/ask-when-uncertain.md +2 -2
- package/dist/agent-src/rules/brand-source-of-truth.md +9 -7
- package/dist/agent-src/rules/code-comment-discipline.md +2 -2
- package/dist/agent-src/rules/code-provenance.md +1 -1
- package/dist/agent-src/rules/content-quoting-floor.md +1 -1
- package/dist/agent-src/rules/context-hygiene.md +5 -5
- package/dist/agent-src/rules/cross-source-consistency.md +1 -1
- package/dist/agent-src/rules/design-fidelity.md +36 -46
- package/dist/agent-src/rules/direct-answers.md +2 -2
- package/dist/agent-src/rules/domain-adoption-policy.md +1 -1
- package/dist/agent-src/rules/evaluator-independence.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/icon-consistency.md +5 -1
- package/dist/agent-src/rules/improve-before-implement.md +1 -1
- package/dist/agent-src/rules/language-and-tone.md +3 -3
- package/dist/agent-src/rules/minimal-safe-diff.md +1 -1
- package/dist/agent-src/rules/notes-first-reasoning.md +36 -25
- package/dist/agent-src/rules/recurring-criticism.md +1 -1
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/role-mode-adherence.md +2 -2
- package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
- package/dist/agent-src/rules/size-enforcement.md +1 -1
- package/dist/agent-src/rules/source-confidentiality.md +2 -2
- package/dist/agent-src/rules/think-before-action.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +7 -5
- package/dist/agent-src/rules/ui-audit-gate.md +3 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +3 -3
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
- package/dist/agent-src/skills/activation-design/SKILL.md +2 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +5 -5
- package/dist/agent-src/skills/ai-council/SKILL.md +1 -1
- package/dist/agent-src/skills/ai-council/references/advanced-modes.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/blast-radius-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/brand-to-tokens/SKILL.md +24 -3
- package/dist/agent-src/skills/bug-analyzer/SKILL.md +1 -1
- package/dist/agent-src/skills/build-buy-partner/SKILL.md +1 -1
- package/dist/agent-src/skills/churn-prevention/SKILL.md +2 -2
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -1
- package/dist/agent-src/skills/code-refactoring/SKILL.md +3 -3
- package/dist/agent-src/skills/code-review/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/comp-banding/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-moat-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/competitive-positioning/SKILL.md +2 -2
- package/dist/agent-src/skills/complexity-first-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/content-funnel-design/SKILL.md +2 -2
- package/dist/agent-src/skills/contracts-cognition/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +2 -2
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +2 -2
- package/dist/agent-src/skills/customer-research/SKILL.md +2 -2
- package/dist/agent-src/skills/dashboard-design/SKILL.md +1 -1
- package/dist/agent-src/skills/data-handling-judgment/SKILL.md +1 -1
- package/dist/agent-src/skills/deal-qualification-meddic/SKILL.md +2 -2
- package/dist/agent-src/skills/decision-record/SKILL.md +3 -3
- package/dist/agent-src/skills/decision-review/SKILL.md +8 -8
- package/dist/agent-src/skills/deep-reading-analyst/SKILL.md +22 -22
- package/dist/agent-src/skills/design-intelligence/SKILL.md +4 -4
- package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +2 -2
- package/dist/agent-src/skills/design-review/SKILL.md +4 -4
- package/dist/agent-src/skills/design-system-capture/references/design-system-json.md +20 -1
- package/dist/agent-src/skills/design-tokens/SKILL.md +17 -2
- package/dist/agent-src/skills/design-variations/SKILL.md +2 -2
- package/dist/agent-src/skills/developer-like-execution/SKILL.md +2 -2
- package/dist/agent-src/skills/discovery-interview/SKILL.md +2 -2
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +3 -3
- package/dist/agent-src/skills/editorial-calendar/SKILL.md +2 -2
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +44 -1
- package/dist/agent-src/skills/existing-ui-audit/references/anti-slop-cross-reference.md +2 -2
- package/dist/agent-src/skills/expansion-playbook/SKILL.md +2 -2
- package/dist/agent-src/skills/experiment-loop/SKILL.md +1 -1
- package/dist/agent-src/skills/experiment-loop/references/protocol.md +1 -1
- package/dist/agent-src/skills/fe-design/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/references/design-patterns.md +1 -1
- package/dist/agent-src/skills/fe-design/references/design-read-and-memory.md +3 -3
- package/dist/agent-src/skills/fe-design/references/source-led-port.md +1 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +1 -1
- package/dist/agent-src/skills/flux/SKILL.md +1 -1
- package/dist/agent-src/skills/forecast-accuracy/SKILL.md +2 -2
- package/dist/agent-src/skills/forecasting/SKILL.md +2 -2
- package/dist/agent-src/skills/fundraising-narrative/SKILL.md +2 -2
- package/dist/agent-src/skills/funnel-analysis/SKILL.md +2 -2
- package/dist/agent-src/skills/git-workflow/references/push-closes-its-loop.md +9 -0
- package/dist/agent-src/skills/gtm-launch/SKILL.md +2 -2
- package/dist/agent-src/skills/hiring-loop-design/SKILL.md +1 -1
- package/dist/agent-src/skills/html-deck/SKILL.md +5 -5
- package/dist/agent-src/skills/humanizer/SKILL.md +1 -1
- package/dist/agent-src/skills/humanizer/data/patterns.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +3 -3
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/laravel-api-endpoint/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +3 -3
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +6 -6
- package/dist/agent-src/skills/livewire/SKILL.md +1 -1
- package/dist/agent-src/skills/market-entry-analysis/SKILL.md +1 -1
- package/dist/agent-src/skills/mcp-builder/SKILL.md +1 -1
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +3 -3
- package/dist/agent-src/skills/messaging-architecture/SKILL.md +2 -2
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/onboarding-design/SKILL.md +2 -2
- package/dist/agent-src/skills/onboarding-program/SKILL.md +1 -1
- package/dist/agent-src/skills/one-on-one-cadence/SKILL.md +1 -1
- package/dist/agent-src/skills/org-design/SKILL.md +1 -1
- package/dist/agent-src/skills/overbuild-review-lens/SKILL.md +3 -3
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/perf-feedback-craft/SKILL.md +1 -1
- package/dist/agent-src/skills/persona-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/php-coder/SKILL.md +1 -1
- package/dist/agent-src/skills/pipeline-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/playwright-testing/SKILL.md +3 -3
- package/dist/agent-src/skills/po-discovery/SKILL.md +1 -1
- package/dist/agent-src/skills/positioning-strategy/SKILL.md +2 -2
- package/dist/agent-src/skills/privacy-review/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +3 -3
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -2
- package/dist/agent-src/skills/receiving-code-review/SKILL.md +1 -1
- package/dist/agent-src/skills/refine-ticket/SKILL.md +2 -2
- package/dist/agent-src/skills/release-comms/SKILL.md +2 -2
- package/dist/agent-src/skills/retention-loops/SKILL.md +2 -2
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/roadmap-management/SKILL.md +1 -1
- package/dist/agent-src/skills/roadmap-management/references/archival.md +1 -1
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/rule-writing/SKILL.md +6 -6
- package/dist/agent-src/skills/runway-cognition/SKILL.md +2 -2
- package/dist/agent-src/skills/scenario-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-writing/references/procedure.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/section-patterns.md +3 -3
- package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/stakeholder-tradeoff/SKILL.md +3 -3
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +60 -4
- package/dist/agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +1 -1
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +2 -2
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +28 -8
- package/dist/agent-src/skills/unit-economics-modeling/SKILL.md +2 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/skills/vision-articulation/SKILL.md +1 -1
- package/dist/agent-src/skills/voc-extract/SKILL.md +2 -2
- package/dist/agent-src/skills/voice-and-tone-design/SKILL.md +2 -2
- package/dist/agent-src/skills/wireframe/SKILL.md +1 -1
- package/dist/agent-src/skills/workspace-link/SKILL.md +1 -1
- package/dist/agent-src/templates/agent-settings.md +6 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/contexts/knowledge-pages.md +2 -3
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/roadmaps.md +1 -1
- package/dist/agent-src/templates/scripts/README.md +2 -2
- package/dist/agent-src/user-types/_template/user-type.md +1 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +52 -4
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/{chunk-TGIPZBCW.js → chunk-2KKXJW25.js} +22 -8
- package/dist/cli-delegate/{chunk-NLP54U3J.js → chunk-2XY7ILBT.js} +13 -1
- package/dist/cli-delegate/{chunk-4FS4WRXP.js → chunk-3FKR64R5.js} +34 -6
- package/dist/cli-delegate/{chunk-J3RFNKG4.js → chunk-55ACLDUE.js} +2 -2
- package/dist/cli-delegate/{chunk-PKOBQADP.js → chunk-57PN4GYJ.js} +1 -1
- package/dist/cli-delegate/{chunk-BIXEDQPZ.js → chunk-AK6HODNQ.js} +4 -4
- package/dist/cli-delegate/{chunk-2FTMENJL.js → chunk-GYC3VRYN.js} +1 -1
- package/dist/cli-delegate/{chunk-LWTYTX6F.js → chunk-HZ52BRGG.js} +24 -18
- package/dist/cli-delegate/{chunk-6RJA2F5A.js → chunk-IVBPRCQO.js} +1 -1
- package/dist/cli-delegate/{chunk-I6RHFQEG.js → chunk-YUM5KURG.js} +17 -1
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +3 -3
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_explain.js +2 -2
- package/dist/cli-delegate/cmd_export.js +4 -4
- package/dist/cli-delegate/cmd_handoff.js +24 -16
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +1 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +4 -4
- package/dist/cli-delegate/cmd_route_audit.js +3 -3
- package/dist/cli-delegate/cmd_route_explain.js +1 -1
- package/dist/cli-delegate/cmd_session_recycle.js +4 -14
- package/dist/cli-delegate/cmd_settings_get.js +15 -9
- package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
- package/dist/cli-delegate/cmd_settings_set.js +41 -11
- package/dist/cli-delegate/cmd_sync.js +4 -4
- package/dist/cli-delegate/cmd_uninstall.js +4 -4
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +1 -1
- package/dist/cli-delegate/cmd_validate.js +4 -4
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +27 -80
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +5 -7
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +4 -6
- package/dist/hooks/dispatch.js +9249 -8981
- package/dist/install/install.mjs +47 -8
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +5496 -2400
- package/dist/router.json +1 -1
- package/dist/scripts/_lib/agent_settings.js +73 -0
- package/dist/scripts/_lib/agent_src.js +20 -0
- package/dist/scripts/_lib/guidelines_lane.js +158 -0
- package/dist/scripts/_lib/lean_projection_mode.js +108 -0
- package/dist/scripts/_lib/router_match.js +243 -0
- package/dist/scripts/_lib/rule_injection.js +216 -0
- package/dist/scripts/condense.js +22 -25
- package/dist/scripts/project_thin_rules.js +139 -19
- package/dist/server/io/yamlIO.js +125 -17
- package/dist/server/schemas/settings.js +32 -5
- package/dist/shared/settingsSurface.js +6 -1
- package/docs/MIGRATION.md +56 -0
- package/docs/contracts/settings-classes.md +48 -7
- package/docs/guidelines/abstraction-thresholds.md +35 -0
- package/docs/guidelines/agent-infra/active-remediation-mechanics.md +3 -3
- package/docs/guidelines/agent-infra/false-green.md +2 -2
- package/docs/guidelines/agent-infra/notes-horizon-mechanics.md +90 -0
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +1 -1
- package/docs/guidelines/design-fidelity-mechanics.md +4 -0
- package/docs/guidelines/design-fidelity-routing.md +78 -0
- package/docs/guidelines/design-reconciliation.md +172 -0
- package/docs/guidelines/gtm-handoff.md +2 -2
- package/docs/guidelines/wing4-handoff.md +2 -2
- package/llms.txt +1 -1
- package/package.json +7 -3
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +106 -4
- package/src/config/agent-settings.template.yml +94 -1
- package/src/config/ci-local-parity.yml +34 -0
- package/src/config/continuity-surface.json +8 -29
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +31 -8
- package/src/config/gate-reachability-exemptions.json +1 -0
- package/src/config/gate-violation-baselines.json +3 -3
- package/src/config/hook-token-budget.json +8 -7
- package/src/config/host-injection-effect.json +2 -2
- package/src/config/pack-size-budget.json +55 -4
- package/src/config/packed-binary-manifest.json +1 -1
- package/src/config/platform-anchor.json +47 -0
- package/src/config/preamble-payload-budget.json +2 -3
- package/src/config/publish-surface.json +4 -2
- package/src/config/ratification-policy.json +7 -0
- package/src/config/routing-coverage-seed.json +9 -2
- package/src/config/rule-stub-ceilings.json +16 -9
- package/src/scripts/_cli/cmd_session_recycle.ts +2 -25
- package/src/scripts/_cli/cmd_settings_get.ts +22 -7
- package/src/scripts/_cli/handoff_sessions.ts +14 -44
- package/src/scripts/_lib/agent_settings.ts +85 -0
- package/src/scripts/_lib/agent_src.ts +21 -0
- package/src/scripts/_lib/artifact_maturity.ts +242 -0
- package/src/scripts/_lib/conformance_report.ts +403 -0
- package/src/scripts/_lib/continuity_slot.ts +295 -0
- package/src/scripts/_lib/continuity_writer.ts +312 -0
- package/src/scripts/_lib/design_system_import.ts +20 -0
- package/src/scripts/_lib/design_tolerance.ts +281 -0
- package/src/scripts/_lib/guidelines_lane.ts +164 -0
- package/src/scripts/_lib/hook_settings.ts +85 -0
- package/src/scripts/_lib/lean_projection_mode.ts +127 -0
- package/src/scripts/_lib/obligation_frequency.ts +2 -3
- package/src/scripts/_lib/packed_binary_predicate.ts +37 -0
- package/src/scripts/_lib/platform_anchor.ts +1053 -0
- package/src/scripts/_lib/ratification_artifact.ts +278 -0
- package/src/scripts/_lib/recycle_envelope_paths.ts +109 -21
- package/src/scripts/_lib/regression_neighbourhood.ts +159 -22
- package/src/scripts/_lib/security_lint.ts +23 -2
- package/src/scripts/_lib/self_repair.ts +21 -0
- package/src/scripts/_lib/session_eol.ts +44 -0
- package/src/scripts/_lib/session_index_trust.ts +387 -0
- package/src/scripts/_lib/standing_bound_ratchet.ts +220 -0
- package/src/scripts/_lib/tolerance_shadow.ts +177 -0
- package/src/scripts/_lib/vendored_grammar_upstream.ts +280 -0
- package/src/scripts/ai_council/redact_low_impact_entry.ts +8 -0
- package/src/scripts/audit_mcp_tools.ts +69 -25
- package/src/scripts/autonomy_friction_traffic.ts +379 -0
- package/src/scripts/build_mcp_catalog.ts +24 -1
- package/src/scripts/check_host_tree_parity.ts +291 -0
- package/src/scripts/check_kernel_edit_ratified.ts +462 -0
- package/src/scripts/check_loss_class_declared.ts +793 -46
- package/src/scripts/check_platform_anchor.ts +390 -0
- package/src/scripts/check_preamble_payload_budget.ts +424 -7
- package/src/scripts/check_projected_rule_routes.ts +395 -0
- package/src/scripts/check_rule_projection_integrity.ts +102 -2
- package/src/scripts/ci_settle.ts +205 -5
- package/src/scripts/code_graph/build.ts +79 -0
- package/src/scripts/code_graph/cli.ts +264 -7
- package/src/scripts/code_graph/detect.ts +38 -0
- package/src/scripts/code_graph/query.ts +25 -2
- package/src/scripts/code_graph/sqlite_store.ts +16 -1
- package/src/scripts/code_graph/types.ts +52 -3
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +590 -0
- package/src/scripts/condense.ts +22 -26
- package/src/scripts/generate_host_cost_table.ts +354 -0
- package/src/scripts/handoff_context_hook.ts +39 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +59 -28
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +182 -16
- package/src/scripts/hooks/category_a.ts +1 -1
- package/src/scripts/hooks/chain_nudge_hook.ts +311 -25
- package/src/scripts/hooks/code_graph_context_hook.ts +7 -18
- package/src/scripts/hooks/push_settle_hook.ts +3 -2
- package/src/scripts/hooks/rule_inject_hook.ts +107 -20
- package/src/scripts/hooks/session_eol_hook.ts +177 -145
- package/src/scripts/hooks/source_first_gate_hook.ts +12 -0
- package/src/scripts/hooks/ui_route_nudge_hook.ts +52 -15
- package/src/scripts/hot_context_hook.ts +103 -408
- package/src/scripts/lint_evidence_artifacts.ts +1 -0
- package/src/scripts/lint_knowledge_scale.ts +0 -26
- package/src/scripts/lint_roadmap_blockers.ts +164 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +152 -2
- package/src/scripts/mcp_server/graph_tools.ts +294 -0
- package/src/scripts/mcp_server/path_util.ts +31 -0
- package/src/scripts/mcp_server/tool_catalog_source.ts +7 -1
- package/src/scripts/mcp_server/tools.ts +3 -13
- package/src/scripts/memory_lookup.ts +9 -9
- package/src/scripts/model_rule_injection.ts +61 -4
- package/src/scripts/project_thin_rules.ts +149 -16
- package/src/scripts/report_standing_payload_by_host.ts +650 -0
- package/src/scripts/schemas/agent-settings.schema.json +7 -1
- package/src/scripts/session_memory_index.ts +86 -8
- package/src/scripts/sync_agent_settings.ts +270 -10
- package/src/server/io/yamlIO.ts +127 -17
- package/src/server/schemas/settings.ts +45 -6
- package/src/shared/settingsSurface.ts +13 -2
- package/src/templates/compact-instructions.md +8 -3
- package/src/vendor/grammars/README.md +27 -2
- package/dist/agent-src/commands/chat-history/import.md +0 -170
- package/dist/agent-src/commands/chat-history.md +0 -63
|
@@ -33,6 +33,14 @@
|
|
|
33
33
|
* 7. Business-context SQL identifiers — caller-supplied table / column
|
|
34
34
|
* allow-list. Default empty.
|
|
35
35
|
* 8. Inline code excerpts > 40 chars — any backtick-fenced run > 40.
|
|
36
|
+
*
|
|
37
|
+
* loss_class: exact
|
|
38
|
+
*
|
|
39
|
+
* Named despite the module's name: the redactor never rewrites. It returns a
|
|
40
|
+
* {@link RedactionResult} verdict and the caller refuses, so no byte of the
|
|
41
|
+
* input is dropped or replaced here — "a rewritten secret is still a leaked
|
|
42
|
+
* secret". `exact` is the class that says nothing is lost, and it is what this
|
|
43
|
+
* module guarantees its callers.
|
|
36
44
|
*/
|
|
37
45
|
|
|
38
46
|
import { _RAW_KEY_PREFIXES } from './config.js';
|
|
@@ -29,6 +29,30 @@ const _HERE = fileURLToPath(import.meta.url);
|
|
|
29
29
|
export const ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
30
30
|
export const CATALOG = path.join(ROOT, 'src/scripts/mcp_server/consumer_tool_catalog.json');
|
|
31
31
|
export const TOOLS_TS = path.join(ROOT, 'src/scripts/mcp_server/tools.ts');
|
|
32
|
+
/**
|
|
33
|
+
* Modules that contribute records to `ALLOWLIST` from OUTSIDE `tools.ts`.
|
|
34
|
+
*
|
|
35
|
+
* `tools.ts` sits past the source-size ceiling, so a tool family whose records
|
|
36
|
+
* would cost ~250 units of excess there is defined in its own module and spread
|
|
37
|
+
* into the allowlist. This generator indexed `tools.ts` alone, so the five
|
|
38
|
+
* `graph_*` tools rendered `_stub-only_` in the published inventory — the doc
|
|
39
|
+
* asserting the exact opposite of the catalogue's own `implemented_on: ["stdio"]`,
|
|
40
|
+
* and `--check` staying green because it compared the doc against its own wrong
|
|
41
|
+
* render. Found by an independent review.
|
|
42
|
+
*
|
|
43
|
+
* A LIST rather than a directory walk: a walk would silently pick up any future
|
|
44
|
+
* file with a matching shape, and the point of this index is to say where a
|
|
45
|
+
* handler actually is. Adding a family here is one line in the same change that
|
|
46
|
+
* adds the family.
|
|
47
|
+
*/
|
|
48
|
+
export const HANDLER_MODULES: readonly { file: string; label: string; block: string }[] = [
|
|
49
|
+
{ file: path.join(ROOT, 'src/scripts/mcp_server/tools.ts'), label: 'tools.ts', block: 'export const ALLOWLIST' },
|
|
50
|
+
{
|
|
51
|
+
file: path.join(ROOT, 'src/scripts/mcp_server/graph_tools.ts'),
|
|
52
|
+
label: 'graph_tools.ts',
|
|
53
|
+
block: 'export const GRAPH_TOOLS',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
32
56
|
export const OUT = path.join(ROOT, 'docs/contracts/mcp-tool-inventory.md');
|
|
33
57
|
|
|
34
58
|
// Match `<name>: {` entries at 4-space indent inside the TS ALLOWLIST record
|
|
@@ -71,28 +95,36 @@ function _relativeToRoot(p: string): string {
|
|
|
71
95
|
return path.relative(ROOT, p).split(path.sep).join('/');
|
|
72
96
|
}
|
|
73
97
|
|
|
74
|
-
function _index_handlers(): Map<string, number> {
|
|
75
|
-
const out = new Map<string, number>();
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
const line = lines[idx] as string;
|
|
82
|
-
if (line.startsWith('export const ALLOWLIST')) {
|
|
83
|
-
inAllowlist = true;
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (inAllowlist && line.startsWith('};')) {
|
|
87
|
-
inAllowlist = false;
|
|
88
|
-
continue;
|
|
89
|
-
}
|
|
90
|
-
if (!inAllowlist) {
|
|
98
|
+
function _index_handlers(): Map<string, { label: string; line: number }> {
|
|
99
|
+
const out = new Map<string, { label: string; line: number }>();
|
|
100
|
+
for (const mod of HANDLER_MODULES) {
|
|
101
|
+
let text: string;
|
|
102
|
+
try {
|
|
103
|
+
text = fs.readFileSync(mod.file, 'utf-8');
|
|
104
|
+
} catch {
|
|
91
105
|
continue;
|
|
92
106
|
}
|
|
93
|
-
const
|
|
94
|
-
|
|
95
|
-
|
|
107
|
+
const lines = _splitlines(text);
|
|
108
|
+
// Only index entries inside the module's own registration block.
|
|
109
|
+
let inBlock = false;
|
|
110
|
+
for (let idx = 0; idx < lines.length; idx += 1) {
|
|
111
|
+
const i = idx + 1;
|
|
112
|
+
const line = lines[idx] as string;
|
|
113
|
+
if (line.startsWith(mod.block)) {
|
|
114
|
+
inBlock = true;
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (inBlock && line.startsWith('};')) {
|
|
118
|
+
inBlock = false;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (!inBlock) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const m = HANDLER_RE.exec(line);
|
|
125
|
+
if (m) {
|
|
126
|
+
out.set(m[1] as string, { label: mod.label, line: i });
|
|
127
|
+
}
|
|
96
128
|
}
|
|
97
129
|
}
|
|
98
130
|
return out;
|
|
@@ -117,7 +149,11 @@ function _joinSorted(obj: Map<string, number>): string {
|
|
|
117
149
|
return keys.map((k) => `${k}=${obj.get(k)}`).join(', ');
|
|
118
150
|
}
|
|
119
151
|
|
|
120
|
-
function _render(
|
|
152
|
+
function _render(
|
|
153
|
+
catalog: Catalog,
|
|
154
|
+
handlers: Map<string, { label: string; line: number }>,
|
|
155
|
+
cat_lines: Map<string, number>,
|
|
156
|
+
): string {
|
|
121
157
|
const tools = catalog.tools;
|
|
122
158
|
const total = tools.length;
|
|
123
159
|
const by_transport = new Map<string, number>();
|
|
@@ -145,7 +181,14 @@ function _render(catalog: Catalog, handlers: Map<string, number>, cat_lines: Map
|
|
|
145
181
|
lines.push('');
|
|
146
182
|
lines.push('# MCP tool inventory');
|
|
147
183
|
lines.push('');
|
|
148
|
-
|
|
184
|
+
// A BARE command name, and deliberately not a link to this file: an
|
|
185
|
+
// independent review flagged the previous `../../audit_mcp_tools` as a
|
|
186
|
+
// path that resolves nowhere and proposed `src/scripts/audit_mcp_tools.ts`.
|
|
187
|
+
// That fix is refused by `generated_by.test.ts` § 1.4, which forbids a
|
|
188
|
+
// generated artifact from hard-coding its generator's script path — the
|
|
189
|
+
// broken link and the literal path are two wrong answers, and the
|
|
190
|
+
// replacement form the rule names is the runnable command.
|
|
191
|
+
lines.push('> Generated by `audit_mcp_tools`. Do not edit.');
|
|
149
192
|
lines.push('> from the source-of-truth catalog');
|
|
150
193
|
lines.push('> [`src/scripts/mcp_server/consumer_tool_catalog.json`](../../src/scripts/mcp_server/consumer_tool_catalog.json).');
|
|
151
194
|
lines.push('> Do **not** hand-edit; rerun `./scripts-run src/scripts/audit_mcp_tools --write`.');
|
|
@@ -172,10 +215,10 @@ function _render(catalog: Catalog, handlers: Map<string, number>, cat_lines: Map
|
|
|
172
215
|
cat_line !== undefined
|
|
173
216
|
? `[\`consumer_tool_catalog.json:${cat_line}\`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L${cat_line})`
|
|
174
217
|
: '_missing_';
|
|
175
|
-
const
|
|
218
|
+
const h = handlers.get(name);
|
|
176
219
|
const h_cite =
|
|
177
|
-
|
|
178
|
-
? `[
|
|
220
|
+
h !== undefined
|
|
221
|
+
? `[\`${h.label}:${h.line}\`](../../src/scripts/mcp_server/${h.label}#L${h.line})`
|
|
179
222
|
: '_stub-only_';
|
|
180
223
|
lines.push(`| \`${name}\` | \`${side}\` | ${transports} | ${cat_cite} | ${h_cite} |`);
|
|
181
224
|
}
|
|
@@ -240,6 +283,7 @@ export function main(argv: string[] | null = null): number {
|
|
|
240
283
|
candidates: [
|
|
241
284
|
path.posix.join('src', 'scripts', 'mcp_server', 'consumer_tool_catalog.json'),
|
|
242
285
|
path.posix.join('src', 'scripts', 'mcp_server', 'tools.ts'),
|
|
286
|
+
path.posix.join('src', 'scripts', 'mcp_server', 'graph_tools.ts'),
|
|
243
287
|
],
|
|
244
288
|
repoRoot: ROOT,
|
|
245
289
|
});
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* autonomy_friction_traffic — what share of REAL Bash traffic this package
|
|
3
|
+
* can spare a host confirmation, and what the rest is shaped like.
|
|
4
|
+
*
|
|
5
|
+
* WHY A SECOND FRICTION INSTRUMENT. `autonomy_friction_corpus` measures seven
|
|
6
|
+
* declared payload classes through the real dispatcher: it answers "does the
|
|
7
|
+
* classifier behave as designed" and it answers it exactly. What it cannot
|
|
8
|
+
* answer is "how much of what the agent actually types does the design
|
|
9
|
+
* cover", because a hand-written corpus contains the shapes its author
|
|
10
|
+
* thought of. That number turned out to be the one that mattered: measured
|
|
11
|
+
* over 7,569 distinct real Bash calls in 39 transcripts on 2026-09-10,
|
|
12
|
+
* category A covered 126 of them — 1.7 %.
|
|
13
|
+
*
|
|
14
|
+
* WHAT IT MEASURES, STATED NARROWLY. Three things, over a transcript store:
|
|
15
|
+
* the share of Bash calls that are category A (the calls this package hands
|
|
16
|
+
* the host an explicit `permissionDecision: allow` for); which disqualifier
|
|
17
|
+
* each remaining call hits FIRST; and how many carry one of the two shapes
|
|
18
|
+
* the chain-nudge concern flags. It is NOT a measurement of confirmations the
|
|
19
|
+
* operator saw. The host's own permission documentation records that
|
|
20
|
+
* `permissions.allow` does not bypass the auto-mode classifier, so a consumer
|
|
21
|
+
* whose settings already allow a call may see no prompt for a call counted
|
|
22
|
+
* here as uncovered, and a call inside category A may still be classified by
|
|
23
|
+
* the host. Reading this as host behaviour is the
|
|
24
|
+
* fact-about-our-plumbing-written-as-a-fact-about-the-host collapse the hook
|
|
25
|
+
* contract warns about three times.
|
|
26
|
+
*
|
|
27
|
+
* NOT A GATE. It has no baseline and fails nothing. A gate over this number
|
|
28
|
+
* would ratchet a figure that moves with how the operator happened to work
|
|
29
|
+
* that week, which is a measurement of the week and not of the tree. Exit 1
|
|
30
|
+
* means the store was unreadable or empty — a probe that reports zeros from
|
|
31
|
+
* an absent store is worse than one that refuses.
|
|
32
|
+
*
|
|
33
|
+
* SHARED DETECTORS, NOT A SECOND COPY. The avoidable-shape counts come from
|
|
34
|
+
* the concern's own exported `detectEditByShell` / `detectChaining`, and the
|
|
35
|
+
* metacharacter class is `category_a`'s own exported constant, so a change to
|
|
36
|
+
* either moves this report and the live carrier together. A private copy here
|
|
37
|
+
* would let the two drift and the report would then describe a carrier that
|
|
38
|
+
* does not exist — the first draft held exactly such a copy, and it computed
|
|
39
|
+
* the split the whole report turns on.
|
|
40
|
+
*
|
|
41
|
+
* WHAT MAKES A FIGURE FROM THIS PROBE COMPARABLE. Two properties, both of
|
|
42
|
+
* which the first draft lacked. Calls are deduplicated by tool-use id, because
|
|
43
|
+
* a resumed session rewrites its earlier turns into a new transcript and a
|
|
44
|
+
* window of files therefore counts them twice. And the running session's own
|
|
45
|
+
* transcript is excluded by default, because every call the probe itself makes
|
|
46
|
+
* lands in a file it is about to read — two runs minutes apart reported 7,518
|
|
47
|
+
* and 7,653 for the same tree before that. What remains uncontrolled is the
|
|
48
|
+
* window: `--limit 40` names the 40 most recent transcripts, and which files
|
|
49
|
+
* those are moves as new sessions appear. So pin the DATE with the figure and
|
|
50
|
+
* read a later run as measuring the window as well as the tree.
|
|
51
|
+
*
|
|
52
|
+
* Usage:
|
|
53
|
+
* ./scripts-run src/scripts/autonomy_friction_traffic [--store DIR] [--limit N] [--json]
|
|
54
|
+
* … [--include-current] include the running session's own transcript
|
|
55
|
+
*/
|
|
56
|
+
import * as fs from "node:fs";
|
|
57
|
+
import * as os from "node:os";
|
|
58
|
+
import * as path from "node:path";
|
|
59
|
+
import process from "node:process";
|
|
60
|
+
import { fileURLToPath } from "node:url";
|
|
61
|
+
|
|
62
|
+
import { detectChaining, detectEditByShell } from "./hooks/chain_nudge_hook.js";
|
|
63
|
+
import {
|
|
64
|
+
isCategoryABashCommand,
|
|
65
|
+
namesConsequenceOperation,
|
|
66
|
+
SHELL_METACHARACTERS,
|
|
67
|
+
} from "./hooks/category_a.js";
|
|
68
|
+
|
|
69
|
+
// Re-exported so a test can assert this module refuses on the CLASSIFIER's
|
|
70
|
+
// metacharacter set rather than on a copy of it. The first draft held a private
|
|
71
|
+
// regex literal here while the header claimed shared detectors, and that copy
|
|
72
|
+
// computed the split the whole report turns on.
|
|
73
|
+
export { SHELL_METACHARACTERS };
|
|
74
|
+
|
|
75
|
+
/** How many transcripts to read when `--limit` is absent. */
|
|
76
|
+
const DEFAULT_LIMIT = 40;
|
|
77
|
+
|
|
78
|
+
/** One measured report. */
|
|
79
|
+
export interface TrafficReport {
|
|
80
|
+
store: string;
|
|
81
|
+
transcripts: number;
|
|
82
|
+
calls: number;
|
|
83
|
+
categoryA: number;
|
|
84
|
+
/** First disqualifier for each non-category-A call. */
|
|
85
|
+
disqualifiers: Record<string, number>;
|
|
86
|
+
/** Head token → count, for non-category-A calls only. */
|
|
87
|
+
heads: Record<string, number>;
|
|
88
|
+
/** The chain-nudge shape classes, counted over every call. */
|
|
89
|
+
shapes: { editByShell: number; chain: number };
|
|
90
|
+
/** Which write shapes, in the concern's own words. */
|
|
91
|
+
editShapes: Record<string, number>;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** One Bash call, with the tool-use id that identifies it across files. */
|
|
95
|
+
export interface BashCall {
|
|
96
|
+
/** The host's `tool_use` id, or `""` when the record carries none. */
|
|
97
|
+
id: string;
|
|
98
|
+
command: string;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Every Bash call in one transcript's text.
|
|
103
|
+
*
|
|
104
|
+
* Line-delimited JSON, one record per line, so a malformed line is skipped
|
|
105
|
+
* rather than costing the file. The `"Bash"` pre-filter is a cheap reject: a
|
|
106
|
+
* transcript is megabytes and most lines carry no tool call at all.
|
|
107
|
+
*
|
|
108
|
+
* The id comes out with the command because a resumed session writes a new
|
|
109
|
+
* transcript carrying the earlier turns again — counting a window of files
|
|
110
|
+
* therefore counts some calls twice, and the id is what tells the copies apart
|
|
111
|
+
* from two genuinely identical commands.
|
|
112
|
+
*/
|
|
113
|
+
export function extractCommands(text: string): BashCall[] {
|
|
114
|
+
const out: BashCall[] = [];
|
|
115
|
+
for (const line of text.split("\n")) {
|
|
116
|
+
if (!line.includes('"Bash"')) continue;
|
|
117
|
+
let rec: unknown;
|
|
118
|
+
try {
|
|
119
|
+
rec = JSON.parse(line) as unknown;
|
|
120
|
+
} catch {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const content = (rec as { message?: { content?: unknown } })?.message?.content;
|
|
124
|
+
if (!Array.isArray(content)) continue;
|
|
125
|
+
for (const block of content) {
|
|
126
|
+
const b = block as { type?: unknown; name?: unknown; id?: unknown; input?: { command?: unknown } };
|
|
127
|
+
if (b?.type !== "tool_use" || b?.name !== "Bash") continue;
|
|
128
|
+
if (typeof b.input?.command !== "string") continue;
|
|
129
|
+
out.push({ id: typeof b.id === "string" ? b.id : "", command: b.input.command });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return out;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The distinct calls in `calls`, keyed by tool-use id.
|
|
137
|
+
*
|
|
138
|
+
* A call with no id cannot be deduplicated and is kept — dropping it would
|
|
139
|
+
* silently shrink the denominator, and an over-count biases the report toward
|
|
140
|
+
* looking worse than it is, which is the safe direction for a friction figure.
|
|
141
|
+
*/
|
|
142
|
+
export function dedupeCalls(calls: readonly BashCall[]): string[] {
|
|
143
|
+
const seen = new Set<string>();
|
|
144
|
+
const out: string[] = [];
|
|
145
|
+
for (const call of calls) {
|
|
146
|
+
if (call.id) {
|
|
147
|
+
if (seen.has(call.id)) continue;
|
|
148
|
+
seen.add(call.id);
|
|
149
|
+
}
|
|
150
|
+
out.push(call.command);
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* The transcript of the session running this probe, if the host names one.
|
|
157
|
+
*
|
|
158
|
+
* Excluded by default. A probe whose window includes its own session measures
|
|
159
|
+
* the measurement: every call this run makes lands in the file it is reading,
|
|
160
|
+
* so two runs minutes apart report different totals for the same tree and the
|
|
161
|
+
* figure cannot be pinned. `--include-current` opts back in.
|
|
162
|
+
*/
|
|
163
|
+
export function currentSessionTranscript(store: string): string | null {
|
|
164
|
+
const id = process.env["CLAUDE_CODE_SESSION_ID"];
|
|
165
|
+
return id ? path.join(store, `${id}.jsonl`) : null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** The head token of a command, lower-cased, or `""`. */
|
|
169
|
+
export function headToken(command: string): string {
|
|
170
|
+
return (command.trim().split(/\s+/)[0] ?? "").toLowerCase();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Why this call is not category A, in one word.
|
|
175
|
+
*
|
|
176
|
+
* Only the FIRST disqualifier is reported, because that is the one a change
|
|
177
|
+
* would have to remove: a chained command whose head is also unlisted stays
|
|
178
|
+
* uncovered if only the head is added.
|
|
179
|
+
*
|
|
180
|
+
* The buckets mirror `category_a`'s own order of refusal, including the
|
|
181
|
+
* consequence-word check — without it `git push origin main` and `gh pr merge`
|
|
182
|
+
* landed in the head bucket, and a report saying "N fail on the head token"
|
|
183
|
+
* then counted operations that would be refused whatever the head list said.
|
|
184
|
+
*
|
|
185
|
+
* The last bucket is still an UPPER BOUND rather than an exact head count: a
|
|
186
|
+
* simple command can also be refused for a directory flag whose value escapes
|
|
187
|
+
* the working tree, and that case is not separable from here without
|
|
188
|
+
* reimplementing the argv walk. Read it as "refused after the shape and the
|
|
189
|
+
* operation were cleared", and never as "adding this head would cover it".
|
|
190
|
+
*/
|
|
191
|
+
export function firstDisqualifier(command: string): string {
|
|
192
|
+
if (!command.trim()) return "empty-command";
|
|
193
|
+
if (SHELL_METACHARACTERS.test(command)) return "shell-metacharacter";
|
|
194
|
+
if (namesConsequenceOperation(command)) return "names-a-consequence-operation";
|
|
195
|
+
return "not-an-allowlisted-operation";
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/** Classify a command set. Pure — the caller supplies the strings. */
|
|
199
|
+
export function classify(store: string, transcripts: number, commands: readonly string[]): TrafficReport {
|
|
200
|
+
const report: TrafficReport = {
|
|
201
|
+
store,
|
|
202
|
+
transcripts,
|
|
203
|
+
calls: commands.length,
|
|
204
|
+
categoryA: 0,
|
|
205
|
+
disqualifiers: {},
|
|
206
|
+
heads: {},
|
|
207
|
+
shapes: { editByShell: 0, chain: 0 },
|
|
208
|
+
editShapes: {},
|
|
209
|
+
};
|
|
210
|
+
for (const command of commands) {
|
|
211
|
+
const write = detectEditByShell(command);
|
|
212
|
+
if (write) {
|
|
213
|
+
report.shapes.editByShell += 1;
|
|
214
|
+
report.editShapes[write] = (report.editShapes[write] ?? 0) + 1;
|
|
215
|
+
} else if (detectChaining(command)) {
|
|
216
|
+
report.shapes.chain += 1;
|
|
217
|
+
}
|
|
218
|
+
if (isCategoryABashCommand(command)) {
|
|
219
|
+
report.categoryA += 1;
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
const why = firstDisqualifier(command);
|
|
223
|
+
report.disqualifiers[why] = (report.disqualifiers[why] ?? 0) + 1;
|
|
224
|
+
const head = headToken(command);
|
|
225
|
+
report.heads[head] = (report.heads[head] ?? 0) + 1;
|
|
226
|
+
}
|
|
227
|
+
return report;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/** The default transcript store for the checkout this file lives in. */
|
|
231
|
+
export function defaultStore(repoRoot: string): string {
|
|
232
|
+
const slug = repoRoot.replace(/\//g, "-");
|
|
233
|
+
return path.join(os.homedir(), ".claude", "projects", slug);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** The `--limit` most recently modified transcripts in `store`. */
|
|
237
|
+
export function transcriptPaths(store: string, limit: number): string[] {
|
|
238
|
+
let names: string[];
|
|
239
|
+
try {
|
|
240
|
+
names = fs.readdirSync(store);
|
|
241
|
+
} catch {
|
|
242
|
+
return [];
|
|
243
|
+
}
|
|
244
|
+
return names
|
|
245
|
+
.filter((n) => n.endsWith(".jsonl"))
|
|
246
|
+
.map((n) => path.join(store, n))
|
|
247
|
+
.map((p) => {
|
|
248
|
+
try {
|
|
249
|
+
return { p, m: fs.statSync(p).mtimeMs };
|
|
250
|
+
} catch {
|
|
251
|
+
return { p, m: 0 };
|
|
252
|
+
}
|
|
253
|
+
})
|
|
254
|
+
.sort((a, b) => b.m - a.m)
|
|
255
|
+
.slice(0, limit)
|
|
256
|
+
.map((x) => x.p);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/** Top `n` entries of a histogram, descending. */
|
|
260
|
+
function top(hist: Record<string, number>, n: number): Array<[string, number]> {
|
|
261
|
+
return Object.entries(hist)
|
|
262
|
+
.sort((a, b) => b[1] - a[1])
|
|
263
|
+
.slice(0, n);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
function pct(part: number, whole: number): string {
|
|
267
|
+
return whole === 0 ? "n/a" : `${((part / whole) * 100).toFixed(1)} %`;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function render(r: TrafficReport): string {
|
|
271
|
+
const lines: string[] = [];
|
|
272
|
+
lines.push("autonomy_friction_traffic — category-A coverage over real Bash traffic\n");
|
|
273
|
+
lines.push(` store ${r.store}`);
|
|
274
|
+
lines.push(` transcripts ${r.transcripts}`);
|
|
275
|
+
lines.push(` Bash calls ${r.calls}\n`);
|
|
276
|
+
lines.push(` category A (this package hands the host an allow) ${r.categoryA} (${pct(r.categoryA, r.calls)})`);
|
|
277
|
+
lines.push(` no allow emitted ${r.calls - r.categoryA} (${pct(r.calls - r.categoryA, r.calls)})\n`);
|
|
278
|
+
lines.push(" first disqualifier:");
|
|
279
|
+
for (const [k, v] of top(r.disqualifiers, 10)) lines.push(` ${String(v).padStart(6)} ${k}`);
|
|
280
|
+
lines.push("\n top head tokens among the uncovered:");
|
|
281
|
+
for (const [k, v] of top(r.heads, 15)) lines.push(` ${String(v).padStart(6)} ${k}`);
|
|
282
|
+
lines.push("\n chain-nudge shape classes (counted over every call):");
|
|
283
|
+
lines.push(` ${String(r.shapes.editByShell).padStart(6)} edit-by-shell (${pct(r.shapes.editByShell, r.calls)})`);
|
|
284
|
+
lines.push(` ${String(r.shapes.chain).padStart(6)} chain (${pct(r.shapes.chain, r.calls)})`);
|
|
285
|
+
for (const [k, v] of top(r.editShapes, 6)) lines.push(` ${String(v).padStart(4)} ${k}`);
|
|
286
|
+
lines.push("\n Not a gate: no baseline, fails nothing. See this file's header for what");
|
|
287
|
+
lines.push(" the number does and does not say about what the operator was prompted for.\n");
|
|
288
|
+
return `${lines.join("\n")}\n`;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* The value of `flag`, `undefined` when the flag is absent, `null` when it is
|
|
293
|
+
* present with no value.
|
|
294
|
+
*
|
|
295
|
+
* The three states are distinct because the caller must refuse the third. A
|
|
296
|
+
* valueless `--store` used to collapse into "absent" and fall back to the
|
|
297
|
+
* default store silently, which is the same class of defect as the `--limit`
|
|
298
|
+
* coercion beside it: an argument that silently changes the window.
|
|
299
|
+
*/
|
|
300
|
+
function argValue(argv: readonly string[], flag: string): string | null | undefined {
|
|
301
|
+
const i = argv.indexOf(flag);
|
|
302
|
+
if (i === -1) return undefined;
|
|
303
|
+
const value = argv[i + 1];
|
|
304
|
+
return value === undefined || value.startsWith("--") ? null : value;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export function main(argv: string[] = process.argv.slice(2)): number {
|
|
308
|
+
if (argv.includes("--help") || argv.includes("-h")) {
|
|
309
|
+
process.stdout.write(
|
|
310
|
+
"usage: autonomy_friction_traffic [--store DIR] [--limit N] [--json] [--include-current]\n" +
|
|
311
|
+
" Category-A coverage over the Bash calls in a transcript store,\n" +
|
|
312
|
+
" plus the shape classes the chain-nudge concern flags. Calls are\n" +
|
|
313
|
+
" deduplicated by tool-use id and the running session's own\n" +
|
|
314
|
+
" transcript is excluded unless --include-current is passed.\n" +
|
|
315
|
+
" Exit 1 when the store is unreadable or holds no Bash call.\n",
|
|
316
|
+
);
|
|
317
|
+
return 0;
|
|
318
|
+
}
|
|
319
|
+
const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
320
|
+
const storeArg = argValue(argv, "--store");
|
|
321
|
+
if (storeArg === null) {
|
|
322
|
+
process.stderr.write("autonomy_friction_traffic: --store needs a directory\n");
|
|
323
|
+
return 1;
|
|
324
|
+
}
|
|
325
|
+
const store = storeArg ?? defaultStore(repoRoot);
|
|
326
|
+
const limitRaw = argValue(argv, "--limit");
|
|
327
|
+
let limit = DEFAULT_LIMIT;
|
|
328
|
+
if (limitRaw !== undefined) {
|
|
329
|
+
const parsed = limitRaw === null ? NaN : Number(limitRaw);
|
|
330
|
+
// Validated rather than coerced: `--limit -5` silently dropped the
|
|
331
|
+
// five OLDEST transcripts through `Array.slice`, `--limit 0` reported
|
|
332
|
+
// an empty store as the reason, and a typo fell back to 40 without
|
|
333
|
+
// saying so. A window is the report's denominator; a wrong one is a
|
|
334
|
+
// wrong measurement wearing the right shape.
|
|
335
|
+
if (!Number.isInteger(parsed) || parsed < 1) {
|
|
336
|
+
process.stderr.write(`autonomy_friction_traffic: --limit must be a positive integer, got ${limitRaw ?? "no value"}\n`);
|
|
337
|
+
return 1;
|
|
338
|
+
}
|
|
339
|
+
limit = parsed;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
const current = argv.includes("--include-current") ? null : currentSessionTranscript(store);
|
|
343
|
+
const paths = transcriptPaths(store, limit).filter((p) => p !== current);
|
|
344
|
+
const calls: BashCall[] = [];
|
|
345
|
+
for (const p of paths) {
|
|
346
|
+
let text: string;
|
|
347
|
+
try {
|
|
348
|
+
text = fs.readFileSync(p, "utf8");
|
|
349
|
+
} catch {
|
|
350
|
+
continue;
|
|
351
|
+
}
|
|
352
|
+
calls.push(...extractCommands(text));
|
|
353
|
+
}
|
|
354
|
+
const commands = dedupeCalls(calls);
|
|
355
|
+
if (commands.length === 0) {
|
|
356
|
+
process.stderr.write(
|
|
357
|
+
`autonomy_friction_traffic: no Bash call found under ${store} ` +
|
|
358
|
+
`(${paths.length} transcript(s) read) — nothing measured\n`,
|
|
359
|
+
);
|
|
360
|
+
return 1;
|
|
361
|
+
}
|
|
362
|
+
const report = classify(store, paths.length, commands);
|
|
363
|
+
process.stdout.write(argv.includes("--json") ? `${JSON.stringify(report, null, 2)}\n` : render(report));
|
|
364
|
+
return 0;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
function _isCliEntry(): boolean {
|
|
368
|
+
const argv1 = process.argv[1];
|
|
369
|
+
if (argv1 === undefined) return false;
|
|
370
|
+
try {
|
|
371
|
+
return fs.realpathSync(argv1) === fs.realpathSync(fileURLToPath(import.meta.url));
|
|
372
|
+
} catch {
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (_isCliEntry()) {
|
|
378
|
+
process.exit(main());
|
|
379
|
+
}
|
|
@@ -163,7 +163,30 @@ export function _buildCatalog(): Record<string, unknown> {
|
|
|
163
163
|
return {
|
|
164
164
|
schema_version: 1,
|
|
165
165
|
description: CATALOG_DESCRIPTION,
|
|
166
|
-
|
|
166
|
+
// `agent-config mcp-server`, not an `npx` form — AI council 2026-09-08,
|
|
167
|
+
// 2/2 convergent (road-to-a-graph-that-is-shipped 4.2, Fork 3 option 5).
|
|
168
|
+
//
|
|
169
|
+
// Both npx shapes are unusable here and for different reasons.
|
|
170
|
+
// `npx -y <pkg>@<version> mcp-server` is what `docs/mcp-server.md:97`
|
|
171
|
+
// documents and what the pin rationale at `docs/mcp-server.md:82` argues
|
|
172
|
+
// for, but the step's own verify requires the literal `npx -y` to be
|
|
173
|
+
// ABSENT from this file. Dropping the `-y` to satisfy that makes npx
|
|
174
|
+
// PROMPT before installing a package that is not present, which in a
|
|
175
|
+
// non-interactive MCP client start is a hang rather than a prompt.
|
|
176
|
+
//
|
|
177
|
+
// The installed binary is what the setup docs lead with
|
|
178
|
+
// (`docs/setup/mcp-client-config.md:35`,
|
|
179
|
+
// `docs/getting-started-local-stdio.md:9` — "the turnkey path … one
|
|
180
|
+
// command"), is non-interactive, and resolves no dist-tag at all
|
|
181
|
+
// because it IS whatever the consumer installed. Its cost is stated in
|
|
182
|
+
// the catalog description rather than hidden: it assumes the package is
|
|
183
|
+
// on PATH.
|
|
184
|
+
//
|
|
185
|
+
// RECORDED CONFLICT, per the same council verdict: this step's verify
|
|
186
|
+
// and the docs' pinned form contradict each other directly — the test
|
|
187
|
+
// forbids the string the documentation recommends. That is a defect in
|
|
188
|
+
// one of the two, and it is named here rather than silently normalised.
|
|
189
|
+
install_hint_stdio: `${_packageName().split('/').pop() ?? 'agent-config'} mcp-server`,
|
|
167
190
|
tools: entries,
|
|
168
191
|
};
|
|
169
192
|
}
|