@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
|
@@ -133,6 +133,28 @@
|
|
|
133
133
|
domain: engineering
|
|
134
134
|
size_class: medium
|
|
135
135
|
|
|
136
|
+
- id: scale-discipline
|
|
137
|
+
label: Scale Discipline
|
|
138
|
+
description: Scale-safe persistence — index parity, bounded reads, migration safety, growth budgets, thin request path, durable async; deterministic pattern lints gate, heuristics advise.
|
|
139
|
+
workspaces: [engineering]
|
|
140
|
+
requires: [engineering-base]
|
|
141
|
+
trust_level_default: experimental
|
|
142
|
+
surface_tier: lab
|
|
143
|
+
domain: engineering
|
|
144
|
+
size_class: small
|
|
145
|
+
default_install: false
|
|
146
|
+
|
|
147
|
+
- id: history-discipline
|
|
148
|
+
label: History Discipline
|
|
149
|
+
description: Audit/change history done right — audit coverage on declared scopes, cheapest-sufficient tier selection (default row-level audit log; event sourcing only by waiver), audit-table hygiene, privacy + reliability interlocks.
|
|
150
|
+
workspaces: [engineering]
|
|
151
|
+
requires: [scale-discipline]
|
|
152
|
+
trust_level_default: experimental
|
|
153
|
+
surface_tier: lab
|
|
154
|
+
domain: engineering
|
|
155
|
+
size_class: small
|
|
156
|
+
default_install: false
|
|
157
|
+
|
|
136
158
|
- id: python
|
|
137
159
|
label: Python
|
|
138
160
|
description: Python-language patterns.
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
description: Code, tests, CI, reviews, architecture.
|
|
14
14
|
example_roles: [Developer, CTO, Tech Lead]
|
|
15
15
|
default_packs: [engineering-base, git]
|
|
16
|
-
optional_packs: [php, laravel, symfony, javascript, typescript, react, nextjs, python, frontend-design, brand, analysis-workbench]
|
|
16
|
+
optional_packs: [php, laravel, symfony, javascript, typescript, react, nextjs, python, frontend-design, brand, analysis-workbench, scale-discipline, history-discipline]
|
|
17
17
|
|
|
18
18
|
- id: product
|
|
19
19
|
label: Product
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Outside-in evaluator budgets (road-to-credible-install Phase 6). VALUES ARE FROZEN FROM MEASURED ACCEPTANCE NUMBERS of Phases 0-3 (2026-07-27, packed tarball @ 9.8.0 tree, --omit=dev consumer install), never invented. The umbrella harness (src/scripts/evaluator_umbrella.sh) measures the packed artifact and check_evaluator_budgets.ts enforces: absolute budget AND >regression_pct growth vs last_measured fails even under budget. Owner + review date are lint-enforced (lint_budget_ownership). Timing metrics carry a per-entry regression_pct override (200) — wall-clock noise would flap a 10% creep rule; their absolute max is the binding gate. Sizes/counts keep the tight 10% creep.",
|
|
3
|
+
"schema_version": 1,
|
|
4
|
+
"owner": "maintainer",
|
|
5
|
+
"review_by": "2027-07-27",
|
|
6
|
+
"regression_pct": 10,
|
|
7
|
+
"budgets": {
|
|
8
|
+
"unpacked_size_mb": {
|
|
9
|
+
"max": 28,
|
|
10
|
+
"last_measured": 26.05,
|
|
11
|
+
"method": "npm pack --json → dist.unpackedSize / 1e6 — includes the Phase-1 precompiled bundles (dist/hooks/dispatch.js + dist/mcp/server.mjs, ~2.1 MB) that bought the 23x hook-latency win and the tsx removal"
|
|
12
|
+
},
|
|
13
|
+
"node_modules_mb": {
|
|
14
|
+
"max": 140,
|
|
15
|
+
"last_measured": 127,
|
|
16
|
+
"method": "du -sm node_modules after `npm install --omit=dev <tarball>` in a clean project"
|
|
17
|
+
},
|
|
18
|
+
"runtime_dep_count": {
|
|
19
|
+
"max": 200,
|
|
20
|
+
"last_measured": 187,
|
|
21
|
+
"method": "package-lock.json packages count (minus root) of the clean --omit=dev install"
|
|
22
|
+
},
|
|
23
|
+
"cli_version_cold_ms": {
|
|
24
|
+
"max": 1500,
|
|
25
|
+
"last_measured": 370,
|
|
26
|
+
"method": "wall-clock of the FIRST `agent-config --version` after install (cold fs cache run counts)",
|
|
27
|
+
"regression_pct": 200
|
|
28
|
+
},
|
|
29
|
+
"mcp_boot_to_initialize_ms": {
|
|
30
|
+
"max": 2000,
|
|
31
|
+
"last_measured": 264,
|
|
32
|
+
"method": "initialize request piped to `node dist/mcp/server.mjs`, wall-clock to response",
|
|
33
|
+
"regression_pct": 200
|
|
34
|
+
},
|
|
35
|
+
"cli_help_command_count": {
|
|
36
|
+
"max": 80,
|
|
37
|
+
"last_measured": 80,
|
|
38
|
+
"method": "registry enumeration — count of `{ name: '...', disposition` entries in src/cli/registry.ts (NOT --help prose parsing; methods historically disagreed 74 vs 76 vs 79)",
|
|
39
|
+
"baseline_note": "79 → 80 on 2026-07-29 (9.9.0). This RECORDS growth that already shipped through its own reviewed PRs; it does not authorize new surface. Net +6 registry entries since the 9.8.0 tag (7 added — code-graph, knowledge, analytics, memory:get, memory:learn, rtk:detect, dispatch:hook; 1 removed — the old dispatch:hook entry), and the frozen 79 was never re-measured after them. The gate did its job: it made the drift visible at release time rather than letting it accrue silently. Next addition breaches again by design."
|
|
40
|
+
},
|
|
41
|
+
"mcp_public_tool_count": {
|
|
42
|
+
"max": 19,
|
|
43
|
+
"last_measured": 19,
|
|
44
|
+
"method": "tools/list length on the stdio server (post-ADR-132: implemented tools only)"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_comment": "Pre-registered hook-latency budget (road-to-credible-install Phase 1). Committed BEFORE the first optimization landed, per the roadmap's pre-registration discipline: the numbers below are the acceptance bar the precompile + single-process work is measured against, not a post-hoc fit. Consumed by the bench harness (scripts/bench_hook_latency) and its CI gate. Every budget carries an owner and a review date per the Phase-6 budget-ownership lint.",
|
|
3
|
+
"schema_version": 1,
|
|
4
|
+
"registered_at": "2026-07-27",
|
|
5
|
+
"owner": "maintainer",
|
|
6
|
+
"review_by": "2027-07-27",
|
|
7
|
+
"hardware_reference": {
|
|
8
|
+
"ci": "GitHub-hosted ubuntu-latest runner (the numbers the gate enforces)",
|
|
9
|
+
"floor": "1 vCPU reference container (documented ceiling, not CI-enforced)"
|
|
10
|
+
},
|
|
11
|
+
"budgets_ms": {
|
|
12
|
+
"pre_tool_use": { "p95_ci": 150, "p95_1vcpu": 400 },
|
|
13
|
+
"any_hook_event": { "p95_ci": 250 }
|
|
14
|
+
},
|
|
15
|
+
"regression_gate": {
|
|
16
|
+
"max_regression_pct": 200,
|
|
17
|
+
"_comment": "Pathology net only — the ABSOLUTE budgets above are the binding gate for wall-clock. The original 20% window was falsified by measured GitHub-runner variance: two CI runs of IDENTICAL code measured p95 77-89 ms and 92-103 ms (+23% run-to-run, 2026-07-27, runs 30303438480 / round-2 tests.yml). Same rationale as the regression_pct 200 override on the evaluator timing budgets: a tight creep rule on shared-runner wall-clock flaps; sizes/counts keep tight windows, timings get absolute caps."
|
|
18
|
+
},
|
|
19
|
+
"honest_null_consequence": "If the budget is missed after precompile + single-process + lazy I/O, hooks ship default-off with an explicit opt-in flag and the measured numbers published under a 'known cost' heading. A resident-dispatcher daemon is NOT improvised as a rescue (council 2026-07-26)."
|
|
20
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Reach channel registry — standalone operator tooling
|
|
2
|
+
# (road-to-internet-reach Phase 1).
|
|
3
|
+
#
|
|
4
|
+
# WHAT THIS FILE IS. A machine-checked answer to three operator questions:
|
|
5
|
+
# which external backend does a reach recipe need, is that backend healthy,
|
|
6
|
+
# and is its install command pinned. Schema:
|
|
7
|
+
# src/scripts/schemas/reach-channels.schema.json; gate:
|
|
8
|
+
# `task check-reach-channels`.
|
|
9
|
+
#
|
|
10
|
+
# WHAT THIS FILE IS NOT. Not a routing table, not a recommendation, not an
|
|
11
|
+
# agent-facing surface. The Phase 0 pre-registered benchmark returned
|
|
12
|
+
# `band: stop` (native arm 12/12, reach arm 0 outright wins), so no router
|
|
13
|
+
# skill ships and NO channel below is routed, preferred, or suggested to an
|
|
14
|
+
# agent. Reading a channel here as "the agent should use this" is a
|
|
15
|
+
# misreading of the verdict.
|
|
16
|
+
#
|
|
17
|
+
# BACKEND ORDER IS THE SWITCH. `backends:` is an ordered candidate list —
|
|
18
|
+
# each entry satisfies the channel on its own (an alternative, never a
|
|
19
|
+
# pipeline stage). Changing the preferred candidate is reordering this list,
|
|
20
|
+
# never editing code. Channel order carries no meaning.
|
|
21
|
+
#
|
|
22
|
+
# LIFECYCLE VOCABULARY IS BORROWED, NOT FORKED. `lifecycle:` uses the four
|
|
23
|
+
# values from docs/contracts/provider-lifecycle.md (`experimental | stable |
|
|
24
|
+
# deprecated | community`). `stable` here means the same thing it means
|
|
25
|
+
# there: a maintainer exercised it against a real run at least once.
|
|
26
|
+
#
|
|
27
|
+
# PINNING IS LOAD-BEARING. Every `install:` string is either an explicitly
|
|
28
|
+
# version-pinned command or an `os-baseline:` sentinel (see below). Moving
|
|
29
|
+
# targets — `latest`, `main`, `master`, `HEAD`, archive/tarball URLs — are
|
|
30
|
+
# rejected by the schema pattern, not by good intentions. The package never
|
|
31
|
+
# executes these strings: a human reads and runs them.
|
|
32
|
+
#
|
|
33
|
+
# OS BASELINES ARE NOT PACKAGE INSTALLS. `curl` and `node` are assumed
|
|
34
|
+
# present: they ship with the OS or the developer's base image. Their
|
|
35
|
+
# prescriptions therefore name the platform's own package manager and stay
|
|
36
|
+
# unpinned wherever a version pin is not meaningful, marked with the
|
|
37
|
+
# explicit `os-baseline:` sentinel so the absence of a pin is a declared
|
|
38
|
+
# decision rather than an oversight. Where a pin IS meaningful — Node's
|
|
39
|
+
# major line — a real versioned formula is used.
|
|
40
|
+
#
|
|
41
|
+
# `jq` IS DELIBERATELY NOT A BACKEND. JSON shaping happens inside the
|
|
42
|
+
# operator's own recipe, downstream of retrieval; it is not a candidate
|
|
43
|
+
# that satisfies a channel. If it ever becomes one, it inherits the same
|
|
44
|
+
# `os-baseline:` convention as curl.
|
|
45
|
+
#
|
|
46
|
+
# PIN PROVENANCE (looked up 2026-07-24, never invented):
|
|
47
|
+
# gh 2.96.0 — `gh --version` on the authoring machine, corroborated by
|
|
48
|
+
# https://api.github.com/repos/cli/cli/releases/latest
|
|
49
|
+
# (tag_name v2.96.0) and
|
|
50
|
+
# https://formulae.brew.sh/api/formula/gh.json (stable 2.96.0).
|
|
51
|
+
# yt-dlp 2026.7.4 — https://pypi.org/pypi/yt-dlp/json (.info.version).
|
|
52
|
+
# node@22 — https://formulae.brew.sh/api/formula/node@22.json
|
|
53
|
+
# (versioned formula exists; stable 22.23.1 at lookup time).
|
|
54
|
+
# asdf plugin `github-cli` — exists in the asdf plugin index
|
|
55
|
+
# (raw.githubusercontent.com/asdf-vm/asdf-plugins → plugins/github-cli).
|
|
56
|
+
# Homebrew has no versioned `gh` formula, so an exactly
|
|
57
|
+
# pinned macOS/Linux prescription goes through asdf.
|
|
58
|
+
# winget id `GitHub.cli` version 2.96.0 — present in the winget-pkgs manifest
|
|
59
|
+
# tree (api.github.com/repos/microsoft/winget-pkgs/contents/
|
|
60
|
+
# manifests/g/GitHub/cli lists 2.96.0).
|
|
61
|
+
#
|
|
62
|
+
# `last_verified:` MUST stay quoted — an unquoted ISO date parses as a
|
|
63
|
+
# timestamp, not a string, and fails the schema type check.
|
|
64
|
+
schema_version: reach-channels-v1
|
|
65
|
+
|
|
66
|
+
channels:
|
|
67
|
+
# Repository metadata: issues, PRs, releases, workflow runs, raw file reads.
|
|
68
|
+
# `free-key`: unauthenticated GitHub API access is rate-limited hard enough
|
|
69
|
+
# that a token is the practical floor. The token is operator-provisioned;
|
|
70
|
+
# nothing here reads, stores, or forwards it.
|
|
71
|
+
- id: github
|
|
72
|
+
description: Repository, issue, release and workflow metadata from the GitHub API.
|
|
73
|
+
tier: free-key
|
|
74
|
+
lifecycle: stable
|
|
75
|
+
override_key: reach.channels.github.backend
|
|
76
|
+
last_verified: "2026-07-24"
|
|
77
|
+
backends:
|
|
78
|
+
- id: gh
|
|
79
|
+
probe_cmd: gh
|
|
80
|
+
probe_args: ["--version"]
|
|
81
|
+
install:
|
|
82
|
+
darwin: asdf plugin add github-cli && asdf install github-cli 2.96.0
|
|
83
|
+
linux: asdf plugin add github-cli && asdf install github-cli 2.96.0
|
|
84
|
+
win32: winget install --id GitHub.cli --version 2.96.0
|
|
85
|
+
default: asdf plugin add github-cli && asdf install github-cli 2.96.0
|
|
86
|
+
|
|
87
|
+
# Video metadata and subtitle tracks. `yt-dlp` is NOT installed on the
|
|
88
|
+
# authoring machine, and that is expected: this file is validated offline
|
|
89
|
+
# against the schema only, so an absent backend cannot fail the gate. Its
|
|
90
|
+
# health is the probe layer's question, never the registry's.
|
|
91
|
+
# `experimental` for exactly that reason — the shape is right, no
|
|
92
|
+
# maintainer has exercised this backend against a real run.
|
|
93
|
+
- id: youtube
|
|
94
|
+
description: Video metadata and subtitle tracks for a public video URL.
|
|
95
|
+
tier: zero-config
|
|
96
|
+
lifecycle: experimental
|
|
97
|
+
override_key: reach.channels.youtube.backend
|
|
98
|
+
last_verified: "2026-07-24"
|
|
99
|
+
backends:
|
|
100
|
+
- id: yt-dlp
|
|
101
|
+
probe_cmd: yt-dlp
|
|
102
|
+
probe_args: ["--version"]
|
|
103
|
+
install:
|
|
104
|
+
darwin: pipx install yt-dlp==2026.7.4
|
|
105
|
+
linux: pipx install yt-dlp==2026.7.4
|
|
106
|
+
win32: py -m pipx install yt-dlp==2026.7.4
|
|
107
|
+
default: pipx install yt-dlp==2026.7.4
|
|
108
|
+
|
|
109
|
+
# Feed retrieval. Two independent candidates: fetch the feed with curl, or
|
|
110
|
+
# fetch-and-parse it in a Node one-liner. Either satisfies the channel.
|
|
111
|
+
- id: rss
|
|
112
|
+
description: Atom and RSS feed retrieval for a known feed URL.
|
|
113
|
+
tier: zero-config
|
|
114
|
+
lifecycle: stable
|
|
115
|
+
override_key: reach.channels.rss.backend
|
|
116
|
+
last_verified: "2026-07-24"
|
|
117
|
+
backends:
|
|
118
|
+
- id: curl
|
|
119
|
+
probe_cmd: curl
|
|
120
|
+
probe_args: ["--version"]
|
|
121
|
+
install:
|
|
122
|
+
darwin: "os-baseline: macOS ships curl (8.7.1 observed 2026-07-24) at /usr/bin/curl — no package install prescribed"
|
|
123
|
+
linux: "os-baseline: distro-provided curl package (apt / dnf / apk) — version tracks the distro, no pin meaningful"
|
|
124
|
+
win32: "os-baseline: Windows 10+ ships curl.exe in System32 — no package install prescribed"
|
|
125
|
+
default: "os-baseline: a system curl is assumed present; if absent, install it from the platform package manager — never a piped remote installer"
|
|
126
|
+
- id: node
|
|
127
|
+
probe_cmd: node
|
|
128
|
+
probe_args: ["--version"]
|
|
129
|
+
install:
|
|
130
|
+
darwin: brew install node@22
|
|
131
|
+
linux: "os-baseline: distro or NodeSource nodejs package — version tracks the chosen channel, no pin meaningful here"
|
|
132
|
+
win32: "os-baseline: winget package OpenJS.NodeJS.LTS — version tracks the LTS line, no pin meaningful here"
|
|
133
|
+
default: "os-baseline: any Node runtime at or above this package's engines floor (>=20.11.0) already on PATH"
|
|
134
|
+
|
|
135
|
+
# Single-page read. Same two candidates as `rss`: curl fetches the bytes;
|
|
136
|
+
# Node covers the case where the extraction step runs in-process.
|
|
137
|
+
- id: web-read
|
|
138
|
+
description: Single public web page fetch for a URL the operator already has.
|
|
139
|
+
tier: zero-config
|
|
140
|
+
lifecycle: stable
|
|
141
|
+
override_key: reach.channels.web-read.backend
|
|
142
|
+
last_verified: "2026-07-24"
|
|
143
|
+
backends:
|
|
144
|
+
- id: curl
|
|
145
|
+
probe_cmd: curl
|
|
146
|
+
probe_args: ["--version"]
|
|
147
|
+
install:
|
|
148
|
+
darwin: "os-baseline: macOS ships curl (8.7.1 observed 2026-07-24) at /usr/bin/curl — no package install prescribed"
|
|
149
|
+
linux: "os-baseline: distro-provided curl package (apt / dnf / apk) — version tracks the distro, no pin meaningful"
|
|
150
|
+
win32: "os-baseline: Windows 10+ ships curl.exe in System32 — no package install prescribed"
|
|
151
|
+
default: "os-baseline: a system curl is assumed present; if absent, install it from the platform package manager — never a piped remote installer"
|
|
152
|
+
- id: node
|
|
153
|
+
probe_cmd: node
|
|
154
|
+
probe_args: ["--version"]
|
|
155
|
+
install:
|
|
156
|
+
darwin: brew install node@22
|
|
157
|
+
linux: "os-baseline: distro or NodeSource nodejs package — version tracks the chosen channel, no pin meaningful here"
|
|
158
|
+
win32: "os-baseline: winget package OpenJS.NodeJS.LTS — version tracks the LTS line, no pin meaningful here"
|
|
159
|
+
default: "os-baseline: any Node runtime at or above this package's engines floor (>=20.11.0) already on PATH"
|
|
160
|
+
|
|
161
|
+
# Discussion search over the public Hacker News search API. Keyless, and
|
|
162
|
+
# the endpoint returns JSON directly — one candidate is enough.
|
|
163
|
+
- id: hackernews
|
|
164
|
+
description: Discussion and comment search over the public Hacker News search API.
|
|
165
|
+
tier: zero-config
|
|
166
|
+
lifecycle: stable
|
|
167
|
+
override_key: reach.channels.hackernews.backend
|
|
168
|
+
last_verified: "2026-07-24"
|
|
169
|
+
backends:
|
|
170
|
+
- id: curl
|
|
171
|
+
probe_cmd: curl
|
|
172
|
+
probe_args: ["--version"]
|
|
173
|
+
install:
|
|
174
|
+
darwin: "os-baseline: macOS ships curl (8.7.1 observed 2026-07-24) at /usr/bin/curl — no package install prescribed"
|
|
175
|
+
linux: "os-baseline: distro-provided curl package (apt / dnf / apk) — version tracks the distro, no pin meaningful"
|
|
176
|
+
win32: "os-baseline: Windows 10+ ships curl.exe in System32 — no package install prescribed"
|
|
177
|
+
default: "os-baseline: a system curl is assumed present; if absent, install it from the platform package manager — never a piped remote installer"
|
|
178
|
+
|
|
179
|
+
- id: reddit
|
|
180
|
+
description: Reddit discussion reading in two tiers — durable Atom text, and time-bounded ranked HTML.
|
|
181
|
+
tier: zero-config
|
|
182
|
+
lifecycle: experimental
|
|
183
|
+
override_key: reach.channels.reddit.backend
|
|
184
|
+
last_verified: "2026-07-25"
|
|
185
|
+
backends:
|
|
186
|
+
- id: curl
|
|
187
|
+
probe_cmd: curl
|
|
188
|
+
probe_args: ["--version"]
|
|
189
|
+
install:
|
|
190
|
+
darwin: "os-baseline: macOS ships curl (8.7.1 observed 2026-07-25) at /usr/bin/curl — no package install prescribed"
|
|
191
|
+
linux: "os-baseline: distro-provided curl package (apt / dnf / apk) — version tracks the distro, no pin meaningful"
|
|
192
|
+
win32: "os-baseline: Windows 10+ ships curl.exe in System32 — no package install prescribed"
|
|
193
|
+
default: "os-baseline: a system curl is assumed present; if absent, install it from the platform package manager — never a piped remote installer"
|
|
194
|
+
- id: node
|
|
195
|
+
probe_cmd: node
|
|
196
|
+
probe_args: ["--version"]
|
|
197
|
+
install:
|
|
198
|
+
darwin: brew install node@22
|
|
199
|
+
linux: "os-baseline: distro or NodeSource nodejs package — version tracks the chosen channel, no pin meaningful here"
|
|
200
|
+
win32: "os-baseline: winget package OpenJS.NodeJS.LTS — version tracks the LTS line, no pin meaningful here"
|
|
201
|
+
default: "os-baseline: any Node runtime at or above this package's engines floor (>=20.11.0) already on PATH"
|
|
202
|
+
|
|
203
|
+
- id: twitter-oembed
|
|
204
|
+
description: Single public tweet read through the platform's own oEmbed endpoint, credential-free.
|
|
205
|
+
tier: zero-config
|
|
206
|
+
lifecycle: experimental
|
|
207
|
+
override_key: reach.channels.twitter-oembed.backend
|
|
208
|
+
last_verified: "2026-07-25"
|
|
209
|
+
backends:
|
|
210
|
+
- id: curl
|
|
211
|
+
probe_cmd: curl
|
|
212
|
+
probe_args: ["--version"]
|
|
213
|
+
install:
|
|
214
|
+
darwin: "os-baseline: macOS ships curl (8.7.1 observed 2026-07-25) at /usr/bin/curl — no package install prescribed"
|
|
215
|
+
linux: "os-baseline: distro-provided curl package (apt / dnf / apk) — version tracks the distro, no pin meaningful"
|
|
216
|
+
win32: "os-baseline: Windows 10+ ships curl.exe in System32 — no package install prescribed"
|
|
217
|
+
default: "os-baseline: a system curl is assumed present; if absent, install it from the platform package manager — never a piped remote installer"
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# Reach prescription intake record — committed supply-chain evidence
|
|
2
|
+
# (road-to-internet-reach Phase 3, Step 2).
|
|
3
|
+
#
|
|
4
|
+
# WHAT THIS FILE IS. The offline substitute for a network lookup at lint time.
|
|
5
|
+
# `src/scripts/validate_reach_prescriptions.ts` (gate:
|
|
6
|
+
# `task check-reach-prescriptions`) reads THIS file to answer "does the package
|
|
7
|
+
# this prescription names exist, is its pin the one we checked, and was it
|
|
8
|
+
# CVE-reviewed" — it never fetches a registry. That is a hard architectural
|
|
9
|
+
# constraint, not a convenience: the Class A boundary
|
|
10
|
+
# (docs/contracts/no-runtime-boundary.md, ADR-124) forbids network access in the
|
|
11
|
+
# build path, and a lint that phones a third party is a flaky lint.
|
|
12
|
+
#
|
|
13
|
+
# CONSEQUENCE. Every claim below is a HUMAN-RUN check frozen at `checked_on`.
|
|
14
|
+
# Freshness is a maintenance duty, not a guarantee this file can make about
|
|
15
|
+
# itself: re-run the recorded commands, update `pinned_version` +
|
|
16
|
+
# `verified_on`, and change the registry pin in the same commit.
|
|
17
|
+
#
|
|
18
|
+
# WHAT AN ENTRY IS FOR. `tools:` carries exactly one entry per EXTERNALLY
|
|
19
|
+
# INSTALLED third-party tool named by an install prescription in
|
|
20
|
+
# src/config/reach-channels.yml. A prescription whose backend has no entry
|
|
21
|
+
# here cannot ship — the validator fails closed on it.
|
|
22
|
+
#
|
|
23
|
+
# WHY `os_baseline:` IS A SEPARATE CLASS, NOT A THIN `tools:` ENTRY. `curl`,
|
|
24
|
+
# `node` and `jq` are not package installs this project prescribes: they ship
|
|
25
|
+
# with the OS or the developer's base image. Writing a fake intake entry for
|
|
26
|
+
# them — "existence verified: it is curl" — would launder an assumption into
|
|
27
|
+
# evidence and put a registry/CVE claim on this project's ledger that nobody
|
|
28
|
+
# actually checked per platform. They are declared as baselines instead, with
|
|
29
|
+
# the reason, and the validator exempts them from the `tools:` requirement
|
|
30
|
+
# while still enforcing the pinning rules on any string they do carry.
|
|
31
|
+
#
|
|
32
|
+
# EXECUTION HONESTY. `asdf` and `pipx` are ABSENT on the authoring machine
|
|
33
|
+
# (`which asdf` / `which pipx` → not found), so no install command below was
|
|
34
|
+
# ever executed here. That is the design: prescription-first, human-performed,
|
|
35
|
+
# no auto-install (roadmap `## Non-goals`). Existence was verified against the
|
|
36
|
+
# registries' own metadata APIs, which is what the pin depends on.
|
|
37
|
+
#
|
|
38
|
+
# ISO DATES MUST STAY QUOTED — unquoted, YAML parses them as timestamps and
|
|
39
|
+
# the validator's string check fails loudly.
|
|
40
|
+
schema_version: reach-prescriptions-intake-v1
|
|
41
|
+
|
|
42
|
+
# The date every `verification.command` below was last executed by a human.
|
|
43
|
+
checked_on: "2026-07-24"
|
|
44
|
+
|
|
45
|
+
tools:
|
|
46
|
+
# ── gh ────────────────────────────────────────────────────────────────────
|
|
47
|
+
# Backend of the `github` channel. Two package identities because no
|
|
48
|
+
# single registry offers an exactly-pinnable `gh` on every platform:
|
|
49
|
+
# Homebrew ships only an unversioned `gh` formula (a pin there would be a
|
|
50
|
+
# lie), so macOS/Linux go through asdf, and Windows through winget.
|
|
51
|
+
- backend: gh
|
|
52
|
+
tool: gh
|
|
53
|
+
pinned_version: "2.96.0"
|
|
54
|
+
packages:
|
|
55
|
+
- registry: asdf
|
|
56
|
+
package: github-cli
|
|
57
|
+
- registry: winget
|
|
58
|
+
package: GitHub.cli
|
|
59
|
+
intake:
|
|
60
|
+
existence_verified: >-
|
|
61
|
+
Three independent confirmations at the pin. (1) The binary itself
|
|
62
|
+
reports 2.96.0 on the authoring machine. (2) The asdf plugin index
|
|
63
|
+
contains plugins/github-cli (blob sha
|
|
64
|
+
b8ab100243bc01e361a61c50d11d4ab66b790c92). (3) The winget-pkgs manifest
|
|
65
|
+
tree lists exactly 2.96.0 under manifests/g/GitHub/cli. Not a
|
|
66
|
+
model-produced name: every identifier came out of a registry response.
|
|
67
|
+
pinned: >-
|
|
68
|
+
Exact, both platforms — `asdf install github-cli 2.96.0` and
|
|
69
|
+
`winget install --id GitHub.cli --version 2.96.0`. No range, no
|
|
70
|
+
`latest`, no branch, no archive URL. Homebrew was rejected as the
|
|
71
|
+
macOS/Linux path precisely because its unversioned `gh` formula admits
|
|
72
|
+
no exact pin at all — a pinned-looking Homebrew line would be fiction.
|
|
73
|
+
lockfile_note: >-
|
|
74
|
+
No project lockfile applies — gh is an external CLI a human installs,
|
|
75
|
+
never a dependency of this package (absent from package.json, and this
|
|
76
|
+
repo ships no .tool-versions). The lock equivalent is the exact pin in
|
|
77
|
+
this record plus asdf's own .tool-versions in the operator's
|
|
78
|
+
environment, if they use one. Nothing in this repo can pin it for them.
|
|
79
|
+
cve_note: >-
|
|
80
|
+
GitHub Advisory Database, ecosystem `go`, package
|
|
81
|
+
github.com/cli/cli/v2: 6 advisories, newest first_patched_version
|
|
82
|
+
2.93.0 (GHSA-8xvp-7hj6-mcj9, TUF-mirror auth header). 2.93.0 <= 2.96.0,
|
|
83
|
+
so no listed advisory affects the pin. Reviewed by advisory listing, not
|
|
84
|
+
by a scanner — osv-scanner and pip-audit are not installed here, and
|
|
85
|
+
neither covers a system CLI install anyway.
|
|
86
|
+
verified_on: "2026-07-24"
|
|
87
|
+
verification:
|
|
88
|
+
- command: gh --version
|
|
89
|
+
source: local PATH on the authoring machine
|
|
90
|
+
observed: "gh version 2.96.0 (2026-07-02)"
|
|
91
|
+
- command: gh api repos/asdf-vm/asdf-plugins/contents/plugins/github-cli --jq '.sha + " " + .path'
|
|
92
|
+
source: https://api.github.com/repos/asdf-vm/asdf-plugins
|
|
93
|
+
observed: "b8ab100243bc01e361a61c50d11d4ab66b790c92 plugins/github-cli"
|
|
94
|
+
- command: gh api repos/microsoft/winget-pkgs/contents/manifests/g/GitHub/cli --jq '[.[].name] | map(select(startswith("2.96")))'
|
|
95
|
+
source: https://api.github.com/repos/microsoft/winget-pkgs
|
|
96
|
+
observed: '["2.96.0"]'
|
|
97
|
+
- command: gh api "/advisories?ecosystem=go&affects=github.com%2Fcli%2Fcli%2Fv2&per_page=100" --jq '[.[].vulnerabilities[] | select(.package.name=="github.com/cli/cli/v2") | .first_patched_version] | unique | sort'
|
|
98
|
+
source: https://api.github.com/advisories
|
|
99
|
+
observed: '["2.62.0","2.63.0","2.63.1","2.67.0","2.92.0","2.93.0"]'
|
|
100
|
+
|
|
101
|
+
# ── yt-dlp ────────────────────────────────────────────────────────────────
|
|
102
|
+
# Backend of the `youtube` channel, and NOT installed here — the roadmap
|
|
103
|
+
# blocker `yt-dlp-not-installed` is open by design. An intake record is
|
|
104
|
+
# about whether the prescription is safe to hand a human, which is a
|
|
105
|
+
# different question from whether the tool is present locally; the probe
|
|
106
|
+
# layer owns the second one.
|
|
107
|
+
- backend: yt-dlp
|
|
108
|
+
tool: yt-dlp
|
|
109
|
+
pinned_version: "2026.7.4"
|
|
110
|
+
packages:
|
|
111
|
+
- registry: PyPI
|
|
112
|
+
package: yt-dlp
|
|
113
|
+
intake:
|
|
114
|
+
existence_verified: >-
|
|
115
|
+
PyPI JSON API reports .info.version 2026.7.4 for the project, and the
|
|
116
|
+
per-release endpoint /pypi/yt-dlp/2026.7.4/json resolves with 2 upload
|
|
117
|
+
files — so the exact pinned release exists, not merely the project name.
|
|
118
|
+
Typo-adjacency checked deliberately: `yt-dlp` is the hyphenated form,
|
|
119
|
+
the shape most prone to hallucinated variants (`ytdlp`, `yt_dlp`,
|
|
120
|
+
`youtube-dl`); the identifier used here is the one PyPI returned.
|
|
121
|
+
pinned: >-
|
|
122
|
+
Exact PyPI equality pin — `pipx install yt-dlp==2026.7.4` (Windows:
|
|
123
|
+
`py -m pipx install yt-dlp==2026.7.4`). yt-dlp publishes date-shaped
|
|
124
|
+
versions, so a `latest`-style install would silently roll forward
|
|
125
|
+
every few days; the schema rejects that form outright.
|
|
126
|
+
lockfile_note: >-
|
|
127
|
+
No project lockfile applies — an isolated pipx application, not a
|
|
128
|
+
dependency of this package. pipx records the exact spec in its own
|
|
129
|
+
venv metadata; the pin above is the only lock this repo controls.
|
|
130
|
+
cve_note: >-
|
|
131
|
+
GitHub Advisory Database, ecosystem `pip`, package yt-dlp: 11
|
|
132
|
+
advisories, newest first_patched_version 2026.6.9 (GHSA-69qj-pvh9-c5wg
|
|
133
|
+
`--exec` command injection, plus three siblings patched in the same
|
|
134
|
+
release). 2026.6.9 < 2026.7.4, so no listed advisory affects the pin.
|
|
135
|
+
Worth carrying forward: the tool's own history is dominated by
|
|
136
|
+
argument-injection and filename-sanitization classes, which is one more
|
|
137
|
+
reason its output is untrusted content, never instructions
|
|
138
|
+
(src/rules/untrusted-input-defense.md).
|
|
139
|
+
verified_on: "2026-07-24"
|
|
140
|
+
verification:
|
|
141
|
+
- command: curl -fsSL https://pypi.org/pypi/yt-dlp/json | jq -r '.info.version'
|
|
142
|
+
source: https://pypi.org/pypi/yt-dlp/json
|
|
143
|
+
observed: "2026.7.4"
|
|
144
|
+
- command: curl -fsSL https://pypi.org/pypi/yt-dlp/2026.7.4/json | jq -r '.info.version + " files=" + (.urls|length|tostring)'
|
|
145
|
+
source: https://pypi.org/pypi/yt-dlp/2026.7.4/json
|
|
146
|
+
observed: "2026.7.4 files=2"
|
|
147
|
+
- command: gh api "/advisories?ecosystem=pip&affects=yt-dlp&per_page=100" --jq '[.[].vulnerabilities[] | select(.package.name=="yt-dlp") | .first_patched_version] | unique | sort'
|
|
148
|
+
source: https://api.github.com/advisories
|
|
149
|
+
observed: '["2023.09.24","2023.11.14","2023.7.06","2024.04.09","2024.07.01","2024.07.07","2026.02.21","2026.6.9"]'
|
|
150
|
+
|
|
151
|
+
# ── OS baselines — declared non-installs ──────────────────────────────────
|
|
152
|
+
# Present because the registry names them as backends, NOT because this
|
|
153
|
+
# project prescribes installing them. Each entry states why a pin is not
|
|
154
|
+
# meaningful; the validator exempts these from the `tools:` requirement and
|
|
155
|
+
# still enforces "pinned or explicit os-baseline sentinel" on every string
|
|
156
|
+
# they carry.
|
|
157
|
+
os_baseline:
|
|
158
|
+
- tool: curl
|
|
159
|
+
os_baseline: true
|
|
160
|
+
rationale: >-
|
|
161
|
+
Ships with macOS (/usr/bin/curl) and Windows 10+ (System32\curl.exe),
|
|
162
|
+
and is a distro package on Linux whose version tracks the distro. There
|
|
163
|
+
is no cross-platform version this project could pin without prescribing
|
|
164
|
+
a source it does not control — so the registry carries `os-baseline:`
|
|
165
|
+
sentinels and no version, deliberately.
|
|
166
|
+
verification:
|
|
167
|
+
- command: curl --version | head -1
|
|
168
|
+
source: local PATH on the authoring machine
|
|
169
|
+
observed: "curl 8.7.1 (x86_64-apple-darwin24.0) libcurl/8.7.1"
|
|
170
|
+
|
|
171
|
+
- tool: node
|
|
172
|
+
os_baseline: true
|
|
173
|
+
rationale: >-
|
|
174
|
+
A Node runtime is this package's own execution baseline
|
|
175
|
+
(package.json engines >=20.11.0), so any environment that can run the
|
|
176
|
+
validator already has it. The one platform where a pin IS meaningful —
|
|
177
|
+
Homebrew's versioned major-line formula — carries a real pin
|
|
178
|
+
(`brew install node@22`), verified below; the remaining platforms track
|
|
179
|
+
their own LTS channel and stay unpinned behind an explicit sentinel.
|
|
180
|
+
verification:
|
|
181
|
+
- command: curl -fsSL https://formulae.brew.sh/api/formula/node@22.json | jq -r '.versions.stable'
|
|
182
|
+
source: https://formulae.brew.sh/api/formula/node@22.json
|
|
183
|
+
observed: "22.23.1 (versioned formula node@22 exists)"
|
|
184
|
+
- command: node --version
|
|
185
|
+
source: local PATH on the authoring machine
|
|
186
|
+
observed: "v25.9.0"
|
|
187
|
+
|
|
188
|
+
- tool: jq
|
|
189
|
+
os_baseline: true
|
|
190
|
+
rationale: >-
|
|
191
|
+
Named nowhere in the registry as a backend on purpose — JSON shaping
|
|
192
|
+
happens inside the operator's own recipe, downstream of retrieval, so jq
|
|
193
|
+
never satisfies a channel. Recorded here so its absence from `tools:` is
|
|
194
|
+
a documented decision rather than an omission: if jq ever becomes a
|
|
195
|
+
backend it inherits curl's `os-baseline:` treatment, not a fabricated
|
|
196
|
+
pin.
|
|
197
|
+
verification:
|
|
198
|
+
- command: jq --version
|
|
199
|
+
source: local PATH on the authoring machine
|
|
200
|
+
observed: "jq-1.7.1-apple"
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agent-switch detection — passive wizard recommendation (S0.1 honest-null
|
|
3
|
+
* council verdict, 2026-07-28: PASSIVE ROW ONLY, never a proactive card).
|
|
4
|
+
*
|
|
5
|
+
* agent-switch (https://github.com/event4u-app/agent-switch,
|
|
6
|
+
* `@event4u/agent-switch` on npm) isolates multiple agent accounts into
|
|
7
|
+
* per-account profiles (`CLAUDE_CONFIG_DIR`) so switching accounts never
|
|
8
|
+
* requires a re-login. Unlike rtk, the install command is npm-global and
|
|
9
|
+
* identical on every OS — no per-OS command map, no name collision to
|
|
10
|
+
* disambiguate.
|
|
11
|
+
*
|
|
12
|
+
* Two independent installed-signals, either is sufficient:
|
|
13
|
+
* - the `agent-switch` binary is resolvable on PATH (the documented
|
|
14
|
+
* npm-global install), OR
|
|
15
|
+
* - `~/.agent-switch/` exists — a user who installed it another way must
|
|
16
|
+
* never be told to install it again.
|
|
17
|
+
*
|
|
18
|
+
* Version is only probed when the binary is on PATH (the directory-only
|
|
19
|
+
* signal carries no version information — reported as `null`). There is
|
|
20
|
+
* deliberately NO version-currency check and NO network call here — the
|
|
21
|
+
* wizard only ever answers "installed or not", never "up to date" (roadmap
|
|
22
|
+
* acceptance criterion: this module does not report on agent-switch's
|
|
23
|
+
* version currency).
|
|
24
|
+
*/
|
|
25
|
+
import { spawnSync } from 'node:child_process';
|
|
26
|
+
import { existsSync } from 'node:fs';
|
|
27
|
+
import { homedir } from 'node:os';
|
|
28
|
+
import { join } from 'node:path';
|
|
29
|
+
import { resolveBinaryOnPath } from './rtkDetection.js';
|
|
30
|
+
|
|
31
|
+
export const AGENT_SWITCH_REPO = 'event4u-app/agent-switch';
|
|
32
|
+
export const AGENT_SWITCH_NPM = '@event4u/agent-switch';
|
|
33
|
+
export const AGENT_SWITCH_INSTALL_COMMAND = 'npm install -g @event4u/agent-switch';
|
|
34
|
+
|
|
35
|
+
export interface AgentSwitchDetection {
|
|
36
|
+
installed: boolean;
|
|
37
|
+
version: string | null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export interface DetectAgentSwitchOptions {
|
|
41
|
+
/** Override the home directory (tests). */
|
|
42
|
+
home?: string;
|
|
43
|
+
/** Override PATH (tests). */
|
|
44
|
+
pathEnv?: string;
|
|
45
|
+
/** Override the version probe (tests). Receives the resolved binary path. */
|
|
46
|
+
probeVersion?: (bin: string) => string | null;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const PROBE_TIMEOUT_MS = 2000;
|
|
50
|
+
|
|
51
|
+
/** First dotted-number token in `output`, or `null` when none is present. */
|
|
52
|
+
export function parseVersionOutput(output: string): string | null {
|
|
53
|
+
const m = /(\d+\.\d+(?:\.\d+)?)/.exec(output);
|
|
54
|
+
return m?.[1] ?? null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function defaultProbeVersion(bin: string): string | null {
|
|
58
|
+
try {
|
|
59
|
+
const res = spawnSync(bin, ['--version'], {
|
|
60
|
+
timeout: PROBE_TIMEOUT_MS,
|
|
61
|
+
encoding: 'utf-8',
|
|
62
|
+
windowsHide: true,
|
|
63
|
+
});
|
|
64
|
+
if (res.error !== undefined || res.signal !== null) return null;
|
|
65
|
+
return parseVersionOutput(`${res.stdout ?? ''}\n${res.stderr ?? ''}`);
|
|
66
|
+
} catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Detect agent-switch installation. Never throws — every failure mode
|
|
73
|
+
* (spawn error, timeout, unparsable output) collapses to `version: null`.
|
|
74
|
+
*/
|
|
75
|
+
export function detectAgentSwitch(options: DetectAgentSwitchOptions = {}): AgentSwitchDetection {
|
|
76
|
+
const binPath = resolveBinaryOnPath('agent-switch', options.pathEnv);
|
|
77
|
+
if (binPath !== null) {
|
|
78
|
+
const probe = options.probeVersion ?? defaultProbeVersion;
|
|
79
|
+
let version: string | null;
|
|
80
|
+
try {
|
|
81
|
+
version = probe(binPath);
|
|
82
|
+
} catch {
|
|
83
|
+
version = null;
|
|
84
|
+
}
|
|
85
|
+
return { installed: true, version };
|
|
86
|
+
}
|
|
87
|
+
const home = options.home ?? homedir();
|
|
88
|
+
const dirInstalled = existsSync(join(home, '.agent-switch'));
|
|
89
|
+
return { installed: dirInstalled, version: null };
|
|
90
|
+
}
|