@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
|
@@ -83,9 +83,9 @@ export function isReviewablePath(p: string): boolean {
|
|
|
83
83
|
return !SKIP_PREFIXES.some((pre) => p.startsWith(pre));
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
function changedFiles(baseRef: string): string[] {
|
|
86
|
+
function changedFiles(baseRef: string, cwd: string = REPO_ROOT): string[] {
|
|
87
87
|
const r = spawnSync('git', ['diff', '--name-only', `${baseRef}...HEAD`], {
|
|
88
|
-
cwd
|
|
88
|
+
cwd,
|
|
89
89
|
encoding: 'utf8',
|
|
90
90
|
});
|
|
91
91
|
if (r.status !== 0) {
|
|
@@ -98,10 +98,10 @@ function changedFiles(baseRef: string): string[] {
|
|
|
98
98
|
.filter(isReviewablePath);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
function diffText(baseRef: string, files: string[]): string {
|
|
101
|
+
function diffText(baseRef: string, files: string[], cwd: string = REPO_ROOT): string {
|
|
102
102
|
if (files.length === 0) return '';
|
|
103
103
|
const r = spawnSync('git', ['diff', `${baseRef}...HEAD`, '--', ...files], {
|
|
104
|
-
cwd
|
|
104
|
+
cwd,
|
|
105
105
|
encoding: 'utf8',
|
|
106
106
|
maxBuffer: 32 * 1024 * 1024,
|
|
107
107
|
});
|
|
@@ -109,10 +109,10 @@ function diffText(baseRef: string, files: string[]): string {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
/** Sum of added+deleted lines across `files` (binary files count 0). */
|
|
112
|
-
function changedLineCount(baseRef: string, files: string[]): number {
|
|
112
|
+
function changedLineCount(baseRef: string, files: string[], cwd: string = REPO_ROOT): number {
|
|
113
113
|
if (files.length === 0) return 0;
|
|
114
114
|
const r = spawnSync('git', ['diff', '--numstat', `${baseRef}...HEAD`, '--', ...files], {
|
|
115
|
-
cwd
|
|
115
|
+
cwd,
|
|
116
116
|
encoding: 'utf8',
|
|
117
117
|
maxBuffer: 32 * 1024 * 1024,
|
|
118
118
|
});
|
|
@@ -124,6 +124,94 @@ function changedLineCount(baseRef: string, files: string[]): number {
|
|
|
124
124
|
return total;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
// ── Release-PR detection (road-to-feedback-9.2.0-followups Phase 3) ────
|
|
128
|
+
/**
|
|
129
|
+
* A release PR is detected from its own packaging diff (baseRef...HEAD,
|
|
130
|
+
* scoped to CHANGELOG.md + package.json): an added changelog heading and an
|
|
131
|
+
* added package.json version bump, agreeing on the same version. Pure over
|
|
132
|
+
* the patch text — no git call — so it is unit-testable with synthetic
|
|
133
|
+
* patches. See docs/design/release-pr-review-mode.md.
|
|
134
|
+
*/
|
|
135
|
+
export function detectReleaseVersion(patchText: string): string | null {
|
|
136
|
+
const addedLines = patchText
|
|
137
|
+
.split('\n')
|
|
138
|
+
.filter((l) => l.startsWith('+') && !l.startsWith('+++'))
|
|
139
|
+
.map((l) => l.slice(1));
|
|
140
|
+
|
|
141
|
+
let changelogVersion: string | null = null;
|
|
142
|
+
let packageVersion: string | null = null;
|
|
143
|
+
for (const line of addedLines) {
|
|
144
|
+
const changelogMatch = /^##\s*\[(\d+\.\d+\.\d+)\]/.exec(line);
|
|
145
|
+
if (changelogMatch) changelogVersion = changelogMatch[1] ?? null;
|
|
146
|
+
const packageMatch = /^\s*"version"\s*:\s*"(\d+\.\d+\.\d+)"/.exec(line);
|
|
147
|
+
if (packageMatch) packageVersion = packageMatch[1] ?? null;
|
|
148
|
+
}
|
|
149
|
+
if (changelogVersion && packageVersion && changelogVersion === packageVersion) {
|
|
150
|
+
return changelogVersion;
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function releaseDetectionPatch(baseRef: string, cwd: string): string {
|
|
156
|
+
const r = spawnSync('git', ['diff', `${baseRef}...HEAD`, '--', 'CHANGELOG.md', 'package.json'], {
|
|
157
|
+
cwd,
|
|
158
|
+
encoding: 'utf8',
|
|
159
|
+
maxBuffer: 8 * 1024 * 1024,
|
|
160
|
+
});
|
|
161
|
+
return (r.stdout ?? '').toString();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** Impure wrapper: collects the packaging patch via git, then detects. */
|
|
165
|
+
export function detectReleaseVersionFromGit(baseRef: string, cwd: string = REPO_ROOT): string | null {
|
|
166
|
+
return detectReleaseVersion(releaseDetectionPatch(baseRef, cwd));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** `major.minor.patch`, tolerating an optional `v` prefix; null if not semver-shaped. */
|
|
170
|
+
function parseSemver(raw: string): [number, number, number] | null {
|
|
171
|
+
const m = /^v?(\d+)\.(\d+)\.(\d+)$/.exec(raw.trim());
|
|
172
|
+
if (!m) return null;
|
|
173
|
+
return [Number(m[1]), Number(m[2]), Number(m[3])];
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function semverLessThan(a: [number, number, number], b: [number, number, number]): boolean {
|
|
177
|
+
const [aMajor, aMinor, aPatch] = a;
|
|
178
|
+
const [bMajor, bMinor, bPatch] = b;
|
|
179
|
+
if (aMajor !== bMajor) return aMajor < bMajor;
|
|
180
|
+
if (aMinor !== bMinor) return aMinor < bMinor;
|
|
181
|
+
return aPatch < bPatch;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Highest semver-shaped tag strictly below `version`, or null if none. Pure
|
|
186
|
+
* over the supplied tag list — no git call. Non-semver tags (branch-backup
|
|
187
|
+
* names etc.) are ignored rather than throwing.
|
|
188
|
+
*/
|
|
189
|
+
export function pickPreviousTag(version: string, tags: readonly string[]): string | null {
|
|
190
|
+
const target = parseSemver(version);
|
|
191
|
+
if (!target) return null;
|
|
192
|
+
let best: { raw: string; parsed: [number, number, number] } | null = null;
|
|
193
|
+
for (const raw of tags) {
|
|
194
|
+
const parsed = parseSemver(raw);
|
|
195
|
+
if (!parsed) continue;
|
|
196
|
+
if (!semverLessThan(parsed, target)) continue;
|
|
197
|
+
if (!best || semverLessThan(best.parsed, parsed)) best = { raw, parsed };
|
|
198
|
+
}
|
|
199
|
+
return best ? best.raw : null;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function listGitTags(cwd: string): string[] {
|
|
203
|
+
const r = spawnSync('git', ['tag'], { cwd, encoding: 'utf8' });
|
|
204
|
+
return (r.stdout ?? '')
|
|
205
|
+
.split('\n')
|
|
206
|
+
.map((s) => s.trim())
|
|
207
|
+
.filter(Boolean);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** Impure wrapper: lists tags via git, then picks the previous one. */
|
|
211
|
+
export function resolvePreviousTagFromGit(version: string, cwd: string = REPO_ROOT): string | null {
|
|
212
|
+
return pickPreviousTag(version, listGitTags(cwd));
|
|
213
|
+
}
|
|
214
|
+
|
|
127
215
|
// ── Escalation classifier (large / claim-affecting → full ai-council) ──
|
|
128
216
|
/**
|
|
129
217
|
* A large or claim-affecting diff warrants the FULL `ai-council` (advisor
|
|
@@ -157,9 +245,31 @@ function loadSkillBody(name: string): string {
|
|
|
157
245
|
return readFileSync(p, 'utf8');
|
|
158
246
|
}
|
|
159
247
|
|
|
160
|
-
|
|
248
|
+
/** Info about a detected release PR — see docs/design/release-pr-review-mode.md. */
|
|
249
|
+
export interface ReleaseInfo {
|
|
250
|
+
version: string;
|
|
251
|
+
previousTag: string;
|
|
252
|
+
/** Files touched by the packaging diff (baseRef...HEAD) — for context only. */
|
|
253
|
+
packagingFiles: string[];
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Release-mode note appended to the system prompt so the model analyzes the
|
|
258
|
+
* feature range instead of reporting release features as "not in the diff"
|
|
259
|
+
* (the PR #957 false-advisory shape — see docs/design/release-pr-review-mode.md).
|
|
260
|
+
*/
|
|
261
|
+
function releaseNoteText(release: ReleaseInfo, baseRef: string): string {
|
|
262
|
+
const fileList = release.packagingFiles.length > 0 ? release.packagingFiles.join(', ') : '(none)';
|
|
263
|
+
return (
|
|
264
|
+
`\n\nRelease PR for ${release.version}: analysis range is ${release.previousTag}...HEAD ` +
|
|
265
|
+
`(the full release commit range). The packaging diff vs ${baseRef} touches: ${fileList}. ` +
|
|
266
|
+
"Do NOT report a feature as 'not in the diff' when it is present in the release range."
|
|
267
|
+
);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
function buildSystemPrompt(release?: ReleaseInfo, baseRef?: string): string {
|
|
161
271
|
const bodies = REVIEW_SKILLS.map((s) => `# Skill: ${s}\n\n${loadSkillBody(s)}`).join('\n\n---\n\n');
|
|
162
|
-
|
|
272
|
+
const base = [
|
|
163
273
|
'You are the self-review gate for an AI-agent governance package. Apply the',
|
|
164
274
|
'two skills below to the supplied PR diff. Return ONLY a JSON object of the',
|
|
165
275
|
'shape {"findings":[{"severity":"critical|high|medium|low",',
|
|
@@ -170,6 +280,7 @@ function buildSystemPrompt(): string {
|
|
|
170
280
|
'',
|
|
171
281
|
bodies,
|
|
172
282
|
].join('\n');
|
|
283
|
+
return release && baseRef ? base + releaseNoteText(release, baseRef) : base;
|
|
173
284
|
}
|
|
174
285
|
|
|
175
286
|
// ── Plan (dry-run) ────────────────────────────────────────────────────
|
|
@@ -179,22 +290,47 @@ export interface ReviewPlan {
|
|
|
179
290
|
promptChars: number;
|
|
180
291
|
note: string;
|
|
181
292
|
escalation: string[];
|
|
293
|
+
/** The base actually analyzed for `files`/diff: `baseRef`, or `release.previousTag`. */
|
|
294
|
+
analysisBase: string;
|
|
295
|
+
/** Present iff a release PR was detected — see docs/design/release-pr-review-mode.md. */
|
|
296
|
+
release?: ReleaseInfo;
|
|
182
297
|
}
|
|
183
298
|
|
|
184
|
-
export function buildPlan(baseRef: string): ReviewPlan {
|
|
185
|
-
const
|
|
186
|
-
const
|
|
187
|
-
|
|
299
|
+
export function buildPlan(baseRef: string, cwd: string = REPO_ROOT): ReviewPlan {
|
|
300
|
+
const packagingFiles = changedFiles(baseRef, cwd);
|
|
301
|
+
const releaseVersion = detectReleaseVersionFromGit(baseRef, cwd);
|
|
302
|
+
|
|
303
|
+
let release: ReleaseInfo | undefined;
|
|
304
|
+
let analysisBase = baseRef;
|
|
305
|
+
if (releaseVersion) {
|
|
306
|
+
const previousTag = resolvePreviousTagFromGit(releaseVersion, cwd);
|
|
307
|
+
if (previousTag) {
|
|
308
|
+
release = { version: releaseVersion, previousTag, packagingFiles };
|
|
309
|
+
analysisBase = previousTag;
|
|
310
|
+
} else {
|
|
311
|
+
process.stdout.write(
|
|
312
|
+
`::notice::self-review-gate — release ${releaseVersion} detected but no previous tag ` +
|
|
313
|
+
`found; falling back to the normal base (${baseRef}).\n`,
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
const files = analysisBase === baseRef ? packagingFiles : changedFiles(analysisBase, cwd);
|
|
319
|
+
const diff = diffText(analysisBase, files, cwd);
|
|
320
|
+
const escalation = escalationReasons(files, changedLineCount(analysisBase, files, cwd));
|
|
321
|
+
const systemPrompt = buildSystemPrompt(release, baseRef);
|
|
188
322
|
return {
|
|
189
323
|
skills: [...REVIEW_SKILLS],
|
|
190
324
|
files,
|
|
191
|
-
|
|
325
|
+
analysisBase,
|
|
326
|
+
...(release ? { release } : {}),
|
|
327
|
+
promptChars: systemPrompt.length + diff.length,
|
|
192
328
|
escalation,
|
|
193
329
|
note:
|
|
194
330
|
files.length === 0
|
|
195
331
|
? 'No reviewable (non-generated) files changed — the live review would no-op.'
|
|
196
332
|
: `${files.length} reviewable file(s); live review would send ~${Math.ceil(
|
|
197
|
-
(
|
|
333
|
+
(systemPrompt.length + diff.length) / 4,
|
|
198
334
|
)} input tokens.`,
|
|
199
335
|
};
|
|
200
336
|
}
|
|
@@ -302,6 +438,10 @@ export function main(argv: string[]): 0 | 2 {
|
|
|
302
438
|
process.stdout.write(
|
|
303
439
|
`self-review-gate (dry-run — no spend, advisory):\n` +
|
|
304
440
|
` skills: ${plan.skills.join(', ')}\n` +
|
|
441
|
+
(plan.release
|
|
442
|
+
? ` mode: release (${plan.release.version}; feature range ${plan.release.previousTag}...HEAD; ` +
|
|
443
|
+
`packaging diff ${plan.release.packagingFiles.length} file(s))\n`
|
|
444
|
+
: '') +
|
|
305
445
|
` files: ${plan.files.length}\n` +
|
|
306
446
|
` ${plan.note}\n` +
|
|
307
447
|
(plan.escalation.length
|
|
@@ -341,7 +481,7 @@ export function main(argv: string[]): 0 | 2 {
|
|
|
341
481
|
// findings returns 2 — an error is not a finding.)
|
|
342
482
|
try {
|
|
343
483
|
const client = new AnthropicClient({ api_key: key });
|
|
344
|
-
const resp = client.ask(buildSystemPrompt(), diffText(
|
|
484
|
+
const resp = client.ask(buildSystemPrompt(plan.release, baseRef), diffText(plan.analysisBase, plan.files), 4096);
|
|
345
485
|
if (resp.error) {
|
|
346
486
|
process.stdout.write(
|
|
347
487
|
`::warning::self-review-gate NEUTRAL — model call did not complete (${resp.error}); ` +
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Session-canary injection — `session_start` hook.
|
|
4
|
+
*
|
|
5
|
+
* Deterministic backstop for the `session-canary` rule. When the consumer has
|
|
6
|
+
* set `personal.canary_name` in `.agent-settings.yml`, every NEW session gets a
|
|
7
|
+
* `<session-canary>` context block injected at start (same mechanism as
|
|
8
|
+
* hot-context: `{"decision":"allow","context":"<block>"}` on stdout; the
|
|
9
|
+
* dispatcher forwards `context` on session_start so the host adds it to the
|
|
10
|
+
* session context).
|
|
11
|
+
*
|
|
12
|
+
* Why a hook and not just the rule: the canary contract (greet the user by
|
|
13
|
+
* name at task start; reply-close markers at the end of work replies) is a
|
|
14
|
+
* liveness signal — the user watches it like a canary in a coal mine, and its
|
|
15
|
+
* silent disappearance means the context window is degrading. A trigger-routed
|
|
16
|
+
* rule alone is exactly the kind of surface that is dropped in fresh
|
|
17
|
+
* conversations (found RED baseline on the reply-close PR-URL contract,
|
|
18
|
+
* 2026-07-27); the session_start injection makes the contract present in every
|
|
19
|
+
* new conversation on hook-capable hosts. Copilot (no hook surface) falls back
|
|
20
|
+
* to the rule alone.
|
|
21
|
+
*
|
|
22
|
+
* Gate: `personal.canary_name` non-empty. Missing settings file, missing key,
|
|
23
|
+
* or empty value → clean no-op (exit 0, no stdout). Never blocks
|
|
24
|
+
* (fail_closed: false).
|
|
25
|
+
*/
|
|
26
|
+
import fs from "node:fs";
|
|
27
|
+
import path from "node:path";
|
|
28
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
29
|
+
import { readHookStdin } from "./hooks/hook_stdin.js";
|
|
30
|
+
|
|
31
|
+
const EXIT_ALLOW = 0;
|
|
32
|
+
|
|
33
|
+
export const SETTINGS_FILE = ".agent-settings.yml";
|
|
34
|
+
|
|
35
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
36
|
+
type JsonObject = { [k: string]: JsonValue };
|
|
37
|
+
|
|
38
|
+
function _isObject(v: unknown): v is JsonObject {
|
|
39
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Minimal line-walker for `personal.canary_name` — no YAML dependency, same
|
|
44
|
+
* approach as onboarding_gate_hook._read_onboarded. Returns the raw scalar or
|
|
45
|
+
* null when the section/key is absent.
|
|
46
|
+
*/
|
|
47
|
+
export function read_canary_name(settings_path: string): string | null {
|
|
48
|
+
let text: string;
|
|
49
|
+
try {
|
|
50
|
+
if (!fs.statSync(settings_path).isFile()) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
text = fs.readFileSync(settings_path, "utf-8");
|
|
54
|
+
} catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
let in_personal = false;
|
|
58
|
+
for (const line of text.split(/\r?\n/)) {
|
|
59
|
+
if (/^personal\s*:\s*(?:#.*)?$/.test(line)) {
|
|
60
|
+
in_personal = true;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (in_personal && /^\S/.test(line)) {
|
|
64
|
+
in_personal = false; // left the personal: block
|
|
65
|
+
}
|
|
66
|
+
if (in_personal) {
|
|
67
|
+
const m = /^\s+canary_name\s*:\s*(.*?)\s*(?:#.*)?$/.exec(line);
|
|
68
|
+
if (m && m[1] !== undefined) {
|
|
69
|
+
return m[1].trim();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The name is user-owned config, but it lands verbatim in model context —
|
|
78
|
+
* strip quotes, collapse whitespace, drop markup-significant characters, and
|
|
79
|
+
* cap the length so a mangled settings file cannot smuggle a paragraph in.
|
|
80
|
+
*/
|
|
81
|
+
export function sanitize_name(raw: string | null): string {
|
|
82
|
+
if (raw === null) {
|
|
83
|
+
return "";
|
|
84
|
+
}
|
|
85
|
+
let name = raw.trim();
|
|
86
|
+
if (
|
|
87
|
+
(name.startsWith('"') && name.endsWith('"')) ||
|
|
88
|
+
(name.startsWith("'") && name.endsWith("'"))
|
|
89
|
+
) {
|
|
90
|
+
name = name.slice(1, -1);
|
|
91
|
+
}
|
|
92
|
+
name = name.replace(/[<>&`]/g, "").replace(/\s+/g, " ").trim();
|
|
93
|
+
return name.slice(0, 64);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function build_canary_block(name: string): string {
|
|
97
|
+
return [
|
|
98
|
+
`<session-canary settings-key="personal.canary_name">`,
|
|
99
|
+
`The user has configured a session canary. Two obligations, this whole conversation:`,
|
|
100
|
+
`1. OPENING CANARY — the first reply of this session, and the first reply of each` +
|
|
101
|
+
` NEW task within it, opens by addressing the user by name: "${name}". One natural` +
|
|
102
|
+
` mention in the user's language; intermediate replies of the same task do not re-greet.`,
|
|
103
|
+
`2. CLOSING CANARY — a reply that landed substantial work ends with ONE compact` +
|
|
104
|
+
` end-summary, and a PR created or updated this turn puts its raw URL as the` +
|
|
105
|
+
` LITERAL LAST LINE (reply-close contract of the direct-answers rule).`,
|
|
106
|
+
`Purpose: the user watches these markers like a canary in a mine — their silent` +
|
|
107
|
+
` disappearance signals context degradation. Never fake continuity: if you notice` +
|
|
108
|
+
` you dropped a canary, say so and suggest a fresh session or /agent-handoff.`,
|
|
109
|
+
`</session-canary>`,
|
|
110
|
+
].join("\n");
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
function _workspaceRoot(envelope: JsonObject): string {
|
|
114
|
+
const v = envelope["workspace_root"];
|
|
115
|
+
if (typeof v === "string" && v) {
|
|
116
|
+
return v;
|
|
117
|
+
}
|
|
118
|
+
return process.cwd();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function main(): number {
|
|
122
|
+
let envelope: JsonValue = {};
|
|
123
|
+
try {
|
|
124
|
+
const raw = _readStdin();
|
|
125
|
+
envelope = raw.trim() ? (JSON.parse(raw) as JsonValue) : {};
|
|
126
|
+
} catch {
|
|
127
|
+
// malformed stdin — still try cwd-based settings below; never block
|
|
128
|
+
}
|
|
129
|
+
const env: JsonObject = _isObject(envelope) ? envelope : {};
|
|
130
|
+
|
|
131
|
+
// Only session_start carries context-injection semantics; other events no-op.
|
|
132
|
+
const event = env["event"];
|
|
133
|
+
if (typeof event === "string" && event !== "" && event !== "session_start") {
|
|
134
|
+
return EXIT_ALLOW;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const root = _workspaceRoot(env);
|
|
138
|
+
const name = sanitize_name(read_canary_name(path.join(root, SETTINGS_FILE)));
|
|
139
|
+
if (!name) {
|
|
140
|
+
return EXIT_ALLOW; // canary not configured — clean no-op
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
process.stdout.write(
|
|
144
|
+
`${JSON.stringify({
|
|
145
|
+
decision: "allow",
|
|
146
|
+
reason: `session-canary: active for "${name}"`,
|
|
147
|
+
context: build_canary_block(name),
|
|
148
|
+
})}\n`,
|
|
149
|
+
);
|
|
150
|
+
return EXIT_ALLOW;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function _readStdin(): string {
|
|
154
|
+
return readHookStdin();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
158
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
159
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
160
|
+
function _isCliEntry(): boolean {
|
|
161
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
if (process.argv[1] === undefined) {
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
168
|
+
if (import.meta.url === argvUrl) {
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
173
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
174
|
+
return here === argv;
|
|
175
|
+
} catch {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (_isCliEntry()) {
|
|
181
|
+
process.exit(main());
|
|
182
|
+
}
|
|
@@ -3327,6 +3327,50 @@ export function check_structural_malice(text: string): Issue[] {
|
|
|
3327
3327
|
return issues;
|
|
3328
3328
|
}
|
|
3329
3329
|
|
|
3330
|
+
// --- Anti-nag check ---
|
|
3331
|
+
//
|
|
3332
|
+
// A skill may describe a capability; it may not nag the agent into re-invoking
|
|
3333
|
+
// it, obligate an update check the package cannot honour offline, or claim
|
|
3334
|
+
// unconditional primacy over sibling skills. The token list below IS the
|
|
3335
|
+
// contract — greppable on purpose, so an author can see exactly what is refused
|
|
3336
|
+
// without reading the linter.
|
|
3337
|
+
//
|
|
3338
|
+
// Measured before wiring: 0 hits across all 281 shipped skills. This is a
|
|
3339
|
+
// regression guard, not a cleanup task — so any hit is a new violation and
|
|
3340
|
+
// `error` is the honest severity. A skill that must quote one of these phrases
|
|
3341
|
+
// as a negative example belongs in prose docs, not in a SKILL.md body.
|
|
3342
|
+
|
|
3343
|
+
const _NAG_UPDATE_CHECK = /(?:check\s+(?:for\s+)?(?:updates?|(?:a\s+)?(?:newer|later|latest)\s+version))/i;
|
|
3344
|
+
const _NAG_STAY_CURRENT = /(?:(?:ensure|make sure)\s+(?:you(?:\s+are|\s*'re)?\s+)?(?:on|running|using)\s+the\s+latest)/i;
|
|
3345
|
+
const _NAG_SELF_PROMO = /(?:(?:always|you\s+must)\s+use\s+this\s+skill)/i;
|
|
3346
|
+
const _NAG_BEST_SKILL = /(?:this\s+skill\s+is\s+the\s+(?:best|only|preferred))/i;
|
|
3347
|
+
const _NAG_MUST_USE = /\bMUST[- ]USE\b/;
|
|
3348
|
+
const _NAG_ALWAYS_USE = /\bALWAYS\s+USE\s+THIS\b/i;
|
|
3349
|
+
|
|
3350
|
+
const _NAG_PATTERNS: Array<[string, RegExp]> = [
|
|
3351
|
+
['update_check', _NAG_UPDATE_CHECK],
|
|
3352
|
+
['stay_current', _NAG_STAY_CURRENT],
|
|
3353
|
+
['self_promo', _NAG_SELF_PROMO],
|
|
3354
|
+
['best_skill', _NAG_BEST_SKILL],
|
|
3355
|
+
['must_use', _NAG_MUST_USE],
|
|
3356
|
+
['always_use', _NAG_ALWAYS_USE],
|
|
3357
|
+
];
|
|
3358
|
+
|
|
3359
|
+
export function check_skill_nag(text: string): Issue[] {
|
|
3360
|
+
const issues: Issue[] = [];
|
|
3361
|
+
const lines = splitlines(text);
|
|
3362
|
+
lines.forEach((raw, idx) => {
|
|
3363
|
+
const lineno = idx + 1;
|
|
3364
|
+
for (const [name, pattern] of _NAG_PATTERNS) {
|
|
3365
|
+
const match = pattern.exec(raw);
|
|
3366
|
+
if (match) {
|
|
3367
|
+
issues.push(new Issue('error', `nag:${name}`, `${lineno}:${match[0].trim()}`));
|
|
3368
|
+
}
|
|
3369
|
+
}
|
|
3370
|
+
});
|
|
3371
|
+
return issues;
|
|
3372
|
+
}
|
|
3373
|
+
|
|
3330
3374
|
// --- Output-schema check ---
|
|
3331
3375
|
|
|
3332
3376
|
const _OUTPUT_SCHEMA_KEY_PATTERN = /^(\w+):\s*(.*?)\s*$/;
|
|
@@ -3529,6 +3573,17 @@ export function lint_file(p: string, repoRoot: string | null = null): LintResult
|
|
|
3529
3573
|
}
|
|
3530
3574
|
}
|
|
3531
3575
|
|
|
3576
|
+
// Skills only: rules legitimately carry unconditional MUST language (that is
|
|
3577
|
+
// what an Iron Law is), so applying the nag list to rules would fight the
|
|
3578
|
+
// rule layer's own register.
|
|
3579
|
+
if (artifactType === 'skill') {
|
|
3580
|
+
const nagIssues = check_skill_nag(text);
|
|
3581
|
+
if (nagIssues.length > 0) {
|
|
3582
|
+
result.issues.push(...nagIssues);
|
|
3583
|
+
result.status = classify_status(result.issues);
|
|
3584
|
+
}
|
|
3585
|
+
}
|
|
3586
|
+
|
|
3532
3587
|
const frugalityIssues = lint_frugality_writer_cite(displayPath, text, artifactType);
|
|
3533
3588
|
if (frugalityIssues.length > 0) {
|
|
3534
3589
|
result.issues.push(...frugalityIssues);
|
|
@@ -78,8 +78,8 @@ function _checkInstallerRuns(tmpdir: string): [number, string | null] {
|
|
|
78
78
|
];
|
|
79
79
|
// ADR-020: --project is reserved for maintainers; CI is a maintainer context.
|
|
80
80
|
const env = { ...process.env, AGENT_CONFIG_DEV_MODE: '1' };
|
|
81
|
-
// Run the installer's `.ts` twin via the repo-local tsx binary (
|
|
82
|
-
//
|
|
81
|
+
// Run the installer's `.ts` twin via the repo-local tsx binary (the
|
|
82
|
+
// retired Python implementation is deleted, ADR-200).
|
|
83
83
|
const result = spawnSync(TSX_BIN, cmd, {
|
|
84
84
|
encoding: 'utf-8',
|
|
85
85
|
timeout: 60000,
|
|
@@ -28,6 +28,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
28
28
|
import { parse as parseYaml } from 'yaml';
|
|
29
29
|
|
|
30
30
|
import { is_replay_mode } from './hooks/state_io.js';
|
|
31
|
+
import { readHookStdin } from './hooks/hook_stdin.js';
|
|
31
32
|
|
|
32
33
|
const CHECK_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
33
34
|
const STATE_REL = ['agents', 'runtime', 'state', 'surface-probe.json'] as const;
|
|
@@ -50,13 +51,7 @@ function _package_root(): string {
|
|
|
50
51
|
}
|
|
51
52
|
|
|
52
53
|
function _readStdinIfNotTty(): void {
|
|
53
|
-
|
|
54
|
-
if (!process.stdin.isTTY) {
|
|
55
|
-
fs.readFileSync(0, 'utf-8');
|
|
56
|
-
}
|
|
57
|
-
} catch {
|
|
58
|
-
/* ignore */
|
|
59
|
-
}
|
|
54
|
+
readHookStdin();
|
|
60
55
|
}
|
|
61
56
|
|
|
62
57
|
function _exists(p: string): boolean {
|
|
@@ -209,7 +204,13 @@ export function main(argv?: string[], opts: ProbeOptions = {}): number {
|
|
|
209
204
|
}
|
|
210
205
|
}
|
|
211
206
|
|
|
207
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
208
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
209
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
212
210
|
function _isCliEntry(): boolean {
|
|
211
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
213
214
|
if (process.argv[1] === undefined) {
|
|
214
215
|
return false;
|
|
215
216
|
}
|