@event4u/agent-config 9.8.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 +278 -298
- package/CONTRIBUTING.md +23 -7
- package/MIGRATION.md +20 -0
- package/README.md +55 -9
- 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/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/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/rules/code-provenance.md +112 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +4 -4
- package/dist/agent-src/rules/history-discipline.md +80 -0
- package/dist/agent-src/rules/no-roadmap-references.md +1 -1
- package/dist/agent-src/rules/php-coding.md +1 -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 +7 -0
- package/dist/agent-src/rules/scale-discipline.md +92 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +10 -0
- package/dist/agent-src/rules/session-canary.md +77 -0
- package/dist/agent-src/rules/token-optimizer-maintenance.md +1 -1
- package/dist/agent-src/rules/tool-safety.md +3 -1
- package/dist/agent-src/rules/untrusted-input-defense.md +10 -0
- package/dist/agent-src/skills/agent-security-review/SKILL.md +1 -1
- package/dist/agent-src/skills/code-intelligence/SKILL.md +17 -14
- 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/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-editing/SKILL.md +1 -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/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/secrets-management/SKILL.md +3 -4
- 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/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 +1 -1
- 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/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/firstRunNotice.js +70 -0
- package/dist/cli/firstRunNotice.js.map +1 -0
- package/dist/cli/main.js +35 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/registry.js +7 -1
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +362 -78
- 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 +90 -8
- package/dist/discovery/trust-report.md +11 -11
- package/dist/discovery/workspaces.json +31 -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 +775 -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 +4 -2
- 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 +14 -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 +4 -2
- package/dist/server/schemas/settings.js.map +1 -1
- 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 +2 -2
- package/docs/MIGRATION.md +16 -0
- package/docs/guidelines/component-oriented-and-oop-development.md +4 -2
- package/package.json +21 -11
- 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 +52 -14
- 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/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 +81 -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/fixtures/secret-detector/negatives.txt +5 -0
- package/src/scripts/_lib/fixtures/secret-detector/positives.txt +4 -0
- package/src/scripts/_lib/install_drift.ts +194 -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/rtk_allowlist.ts +44 -0
- package/src/scripts/_lib/secret_detector.test.ts +5 -0
- package/src/scripts/_lib/secret_detector.ts +9 -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/worker_budget.ts +107 -0
- 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_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 +45 -0
- package/src/scripts/chat_history.ts +8 -5
- package/src/scripts/check_backstop_debt.ts +23 -13
- package/src/scripts/check_bundle_path_leakage.ts +343 -0
- package/src/scripts/check_evaluator_budgets.ts +99 -0
- package/src/scripts/check_knowledge_sharing.ts +12 -1
- package/src/scripts/check_no_external_sources.ts +2 -2
- 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 +181 -9
- package/src/scripts/code_graph/detect.ts +52 -0
- package/src/scripts/code_graph/intent.ts +45 -0
- package/src/scripts/code_graph/query.ts +143 -29
- package/src/scripts/code_graph/sqlite_store.ts +174 -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 +5 -3
- package/src/scripts/first_run_gate_hook.ts +9 -5
- package/src/scripts/hermetic-install.sh +3 -3
- package/src/scripts/hook_manifest.yaml +55 -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 +11 -4
- 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/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 +74 -26
- 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/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/report_install_drift.ts +109 -0
- package/src/scripts/roadmap_progress_hook.ts +8 -5
- package/src/scripts/schemas/license-policy.schema.json +89 -0
- package/src/scripts/schemas/provenance-borrow.schema.json +46 -0
- package/src/scripts/schemas/rule.schema.json +10 -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/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/verify_before_complete_hook.ts +8 -5
- package/src/scripts/wrapper_freshness_hook.ts +8 -7
- package/src/server/schemas/settings.ts +8 -2
- package/dist/ui/assets/index-BPFMZWUs.css +0 -1
- package/dist/ui/assets/index-CrmZ34Rg.js +0 -40
- package/dist/ui/assets/index-CrmZ34Rg.js.map +0 -1
- package/docs/CLAIMS.md +0 -286
- 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 -785
- 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 -726
- package/docs/command-flows.md +0 -272
- package/docs/command-naming-audit.md +0 -60
- package/docs/comparison.yaml +0 -87
- 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/local-server-ports.md +0 -53
- 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 -74
- 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 -696
- 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 -191
- 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 -248
- package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +0 -112
- 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 -209
- 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-124-embedded-engine-doctrine.md +0 -255
- package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +0 -131
- package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +0 -254
- package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +0 -150
- package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +0 -201
- 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 -157
- package/docs/decisions/engine-reclassification-2026-07.md +0 -104
- 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 -126
- 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 -51
- 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/gated-platform-reads.md +0 -221
- 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 -252
- 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 -30
- 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
- package/src/scripts/postinstall_gui.ts +0 -129
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// MIGRATE: precompiled-hook-layer — carry this hook when road-to-credible-install
|
|
3
|
+
// Phase 1 precompiles the hook path (touch-once preserved at migration).
|
|
4
|
+
/**
|
|
5
|
+
* PreToolUse guard: block Write/Edit/NotebookEdit (and cross-platform
|
|
6
|
+
* equivalents) targeting a kernel rule file — Layer 1 of kernel immutability
|
|
7
|
+
* (road-to-ai-employee-borrowings Phase 1, council-confirmed 2026-07-27).
|
|
8
|
+
*
|
|
9
|
+
* The nine kernel rules (docs/contracts/kernel-membership.md § 4) are the
|
|
10
|
+
* Iron-Law floor: `agent-authority`, `ask-when-uncertain`, `commit-policy`,
|
|
11
|
+
* `direct-answers`, `language-and-tone`, `no-cheap-questions`,
|
|
12
|
+
* `non-destructive-by-default`, `scope-control`, `verify-before-complete`.
|
|
13
|
+
* A model that can edit its own kernel rules can quietly loosen the floor it
|
|
14
|
+
* is supposed to be bound by — this hook makes that a tool-call-time deny,
|
|
15
|
+
* not just a documented convention.
|
|
16
|
+
*
|
|
17
|
+
* Deny reach: the SOURCE tree (`src/rules/<kernel>.md`) AND every projection
|
|
18
|
+
* (`dist/agent-src/rules/`, `.claude/**/rules/`, `.augment/rules/`, etc.) —
|
|
19
|
+
* any path whose basename is a kernel rule filename under a `rules/` path
|
|
20
|
+
* segment. A kernel-named file living OUTSIDE a `rules/` directory (e.g. a
|
|
21
|
+
* doc, a fixture) is not a rule file and is allowed through.
|
|
22
|
+
*
|
|
23
|
+
* Mirrors `block_no_verify.ts`'s PreToolUse contract exactly: reads the
|
|
24
|
+
* dispatcher's stdin envelope (`--command`-less here — there is no CLI
|
|
25
|
+
* shortcut, the payload always carries the tool call), decides purely from
|
|
26
|
+
* exported pure functions, and reports via the same stderr-block-message +
|
|
27
|
+
* exit-code shape (0 allow · 1 block). `fail_closed: true` in the manifest —
|
|
28
|
+
* ADR-127 permits more than one blocking hook; this is the second (after
|
|
29
|
+
* block-no-verify). No agent-accessible override: the sole legitimate bypass
|
|
30
|
+
* is the human-owned exception registry the deny message points to.
|
|
31
|
+
*
|
|
32
|
+
* Exit codes (docs/contracts/hook-architecture-v1.md):
|
|
33
|
+
* 0 — allow
|
|
34
|
+
* 1 — block
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
import * as fs from 'node:fs';
|
|
38
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
39
|
+
import * as path from 'node:path';
|
|
40
|
+
|
|
41
|
+
import { is_kernel_rule } from '../_lib/kernel_rules.js';
|
|
42
|
+
import { EDIT_TOOLS } from '../minimal_safe_diff_hook.js';
|
|
43
|
+
import { readHookStdin } from './hook_stdin.js';
|
|
44
|
+
|
|
45
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
46
|
+
|
|
47
|
+
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
48
|
+
type JsonObject = { [k: string]: JsonValue };
|
|
49
|
+
|
|
50
|
+
function _isObject(v: JsonValue | undefined): v is JsonObject {
|
|
51
|
+
return v !== null && v !== undefined && typeof v === 'object' && !Array.isArray(v);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Keys across platforms that carry the tool's target file path (Write /
|
|
55
|
+
// Edit / MultiEdit / NotebookEdit / str-replace-editor / save-file / …).
|
|
56
|
+
const _PATH_KEYS: readonly string[] = [
|
|
57
|
+
'file_path',
|
|
58
|
+
'path',
|
|
59
|
+
'target_file',
|
|
60
|
+
'filename',
|
|
61
|
+
'filePath',
|
|
62
|
+
'notebook_path',
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
/** Best-effort (toolName, candidate target paths) read off a PreToolUse envelope. */
|
|
66
|
+
function _extract(envelope: JsonObject): { tool: string; paths: string[] } {
|
|
67
|
+
const payload = _isObject(envelope['payload']) ? envelope['payload'] : envelope;
|
|
68
|
+
const nameVal =
|
|
69
|
+
payload['tool_name'] ??
|
|
70
|
+
payload['toolName'] ??
|
|
71
|
+
payload['tool'] ??
|
|
72
|
+
envelope['tool_name'] ??
|
|
73
|
+
envelope['tool'];
|
|
74
|
+
const tool = typeof nameVal === 'string' ? nameVal : '';
|
|
75
|
+
|
|
76
|
+
const ti = _isObject(payload['tool_input'])
|
|
77
|
+
? payload['tool_input']
|
|
78
|
+
: _isObject(envelope['tool_input'])
|
|
79
|
+
? envelope['tool_input']
|
|
80
|
+
: null;
|
|
81
|
+
|
|
82
|
+
const paths: string[] = [];
|
|
83
|
+
if (ti !== null) {
|
|
84
|
+
for (const key of _PATH_KEYS) {
|
|
85
|
+
const v = ti[key];
|
|
86
|
+
if (typeof v === 'string' && v) {
|
|
87
|
+
paths.push(v);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { tool, paths };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Normalize path separators; strip a leading "./" run so segment checks are robust. */
|
|
95
|
+
function _normalize(p: string): string {
|
|
96
|
+
return p.replace(/\\/g, '/').replace(/^(\.\/)+/, '');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* True when `filePath` names a kernel rule file — its basename matches a
|
|
101
|
+
* kernel rule id/filename AND the path carries a `rules` directory segment
|
|
102
|
+
* (source tree or any projection). A kernel-named file outside a `rules/`
|
|
103
|
+
* directory (e.g. `docs/notes/commit-policy.md`) is not a rule file.
|
|
104
|
+
*/
|
|
105
|
+
export function targets_kernel_rule(filePath: string): string | null {
|
|
106
|
+
if (!filePath) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
const normalized = _normalize(filePath);
|
|
110
|
+
const segments = normalized.split('/').filter((s) => s.length > 0);
|
|
111
|
+
if (segments.length === 0) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
const basename = segments[segments.length - 1] as string;
|
|
115
|
+
if (!is_kernel_rule(basename)) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const dirSegments = segments.slice(0, -1);
|
|
119
|
+
if (!dirSegments.includes('rules')) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
return basename.replace(/\.md$/, '');
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Return (blocked, reason) for one PreToolUse envelope. Pure — no I/O beyond the arg. */
|
|
126
|
+
export function check_envelope(envelope: JsonObject): [boolean, string] {
|
|
127
|
+
const { tool, paths } = _extract(envelope);
|
|
128
|
+
if (!tool || !EDIT_TOOLS.has(tool)) {
|
|
129
|
+
return [false, ''];
|
|
130
|
+
}
|
|
131
|
+
for (const p of paths) {
|
|
132
|
+
const ruleName = targets_kernel_rule(p);
|
|
133
|
+
if (ruleName !== null) {
|
|
134
|
+
return [
|
|
135
|
+
true,
|
|
136
|
+
`kernel rule ${ruleName} is immutable — tighten-only via the override ` +
|
|
137
|
+
'exception registry; see docs/contracts/kernel-membership.md',
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return [false, ''];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function _asObject(v: JsonValue | undefined): JsonObject | null {
|
|
145
|
+
return _isObject(v) ? v : null;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function _readStdin(): string {
|
|
149
|
+
return readHookStdin();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
export function main(): number {
|
|
153
|
+
const raw = _readStdin();
|
|
154
|
+
let envelope: JsonObject = {};
|
|
155
|
+
if (raw.trim()) {
|
|
156
|
+
try {
|
|
157
|
+
const obj = JSON.parse(raw) as JsonValue;
|
|
158
|
+
envelope = _asObject(obj) ?? {};
|
|
159
|
+
} catch {
|
|
160
|
+
// Malformed envelope — nothing actionable to detect; allow. (The
|
|
161
|
+
// fail-closed guarantee below applies to a DETECTED kernel-rule
|
|
162
|
+
// write, not to an unparsable envelope with no target at all.)
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
const [blocked, reason] = check_envelope(envelope);
|
|
168
|
+
if (blocked) {
|
|
169
|
+
process.stderr.write(
|
|
170
|
+
`block-kernel-rule-writes: BLOCKED — ${reason}\n` +
|
|
171
|
+
' Legitimate change requires a human action outside the agent session:\n' +
|
|
172
|
+
' edit via the override exception registry, or disable/remove the\n' +
|
|
173
|
+
" 'block-kernel-rule-writes' entry in src/scripts/hook_manifest.yaml.\n" +
|
|
174
|
+
' Contract: docs/contracts/kernel-membership.md\n',
|
|
175
|
+
);
|
|
176
|
+
return 1; // EXIT_BLOCK
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return 0; // EXIT_ALLOW
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
183
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
184
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
185
|
+
function _isCliEntry(): boolean {
|
|
186
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
if (process.argv[1] === undefined) {
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
193
|
+
if (import.meta.url === argvUrl) {
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
// A symlinked invocation (e.g. via an installed `.augment/` projection,
|
|
197
|
+
// or macOS /var → /private/var temp dirs) makes the raw URLs differ:
|
|
198
|
+
// import.meta.url is the resolved real path while argv[1] keeps the
|
|
199
|
+
// symlink path. Compare realpaths so the entry guard still fires
|
|
200
|
+
// (without this the CLI silently no-ops when run through a symlink).
|
|
201
|
+
try {
|
|
202
|
+
const here = fs.realpathSync(fileURLToPath(import.meta.url));
|
|
203
|
+
const argv = fs.realpathSync(path.resolve(process.argv[1]));
|
|
204
|
+
return here === argv;
|
|
205
|
+
} catch {
|
|
206
|
+
return false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (_isCliEntry() || (typeof __AGENT_CONFIG_BUNDLE__ === 'undefined' && process.argv[1] === _HERE)) {
|
|
211
|
+
process.exitCode = main();
|
|
212
|
+
}
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
import * as fs from 'node:fs';
|
|
26
26
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
27
27
|
import * as path from 'node:path';
|
|
28
|
+
import { readHookStdin } from './hook_stdin.js';
|
|
28
29
|
|
|
29
30
|
const _HERE = fileURLToPath(import.meta.url);
|
|
30
31
|
|
|
@@ -338,14 +339,7 @@ function _usageError(arg: string): string {
|
|
|
338
339
|
|
|
339
340
|
function _readStdin(): string {
|
|
340
341
|
// Mirror `sys.stdin.read() if not sys.stdin.isatty() else ""`.
|
|
341
|
-
|
|
342
|
-
if (process.stdin.isTTY) {
|
|
343
|
-
return '';
|
|
344
|
-
}
|
|
345
|
-
return fs.readFileSync(0, 'utf-8');
|
|
346
|
-
} catch {
|
|
347
|
-
return '';
|
|
348
|
-
}
|
|
342
|
+
return readHookStdin();
|
|
349
343
|
}
|
|
350
344
|
|
|
351
345
|
export function main(argv?: string[]): number {
|
|
@@ -390,7 +384,13 @@ export function main(argv?: string[]): number {
|
|
|
390
384
|
return 0; // EXIT_ALLOW
|
|
391
385
|
}
|
|
392
386
|
|
|
387
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
388
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
389
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
393
390
|
function _isCliEntry(): boolean {
|
|
391
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
392
|
+
return false;
|
|
393
|
+
}
|
|
394
394
|
if (process.argv[1] === undefined) {
|
|
395
395
|
return false;
|
|
396
396
|
}
|
|
@@ -412,7 +412,7 @@ function _isCliEntry(): boolean {
|
|
|
412
412
|
}
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
if (_isCliEntry() || process.argv[1] === _HERE) {
|
|
415
|
+
if (_isCliEntry() || (typeof __AGENT_CONFIG_BUNDLE__ === 'undefined' && process.argv[1] === _HERE)) {
|
|
416
416
|
process.exitCode = main();
|
|
417
417
|
}
|
|
418
418
|
|
|
@@ -23,6 +23,7 @@ import path from 'node:path';
|
|
|
23
23
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
24
24
|
|
|
25
25
|
import { detectSources, pickSource } from '../code_graph/detect.js';
|
|
26
|
+
import { readHookStdin } from './hook_stdin.js';
|
|
26
27
|
|
|
27
28
|
const SETTINGS_FILE = '.agent-settings.yml';
|
|
28
29
|
const EXIT_ALLOW = 0;
|
|
@@ -131,18 +132,18 @@ export function nudgeReason(root: string): string {
|
|
|
131
132
|
const verdicts = detectSources(root, path.join(root, NATIVE_CACHE));
|
|
132
133
|
const picked = pickSource(verdicts);
|
|
133
134
|
if (!picked) {
|
|
134
|
-
return 'No code-graph found. For "who calls / where used / impact" run `
|
|
135
|
+
return 'No code-graph found. For "who calls / where used / impact" run `agent-config code-graph refresh` once, then `agent-config code-graph query <symbol>` instead of grepping blind.';
|
|
135
136
|
}
|
|
136
137
|
if (picked.stale) {
|
|
137
|
-
return `code-graph is ${picked.commits_behind ?? 'N'} commit(s) behind — rebuild with \`
|
|
138
|
+
return `code-graph is ${picked.commits_behind ?? 'N'} commit(s) behind — rebuild with \`agent-config code-graph refresh\` before trusting relationship answers.`;
|
|
138
139
|
}
|
|
139
|
-
return 'A fresh code-graph is present — for structure questions run `
|
|
140
|
+
return 'A fresh code-graph is present — for structure questions run `agent-config code-graph query|affected <symbol>` first; grep is the fallback (say which answered).';
|
|
140
141
|
}
|
|
141
142
|
|
|
142
143
|
export function main(): number {
|
|
143
144
|
let envelope: JsonValue;
|
|
144
145
|
try {
|
|
145
|
-
const raw =
|
|
146
|
+
const raw = readHookStdin();
|
|
146
147
|
envelope = raw.trim() ? (JSON.parse(raw) as JsonValue) : {};
|
|
147
148
|
} catch {
|
|
148
149
|
return EXIT_ALLOW;
|
|
@@ -171,7 +172,13 @@ export function main(): number {
|
|
|
171
172
|
return EXIT_WARN;
|
|
172
173
|
}
|
|
173
174
|
|
|
175
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
176
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
177
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
174
178
|
function isCliEntry(): boolean {
|
|
179
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
175
182
|
if (process.argv[1] === undefined) return false;
|
|
176
183
|
const argvUrl = pathToFileURL(path.resolve(process.argv[1])).href;
|
|
177
184
|
if (import.meta.url === argvUrl) return true;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* concern_registry — in-process concern table for the single-process
|
|
3
|
+
* hook dispatcher (road-to-credible-install Phase 1).
|
|
4
|
+
*
|
|
5
|
+
* Maps every `hook_manifest.yaml` concern script path to its statically
|
|
6
|
+
* imported module so the dispatcher can run concerns IN-PROCESS instead of
|
|
7
|
+
* re-spawning tsx per concern (the verified ~1.6 s p50 hot path). Static
|
|
8
|
+
* imports are deliberate: esbuild folds the whole table into
|
|
9
|
+
* `dist/hooks/dispatch.js`, so one `node` start covers dispatcher + every
|
|
10
|
+
* concern.
|
|
11
|
+
*
|
|
12
|
+
* Parity is CI-enforced (tests/hooks/concern_registry_parity.test.ts):
|
|
13
|
+
* every concern in the manifest MUST have a registry entry — a new concern
|
|
14
|
+
* that forgets the registry line falls back to the spawn path and silently
|
|
15
|
+
* reintroduces the latency class this table removed.
|
|
16
|
+
*
|
|
17
|
+
* Invocation contract (mirrors the historical child process exactly):
|
|
18
|
+
* - stdin → hook_stdin override (concerns read via readHookStdin())
|
|
19
|
+
* - argv → process.argv swapped to [node, <script>, ...args] for the call
|
|
20
|
+
* - cwd → process.chdir(workspace) for the call, restored after
|
|
21
|
+
* - stdout/stderr → captured via write-swap, returned to the dispatcher
|
|
22
|
+
* - rc → the concern's `main()` return value (undefined → 0)
|
|
23
|
+
* - crash → caught by the dispatcher and mapped to rc 3 (fail-open /
|
|
24
|
+
* fail-closed reduction unchanged)
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { main as chatHistoryMain } from '../chat_history.js';
|
|
28
|
+
import { main as hotContextMain } from '../hot_context_hook.js';
|
|
29
|
+
import { main as roadmapProgressMain } from '../roadmap_progress_hook.js';
|
|
30
|
+
import { main as onboardingGateMain } from '../onboarding_gate_hook.js';
|
|
31
|
+
import { main as contextHygieneMain } from '../context_hygiene_hook.js';
|
|
32
|
+
import { main as verifyBeforeCompleteMain } from '../verify_before_complete_hook.js';
|
|
33
|
+
import { main as minimalSafeDiffMain } from '../minimal_safe_diff_hook.js';
|
|
34
|
+
import { main as injectionScanMain } from '../injection_scan_hook.js';
|
|
35
|
+
import { main as memoryLearnMain } from '../memory_learn_hook.js';
|
|
36
|
+
import { main as firstRunGateMain } from '../first_run_gate_hook.js';
|
|
37
|
+
import { main as profileStalenessMain } from '../profile_staleness_hook.js';
|
|
38
|
+
import { main as wrapperFreshnessMain } from '../wrapper_freshness_hook.js';
|
|
39
|
+
import { main as surfaceProbeMain } from '../surface_probe_hook.js';
|
|
40
|
+
import { main as teamReviewGateMain } from '../team_review_gate_hook.js';
|
|
41
|
+
import { main as prUrlReminderMain } from '../pr_url_reminder_hook.js';
|
|
42
|
+
import { main as sessionCanaryMain } from '../session_canary_hook.js';
|
|
43
|
+
import { main as blockNoVerifyMain } from './block_no_verify.js';
|
|
44
|
+
import { main as blockKernelRuleWritesMain } from './block_kernel_rule_writes.js';
|
|
45
|
+
import { main as rtkWrapMain } from './rtk_wrap_hook.js';
|
|
46
|
+
import { main as designSlopMain } from './design_slop_hook.js';
|
|
47
|
+
import { main as codeGraphNudgeMain } from './code_graph_nudge_hook.js';
|
|
48
|
+
|
|
49
|
+
/** A concern `main` — argv-taking or not; both shapes exist. */
|
|
50
|
+
export type ConcernMain = (argv?: string[]) => number | undefined | void;
|
|
51
|
+
|
|
52
|
+
/** Keyed by the manifest's `script:` value (repo-relative path). */
|
|
53
|
+
export const CONCERN_REGISTRY: Readonly<Record<string, ConcernMain>> = {
|
|
54
|
+
'src/scripts/chat_history.ts': chatHistoryMain as ConcernMain,
|
|
55
|
+
'src/scripts/hot_context_hook.ts': hotContextMain as ConcernMain,
|
|
56
|
+
'src/scripts/roadmap_progress_hook.ts': roadmapProgressMain as ConcernMain,
|
|
57
|
+
'src/scripts/onboarding_gate_hook.ts': onboardingGateMain as ConcernMain,
|
|
58
|
+
'src/scripts/context_hygiene_hook.ts': contextHygieneMain as ConcernMain,
|
|
59
|
+
'src/scripts/verify_before_complete_hook.ts': verifyBeforeCompleteMain as ConcernMain,
|
|
60
|
+
'src/scripts/minimal_safe_diff_hook.ts': minimalSafeDiffMain as ConcernMain,
|
|
61
|
+
'src/scripts/injection_scan_hook.ts': injectionScanMain as ConcernMain,
|
|
62
|
+
'src/scripts/memory_learn_hook.ts': memoryLearnMain as ConcernMain,
|
|
63
|
+
'src/scripts/first_run_gate_hook.ts': firstRunGateMain as ConcernMain,
|
|
64
|
+
'src/scripts/profile_staleness_hook.ts': profileStalenessMain as ConcernMain,
|
|
65
|
+
'src/scripts/wrapper_freshness_hook.ts': wrapperFreshnessMain as ConcernMain,
|
|
66
|
+
'src/scripts/surface_probe_hook.ts': surfaceProbeMain as ConcernMain,
|
|
67
|
+
'src/scripts/team_review_gate_hook.ts': teamReviewGateMain as ConcernMain,
|
|
68
|
+
'src/scripts/pr_url_reminder_hook.ts': prUrlReminderMain as ConcernMain,
|
|
69
|
+
'src/scripts/session_canary_hook.ts': sessionCanaryMain as ConcernMain,
|
|
70
|
+
'src/scripts/hooks/block_no_verify.ts': blockNoVerifyMain as ConcernMain,
|
|
71
|
+
'src/scripts/hooks/block_kernel_rule_writes.ts': blockKernelRuleWritesMain as ConcernMain,
|
|
72
|
+
'src/scripts/hooks/rtk_wrap_hook.ts': rtkWrapMain as ConcernMain,
|
|
73
|
+
'src/scripts/hooks/design_slop_hook.ts': designSlopMain as ConcernMain,
|
|
74
|
+
'src/scripts/hooks/code_graph_nudge_hook.ts': codeGraphNudgeMain as ConcernMain,
|
|
75
|
+
};
|
|
@@ -24,6 +24,7 @@ import path from "node:path";
|
|
|
24
24
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
25
25
|
import { type DesignContext } from "../design_slop_rules.js";
|
|
26
26
|
import { loadDesignContext, scanFile } from "../lint_design_slop.js";
|
|
27
|
+
import { readHookStdin } from "./hook_stdin.js";
|
|
27
28
|
|
|
28
29
|
const SETTINGS_FILE = ".agent-settings.yml";
|
|
29
30
|
const EXIT_ALLOW = 0;
|
|
@@ -109,11 +110,7 @@ function writeState(root: string, state: Record<string, number>): void {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
function readStdin(): string {
|
|
112
|
-
|
|
113
|
-
return fs.readFileSync(0, "utf-8");
|
|
114
|
-
} catch {
|
|
115
|
-
return "";
|
|
116
|
-
}
|
|
113
|
+
return readHookStdin();
|
|
117
114
|
}
|
|
118
115
|
|
|
119
116
|
export function main(): number {
|
|
@@ -175,7 +172,13 @@ export function main(): number {
|
|
|
175
172
|
return EXIT_WARN;
|
|
176
173
|
}
|
|
177
174
|
|
|
175
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
176
|
+
// every module shares the bundle's `import.meta.url` (see cmd_migrate.ts).
|
|
177
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
178
178
|
function _isCliEntry(): boolean {
|
|
179
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
179
182
|
if (process.argv[1] === undefined) {
|
|
180
183
|
return false;
|
|
181
184
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dispatch_entry — bundle entry point for the precompiled hook dispatcher.
|
|
3
|
+
*
|
|
4
|
+
* road-to-credible-install Phase 1: `npm run build:hooks` bundles this file
|
|
5
|
+
* (dispatcher + concern registry + every concern module) into
|
|
6
|
+
* `dist/hooks/dispatch.js` so a hook event costs ONE node start — no tsx,
|
|
7
|
+
* no per-concern re-spawn. Invoked either
|
|
8
|
+
* - directly: `node dist/hooks/dispatch.js --platform … --event …`, or
|
|
9
|
+
* - in-process from the CLI's native `dispatch:hook` route (dynamic
|
|
10
|
+
* import; the CLI process itself then runs the whole dispatch).
|
|
11
|
+
*/
|
|
12
|
+
import * as path from 'node:path';
|
|
13
|
+
import { fileURLToPath } from 'node:url';
|
|
14
|
+
|
|
15
|
+
import { main } from './dispatch_hook.js';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Direct-invocation detection. Under the esbuild bundle, EVERY inlined
|
|
19
|
+
* module's `import.meta.url` is the bundle file — so a plain
|
|
20
|
+
* argv[1]-vs-self comparison would make the CLI-entry guards of ALL
|
|
21
|
+
* inlined modules (lint scripts, sidecars, …) false-fire at import time
|
|
22
|
+
* and hijack the dispatch argv. The build banner therefore detects
|
|
23
|
+
* `node dist/hooks/dispatch.js` BEFORE any module code runs, sets the
|
|
24
|
+
* global marker, and rewrites argv[1] to a sentinel so no inlined guard
|
|
25
|
+
* can match. Only this entry consults the marker. The plain comparison
|
|
26
|
+
* below covers the unbundled path (`tsx src/scripts/hooks/dispatch_entry.ts`).
|
|
27
|
+
*/
|
|
28
|
+
const _selfPath = fileURLToPath(import.meta.url);
|
|
29
|
+
const _invokedDirectly =
|
|
30
|
+
(globalThis as { __AC_HOOKS_BUNDLE_DIRECT?: boolean }).__AC_HOOKS_BUNDLE_DIRECT === true ||
|
|
31
|
+
(process.argv[1] !== undefined && path.resolve(process.argv[1]) === path.resolve(_selfPath));
|
|
32
|
+
|
|
33
|
+
if (_invokedDirectly) {
|
|
34
|
+
process.exitCode = main(process.argv.slice(2));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export { main };
|
|
@@ -42,6 +42,11 @@ import {
|
|
|
42
42
|
is_replay_mode,
|
|
43
43
|
} from "./state_io.js";
|
|
44
44
|
import { log_dispatch_issue, fix_hint } from "./dispatch_issues.js";
|
|
45
|
+
import { CONCERN_REGISTRY, type ConcernMain } from "./concern_registry.js";
|
|
46
|
+
import {
|
|
47
|
+
setHookStdinOverride,
|
|
48
|
+
clearHookStdinOverride,
|
|
49
|
+
} from "./hook_stdin.js";
|
|
45
50
|
|
|
46
51
|
// Free-form JSON values flow through every helper here; a documented
|
|
47
52
|
// alias keeps the surface honest without `any` (ADR-200 § strict TS).
|
|
@@ -55,11 +60,14 @@ export type JsonValue =
|
|
|
55
60
|
export type JsonObject = { [key: string]: JsonValue };
|
|
56
61
|
|
|
57
62
|
// src/scripts/hooks/dispatch_hook.ts → parents[3] is the repo root.
|
|
63
|
+
// Bundled (dist/hooks/dispatch.js) the module sits two levels below the repo
|
|
64
|
+
// root; under tsx (src/scripts/hooks/) it sits three. The `__AGENT_CONFIG_BUNDLE__`
|
|
65
|
+
// sentinel (esbuild --define) picks the right depth (see cmd_migrate.ts).
|
|
66
|
+
declare const __AGENT_CONFIG_BUNDLE__: boolean | undefined;
|
|
67
|
+
const _IN_BUNDLE = typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__;
|
|
58
68
|
const REPO_ROOT = path.resolve(
|
|
59
69
|
path.dirname(fileURLToPath(import.meta.url)),
|
|
60
|
-
"..",
|
|
61
|
-
"..",
|
|
62
|
-
"..",
|
|
70
|
+
...(_IN_BUNDLE ? ["..", ".."] : ["..", "..", ".."]),
|
|
63
71
|
);
|
|
64
72
|
const MANIFEST_PATH = path.join(REPO_ROOT, "src", "scripts", "hook_manifest.yaml");
|
|
65
73
|
|
|
@@ -471,7 +479,115 @@ function _resolve_tsx_invocation(
|
|
|
471
479
|
* through `tsx` (resolved from the package's `node_modules/.bin`, falling
|
|
472
480
|
* back to `npx tsx`), mirroring how `run.ts` runs its `.ts` twins.
|
|
473
481
|
*/
|
|
482
|
+
/**
|
|
483
|
+
* Single-process dispatch (road-to-credible-install Phase 1): run a concern
|
|
484
|
+
* IN-PROCESS via the static registry instead of re-spawning a per-concern
|
|
485
|
+
* interpreter. Mirrors the child-process contract exactly — stdin via the
|
|
486
|
+
* hook_stdin override, argv swap, cwd = workspace, hardened env, captured
|
|
487
|
+
* stdout/stderr, crash → rc 3 (the caller applies the fail-open /
|
|
488
|
+
* fail-closed reduction unchanged).
|
|
489
|
+
*
|
|
490
|
+
* Escape hatch: AGENT_CONFIG_HOOKS_ISOLATED=1 forces the historical
|
|
491
|
+
* spawn-per-concern path (also used by the bench harness for A/B numbers).
|
|
492
|
+
*
|
|
493
|
+
* Known trade-off vs the spawn path: the 30 s kill-timeout cannot preempt
|
|
494
|
+
* in-process synchronous code. Concerns are repo-owned, budget-capped and
|
|
495
|
+
* fail-open; the latency budget gate (hook-latency-budget.json) is the
|
|
496
|
+
* standing regression net.
|
|
497
|
+
*/
|
|
498
|
+
function _run_concern_inproc(
|
|
499
|
+
main_fn: ConcernMain,
|
|
500
|
+
concern: ConcernDef,
|
|
501
|
+
envelope: JsonObject,
|
|
502
|
+
): RunResult {
|
|
503
|
+
const scriptAbs = path.join(REPO_ROOT, String(concern["script"]));
|
|
504
|
+
const argsList = Array.isArray(concern["args"])
|
|
505
|
+
? concern["args"].map((a) => String(a))
|
|
506
|
+
: [];
|
|
507
|
+
argsList.push("--platform", String(envelope["platform"] || "generic"));
|
|
508
|
+
const workspace = String(envelope["workspace_root"] || process.cwd());
|
|
509
|
+
|
|
510
|
+
let out = "";
|
|
511
|
+
let err = "";
|
|
512
|
+
type WriteFn = typeof process.stdout.write;
|
|
513
|
+
const makeCapture =
|
|
514
|
+
(sink: (s: string) => void): WriteFn =>
|
|
515
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
516
|
+
((chunk: any, enc?: any, cb?: any): boolean => {
|
|
517
|
+
sink(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf-8"));
|
|
518
|
+
const callback = typeof enc === "function" ? enc : cb;
|
|
519
|
+
if (typeof callback === "function") callback();
|
|
520
|
+
return true;
|
|
521
|
+
}) as WriteFn;
|
|
522
|
+
|
|
523
|
+
const prevStdoutWrite = process.stdout.write;
|
|
524
|
+
const prevStderrWrite = process.stderr.write;
|
|
525
|
+
const prevArgv = process.argv;
|
|
526
|
+
const prevCwd = process.cwd();
|
|
527
|
+
const prevEnv = { ...process.env };
|
|
528
|
+
|
|
529
|
+
const started = performance.now();
|
|
530
|
+
let rc = 0;
|
|
531
|
+
setHookStdinOverride(_compactJsonDumps(envelope));
|
|
532
|
+
process.stdout.write = makeCapture((s) => {
|
|
533
|
+
out += s;
|
|
534
|
+
});
|
|
535
|
+
process.stderr.write = makeCapture((s) => {
|
|
536
|
+
err += s;
|
|
537
|
+
});
|
|
538
|
+
try {
|
|
539
|
+
process.argv = [prevArgv[0] as string, scriptAbs, ...argsList];
|
|
540
|
+
// Same env-hardening the spawn path applied — concerns may spawn their
|
|
541
|
+
// own children (dashboard regen, git), which inherit process.env.
|
|
542
|
+
const hardened = hardenedSpawnEnv({ AGENT_CONFIG_PACKAGE_ROOT: REPO_ROOT });
|
|
543
|
+
for (const k of Object.keys(process.env)) {
|
|
544
|
+
if (!(k in hardened)) delete process.env[k];
|
|
545
|
+
}
|
|
546
|
+
Object.assign(process.env, hardened);
|
|
547
|
+
if (workspace !== prevCwd && _isDir(workspace)) {
|
|
548
|
+
process.chdir(workspace);
|
|
549
|
+
}
|
|
550
|
+
const result = main_fn(argsList);
|
|
551
|
+
rc = typeof result === "number" ? result : 0;
|
|
552
|
+
} catch (exc) {
|
|
553
|
+
rc = 3;
|
|
554
|
+
const msg = exc instanceof Error ? (exc.stack ?? exc.message) : String(exc);
|
|
555
|
+
err += `${String(concern["name"])}: ${msg}\n`;
|
|
556
|
+
log_dispatch_issue(
|
|
557
|
+
workspace,
|
|
558
|
+
String(concern["name"] || "unknown"),
|
|
559
|
+
"execution_failed",
|
|
560
|
+
`in-process concern crashed: ${exc instanceof Error ? exc.message : String(exc)}`,
|
|
561
|
+
fix_hint(),
|
|
562
|
+
);
|
|
563
|
+
} finally {
|
|
564
|
+
process.stdout.write = prevStdoutWrite;
|
|
565
|
+
process.stderr.write = prevStderrWrite;
|
|
566
|
+
process.argv = prevArgv;
|
|
567
|
+
for (const k of Object.keys(process.env)) {
|
|
568
|
+
if (!(k in prevEnv)) delete process.env[k];
|
|
569
|
+
}
|
|
570
|
+
Object.assign(process.env, prevEnv);
|
|
571
|
+
try {
|
|
572
|
+
if (process.cwd() !== prevCwd) process.chdir(prevCwd);
|
|
573
|
+
} catch {
|
|
574
|
+
/* original cwd vanished — keep going, fail-open */
|
|
575
|
+
}
|
|
576
|
+
clearHookStdinOverride();
|
|
577
|
+
}
|
|
578
|
+
const elapsed = Math.floor(performance.now() - started);
|
|
579
|
+
return { rc, stderr: err, stdout: out, duration_ms: elapsed };
|
|
580
|
+
}
|
|
581
|
+
|
|
474
582
|
function _run_concern(concern: ConcernDef, envelope: JsonObject): RunResult {
|
|
583
|
+
// In-process fast path — the default whenever the concern is in the
|
|
584
|
+
// static registry (all manifest concerns; parity is CI-enforced).
|
|
585
|
+
if (process.env["AGENT_CONFIG_HOOKS_ISOLATED"] !== "1") {
|
|
586
|
+
const inproc = CONCERN_REGISTRY[String(concern["script"])];
|
|
587
|
+
if (inproc !== undefined) {
|
|
588
|
+
return _run_concern_inproc(inproc, concern, envelope);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
475
591
|
const script = path.join(REPO_ROOT, String(concern["script"]));
|
|
476
592
|
const argsList = Array.isArray(concern["args"])
|
|
477
593
|
? concern["args"].map((a) => String(a))
|
|
@@ -654,6 +770,57 @@ function _write_feedback(
|
|
|
654
770
|
}
|
|
655
771
|
}
|
|
656
772
|
|
|
773
|
+
/**
|
|
774
|
+
* Checkable-rule trip counting (road-to-credible-install Phase 6, scoped P3
|
|
775
|
+
* cut): every concern that returns BLOCK (1) or WARN (2) — a violation the
|
|
776
|
+
* gate actually caught — increments a per-concern counter in
|
|
777
|
+
* `agents/runtime/state/rule-trips.json`. Extends the existing dispatcher
|
|
778
|
+
* feedback machinery only; the evaluator/umbrella surfaces read this file.
|
|
779
|
+
*
|
|
780
|
+
* PII-exclusion-by-construction: the schema carries ONLY concern ids,
|
|
781
|
+
* integer counters, and ISO dates — no field capable of holding free-form
|
|
782
|
+
* content, prompt text, or file bodies. Never widen it.
|
|
783
|
+
*
|
|
784
|
+
* Fail-open (a broken counter must never affect dispatch), skipped in
|
|
785
|
+
* replay mode like the feedback dir.
|
|
786
|
+
*/
|
|
787
|
+
function _record_rule_trips(envelope: JsonObject, entries: FeedbackEntry[]): void {
|
|
788
|
+
if (is_replay_mode()) return;
|
|
789
|
+
const tripped = entries.filter(
|
|
790
|
+
(e) => e["exit_code"] === EXIT_BLOCK || e["exit_code"] === EXIT_WARN,
|
|
791
|
+
);
|
|
792
|
+
if (tripped.length === 0) return;
|
|
793
|
+
try {
|
|
794
|
+
const workspace = String(envelope["workspace_root"] || process.cwd());
|
|
795
|
+
const state_dir = path.join(workspace, "agents", "runtime", "state");
|
|
796
|
+
const target = path.join(state_dir, "rule-trips.json");
|
|
797
|
+
fs.mkdirSync(state_dir, { recursive: true });
|
|
798
|
+
let doc: JsonObject = { schema_version: 1, concerns: {} };
|
|
799
|
+
try {
|
|
800
|
+
const parsed = JSON.parse(fs.readFileSync(target, "utf-8")) as JsonObject;
|
|
801
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) doc = parsed;
|
|
802
|
+
} catch {
|
|
803
|
+
/* absent or corrupt → fresh counter file */
|
|
804
|
+
}
|
|
805
|
+
const concerns = (doc["concerns"] ?? {}) as Record<string, JsonObject>;
|
|
806
|
+
const today = _now_iso().slice(0, 10);
|
|
807
|
+
for (const e of tripped) {
|
|
808
|
+
const name = String(e["concern"]);
|
|
809
|
+
const prev = (concerns[name] ?? { block: 0, warn: 0 }) as JsonObject;
|
|
810
|
+
concerns[name] = {
|
|
811
|
+
block: (Number(prev["block"]) || 0) + (e["exit_code"] === EXIT_BLOCK ? 1 : 0),
|
|
812
|
+
warn: (Number(prev["warn"]) || 0) + (e["exit_code"] === EXIT_WARN ? 1 : 0),
|
|
813
|
+
last_trip: today,
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
doc["schema_version"] = 1;
|
|
817
|
+
doc["concerns"] = concerns;
|
|
818
|
+
atomic_write_json(target, doc);
|
|
819
|
+
} catch {
|
|
820
|
+
/* fail-open — counters are observability, never dispatch-critical */
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
657
824
|
function _parse_args(argv: string[]): Args {
|
|
658
825
|
const args: Args = {
|
|
659
826
|
platform: "",
|
|
@@ -850,6 +1017,7 @@ export function main(argv?: string[]): number {
|
|
|
850
1017
|
}
|
|
851
1018
|
const final_rc = _reduce(rcs);
|
|
852
1019
|
_write_feedback(envelope, session_id, feedback_entries, final_rc, started_at);
|
|
1020
|
+
_record_rule_trips(envelope, feedback_entries);
|
|
853
1021
|
if (context_blocks.length > 0 && final_rc === EXIT_ALLOW) {
|
|
854
1022
|
process.stdout.write(context_blocks.join("\n\n") + "\n");
|
|
855
1023
|
}
|
|
@@ -877,7 +1045,12 @@ function _readStdin(): string {
|
|
|
877
1045
|
}
|
|
878
1046
|
}
|
|
879
1047
|
|
|
1048
|
+
// Bundle-safety: never auto-run when inlined into an esbuild bundle, where
|
|
1049
|
+
// every module shares the bundle's `import.meta.url` (declare at top of file).
|
|
880
1050
|
function _isCliEntry(): boolean {
|
|
1051
|
+
if (typeof __AGENT_CONFIG_BUNDLE__ !== 'undefined' && __AGENT_CONFIG_BUNDLE__) {
|
|
1052
|
+
return false;
|
|
1053
|
+
}
|
|
881
1054
|
if (process.argv[1] === undefined) {
|
|
882
1055
|
return false;
|
|
883
1056
|
}
|