@event4u/agent-config 8.1.0 → 8.3.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 +3 -3
- package/CHANGELOG.md +83 -292
- package/MIGRATION.md +18 -0
- package/README.md +86 -3
- package/dist/agent-src/commands/agents/init.md +3 -3
- package/dist/agent-src/commands/chat-history/import.md +5 -5
- package/dist/agent-src/commands/chat-history.md +1 -1
- package/dist/agent-src/commands/condense.md +1 -1
- package/dist/agent-src/commands/context/create.md +1 -1
- package/dist/agent-src/commands/council/analysis.md +2 -2
- package/dist/agent-src/commands/council/default.md +3 -3
- package/dist/agent-src/commands/council/design.md +2 -2
- package/dist/agent-src/commands/council/optimize.md +1 -1
- package/dist/agent-src/commands/council/pr.md +2 -2
- package/dist/agent-src/commands/council.md +1 -1
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/ghostwriter/list.md +1 -1
- package/dist/agent-src/commands/ghostwriter/write.md +1 -1
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +2 -2
- package/dist/agent-src/commands/judge/on-diff.md +1 -1
- package/dist/agent-src/commands/judge/steps.md +3 -1
- package/dist/agent-src/commands/memory/add.md +2 -2
- package/dist/agent-src/commands/memory/learn-low-impact.md +1 -1
- package/dist/agent-src/commands/memory/load.md +1 -1
- package/dist/agent-src/commands/memory/mine-session.md +1 -1
- package/dist/agent-src/commands/memory/promote.md +1 -1
- package/dist/agent-src/commands/memory/propose.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/module/explore.md +3 -3
- package/dist/agent-src/commands/optimize/agents-dir.md +1 -1
- package/dist/agent-src/commands/optimize/skills.md +1 -1
- package/dist/agent-src/commands/optimize-project.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/project-analyze.md +1 -1
- package/dist/agent-src/commands/project-health.md +1 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +2 -2
- package/dist/agent-src/commands/roadmap/process-full.md +3 -1
- package/dist/agent-src/commands/roadmap/process-phase.md +4 -2
- package/dist/agent-src/commands/roadmap/process-step.md +3 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/sync-agent-settings.md +7 -7
- package/dist/agent-src/commands/sync-gitignore/fix.md +3 -3
- package/dist/agent-src/commands/sync-gitignore.md +4 -4
- package/dist/agent-src/commands/work.md +3 -3
- package/dist/agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +2 -2
- package/dist/agent-src/contexts/contracts/artifact-engagement-flow.md +1 -1
- package/dist/agent-src/contexts/contracts/command-suggestion-flow.md +8 -7
- package/dist/agent-src/contexts/execution/evidence-discipline.md +2 -2
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +9 -4
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +10 -9
- package/dist/agent-src/contexts/execution/verification-mechanics.md +13 -1
- package/dist/agent-src/packs/README.md +1 -1
- package/dist/agent-src/presets/README.md +1 -1
- package/dist/agent-src/profiles/README.md +1 -1
- package/dist/agent-src/rules/architecture.md +2 -2
- package/dist/agent-src/rules/context-hygiene.md +2 -2
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -1
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +1 -1
- package/dist/agent-src/rules/linked-projects-onboarding-gate.md +1 -1
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +3 -3
- package/dist/agent-src/rules/media-governance-routing.md +1 -1
- package/dist/agent-src/rules/no-roadmap-references.md +3 -3
- package/dist/agent-src/rules/preservation-guard.md +2 -2
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +6 -5
- package/dist/agent-src/rules/roadmap-progress-sync.md +3 -3
- package/dist/agent-src/rules/security-sensitive-stop.md +7 -9
- package/dist/agent-src/rules/source-confidentiality.md +1 -1
- package/dist/agent-src/rules/telegraph-speak.md +1 -1
- package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
- package/dist/agent-src/rules/ui-audit-gate.md +1 -1
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +22 -4
- package/dist/agent-src/scripts/update_roadmap_progress.ts +29 -1
- package/dist/agent-src/skills/accessibility-auditor/SKILL.md +3 -2
- package/dist/agent-src/skills/adr-create/SKILL.md +8 -6
- package/dist/agent-src/skills/agent-docs-writing/SKILL.md +1 -1
- package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +2 -2
- package/dist/agent-src/skills/ai-council/SKILL.md +15 -15
- package/dist/agent-src/skills/api-design/SKILL.md +1 -1
- package/dist/agent-src/skills/api-endpoint/SKILL.md +2 -1
- package/dist/agent-src/skills/authz-review/SKILL.md +1 -1
- package/dist/agent-src/skills/blade-ui/SKILL.md +11 -10
- package/dist/agent-src/skills/blameless-post-mortem/SKILL.md +9 -8
- package/dist/agent-src/skills/code-review/SKILL.md +3 -4
- package/dist/agent-src/skills/command-routing/SKILL.md +3 -3
- package/dist/agent-src/skills/command-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/condense-memory/SKILL.md +2 -2
- package/dist/agent-src/skills/context-authoring/SKILL.md +1 -1
- package/dist/agent-src/skills/context-document/SKILL.md +1 -1
- package/dist/agent-src/skills/copilot-agents-optimization/SKILL.md +1 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +16 -11
- package/dist/agent-src/skills/corpus-grounding/scripts/ground.ts +24 -3
- package/dist/agent-src/skills/dashboard-design/SKILL.md +2 -1
- package/dist/agent-src/skills/database/SKILL.md +2 -1
- package/dist/agent-src/skills/description-assist/SKILL.md +6 -6
- package/dist/agent-src/skills/design-intelligence/SKILL.md +6 -5
- package/dist/agent-src/skills/design-tokens/SKILL.md +5 -5
- package/dist/agent-src/skills/design-tokens/scripts/tokens.ts +24 -3
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +3 -3
- package/dist/agent-src/skills/fe-design/SKILL.md +7 -7
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +11 -4
- package/dist/agent-src/skills/flux/SKILL.md +10 -9
- package/dist/agent-src/skills/git-workflow/SKILL.md +4 -5
- package/dist/agent-src/skills/guideline-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/learning-to-rule-or-skill/SKILL.md +2 -2
- package/dist/agent-src/skills/livewire/SKILL.md +10 -9
- package/dist/agent-src/skills/memory-consolidation/SKILL.md +2 -2
- package/dist/agent-src/skills/module-detect-on-the-fly/SKILL.md +5 -5
- package/dist/agent-src/skills/module-management/SKILL.md +2 -2
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +11 -11
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/ev-fixtures.md +6 -6
- package/dist/agent-src/skills/prediction-pool-optimizer/reference/odds-and-bonus.md +1 -1
- package/dist/agent-src/skills/premortem/SKILL.md +1 -1
- package/dist/agent-src/skills/project-docs/SKILL.md +1 -1
- package/dist/agent-src/skills/quality-tools/SKILL.md +26 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +8 -7
- package/dist/agent-src/skills/react-shadcn-ui/scripts/shadcn_add.ts +31 -10
- package/dist/agent-src/skills/refine-prompt/SKILL.md +14 -14
- package/dist/agent-src/skills/refine-ticket/SKILL.md +24 -25
- package/dist/agent-src/skills/refine-ticket/detection-map.yml +1 -1
- package/dist/agent-src/skills/review-routing/SKILL.md +6 -7
- package/dist/agent-src/skills/roadmap-management/SKILL.md +11 -6
- package/dist/agent-src/skills/rule-refactor/SKILL.md +1 -1
- package/dist/agent-src/skills/rule-writing/SKILL.md +5 -5
- package/dist/agent-src/skills/script-writing/SKILL.md +28 -41
- package/dist/agent-src/skills/skill-writing/SKILL.md +3 -3
- package/dist/agent-src/skills/source-discovery/SKILL.md +3 -3
- package/dist/agent-src/skills/sql-writing/SKILL.md +2 -1
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +1 -1
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +5 -7
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/scripts/tailwind_config_gen.ts +25 -4
- package/dist/agent-src/skills/token-optimizer/SKILL.md +1 -1
- package/dist/agent-src/skills/typography-system/SKILL.md +1 -1
- package/dist/agent-src/skills/validate-feature-fit/SKILL.md +5 -7
- package/dist/agent-src/skills/verify-completion-evidence/SKILL.md +13 -1
- package/dist/agent-src/templates/agent-settings.md +34 -25
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +3 -3
- package/dist/agent-src/templates/agents/memory/incident-learnings.example.yml +1 -1
- package/dist/agent-src/templates/agents/proposal.example.md +4 -4
- package/dist/agent-src/templates/copilot-instructions.md +1 -1
- package/dist/agent-src/templates/github-workflows/memory-hygiene.yml +10 -10
- package/dist/agent-src/templates/github-workflows/pr-risk-review.yml +19 -8
- package/dist/agent-src/templates/github-workflows/proposal-drift.yml +11 -8
- package/dist/agent-src/templates/github-workflows/roadmap-progress-check.yml +10 -12
- package/dist/agent-src/templates/hooks/pre-commit-frontmatter +21 -11
- package/dist/agent-src/templates/hooks/pre-commit-roadmap-progress +43 -29
- package/dist/agent-src/templates/roadmaps.md +9 -4
- package/dist/agent-src/templates/rule.md +3 -3
- package/dist/agent-src/templates/scripts/README.md +6 -6
- package/dist/agent-src/templates/scripts/check_memory.ts +24 -2
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +23 -4
- package/dist/agent-src/templates/scripts/historical-bug-patterns.example.yml +1 -1
- package/dist/agent-src/templates/scripts/memory_hash.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_lookup.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_report.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_signal.ts +24 -2
- package/dist/agent-src/templates/scripts/memory_status.ts +26 -2
- package/dist/agent-src/templates/scripts/ownership-map.example.yml +1 -1
- package/dist/agent-src/templates/scripts/pr-risk-config.example.yml +1 -1
- package/dist/agent-src/templates/scripts/pr_review_routing.ts +24 -3
- package/dist/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +24 -3
- package/dist/agent-src/templates/scripts/telemetry_report.ts +25 -3
- package/dist/agent-src/templates/scripts/telemetry_status.ts +24 -3
- package/dist/agent-src/templates/scripts/tier_usage_report.ts +24 -2
- package/dist/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +44 -10
- package/dist/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +26 -13
- package/dist/agent-src/templates/skill.md +2 -2
- package/dist/cli/python/knowledge_ingest.js +24 -3
- package/dist/cli/python/knowledge_ingest.js.map +1 -1
- package/dist/cli/python/workspace_analytics.js +23 -3
- package/dist/cli/python/workspace_analytics.js.map +1 -1
- package/dist/cli/python/workspace_crypto.js +23 -3
- package/dist/cli/python/workspace_crypto.js.map +1 -1
- package/dist/cli/python/workspace_documents.js +23 -3
- package/dist/cli/python/workspace_documents.js.map +1 -1
- package/dist/cli/python/workspace_drive.js +24 -3
- package/dist/cli/python/workspace_drive.js.map +1 -1
- package/dist/cli/python/workspace_drive_health.js +23 -3
- package/dist/cli/python/workspace_drive_health.js.map +1 -1
- package/dist/cli/python/workspace_explain.js +23 -3
- package/dist/cli/python/workspace_explain.js.map +1 -1
- package/dist/cli/python/workspace_hosts.js +23 -3
- package/dist/cli/python/workspace_hosts.js.map +1 -1
- package/dist/cli/python/workspace_inbox.js +23 -3
- package/dist/cli/python/workspace_inbox.js.map +1 -1
- package/dist/cli/python/workspace_render.js +23 -3
- package/dist/cli/python/workspace_render.js.map +1 -1
- package/dist/cli/python/workspace_roles.js +23 -3
- package/dist/cli/python/workspace_roles.js.map +1 -1
- package/dist/cli/python/workspace_sessions.js +23 -3
- package/dist/cli/python/workspace_sessions.js.map +1 -1
- package/dist/cli/python/workspace_skills.js +23 -3
- package/dist/cli/python/workspace_skills.js.map +1 -1
- package/dist/cli/registry.js +2 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +118 -118
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +2 -2
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +3 -3
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +3 -3
- package/dist/install/install.mjs +647 -408
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/server/routes/settings.js +4 -4
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/schemas/settings.js +1 -1
- package/dist/server/schemas/settings.js.map +1 -1
- package/docs/CLAIMS.md +2 -2
- package/docs/archive/CHANGELOG-pre-8.1.0.md +316 -0
- package/docs/benchmark.md +40 -0
- package/docs/contracts/CHANGELOG-conventions.md +8 -5
- package/docs/contracts/branch-protection-policy.md +14 -5
- package/docs/contracts/mcp-phase-1-scope.md +75 -0
- package/docs/contracts/mcp-tool-inventory.md +22 -15
- package/docs/contracts/release-pr-gating.md +22 -11
- package/docs/contracts/skill-bundled-assets.md +2 -2
- package/docs/customization.md +1 -1
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +9 -4
- package/docs/decisions/ADR-111-canonical-glama-listing.md +97 -0
- package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +92 -0
- package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +201 -0
- package/docs/decisions/INDEX.md +3 -0
- package/docs/distribution/registry-submissions.md +1 -1
- package/docs/getting-started.md +8 -6
- package/docs/guidelines/agent-infra/corpus-grounding-authoring.md +2 -2
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +4 -4
- package/docs/guidelines/agent-infra/installed-tools-manifest.md +3 -3
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +2 -2
- package/docs/guidelines/agent-infra/layered-settings.md +4 -4
- package/docs/guidelines/agent-infra/memory-access.md +19 -18
- package/docs/guidelines/agent-infra/naming.md +1 -1
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +5 -5
- package/docs/guidelines/agent-infra/role-contracts.md +1 -1
- package/docs/guidelines/agent-infra/security-lint-containment.md +2 -2
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +1 -1
- package/docs/guidelines/agent-infra/size-and-scope.md +1 -1
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +5 -5
- package/docs/guidelines/augment-portability-patterns.md +1 -1
- package/docs/installation.md +13 -14
- package/docs/mcp-server.md +32 -20
- package/docs/proof.md +1 -1
- package/docs/setup/mcp-cloud-endpoints.md +9 -2
- package/docs/setup/per-ide/claude-code.md +10 -4
- package/package.json +4 -3
- package/src/config/agent-settings.template.yml +31 -17
- package/src/config/host-capabilities.yml +25 -16
- package/src/config/profiles/balanced.ini +5 -3
- package/src/scripts/_cli/cmd_analyze_session.ts +23 -4
- package/src/scripts/_cli/cmd_conformance.ts +23 -4
- package/src/scripts/_cli/cmd_doctor.ts +196 -8
- package/src/scripts/_cli/cmd_explain.ts +23 -4
- package/src/scripts/_cli/cmd_export.ts +23 -4
- package/src/scripts/_cli/cmd_fleet.ts +23 -4
- package/src/scripts/_cli/cmd_migrate.ts +23 -4
- package/src/scripts/_cli/cmd_preflight.ts +24 -4
- package/src/scripts/_cli/cmd_prune.ts +23 -4
- package/src/scripts/_cli/cmd_refresh.ts +23 -4
- package/src/scripts/_cli/cmd_settings_check.ts +23 -4
- package/src/scripts/_cli/cmd_settings_migrate.ts +23 -4
- package/src/scripts/_cli/cmd_sync.ts +23 -4
- package/src/scripts/_cli/cmd_uninstall.ts +45 -4
- package/src/scripts/_cli/cmd_update.ts +23 -4
- package/src/scripts/_cli/cmd_upgrade.ts +307 -17
- package/src/scripts/_cli/cmd_validate.ts +23 -4
- package/src/scripts/_cli/cmd_versions.ts +23 -4
- package/src/scripts/_dispatch.bash +62 -19
- package/src/scripts/_lib/claude_plugin.ts +83 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +251 -0
- package/src/scripts/_lib/knowledge_global.ts +24 -2
- package/src/scripts/_lib/knowledge_global_promote.ts +24 -2
- package/src/scripts/_lib/knowledge_global_redaction.ts +24 -2
- package/src/scripts/_lib/link_crypto.ts +24 -5
- package/src/scripts/_lib/pin_resolver.ts +24 -3
- package/src/scripts/adoption_report.ts +23 -4
- package/src/scripts/adoption_snapshot.ts +23 -1
- package/src/scripts/adoption_status.ts +23 -4
- package/src/scripts/adr/regenerate_index.ts +24 -3
- package/src/scripts/ai_council/airgap.ts +25 -2
- package/src/scripts/ai_council/compile_corpus.ts +24 -2
- package/src/scripts/ai_council/pricing.ts +11 -1
- package/src/scripts/analysis_freshness.ts +23 -4
- package/src/scripts/annotate_discovery.ts +23 -1
- package/src/scripts/apply_modules_config.ts +23 -4
- package/src/scripts/audit_adr_coverage.ts +23 -4
- package/src/scripts/audit_auto_rules.ts +23 -1
- package/src/scripts/audit_cloud_compatibility.ts +23 -4
- package/src/scripts/audit_command_surface.ts +23 -4
- package/src/scripts/audit_initial_context.ts +23 -3
- package/src/scripts/audit_likelihood.ts +23 -1
- package/src/scripts/audit_mcp_tools.ts +23 -3
- package/src/scripts/audit_overlap.ts +23 -1
- package/src/scripts/audit_skill_descriptions.ts +24 -2
- package/src/scripts/audit_skill_overlap.ts +23 -1
- package/src/scripts/audit_user_type_axis.ts +23 -4
- package/src/scripts/backfill_model_tier.ts +23 -4
- package/src/scripts/bench_ab_cache_dispatch.ts +23 -1
- package/src/scripts/bench_ab_clone.ts +23 -1
- package/src/scripts/bench_ab_diff.ts +23 -1
- package/src/scripts/bench_ab_integrity.ts +23 -1
- package/src/scripts/bench_ab_run.ts +23 -2
- package/src/scripts/bench_ab_task_runner.ts +23 -1
- package/src/scripts/bench_ab_tracka_run.ts +23 -2
- package/src/scripts/bench_ab_v2_run.ts +23 -1
- package/src/scripts/bench_ab_v2_stats.ts +23 -1
- package/src/scripts/bench_baseline_ready.ts +23 -1
- package/src/scripts/bench_condense_memory.ts +23 -1
- package/src/scripts/bench_drift_check.ts +23 -2
- package/src/scripts/bench_matrix.ts +23 -4
- package/src/scripts/bench_per_tool.ts +23 -1
- package/src/scripts/bench_quality_run.ts +23 -2
- package/src/scripts/bench_rtk_savings.ts +23 -1
- package/src/scripts/bench_rule_load_latency.ts +23 -2
- package/src/scripts/bench_run.ts +23 -2
- package/src/scripts/bench_runner.ts +23 -1
- package/src/scripts/build_cloud_bundle.ts +23 -3
- package/src/scripts/build_discovery_manifest.ts +23 -4
- package/src/scripts/build_linear_digest.ts +23 -3
- package/src/scripts/build_mcp_registry_manifest.ts +23 -4
- package/src/scripts/build_rule_trigger_matrix.ts +23 -4
- package/src/scripts/capture_showcase_session.ts +23 -1
- package/src/scripts/chat_history.ts +24 -3
- package/src/scripts/check_always_budget.ts +23 -2
- package/src/scripts/check_artefact_checksums.ts +23 -4
- package/src/scripts/check_augment_description_cap.ts +23 -4
- package/src/scripts/check_augmentignore.ts +23 -4
- package/src/scripts/check_beta_review_markers.ts +23 -4
- package/src/scripts/check_cluster_patterns.ts +23 -4
- package/src/scripts/check_command_count_messaging.ts +23 -4
- package/src/scripts/check_comparison.ts +23 -1
- package/src/scripts/check_condensation.ts +24 -3
- package/src/scripts/check_condensed_paths.ts +23 -2
- package/src/scripts/check_context_paths.ts +23 -4
- package/src/scripts/check_council_config_location.ts +23 -4
- package/src/scripts/check_council_layout.ts +23 -4
- package/src/scripts/check_council_references.ts +23 -4
- package/src/scripts/check_discovery_determinism.ts +24 -4
- package/src/scripts/check_gate_paths.ts +23 -4
- package/src/scripts/check_generated_artefact_headers.ts +23 -4
- package/src/scripts/check_generator_output_coverage.ts +23 -4
- package/src/scripts/check_gitignore_freshness.ts +23 -4
- package/src/scripts/check_iron_law_prominence.ts +23 -4
- package/src/scripts/check_kernel_prefix_stability.ts +0 -0
- package/src/scripts/check_kernel_rule_bundle.ts +23 -4
- package/src/scripts/check_knowledge_cards.ts +23 -1
- package/src/scripts/check_md_language.ts +23 -4
- package/src/scripts/check_media_deps.ts +24 -1
- package/src/scripts/check_memory.ts +24 -2
- package/src/scripts/check_memory_proposal.ts +23 -4
- package/src/scripts/check_module_management_neutral.ts +23 -4
- package/src/scripts/check_no_conflict_markers.ts +23 -4
- package/src/scripts/check_no_external_sources.ts +23 -4
- package/src/scripts/check_no_local_settings_committed.ts +24 -4
- package/src/scripts/check_no_new_legacy_path.ts +23 -4
- package/src/scripts/check_no_roadmap_refs.ts +23 -4
- package/src/scripts/check_one_off_location.ts +23 -4
- package/src/scripts/check_overlay_cascade_subdirs.ts +23 -4
- package/src/scripts/check_portability.ts +24 -3
- package/src/scripts/check_proposal.ts +0 -0
- package/src/scripts/check_public_catalog_links.ts +23 -4
- package/src/scripts/check_public_links.ts +23 -4
- package/src/scripts/check_quality_regression.ts +23 -2
- package/src/scripts/check_references.ts +23 -4
- package/src/scripts/check_release_includes_discovery.ts +23 -4
- package/src/scripts/check_release_pr_shape.ts +23 -4
- package/src/scripts/check_release_published.ts +23 -4
- package/src/scripts/check_release_trunk_sync.ts +23 -4
- package/src/scripts/check_reply_consistency.ts +23 -4
- package/src/scripts/check_roadmap_trackable.ts +23 -4
- package/src/scripts/check_role_doc_links.ts +23 -4
- package/src/scripts/check_safety_floor_untouched.ts +24 -4
- package/src/scripts/check_site_links.ts +23 -1
- package/src/scripts/check_skill_gaps.ts +23 -1
- package/src/scripts/check_skill_requires.ts +23 -4
- package/src/scripts/check_structural_breaking.ts +24 -4
- package/src/scripts/check_surface_tiers.ts +23 -4
- package/src/scripts/check_template_pin_drift.ts +23 -4
- package/src/scripts/check_test_coverage_diff.ts +23 -4
- package/src/scripts/check_token_optimizer_freshness.ts +23 -4
- package/src/scripts/check_token_quality_golden.ts +23 -2
- package/src/scripts/check_token_regression.ts +23 -2
- package/src/scripts/check_tracked_but_ignored.ts +24 -4
- package/src/scripts/check_trigger_evals.ts +23 -4
- package/src/scripts/check_trunk_drift.ts +24 -1
- package/src/scripts/check_update_banner.ts +23 -4
- package/src/scripts/ci_summary.ts +23 -4
- package/src/scripts/ci_time_ratio.ts +23 -4
- package/src/scripts/cluster_near_miss_patterns.ts +0 -0
- package/src/scripts/compile_router.ts +23 -4
- package/src/scripts/condense.ts +30 -31
- package/src/scripts/condense_memory.ts +24 -2
- package/src/scripts/config/packs.ts +24 -4
- package/src/scripts/config/session_profiles.ts +23 -4
- package/src/scripts/context_hygiene_hook.ts +24 -3
- package/src/scripts/cost_by_conversation.ts +23 -4
- package/src/scripts/cost_summary.ts +23 -4
- package/src/scripts/council_cli.ts +35 -7
- package/src/scripts/council_prune.ts +25 -2
- package/src/scripts/cross_repo_retrieve.ts +23 -4
- package/src/scripts/discovery_stats.ts +23 -4
- package/src/scripts/evidence_report.ts +23 -1
- package/src/scripts/export_replay_corpus.ts +23 -2
- package/src/scripts/extract_audit_patterns.ts +23 -1
- package/src/scripts/first_run_gate_hook.ts +24 -3
- package/src/scripts/gen_discovery_baseline.ts +23 -4
- package/src/scripts/generate_capabilities_index.ts +24 -5
- package/src/scripts/generate_capability_matrix.ts +23 -4
- package/src/scripts/generate_catalog.ts +23 -1
- package/src/scripts/generate_command_flows.ts +23 -4
- package/src/scripts/generate_cookbook.ts +23 -4
- package/src/scripts/generate_index.ts +23 -4
- package/src/scripts/generate_ownership_matrix.ts +23 -1
- package/src/scripts/generate_pack_manifests.ts +24 -5
- package/src/scripts/generate_role_experiences_catalog.ts +23 -4
- package/src/scripts/hooks/block_no_verify.ts +23 -4
- package/src/scripts/hooks/design_slop_hook.ts +24 -3
- package/src/scripts/hooks/dispatch_hook.ts +47 -14
- package/src/scripts/hooks/replay_hook.ts +23 -2
- package/src/scripts/hooks/rtk_wrap_hook.ts +24 -5
- package/src/scripts/hooks_doctor.ts +23 -2
- package/src/scripts/hooks_status.ts +23 -2
- package/src/scripts/injection_scan_hook.ts +24 -5
- package/src/scripts/install +23 -4
- package/src/scripts/install.ts +102 -44
- package/src/scripts/inventory_abstraction_budget.ts +23 -1
- package/src/scripts/inventory_frontmatter.ts +23 -1
- package/src/scripts/inventory_meta_layers.ts +23 -1
- package/src/scripts/iron_law_sha.ts +23 -4
- package/src/scripts/janitor.ts +23 -4
- package/src/scripts/knowledge_global_cli.ts +24 -2
- package/src/scripts/linked_projects_list.ts +23 -4
- package/src/scripts/lint_agent_security.ts +23 -4
- package/src/scripts/lint_agent_skill_names.ts +23 -4
- package/src/scripts/lint_agents_layout.ts +23 -4
- package/src/scripts/lint_agents_md.ts +23 -4
- package/src/scripts/lint_archived_skills.ts +23 -4
- package/src/scripts/lint_artefact_frontmatter.ts +23 -4
- package/src/scripts/lint_bench_ab.ts +23 -4
- package/src/scripts/lint_bench_corpus.ts +23 -2
- package/src/scripts/lint_command_flow_coverage.ts +23 -4
- package/src/scripts/lint_command_routing.ts +23 -4
- package/src/scripts/lint_command_tiers.ts +23 -2
- package/src/scripts/lint_command_verbs.ts +23 -4
- package/src/scripts/lint_commit_subjects.ts +24 -4
- package/src/scripts/lint_confusables.ts +25 -5
- package/src/scripts/lint_context_spine_usage.ts +23 -4
- package/src/scripts/lint_discovery_manifest.ts +23 -4
- package/src/scripts/lint_discovery_vocabulary.ts +23 -4
- package/src/scripts/lint_empty_roadmaps.ts +23 -4
- package/src/scripts/lint_eval_freshness.ts +23 -4
- package/src/scripts/lint_examples.ts +23 -4
- package/src/scripts/lint_explain_trace.ts +23 -4
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_flows.ts +23 -4
- package/src/scripts/lint_framework_leakage.ts +23 -4
- package/src/scripts/lint_frontmatter_boilerplate.ts +23 -4
- package/src/scripts/lint_ghostwriter_source.ts +23 -4
- package/src/scripts/lint_glama_drift.ts +75 -0
- package/src/scripts/lint_global_paths.ts +23 -2
- package/src/scripts/lint_handoffs.ts +23 -4
- package/src/scripts/lint_hidden_unicode.ts +24 -5
- package/src/scripts/lint_hook_concern_budget.ts +23 -4
- package/src/scripts/lint_hook_manifest.ts +23 -2
- package/src/scripts/lint_instruction_smuggling.ts +25 -5
- package/src/scripts/lint_legal_pack.ts +23 -1
- package/src/scripts/lint_load_context.ts +23 -4
- package/src/scripts/lint_marketplace.ts +24 -3
- package/src/scripts/lint_marketplace_install_completeness.ts +23 -4
- package/src/scripts/lint_mcp_config_security.ts +25 -5
- package/src/scripts/lint_mcp_registry_manifest.ts +23 -4
- package/src/scripts/lint_media_policy_linkage.ts +23 -4
- package/src/scripts/lint_missions.ts +23 -4
- package/src/scripts/lint_model_tier_coverage.ts +23 -4
- package/src/scripts/lint_namespace.ts +23 -4
- package/src/scripts/lint_namespace_collisions.ts +23 -4
- package/src/scripts/lint_new_skill_gate.ts +23 -4
- package/src/scripts/lint_no_new_atomic_commands.ts +23 -4
- package/src/scripts/lint_one_off_age.ts +23 -4
- package/src/scripts/lint_orchestration_dsl.ts +23 -4
- package/src/scripts/lint_orchestrator_auto_detect.ts +23 -4
- package/src/scripts/lint_pack_boundaries.ts +23 -4
- package/src/scripts/lint_pack_dependencies.ts +23 -2
- package/src/scripts/lint_pack_first_win.ts +23 -4
- package/src/scripts/lint_pack_risk_class.ts +23 -1
- package/src/scripts/lint_persona_governance.ts +23 -4
- package/src/scripts/lint_positioning.ts +23 -4
- package/src/scripts/lint_profile_overlay_set_only.ts +23 -4
- package/src/scripts/lint_readme_jargon.ts +23 -4
- package/src/scripts/lint_readme_size.ts +23 -4
- package/src/scripts/lint_regression.ts +23 -4
- package/src/scripts/lint_roadmap_blockers.ts +23 -4
- package/src/scripts/lint_roadmap_ci_steps.ts +23 -4
- package/src/scripts/lint_roadmap_complexity.ts +23 -4
- package/src/scripts/lint_roadmap_later_disposition.ts +23 -4
- package/src/scripts/lint_role_experiences.ts +23 -4
- package/src/scripts/lint_rule_interactions.ts +23 -4
- package/src/scripts/lint_rule_tiers.ts +24 -3
- package/src/scripts/lint_showcase_sessions.ts +23 -4
- package/src/scripts/lint_skill_frontmatter_safety.ts +25 -5
- package/src/scripts/lint_skill_originality.ts +23 -4
- package/src/scripts/lint_skill_tools.ts +23 -4
- package/src/scripts/lint_subagent_determinism.ts +23 -4
- package/src/scripts/lint_ticket_buildable.ts +23 -4
- package/src/scripts/lint_topics_yaml.ts +23 -4
- package/src/scripts/lint_trust_coherence.ts +23 -4
- package/src/scripts/lint_value_dashboard.ts +23 -4
- package/src/scripts/lint_workflow_security.ts +23 -4
- package/src/scripts/lint_workspace_boundary.ts +23 -4
- package/src/scripts/mcp_exec/safety_envelope.ts +105 -0
- package/src/scripts/mcp_parity_smoke.ts +23 -2
- package/src/scripts/mcp_registry_submit.sh +14 -3
- package/src/scripts/mcp_render.ts +23 -4
- package/src/scripts/mcp_server/__main__.ts +6 -8
- package/src/scripts/mcp_server/consumer_tool_catalog.json +78 -3
- package/src/scripts/mcp_server/tools.ts +731 -0
- package/src/scripts/mcp_telemetry_health.ts +23 -4
- package/src/scripts/mcp_telemetry_query.ts +23 -4
- package/src/scripts/mcp_telemetry_store.ts +23 -4
- package/src/scripts/measure_augment_budget.ts +23 -1
- package/src/scripts/measure_density.ts +23 -1
- package/src/scripts/measure_frugality_savings.ts +23 -1
- package/src/scripts/measure_markitdown_lift.ts +23 -1
- package/src/scripts/measure_patterns.ts +23 -1
- package/src/scripts/measure_projection_bytes.ts +23 -1
- package/src/scripts/measure_rule_budget.ts +23 -4
- package/src/scripts/measure_skill_reduction.ts +23 -1
- package/src/scripts/memory_hash.ts +24 -2
- package/src/scripts/memory_lookup.ts +24 -2
- package/src/scripts/memory_report.ts +24 -2
- package/src/scripts/memory_signal.ts +24 -2
- package/src/scripts/memory_status.ts +26 -2
- package/src/scripts/migrate_command_suggestions.ts +23 -4
- package/src/scripts/migrate_frontmatter_defaults.ts +23 -4
- package/src/scripts/migration_status.ts +25 -4
- package/src/scripts/mine_missing_guardrails.ts +23 -1
- package/src/scripts/mine_session.ts +23 -1
- package/src/scripts/minimal_safe_diff_hook.ts +24 -3
- package/src/scripts/new_skill.ts +23 -3
- package/src/scripts/onboarding_gate_hook.ts +24 -3
- package/src/scripts/parity/coverage_diff.ts +25 -3
- package/src/scripts/parity/phase_gate.ts +25 -4
- package/src/scripts/parity/replay.ts +25 -3
- package/src/scripts/pattern_share.ts +23 -4
- package/src/scripts/plan_physical_move.ts +23 -4
- package/src/scripts/prediction-pool/poisson_sim.ts +24 -3
- package/src/scripts/prediction-pool/pool_winsim.ts +24 -3
- package/src/scripts/prediction-pool/score_ev.ts +24 -3
- package/src/scripts/print_required_checks.ts +24 -4
- package/src/scripts/probe_host_compliance.ts +23 -2
- package/src/scripts/probe_projection_fidelity.ts +23 -1
- package/src/scripts/probe_skill_registration.ts +24 -2
- package/src/scripts/profile_staleness_hook.ts +24 -3
- package/src/scripts/profile_use.ts +23 -4
- package/src/scripts/project_thin_rules.ts +23 -3
- package/src/scripts/propose_modules_config.ts +23 -4
- package/src/scripts/prototype_lint_contradictions.ts +23 -1
- package/src/scripts/prove_pack_extractable.ts +23 -4
- package/src/scripts/readme_linter.ts +23 -3
- package/src/scripts/redact_hook_capture.ts +23 -4
- package/src/scripts/refine_ticket_detect.ts +23 -4
- package/src/scripts/release.ts +226 -43
- package/src/scripts/render_benchmark_composite.ts +23 -4
- package/src/scripts/render_benchmark_md.ts +23 -4
- package/src/scripts/roadmap_progress_hook.ts +46 -16
- package/src/scripts/run_skill_evals.ts +23 -4
- package/src/scripts/runtime_dispatcher.ts +23 -4
- package/src/scripts/runtime_registry.ts +23 -4
- package/src/scripts/score_skill_selection.ts +23 -1
- package/src/scripts/security_audit_config.ts +24 -5
- package/src/scripts/skill_collision_clusters.ts +23 -4
- package/src/scripts/skill_discovery.ts +23 -4
- package/src/scripts/skill_linter.ts +23 -2
- package/src/scripts/skill_preview.ts +23 -4
- package/src/scripts/skill_tools/audit_persona_coverage.ts +23 -1
- package/src/scripts/skill_tools/audit_user_type_coverage.ts +23 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +23 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +23 -1
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +24 -1
- package/src/scripts/skill_usage_collect.ts +23 -4
- package/src/scripts/smoke_path_resolution.ts +23 -4
- package/src/scripts/smoke_quickstart.ts +23 -4
- package/src/scripts/snapshot_agent_outputs.ts +23 -4
- package/src/scripts/spotcheck_thin_root.ts +23 -4
- package/src/scripts/sync_agent_settings.ts +23 -4
- package/src/scripts/sync_github_metadata.ts +23 -4
- package/src/scripts/sync_gitignore.ts +23 -4
- package/src/scripts/telegraph_stats.ts +23 -4
- package/src/scripts/tool_registry.ts +24 -4
- package/src/scripts/trigger_coverage.ts +23 -4
- package/src/scripts/update_counts.ts +23 -4
- package/src/scripts/update_prices.ts +23 -1
- package/src/scripts/validate_agent_settings.ts +23 -4
- package/src/scripts/validate_decision_engine.ts +23 -4
- package/src/scripts/validate_discovery_manifest.ts +23 -4
- package/src/scripts/validate_frontmatter.ts +23 -2
- package/src/scripts/validate_pack_yaml.ts +0 -0
- package/src/scripts/validate_safe_paths.ts +24 -4
- package/src/scripts/validate_telegraph_carveouts.ts +23 -4
- package/src/scripts/verify_before_complete_hook.ts +24 -3
- package/src/scripts/verify_physical_move.ts +23 -4
- package/src/scripts/wrapper_freshness_hook.ts +107 -8
- package/tests/fixtures/hooks/README.md +92 -0
- package/tests/fixtures/hooks/agent_error.json +7 -0
- package/tests/fixtures/hooks/post_tool_use.json +13 -0
- package/tests/fixtures/hooks/pre_compact.json +7 -0
- package/tests/fixtures/hooks/pre_tool_use.json +9 -0
- package/tests/fixtures/hooks/session_end.json +6 -0
- package/tests/fixtures/hooks/session_start.json +6 -0
- package/tests/fixtures/hooks/stop.json +6 -0
- package/tests/fixtures/hooks/user_prompt_submit.json +7 -0
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
// CATALOG_STUBS, STUB_NAMES, REGISTRY, ToolCache, boot_log_line.
|
|
33
33
|
import * as fs from 'node:fs';
|
|
34
34
|
import * as path from 'node:path';
|
|
35
|
+
import { fileURLToPath } from 'node:url';
|
|
35
36
|
|
|
36
37
|
import {
|
|
37
38
|
SCHEMA_VERSION as _CH_SCHEMA_VERSION,
|
|
@@ -451,6 +452,532 @@ async function _memoryStatusHandler(
|
|
|
451
452
|
return result as unknown as Record<string, unknown>;
|
|
452
453
|
}
|
|
453
454
|
|
|
455
|
+
// ---------------------------------------------------------------------
|
|
456
|
+
// Phase 4 handlers — council-approved write/exec cut (2026-07-07 verdict,
|
|
457
|
+
// `agents/decisions/mcp-write-exec-cut-2026-07-07.md`). Every handler
|
|
458
|
+
// lazy-imports its library implementation so the module-load import
|
|
459
|
+
// surface stays clean (no child_process / network client reaches this
|
|
460
|
+
// module's own imports; A0 `docs/contracts/mcp-phase-1-scope.md`).
|
|
461
|
+
// ---------------------------------------------------------------------
|
|
462
|
+
|
|
463
|
+
/** Package root — three levels above `src/scripts/mcp_server/`. */
|
|
464
|
+
const _PACKAGE_ROOT = path.resolve(
|
|
465
|
+
path.dirname(fileURLToPath(import.meta.url)),
|
|
466
|
+
'..',
|
|
467
|
+
'..',
|
|
468
|
+
'..',
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
/** Validate a required non-empty string argument. */
|
|
472
|
+
function _requireString(args: Record<string, unknown>, key: string): string {
|
|
473
|
+
const value = args[key];
|
|
474
|
+
if (typeof value !== 'string' || !_strip(value)) {
|
|
475
|
+
throw new Error(`'${key}' must be a non-empty string`);
|
|
476
|
+
}
|
|
477
|
+
return value;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/** Run `fn` with CWD switched to `consumerRoot`, always restoring. */
|
|
481
|
+
async function _withChdir<T>(consumerRoot: string, fn: () => T | Promise<T>): Promise<T> {
|
|
482
|
+
const prevCwd = process.cwd();
|
|
483
|
+
try {
|
|
484
|
+
process.chdir(consumerRoot);
|
|
485
|
+
return await fn();
|
|
486
|
+
} finally {
|
|
487
|
+
process.chdir(prevCwd);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/**
|
|
492
|
+
* Phase 4 — record one engineering-memory signal via
|
|
493
|
+
* `agent-src/templates/scripts/memory_signal.emit`.
|
|
494
|
+
*
|
|
495
|
+
* fs-write: appends to `agents/memory/intake/signals-YYYY-MM.jsonl`
|
|
496
|
+
* under the consumer root (the module resolves its intake dir relative
|
|
497
|
+
* to CWD — chdir-window scoped). Rate-limited per `(type, path)` inside
|
|
498
|
+
* `emit`; a rate-limited duplicate returns `recorded: false` instead of
|
|
499
|
+
* erroring, mirroring the CLI's silent-skip contract.
|
|
500
|
+
*/
|
|
501
|
+
async function _memorySignalHandler(
|
|
502
|
+
args: Record<string, unknown>,
|
|
503
|
+
consumerRoot: string,
|
|
504
|
+
): Promise<Record<string, unknown>> {
|
|
505
|
+
const entryType = _requireString(args, 'type');
|
|
506
|
+
const anchorPath = _requireString(args, 'path');
|
|
507
|
+
const body = _requireString(args, 'body');
|
|
508
|
+
|
|
509
|
+
const memorySignal = await import(
|
|
510
|
+
'../../agent-src/templates/scripts/memory_signal.js'
|
|
511
|
+
);
|
|
512
|
+
const record = await _withChdir(consumerRoot, () =>
|
|
513
|
+
memorySignal.emit(entryType, anchorPath, body),
|
|
514
|
+
);
|
|
515
|
+
if (record === null) {
|
|
516
|
+
return {
|
|
517
|
+
recorded: false,
|
|
518
|
+
skipped: true,
|
|
519
|
+
reason:
|
|
520
|
+
`already emitted within the ` +
|
|
521
|
+
`${memorySignal.RATE_LIMIT_WINDOW_DAYS}d rate-limit window`,
|
|
522
|
+
entry_type: entryType,
|
|
523
|
+
path: anchorPath,
|
|
524
|
+
};
|
|
525
|
+
}
|
|
526
|
+
return { recorded: true, signal: record };
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* Phase 4 — regenerate `agents/roadmaps-progress.md`.
|
|
531
|
+
*
|
|
532
|
+
* Calls `update_roadmap_progress`'s exported building blocks (`collect`,
|
|
533
|
+
* `render`, `collect_bundles`) directly instead of `main()` so nothing
|
|
534
|
+
* prints and no git fallback spawns. `dry_run: true` computes the counts
|
|
535
|
+
* without writing.
|
|
536
|
+
*/
|
|
537
|
+
async function _roadmapProgressHandler(
|
|
538
|
+
args: Record<string, unknown>,
|
|
539
|
+
consumerRoot: string,
|
|
540
|
+
): Promise<Record<string, unknown>> {
|
|
541
|
+
const dryRun = _pyTruthy(args.dry_run ?? false);
|
|
542
|
+
const root = _resolvePath(consumerRoot);
|
|
543
|
+
const roadmapRoot = path.join(root, 'agents', 'roadmaps');
|
|
544
|
+
const target = path.join(root, 'agents', 'roadmaps-progress.md');
|
|
545
|
+
|
|
546
|
+
const urp = await import('../../agent-src/scripts/update_roadmap_progress.js');
|
|
547
|
+
if (!fs.existsSync(roadmapRoot)) {
|
|
548
|
+
return {
|
|
549
|
+
written: false,
|
|
550
|
+
path: target,
|
|
551
|
+
roadmaps: 0,
|
|
552
|
+
steps_done: 0,
|
|
553
|
+
steps_total: 0,
|
|
554
|
+
note: `no roadmaps directory at ${roadmapRoot}`,
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
const roadmaps = urp.collect(roadmapRoot);
|
|
558
|
+
const content = urp.render(roadmaps, urp.collect_bundles(root));
|
|
559
|
+
const stepsDone = roadmaps.reduce((s, r) => s + r.done, 0);
|
|
560
|
+
const stepsTotal = roadmaps.reduce((s, r) => s + r.total_active, 0);
|
|
561
|
+
if (!dryRun) {
|
|
562
|
+
fs.writeFileSync(target, content, 'utf-8');
|
|
563
|
+
}
|
|
564
|
+
return {
|
|
565
|
+
written: !dryRun,
|
|
566
|
+
path: target,
|
|
567
|
+
roadmaps: roadmaps.length,
|
|
568
|
+
steps_done: stepsDone,
|
|
569
|
+
steps_total: stepsTotal,
|
|
570
|
+
};
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Phase 4 — the PR-gate archival sweep (`archive_completed_roadmaps`).
|
|
575
|
+
*
|
|
576
|
+
* Mutates the git index (`git mv` + `git add` of migrated refs) but
|
|
577
|
+
* never commits or pushes. The library implementation shells out to git
|
|
578
|
+
* internally — an accepted transitive effect per the 2026-07-07 council
|
|
579
|
+
* verdict; this module itself imports no child_process (the A0 ban
|
|
580
|
+
* covers `scripts/mcp_server/*` module imports). The dashboard regen
|
|
581
|
+
* runs in-process afterwards (mirroring the CLI's `_regen_dashboard`
|
|
582
|
+
* without its tsx re-spawn); the regenerated dashboard is written but
|
|
583
|
+
* not staged.
|
|
584
|
+
*/
|
|
585
|
+
async function _roadmapArchiveHandler(
|
|
586
|
+
_args: Record<string, unknown>,
|
|
587
|
+
consumerRoot: string,
|
|
588
|
+
): Promise<Record<string, unknown>> {
|
|
589
|
+
const root = _resolvePath(consumerRoot);
|
|
590
|
+
const { archive_completed } = await import(
|
|
591
|
+
'../../agent-src/scripts/archive_completed_roadmaps.js'
|
|
592
|
+
);
|
|
593
|
+
const archived = archive_completed(root, {
|
|
594
|
+
changed_only: true,
|
|
595
|
+
base: 'origin/main',
|
|
596
|
+
dry_run: false,
|
|
597
|
+
});
|
|
598
|
+
let dashboardRegenerated = false;
|
|
599
|
+
if (archived.length > 0) {
|
|
600
|
+
const urp = await import(
|
|
601
|
+
'../../agent-src/scripts/update_roadmap_progress.js'
|
|
602
|
+
);
|
|
603
|
+
const roadmapRoot = path.join(root, 'agents', 'roadmaps');
|
|
604
|
+
if (fs.existsSync(roadmapRoot)) {
|
|
605
|
+
const roadmaps = urp.collect(roadmapRoot);
|
|
606
|
+
fs.writeFileSync(
|
|
607
|
+
path.join(root, 'agents', 'roadmaps-progress.md'),
|
|
608
|
+
urp.render(roadmaps, urp.collect_bundles(root)),
|
|
609
|
+
'utf-8',
|
|
610
|
+
);
|
|
611
|
+
dashboardRegenerated = true;
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
return {
|
|
615
|
+
archived: archived as unknown as Record<string, unknown>[],
|
|
616
|
+
count: archived.length,
|
|
617
|
+
dashboard_regenerated: dashboardRegenerated,
|
|
618
|
+
};
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* Phase 4 — regenerate (or drift-check) `CAPABILITIES.yaml`.
|
|
623
|
+
*
|
|
624
|
+
* `generate_capabilities_index.build()` derives everything from the
|
|
625
|
+
* package tree (its module-anchored root); the canonical output path is
|
|
626
|
+
* `<package root>/CAPABILITIES.yaml` (mirroring the module's `main()`).
|
|
627
|
+
* `check: true` compares without writing. A write is refused when the
|
|
628
|
+
* canonical output path is not under the consumer root (A0 in-tree
|
|
629
|
+
* write scoping).
|
|
630
|
+
*/
|
|
631
|
+
async function _capabilitiesIndexHandler(
|
|
632
|
+
args: Record<string, unknown>,
|
|
633
|
+
consumerRoot: string,
|
|
634
|
+
): Promise<Record<string, unknown>> {
|
|
635
|
+
const check = _pyTruthy(args.check ?? false);
|
|
636
|
+
const cap = await import('../generate_capabilities_index.js');
|
|
637
|
+
const out = path.join(_PACKAGE_ROOT, 'CAPABILITIES.yaml');
|
|
638
|
+
const content = cap.build();
|
|
639
|
+
const onDisk = fs.existsSync(out) ? fs.readFileSync(out, 'utf-8') : '';
|
|
640
|
+
const drift = onDisk !== content;
|
|
641
|
+
if (check) {
|
|
642
|
+
return { check: true, written: false, drift, path: out };
|
|
643
|
+
}
|
|
644
|
+
const root = _resolvePath(consumerRoot);
|
|
645
|
+
if (_relativeUnder(_resolvePath(out), root) === null) {
|
|
646
|
+
throw new Error(
|
|
647
|
+
`CAPABILITIES.yaml path escapes consumer_root: ${out} not under ${root}`,
|
|
648
|
+
);
|
|
649
|
+
}
|
|
650
|
+
fs.writeFileSync(out, content, 'utf-8');
|
|
651
|
+
return { check: false, written: true, drift, path: out };
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
/**
|
|
655
|
+
* Shared doctor leg — resolve the project root, load the manifest, and
|
|
656
|
+
* compute the drift groups + health checks the way `cmd_doctor.main()`
|
|
657
|
+
* does on its default (non-CI) path, without emitting to stdout and
|
|
658
|
+
* without `process.exit`.
|
|
659
|
+
*/
|
|
660
|
+
async function _runDoctorLeg(consumerRoot: string): Promise<{
|
|
661
|
+
project_root: string;
|
|
662
|
+
origin: string;
|
|
663
|
+
drift: Record<string, Record<string, unknown>[]>;
|
|
664
|
+
checks: Record<string, unknown>[];
|
|
665
|
+
}> {
|
|
666
|
+
const doctor = await import('../_cli/cmd_doctor.js');
|
|
667
|
+
const installedTools = await import('../_lib/installed_tools.js');
|
|
668
|
+
const root = _resolvePath(consumerRoot);
|
|
669
|
+
return _withChdir(root, () => {
|
|
670
|
+
const [projectRoot, origin] = doctor._resolve_project_root(root);
|
|
671
|
+
const manifest = installedTools.read_manifest(
|
|
672
|
+
installedTools.manifest_path(projectRoot),
|
|
673
|
+
);
|
|
674
|
+
let missing: Record<string, unknown>[] = [];
|
|
675
|
+
let modified: Record<string, unknown>[] = [];
|
|
676
|
+
let foreign: Record<string, unknown>[] = [];
|
|
677
|
+
let tagDrift: Record<string, unknown>[] = [];
|
|
678
|
+
let checks: Record<string, unknown>[];
|
|
679
|
+
if (manifest === null) {
|
|
680
|
+
const bridgePresent = fs.existsSync(
|
|
681
|
+
path.join(projectRoot, doctor.BRIDGE_MARKER_RELATIVE),
|
|
682
|
+
);
|
|
683
|
+
checks = doctor._run_checks_no_manifest(projectRoot, bridgePresent, null);
|
|
684
|
+
} else {
|
|
685
|
+
const [records, known] = doctor._collect_manifest_entries(projectRoot, manifest);
|
|
686
|
+
[missing, modified, tagDrift] = doctor._classify(records);
|
|
687
|
+
foreign = doctor._foreign_records(
|
|
688
|
+
projectRoot,
|
|
689
|
+
doctor._scan_foreign(projectRoot, manifest, known),
|
|
690
|
+
);
|
|
691
|
+
checks = doctor._run_checks(
|
|
692
|
+
projectRoot,
|
|
693
|
+
manifest,
|
|
694
|
+
{ missing, modified, foreign, tag_drift: tagDrift },
|
|
695
|
+
null,
|
|
696
|
+
);
|
|
697
|
+
}
|
|
698
|
+
return {
|
|
699
|
+
project_root: projectRoot,
|
|
700
|
+
origin,
|
|
701
|
+
drift: { missing, modified, foreign, tag_drift: tagDrift },
|
|
702
|
+
checks,
|
|
703
|
+
};
|
|
704
|
+
});
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* Phase 4 — structured doctor report (read-only).
|
|
709
|
+
*
|
|
710
|
+
* Mirrors the `_emit_json` payload of `cmd_doctor` (drift groups +
|
|
711
|
+
* checks + project-root origin) assembled in-process — no stdout, no
|
|
712
|
+
* `process.exit`.
|
|
713
|
+
*/
|
|
714
|
+
async function _doctorReportHandler(
|
|
715
|
+
_args: Record<string, unknown>,
|
|
716
|
+
consumerRoot: string,
|
|
717
|
+
): Promise<Record<string, unknown>> {
|
|
718
|
+
const leg = await _runDoctorLeg(consumerRoot);
|
|
719
|
+
const failCheck = leg.checks.some((c) => c.status === 'fail');
|
|
720
|
+
const driftCount =
|
|
721
|
+
leg.drift.missing!.length +
|
|
722
|
+
leg.drift.modified!.length +
|
|
723
|
+
leg.drift.foreign!.length +
|
|
724
|
+
leg.drift.tag_drift!.length;
|
|
725
|
+
return {
|
|
726
|
+
project_root: leg.project_root,
|
|
727
|
+
project_root_origin: leg.origin,
|
|
728
|
+
missing: leg.drift.missing,
|
|
729
|
+
modified: leg.drift.modified,
|
|
730
|
+
foreign: leg.drift.foreign,
|
|
731
|
+
tag_drift: leg.drift.tag_drift,
|
|
732
|
+
checks: leg.checks,
|
|
733
|
+
status: failCheck || driftCount > 0 ? 'fail' : 'ok',
|
|
734
|
+
};
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* Phase 4 — consumer conformance contract (read-only).
|
|
739
|
+
*
|
|
740
|
+
* Two legs, mirroring `cmd_conformance.main()`: the doctor `--ci`
|
|
741
|
+
* contract in-process, plus the five conformance checks
|
|
742
|
+
* (`runConformanceChecks`). The CLI's JSONL report append to the
|
|
743
|
+
* user-global `~/.event4u/...` log is intentionally skipped — the A0
|
|
744
|
+
* contract scopes writes to the consumer root and this tool is
|
|
745
|
+
* catalogued read-only.
|
|
746
|
+
*/
|
|
747
|
+
async function _conformanceCheckHandler(
|
|
748
|
+
_args: Record<string, unknown>,
|
|
749
|
+
consumerRoot: string,
|
|
750
|
+
): Promise<Record<string, unknown>> {
|
|
751
|
+
const conformance = await import('../_cli/cmd_conformance.js');
|
|
752
|
+
const leg = await _runDoctorLeg(consumerRoot);
|
|
753
|
+
const conformanceChecks = await _withChdir(leg.project_root, () =>
|
|
754
|
+
conformance.runConformanceChecks({ projectRoot: leg.project_root }),
|
|
755
|
+
);
|
|
756
|
+
const checks = [...leg.checks, ...conformanceChecks];
|
|
757
|
+
const driftCount =
|
|
758
|
+
leg.drift.missing!.length +
|
|
759
|
+
leg.drift.modified!.length +
|
|
760
|
+
leg.drift.foreign!.length +
|
|
761
|
+
leg.drift.tag_drift!.length;
|
|
762
|
+
const failed = checks.some((c) => c.status === 'fail') || driftCount > 0;
|
|
763
|
+
return {
|
|
764
|
+
project_root: leg.project_root,
|
|
765
|
+
drift: leg.drift,
|
|
766
|
+
doctor_checks: leg.checks,
|
|
767
|
+
conformance_checks: conformanceChecks,
|
|
768
|
+
checks,
|
|
769
|
+
pass: !failed,
|
|
770
|
+
status: failed ? 'fail' : 'ok',
|
|
771
|
+
};
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Phase 4 — artefact-engagement telemetry report (read-only).
|
|
776
|
+
*
|
|
777
|
+
* Calls the report-building functions (`read_settings` → `aggregate` →
|
|
778
|
+
* `render_json`) directly — the same pipeline `telemetry_report.main()`
|
|
779
|
+
* runs for `--format json` — and returns the parsed payload. A missing
|
|
780
|
+
* or disabled log yields the empty-but-valid report.
|
|
781
|
+
*/
|
|
782
|
+
async function _telemetryReportHandler(
|
|
783
|
+
args: Record<string, unknown>,
|
|
784
|
+
consumerRoot: string,
|
|
785
|
+
): Promise<Record<string, unknown>> {
|
|
786
|
+
const windowRaw = args.window_days ?? 30;
|
|
787
|
+
if (
|
|
788
|
+
typeof windowRaw !== 'number' ||
|
|
789
|
+
!Number.isInteger(windowRaw) ||
|
|
790
|
+
typeof windowRaw === 'boolean' ||
|
|
791
|
+
windowRaw < 1
|
|
792
|
+
) {
|
|
793
|
+
throw new Error("'window_days' must be a positive integer");
|
|
794
|
+
}
|
|
795
|
+
const { read_settings } = await import(
|
|
796
|
+
'../../agent-src/templates/scripts/telemetry/settings.js'
|
|
797
|
+
);
|
|
798
|
+
const { aggregate } = await import(
|
|
799
|
+
'../../agent-src/templates/scripts/telemetry/aggregator.js'
|
|
800
|
+
);
|
|
801
|
+
const { render_json } = await import(
|
|
802
|
+
'../../agent-src/templates/scripts/telemetry/report_renderer.js'
|
|
803
|
+
);
|
|
804
|
+
const rendered = await _withChdir(consumerRoot, () => {
|
|
805
|
+
const settings = read_settings('.agent-settings.yml');
|
|
806
|
+
const cutoff = Date.now() - windowRaw * 86_400_000;
|
|
807
|
+
const result = aggregate(settings.log_path, { since: cutoff });
|
|
808
|
+
return render_json(result, { top: 20, since_label: `last ${windowRaw}d` });
|
|
809
|
+
});
|
|
810
|
+
return JSON.parse(rendered) as Record<string, unknown>;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* Phase 4 — pre-spend council cost estimate (read-only, NO network).
|
|
815
|
+
*
|
|
816
|
+
* Mirrors the `council:estimate` CLI wiring: settings via
|
|
817
|
+
* `council_cli.load_settings` (user-global-first council config),
|
|
818
|
+
* members via `build_members`, local price table via
|
|
819
|
+
* `load_prices(prices_file_for(root))` (bootstraps the gitignored
|
|
820
|
+
* in-tree `agents/runtime/.agent-prices.md` cache when absent — same as
|
|
821
|
+
* the CLI), then `estimate_debate_cost` — pure pricing math, no HTTP.
|
|
822
|
+
*/
|
|
823
|
+
async function _councilEstimateHandler(
|
|
824
|
+
args: Record<string, unknown>,
|
|
825
|
+
consumerRoot: string,
|
|
826
|
+
): Promise<Record<string, unknown>> {
|
|
827
|
+
const inputRaw = _requireString(args, 'input_path');
|
|
828
|
+
const depth = args.depth ?? null;
|
|
829
|
+
if (depth !== null && depth !== 'shallow' && depth !== 'deep') {
|
|
830
|
+
throw new Error("'depth' must be 'shallow' or 'deep' when provided");
|
|
831
|
+
}
|
|
832
|
+
const root = _resolvePath(consumerRoot);
|
|
833
|
+
const target = path.isAbsolute(inputRaw)
|
|
834
|
+
? _resolvePath(inputRaw)
|
|
835
|
+
: _resolvePath(path.join(root, inputRaw));
|
|
836
|
+
if (_relativeUnder(target, root) === null) {
|
|
837
|
+
throw new Error(`path escapes consumer_root: ${target}`);
|
|
838
|
+
}
|
|
839
|
+
if (!fs.existsSync(target)) {
|
|
840
|
+
throw new Error(`input_path not found: ${target}`);
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
const cli = await import('../council_cli.js');
|
|
844
|
+
const orchestrator = await import('../ai_council/orchestrator.js');
|
|
845
|
+
const pricing = await import('../ai_council/pricing.js');
|
|
846
|
+
const councilConfig = await import('../ai_council/config.js');
|
|
847
|
+
const clients = await import('../ai_council/clients.js');
|
|
848
|
+
const { project_settings_path } = await import('../_lib/agent_settings.js');
|
|
849
|
+
const { detect_project_context } = await import('../ai_council/project_context.js');
|
|
850
|
+
|
|
851
|
+
return _withChdir(root, () => {
|
|
852
|
+
const settings = cli.load_settings(project_settings_path(root), {
|
|
853
|
+
ai_council_path: String(councilConfig.resolve_config_path(root)),
|
|
854
|
+
});
|
|
855
|
+
const aiCfg =
|
|
856
|
+
settings.ai_council !== null &&
|
|
857
|
+
typeof settings.ai_council === 'object' &&
|
|
858
|
+
!Array.isArray(settings.ai_council)
|
|
859
|
+
? (settings.ai_council as Record<string, unknown>)
|
|
860
|
+
: {};
|
|
861
|
+
const skipped: Record<string, unknown>[] = [];
|
|
862
|
+
const members = cli.build_members(settings, { skipped });
|
|
863
|
+
const table = pricing.load_prices(pricing.prices_file_for(root));
|
|
864
|
+
|
|
865
|
+
let maxTokens =
|
|
866
|
+
'max_output_tokens' in aiCfg
|
|
867
|
+
? _pyInt(aiCfg.max_output_tokens ?? 0)
|
|
868
|
+
: clients.DEFAULT_MAX_TOKENS;
|
|
869
|
+
if (maxTokens <= 0) {
|
|
870
|
+
maxTokens = clients.UNLIMITED_TOKENS_FALLBACK;
|
|
871
|
+
}
|
|
872
|
+
const [question] = cli.build_question({
|
|
873
|
+
input_path: target,
|
|
874
|
+
input_mode: 'prompt',
|
|
875
|
+
max_tokens: maxTokens,
|
|
876
|
+
});
|
|
877
|
+
|
|
878
|
+
const minRounds = Math.max(1, _pyInt(aiCfg.min_rounds ?? 2) || 2);
|
|
879
|
+
const rounds =
|
|
880
|
+
depth === 'deep'
|
|
881
|
+
? Math.max(_pyInt(aiCfg.deep_min_rounds ?? minRounds) || minRounds, minRounds)
|
|
882
|
+
: minRounds;
|
|
883
|
+
|
|
884
|
+
const estimateResult = orchestrator.estimate_debate_cost(question, members, table, {
|
|
885
|
+
rounds,
|
|
886
|
+
project: detect_project_context(root),
|
|
887
|
+
original_ask: '',
|
|
888
|
+
});
|
|
889
|
+
return {
|
|
890
|
+
input_path: target,
|
|
891
|
+
mode: question.mode,
|
|
892
|
+
depth: depth ?? 'shallow',
|
|
893
|
+
rounds: estimateResult.rounds,
|
|
894
|
+
low_usd: estimateResult.low_usd,
|
|
895
|
+
expected_usd: estimateResult.expected_usd,
|
|
896
|
+
high_usd: estimateResult.high_usd,
|
|
897
|
+
per_member: estimateResult.per_member,
|
|
898
|
+
subscription_members: estimateResult.subscription_members,
|
|
899
|
+
skipped_members: skipped,
|
|
900
|
+
};
|
|
901
|
+
});
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
// Compiled envelope constants for the Phase 5 shell-exec pilot. Compiled
|
|
905
|
+
// policy, not configuration (council Decision 2, 2026-07-07 verdict) —
|
|
906
|
+
// changing them is a code-review event, never a settings edit.
|
|
907
|
+
const _RUN_TESTS_TIMEOUT_MS = 120_000;
|
|
908
|
+
const _RUN_TESTS_MAX_OUTPUT_BYTES = 64 * 1024;
|
|
909
|
+
|
|
910
|
+
/**
|
|
911
|
+
* Phase 5 — shell-exec pilot: run the consumer's vitest suite under the
|
|
912
|
+
* compiled safety envelope (`src/scripts/mcp_exec/safety_envelope.ts`).
|
|
913
|
+
*
|
|
914
|
+
* The ONE approved exec-tier tool from the 2026-07-07 council verdict
|
|
915
|
+
* (`agents/decisions/mcp-write-exec-cut-2026-07-07.md`). vitest-only by
|
|
916
|
+
* design: argv is a fixed array (node + the project's own vitest entry +
|
|
917
|
+
* literal flags) — caller strings become argv elements, never a shell
|
|
918
|
+
* string. The envelope module lives outside `mcp_server/`, so this module
|
|
919
|
+
* still imports no child_process (same accepted transitive pattern as
|
|
920
|
+
* `roadmap_archive`'s git effects).
|
|
921
|
+
*/
|
|
922
|
+
async function _runTestsHandler(
|
|
923
|
+
args: Record<string, unknown>,
|
|
924
|
+
consumerRoot: string,
|
|
925
|
+
): Promise<Record<string, unknown>> {
|
|
926
|
+
const root = _resolvePath(consumerRoot);
|
|
927
|
+
|
|
928
|
+
const filter = args.filter ?? null;
|
|
929
|
+
if (filter !== null && (typeof filter !== 'string' || !_strip(filter))) {
|
|
930
|
+
throw new Error("'filter' must be a non-empty string when provided");
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
const relPathRaw = args.path ?? null;
|
|
934
|
+
let relArg: string | null = null;
|
|
935
|
+
if (relPathRaw !== null) {
|
|
936
|
+
if (typeof relPathRaw !== 'string' || !_strip(relPathRaw)) {
|
|
937
|
+
throw new Error("'path' must be a non-empty string when provided");
|
|
938
|
+
}
|
|
939
|
+
const resolved = path.isAbsolute(relPathRaw)
|
|
940
|
+
? _resolvePath(relPathRaw)
|
|
941
|
+
: _resolvePath(path.join(root, relPathRaw));
|
|
942
|
+
const rel = _relativeUnder(resolved, root);
|
|
943
|
+
if (rel === null) {
|
|
944
|
+
throw new Error(`path escapes consumer_root: ${resolved}`);
|
|
945
|
+
}
|
|
946
|
+
if (!fs.existsSync(resolved)) {
|
|
947
|
+
throw new Error(`path not found: ${resolved}`);
|
|
948
|
+
}
|
|
949
|
+
relArg = rel;
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
const vitestEntry = path.join(root, 'node_modules', 'vitest', 'vitest.mjs');
|
|
953
|
+
if (!fs.existsSync(vitestEntry)) {
|
|
954
|
+
throw new Error(
|
|
955
|
+
'run_tests pilot supports vitest projects only — ' +
|
|
956
|
+
'node_modules/vitest/vitest.mjs not found under consumer_root',
|
|
957
|
+
);
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
const { run_enveloped } = await import('../mcp_exec/safety_envelope.js');
|
|
961
|
+
const argv = [
|
|
962
|
+
process.execPath,
|
|
963
|
+
vitestEntry,
|
|
964
|
+
'run',
|
|
965
|
+
...(relArg !== null ? [relArg] : []),
|
|
966
|
+
...(filter !== null ? ['--testNamePattern', filter as string] : []),
|
|
967
|
+
];
|
|
968
|
+
const result = await run_enveloped({
|
|
969
|
+
argv,
|
|
970
|
+
cwd: root,
|
|
971
|
+
timeout_ms: _RUN_TESTS_TIMEOUT_MS,
|
|
972
|
+
max_output_bytes: _RUN_TESTS_MAX_OUTPUT_BYTES,
|
|
973
|
+
});
|
|
974
|
+
return {
|
|
975
|
+
runner: 'vitest',
|
|
976
|
+
passed: result.exit_code === 0 && !result.timed_out,
|
|
977
|
+
...result,
|
|
978
|
+
} as Record<string, unknown>;
|
|
979
|
+
}
|
|
980
|
+
|
|
454
981
|
// Module-level prompt / resource caches reused across handler calls so
|
|
455
982
|
// repeated `list_*` / `read_resource_body` calls share mtime tracking.
|
|
456
983
|
const _PROMPT_CACHES = new Map<string, unknown>();
|
|
@@ -830,6 +1357,210 @@ export const ALLOWLIST: Record<string, BuiltinTool> = {
|
|
|
830
1357
|
},
|
|
831
1358
|
handler: _readResourceBodyHandler,
|
|
832
1359
|
},
|
|
1360
|
+
memory_signal: {
|
|
1361
|
+
name: 'memory_signal',
|
|
1362
|
+
description:
|
|
1363
|
+
'Record an engineering-memory signal — a short, anchored ' +
|
|
1364
|
+
'observation such as a recurring bug pattern or an ownership ' +
|
|
1365
|
+
'note — to the monthly intake log ' +
|
|
1366
|
+
'`agents/memory/intake/signals-YYYY-MM.jsonl`. Use to capture ' +
|
|
1367
|
+
'a learning tied to a specific file so future `memory_lookup` ' +
|
|
1368
|
+
'calls surface it. Appends to the filesystem and is ' +
|
|
1369
|
+
'rate-limited per `(type, path)` within a rolling window. ' +
|
|
1370
|
+
'Returns the recorded signal.',
|
|
1371
|
+
input_schema: {
|
|
1372
|
+
type: 'object',
|
|
1373
|
+
properties: {
|
|
1374
|
+
type: {
|
|
1375
|
+
type: 'string',
|
|
1376
|
+
description:
|
|
1377
|
+
'Memory type the signal belongs to (e.g. ' +
|
|
1378
|
+
'historical-patterns, incident-learnings, ownership).',
|
|
1379
|
+
},
|
|
1380
|
+
path: {
|
|
1381
|
+
type: 'string',
|
|
1382
|
+
description: 'Repo-relative anchor path the signal is about.',
|
|
1383
|
+
},
|
|
1384
|
+
body: {
|
|
1385
|
+
type: 'string',
|
|
1386
|
+
description: 'Free-form signal body — the observation to record.',
|
|
1387
|
+
},
|
|
1388
|
+
},
|
|
1389
|
+
required: ['type', 'path', 'body'],
|
|
1390
|
+
additionalProperties: false,
|
|
1391
|
+
},
|
|
1392
|
+
handler: _memorySignalHandler,
|
|
1393
|
+
},
|
|
1394
|
+
roadmap_progress: {
|
|
1395
|
+
name: 'roadmap_progress',
|
|
1396
|
+
description:
|
|
1397
|
+
'Regenerate `agents/roadmaps-progress.md` from the current ' +
|
|
1398
|
+
'checkbox state of every active roadmap. Use after landing ' +
|
|
1399
|
+
'roadmap work to keep the dashboard in sync without a shell ' +
|
|
1400
|
+
'round-trip. Writes the dashboard file inside the project ' +
|
|
1401
|
+
'tree. Set `dry_run: true` to compute counts without writing.',
|
|
1402
|
+
input_schema: {
|
|
1403
|
+
type: 'object',
|
|
1404
|
+
properties: {
|
|
1405
|
+
dry_run: {
|
|
1406
|
+
type: 'boolean',
|
|
1407
|
+
default: false,
|
|
1408
|
+
description:
|
|
1409
|
+
'When true, return the computed dashboard without ' +
|
|
1410
|
+
'writing the file.',
|
|
1411
|
+
},
|
|
1412
|
+
},
|
|
1413
|
+
additionalProperties: false,
|
|
1414
|
+
},
|
|
1415
|
+
handler: _roadmapProgressHandler,
|
|
1416
|
+
},
|
|
1417
|
+
roadmap_archive: {
|
|
1418
|
+
name: 'roadmap_archive',
|
|
1419
|
+
description:
|
|
1420
|
+
'Archive every roadmap that has reached `count_open == 0` and ' +
|
|
1421
|
+
'was touched on the current branch — `git mv` to ' +
|
|
1422
|
+
'`agents/roadmaps/archive/`, migrate inbound references, and ' +
|
|
1423
|
+
'regenerate the dashboard. Use as the PR-gate sweep before ' +
|
|
1424
|
+
'opening a pull request. Mutates the git index (moves tracked ' +
|
|
1425
|
+
'files) but never commits or pushes.',
|
|
1426
|
+
input_schema: {
|
|
1427
|
+
type: 'object',
|
|
1428
|
+
properties: {},
|
|
1429
|
+
additionalProperties: false,
|
|
1430
|
+
},
|
|
1431
|
+
handler: _roadmapArchiveHandler,
|
|
1432
|
+
},
|
|
1433
|
+
capabilities_index: {
|
|
1434
|
+
name: 'capabilities_index',
|
|
1435
|
+
description:
|
|
1436
|
+
"Regenerate `CAPABILITIES.yaml`, the package's coverage index " +
|
|
1437
|
+
'of skills, rules, commands, and guidelines. Use after adding ' +
|
|
1438
|
+
'or removing an artifact to keep the index current. Pass ' +
|
|
1439
|
+
'`check: true` to run in read-only CI mode (fails instead of ' +
|
|
1440
|
+
'writing on drift).',
|
|
1441
|
+
input_schema: {
|
|
1442
|
+
type: 'object',
|
|
1443
|
+
properties: {
|
|
1444
|
+
check: {
|
|
1445
|
+
type: 'boolean',
|
|
1446
|
+
default: false,
|
|
1447
|
+
description:
|
|
1448
|
+
'When true, run in read-only drift-check mode ' +
|
|
1449
|
+
'instead of writing the index.',
|
|
1450
|
+
},
|
|
1451
|
+
},
|
|
1452
|
+
additionalProperties: false,
|
|
1453
|
+
},
|
|
1454
|
+
handler: _capabilitiesIndexHandler,
|
|
1455
|
+
},
|
|
1456
|
+
doctor_report: {
|
|
1457
|
+
name: 'doctor_report',
|
|
1458
|
+
description:
|
|
1459
|
+
'Run the consumer-project doctor diagnostic and return a ' +
|
|
1460
|
+
'structured health report (install drift, hook wiring, ' +
|
|
1461
|
+
'settings schema, discovery manifest freshness). Use to triage ' +
|
|
1462
|
+
'a misbehaving install. Read-only.',
|
|
1463
|
+
input_schema: {
|
|
1464
|
+
type: 'object',
|
|
1465
|
+
properties: {},
|
|
1466
|
+
additionalProperties: false,
|
|
1467
|
+
},
|
|
1468
|
+
handler: _doctorReportHandler,
|
|
1469
|
+
},
|
|
1470
|
+
conformance_check: {
|
|
1471
|
+
name: 'conformance_check',
|
|
1472
|
+
description:
|
|
1473
|
+
'Run the consumer conformance contract (`doctor --ci` plus ' +
|
|
1474
|
+
'installed-and-firing checks) and return pass/fail per check. ' +
|
|
1475
|
+
"Use to verify a consumer project's install is fully wired " +
|
|
1476
|
+
'before relying on it. Read-only.',
|
|
1477
|
+
input_schema: {
|
|
1478
|
+
type: 'object',
|
|
1479
|
+
properties: {},
|
|
1480
|
+
additionalProperties: false,
|
|
1481
|
+
},
|
|
1482
|
+
handler: _conformanceCheckHandler,
|
|
1483
|
+
},
|
|
1484
|
+
telemetry_report: {
|
|
1485
|
+
name: 'telemetry_report',
|
|
1486
|
+
description:
|
|
1487
|
+
'Return the artefact-engagement telemetry report — essential ' +
|
|
1488
|
+
'/ useful / retirement-candidate skills and rules ranked by ' +
|
|
1489
|
+
'recorded consult+apply signals over a rolling window. Use to ' +
|
|
1490
|
+
'see which artifacts are actually load-bearing. Read-only. ' +
|
|
1491
|
+
'No-op (empty report) when telemetry recording is disabled.',
|
|
1492
|
+
input_schema: {
|
|
1493
|
+
type: 'object',
|
|
1494
|
+
properties: {
|
|
1495
|
+
window_days: {
|
|
1496
|
+
type: 'integer',
|
|
1497
|
+
minimum: 1,
|
|
1498
|
+
default: 30,
|
|
1499
|
+
description: 'Reporting window in days. Defaults to 30.',
|
|
1500
|
+
},
|
|
1501
|
+
},
|
|
1502
|
+
additionalProperties: false,
|
|
1503
|
+
},
|
|
1504
|
+
handler: _telemetryReportHandler,
|
|
1505
|
+
},
|
|
1506
|
+
council_estimate: {
|
|
1507
|
+
name: 'council_estimate',
|
|
1508
|
+
description:
|
|
1509
|
+
'Estimate the token cost of an AI-council debate over a given ' +
|
|
1510
|
+
'input (roadmap, diff, prompt, or file set) without spending ' +
|
|
1511
|
+
'— no network call, no billing. Use before deciding whether ' +
|
|
1512
|
+
'to authorize a real council run. Read-only.',
|
|
1513
|
+
input_schema: {
|
|
1514
|
+
type: 'object',
|
|
1515
|
+
properties: {
|
|
1516
|
+
input_path: {
|
|
1517
|
+
type: 'string',
|
|
1518
|
+
description:
|
|
1519
|
+
'Path to the roadmap, diff, or file to estimate ' +
|
|
1520
|
+
'council cost for.',
|
|
1521
|
+
},
|
|
1522
|
+
depth: {
|
|
1523
|
+
type: 'string',
|
|
1524
|
+
enum: ['shallow', 'deep'],
|
|
1525
|
+
description:
|
|
1526
|
+
'Council depth tier to estimate for. Defaults to ' +
|
|
1527
|
+
'the configured default depth.',
|
|
1528
|
+
},
|
|
1529
|
+
},
|
|
1530
|
+
required: ['input_path'],
|
|
1531
|
+
additionalProperties: false,
|
|
1532
|
+
},
|
|
1533
|
+
handler: _councilEstimateHandler,
|
|
1534
|
+
},
|
|
1535
|
+
run_tests: {
|
|
1536
|
+
name: 'run_tests',
|
|
1537
|
+
description:
|
|
1538
|
+
"Run the consumer project's vitest test suite under a " +
|
|
1539
|
+
'compiled safety envelope: fixed argv (no shell ' +
|
|
1540
|
+
'interpolation), 120s timeout, 64KB output cap per stream. ' +
|
|
1541
|
+
'Shell-exec pilot per the 2026-07-07 council cut — vitest ' +
|
|
1542
|
+
'projects only; other runners (Pest / PHPUnit, pytest, Jest) ' +
|
|
1543
|
+
'return an error until a future council round approves them. ' +
|
|
1544
|
+
'Pass `filter` (vitest --testNamePattern) or `path` (in-tree ' +
|
|
1545
|
+
'file or directory) to narrow the run. Returns runner, ' +
|
|
1546
|
+
'passed, exit_code, timed_out, truncated stdout/stderr, and ' +
|
|
1547
|
+
'duration_ms.',
|
|
1548
|
+
input_schema: {
|
|
1549
|
+
type: 'object',
|
|
1550
|
+
properties: {
|
|
1551
|
+
filter: {
|
|
1552
|
+
type: 'string',
|
|
1553
|
+
description: 'Restrict to tests matching this name pattern.',
|
|
1554
|
+
},
|
|
1555
|
+
path: {
|
|
1556
|
+
type: 'string',
|
|
1557
|
+
description: 'Restrict to tests under this directory.',
|
|
1558
|
+
},
|
|
1559
|
+
},
|
|
1560
|
+
additionalProperties: false,
|
|
1561
|
+
},
|
|
1562
|
+
handler: _runTestsHandler,
|
|
1563
|
+
},
|
|
833
1564
|
};
|
|
834
1565
|
|
|
835
1566
|
/** Render a `BuiltinTool` as kwargs for `mcp.types.Tool`. */
|