@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
|
@@ -1,4 +1,23 @@
|
|
|
1
1
|
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_GITIGNORE,
|
|
4
|
+
DEFAULT_TEMPLATE,
|
|
5
|
+
LEGACY_PATTERNS,
|
|
6
|
+
SECTION_FOOTER,
|
|
7
|
+
SECTION_HEADER,
|
|
8
|
+
TemplateNotFoundError,
|
|
9
|
+
_isFile,
|
|
10
|
+
_splitlines,
|
|
11
|
+
_strip,
|
|
12
|
+
block_entries,
|
|
13
|
+
build_fresh_block,
|
|
14
|
+
cleanup_legacy,
|
|
15
|
+
find_block,
|
|
16
|
+
format_file,
|
|
17
|
+
load_template,
|
|
18
|
+
sync_block,
|
|
19
|
+
template_entries
|
|
20
|
+
} from "./chunk-ULQRUR23.js";
|
|
2
21
|
import {
|
|
3
22
|
resolvePackageRoot
|
|
4
23
|
} from "./chunk-MCJYCQPF.js";
|
|
@@ -82,156 +101,7 @@ import * as fs2 from "node:fs";
|
|
|
82
101
|
import * as path2 from "node:path";
|
|
83
102
|
import process from "node:process";
|
|
84
103
|
import { fileURLToPath as fileURLToPath2, pathToFileURL } from "node:url";
|
|
85
|
-
var SECTION_HEADER = "# event4u/agent-config";
|
|
86
|
-
var SECTION_FOOTER = "# event4u/agent-config \u2014 END";
|
|
87
|
-
var DEFAULT_GITIGNORE = ".gitignore";
|
|
88
104
|
var _HERE = fileURLToPath2(import.meta.url);
|
|
89
|
-
var DEFAULT_TEMPLATE = path2.join(
|
|
90
|
-
path2.dirname(_HERE),
|
|
91
|
-
"..",
|
|
92
|
-
"..",
|
|
93
|
-
"src",
|
|
94
|
-
"config",
|
|
95
|
-
"gitignore-block.txt"
|
|
96
|
-
);
|
|
97
|
-
var LEGACY_PATTERNS = [
|
|
98
|
-
".agent-chat-history",
|
|
99
|
-
".agent-chat-history.bak",
|
|
100
|
-
".agent-chat-history.*.bak",
|
|
101
|
-
".agent-prices.md",
|
|
102
|
-
".council-tmp/",
|
|
103
|
-
// 2.x intermediate: prices cache lived directly under agents/ before
|
|
104
|
-
// consolidating under agents/runtime/.
|
|
105
|
-
"agents/.agent-prices.md",
|
|
106
|
-
// Budget history JSONLs — previously listed explicitly at project
|
|
107
|
-
// root or under agents/; now covered by the /agents/runtime/
|
|
108
|
-
// catch-all in the managed block.
|
|
109
|
-
".augment-budget-history.jsonl",
|
|
110
|
-
".rule-budget-history.jsonl",
|
|
111
|
-
"agents/.augment-budget-history.jsonl",
|
|
112
|
-
"agents/.rule-budget-history.jsonl"
|
|
113
|
-
];
|
|
114
|
-
function _strip(ln) {
|
|
115
|
-
return ln.replace(/\n+$/, "").replace(/\s+$/, "");
|
|
116
|
-
}
|
|
117
|
-
function _is_entry(ln) {
|
|
118
|
-
const s = _strip(ln).replace(/^\s+/, "");
|
|
119
|
-
return Boolean(s) && !s.startsWith("#");
|
|
120
|
-
}
|
|
121
|
-
var TemplateNotFoundError = class extends Error {
|
|
122
|
-
constructor(p) {
|
|
123
|
-
super(`template not found: ${p}`);
|
|
124
|
-
this.name = "TemplateNotFoundError";
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
function _isFile(p) {
|
|
128
|
-
try {
|
|
129
|
-
return fs2.statSync(p).isFile();
|
|
130
|
-
} catch {
|
|
131
|
-
return false;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function _splitlines(text) {
|
|
135
|
-
if (text === "") return [];
|
|
136
|
-
const parts = text.split(/\r\n|\r|\n/);
|
|
137
|
-
if (parts.length > 0 && parts[parts.length - 1] === "") parts.pop();
|
|
138
|
-
return parts;
|
|
139
|
-
}
|
|
140
|
-
function load_template(p) {
|
|
141
|
-
if (!_isFile(p)) {
|
|
142
|
-
throw new TemplateNotFoundError(p);
|
|
143
|
-
}
|
|
144
|
-
const text = fs2.readFileSync(p, "utf-8");
|
|
145
|
-
return _splitlines(text).map(_strip);
|
|
146
|
-
}
|
|
147
|
-
function find_block(lines) {
|
|
148
|
-
for (let i = 0; i < lines.length; i += 1) {
|
|
149
|
-
if (_strip(lines[i]) === SECTION_HEADER) {
|
|
150
|
-
const start = i;
|
|
151
|
-
for (let j = i + 1; j < lines.length; j += 1) {
|
|
152
|
-
if (_strip(lines[j]) === SECTION_FOOTER) {
|
|
153
|
-
return [start, j + 1];
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
let end = lines.length;
|
|
157
|
-
for (let j = i + 1; j < lines.length; j += 1) {
|
|
158
|
-
const s = _strip(lines[j]).replace(/^\s+/, "");
|
|
159
|
-
if (s.startsWith("#") && !s.startsWith("# Agent config") && s !== SECTION_HEADER) {
|
|
160
|
-
end = j;
|
|
161
|
-
while (end > i + 1 && _strip(lines[end - 1]) === "") {
|
|
162
|
-
end -= 1;
|
|
163
|
-
}
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return [start, end];
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
function block_entries(block_lines) {
|
|
173
|
-
return block_lines.filter((ln) => _is_entry(ln)).map((ln) => _strip(ln).replace(/^\s+/, ""));
|
|
174
|
-
}
|
|
175
|
-
function template_entries(template_lines) {
|
|
176
|
-
return template_lines.filter((ln) => _is_entry(ln)).map((ln) => ln.replace(/^\s+/, ""));
|
|
177
|
-
}
|
|
178
|
-
function build_fresh_block(template_lines) {
|
|
179
|
-
return [SECTION_HEADER, ...template_lines, SECTION_FOOTER];
|
|
180
|
-
}
|
|
181
|
-
function sync_block(existing_lines, template_lines, options = {}) {
|
|
182
|
-
const replace = options.replace ?? false;
|
|
183
|
-
const loc = find_block(existing_lines);
|
|
184
|
-
const fresh = build_fresh_block(template_lines);
|
|
185
|
-
if (loc === null) {
|
|
186
|
-
const newLines = [...existing_lines];
|
|
187
|
-
if (newLines.length > 0 && _strip(newLines[newLines.length - 1]) !== "") {
|
|
188
|
-
newLines.push("");
|
|
189
|
-
}
|
|
190
|
-
newLines.push(...fresh);
|
|
191
|
-
return [newLines, template_entries(template_lines)];
|
|
192
|
-
}
|
|
193
|
-
const [start, end] = loc;
|
|
194
|
-
const head = existing_lines.slice(0, start);
|
|
195
|
-
let block = existing_lines.slice(start, end);
|
|
196
|
-
const tail = existing_lines.slice(end);
|
|
197
|
-
if (replace) {
|
|
198
|
-
const existing = new Set(block_entries(block));
|
|
199
|
-
const added = template_entries(template_lines).filter((e) => !existing.has(e));
|
|
200
|
-
return [[...head, ...fresh, ...tail], added];
|
|
201
|
-
}
|
|
202
|
-
const existing_entries = new Set(block_entries(block));
|
|
203
|
-
const missing = template_entries(template_lines).filter((e) => !existing_entries.has(e));
|
|
204
|
-
if (missing.length === 0) {
|
|
205
|
-
return [[...existing_lines], []];
|
|
206
|
-
}
|
|
207
|
-
let insert_at;
|
|
208
|
-
if (block.length > 0 && _strip(block[block.length - 1]) === SECTION_FOOTER) {
|
|
209
|
-
insert_at = block.length - 1;
|
|
210
|
-
} else {
|
|
211
|
-
block = [...block, SECTION_FOOTER];
|
|
212
|
-
insert_at = block.length - 1;
|
|
213
|
-
}
|
|
214
|
-
const new_block = [...block.slice(0, insert_at), ...missing, ...block.slice(insert_at)];
|
|
215
|
-
return [[...head, ...new_block, ...tail], missing];
|
|
216
|
-
}
|
|
217
|
-
function cleanup_legacy(lines) {
|
|
218
|
-
const legacy = new Set(LEGACY_PATTERNS);
|
|
219
|
-
const kept = [];
|
|
220
|
-
const removed = [];
|
|
221
|
-
for (const ln of lines) {
|
|
222
|
-
const s = _strip(ln).replace(/^\s+/, "");
|
|
223
|
-
if (legacy.has(s) || s.startsWith("/") && legacy.has(s.slice(1))) {
|
|
224
|
-
removed.push(s);
|
|
225
|
-
continue;
|
|
226
|
-
}
|
|
227
|
-
kept.push(ln);
|
|
228
|
-
}
|
|
229
|
-
return [kept, removed];
|
|
230
|
-
}
|
|
231
|
-
function format_file(lines) {
|
|
232
|
-
const text = lines.join("\n");
|
|
233
|
-
return text.replace(/\n+$/, "") + "\n";
|
|
234
|
-
}
|
|
235
105
|
function render_diff(old_text, new_text, p) {
|
|
236
106
|
return unified_diff(
|
|
237
107
|
_splitlinesKeepends(old_text),
|
|
@@ -591,7 +461,7 @@ var DEFAULT_TEMPLATE2 = path3.join(
|
|
|
591
461
|
function _strip2(ln) {
|
|
592
462
|
return ln.replace(/\n+$/, "").replace(/\s+$/, "");
|
|
593
463
|
}
|
|
594
|
-
function
|
|
464
|
+
function _is_entry(ln) {
|
|
595
465
|
const s = _strip2(ln).replace(/^\s+/, "");
|
|
596
466
|
return Boolean(s) && !s.startsWith("#");
|
|
597
467
|
}
|
|
@@ -635,10 +505,10 @@ function find_block2(lines) {
|
|
|
635
505
|
return null;
|
|
636
506
|
}
|
|
637
507
|
function block_entries2(block_lines) {
|
|
638
|
-
return block_lines.filter((ln) =>
|
|
508
|
+
return block_lines.filter((ln) => _is_entry(ln)).map((ln) => _strip2(ln).replace(/^\s+/, ""));
|
|
639
509
|
}
|
|
640
510
|
function template_entries2(template_lines) {
|
|
641
|
-
return template_lines.filter((ln) =>
|
|
511
|
+
return template_lines.filter((ln) => _is_entry(ln)).map((ln) => ln.replace(/^\s+/, ""));
|
|
642
512
|
}
|
|
643
513
|
function build_fresh_block2(template_lines) {
|
|
644
514
|
return [SECTION_HEADER2, ...template_lines, SECTION_FOOTER2];
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/agent-src/scripts/deferral_carry.ts
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
var DEFERRED_RESOLUTION_RE = /<!--\s*deferred-resolution:\s*(carried-to|merged-into)\s*=\s*([A-Za-z0-9._-]+)\s*-->/;
|
|
7
|
+
var DEFERRED_STEP_RE = /^[ \t]*[-*][ \t]+\[~\][ \t]*(.*)$/;
|
|
8
|
+
var BLOCK_END_RE = /^[ \t]*[-*][ \t]+\[[ xX~-]\]|^#{1,6}[ \t]/;
|
|
9
|
+
var BLOCKED_BY_RE = /blocked-by:\s*([A-Za-z0-9._-]+)/g;
|
|
10
|
+
var BLOCKER_HEAD_RE = /^###[ \t]+blocker:[ \t]*(.+?)[ \t]*$/i;
|
|
11
|
+
var STATUS_LINE_RE = /^([ \t]*-[ \t]+\*\*Status:\*\*[ \t]*)(.*)$/;
|
|
12
|
+
var AC_HEADING_RE = /^##[ \t]+acceptance/i;
|
|
13
|
+
var OWNER_LINE_RE = /^[ \t]*-[ \t]+\*\*Owner:\*\*[ \t]*`?([A-Za-z]+)/;
|
|
14
|
+
var AGENT_SIDE_OWNERS = /* @__PURE__ */ new Set(["implementer", "council", "agent", "ai"]);
|
|
15
|
+
var LIGHTWEIGHT_LINE_BUDGET = 500;
|
|
16
|
+
var DISPOSITION_DIRS = ["", "later", "archive", "skipped"];
|
|
17
|
+
function _bareSteps(lines) {
|
|
18
|
+
const out = [];
|
|
19
|
+
let inAcceptance = false;
|
|
20
|
+
for (let i = 0; i < lines.length; i++) {
|
|
21
|
+
const line = lines[i];
|
|
22
|
+
if (/^##[ \t]/.test(line)) inAcceptance = AC_HEADING_RE.test(line);
|
|
23
|
+
const m = DEFERRED_STEP_RE.exec(line);
|
|
24
|
+
if (m === null) continue;
|
|
25
|
+
let end = i + 1;
|
|
26
|
+
while (end < lines.length && !BLOCK_END_RE.test(lines[end])) end++;
|
|
27
|
+
const raw = lines.slice(i, end);
|
|
28
|
+
if (DEFERRED_RESOLUTION_RE.test(raw.join("\n"))) continue;
|
|
29
|
+
while (raw.length > 1 && raw[raw.length - 1].trim() === "") raw.pop();
|
|
30
|
+
const indent = /^[ \t]*/.exec(line)[0].length;
|
|
31
|
+
const block = raw.map((l) => l.slice(0, indent).trim() === "" ? l.slice(indent) : l);
|
|
32
|
+
const ids = /* @__PURE__ */ new Set();
|
|
33
|
+
for (const b of raw) for (const hit of b.matchAll(BLOCKED_BY_RE)) ids.add(hit[1]);
|
|
34
|
+
out.push({ line: i, block, isAcceptance: inAcceptance, blockerIds: [...ids] });
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
function _blockerSpans(lines) {
|
|
39
|
+
const start = lines.findIndex((l) => /^##[ \t]+Blockers[ \t]*$/i.test(l));
|
|
40
|
+
if (start === -1) return [];
|
|
41
|
+
let sectionEnd = lines.length;
|
|
42
|
+
for (let i = start + 1; i < lines.length; i++) {
|
|
43
|
+
if (/^##[ \t]+\S/.test(lines[i])) {
|
|
44
|
+
sectionEnd = i;
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const spans = [];
|
|
49
|
+
for (let i = start + 1; i < sectionEnd; i++) {
|
|
50
|
+
const m = BLOCKER_HEAD_RE.exec(lines[i]);
|
|
51
|
+
if (m === null) continue;
|
|
52
|
+
let end = i + 1;
|
|
53
|
+
while (end < sectionEnd && !/^###?[ \t]/.test(lines[end])) end++;
|
|
54
|
+
const status = lines.slice(i, end).map((l) => STATUS_LINE_RE.exec(l)).find((s) => s !== null);
|
|
55
|
+
const value = (status?.[2] ?? "open").trim().toLowerCase();
|
|
56
|
+
const owner = lines.slice(i, end).map((l) => OWNER_LINE_RE.exec(l)).find((o) => o !== null);
|
|
57
|
+
spans.push({
|
|
58
|
+
id: m[1].trim(),
|
|
59
|
+
start: i,
|
|
60
|
+
end,
|
|
61
|
+
open: !/^resolved\b/.test(value),
|
|
62
|
+
ownerDependent: !AGENT_SIDE_OWNERS.has((owner?.[1] ?? "").toLowerCase())
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return spans;
|
|
66
|
+
}
|
|
67
|
+
function _plusDays(date, days) {
|
|
68
|
+
const d = /* @__PURE__ */ new Date(`${date}T00:00:00Z`);
|
|
69
|
+
d.setUTCDate(d.getUTCDate() + days);
|
|
70
|
+
return d.toISOString().slice(0, 10);
|
|
71
|
+
}
|
|
72
|
+
function nextCarrySlug(root, sourceSlug) {
|
|
73
|
+
const base = sourceSlug.replace(/-carried(-\d+)?$/, "");
|
|
74
|
+
for (let n = 1; ; n++) {
|
|
75
|
+
const slug = n === 1 ? `${base}-carried` : `${base}-carried-${n}`;
|
|
76
|
+
const taken = DISPOSITION_DIRS.some(
|
|
77
|
+
(d) => fs.existsSync(path.join(root, "agents", "roadmaps", d, `${slug}.md`))
|
|
78
|
+
);
|
|
79
|
+
if (!taken) return slug;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
function _title(sourceText, sourceSlug) {
|
|
83
|
+
const h1 = /^#[ \t]+(.+?)[ \t]*$/m.exec(sourceText.replace(/^---\n[\s\S]*?\n---\n/, ""));
|
|
84
|
+
return h1 !== null ? h1[1] : sourceSlug.replace(/-/g, " ");
|
|
85
|
+
}
|
|
86
|
+
function planCarry(root, rel, text, openBlockerIds, date, ownerDecision = "ask") {
|
|
87
|
+
const sourceSlug = rel.replace(/\.md$/, "");
|
|
88
|
+
const lines = text.split("\n");
|
|
89
|
+
const steps = _bareSteps(lines);
|
|
90
|
+
if (steps.length === 0) return { refused: "no bare `[~]` step to carry" };
|
|
91
|
+
const named = new Set(steps.flatMap((s) => s.blockerIds));
|
|
92
|
+
const stranded = openBlockerIds.filter((id) => !named.has(id));
|
|
93
|
+
if (stranded.length > 0) {
|
|
94
|
+
return {
|
|
95
|
+
refused: `open blocker(s) no deferred step names (${stranded.join(", ")}) \u2014 carrying around them would not let this roadmap archive`
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const moved = _blockerSpans(lines).filter((b) => b.open && named.has(b.id));
|
|
99
|
+
const ownerBlockers = moved.filter((b) => b.ownerDependent).map((b) => b.id);
|
|
100
|
+
const parked = ownerBlockers.length > 0 && ownerDecision === "later";
|
|
101
|
+
const destSlug = nextCarrySlug(root, sourceSlug);
|
|
102
|
+
const annotation = `<!-- deferred-resolution: carried-to=${destSlug} -->`;
|
|
103
|
+
const out = [...lines];
|
|
104
|
+
for (const b of moved) {
|
|
105
|
+
for (let i = b.start; i < b.end; i++) {
|
|
106
|
+
const s = STATUS_LINE_RE.exec(out[i]);
|
|
107
|
+
if (s === null) continue;
|
|
108
|
+
out[i] = `${s[1]}resolved \u2014 carried, still open, to \`${destSlug}\` with the steps it blocks (was: ${s[2].trim()})`;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
for (const s of steps) out[s.line] = `${out[s.line]} ${annotation}`;
|
|
113
|
+
const toOpen = (block) => block.map((l, i) => i === 0 ? l.replace(/\[~\]/, "[ ]") : l).join("\n");
|
|
114
|
+
const phaseSteps = steps.filter((s) => !s.isAcceptance).map((s) => toOpen(s.block));
|
|
115
|
+
const acSteps = steps.filter((s) => s.isAcceptance).map((s) => toOpen(s.block));
|
|
116
|
+
const phaseName = `Deferred steps carried from ${sourceSlug}`;
|
|
117
|
+
const blockerText = moved.map((b) => lines.slice(b.start, b.end).join("\n").trimEnd());
|
|
118
|
+
const body = [
|
|
119
|
+
`# ${_title(text, sourceSlug)} \u2014 carried`,
|
|
120
|
+
"",
|
|
121
|
+
`> **Source:** carried by the archival sweep on ${date} from`,
|
|
122
|
+
`> [\`${sourceSlug}\`](${parked ? "../" : ""}archive/${sourceSlug}.md), which closed every other step.`,
|
|
123
|
+
"> Each step below was `[~]` there and is restated verbatim as open work, so",
|
|
124
|
+
"> archiving the parent buried nothing. Blockers the steps name moved with them.",
|
|
125
|
+
"",
|
|
126
|
+
"## Goal",
|
|
127
|
+
"",
|
|
128
|
+
`Every step ${sourceSlug} deferred is either done here or explicitly disposed`,
|
|
129
|
+
"of \u2014 a step that still cannot run is re-deferred with its reason, never",
|
|
130
|
+
"left to read as finished.",
|
|
131
|
+
"",
|
|
132
|
+
`## Phase 1 \u2014 ${phaseName}`,
|
|
133
|
+
"",
|
|
134
|
+
phaseSteps.length > 0 ? phaseSteps.join("\n") : "- [ ] **1.1 Close the carried acceptance criteria below.** The parent deferred\n only acceptance criteria; this step is done when each is checked or disposed of.\n verify: every criterion under `## Acceptance Criteria` is `[x]` or `[-]`",
|
|
135
|
+
"",
|
|
136
|
+
...blockerText.length > 0 ? ["## Blockers", "", blockerText.join("\n\n"), ""] : [],
|
|
137
|
+
"## Risk Register",
|
|
138
|
+
`<!-- risk-review: v1 | reviewed: ${date} | reviewer: archive-sweep/auto-carry -->`,
|
|
139
|
+
"",
|
|
140
|
+
"| Rank | Item | Risk type | Description | Mitigation | Anchored under |",
|
|
141
|
+
"|------|------|-----------|-------------|------------|----------------|",
|
|
142
|
+
`| 1 | Carried steps stay blocked indefinitely | implementation | A step deferred once for elapsed time or a decision can sit here as long as it sat in the parent | It now counts as open work in the dashboard instead of as 100 %, and its blocker is listed where the estate gates count it | Phase 1 \u2014 ${phaseName} |`,
|
|
143
|
+
"",
|
|
144
|
+
"## Acceptance Criteria",
|
|
145
|
+
"",
|
|
146
|
+
acSteps.length > 0 ? acSteps.join("\n") : `- [ ] AC-1 \u2014 No step carried from \`${sourceSlug}\` is still \`[ ]\` without a recorded disposition.`,
|
|
147
|
+
""
|
|
148
|
+
].join("\n");
|
|
149
|
+
const complexity = body.split("\n").length > LIGHTWEIGHT_LINE_BUDGET ? "structural" : "lightweight";
|
|
150
|
+
const ids = ownerBlockers.join(", ");
|
|
151
|
+
const parkedKeys = parked ? `entry_condition:
|
|
152
|
+
what: the owner resolves blocker(s) ${ids}
|
|
153
|
+
when: whenever the owner takes the next step
|
|
154
|
+
who: owner
|
|
155
|
+
review_by: ${_plusDays(date, 90)}
|
|
156
|
+
estate_growth_exempt: >-
|
|
157
|
+
Owner-chosen archive of ${sourceSlug}: its deferred steps wait on owner
|
|
158
|
+
blocker(s) ${ids} and are parked here instead of left active. The parent
|
|
159
|
+
is archived in the same change, so the active count drops by one.
|
|
160
|
+
` : "";
|
|
161
|
+
const destText = `---
|
|
162
|
+
complexity: ${complexity}
|
|
163
|
+
status: ${parked ? "later" : "ready"}
|
|
164
|
+
execution:
|
|
165
|
+
mode: phase-checkpoints
|
|
166
|
+
parent_roadmap: ${sourceSlug}
|
|
167
|
+
${parkedKeys}---
|
|
168
|
+
${body}`;
|
|
169
|
+
const destRel = parked ? `agents/roadmaps/later/${destSlug}.md` : `agents/roadmaps/${destSlug}.md`;
|
|
170
|
+
return {
|
|
171
|
+
plan: {
|
|
172
|
+
destSlug,
|
|
173
|
+
destRel,
|
|
174
|
+
destText,
|
|
175
|
+
sourceText: out.join("\n"),
|
|
176
|
+
carried: steps.length,
|
|
177
|
+
movedBlockers: moved.map((b) => b.id),
|
|
178
|
+
ownerBlockers,
|
|
179
|
+
firstStep: steps[0].block.join("\n"),
|
|
180
|
+
parked
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
export {
|
|
186
|
+
DEFERRED_RESOLUTION_RE,
|
|
187
|
+
DEFERRED_STEP_RE,
|
|
188
|
+
BLOCK_END_RE,
|
|
189
|
+
nextCarrySlug,
|
|
190
|
+
planCarry
|
|
191
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/scripts/_lib/json_merge.ts
|
|
4
|
+
function isPlainObject(v) {
|
|
5
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
6
|
+
}
|
|
7
|
+
function deepcopy(v) {
|
|
8
|
+
if (v === null || typeof v !== "object") return v;
|
|
9
|
+
if (Array.isArray(v)) return v.map((x) => deepcopy(x));
|
|
10
|
+
const out = {};
|
|
11
|
+
for (const k of Object.keys(v)) {
|
|
12
|
+
out[k] = deepcopy(v[k]);
|
|
13
|
+
}
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
function deepMerge(base, overlay) {
|
|
17
|
+
const result = deepcopy(base);
|
|
18
|
+
for (const key of Object.keys(overlay)) {
|
|
19
|
+
const value = overlay[key];
|
|
20
|
+
if (Object.prototype.hasOwnProperty.call(result, key) && isPlainObject(result[key]) && isPlainObject(value)) {
|
|
21
|
+
result[key] = deepMerge(result[key], value);
|
|
22
|
+
} else {
|
|
23
|
+
result[key] = deepcopy(value);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
function jsonEqual(a, b) {
|
|
29
|
+
if (a === b) return true;
|
|
30
|
+
if (typeof a !== typeof b) return false;
|
|
31
|
+
if (Array.isArray(a) || Array.isArray(b)) {
|
|
32
|
+
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false;
|
|
33
|
+
return a.every((v, i) => jsonEqual(v, b[i]));
|
|
34
|
+
}
|
|
35
|
+
if (isPlainObject(a) && isPlainObject(b)) {
|
|
36
|
+
const ka = Object.keys(a);
|
|
37
|
+
const kb = Object.keys(b);
|
|
38
|
+
if (ka.length !== kb.length) return false;
|
|
39
|
+
return ka.every(
|
|
40
|
+
(k) => Object.prototype.hasOwnProperty.call(b, k) && jsonEqual(a[k], b[k])
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// src/scripts/_lib/host_hook_merge.ts
|
|
47
|
+
var HOOK_SIGNATURES = {
|
|
48
|
+
"~/.augment/settings.json": "augment-dispatcher.sh",
|
|
49
|
+
".cursor/hooks.json": "dispatch:hook --platform cursor",
|
|
50
|
+
"~/.cursor/hooks.json": "cursor-dispatcher.sh",
|
|
51
|
+
".windsurf/hooks.json": "dispatch:hook --platform windsurf",
|
|
52
|
+
"~/.codeium/windsurf/hooks.json": "windsurf-dispatcher.sh",
|
|
53
|
+
".gemini/settings.json": "dispatch:hook --platform gemini",
|
|
54
|
+
"~/.gemini/settings.json": "gemini-dispatcher.sh"
|
|
55
|
+
};
|
|
56
|
+
function entryCommands(entry) {
|
|
57
|
+
if (!isPlainObject(entry)) return [];
|
|
58
|
+
const out = [];
|
|
59
|
+
if (typeof entry["command"] === "string") out.push(entry["command"]);
|
|
60
|
+
const nested = entry["hooks"];
|
|
61
|
+
if (Array.isArray(nested)) {
|
|
62
|
+
for (const inner of nested) {
|
|
63
|
+
if (isPlainObject(inner) && typeof inner["command"] === "string") {
|
|
64
|
+
out.push(inner["command"]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
function isManagedEntry(entry, signature) {
|
|
71
|
+
if (signature === "") return false;
|
|
72
|
+
return entryCommands(entry).some((cmd) => cmd.includes(signature));
|
|
73
|
+
}
|
|
74
|
+
function mergeEventEntries(existing, incoming, signature) {
|
|
75
|
+
const kept = existing.filter((entry) => !isManagedEntry(entry, signature));
|
|
76
|
+
return [...kept.map((e) => deepcopy(e)), ...incoming.map((e) => deepcopy(e))];
|
|
77
|
+
}
|
|
78
|
+
function mergeHookEvents(existingHooks, patchHooks, signature) {
|
|
79
|
+
if (!isPlainObject(existingHooks)) return deepcopy(patchHooks);
|
|
80
|
+
const out = deepcopy(existingHooks);
|
|
81
|
+
for (const event of Object.keys(patchHooks)) {
|
|
82
|
+
const incoming = patchHooks[event];
|
|
83
|
+
const current = out[event];
|
|
84
|
+
if (!Array.isArray(incoming)) {
|
|
85
|
+
out[event] = deepcopy(incoming);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
out[event] = mergeEventEntries(Array.isArray(current) ? current : [], incoming, signature);
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
function mergeHostConfig(existing, patch, signature, deepMergeFn) {
|
|
93
|
+
const merged = deepMergeFn(existing, patch);
|
|
94
|
+
const patchHooks = patch["hooks"];
|
|
95
|
+
if (signature === "" || !isPlainObject(patchHooks)) return merged;
|
|
96
|
+
merged["hooks"] = mergeHookEvents(existing["hooks"], patchHooks, signature);
|
|
97
|
+
return merged;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export {
|
|
101
|
+
isPlainObject,
|
|
102
|
+
deepMerge,
|
|
103
|
+
jsonEqual,
|
|
104
|
+
HOOK_SIGNATURES,
|
|
105
|
+
entryCommands,
|
|
106
|
+
isManagedEntry,
|
|
107
|
+
mergeHostConfig
|
|
108
|
+
};
|