@event4u/agent-config 9.7.0 → 9.9.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 +1 -1
- package/CHANGELOG.md +314 -190
- package/CONTRIBUTING.md +23 -7
- package/MIGRATION.md +20 -0
- package/README.md +57 -11
- package/dist/agent-src/commands/agents/audit.md +1 -1
- package/dist/agent-src/commands/agents/optimize.md +2 -2
- package/dist/agent-src/commands/agents/user.md +1 -1
- package/dist/agent-src/commands/agents.md +1 -1
- package/dist/agent-src/commands/check-current-md.md +3 -3
- package/dist/agent-src/commands/commit/in-chunks.md +8 -0
- package/dist/agent-src/commands/commit.md +17 -0
- package/dist/agent-src/commands/fix/portability.md +2 -2
- package/dist/agent-src/commands/fix/pr-comments-loop.md +136 -0
- package/dist/agent-src/commands/fix/refs.md +2 -2
- package/dist/agent-src/commands/fix/route.md +4 -3
- package/dist/agent-src/commands/fix.md +9 -6
- package/dist/agent-src/commands/ghostwriter.md +1 -1
- package/dist/agent-src/commands/image.md +1 -1
- package/dist/agent-src/commands/optimize/augmentignore.md +1 -1
- package/dist/agent-src/commands/optimize/skills.md +2 -2
- package/dist/agent-src/commands/post-as.md +1 -1
- package/dist/agent-src/commands/pr/create.md +4 -0
- package/dist/agent-src/commands/research.md +1 -1
- package/dist/agent-src/commands/roadmap/ai-council.md +1 -1
- package/dist/agent-src/commands/security-audit-config.md +1 -1
- package/dist/agent-src/commands/team/delegate.md +4 -0
- package/dist/agent-src/commands/video.md +1 -1
- package/dist/agent-src/contexts/authority/kernel-rule-edits.md +1 -1
- package/dist/agent-src/contexts/contracts/emergency-triage-block.md +2 -2
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +48 -2
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +10 -0
- package/dist/agent-src/contexts/execution/subagent-modes-detail.md +109 -8
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +20 -0
- package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +53 -3
- package/dist/agent-src/contexts/override-system.md +75 -5
- package/dist/agent-src/rules/code-provenance.md +112 -0
- package/dist/agent-src/rules/context-hygiene.md +2 -0
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
- package/dist/agent-src/rules/domain-safety-pii.md +1 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
- package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
- package/dist/agent-src/rules/git-history-discipline.md +2 -0
- package/dist/agent-src/rules/history-discipline.md +80 -0
- package/dist/agent-src/rules/language-and-tone.md +2 -0
- package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
- package/dist/agent-src/rules/media-governance-routing.md +2 -0
- package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
- package/dist/agent-src/rules/no-roadmap-references.md +4 -1
- package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
- package/dist/agent-src/rules/onboarding-gate.md +2 -0
- package/dist/agent-src/rules/output-discipline.md +2 -0
- package/dist/agent-src/rules/persona-governance.md +2 -0
- package/dist/agent-src/rules/php-coding.md +1 -0
- package/dist/agent-src/rules/preservation-guard.md +3 -0
- package/dist/agent-src/rules/reviewer-awareness.md +1 -0
- package/dist/agent-src/rules/roadmap-ci-steps-policy.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +9 -0
- package/dist/agent-src/rules/scale-discipline.md +92 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +11 -1
- package/dist/agent-src/rules/session-canary.md +77 -0
- package/dist/agent-src/rules/skill-quality.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +2 -0
- package/dist/agent-src/rules/source-of-truth.md +2 -0
- package/dist/agent-src/rules/telegraph-speak.md +2 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +3 -1
- package/dist/agent-src/rules/tool-safety.md +4 -1
- package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
- package/dist/agent-src/rules/verify-before-complete.md +2 -0
- package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +97 -0
- package/dist/agent-src/skills/condense-memory/SKILL.md +1 -1
- package/dist/agent-src/skills/corpus-grounding/SKILL.md +0 -3
- package/dist/agent-src/skills/description-assist/SKILL.md +1 -1
- package/dist/agent-src/skills/design-review/SKILL.md +5 -6
- package/dist/agent-src/skills/design-tokens/SKILL.md +0 -1
- package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
- package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
- package/dist/agent-src/skills/history-design/SKILL.md +101 -0
- package/dist/agent-src/skills/history-design/evals/triggers.json +17 -0
- package/dist/agent-src/skills/humanizer/SKILL.md +3 -3
- package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
- package/dist/agent-src/skills/image-editing/SKILL.md +2 -1
- package/dist/agent-src/skills/image-generation/SKILL.md +2 -1
- package/dist/agent-src/skills/image-provider-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/launch-readiness/SKILL.md +1 -1
- package/dist/agent-src/skills/license-compliance-audit/SKILL.md +161 -0
- package/dist/agent-src/skills/license-compliance-audit/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/SKILL.md +145 -0
- package/dist/agent-src/skills/license-compliance-borrow-check/evals/triggers.json +52 -0
- package/dist/agent-src/skills/license-compliance-credits/SKILL.md +97 -0
- package/dist/agent-src/skills/license-compliance-credits/evals/triggers.json +52 -0
- package/dist/agent-src/skills/md-language-check/SKILL.md +1 -1
- package/dist/agent-src/skills/override-management/SKILL.md +1 -1
- package/dist/agent-src/skills/prediction-pool-optimizer/SKILL.md +7 -7
- package/dist/agent-src/skills/project-analysis-core/SKILL.md +1 -1
- package/dist/agent-src/skills/prompt-engineering-image/SKILL.md +3 -2
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +2 -2
- package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
- package/dist/agent-src/skills/recursive-verification/SKILL.md +6 -0
- package/dist/agent-src/skills/refine-ticket/SKILL.md +3 -3
- package/dist/agent-src/skills/roadmap-writing/SKILL.md +4 -0
- package/dist/agent-src/skills/rtk-output-filtering/SKILL.md +31 -12
- package/dist/agent-src/skills/rule-refactor/SKILL.md +3 -3
- package/dist/agent-src/skills/schema-review/SKILL.md +92 -0
- package/dist/agent-src/skills/schema-review/evals/triggers.json +17 -0
- package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
- package/dist/agent-src/skills/secrets-management/SKILL.md +43 -1
- package/dist/agent-src/skills/security-audit/SKILL.md +1 -1
- package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +3 -3
- package/dist/agent-src/skills/skill-writing/SKILL.md +2 -2
- package/dist/agent-src/skills/source-discovery/SKILL.md +5 -5
- package/dist/agent-src/skills/subagent-orchestration/SKILL.md +45 -85
- package/dist/agent-src/skills/subagent-orchestration/prompts/README.md +5 -4
- package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
- package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
- package/dist/agent-src/skills/systematic-debugging/SKILL.md +2 -2
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +2 -3
- package/dist/agent-src/skills/token-optimizer/SKILL.md +4 -4
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
- package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +2 -3
- package/dist/agent-src/templates/AGENTS.md +1 -1
- package/dist/agent-src/templates/agents/.gitattributes.fragment +25 -6
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/command.md +3 -3
- package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
- package/dist/agent-src/templates/persona.md +2 -2
- package/dist/agent-src/templates/rule.md +2 -2
- package/dist/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/dist/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/dist/cli/commands/doctorShell.js +20 -0
- package/dist/cli/commands/doctorShell.js.map +1 -1
- package/dist/cli/commands/rtkDetect.js +58 -0
- package/dist/cli/commands/rtkDetect.js.map +1 -0
- package/dist/cli/configRoot.js +112 -0
- package/dist/cli/configRoot.js.map +1 -0
- package/dist/cli/configRoot.test.js +97 -0
- package/dist/cli/configRoot.test.js.map +1 -0
- package/dist/cli/firstRunNotice.js +70 -0
- package/dist/cli/firstRunNotice.js.map +1 -0
- package/dist/cli/help.js +4 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/main.js +54 -5
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/registry.js +8 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +502 -101
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +6 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +95 -8
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +36 -7
- package/dist/hooks/dispatch.js +19475 -0
- package/dist/install/agentSwitchDetection.js +75 -0
- package/dist/install/agentSwitchDetection.js.map +1 -0
- package/dist/install/agentSwitchProfile.js +117 -0
- package/dist/install/agentSwitchProfile.js.map +1 -0
- package/dist/install/atomic.js +1 -1
- package/dist/install/detect.js +1 -1
- package/dist/install/install.mjs +791 -486
- package/dist/install/rtkDetection.js +213 -0
- package/dist/install/rtkDetection.js.map +1 -0
- package/dist/install/rule_scope.js +2 -1
- package/dist/install/rule_scope.js.map +1 -1
- package/dist/install/types.js +2 -2
- package/dist/install/wizard-plan.js +1 -1
- package/dist/install/wizardDismissals.js +58 -0
- package/dist/install/wizardDismissals.js.map +1 -0
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +15 -4
- package/dist/mcp/server.json +20 -0
- package/dist/mcp/server.mjs +44292 -0
- package/dist/router.json +1 -1
- package/dist/scripts/condense.js +14 -7
- package/dist/scripts/condense.js.map +1 -1
- package/dist/server/app.js +12 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/io/sharedWriteCheck.js +101 -0
- package/dist/server/io/sharedWriteCheck.js.map +1 -0
- package/dist/server/routes/ping.js +32 -0
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/settings.js +21 -4
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/userMd.js +21 -4
- package/dist/server/routes/userMd.js.map +1 -1
- package/dist/server/routes/wizard.js +68 -25
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/schemas/settings.js +12 -2
- package/dist/server/schemas/settings.js.map +1 -1
- package/dist/server/serverInfo.js +6 -2
- package/dist/server/serverInfo.js.map +1 -1
- package/dist/server/token.js +11 -4
- package/dist/server/token.js.map +1 -1
- package/dist/server/writeRoot.js +15 -1
- package/dist/server/writeRoot.js.map +1 -1
- package/dist/shared/capabilities.js +33 -0
- package/dist/shared/capabilities.js.map +1 -0
- package/dist/shared/capabilities.test.js +39 -0
- package/dist/shared/capabilities.test.js.map +1 -0
- package/dist/ui/assets/index-BpSQt5vm.js +40 -0
- package/dist/ui/assets/index-BpSQt5vm.js.map +1 -0
- package/dist/ui/assets/index-jSfMW8_t.css +1 -0
- package/dist/ui/index.html +15 -6
- package/docs/MIGRATION.md +16 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
- package/package.json +22 -9
- package/src/agent-src/templates/AGENTS.md +1 -1
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +77 -0
- package/src/agent-src/templates/scripts/telemetry_record.ts +33 -1
- package/src/config/agent-settings.template.yml +94 -13
- package/src/config/discovery/packs.yml +22 -0
- package/src/config/discovery/workspaces.yml +1 -1
- package/src/config/evaluator-budgets.json +47 -0
- package/src/config/hook-latency-budget.json +20 -0
- package/src/config/reach-channels.yml +217 -0
- package/src/config/reach-prescriptions-intake.yml +200 -0
- package/src/install/agentSwitchDetection.ts +90 -0
- package/src/install/agentSwitchProfile.ts +131 -0
- package/src/install/atomic.ts +1 -1
- package/src/install/detect.ts +1 -1
- package/src/install/rtkDetection.ts +274 -0
- package/src/install/rule_scope.ts +9 -2
- package/src/install/types.ts +2 -2
- package/src/install/wizard-plan.ts +1 -1
- package/src/install/wizardDismissals.ts +60 -0
- package/src/scripts/_cli/cmd_doctor.ts +62 -1
- package/src/scripts/_cli/cmd_memory_get.ts +197 -0
- package/src/scripts/_cli/cmd_refresh.ts +30 -0
- package/src/scripts/_dispatch.bash +96 -0
- package/src/scripts/_lib/auto_dispatch.corpus.test.ts +64 -1
- package/src/scripts/_lib/auto_dispatch.ts +76 -0
- package/src/scripts/_lib/detect_target_license.ts +714 -0
- package/src/scripts/_lib/exec_evidence.ts +251 -0
- package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +15 -0
- package/src/scripts/_lib/fixtures/secret-detector/positives.txt +15 -0
- package/src/scripts/_lib/install_drift.ts +194 -0
- package/src/scripts/_lib/kernel_rules.ts +46 -0
- package/src/scripts/_lib/memory_fts_index.ts +390 -0
- package/src/scripts/_lib/orchestration_record.ts +91 -2
- package/src/scripts/_lib/persistence/adapter_raw_sql.ts +443 -0
- package/src/scripts/_lib/persistence/detect_audit_coverage.ts +423 -0
- package/src/scripts/_lib/persistence/detect_bounded_reads.ts +154 -0
- package/src/scripts/_lib/persistence/detect_index_parity.ts +576 -0
- package/src/scripts/_lib/persistence/detect_n1_eloquent.ts +226 -0
- package/src/scripts/_lib/persistence/detect_offload.ts +441 -0
- package/src/scripts/_lib/persistence/detect_prisma_growth.ts +74 -0
- package/src/scripts/_lib/persistence/offload_catalog.ts +73 -0
- package/src/scripts/_lib/persistence/types.ts +109 -0
- package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
- package/src/scripts/_lib/risk_paths.ts +160 -0
- package/src/scripts/_lib/rtk_allowlist.ts +44 -0
- package/src/scripts/_lib/secret_detector.test.ts +108 -0
- package/src/scripts/_lib/secret_detector.ts +328 -0
- package/src/scripts/_lib/secret_detector_adversarial.test.ts +116 -0
- package/src/scripts/_lib/spawn_env.ts +7 -0
- package/src/scripts/_lib/sqlite_guard.ts +191 -0
- package/src/scripts/_lib/subagent_spawn.ts +53 -0
- package/src/scripts/_lib/tool_probe.ts +359 -0
- package/src/scripts/_lib/worker_budget.ts +107 -0
- package/src/scripts/adr/regenerate_index.ts +81 -6
- package/src/scripts/ai_council/blind_review.ts +0 -0
- package/src/scripts/ai_council/config.ts +12 -6
- package/src/scripts/ai_council/orchestrator.ts +73 -3
- package/src/scripts/ai_team/review_gate.ts +8 -10
- package/src/scripts/ai_team/team_dispatch.ts +48 -0
- package/src/scripts/audit_adr_coverage.ts +33 -0
- package/src/scripts/audit_initial_context.ts +1 -1
- package/src/scripts/bench_cross_source_eval.ts +400 -0
- package/src/scripts/bench_honesty_score.ts +1093 -0
- package/src/scripts/bench_hook_latency.ts +218 -0
- package/src/scripts/build_mcp_catalog.ts +275 -0
- package/src/scripts/build_mcp_registry_manifest.ts +46 -0
- package/src/scripts/build_proof.ts +207 -0
- package/src/scripts/chat_history.ts +8 -5
- package/src/scripts/check_adr_frontmatter.ts +195 -0
- package/src/scripts/check_artefact_count_messaging.ts +4 -0
- package/src/scripts/check_backstop_debt.ts +210 -0
- package/src/scripts/check_bundle_path_leakage.ts +343 -0
- package/src/scripts/check_claims.ts +188 -8
- package/src/scripts/check_comparison.ts +12 -0
- package/src/scripts/check_enforcement_coverage.ts +592 -0
- package/src/scripts/check_evaluator_budgets.ts +99 -0
- package/src/scripts/check_kernel_rule_bundle.ts +16 -12
- package/src/scripts/check_knowledge_sharing.ts +12 -1
- package/src/scripts/check_no_external_sources.ts +2 -2
- package/src/scripts/check_reach_channels.ts +407 -0
- package/src/scripts/check_reach_staleness.ts +364 -0
- package/src/scripts/check_secret_leak.test.ts +47 -0
- package/src/scripts/check_secret_leak.ts +290 -0
- package/src/scripts/check_source_pointer_freshness.ts +28 -3
- package/src/scripts/code_graph/build.ts +0 -0
- package/src/scripts/code_graph/cli.ts +379 -0
- package/src/scripts/code_graph/detect.ts +186 -0
- package/src/scripts/code_graph/extract.ts +386 -0
- package/src/scripts/code_graph/intent.ts +45 -0
- package/src/scripts/code_graph/loader.ts +123 -0
- package/src/scripts/code_graph/query.ts +290 -0
- package/src/scripts/code_graph/sanitize.ts +30 -0
- package/src/scripts/code_graph/sqlite_store.ts +174 -0
- package/src/scripts/code_graph/types.ts +83 -0
- package/src/scripts/code_graph/validate.ts +63 -0
- package/src/scripts/condense.ts +14 -6
- package/src/scripts/context_hygiene_hook.ts +8 -5
- package/src/scripts/council_cli.ts +126 -12
- package/src/scripts/detect_target_license.ts +203 -0
- package/src/scripts/evaluator_umbrella.sh +145 -0
- package/src/scripts/external_sources_denylist.json +8 -4
- package/src/scripts/first_run_gate_hook.ts +9 -5
- package/src/scripts/generate_subagent_floor.ts +194 -0
- package/src/scripts/hermetic-install.sh +3 -3
- package/src/scripts/hook_manifest.yaml +65 -16
- package/src/scripts/hooks/block_kernel_rule_writes.ts +212 -0
- package/src/scripts/hooks/block_no_verify.ts +9 -9
- package/src/scripts/hooks/code_graph_nudge_hook.ts +191 -0
- package/src/scripts/hooks/concern_registry.ts +75 -0
- package/src/scripts/hooks/design_slop_hook.ts +8 -5
- package/src/scripts/hooks/dispatch_entry.ts +37 -0
- package/src/scripts/hooks/dispatch_hook.ts +176 -3
- package/src/scripts/hooks/hook_stdin.ts +42 -0
- package/src/scripts/hooks/rtk_wrap_hook.ts +26 -12
- package/src/scripts/hot_context_hook.ts +7 -6
- package/src/scripts/injection_scan_hook.ts +9 -1
- package/src/scripts/install +6 -6
- package/src/scripts/install-hooks.sh +4 -4
- package/src/scripts/install.sh +5 -4
- package/src/scripts/install.ts +264 -23
- package/src/scripts/iron_law_sha.ts +3 -12
- package/src/scripts/learning_sidecar.ts +0 -0
- package/src/scripts/lint_budget_ownership.ts +89 -0
- package/src/scripts/lint_command_routing.ts +35 -5
- package/src/scripts/lint_command_verbs.ts +42 -9
- package/src/scripts/lint_consumer_internal_refs.ts +211 -0
- package/src/scripts/lint_discovery_vocabulary.ts +2 -0
- package/src/scripts/lint_documented_commands.ts +670 -0
- package/src/scripts/lint_framework_leakage.ts +17 -3
- package/src/scripts/lint_framework_leakage_allowlist.json +32 -0
- package/src/scripts/lint_governed_writes.ts +335 -0
- package/src/scripts/lint_hidden_unicode.ts +6 -0
- package/src/scripts/lint_mcp_registry_manifest.ts +26 -1
- package/src/scripts/lint_memory_tripwire.ts +186 -0
- package/src/scripts/lint_override_kernel_guard.ts +267 -0
- package/src/scripts/lint_persistence.ts +171 -0
- package/src/scripts/lint_pre_migration_refs.ts +106 -0
- package/src/scripts/lint_provenance.ts +547 -0
- package/src/scripts/lint_provenance_vocabulary.ts +437 -0
- package/src/scripts/lint_spawn_payload.ts +283 -0
- package/src/scripts/lint_store_boundary.ts +152 -0
- package/src/scripts/lint_versioned_cache.ts +7 -1
- package/src/scripts/mcp_server/__main__.ts +7 -2
- package/src/scripts/mcp_server/catalog.ts +23 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +563 -193
- package/src/scripts/mcp_server/prompts.ts +6 -0
- package/src/scripts/mcp_server/tool_catalog_source.ts +332 -0
- package/src/scripts/mcp_server/tools.ts +56 -5
- package/src/scripts/mcp_telemetry_query.ts +2 -33
- package/src/scripts/mcp_telemetry_store.ts +64 -34
- package/src/scripts/measure_rule_budget.ts +3 -12
- package/src/scripts/memory_learn_hook.ts +126 -0
- package/src/scripts/memory_lookup.ts +0 -0
- package/src/scripts/memory_replay_24.ts +312 -0
- package/src/scripts/memory_report.ts +16 -3
- package/src/scripts/memory_signal.ts +48 -0
- package/src/scripts/memory_status.ts +6 -0
- package/src/scripts/minimal_safe_diff_hook.ts +8 -5
- package/src/scripts/onboarding_gate_hook.ts +8 -5
- package/src/scripts/orchestration_record.ts +16 -0
- package/src/scripts/pr_url_reminder_hook.ts +8 -1
- package/src/scripts/prepack-check.mjs +17 -0
- package/src/scripts/prepack_lifecycle_check.d.mts +8 -0
- package/src/scripts/prepack_lifecycle_check.mjs +82 -0
- package/src/scripts/profile_staleness_hook.ts +8 -7
- package/src/scripts/reach_doctor.ts +1651 -0
- package/src/scripts/release.ts +24 -3
- package/src/scripts/report_install_drift.ts +109 -0
- package/src/scripts/risk_escalation_shadow.ts +160 -0
- package/src/scripts/roadmap_progress_hook.ts +8 -5
- package/src/scripts/schemas/agent-settings.schema.json +23 -0
- package/src/scripts/schemas/license-policy.schema.json +89 -0
- package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
- package/src/scripts/schemas/reach-channels.schema.json +134 -0
- package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
- package/src/scripts/schemas/rule.schema.json +20 -0
- package/src/scripts/self_review_gate.test.ts +173 -1
- package/src/scripts/self_review_gate.ts +155 -15
- package/src/scripts/session_canary_hook.ts +182 -0
- package/src/scripts/skill_linter.ts +55 -0
- package/src/scripts/smoke_quickstart.ts +2 -2
- package/src/scripts/surface_probe_hook.ts +8 -7
- package/src/scripts/sync_gitattributes.ts +310 -0
- package/src/scripts/team_review_gate_hook.ts +13 -16
- package/src/scripts/validate_reach_prescriptions.ts +751 -0
- package/src/scripts/verify_before_complete_hook.ts +8 -5
- package/src/scripts/wrapper_freshness_hook.ts +8 -7
- package/src/server/schemas/settings.ts +24 -2
- package/src/shared/capabilities.test.ts +43 -0
- package/src/shared/capabilities.ts +75 -0
- package/src/templates/minimal/agents-overrides-readme.md +20 -0
- package/dist/ui/assets/index-BPFMZWUs.css +0 -1
- package/dist/ui/assets/index-BiEZiZ31.js +0 -40
- package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
- package/docs/CLAIMS.md +0 -261
- package/docs/DISTRIBUTION_CHECKLIST.md +0 -170
- package/docs/RELEASE_STORY_TEMPLATE.md +0 -37
- package/docs/SKILL_CENSUS.md +0 -352
- package/docs/adrs/cost/0001-hard-stop-hook.md +0 -114
- package/docs/adrs/cost/README.md +0 -9
- package/docs/adrs/memory/0001-consumer-side-snapshot.md +0 -119
- package/docs/adrs/memory/README.md +0 -10
- package/docs/adrs/router/0001-three-tier-routing.md +0 -119
- package/docs/adrs/router/README.md +0 -9
- package/docs/adrs/schema/0001-json-schema-frontmatter.md +0 -102
- package/docs/adrs/schema/README.md +0 -9
- package/docs/adrs/smoke/0001-per-tier-smoke-scripts.md +0 -99
- package/docs/adrs/smoke/README.md +0 -9
- package/docs/adrs/telegraph/0001-default-off-until-bench.md +0 -93
- package/docs/adrs/telegraph/README.md +0 -9
- package/docs/announcements/2026-05-non-dev-launch.md +0 -79
- package/docs/announcements/2026-07-honest-cost-sweep-launch.md +0 -84
- package/docs/anti-reskin-gate.md +0 -60
- package/docs/architecture/augment-projection.md +0 -70
- package/docs/architecture/claude-bundle.md +0 -77
- package/docs/architecture/current-onboard-baseline.md +0 -126
- package/docs/architecture/current-safety-behavior.md +0 -137
- package/docs/architecture/multi-tool-projection.md +0 -125
- package/docs/architecture/setup-vs-settings-shared-surface.md +0 -114
- package/docs/architecture/source-projection.md +0 -85
- package/docs/architecture.md +0 -390
- package/docs/archive/CHANGELOG-6.0.0-overview.md +0 -953
- package/docs/archive/CHANGELOG-7.0.0.md +0 -419
- package/docs/archive/CHANGELOG-pre-2.11.0.md +0 -141
- package/docs/archive/CHANGELOG-pre-2.15.0.md +0 -244
- package/docs/archive/CHANGELOG-pre-2.16.0.md +0 -48
- package/docs/archive/CHANGELOG-pre-2.17.0.md +0 -63
- package/docs/archive/CHANGELOG-pre-2.2.0.md +0 -2138
- package/docs/archive/CHANGELOG-pre-2.20.0.md +0 -159
- package/docs/archive/CHANGELOG-pre-2.25.0.md +0 -191
- package/docs/archive/CHANGELOG-pre-2.7.0.md +0 -185
- package/docs/archive/CHANGELOG-pre-3.0.0.md +0 -130
- package/docs/archive/CHANGELOG-pre-3.1.0.md +0 -167
- package/docs/archive/CHANGELOG-pre-3.2.0.md +0 -268
- package/docs/archive/CHANGELOG-pre-4.0.0.md +0 -80
- package/docs/archive/CHANGELOG-pre-4.5.0.md +0 -289
- package/docs/archive/CHANGELOG-pre-5.4.0.md +0 -260
- package/docs/archive/CHANGELOG-pre-5.9.0.md +0 -270
- package/docs/archive/CHANGELOG-pre-6.0.0.md +0 -473
- package/docs/archive/CHANGELOG-pre-7.0.0.md +0 -126
- package/docs/archive/CHANGELOG-pre-8.0.0.md +0 -301
- package/docs/archive/CHANGELOG-pre-8.1.0.md +0 -316
- package/docs/archive/CHANGELOG-pre-8.12.0.md +0 -304
- package/docs/archive/CHANGELOG-pre-8.9.0.md +0 -306
- package/docs/archive/CHANGELOG-pre-9.2.0.md +0 -276
- package/docs/artefact-census.md +0 -71
- package/docs/benchmark.md +0 -648
- package/docs/benchmark.pinned.yml +0 -31
- package/docs/benchmarks.md +0 -85
- package/docs/capability-matrix.md +0 -33
- package/docs/case-studies/_template.md +0 -60
- package/docs/case-studies/frontend-design-positioning.md +0 -86
- package/docs/catalog.md +0 -721
- package/docs/command-flows.md +0 -272
- package/docs/command-naming-audit.md +0 -60
- package/docs/comparison.yaml +0 -45
- package/docs/contracts/CHANGELOG-conventions.md +0 -149
- package/docs/contracts/STABILITY.md +0 -188
- package/docs/contracts/adoption-signal-floor.md +0 -127
- package/docs/contracts/adr-architectural-consensus-mechanism.md +0 -68
- package/docs/contracts/adr-chat-history-split.md +0 -140
- package/docs/contracts/adr-command-suggestion.md +0 -144
- package/docs/contracts/adr-forecast-construction-shape.md +0 -90
- package/docs/contracts/adr-gtm-context-spine.md +0 -116
- package/docs/contracts/adr-implement-ticket-runtime.md +0 -121
- package/docs/contracts/adr-install-user-type-axis.md +0 -107
- package/docs/contracts/adr-layout.md +0 -107
- package/docs/contracts/adr-level-6-productization.md +0 -145
- package/docs/contracts/adr-mcp-runtime.md +0 -128
- package/docs/contracts/adr-product-ui-track.md +0 -381
- package/docs/contracts/adr-prompt-driven-execution.md +0 -186
- package/docs/contracts/adr-settings-sync-engine.md +0 -128
- package/docs/contracts/adr-user-types-axis.md +0 -127
- package/docs/contracts/adr-wing4-context-spine.md +0 -126
- package/docs/contracts/agent-user-schema.md +0 -170
- package/docs/contracts/agents-layout.md +0 -148
- package/docs/contracts/agents-md-tech-stack.md +0 -75
- package/docs/contracts/ai-council-config.md +0 -829
- package/docs/contracts/ai-team-config.md +0 -224
- package/docs/contracts/analysis-memory-loop.md +0 -149
- package/docs/contracts/at-rest-encryption.md +0 -191
- package/docs/contracts/audit-log-v1.md +0 -150
- package/docs/contracts/auto-orchestration-v1.md +0 -70
- package/docs/contracts/benchmark-ab-contract.md +0 -106
- package/docs/contracts/benchmark-corpus-spec.md +0 -125
- package/docs/contracts/benchmark-report-schema.md +0 -113
- package/docs/contracts/branch-protection-policy.md +0 -139
- package/docs/contracts/brand-token-consumption.md +0 -74
- package/docs/contracts/capability-boundary.md +0 -69
- package/docs/contracts/capability-packs.md +0 -217
- package/docs/contracts/ci-cost-budget.md +0 -111
- package/docs/contracts/ci-green-floor.md +0 -141
- package/docs/contracts/command-category-governance.md +0 -84
- package/docs/contracts/command-clusters.md +0 -399
- package/docs/contracts/command-surface-tiers.md +0 -176
- package/docs/contracts/command-taxonomy.md +0 -137
- package/docs/contracts/condensation-default-kill-criterion.md +0 -116
- package/docs/contracts/config-presets.md +0 -144
- package/docs/contracts/conformance.md +0 -84
- package/docs/contracts/consumer-bridge.md +0 -73
- package/docs/contracts/context-paths.md +0 -101
- package/docs/contracts/context-spine.md +0 -179
- package/docs/contracts/cost-dashboard.md +0 -143
- package/docs/contracts/cost-enforcement.md +0 -134
- package/docs/contracts/cost-profile-defaults.md +0 -110
- package/docs/contracts/cost-summary-schema.md +0 -107
- package/docs/contracts/creative-pack-boundary.md +0 -63
- package/docs/contracts/cross-repo-retrieval.md +0 -64
- package/docs/contracts/cross-wing-handoff.md +0 -134
- package/docs/contracts/daily-workspace.md +0 -147
- package/docs/contracts/decision-engine-gates.md +0 -120
- package/docs/contracts/decision-trace-v1.md +0 -177
- package/docs/contracts/design-artifact-lifecycle.md +0 -93
- package/docs/contracts/design-artifact-verification.md +0 -153
- package/docs/contracts/discovery-manifest.md +0 -209
- package/docs/contracts/discovery-manifest.schema.json +0 -254
- package/docs/contracts/evidence-based-pruning.md +0 -102
- package/docs/contracts/explain-modes.md +0 -187
- package/docs/contracts/explain-trace.schema.json +0 -144
- package/docs/contracts/file-ownership-matrix.json +0 -13941
- package/docs/contracts/file-ownership-matrix.md +0 -135
- package/docs/contracts/frontmatter-contract.md +0 -140
- package/docs/contracts/ghostwriter-schema.md +0 -337
- package/docs/contracts/governance-enforcement-projection.md +0 -159
- package/docs/contracts/gui-wizard.md +0 -350
- package/docs/contracts/harness-expectations.md +0 -128
- package/docs/contracts/hook-architecture-v1.md +0 -325
- package/docs/contracts/host-agent-protocol.md +0 -110
- package/docs/contracts/implement-ticket-flow.md +0 -625
- package/docs/contracts/init-telemetry.md +0 -132
- package/docs/contracts/injected-block-authenticity-model.md +0 -66
- package/docs/contracts/install-layout.md +0 -249
- package/docs/contracts/install-scopes.md +0 -82
- package/docs/contracts/installed-tools-lockfile.md +0 -144
- package/docs/contracts/installer-agent-mode.md +0 -137
- package/docs/contracts/iron-law-overrides.txt +0 -26
- package/docs/contracts/kernel-membership.md +0 -339
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -143
- package/docs/contracts/linear-ai-three-layers.md +0 -130
- package/docs/contracts/linter-structural-model.md +0 -181
- package/docs/contracts/load-context-budget-model.md +0 -259
- package/docs/contracts/load-context-schema.md +0 -220
- package/docs/contracts/local-analytics.md +0 -160
- package/docs/contracts/local-knowledge-ingestion.md +0 -96
- package/docs/contracts/local-server-api.md +0 -134
- package/docs/contracts/low-impact-corpus-format.md +0 -95
- package/docs/contracts/mcp-beta-criteria.md +0 -130
- package/docs/contracts/mcp-cloud-scope.md +0 -355
- package/docs/contracts/mcp-discovery-phase-notice.md +0 -60
- package/docs/contracts/mcp-phase-1-scope.md +0 -272
- package/docs/contracts/mcp-registry-manifest.schema.json +0 -129
- package/docs/contracts/mcp-tool-inventory.md +0 -64
- package/docs/contracts/mcp-tool-stub-envelope.md +0 -78
- package/docs/contracts/measurement-baseline.md +0 -103
- package/docs/contracts/memory-visibility-v1.md +0 -160
- package/docs/contracts/mental-models.md +0 -336
- package/docs/contracts/migrate-command.md +0 -233
- package/docs/contracts/multi-tool-projection-fidelity.md +0 -134
- package/docs/contracts/namespace.md +0 -125
- package/docs/contracts/no-runtime-boundary.md +0 -61
- package/docs/contracts/one-off-script-lifecycle.md +0 -110
- package/docs/contracts/orchestration-dsl-v1.md +0 -153
- package/docs/contracts/package-self-orientation.md +0 -163
- package/docs/contracts/pilot/agent-authority.md +0 -24
- package/docs/contracts/pilot/direct-answers.md +0 -70
- package/docs/contracts/pilot/language-and-tone.md +0 -63
- package/docs/contracts/plain-language-surface.md +0 -117
- package/docs/contracts/prelaunch-diagnostics.md +0 -151
- package/docs/contracts/profile-system.md +0 -167
- package/docs/contracts/reasoning-discipline-protocol.md +0 -83
- package/docs/contracts/release-pr-gating.md +0 -151
- package/docs/contracts/release-sizing.md +0 -107
- package/docs/contracts/release-trunk-sync.md +0 -105
- package/docs/contracts/review-lens-schema.md +0 -64
- package/docs/contracts/roadmap-complexity-standard.md +0 -138
- package/docs/contracts/role-experience.md +0 -125
- package/docs/contracts/router-blending.md +0 -71
- package/docs/contracts/rule-classification.md +0 -171
- package/docs/contracts/rule-interactions.md +0 -132
- package/docs/contracts/rule-interactions.yml +0 -260
- package/docs/contracts/rule-priority-hierarchy.md +0 -88
- package/docs/contracts/rule-router.md +0 -287
- package/docs/contracts/safety-model.md +0 -129
- package/docs/contracts/session-profile-overlay.md +0 -157
- package/docs/contracts/settings-api.md +0 -264
- package/docs/contracts/settings-gui-agent-mode.schema.json +0 -128
- package/docs/contracts/settings-sync-yaml-subset.md +0 -139
- package/docs/contracts/skill-bundled-assets.md +0 -62
- package/docs/contracts/skill-discovery.md +0 -80
- package/docs/contracts/skill-distribution-channels.md +0 -66
- package/docs/contracts/skill-domains.md +0 -144
- package/docs/contracts/skill-dry-run.md +0 -47
- package/docs/contracts/skill-family-map.yml +0 -915
- package/docs/contracts/smoke-contracts.md +0 -144
- package/docs/contracts/subagent-boundary.md +0 -59
- package/docs/contracts/surface-agent-contracts.md +0 -153
- package/docs/contracts/surface-matrix.md +0 -108
- package/docs/contracts/surface-tiers.md +0 -81
- package/docs/contracts/telegraph-telemetry.md +0 -83
- package/docs/contracts/ticket-bundle-format.md +0 -233
- package/docs/contracts/tier-3-contrib-plugin.md +0 -137
- package/docs/contracts/trust-and-safety.md +0 -144
- package/docs/contracts/ui-stack-extension.md +0 -237
- package/docs/contracts/ui-track-flow.md +0 -329
- package/docs/contracts/universal-skills.md +0 -91
- package/docs/contracts/user-type-schema.md +0 -146
- package/docs/contracts/value-dashboard-spec.md +0 -378
- package/docs/contracts/value-report-schema.md +0 -168
- package/docs/contracts/workflow-packs.md +0 -121
- package/docs/contracts/workspace-boundary.md +0 -84
- package/docs/contracts/workspace-documents.md +0 -144
- package/docs/contracts/write-engine.md +0 -182
- package/docs/cookbook.md +0 -152
- package/docs/customization.md +0 -685
- package/docs/decisions/ADR-001-kernel-swap-deferred.md +0 -109
- package/docs/decisions/ADR-002-kernel-bucket-overrides.md +0 -135
- package/docs/decisions/ADR-003-flat-cluster-subs-and-colon-syntax.md +0 -137
- package/docs/decisions/ADR-004-rule-governance-pruning.md +0 -240
- package/docs/decisions/ADR-005-subagent-worktrees.md +0 -120
- package/docs/decisions/ADR-006-skill-tools-python-pilot.md +0 -114
- package/docs/decisions/ADR-007-agent-discovery-scopes.md +0 -371
- package/docs/decisions/ADR-008-installed-tools-manifest.md +0 -160
- package/docs/decisions/ADR-009-event4u-namespace.md +0 -188
- package/docs/decisions/ADR-010-profile-pack-preset-boundary.md +0 -168
- package/docs/decisions/ADR-011-domain-pack-readiness.md +0 -213
- package/docs/decisions/ADR-012-typescript-cli-shell.md +0 -162
- package/docs/decisions/ADR-013-discovery-frontmatter-contract.md +0 -342
- package/docs/decisions/ADR-014-gui-framework-choice.md +0 -136
- package/docs/decisions/ADR-015-discovery-manifest-contract.md +0 -146
- package/docs/decisions/ADR-016-installer-architecture.md +0 -189
- package/docs/decisions/ADR-017-monorepo-physical-layout.md +0 -261
- package/docs/decisions/ADR-018-trust-and-safety-layer.md +0 -159
- package/docs/decisions/ADR-019-router-json-dist-location.md +0 -124
- package/docs/decisions/ADR-020-global-only-consumer-scope.md +0 -213
- package/docs/decisions/ADR-021-deployment-shape.md +0 -153
- package/docs/decisions/ADR-022-daily-workspace-decomposition.md +0 -140
- package/docs/decisions/ADR-023-host-agent-protocol.md +0 -129
- package/docs/decisions/ADR-024-workspace-v0-feature-floor.md +0 -126
- package/docs/decisions/ADR-025-workspace-chrome.md +0 -119
- package/docs/decisions/ADR-026-explain-mode-translation.md +0 -117
- package/docs/decisions/ADR-027-changelog-machine-vs-manual.md +0 -129
- package/docs/decisions/ADR-028-root-layout.md +0 -147
- package/docs/decisions/ADR-029-multi-workspace-deferred.md +0 -122
- package/docs/decisions/ADR-030-claude-code-command-projection.md +0 -147
- package/docs/decisions/ADR-031-validation-severity-tiers-and-projection-roundtrip.md +0 -97
- package/docs/decisions/ADR-032-linked-projects-scope.md +0 -122
- package/docs/decisions/ADR-033-distribution-identity-npm-primary.md +0 -81
- package/docs/decisions/ADR-034-per-skill-model-recommendation-transport.md +0 -63
- package/docs/decisions/ADR-035-model-capability-tiers.md +0 -104
- package/docs/decisions/ADR-036-global-install-browser-wizard-handoff.md +0 -106
- package/docs/decisions/ADR-037-cost-profile-untangle.md +0 -117
- package/docs/decisions/ADR-038-canonical-settings-path.md +0 -96
- package/docs/decisions/ADR-039-claude-skills-untracked.md +0 -139
- package/docs/decisions/ADR-040-execution-model-projection-time-filtering.md +0 -244
- package/docs/decisions/ADR-041-controlled-command-verbs.md +0 -133
- package/docs/decisions/ADR-042-runtime-resolver-decision-gate.md +0 -113
- package/docs/decisions/ADR-043-monorepo-collapse-to-src-domains.md +0 -128
- package/docs/decisions/ADR-044-command-naming-scheme-hyphenated.md +0 -250
- package/docs/decisions/ADR-045-src-source-layout-and-profiles-as-views.md +0 -111
- package/docs/decisions/ADR-046-thin-command-principle.md +0 -93
- package/docs/decisions/ADR-047-framework-neutral-stack-adaptive-commands.md +0 -94
- package/docs/decisions/ADR-048-command-justification-rule.md +0 -106
- package/docs/decisions/ADR-049-configuration-trust-boundary.md +0 -132
- package/docs/decisions/ADR-050-workspace-vs-package-root-boundary.md +0 -121
- package/docs/decisions/ADR-051-uncondensed-source-container-relocation.md +0 -114
- package/docs/decisions/ADR-052-packages-removal-and-pack-home-migration.md +0 -86
- package/docs/decisions/ADR-053-agents-namespace-dual-role-resolution.md +0 -132
- package/docs/decisions/ADR-054-rule-adherence-decay-triggered-restate.md +0 -143
- package/docs/decisions/ADR-055-flow-layer-data-model.md +0 -235
- package/docs/decisions/ADR-056-unvalidated-video-adapters-disposition.md +0 -124
- package/docs/decisions/ADR-057-consolidation-evidence-gate-outcomes.md +0 -135
- package/docs/decisions/ADR-058-condensed-output-relocation-to-dist.md +0 -94
- package/docs/decisions/ADR-059-render-resume-filesystem-as-state.md +0 -161
- package/docs/decisions/ADR-060-comfyui-sandbox-model.md +0 -154
- package/docs/decisions/ADR-061-corpus-grounding-layer.md +0 -230
- package/docs/decisions/ADR-062-encrypt-at-rest-store-architecture.md +0 -121
- package/docs/decisions/ADR-063-append-jsonl-encryption-deferred.md +0 -83
- package/docs/decisions/ADR-064-append-jsonl-per-record-encryption.md +0 -113
- package/docs/decisions/ADR-065-tier3-inbox-handoff-v0.md +0 -86
- package/docs/decisions/ADR-066-skill-body-prerendering.md +0 -93
- package/docs/decisions/ADR-067-glama-registry-listing.md +0 -259
- package/docs/decisions/ADR-068-host-tier-detection.md +0 -90
- package/docs/decisions/ADR-069-prompt-renderer.md +0 -97
- package/docs/decisions/ADR-070-tier1-drive-loop.md +0 -94
- package/docs/decisions/ADR-071-launch-drive-integration.md +0 -95
- package/docs/decisions/ADR-072-codex-gemini-drive-configs.md +0 -90
- package/docs/decisions/ADR-073-drive-health-kill-switch.md +0 -81
- package/docs/decisions/ADR-074-drive-kill-switch-auto-recovery.md +0 -84
- package/docs/decisions/ADR-075-workspace-gui-drive.md +0 -83
- package/docs/decisions/ADR-076-workspace-multi-turn.md +0 -92
- package/docs/decisions/ADR-077-workspace-followup-gui.md +0 -70
- package/docs/decisions/ADR-078-drive-health-panel.md +0 -70
- package/docs/decisions/ADR-079-workspace-host-picker.md +0 -81
- package/docs/decisions/ADR-080-host-session-expired-410.md +0 -92
- package/docs/decisions/ADR-081-drive-health-reset-and-410-affordance.md +0 -71
- package/docs/decisions/ADR-082-410-one-click-relaunch.md +0 -58
- package/docs/decisions/ADR-083-session-thread-and-arbitrary-continuation.md +0 -85
- package/docs/decisions/ADR-084-drive-health-refresh-on-drive.md +0 -52
- package/docs/decisions/ADR-085-mcp-stdio-end-user-distribution-shape.md +0 -158
- package/docs/decisions/ADR-086-read-only-cross-agent-mcp-discovery-helper.md +0 -171
- package/docs/decisions/ADR-087-installer-e2e-test-strategy.md +0 -111
- package/docs/decisions/ADR-088-no-external-runtime-federation.md +0 -144
- package/docs/decisions/ADR-089-lean-local-plugin-install.md +0 -111
- package/docs/decisions/ADR-090-visibility-command-frontmatter-field.md +0 -95
- package/docs/decisions/ADR-091-split-meta-capability-packs.md +0 -113
- package/docs/decisions/ADR-092-defer-command-tier-alias-removal.md +0 -117
- package/docs/decisions/ADR-093-ai-council-config-user-global.md +0 -117
- package/docs/decisions/ADR-094-agent-memory-layer-removal.md +0 -94
- package/docs/decisions/ADR-095-workspace-boundary-contract.md +0 -108
- package/docs/decisions/ADR-096-analysis-workbench.md +0 -110
- package/docs/decisions/ADR-097-mission-recipe-privilege-boundary.md +0 -121
- package/docs/decisions/ADR-098-evidence-first-structure-discovery.md +0 -154
- package/docs/decisions/ADR-099-file-first-pattern-library.md +0 -87
- package/docs/decisions/ADR-100-global-knowledge-card-sharing.md +0 -140
- package/docs/decisions/ADR-101-ticket-bundle-emission.md +0 -109
- package/docs/decisions/ADR-102-ticket-handoff-paste-and-mcp.md +0 -72
- package/docs/decisions/ADR-103-global-knowledge-default-off-until-measured.md +0 -92
- package/docs/decisions/ADR-104-ai-council-config-global-only.md +0 -119
- package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +0 -108
- package/docs/decisions/ADR-106-recursive-verification-benchmark-gate.md +0 -126
- package/docs/decisions/ADR-107-legal-domain-pack-adoption.md +0 -70
- package/docs/decisions/ADR-108-open-source-forever-no-commercial-tier.md +0 -46
- package/docs/decisions/ADR-109-subagent-v1-contract.md +0 -246
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -110
- package/docs/decisions/ADR-111-canonical-glama-listing.md +0 -97
- package/docs/decisions/ADR-112-stdio-lite-stays-read-only.md +0 -92
- package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +0 -201
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +0 -85
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +0 -91
- package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +0 -144
- package/docs/decisions/ADR-117-subagents-auto-default-on.md +0 -89
- package/docs/decisions/ADR-118-loop-engineering-boundaries.md +0 -162
- package/docs/decisions/ADR-119-global-knowledge-default-on.md +0 -104
- package/docs/decisions/ADR-120-council-chairman-mode.md +0 -70
- package/docs/decisions/ADR-121-knowledge-sensitivity-classes.md +0 -90
- package/docs/decisions/ADR-122-adversarial-verification-council.md +0 -166
- package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +0 -142
- package/docs/decisions/ADR-200-python-to-typescript-migration.md +0 -203
- package/docs/decisions/ADR-rule-kernel-and-router.md +0 -133
- package/docs/decisions/INDEX.md +0 -136
- package/docs/deploy/connector-setup.md +0 -129
- package/docs/deploy/env-vars.md +0 -70
- package/docs/deploy/policy-cookbook.md +0 -130
- package/docs/deploy/quickstart.md +0 -112
- package/docs/deploy/small-team-recipe.md +0 -148
- package/docs/deploy/team-deployment-posture.md +0 -111
- package/docs/design/adversarial-council-eval.md +0 -106
- package/docs/design/council-vs-solo-baseline.md +0 -92
- package/docs/design/cross-model-parity-eval.md +0 -82
- package/docs/design/length-neutral-judge-rerun.md +0 -92
- package/docs/design/utilization-window-criteria.md +0 -51
- package/docs/development.md +0 -230
- package/docs/distribution/awesome-list-submission.md +0 -46
- package/docs/distribution/consumer-matrix.md +0 -96
- package/docs/distribution/launch-story-draft.md +0 -58
- package/docs/distribution/mcp-submission-checklist.md +0 -95
- package/docs/distribution/public-install-smoke.md +0 -68
- package/docs/distribution/registries.md +0 -117
- package/docs/distribution/registry-submissions.md +0 -85
- package/docs/distribution/telemetry-privacy.md +0 -128
- package/docs/distribution/telemetry-schema.md +0 -174
- package/docs/distribution/topics-equivalents-decay-policy.md +0 -51
- package/docs/end-to-end-walkthroughs.md +0 -165
- package/docs/enforcement-by-host.md +0 -44
- package/docs/examples/agent-user.example.md +0 -22
- package/docs/experiences/agency.md +0 -49
- package/docs/experiences/content_creator.md +0 -49
- package/docs/experiences/developer.md +0 -49
- package/docs/experiences/finance.md +0 -50
- package/docs/experiences/founder.md +0 -49
- package/docs/experiences/ops.md +0 -49
- package/docs/featured-commands.md +0 -27
- package/docs/featured-skills.md +0 -95
- package/docs/flows.md +0 -67
- package/docs/getting-started-by-role.md +0 -190
- package/docs/getting-started-laravel.md +0 -72
- package/docs/getting-started-local-stdio.md +0 -77
- package/docs/getting-started.md +0 -254
- package/docs/github-topics.md +0 -93
- package/docs/governance-advantage.md +0 -72
- package/docs/governance.md +0 -96
- package/docs/guides/cross-repo-linked-projects.md +0 -93
- package/docs/guides/cross-repo-retrieval.md +0 -61
- package/docs/guides/frontend-design-corpus-refresh.md +0 -83
- package/docs/guides/local-analytics.md +0 -125
- package/docs/guides/local-knowledge.md +0 -127
- package/docs/guides/skill-discovery.md +0 -71
- package/docs/guides/skill-preview.md +0 -71
- package/docs/hook-payload-capture.md +0 -221
- package/docs/install-friction-report.md +0 -66
- package/docs/installation.md +0 -959
- package/docs/maintainers/branch-protection.md +0 -105
- package/docs/maintainers/dev-mode.md +0 -106
- package/docs/maintainers/optional-media-deps.md +0 -50
- package/docs/maintainers/system-map.md +0 -85
- package/docs/mcp-registries.md +0 -94
- package/docs/mcp-server.md +0 -175
- package/docs/mcp.md +0 -147
- package/docs/media/proof-demo.cast +0 -14
- package/docs/media/proof-demo.gif +0 -0
- package/docs/migration/consumer-template-consumption-model.md +0 -145
- package/docs/migration/divergences/README.md +0 -55
- package/docs/migration/divergences/_template.md +0 -50
- package/docs/migration/divergences/bench-stats-float-precision.md +0 -72
- package/docs/migration/divergences/mcp-telemetry-node-sqlite.md +0 -61
- package/docs/migration/divergences/pack-mcp-content-gzip-body.md +0 -53
- package/docs/migration/divergences/src-scripts-build_cloud_bundle.md +0 -63
- package/docs/migration/divergences/src-scripts-check_memory.md +0 -91
- package/docs/migration/divergences/src-scripts-inventory_abstraction_budget.md +0 -65
- package/docs/migration/divergences/src-scripts-lint_marketplace.md +0 -57
- package/docs/migration/divergences/src-scripts-lint_mcp_registry_manifest.md +0 -70
- package/docs/migration/divergences/src-scripts-spotcheck_thin_root.md +0 -60
- package/docs/migration/divergences/src-scripts-validate_agent_settings.md +0 -58
- package/docs/migration/node-floor.md +0 -86
- package/docs/migration/v1-to-v2.md +0 -156
- package/docs/migration/yaml-roundtrip-spike.md +0 -163
- package/docs/migrations/commands-1.15.0.md +0 -117
- package/docs/parity/bench-external.json +0 -58
- package/docs/parity/bench.json +0 -41
- package/docs/parity/command-frontmatter.md +0 -60
- package/docs/parity/external-runtime.md +0 -46
- package/docs/personas.md +0 -178
- package/docs/positioning-evidence.md +0 -86
- package/docs/profiles.md +0 -108
- package/docs/proof.md +0 -176
- package/docs/quality.md +0 -98
- package/docs/readme-split-plan.md +0 -102
- package/docs/recruits/_template.md +0 -81
- package/docs/release-runbook.md +0 -141
- package/docs/role-experiences.md +0 -19
- package/docs/safety.md +0 -30
- package/docs/second-brain-scope.md +0 -116
- package/docs/self-review-gate.md +0 -65
- package/docs/setup/enterprise-and-offline.md +0 -201
- package/docs/setup/mcp-client-config.md +0 -358
- package/docs/setup/mcp-cloud-endpoints.md +0 -116
- package/docs/setup/mcp-cloud-registry-listing.md +0 -99
- package/docs/setup/mcp-cloud-setup.md +0 -183
- package/docs/setup/mcp-r2-bootstrap.md +0 -82
- package/docs/setup/mcp-server-docker.md +0 -101
- package/docs/setup/per-ide/aider.md +0 -48
- package/docs/setup/per-ide/antigravity.md +0 -68
- package/docs/setup/per-ide/augment.md +0 -89
- package/docs/setup/per-ide/claude-code.md +0 -97
- package/docs/setup/per-ide/claude-desktop.md +0 -207
- package/docs/setup/per-ide/cline.md +0 -43
- package/docs/setup/per-ide/codebuddy.md +0 -63
- package/docs/setup/per-ide/codex.md +0 -46
- package/docs/setup/per-ide/continue.md +0 -68
- package/docs/setup/per-ide/copilot.md +0 -80
- package/docs/setup/per-ide/cursor.md +0 -125
- package/docs/setup/per-ide/droid.md +0 -65
- package/docs/setup/per-ide/gemini-cli.md +0 -45
- package/docs/setup/per-ide/jetbrains.md +0 -76
- package/docs/setup/per-ide/kilocode.md +0 -66
- package/docs/setup/per-ide/kiro.md +0 -72
- package/docs/setup/per-ide/opencode.md +0 -62
- package/docs/setup/per-ide/qoder.md +0 -63
- package/docs/setup/per-ide/roocode.md +0 -68
- package/docs/setup/per-ide/trae.md +0 -63
- package/docs/setup/per-ide/warp.md +0 -63
- package/docs/setup/per-ide/windsurf.md +0 -109
- package/docs/setup/per-ide/zed.md +0 -73
- package/docs/showcase.md +0 -209
- package/docs/skill-duplication-findings.md +0 -91
- package/docs/skills-catalog.md +0 -265
- package/docs/skills-taxonomy.md +0 -90
- package/docs/spawn-site-policy.md +0 -72
- package/docs/succession.md +0 -80
- package/docs/threat-model.md +0 -29
- package/docs/troubleshooting.md +0 -155
- package/docs/ui-track-mental-model.md +0 -121
- package/docs/us-vs-the-category.md +0 -38
- package/docs/value.md +0 -86
- package/docs/walkthroughs/assets/workspace-role-grid.png +0 -0
- package/docs/walkthroughs/assets/workspace-session-started.png +0 -0
- package/docs/walkthroughs/assets/workspace-task-picker.png +0 -0
- package/docs/walkthroughs/daily-workspace-a11y.md +0 -87
- package/docs/walkthroughs/daily-workspace.md +0 -127
- package/docs/wedge/production-validator/README.md +0 -81
- package/docs/wedge/production-validator/first-run-check.sh +0 -42
- package/docs/wedge/production-validator/production-validator.md +0 -83
- package/docs/wizard.md +0 -173
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
* (token-saving Phase 3).
|
|
5
5
|
*
|
|
6
6
|
* Converts RTK from advisory to DETERMINISTIC: instead of trusting a
|
|
7
|
-
* self-reported flag, this hook keys off a live
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* self-reported flag, this hook keys off a live probe — PATH presence PLUS an
|
|
8
|
+
* `rtk gain` identity check (the binary name collides with the unrelated Rust
|
|
9
|
+
* Type Kit; see src/install/rtkDetection.ts). When a VERIFIED Rust Token
|
|
10
|
+
* Killer is installed AND the agent is about to run a single verbose CLI
|
|
11
|
+
* command that is NOT completeness-critical, it surfaces (warn) "re-run
|
|
12
|
+
* wrapped with rtk" so the upstream-reported 60–90% output-token saving is
|
|
13
|
+
* captured. It NEVER blocks (the v1
|
|
11
14
|
* dispatcher contract is allow/block/warn — there is no transparent
|
|
12
15
|
* `updatedInput` rewrite — and, like `injection_scan_hook`, warn preserves
|
|
13
16
|
* agency). It NEVER fires when rtk is absent (silent plain-command fallback,
|
|
@@ -35,6 +38,8 @@ import {
|
|
|
35
38
|
_split_subcommands,
|
|
36
39
|
_is_env_assignment,
|
|
37
40
|
} from "./block_no_verify.js";
|
|
41
|
+
import { readHookStdin } from "./hook_stdin.js";
|
|
42
|
+
import { detectRtkCached } from "../../install/rtkDetection.js";
|
|
38
43
|
|
|
39
44
|
const SETTINGS_FILE = ".agent-settings.yml";
|
|
40
45
|
const EXIT_ALLOW = 0;
|
|
@@ -171,12 +176,7 @@ export function classify(command: string): Eligibility {
|
|
|
171
176
|
}
|
|
172
177
|
|
|
173
178
|
function _readStdin(): string {
|
|
174
|
-
|
|
175
|
-
if (process.stdin.isTTY) return "";
|
|
176
|
-
return fs.readFileSync(0, "utf-8");
|
|
177
|
-
} catch {
|
|
178
|
-
return "";
|
|
179
|
-
}
|
|
179
|
+
return readHookStdin();
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
function _jsonReason(reason: string): string {
|
|
@@ -203,8 +203,16 @@ export function main(): number {
|
|
|
203
203
|
: ".";
|
|
204
204
|
if (!_enabled(root)) return EXIT_ALLOW;
|
|
205
205
|
|
|
206
|
-
// Deterministic gate: the live probe, NOT a self-reported flag
|
|
206
|
+
// Deterministic gate: the live probe, NOT a self-reported flag — and an
|
|
207
|
+
// IDENTITY probe, not bare presence: the `rtk` binary name collides with
|
|
208
|
+
// the unrelated Rust Type Kit, and nudging the agent to wrap commands with
|
|
209
|
+
// the wrong tool would be a second wrong answer. Only a verified Rust
|
|
210
|
+
// Token Killer activates the nudge; `unverified` (broken/slow probe) does
|
|
211
|
+
// NOT — fail closed for behavior, fail open for the command itself.
|
|
212
|
+
// Identity is cached user-globally keyed on the binary's path+mtime+size,
|
|
213
|
+
// so the `rtk gain` probe runs once per installed binary, not per command.
|
|
207
214
|
if (!rtk_available()) return EXIT_ALLOW;
|
|
215
|
+
if (detectRtkCached().identity !== "token-killer") return EXIT_ALLOW;
|
|
208
216
|
|
|
209
217
|
const command = _extract_command(envelope);
|
|
210
218
|
if (!command) return EXIT_ALLOW;
|
|
@@ -213,14 +221,20 @@ export function main(): number {
|
|
|
213
221
|
if (!verdict.eligible) return EXIT_ALLOW;
|
|
214
222
|
|
|
215
223
|
const reason =
|
|
216
|
-
`rtk is installed and wraps verbose CLI output (60–90% fewer output tokens). ` +
|
|
224
|
+
`rtk is installed and wraps verbose CLI output (upstream reports 60–90% fewer output tokens). ` +
|
|
217
225
|
`Re-run wrapped: \`rtk ${command.trim()}\`. ` +
|
|
218
226
|
`(Skip for completeness-critical output like \`git diff\`.)`;
|
|
219
227
|
process.stdout.write(`${_jsonReason(reason)}\n`);
|
|
220
228
|
return EXIT_WARN;
|
|
221
229
|
}
|
|
222
230
|
|
|
231
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
232
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
233
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
223
234
|
function _isCliEntry(): boolean {
|
|
235
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
224
238
|
if (process.argv[1] === undefined) {
|
|
225
239
|
return false;
|
|
226
240
|
}
|
|
@@ -37,6 +37,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
37
37
|
|
|
38
38
|
import { hardenedSpawnEnv } from './_lib/spawn_env.js';
|
|
39
39
|
import { redact_low_impact_entry } from './ai_council/redact_low_impact_entry.js';
|
|
40
|
+
import { readHookStdin } from './hooks/hook_stdin.js';
|
|
40
41
|
|
|
41
42
|
export const HOT_CONTEXT_REL = path.join('agents', 'runtime', 'state', 'hot-context.md');
|
|
42
43
|
|
|
@@ -350,11 +351,7 @@ function _session_index_block_or_null(root: string): string | null {
|
|
|
350
351
|
// ---------------------------------------------------------------------
|
|
351
352
|
|
|
352
353
|
function _read_stdin(): string {
|
|
353
|
-
|
|
354
|
-
return fs.readFileSync(0, 'utf-8');
|
|
355
|
-
} catch {
|
|
356
|
-
return '';
|
|
357
|
-
}
|
|
354
|
+
return readHookStdin();
|
|
358
355
|
}
|
|
359
356
|
|
|
360
357
|
export function main(): number {
|
|
@@ -414,6 +411,10 @@ export function main(): number {
|
|
|
414
411
|
return 0; // never blocks
|
|
415
412
|
}
|
|
416
413
|
|
|
417
|
-
|
|
414
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
415
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
416
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
417
|
+
const _bundled = typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__;
|
|
418
|
+
if (!_bundled && fileURLToPath(import.meta.url) === path.resolve(process.argv[1] ?? '')) {
|
|
418
419
|
process.exit(main());
|
|
419
420
|
}
|
|
@@ -30,6 +30,8 @@ import fs from "node:fs";
|
|
|
30
30
|
import path from "node:path";
|
|
31
31
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
32
32
|
|
|
33
|
+
import { readHookStdin } from "./hooks/hook_stdin.js";
|
|
34
|
+
|
|
33
35
|
const SETTINGS_FILE = ".agent-settings.yml";
|
|
34
36
|
const EXIT_ALLOW = 0;
|
|
35
37
|
const EXIT_WARN = 2;
|
|
@@ -274,10 +276,16 @@ function _pyTruthy(v: JsonValue | undefined): boolean {
|
|
|
274
276
|
}
|
|
275
277
|
|
|
276
278
|
function _readStdin(): string {
|
|
277
|
-
return
|
|
279
|
+
return readHookStdin();
|
|
278
280
|
}
|
|
279
281
|
|
|
282
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
283
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
284
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
280
285
|
function _isCliEntry(): boolean {
|
|
286
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
281
289
|
if (process.argv[1] === undefined) {
|
|
282
290
|
return false;
|
|
283
291
|
}
|
package/src/scripts/install
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Orchestrates the two stages:
|
|
5
5
|
# 1. scripts/install.sh — payload sync (copy rules, symlink skills/commands)
|
|
6
|
-
# 2. scripts/install.
|
|
6
|
+
# 2. scripts/install.ts — bridge files (.agent-settings, VSCode/Augment JSONs)
|
|
7
7
|
#
|
|
8
8
|
# This is the only installer a consumer needs to invoke. The underlying
|
|
9
9
|
# scripts remain callable directly for advanced use; see their --help.
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
# --verbose Detailed payload sync output
|
|
36
36
|
# --quiet Suppress non-error output
|
|
37
37
|
# --skip-sync Skip payload sync (install.sh)
|
|
38
|
-
# --skip-bridges Skip bridge files (install.
|
|
38
|
+
# --skip-bridges Skip bridge files (install.ts)
|
|
39
39
|
# --global Install to user-scope paths (~/.claude/, ~/.cursor/, …)
|
|
40
40
|
# instead of project-locally. Implies --skip-sync (the
|
|
41
41
|
# payload sync stage is project-only). See ADR-007.
|
|
@@ -100,7 +100,7 @@ FLEET_CONFIG=""
|
|
|
100
100
|
USER_TYPE=""
|
|
101
101
|
NO_UI=false
|
|
102
102
|
|
|
103
|
-
# Single source of truth for valid tool IDs (also referenced by install.sh / install.
|
|
103
|
+
# Single source of truth for valid tool IDs (also referenced by install.sh / install.ts).
|
|
104
104
|
VALID_TOOLS="claude-code claude-desktop cursor windsurf cline gemini-cli copilot augment aider codex roocode continue kilocode zed jetbrains kiro all"
|
|
105
105
|
|
|
106
106
|
show_help() {
|
|
@@ -214,9 +214,9 @@ fi
|
|
|
214
214
|
# (and its --scope project / --scope=project / SCOPE shorthand) is the
|
|
215
215
|
# maintainer-only escape hatch behind AGENT_CONFIG_DEV_MODE=1. Without
|
|
216
216
|
# the env flag we refuse here so the bash orchestrator fails fast with
|
|
217
|
-
# a directive error pointing at the maintainer doc — install.
|
|
217
|
+
# a directive error pointing at the maintainer doc — install.ts's
|
|
218
218
|
# Python-side _enforce_consumer_global_only still backstops the same
|
|
219
|
-
# check for direct python3
|
|
219
|
+
# check for legacy direct python3 installer invocations (retired install.py).
|
|
220
220
|
if [[ "${SCOPE:-}" == "project" && "${AGENT_CONFIG_DEV_MODE:-}" != "1" ]]; then
|
|
221
221
|
err "--scope=project is reserved for maintainers (ADR-020 — consumer installs are global-only). Set AGENT_CONFIG_DEV_MODE=1 to opt in. See docs/maintainers/dev-mode.md."
|
|
222
222
|
exit 1
|
|
@@ -296,7 +296,7 @@ prompt_tools() {
|
|
|
296
296
|
# When an interactive global install will hand off to the browser wizard,
|
|
297
297
|
# the wizard is the single tool-selection surface — skip the terminal
|
|
298
298
|
# picker so it does not pre-empt (and, via TOOLS_EXPLICIT, suppress) the
|
|
299
|
-
# GUI. Mirrors install.
|
|
299
|
+
# GUI. Mirrors install.ts wizard_should_launch (the --no-ui flag is
|
|
300
300
|
# handled here too — it suppresses both the wizard and the picker).
|
|
301
301
|
# Headless paths (no TTY / CI / AGENT_CONFIG_NO_UI) still get the picker.
|
|
302
302
|
wizard_will_handle_tools=false
|
|
@@ -91,7 +91,7 @@ fi
|
|
|
91
91
|
EOF
|
|
92
92
|
|
|
93
93
|
chmod +x "$HOOKS_DIR/pre-push"
|
|
94
|
-
echo "✅ Pre-push hook installed."
|
|
94
|
+
echo "✅ Pre-push hook installed." >&2
|
|
95
95
|
|
|
96
96
|
# Pre-commit: marketplace consistency -----------------------------------------
|
|
97
97
|
#
|
|
@@ -184,7 +184,7 @@ fi
|
|
|
184
184
|
EOF
|
|
185
185
|
|
|
186
186
|
chmod +x "$HOOKS_DIR/pre-commit"
|
|
187
|
-
echo "✅ Pre-commit hook installed."
|
|
187
|
+
echo "✅ Pre-commit hook installed." >&2
|
|
188
188
|
|
|
189
189
|
# Chat-history bridge hooks ----------------------------------------------------
|
|
190
190
|
#
|
|
@@ -218,7 +218,7 @@ fi
|
|
|
218
218
|
# command above is guarded by "|| true", so the implicit exit is 0.
|
|
219
219
|
EOF
|
|
220
220
|
chmod +x "$HOOKS_DIR/$name"
|
|
221
|
-
echo "✅ $name hook installed."
|
|
221
|
+
echo "✅ $name hook installed." >&2
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
write_chat_history_hook "post-commit" "git:post-commit"
|
|
@@ -275,4 +275,4 @@ EOF
|
|
|
275
275
|
|
|
276
276
|
append_auto_sync_block "post-merge" "1"
|
|
277
277
|
append_auto_sync_block "post-checkout" "3"
|
|
278
|
-
echo "✅ Auto-sync block appended to post-merge / post-checkout hooks."
|
|
278
|
+
echo "✅ Auto-sync block appended to post-merge / post-checkout hooks." >&2
|
package/src/scripts/install.sh
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
# Creates tool-specific directories for Claude Code, Cursor, Cline, Windsurf, Gemini.
|
|
9
9
|
#
|
|
10
10
|
# Does NOT render .agent-settings.yml or bridge JSONs — that is the job of
|
|
11
|
-
# scripts/install.
|
|
11
|
+
# scripts/install.ts (run via the bundled dist/install/install.mjs). The
|
|
12
|
+
# primary entry point scripts/install orchestrates both.
|
|
12
13
|
# Running this script on its own installs the payload only.
|
|
13
14
|
#
|
|
14
15
|
# Usage:
|
|
@@ -50,7 +51,7 @@ SKIP_GITIGNORE=false
|
|
|
50
51
|
# that require both channels.
|
|
51
52
|
LEGACY_BOTH=false
|
|
52
53
|
# When true, skip payload sync entirely and only install the project-local
|
|
53
|
-
# `./agent-config` wrapper (Step 7 Phase 2). The bridge stage (install.
|
|
54
|
+
# `./agent-config` wrapper (Step 7 Phase 2). The bridge stage (install.ts)
|
|
54
55
|
# handles the .agent-settings.yml stub + nested-install guard.
|
|
55
56
|
MINIMAL=false
|
|
56
57
|
# Comma-separated tool IDs (default: all). Set by --tools or the
|
|
@@ -91,7 +92,7 @@ parse_args() {
|
|
|
91
92
|
--skip-gitignore) SKIP_GITIGNORE=true; shift ;;
|
|
92
93
|
--tools) TOOLS="$2"; shift 2 ;;
|
|
93
94
|
--tools=*) TOOLS="${1#*=}"; shift ;;
|
|
94
|
-
# --user-type is consumed by install.
|
|
95
|
+
# --user-type is consumed by install.ts (settings persistence).
|
|
95
96
|
# Accepted here so direct `bash scripts/install.sh --user-type=...`
|
|
96
97
|
# invocations from the `install` wrapper / standalone users do not
|
|
97
98
|
# trip the "Unknown argument" guard. Value is intentionally unused
|
|
@@ -1171,7 +1172,7 @@ main() {
|
|
|
1171
1172
|
|
|
1172
1173
|
# Minimal-init short-circuit (Step 7 Phase 2): skip every payload-sync
|
|
1173
1174
|
# stage and only install the project-local `./agent-config` wrapper.
|
|
1174
|
-
# The bridge stage (install.
|
|
1175
|
+
# The bridge stage (install.ts) handles the .agent-settings.yml stub
|
|
1175
1176
|
# + nested-install guard. No .augment/, no AGENTS.md, no symlinks.
|
|
1176
1177
|
if $MINIMAL; then
|
|
1177
1178
|
if ! $QUIET; then
|
package/src/scripts/install.ts
CHANGED
|
@@ -77,6 +77,7 @@ import * as installed_lock from './_lib/installed_lock.js';
|
|
|
77
77
|
import * as surface_tiers from './_lib/surface_tiers.js';
|
|
78
78
|
import * as global_deploy_inventory from './_lib/global_deploy_inventory.js';
|
|
79
79
|
import * as installed_tools from './_lib/installed_tools.js';
|
|
80
|
+
import { collect_drift, format_drift_report } from './_lib/install_drift.js';
|
|
80
81
|
import * as user_global_paths from './_lib/user_global_paths.js';
|
|
81
82
|
import * as claude_desktop_bundler from './_lib/claude_desktop_bundler.js';
|
|
82
83
|
import * as claude_settings_hooks from './_lib/claude_settings_hooks.js';
|
|
@@ -2892,7 +2893,11 @@ export function _apply_claude_flat_command_wrappers(
|
|
|
2892
2893
|
current_files.delete(`commands/${fname}`);
|
|
2893
2894
|
reserved.push(slug);
|
|
2894
2895
|
}
|
|
2895
|
-
//
|
|
2896
|
+
// Visible command slugs from the locked discovery manifest. `visibility`
|
|
2897
|
+
// is the source of truth (ADR-090/092); the integer `tier` stays only as
|
|
2898
|
+
// the fallback for a manifest published before `visibility` was emitted,
|
|
2899
|
+
// so an older locked manifest keeps resolving. Neither key present → the
|
|
2900
|
+
// artefact is skipped rather than silently treated as visible.
|
|
2896
2901
|
const eligible = new Set<string>(_CLAUDE_FLAT_WRAPPER_EXTRA);
|
|
2897
2902
|
try {
|
|
2898
2903
|
const manifest = JSON.parse(
|
|
@@ -2900,7 +2905,13 @@ export function _apply_claude_flat_command_wrappers(
|
|
|
2900
2905
|
) as { artefacts?: Array<{ category?: string; slug?: string; tier?: number; visibility?: string }> };
|
|
2901
2906
|
for (const a of manifest.artefacts ?? []) {
|
|
2902
2907
|
if (a.category !== 'command' || typeof a.slug !== 'string') continue;
|
|
2903
|
-
|
|
2908
|
+
const visible =
|
|
2909
|
+
typeof a.visibility === 'string'
|
|
2910
|
+
? a.visibility !== 'internal'
|
|
2911
|
+
: typeof a.tier === 'number'
|
|
2912
|
+
? a.tier <= 1
|
|
2913
|
+
: false;
|
|
2914
|
+
if (visible) eligible.add(a.slug);
|
|
2904
2915
|
}
|
|
2905
2916
|
} catch {
|
|
2906
2917
|
// No manifest → wrap only the hardcoded essentials.
|
|
@@ -3136,34 +3147,36 @@ function _verify_deploy_targets(anchor: string, plan: ReadonlyArray<readonly [st
|
|
|
3136
3147
|
}
|
|
3137
3148
|
|
|
3138
3149
|
/**
|
|
3139
|
-
* Remove
|
|
3150
|
+
* Remove skills/commands matching `is_pruned` from a completed deploy.
|
|
3140
3151
|
*
|
|
3141
|
-
* road-to-install-contract-stability Phase 2 Step 2
|
|
3142
|
-
*
|
|
3143
|
-
*
|
|
3144
|
-
*
|
|
3145
|
-
*
|
|
3146
|
-
*
|
|
3152
|
+
* road-to-install-contract-stability Phase 2 Step 2 (generalized in
|
|
3153
|
+
* road-to-credible-install Phase 2 to back both the core-only lab prune and
|
|
3154
|
+
* the scoped-projection pack prune off the same mechanics). Skills are
|
|
3155
|
+
* pruned by whole directory (tier decided by the skill's `SKILL.md`
|
|
3156
|
+
* frontmatter); commands by file (own frontmatter). Rules / personas /
|
|
3157
|
+
* contexts / templates are core/shared and left intact. Returns
|
|
3158
|
+
* `[pruned_count, adjusted_results]` with the pruned paths removed from each
|
|
3159
|
+
* tool's `written_paths` so the manifest never records them.
|
|
3147
3160
|
*/
|
|
3148
|
-
function
|
|
3161
|
+
function _prune_modules_by(
|
|
3149
3162
|
deploy_results: Record<string, DeployResult>,
|
|
3150
|
-
|
|
3163
|
+
is_pruned: (md_path: string) => boolean,
|
|
3151
3164
|
): [number, Record<string, DeployResult>] {
|
|
3152
3165
|
let pruned = 0;
|
|
3153
3166
|
const adjusted: Record<string, DeployResult> = {};
|
|
3154
3167
|
for (const tool_id of Object.keys(deploy_results)) {
|
|
3155
3168
|
const [written, skipped, status, paths] = deploy_results[tool_id] as DeployResult;
|
|
3156
|
-
const
|
|
3169
|
+
const pruned_skill_dirs = new Set<string>();
|
|
3157
3170
|
for (const p of paths) {
|
|
3158
3171
|
const parts = p.split(path.sep);
|
|
3159
3172
|
if (parts.includes('skills')) {
|
|
3160
3173
|
const i = parts.indexOf('skills');
|
|
3161
3174
|
if (i + 1 < parts.length) {
|
|
3162
3175
|
const skill_root = parts.slice(0, i + 2).join(path.sep);
|
|
3163
|
-
if (!
|
|
3176
|
+
if (!pruned_skill_dirs.has(skill_root)) {
|
|
3164
3177
|
const skillmd = path.join(skill_root, 'SKILL.md');
|
|
3165
|
-
if (pathExists(skillmd) &&
|
|
3166
|
-
|
|
3178
|
+
if (pathExists(skillmd) && is_pruned(skillmd)) {
|
|
3179
|
+
pruned_skill_dirs.add(skill_root);
|
|
3167
3180
|
}
|
|
3168
3181
|
}
|
|
3169
3182
|
}
|
|
@@ -3173,22 +3186,22 @@ function _prune_lab_modules(
|
|
|
3173
3186
|
const delete_files: string[] = [];
|
|
3174
3187
|
for (const p of paths) {
|
|
3175
3188
|
const parts = p.split(path.sep);
|
|
3176
|
-
let
|
|
3189
|
+
let is_target = false;
|
|
3177
3190
|
if (parts.includes('skills')) {
|
|
3178
3191
|
const i = parts.indexOf('skills');
|
|
3179
|
-
if (i + 1 < parts.length &&
|
|
3180
|
-
|
|
3192
|
+
if (i + 1 < parts.length && pruned_skill_dirs.has(parts.slice(0, i + 2).join(path.sep))) {
|
|
3193
|
+
is_target = true;
|
|
3181
3194
|
}
|
|
3182
3195
|
} else if (
|
|
3183
3196
|
parts.includes('commands') &&
|
|
3184
3197
|
path.extname(p) === '.md' &&
|
|
3185
|
-
|
|
3198
|
+
is_pruned(p)
|
|
3186
3199
|
) {
|
|
3187
|
-
|
|
3200
|
+
is_target = true;
|
|
3188
3201
|
}
|
|
3189
|
-
(
|
|
3202
|
+
(is_target ? delete_files : keep).push(p);
|
|
3190
3203
|
}
|
|
3191
|
-
for (const d of
|
|
3204
|
+
for (const d of pruned_skill_dirs) {
|
|
3192
3205
|
fs.rmSync(d, { recursive: true, force: true });
|
|
3193
3206
|
}
|
|
3194
3207
|
for (const p of delete_files) {
|
|
@@ -3206,6 +3219,175 @@ function _prune_lab_modules(
|
|
|
3206
3219
|
return [pruned, adjusted];
|
|
3207
3220
|
}
|
|
3208
3221
|
|
|
3222
|
+
/**
|
|
3223
|
+
* Remove lab-tier skills/commands from a completed deploy (core-only).
|
|
3224
|
+
*
|
|
3225
|
+
* road-to-install-contract-stability Phase 2 Step 2. Thin wrapper over
|
|
3226
|
+
* `_prune_modules_by` — see that function for the mechanics.
|
|
3227
|
+
*/
|
|
3228
|
+
function _prune_lab_modules(
|
|
3229
|
+
deploy_results: Record<string, DeployResult>,
|
|
3230
|
+
lab_ids: Set<string>,
|
|
3231
|
+
): [number, Record<string, DeployResult>] {
|
|
3232
|
+
return _prune_modules_by(deploy_results, (p) => surface_tiers.is_lab_artefact(p, lab_ids));
|
|
3233
|
+
}
|
|
3234
|
+
|
|
3235
|
+
// --- Scoped-projection prune (road-to-credible-install Phase 2) ----------
|
|
3236
|
+
//
|
|
3237
|
+
// `projection.mode: scoped` narrows a GLOBAL deploy to the active profile's
|
|
3238
|
+
// packs (workspaces `engineering` + `agent-config-maintainer` by default,
|
|
3239
|
+
// unioned with a `runtime.active_packs` overlay, expanded over the packs.yml
|
|
3240
|
+
// `requires` graph). Mirrors the core-only lab prune above — same
|
|
3241
|
+
// `_prune_modules_by` mechanics, a different predicate.
|
|
3242
|
+
|
|
3243
|
+
/** `workspaces` values whose packs are ALWAYS active under `scoped` mode. */
|
|
3244
|
+
const SCOPED_ACTIVE_WORKSPACES: ReadonlySet<string> = new Set(['engineering', 'agent-config-maintainer']);
|
|
3245
|
+
|
|
3246
|
+
interface PackRecord {
|
|
3247
|
+
id: string;
|
|
3248
|
+
workspaces: string[];
|
|
3249
|
+
requires: string[];
|
|
3250
|
+
}
|
|
3251
|
+
|
|
3252
|
+
/**
|
|
3253
|
+
* Parse `src/config/discovery/packs.yml` into `{id, workspaces, requires}`
|
|
3254
|
+
* records. `requires` falls back to the legacy `requires_hint` field name
|
|
3255
|
+
* when `requires` is absent.
|
|
3256
|
+
*
|
|
3257
|
+
* Deliberately THROWS on a missing file or a parse result that is not a
|
|
3258
|
+
* list — an empty active-pack set would be the LEAST safe fallback here
|
|
3259
|
+
* (it would prune every tagged artefact, the opposite of the fail-safe
|
|
3260
|
+
* contract). The caller wraps this in a try/catch that restores the full
|
|
3261
|
+
* tree on any error instead.
|
|
3262
|
+
*/
|
|
3263
|
+
function _load_packs_registry(package_root: string): PackRecord[] {
|
|
3264
|
+
const vocab_path = path.join(package_root, 'src', 'config', 'discovery', 'packs.yml');
|
|
3265
|
+
const data = yamlSafeLoad(readText(vocab_path));
|
|
3266
|
+
if (!Array.isArray(data)) {
|
|
3267
|
+
throw new Error(`packs.yml did not parse to a list: ${vocab_path}`);
|
|
3268
|
+
}
|
|
3269
|
+
const out: PackRecord[] = [];
|
|
3270
|
+
for (const entry of data) {
|
|
3271
|
+
if (!_isPlainObject(entry)) continue;
|
|
3272
|
+
const id = entry['id'];
|
|
3273
|
+
if (typeof id !== 'string' || id === '') continue;
|
|
3274
|
+
const workspaces_raw = entry['workspaces'];
|
|
3275
|
+
const workspaces = Array.isArray(workspaces_raw)
|
|
3276
|
+
? workspaces_raw.filter((w): w is string => typeof w === 'string')
|
|
3277
|
+
: [];
|
|
3278
|
+
const requires_raw = entry['requires'] ?? entry['requires_hint'];
|
|
3279
|
+
const requires = Array.isArray(requires_raw)
|
|
3280
|
+
? requires_raw.filter((r): r is string => typeof r === 'string')
|
|
3281
|
+
: [];
|
|
3282
|
+
out.push({ id, workspaces, requires });
|
|
3283
|
+
}
|
|
3284
|
+
return out;
|
|
3285
|
+
}
|
|
3286
|
+
|
|
3287
|
+
/**
|
|
3288
|
+
* Active pack id set for `scoped` mode: every pack whose `workspaces`
|
|
3289
|
+
* intersects `SCOPED_ACTIVE_WORKSPACES`, unioned with `runtime_active_packs`,
|
|
3290
|
+
* expanded over the `requires` graph (transitive closure).
|
|
3291
|
+
*/
|
|
3292
|
+
function _compute_active_pack_ids(
|
|
3293
|
+
packs: readonly PackRecord[],
|
|
3294
|
+
runtime_active_packs: readonly string[],
|
|
3295
|
+
): Set<string> {
|
|
3296
|
+
const by_id = new Map<string, PackRecord>();
|
|
3297
|
+
for (const p of packs) by_id.set(p.id, p);
|
|
3298
|
+
|
|
3299
|
+
const active = new Set<string>();
|
|
3300
|
+
for (const p of packs) {
|
|
3301
|
+
if (p.workspaces.some((w) => SCOPED_ACTIVE_WORKSPACES.has(w))) {
|
|
3302
|
+
active.add(p.id);
|
|
3303
|
+
}
|
|
3304
|
+
}
|
|
3305
|
+
for (const id of runtime_active_packs) {
|
|
3306
|
+
active.add(id);
|
|
3307
|
+
}
|
|
3308
|
+
|
|
3309
|
+
let frontier = [...active];
|
|
3310
|
+
while (frontier.length > 0) {
|
|
3311
|
+
const next: string[] = [];
|
|
3312
|
+
for (const id of frontier) {
|
|
3313
|
+
const rec = by_id.get(id);
|
|
3314
|
+
if (rec === undefined) continue;
|
|
3315
|
+
for (const dep of rec.requires) {
|
|
3316
|
+
if (!active.has(dep)) {
|
|
3317
|
+
active.add(dep);
|
|
3318
|
+
next.push(dep);
|
|
3319
|
+
}
|
|
3320
|
+
}
|
|
3321
|
+
}
|
|
3322
|
+
frontier = next;
|
|
3323
|
+
}
|
|
3324
|
+
return active;
|
|
3325
|
+
}
|
|
3326
|
+
|
|
3327
|
+
/**
|
|
3328
|
+
* Read the GLOBAL settings document that governs a global deploy, if one
|
|
3329
|
+
* already exists on disk — the wizard's canonical typed-subdir location
|
|
3330
|
+
* (`<event4u_root>/settings/.agent-settings.yml`, matching
|
|
3331
|
+
* `src/server/routes/settings.ts`'s `SETTINGS_RELATIVE`) first, the legacy
|
|
3332
|
+
* flat root (`<event4u_root>/.agent-settings.yml`) second. Returns `null`
|
|
3333
|
+
* when neither exists — a genuinely fresh machine with no prior settings
|
|
3334
|
+
* artefact of any kind.
|
|
3335
|
+
*/
|
|
3336
|
+
function _resolve_global_settings_doc(): Record<string, unknown> | null {
|
|
3337
|
+
const root = user_global_paths.event4u_root();
|
|
3338
|
+
const canonical = path.join(root, 'settings', SETTINGS_FILE);
|
|
3339
|
+
if (pathExists(canonical)) return _load_yaml_doc(canonical);
|
|
3340
|
+
const legacy = path.join(root, SETTINGS_FILE);
|
|
3341
|
+
if (pathExists(legacy)) return _load_yaml_doc(legacy);
|
|
3342
|
+
return null;
|
|
3343
|
+
}
|
|
3344
|
+
|
|
3345
|
+
/**
|
|
3346
|
+
* Resolve the effective `projection.mode` + `runtime.active_packs` overlay
|
|
3347
|
+
* for THIS global install.
|
|
3348
|
+
*
|
|
3349
|
+
* An EXISTING global settings file (any prior install, wizard-written or
|
|
3350
|
+
* hand-edited) is authoritative: a missing `projection.mode` key, an
|
|
3351
|
+
* unreadable file, or an explicit non-`scoped` value ALL resolve to
|
|
3352
|
+
* `legacy-all` — the upgrade-compat contract (an install that never opted in
|
|
3353
|
+
* stays unscoped). Only when NO global settings file exists yet — before the
|
|
3354
|
+
* wizard's `/api/v1/wizard/finish` route has ever written one on this
|
|
3355
|
+
* machine — does resolution fall through to the packaged template's own
|
|
3356
|
+
* default, the value a fresh install is about to receive.
|
|
3357
|
+
*/
|
|
3358
|
+
function _resolve_scoped_projection(
|
|
3359
|
+
package_root: string,
|
|
3360
|
+
): { mode: 'scoped' | 'legacy-all'; active_packs: string[] } {
|
|
3361
|
+
const doc = _resolve_global_settings_doc() ?? _load_default_settings(package_root);
|
|
3362
|
+
const projection = _isPlainObject(doc['projection']) ? (doc['projection'] as Record<string, unknown>) : {};
|
|
3363
|
+
const mode: 'scoped' | 'legacy-all' = projection['mode'] === 'scoped' ? 'scoped' : 'legacy-all';
|
|
3364
|
+
const runtime = _isPlainObject(doc['runtime']) ? (doc['runtime'] as Record<string, unknown>) : {};
|
|
3365
|
+
const active_packs_raw = runtime['active_packs'];
|
|
3366
|
+
const active_packs = Array.isArray(active_packs_raw)
|
|
3367
|
+
? active_packs_raw.filter((v): v is string => typeof v === 'string')
|
|
3368
|
+
: [];
|
|
3369
|
+
return { mode, active_packs };
|
|
3370
|
+
}
|
|
3371
|
+
|
|
3372
|
+
/**
|
|
3373
|
+
* Prune every skill/command artefact whose `packs:` frontmatter is
|
|
3374
|
+
* non-empty AND has no intersection with `active_ids`. Untagged artefacts
|
|
3375
|
+
* (empty `packs:` frontmatter) are core/shared and always kept.
|
|
3376
|
+
*/
|
|
3377
|
+
function _prune_scoped_modules(
|
|
3378
|
+
deploy_results: Record<string, DeployResult>,
|
|
3379
|
+
active_ids: ReadonlySet<string>,
|
|
3380
|
+
): [number, Record<string, DeployResult>] {
|
|
3381
|
+
return _prune_modules_by(deploy_results, (p) => {
|
|
3382
|
+
const packs = surface_tiers.frontmatter_packs(p);
|
|
3383
|
+
if (packs.size === 0) return false;
|
|
3384
|
+
for (const id of packs) {
|
|
3385
|
+
if (active_ids.has(id)) return false;
|
|
3386
|
+
}
|
|
3387
|
+
return true;
|
|
3388
|
+
});
|
|
3389
|
+
}
|
|
3390
|
+
|
|
3209
3391
|
function install_global(
|
|
3210
3392
|
tools: Set<string>,
|
|
3211
3393
|
force: boolean,
|
|
@@ -3283,6 +3465,27 @@ function install_global(
|
|
|
3283
3465
|
info(` tools=${merged_tools.join(',')}`);
|
|
3284
3466
|
}
|
|
3285
3467
|
|
|
3468
|
+
// Installer drift report (measurement only, never a gate — see
|
|
3469
|
+
// `_lib/install_drift.ts`). Printed here because this is the only
|
|
3470
|
+
// moment the information is actionable: right before the redeploy below
|
|
3471
|
+
// overwrites whatever the consumer may have locally edited since the
|
|
3472
|
+
// last install. Same project-scoping the manifest update further below
|
|
3473
|
+
// uses (skipped inside the agent-config source repo itself, where the
|
|
3474
|
+
// manifest would be untracked noise).
|
|
3475
|
+
if (
|
|
3476
|
+
project_root !== null &&
|
|
3477
|
+
pathExists(_resolve_settings_read(project_root)) &&
|
|
3478
|
+
!isDir(path.join(project_root, '.agent-src.uncondensed'))
|
|
3479
|
+
) {
|
|
3480
|
+
const drift = collect_drift(project_root);
|
|
3481
|
+
if (!state.QUIET) {
|
|
3482
|
+
process.stdout.write('\n');
|
|
3483
|
+
for (const line of format_drift_report(drift).replace(/\n$/, '').split('\n')) {
|
|
3484
|
+
info(line);
|
|
3485
|
+
}
|
|
3486
|
+
}
|
|
3487
|
+
}
|
|
3488
|
+
|
|
3286
3489
|
const package_root = _resolve_package_root_for_global();
|
|
3287
3490
|
let deploy_results = _deploy_global_content(tools, force, package_root, written);
|
|
3288
3491
|
|
|
@@ -3303,6 +3506,35 @@ function install_global(
|
|
|
3303
3506
|
}
|
|
3304
3507
|
}
|
|
3305
3508
|
|
|
3509
|
+
// Scoped-projection prune (road-to-credible-install Phase 2 default
|
|
3510
|
+
// flip): when the GLOBAL settings governing this install resolve to
|
|
3511
|
+
// `projection.mode: scoped` (fresh installs; an EXISTING install without
|
|
3512
|
+
// the key, or with any other value, stays untouched — see
|
|
3513
|
+
// `_resolve_scoped_projection`), drop every skill/command artefact whose
|
|
3514
|
+
// `packs:` frontmatter carries no intersection with the active pack set.
|
|
3515
|
+
// A failed resolution (corrupt packs.yml, any thrown error) is caught
|
|
3516
|
+
// here and restores the full tree — never a partial or crashed prune.
|
|
3517
|
+
try {
|
|
3518
|
+
const { mode, active_packs } = _resolve_scoped_projection(package_root);
|
|
3519
|
+
if (mode === 'scoped') {
|
|
3520
|
+
const packs_registry = _load_packs_registry(package_root);
|
|
3521
|
+
const active_ids = _compute_active_pack_ids(packs_registry, active_packs);
|
|
3522
|
+
let scoped_pruned: number;
|
|
3523
|
+
[scoped_pruned, deploy_results] = _prune_scoped_modules(deploy_results, active_ids);
|
|
3524
|
+
if (!state.QUIET) {
|
|
3525
|
+
info(
|
|
3526
|
+
`🧹 Scoped install: pruned ${scoped_pruned} non-active-pack artefact(s) ` +
|
|
3527
|
+
`(active packs: ${[...active_ids].sort().join(', ') || '(none)'}). ` +
|
|
3528
|
+
'Set projection.mode: legacy-all in .agent-settings.yml to restore the full surface.',
|
|
3529
|
+
);
|
|
3530
|
+
}
|
|
3531
|
+
}
|
|
3532
|
+
} catch (e) {
|
|
3533
|
+
if (!state.QUIET) {
|
|
3534
|
+
warn(`Scoped-projection prune failed — restoring full tree (${String(e)}).`);
|
|
3535
|
+
}
|
|
3536
|
+
}
|
|
3537
|
+
|
|
3306
3538
|
const failed_tools = new Set<string>(
|
|
3307
3539
|
Object.keys(deploy_results).filter(
|
|
3308
3540
|
(tool_id) => (deploy_results[tool_id] as DeployResult)[2] === 'deploy_failed',
|
|
@@ -4794,5 +5026,14 @@ export {
|
|
|
4794
5026
|
ensure_cline_bridge,
|
|
4795
5027
|
ensure_windsurf_bridge,
|
|
4796
5028
|
ensure_gemini_bridge,
|
|
5029
|
+
// road-to-credible-install Phase 2: exported for the scoped-projection
|
|
5030
|
+
// prune unit tests.
|
|
5031
|
+
_prune_modules_by,
|
|
5032
|
+
_prune_lab_modules,
|
|
5033
|
+
_prune_scoped_modules,
|
|
5034
|
+
_load_packs_registry,
|
|
5035
|
+
_compute_active_pack_ids,
|
|
5036
|
+
_resolve_global_settings_doc,
|
|
5037
|
+
_resolve_scoped_projection,
|
|
4797
5038
|
};
|
|
4798
|
-
export type { Options };
|
|
5039
|
+
export type { Options, PackRecord, DeployResult };
|
|
@@ -26,6 +26,7 @@ import * as path from 'node:path';
|
|
|
26
26
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
27
27
|
|
|
28
28
|
import { artefact_roots } from './_lib/agent_src.js';
|
|
29
|
+
import { KERNEL_RULE_IDS } from './_lib/kernel_rules.js';
|
|
29
30
|
|
|
30
31
|
const _HERE = fileURLToPath(import.meta.url);
|
|
31
32
|
|
|
@@ -60,18 +61,8 @@ function _isFile(p: string): boolean {
|
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
|
|
63
|
-
// Locked kernel set —
|
|
64
|
-
const KERNEL_RULES: readonly string[] =
|
|
65
|
-
'agent-authority',
|
|
66
|
-
'ask-when-uncertain',
|
|
67
|
-
'commit-policy',
|
|
68
|
-
'direct-answers',
|
|
69
|
-
'language-and-tone',
|
|
70
|
-
'no-cheap-questions',
|
|
71
|
-
'non-destructive-by-default',
|
|
72
|
-
'scope-control',
|
|
73
|
-
'verify-before-complete',
|
|
74
|
-
];
|
|
64
|
+
// Locked kernel set — single-sourced in _lib/kernel_rules.ts.
|
|
65
|
+
const KERNEL_RULES: readonly string[] = KERNEL_RULE_IDS;
|
|
75
66
|
|
|
76
67
|
// Python: re.compile(r"```(?:[^\n]*\n)([\s\S]*?)```")
|
|
77
68
|
const _FENCE_RE = /```(?:[^\n]*\n)([\s\S]*?)```/g;
|
|
Binary file
|