@event4u/agent-config 16.1.0 → 16.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +98 -257
- package/README.md +14 -12
- package/dist/agent-src/commands/analyze/inbox.md +1 -1
- package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
- package/dist/agent-src/commands/bug/fix.md +17 -2
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/feature/roadmap.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +5 -5
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +361 -0
- package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
- package/dist/agent-src/commands/roadmap.md +18 -4
- package/dist/agent-src/commands/tests/create.md +17 -3
- package/dist/agent-src/commands/tests/execute.md +22 -5
- package/dist/agent-src/commands/work.md +4 -0
- package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
- package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +4 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
- package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -0
- package/dist/agent-src/rules/broken-access-control.md +1 -0
- package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
- package/dist/agent-src/rules/context-hygiene.md +1 -1
- package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
- package/dist/agent-src/rules/design-fidelity.md +13 -16
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
- package/dist/agent-src/rules/domain-safety-pii.md +1 -0
- package/dist/agent-src/rules/domain-safety-retention.md +1 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
- package/dist/agent-src/rules/evaluator-independence.md +3 -2
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
- package/dist/agent-src/rules/finance-safety-floor.md +1 -0
- package/dist/agent-src/rules/git-history-discipline.md +1 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
- package/dist/agent-src/rules/legal-safety-floor.md +3 -2
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
- package/dist/agent-src/rules/media-governance-routing.md +14 -17
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
- package/dist/agent-src/rules/question-not-instruction.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/runtime-safety.md +1 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
- package/dist/agent-src/rules/session-canary.md +8 -62
- package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
- package/dist/agent-src/rules/source-confidentiality.md +1 -0
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
- package/dist/agent-src/rules/tool-safety.md +1 -0
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/dist/agent-src/scripts/deferral_carry.ts +339 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
- package/dist/agent-src/skills/design-review/SKILL.md +30 -4
- package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +18 -3
- package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
- package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
- package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
- package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
- package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +25 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +30 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/dist/cli/python/knowledge_ingest.js +1 -1
- package/dist/cli/python/workspace_drive.js +1 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
- package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
- package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
- package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
- package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
- package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
- package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
- package/dist/cli-delegate/{chunk-UNCRJBT3.js → chunk-JQVYKIZA.js} +41 -0
- package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
- package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
- package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
- package/dist/cli-delegate/chunk-NQ7WT43P.js +2729 -0
- package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
- package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
- package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
- package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
- package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
- package/dist/cli-delegate/{chunk-HDVVGPQW.js → chunk-RQNNW7IF.js} +1405 -567
- package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-S4UMZNES.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
- package/dist/cli-delegate/{chunk-GJCBB2UG.js → chunk-TRI6DQZ6.js} +3054 -325
- package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
- package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
- package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
- package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +1862 -809
- package/dist/cli-delegate/cmd_doctor.js +13 -6
- package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
- package/dist/cli-delegate/cmd_explain.js +5 -5
- package/dist/cli-delegate/cmd_export.js +11 -8
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_handoff.js +10 -7
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +3 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +3 -3
- package/dist/cli-delegate/cmd_preflight.js +6 -6
- package/dist/cli-delegate/cmd_prune.js +11 -8
- package/dist/cli-delegate/cmd_refresh.js +2 -1
- package/dist/cli-delegate/cmd_route_audit.js +8 -6
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +4 -3
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
- package/dist/cli-delegate/cmd_settings_set.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +11 -8
- package/dist/cli-delegate/cmd_uninstall.js +11 -8
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +11 -8
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/deferral_carry.js +16 -0
- package/dist/cli-delegate/gate_execute.js +2 -2
- package/dist/cli-delegate/roadmap_gates.js +5 -5
- package/dist/cli-delegate/update_roadmap_progress.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +132 -80
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +7 -5
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +6 -4
- package/dist/hooks/dispatch.js +7972 -5186
- package/dist/hooks/dispatch.sha256 +1 -0
- package/dist/install/claudePathsPlan.js +47 -6
- package/dist/install/claudeRuleRewrite.js +7 -0
- package/dist/install/emit_host_rules_cli.js +39 -36
- package/dist/install/globalRuleScope.js +87 -0
- package/dist/install/host_rule_ownership.js +160 -0
- package/dist/install/install.mjs +2226 -1055
- package/dist/install/installThinLayer.js +261 -0
- package/dist/install/installedRuleLinks.js +176 -0
- package/dist/install/wizard-plan.js +24 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +40913 -34865
- package/dist/scripts/_lib/agent_settings.js +11 -0
- package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
- package/dist/scripts/_lib/installed_layer.js +378 -0
- package/dist/scripts/_lib/lean_projection_mode.js +218 -15
- package/dist/scripts/_lib/rule_consequence_class.js +45 -0
- package/dist/scripts/_lib/rule_injection.js +67 -10
- package/dist/scripts/_lib/rule_law_section.js +122 -0
- package/dist/scripts/_lib/thin_rules.js +458 -0
- package/dist/scripts/_lib/windsurf_render.js +60 -0
- package/dist/scripts/condense.js +14 -26
- package/dist/scripts/project_thin_rules.js +14 -294
- package/dist/server/schemas/settings.js +29 -0
- package/dist/shared/skillRanking.js +74 -13
- package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
- package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/contracts/settings-classes.md +10 -6
- package/package.json +4 -4
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/src/agent-src/scripts/deferral_carry.ts +339 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/src/config/agent-settings.template.yml +91 -22
- package/src/config/ci-local-parity.yml +18 -0
- package/src/config/continuity-surface.json +9 -2
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +327 -3
- package/src/config/gate-violation-baselines.json +21 -9
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-latency-budget.json +21 -0
- package/src/config/hook-token-budget.json +8 -3
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/metric-registry.yml +114 -0
- package/src/config/placeholder-drift-budget.json +10 -0
- package/src/config/routing-coverage-seed.json +38 -3
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-consequence-class.json +161 -0
- package/src/config/rule-law-ceilings.json +99 -0
- package/src/install/claudePathsPlan.ts +46 -4
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/emit_host_rules_cli.ts +43 -34
- package/src/install/globalRuleScope.ts +109 -0
- package/src/install/host_rule_ownership.ts +170 -0
- package/src/install/installThinLayer.ts +312 -0
- package/src/install/installedRuleLinks.ts +220 -0
- package/src/install/wizard-plan.ts +24 -0
- package/src/scripts/_cli/cmd_doctor.ts +28 -90
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
- package/src/scripts/_cli/doctor_execution.ts +100 -17
- package/src/scripts/_cli/doctor_network_posture.ts +226 -0
- package/src/scripts/_dispatch.bash +16 -2
- package/src/scripts/_lib/agent_settings.ts +11 -0
- package/src/scripts/_lib/body_portable.ts +102 -0
- package/src/scripts/_lib/cc_transcript.ts +132 -1
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- package/src/scripts/_lib/concern_sla_window.ts +200 -0
- package/src/scripts/_lib/estate_offsets.ts +241 -0
- package/src/scripts/_lib/exemption_shape.ts +143 -0
- package/src/scripts/_lib/fnv.ts +23 -0
- package/src/scripts/_lib/foreign_scan.ts +106 -0
- package/src/scripts/_lib/forge_protection.ts +114 -0
- package/src/scripts/_lib/forge_reader.ts +558 -0
- package/src/scripts/_lib/gitignore_block.ts +314 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
- package/src/scripts/_lib/graph_feeder_record.ts +214 -0
- package/src/scripts/_lib/hook_settings.ts +73 -0
- package/src/scripts/_lib/host_capability.ts +40 -19
- package/src/scripts/_lib/host_env_write.ts +111 -0
- package/src/scripts/_lib/host_hook_merge.ts +165 -0
- package/src/scripts/_lib/installed_layer.ts +538 -0
- package/src/scripts/_lib/json_merge.ts +82 -0
- package/src/scripts/_lib/json_pointers.ts +93 -11
- package/src/scripts/_lib/lean_projection_mode.ts +275 -15
- package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
- package/src/scripts/_lib/machine_wake.ts +16 -3
- package/src/scripts/_lib/neighbour_census.ts +760 -0
- package/src/scripts/_lib/neighbour_scan.ts +122 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
- package/src/scripts/_lib/obligations.ts +119 -8
- package/src/scripts/_lib/probe_inputs.ts +271 -0
- package/src/scripts/_lib/prompt_shape.ts +46 -0
- package/src/scripts/_lib/read_surface_scan.ts +322 -0
- package/src/scripts/_lib/release_highlights.ts +2 -1
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
- package/src/scripts/_lib/review_coverage.ts +134 -0
- package/src/scripts/_lib/rule_consequence_class.ts +71 -0
- package/src/scripts/_lib/rule_injection.ts +130 -10
- package/src/scripts/_lib/rule_law_section.ts +147 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
- package/src/scripts/_lib/shell_write_shapes.ts +108 -0
- package/src/scripts/_lib/skill_origin.ts +254 -0
- package/src/scripts/_lib/structural_hiding.ts +622 -0
- package/src/scripts/_lib/structured_ask.ts +64 -21
- package/src/scripts/_lib/thin_rules.ts +540 -0
- package/src/scripts/_lib/touched_file_quality.ts +434 -0
- package/src/scripts/_lib/turn_end_refusals.ts +600 -4
- package/src/scripts/_lib/turn_end_transcript.ts +216 -0
- package/src/scripts/_lib/verification_command.ts +324 -0
- package/src/scripts/_lib/verification_evidence.ts +647 -0
- package/src/scripts/_lib/verify_clause.ts +280 -0
- package/src/scripts/_lib/windsurf_render.ts +63 -0
- package/src/scripts/ai_council/cli_call_budget.ts +13 -5
- package/src/scripts/ai_council/clients.ts +26 -57
- package/src/scripts/ai_council/config.ts +1 -1
- package/src/scripts/ai_council/vendor_defaults.ts +45 -0
- package/src/scripts/ai_team/team_dispatch.ts +4 -0
- package/src/scripts/audit_skill_overlap.ts +261 -0
- package/src/scripts/before_complete_hook.ts +573 -25
- package/src/scripts/bench_hook_latency.ts +412 -5
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/cache_realization_report.ts +61 -1
- package/src/scripts/check_argument_hint.ts +287 -0
- package/src/scripts/check_claims.ts +125 -1
- package/src/scripts/check_enforcement_coverage.ts +38 -9
- package/src/scripts/check_enforcement_matrix.ts +621 -22
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_finding_dispositions.ts +138 -7
- package/src/scripts/check_generator_sync.ts +71 -0
- package/src/scripts/check_hook_bundle_composition.ts +370 -0
- package/src/scripts/check_host_docs_digest.ts +786 -0
- package/src/scripts/check_host_format_column.ts +559 -0
- package/src/scripts/check_input_references.ts +228 -0
- package/src/scripts/check_inputs_parity.ts +235 -0
- package/src/scripts/check_kernel_edit_ratified.ts +89 -9
- package/src/scripts/check_kill_switch_table.ts +294 -0
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_placeholder_drift.ts +221 -0
- package/src/scripts/check_read_surface_coverage.ts +515 -0
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_holds.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_routing_coverage.ts +378 -11
- package/src/scripts/check_standing_rule_delivery.ts +33 -13
- package/src/scripts/check_static_parity.ts +17 -0
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- package/src/scripts/ci_settle.ts +145 -19
- package/src/scripts/closure_scan.ts +115 -1
- package/src/scripts/code_graph/detect.ts +127 -7
- package/src/scripts/code_graph/foreign.ts +194 -0
- package/src/scripts/code_graph/query.ts +217 -4
- package/src/scripts/code_graph/types.ts +26 -2
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +103 -0
- package/src/scripts/compile_hook_manifest.ts +90 -14
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/external_sources_denylist.json +29 -4
- package/src/scripts/generate_host_cost_table.ts +1 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +192 -14
- package/src/scripts/hooks/block_config_weakening.ts +294 -4
- package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
- package/src/scripts/hooks/block_plumbing_writes.ts +342 -0
- package/src/scripts/hooks/bundle_integrity.ts +291 -0
- package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
- package/src/scripts/hooks/code_graph_context_hook.ts +253 -25
- package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/concern_timings.ts +94 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
- package/src/scripts/hooks/design_pass_hook.ts +100 -9
- package/src/scripts/hooks/design_slop_hook.ts +1 -2
- package/src/scripts/hooks/dispatch_hook.ts +77 -71
- package/src/scripts/hooks/edit_shape_hook.ts +1 -2
- package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
- package/src/scripts/hooks/evidence_independence.ts +1 -2
- package/src/scripts/hooks/exit_codes.ts +129 -0
- package/src/scripts/hooks/host_lowering.json +1 -0
- package/src/scripts/hooks/host_lowering.ts +146 -3
- package/src/scripts/hooks/host_lowering.yaml +262 -46
- package/src/scripts/hooks/host_semantics.ts +30 -2
- package/src/scripts/hooks/injection_budget.ts +9 -2
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
- package/src/scripts/hooks/journal_record_hook.ts +1 -2
- package/src/scripts/hooks/memory_recall_hook.ts +1 -2
- package/src/scripts/hooks/obligation_settle_hook.ts +151 -5
- package/src/scripts/hooks/one_question_per_ask_hook.ts +43 -6
- package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/permission_gate.ts +1 -2
- package/src/scripts/hooks/push_settle_hook.ts +1 -3
- package/src/scripts/hooks/replay_hook.ts +2 -1
- package/src/scripts/hooks/reread_guard_hook.ts +1 -2
- package/src/scripts/hooks/review_baseline_hook.ts +1 -2
- package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
- package/src/scripts/hooks/rule_inject_hook.ts +765 -68
- package/src/scripts/hooks/run_continuation_hook.ts +13 -15
- package/src/scripts/hooks/skill_route_hook.ts +1 -2
- package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
- package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
- package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
- package/src/scripts/hooks/table_fingerprint.ts +70 -0
- package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
- package/src/scripts/hooks/telemetry_usage_hook.ts +65 -10
- package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
- package/src/scripts/hooks/turn_end_gate_hook.ts +421 -324
- package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install.ts +75 -189
- package/src/scripts/installed_layer_report.ts +103 -0
- package/src/scripts/language_mirror_hook.ts +15 -6
- package/src/scripts/learning_sidecar.ts +119 -8
- package/src/scripts/lint_deny_text.ts +419 -0
- package/src/scripts/lint_exit_codes.ts +262 -0
- package/src/scripts/lint_hook_manifest.ts +108 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +63 -5
- package/src/scripts/lint_roadmap_blockers.ts +78 -12
- package/src/scripts/lint_rule_law_section.ts +517 -0
- package/src/scripts/lint_skill_descriptions.ts +1 -1
- package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
- package/src/scripts/lint_workflow_security.ts +161 -5
- package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
- package/src/scripts/mcp_server/graph_tools.ts +72 -3
- package/src/scripts/mcp_server/prompts.ts +142 -1
- package/src/scripts/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +515 -53
- package/src/scripts/measure_turn_end_gate.ts +193 -0
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/memory_lookup.ts +1 -1
- package/src/scripts/model_rule_injection.ts +52 -5
- package/src/scripts/prepack-check.mjs +53 -0
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/release_publication.ts +13 -1
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +157 -0
- package/src/scripts/report_invocation_surface.ts +383 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_obligation_carriers.ts +699 -0
- package/src/scripts/report_obligation_mechanism.ts +230 -0
- package/src/scripts/report_obligation_writer_split.ts +236 -0
- package/src/scripts/report_single_token_triggers.ts +277 -0
- package/src/scripts/report_skill_menu_census.ts +208 -0
- package/src/scripts/report_skill_ranker_confusion.ts +442 -0
- package/src/scripts/report_standing_payload_by_host.ts +188 -15
- package/src/scripts/report_verification_record_coverage.ts +306 -0
- package/src/scripts/roadmap_verify_share.ts +213 -0
- package/src/scripts/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/command.schema.json +44 -0
- package/src/scripts/schemas/review-findings.schema.json +7 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/schemas/skill.schema.json +44 -0
- package/src/scripts/self_review_gate.ts +421 -17
- package/src/scripts/semantic_parity_census.ts +314 -0
- package/src/scripts/session_eol_report.ts +54 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
- package/src/scripts/sweep_dead_scan_roots.ts +1 -1
- package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
- package/src/scripts/sync_gitignore.ts +29 -235
- package/src/scripts/trigger_eval_grandfather.json +0 -7
- package/src/scripts/trigger_eval_rotation.ts +122 -27
- package/src/scripts/ui_conformance_probe.ts +156 -4
- package/src/scripts/update_prices.ts +85 -3
- package/src/scripts/write_bundle_digest.mjs +74 -0
- package/src/server/schemas/settings.ts +41 -0
- package/src/shared/skillRanking.ts +117 -11
- package/src/templates/consumer-settings/ONBOARDING.md +1 -0
- package/dist/cli-delegate/chunk-FXYUYU4N.js +0 -4416
- package/dist/cli-delegate/chunk-QJWAUMJW.js +0 -1072
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
- package/dist/ui/assets/index-DH1xc62v.js +0 -29
- package/dist/ui/assets/index-jSfMW8_t.css +0 -1
|
@@ -41,13 +41,19 @@
|
|
|
41
41
|
import path from 'node:path';
|
|
42
42
|
import process from 'node:process';
|
|
43
43
|
|
|
44
|
+
import { readHookStdin } from './hook_stdin.js';
|
|
45
|
+
// The WRITER's own root resolver, imported rather than re-derived. A second
|
|
46
|
+
// spelling of "which tree is this" is how a reader comes to address a ledger
|
|
47
|
+
// the writer never wrote — which is the defect this whole file is repairing,
|
|
48
|
+
// one field over.
|
|
49
|
+
import { workspaceRoot as writerWorkspaceRoot } from './rule_inject_hook.js';
|
|
50
|
+
|
|
44
51
|
import { may_refuse_on } from '../_lib/obligation_frequency.js';
|
|
45
52
|
import { appendShadow, readDelivered, readDischarged, stamp } from '../_lib/obligations.js';
|
|
46
53
|
import { loadRouter, matchTierRules } from '../_lib/rule_injection.js';
|
|
47
54
|
import { gitNumstatRows, isDocPath, untrackedNonDocFiles } from './end_review_nudge_hook.js';
|
|
48
55
|
import { openRecordStats } from './subagent_ledger_hook.js';
|
|
49
|
-
|
|
50
|
-
const EXIT_ALLOW = 0;
|
|
56
|
+
import { EXIT_ALLOW } from './exit_codes.js';
|
|
51
57
|
|
|
52
58
|
/**
|
|
53
59
|
* Every non-doc path this turn wrote, tracked or not.
|
|
@@ -142,9 +148,144 @@ export function shouldContinue(attempt: number): boolean {
|
|
|
142
148
|
return attempt <= 1;
|
|
143
149
|
}
|
|
144
150
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
151
|
+
/**
|
|
152
|
+
* The session and root this reading is about, resolved the way the WRITER does.
|
|
153
|
+
*
|
|
154
|
+
* THE DEFECT THIS EXISTS TO CLOSE. This hook used to read
|
|
155
|
+
* `CLAUDE_CODE_SESSION_ID` out of the process environment and return allow when
|
|
156
|
+
* it was empty. The dispatcher sets no such variable — it hands each concern
|
|
157
|
+
* the envelope on stdin and `AGENT_CONFIG_PACKAGE_ROOT` in the environment,
|
|
158
|
+
* nothing else — so on every dispatched stop event the reader looked for a
|
|
159
|
+
* ledger under a key the writer never used. Measured 2026-09-29 on this
|
|
160
|
+
* machine's own ledgers: 187 delivered rows, 0 shadow rows, across 8 sessions.
|
|
161
|
+
*
|
|
162
|
+
* WHY THE ORDER IS ENVELOPE-THEN-ENVIRONMENT AND NOT THE REVERSE. The envelope
|
|
163
|
+
* id is the key `rule_inject_hook.ts` wrote the delivered rows under, so it is
|
|
164
|
+
* not merely the better source — it is the ONLY one that can find them. The
|
|
165
|
+
* environment fallback survives for a raw invocation that carries no envelope
|
|
166
|
+
* at all (a maintainer piping nothing, a host shim that skips the dispatcher),
|
|
167
|
+
* which is a case where guessing wrong costs a missing reading rather than a
|
|
168
|
+
* wrong one.
|
|
169
|
+
*
|
|
170
|
+
* THE ROOT IS PART OF THE SAME JOIN, not a second change riding along. A ledger
|
|
171
|
+
* is addressed by root AND session; reading the session from the envelope while
|
|
172
|
+
* taking the root from `process.cwd()` would leave the pair half-joined, and the
|
|
173
|
+
* two disagree exactly on the hosts whose shim does not chdir. `cwd` stays the
|
|
174
|
+
* fallback because that is what the dispatcher sets it to.
|
|
175
|
+
*
|
|
176
|
+
* Both spellings of each key are accepted because the injector accepts both.
|
|
177
|
+
*/
|
|
178
|
+
export function resolveSettleContext(
|
|
179
|
+
envelope: Record<string, unknown>,
|
|
180
|
+
payload: Record<string, unknown>,
|
|
181
|
+
env: Record<string, string | undefined>,
|
|
182
|
+
): { root: string; session: string } {
|
|
183
|
+
const str = (...values: unknown[]): string => {
|
|
184
|
+
for (const v of values) {
|
|
185
|
+
if (typeof v === 'string' && v.trim() !== '') return v.trim();
|
|
186
|
+
}
|
|
187
|
+
return '';
|
|
188
|
+
};
|
|
189
|
+
return {
|
|
190
|
+
// `workspaceRoot` is the INJECTOR's function, not a copy of it. It reads
|
|
191
|
+
// `workspace` / `cwd` / `project_dir`; this file used to read
|
|
192
|
+
// `workspace_root` / `workspace` / `cwd`, so the two key sets overlapped
|
|
193
|
+
// without matching and the pair was joined on the session only. It
|
|
194
|
+
// happened to agree on both real envelope shapes — the dispatcher sets
|
|
195
|
+
// `workspace_root` and chdirs concerns to it, a native wiring passes
|
|
196
|
+
// `cwd` — which made the asymmetry a property of today's envelopes
|
|
197
|
+
// rather than of the code. `workspace_root` is appended ahead of the
|
|
198
|
+
// shared resolver because the dispatcher is the only producer that sets
|
|
199
|
+
// it and nothing else reads it.
|
|
200
|
+
root:
|
|
201
|
+
str(envelope['workspace_root'])
|
|
202
|
+
|| writerWorkspaceRoot(envelope as Parameters<typeof writerWorkspaceRoot>[0]),
|
|
203
|
+
session: str(
|
|
204
|
+
envelope['session_id'],
|
|
205
|
+
envelope['sessionId'],
|
|
206
|
+
payload['session_id'],
|
|
207
|
+
payload['sessionId'],
|
|
208
|
+
// The one pre-existing source, kept as the last resort and NOT
|
|
209
|
+
// joined by siblings: adding a name the writer never keys on
|
|
210
|
+
// would address a ledger that cannot exist.
|
|
211
|
+
env['CLAUDE_CODE_SESSION_ID'],
|
|
212
|
+
),
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* The session id the WRITER would have used, for the ledger nobody reads.
|
|
218
|
+
*
|
|
219
|
+
* `rule_inject_hook.ts` defaults an unnamed session to the literal `unknown`
|
|
220
|
+
* and writes delivered rows there; this reader used to return `''` and allow, so
|
|
221
|
+
* that population was invisible to every reading of the bar. Reported rather
|
|
222
|
+
* than silently joined: a shared `unknown` bucket aggregates unrelated sessions,
|
|
223
|
+
* so reading it as one session's turn would be worse than not reading it. The
|
|
224
|
+
* constant is exported so a future census can count what is sitting there.
|
|
225
|
+
*/
|
|
226
|
+
export const WRITER_UNNAMED_SESSION = 'unknown';
|
|
227
|
+
|
|
228
|
+
/** The envelope on stdin, or an empty object when there is none to read. */
|
|
229
|
+
function readEnvelope(): { envelope: Record<string, unknown>; payload: Record<string, unknown> } {
|
|
230
|
+
let envelope: Record<string, unknown> = {};
|
|
231
|
+
try {
|
|
232
|
+
const raw = readHookStdin();
|
|
233
|
+
const parsed: unknown = raw.trim() === '' ? {} : JSON.parse(raw);
|
|
234
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
235
|
+
envelope = parsed as Record<string, unknown>;
|
|
236
|
+
}
|
|
237
|
+
} catch {
|
|
238
|
+
// A malformed envelope is not a reason to refuse, and this concern
|
|
239
|
+
// refuses nothing anyway. It is a reason to read nothing from it.
|
|
240
|
+
}
|
|
241
|
+
const nested = envelope['payload'];
|
|
242
|
+
const payload =
|
|
243
|
+
typeof nested === 'object' && nested !== null && !Array.isArray(nested)
|
|
244
|
+
? (nested as Record<string, unknown>)
|
|
245
|
+
: envelope;
|
|
246
|
+
return { envelope, payload };
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* The resolver as it stood BEFORE the join fix, kept reachable for one test.
|
|
251
|
+
*
|
|
252
|
+
* A reproduction that cannot run the old code is not a reproduction — it is an
|
|
253
|
+
* assertion about the new function's behavior on inputs nobody sends, and
|
|
254
|
+
* `tests/hooks/obligation_settle.test.ts` carried exactly that until an
|
|
255
|
+
* independent review named it. This function is dead on every production path
|
|
256
|
+
* (nothing but the fixture calls it) and exists so the defect stays executable:
|
|
257
|
+
* environment-only resolution, allow when empty, root from the cwd.
|
|
258
|
+
*/
|
|
259
|
+
export function resolveSettleContextPreFix(
|
|
260
|
+
_envelope: Record<string, unknown>,
|
|
261
|
+
_payload: Record<string, unknown>,
|
|
262
|
+
env: Record<string, string | undefined>,
|
|
263
|
+
): { root: string; session: string } {
|
|
264
|
+
// Same arity as the live resolver ON PURPOSE. A narrower signature would let
|
|
265
|
+
// the fixture pass the envelope in as `env`, where the lookup misses for the
|
|
266
|
+
// wrong reason and the test goes green without exercising the defect.
|
|
267
|
+
return { root: process.cwd(), session: (env['CLAUDE_CODE_SESSION_ID'] ?? '').trim() };
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Which context resolver this reading uses — the seam the pre-fix fixture needs.
|
|
272
|
+
*
|
|
273
|
+
* It is NOT a parameter of `main()`, and that is a contract rather than a
|
|
274
|
+
* preference: `concern_main_signature` requires every concern's `main()` to take
|
|
275
|
+
* argv first or nothing, because the dispatcher calls `main(argv)` — so a
|
|
276
|
+
* resolver in first position would receive an argv array at runtime and resolve
|
|
277
|
+
* a session from it. Caught by that test, which is the reason this indirection
|
|
278
|
+
* exists instead of the obvious default parameter.
|
|
279
|
+
*/
|
|
280
|
+
export type SettleResolver = (
|
|
281
|
+
envelope: Record<string, unknown>,
|
|
282
|
+
payload: Record<string, unknown>,
|
|
283
|
+
env: Record<string, string | undefined>,
|
|
284
|
+
) => { root: string; session: string };
|
|
285
|
+
|
|
286
|
+
export function runSettle(resolve: SettleResolver = resolveSettleContext): number {
|
|
287
|
+
const { envelope, payload } = readEnvelope();
|
|
288
|
+
const { root, session } = resolve(envelope, payload, process.env);
|
|
148
289
|
if (session === '') return EXIT_ALLOW;
|
|
149
290
|
|
|
150
291
|
let verdict: SettleVerdict;
|
|
@@ -176,6 +317,11 @@ export function main(): number {
|
|
|
176
317
|
return EXIT_ALLOW;
|
|
177
318
|
}
|
|
178
319
|
|
|
320
|
+
/** The dispatcher entry point. Argv-shaped, per `concern_main_signature`. */
|
|
321
|
+
export function main(_argv: readonly string[] = process.argv.slice(2)): number {
|
|
322
|
+
return runSettle();
|
|
323
|
+
}
|
|
324
|
+
|
|
179
325
|
// Bundle-safety: never auto-run when inlined into an esbuild bundle.
|
|
180
326
|
if (process.argv[1] !== undefined && path.basename(process.argv[1]).startsWith('obligation_settle')) {
|
|
181
327
|
process.exit(main());
|
|
@@ -14,12 +14,38 @@
|
|
|
14
14
|
* names the count so the caller can split the ask instead of guessing what
|
|
15
15
|
* happened.
|
|
16
16
|
*
|
|
17
|
-
* WHAT IT SEES, honestly. `_lib/structured_ask.ts` carries
|
|
18
|
-
* per-host tool
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
17
|
+
* WHAT IT SEES, honestly. `_lib/structured_ask.ts` carries ONE observed
|
|
18
|
+
* per-host tool — `claude`'s `AskUserQuestion`, 48 calls across versions
|
|
19
|
+
* 2.1.252 to 2.1.284 between 2026-09-01 and 2026-10-02.
|
|
20
|
+
*
|
|
21
|
+
* THIS GUARD DOES NOT USE THAT ROW, and the distinction matters enough to say
|
|
22
|
+
* rather than leave to a reader. `verdict()` calls `isStructuredAskTool(tool)`
|
|
23
|
+
* with no host id, so the shape branch is unreachable from here and the name
|
|
24
|
+
* SHAPE pattern decides on every host, `claude` included — filtered by the
|
|
25
|
+
* manifest's per-concern `tools:` key to the same candidate names. Threading a
|
|
26
|
+
* host id through would NARROW what this guard matches on the one host where a
|
|
27
|
+
* picker is known to exist (`ask_user_question` would stop matching), which is
|
|
28
|
+
* a behaviour change and not a header repair, so it is deliberately not made
|
|
29
|
+
* here.
|
|
30
|
+
*
|
|
31
|
+
* This header carried the opposite claim until 2026-10-05 — that no host's
|
|
32
|
+
* delivered surface had been observed carrying a picker — and it was wrong in
|
|
33
|
+
* a specific, instructive way rather than merely stale. Its measurement base
|
|
34
|
+
* was one `false` row taken from a SUBAGENT leg, whose surface carries no
|
|
35
|
+
* picker because a subagent has no user to ask. The step from "this leg has
|
|
36
|
+
* none" to "no host has been observed with one" is the substitution the
|
|
37
|
+
* observation protocol exists to refuse, and the registry comment now records
|
|
38
|
+
* which leg each reading came from for that reason. The old wording is
|
|
39
|
+
* described rather than quoted, because 1.1's drift check is a grep and a grep
|
|
40
|
+
* cannot tell a refuted quotation from a live assertion.
|
|
41
|
+
*
|
|
42
|
+
* The other eight hosts in `docs/enforcement-by-host.md` still have no row at
|
|
43
|
+
* all — never looked, not measured — so nothing here is a claim about them.
|
|
44
|
+
*
|
|
45
|
+
* WHAT THE OBSERVATION DOES NOT CHANGE: the deny threshold. One question per
|
|
46
|
+
* call is `ask-when-uncertain`'s Iron Law, not a host limit, and all 47
|
|
47
|
+
* parsed calls already carried exactly one. The guard has had nothing to deny
|
|
48
|
+
* and that is the expected reading, not evidence it is inert.
|
|
23
49
|
*
|
|
24
50
|
* ENFORCEMENT REACH, also honestly. `fail_closed: false` and the exit-1 deny
|
|
25
51
|
* are only a deny where the host both binds `pre_tool_use` AND honours the
|
|
@@ -141,6 +167,17 @@ export function selfTest(): number {
|
|
|
141
167
|
{ tool_name: 'ask_user_question', tool_input: { question: 'which one?' } },
|
|
142
168
|
false,
|
|
143
169
|
],
|
|
170
|
+
[
|
|
171
|
+
// PINS THE HEADER'S INVARIANT. `ask_user_question` is not the name
|
|
172
|
+
// claude's observed shape row carries, so this case denies only
|
|
173
|
+
// while `verdict()` passes no host id and the name-SHAPE pattern
|
|
174
|
+
// decides. Thread a host id through and the shape branch rejects
|
|
175
|
+
// the name, the call stops being an ask, and this flips to allow —
|
|
176
|
+
// which is the silent narrowing the header says is not being made.
|
|
177
|
+
'a snake_case picker with two questions is still denied — this guard is host-blind',
|
|
178
|
+
{ tool_name: 'ask_user_question', tool_input: { questions: [{}, {}] } },
|
|
179
|
+
true,
|
|
180
|
+
],
|
|
144
181
|
[
|
|
145
182
|
'an empty ask passes — malformed, but not this guard\'s failure',
|
|
146
183
|
{ tool_name: 'AskUserQuestion', tool_input: { questions: [] } },
|
|
@@ -72,8 +72,7 @@ import { buildOrchestrationLine, type RecordInput } from '../_lib/orchestration_
|
|
|
72
72
|
import { DEFAULT_DIR } from '../orchestration_record.js';
|
|
73
73
|
import { is_replay_mode } from './state_io.js';
|
|
74
74
|
import { readHookStdin } from './hook_stdin.js';
|
|
75
|
-
|
|
76
|
-
const EXIT_ALLOW = 0;
|
|
75
|
+
import { EXIT_ALLOW } from './exit_codes.js';
|
|
77
76
|
|
|
78
77
|
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
79
78
|
type JsonObject = { [k: string]: JsonValue };
|
|
@@ -108,7 +108,16 @@ export const BODY_CLASSES: readonly BodyClass[] = ["input", "result"] as const;
|
|
|
108
108
|
*/
|
|
109
109
|
export const BODY_KEYS: Readonly<Record<BodyClass, readonly string[]>> = {
|
|
110
110
|
input: ["tool_input", "toolInput"],
|
|
111
|
-
result
|
|
111
|
+
// `error` is a result body and is listed as one. On claude's
|
|
112
|
+
// `PostToolUseFailure` the failing call carries NO `tool_response` at all —
|
|
113
|
+
// the command's own stdout and stderr arrive here instead, under the first
|
|
114
|
+
// line stating the exit code. Until that event was bound this key reached no
|
|
115
|
+
// concern, so its absence from this list cost nothing; binding the event
|
|
116
|
+
// without adding it would have delivered raw command output in full to every
|
|
117
|
+
// concern on the slot, including the fourteen that never declared `result`.
|
|
118
|
+
// That is exactly the content this module exists to withhold, so the key
|
|
119
|
+
// belongs to the class whose semantics it has — not to an exception.
|
|
120
|
+
result: ["tool_response", "toolResponse", "tool_result", "toolUseResult", "error"],
|
|
112
121
|
};
|
|
113
122
|
|
|
114
123
|
export interface PayloadStub extends JsonObject {
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
type PermissionDecision,
|
|
21
21
|
type PermissionEmission,
|
|
22
22
|
} from "./host_semantics.js";
|
|
23
|
+
import { EXIT_ALLOW, EXIT_BLOCK } from './exit_codes.js';
|
|
23
24
|
|
|
24
25
|
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
25
26
|
type JsonObject = { [k: string]: JsonValue };
|
|
@@ -29,8 +30,6 @@ function _isObject(v: unknown): v is JsonObject {
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
/** Mirrors `dispatch_hook.EXIT_ALLOW` / `EXIT_BLOCK`; imported would be a cycle. */
|
|
32
|
-
const EXIT_ALLOW = 0;
|
|
33
|
-
const EXIT_BLOCK = 1;
|
|
34
33
|
|
|
35
34
|
/** The host's `tool_name`, or `""` when the event carries none. */
|
|
36
35
|
export function _payload_tool_name(envelope: JsonObject): string {
|
|
@@ -54,9 +54,7 @@ import path from "node:path";
|
|
|
54
54
|
import { execFileSync } from "node:child_process";
|
|
55
55
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
56
56
|
import { readHookStdin } from "./hook_stdin.js";
|
|
57
|
-
|
|
58
|
-
const EXIT_ALLOW = 0;
|
|
59
|
-
const EXIT_WARN = 2;
|
|
57
|
+
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
60
58
|
|
|
61
59
|
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
62
60
|
type JsonObject = { [k: string]: JsonValue };
|
|
@@ -36,6 +36,7 @@ import { spawnSync } from "node:child_process";
|
|
|
36
36
|
import fs from "node:fs";
|
|
37
37
|
import path from "node:path";
|
|
38
38
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
39
|
+
import { EXIT_USAGE } from './exit_codes.js';
|
|
39
40
|
|
|
40
41
|
// src/scripts/hooks/replay_hook.ts → parents[3] is the repo root.
|
|
41
42
|
const REPO_ROOT = path.resolve(
|
|
@@ -175,7 +176,7 @@ function _parse_args(argv: string[]): ReplayArgs {
|
|
|
175
176
|
process.stderr.write(
|
|
176
177
|
`replay_hook: the following arguments are required: ${missing.join(", ")}\n`,
|
|
177
178
|
);
|
|
178
|
-
process.exit(
|
|
179
|
+
process.exit(EXIT_USAGE);
|
|
179
180
|
}
|
|
180
181
|
return args;
|
|
181
182
|
}
|
|
@@ -69,12 +69,11 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
|
69
69
|
import { unwrap, type JsonObject, type JsonValue } from './envelope.js';
|
|
70
70
|
import { readHookStdin } from './hook_stdin.js';
|
|
71
71
|
import { atomic_write_json } from './state_io.js';
|
|
72
|
+
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
72
73
|
|
|
73
|
-
const EXIT_ALLOW = 0;
|
|
74
74
|
// Severity is taken from the EXIT CODE, not from the `decision` field — see
|
|
75
75
|
// the file header for why this never blocks on `claude`. This concern never
|
|
76
76
|
// returns exit 1 on any path.
|
|
77
|
-
const EXIT_WARN = 2;
|
|
78
77
|
|
|
79
78
|
/**
|
|
80
79
|
* Committed exemption list — deliberately duplicated from
|
|
@@ -49,8 +49,7 @@ import { deriveSessionKey, totalNonDocMutatedLinesWithMeasure } from './end_revi
|
|
|
49
49
|
import { unwrap, type JsonObject, type JsonValue } from './envelope.js';
|
|
50
50
|
import { readHookStdin } from './hook_stdin.js';
|
|
51
51
|
import { atomic_write_json } from './state_io.js';
|
|
52
|
-
|
|
53
|
-
const EXIT_OK = 0;
|
|
52
|
+
import { EXIT_ALLOW as EXIT_OK } from './exit_codes.js';
|
|
54
53
|
|
|
55
54
|
export function buildBaseline(workspaceRoot: string, now: Date = new Date()): ReviewBaseline {
|
|
56
55
|
const measured = totalNonDocMutatedLinesWithMeasure(workspaceRoot);
|
|
@@ -63,10 +63,9 @@ import {
|
|
|
63
63
|
} from "./block_no_verify.js";
|
|
64
64
|
import { readHookStdin } from "./hook_stdin.js";
|
|
65
65
|
import { detectRtkCached } from "../../install/rtkDetection.js";
|
|
66
|
+
import { EXIT_ALLOW, EXIT_WARN } from './exit_codes.js';
|
|
66
67
|
|
|
67
68
|
const SETTINGS_FILE = ".agent-settings.yml";
|
|
68
|
-
const EXIT_ALLOW = 0;
|
|
69
|
-
const EXIT_WARN = 2;
|
|
70
69
|
|
|
71
70
|
type JsonValue = string | number | boolean | null | JsonValue[] | { [k: string]: JsonValue };
|
|
72
71
|
type JsonObject = { [k: string]: JsonValue };
|