@event4u/agent-config 8.4.0 → 8.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +73 -0
- package/README.md +17 -5
- package/dist/agent-src/README.md +1 -1
- package/dist/agent-src/commands/{analyze-reference-repo.md → analyze/reference-repo.md} +3 -1
- package/dist/agent-src/commands/analyze.md +9 -6
- package/dist/agent-src/commands/{bug-fix.md → bug/fix.md} +3 -1
- package/dist/agent-src/commands/{bug-investigate.md → bug/investigate.md} +4 -2
- package/dist/agent-src/commands/bug.md +59 -0
- package/dist/agent-src/commands/{set-cost-profile.md → cost/profile.md} +9 -6
- package/dist/agent-src/commands/{cost-report.md → cost/report.md} +18 -17
- package/dist/agent-src/commands/cost.md +57 -0
- package/dist/agent-src/commands/evals/{review-changes.json → review.json} +12 -8
- package/dist/agent-src/commands/{quality-fix.md → fix/quality.md} +5 -2
- package/dist/agent-src/commands/fix.md +7 -4
- package/dist/agent-src/commands/optimize/project.md +250 -0
- package/dist/agent-src/commands/{optimize-prompt.md → optimize/prompt.md} +3 -2
- package/dist/agent-src/commands/optimize.md +17 -12
- package/dist/agent-src/commands/{package-reset.md → package/reset.md} +2 -0
- package/dist/agent-src/commands/{package-test.md → package/test.md} +3 -1
- package/dist/agent-src/commands/package.md +56 -0
- package/dist/agent-src/commands/{project-analyze.md → project/analyze.md} +10 -8
- package/dist/agent-src/commands/{project-health.md → project/health.md} +2 -0
- package/dist/agent-src/commands/project.md +60 -0
- package/dist/agent-src/commands/{review-changes.md → review/changes.md} +26 -24
- package/dist/agent-src/commands/{review-routing.md → review/routing.md} +21 -17
- package/dist/agent-src/commands/review.md +61 -0
- package/dist/agent-src/commands/security-audit-config.md +24 -23
- package/dist/agent-src/commands/{sync-agent-settings.md → sync/agent-settings.md} +11 -7
- package/dist/agent-src/commands/{sync-gitignore → sync/gitignore}/fix.md +36 -27
- package/dist/agent-src/commands/{sync-gitignore.md → sync/gitignore.md} +22 -21
- package/dist/agent-src/commands/sync.md +58 -0
- package/dist/agent-src/commands/{e2e-heal.md → tests/e2e-heal.md} +5 -2
- package/dist/agent-src/commands/{e2e-plan.md → tests/e2e-plan.md} +5 -2
- package/dist/agent-src/commands/tests.md +11 -5
- package/dist/agent-src/contexts/augment-infrastructure.md +3 -3
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +1 -1
- package/dist/agent-src/contexts/skills-and-commands.md +2 -2
- package/dist/agent-src/rules/external-reference-deep-dive.md +1 -1
- package/dist/agent-src/skills/finishing-a-development-branch/SKILL.md +2 -2
- package/dist/agent-src/skills/judge-artifact-completeness/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-code-quality/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-security-auditor/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-synthesis/SKILL.md +1 -1
- package/dist/agent-src/skills/judge-test-coverage/SKILL.md +1 -1
- package/dist/agent-src/skills/markitdown/SKILL.md +1 -1
- package/dist/agent-src/skills/mobile-e2e-strategy/SKILL.md +5 -5
- package/dist/agent-src/skills/prompt-optimizer/SKILL.md +2 -2
- package/dist/agent-src/skills/quality-tools/SKILL.md +1 -1
- package/dist/agent-src/skills/repomix-packer/SKILL.md +1 -1
- package/dist/agent-src/skills/requesting-code-review/SKILL.md +2 -2
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +2 -2
- package/dist/agent-src/templates/agent-settings.md +1 -1
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +2 -2
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +1 -1
- package/dist/cli/commands/config.js +44 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/uiServe.js +1 -0
- package/dist/cli/commands/uiServe.js.map +1 -1
- package/dist/cli/help.js +38 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/initRouting.js +16 -1
- package/dist/cli/initRouting.js.map +1 -1
- package/dist/cli/main.js +43 -37
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/registry.js +45 -44
- package/dist/cli/registry.js.map +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +419 -210
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +4 -4
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +31 -25
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +30 -24
- package/dist/install/install.mjs +6064 -159
- package/dist/install/selectedTools.js +39 -10
- package/dist/install/selectedTools.js.map +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/server/app.js +15 -3
- package/dist/server/app.js.map +1 -1
- package/dist/server/routes/ping.js +16 -0
- package/dist/server/routes/ping.js.map +1 -1
- package/dist/server/routes/settings.js +42 -6
- package/dist/server/routes/settings.js.map +1 -1
- package/dist/server/routes/settingsChanges.js +55 -0
- package/dist/server/routes/settingsChanges.js.map +1 -0
- package/dist/server/routes/userMd.js +7 -2
- package/dist/server/routes/userMd.js.map +1 -1
- package/dist/server/routes/wizard.js +76 -14
- package/dist/server/routes/wizard.js.map +1 -1
- package/dist/server/writeRoot.js +17 -0
- package/dist/server/writeRoot.js.map +1 -1
- package/dist/shared/settingsSurface.js +120 -0
- package/dist/shared/settingsSurface.js.map +1 -0
- package/dist/ui/assets/index-BPFMZWUs.css +1 -0
- package/dist/ui/assets/index-BiEZiZ31.js +40 -0
- package/dist/ui/assets/index-BiEZiZ31.js.map +1 -0
- package/dist/ui/index.html +15 -2
- package/docs/CLAIMS.md +20 -15
- package/docs/architecture.md +1 -1
- package/docs/catalog.md +37 -31
- package/docs/command-flows.md +22 -16
- package/docs/contracts/command-clusters.md +39 -9
- package/docs/contracts/file-ownership-matrix.json +21 -0
- package/docs/contracts/frontmatter-contract.md +1 -1
- package/docs/contracts/gui-wizard.md +16 -4
- package/docs/contracts/iron-law-overrides.txt +1 -0
- package/docs/contracts/rule-classification.md +2 -2
- package/docs/contracts/settings-api.md +58 -2
- package/docs/contracts/surface-matrix.md +5 -0
- package/docs/cookbook.md +7 -7
- package/docs/decisions/ADR-114-commit-policy-iron-law-override.md +74 -0
- package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +91 -0
- package/docs/decisions/INDEX.md +2 -0
- package/docs/featured-commands.md +1 -1
- package/docs/featured-skills.md +4 -4
- package/docs/flows.md +2 -2
- package/docs/getting-started-by-role.md +1 -1
- package/docs/getting-started-laravel.md +1 -1
- package/docs/getting-started.md +6 -3
- package/docs/governance-advantage.md +1 -1
- package/docs/guidelines/agent-infra/5w2h-analysis.md +1 -1
- package/docs/guidelines/agent-infra/ios-simulator-guide.md +1 -1
- package/docs/proof.md +11 -2
- package/package.json +6 -1
- package/src/agent-src/README.md +64 -0
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +497 -0
- package/src/agent-src/scripts/scan-seeder-violations.php +145 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +1087 -0
- package/src/agent-src/templates/AGENTS.md +34 -0
- package/src/agent-src/templates/scripts/README.md +195 -0
- package/src/agent-src/templates/scripts/check_memory.ts +662 -0
- package/src/agent-src/templates/scripts/check_memory_proposal.ts +370 -0
- package/src/agent-src/templates/scripts/historical-bug-patterns.example.yml +84 -0
- package/src/agent-src/templates/scripts/implement_ticket/__main__.ts +27 -0
- package/src/agent-src/templates/scripts/memory_hash.ts +355 -0
- package/src/agent-src/templates/scripts/memory_lookup.ts +1089 -0
- package/src/agent-src/templates/scripts/memory_report.ts +868 -0
- package/src/agent-src/templates/scripts/memory_signal.ts +444 -0
- package/src/agent-src/templates/scripts/memory_status.ts +215 -0
- package/src/agent-src/templates/scripts/ownership-map.example.yml +87 -0
- package/src/agent-src/templates/scripts/pr-risk-config.example.yml +76 -0
- package/src/agent-src/templates/scripts/pr_review_routing.ts +544 -0
- package/src/agent-src/templates/scripts/pr_risk_review.ts +0 -0
- package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
- package/src/agent-src/templates/scripts/telemetry/boundary.ts +164 -0
- package/src/agent-src/templates/scripts/telemetry/engagement.ts +479 -0
- package/src/agent-src/templates/scripts/telemetry/report_renderer.ts +394 -0
- package/src/agent-src/templates/scripts/telemetry/settings.ts +210 -0
- package/src/agent-src/templates/scripts/telemetry_record.ts +276 -0
- package/src/agent-src/templates/scripts/telemetry_report.ts +211 -0
- package/src/agent-src/templates/scripts/telemetry_status.ts +333 -0
- package/src/agent-src/templates/scripts/tier_usage_report.ts +619 -0
- package/src/agent-src/templates/scripts/work_engine/__main__.ts +14 -0
- package/src/agent-src/templates/scripts/work_engine/_lib/agent_settings.ts +1261 -0
- package/src/agent-src/templates/scripts/work_engine/_lib/user_global_paths.ts +329 -0
- package/src/agent-src/templates/scripts/work_engine/cli.ts +206 -0
- package/src/agent-src/templates/scripts/work_engine/cli_args.ts +249 -0
- package/src/agent-src/templates/scripts/work_engine/delivery_state.ts +225 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/analyze.ts +125 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +189 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +94 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/memory.ts +193 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/plan.ts +267 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/refine.ts +518 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/report.ts +379 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +268 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +258 -0
- package/src/agent-src/templates/scripts/work_engine/directives/index.ts +32 -0
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/contract.ts +243 -0
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/index.ts +108 -0
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +259 -0
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/ui.ts +216 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/_passthrough.ts +40 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +241 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +216 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +506 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/design.ts +325 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/index.ts +102 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/polish.ts +462 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/review.ts +474 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +352 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui_trivial/_skipped.ts +33 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui_trivial/apply.ts +213 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui_trivial/index.ts +111 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui_trivial/refine.ts +126 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui_trivial/report.ts +112 -0
- package/src/agent-src/templates/scripts/work_engine/directives/ui_trivial/test.ts +164 -0
- package/src/agent-src/templates/scripts/work_engine/dispatcher.ts +515 -0
- package/src/agent-src/templates/scripts/work_engine/emitters.ts +119 -0
- package/src/agent-src/templates/scripts/work_engine/errors.ts +24 -0
- package/src/agent-src/templates/scripts/work_engine/hook_bootstrap.ts +104 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/_chat_history_base.ts +189 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_append.ts +41 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/chat_history_halt_append.ts +89 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_gate.ts +193 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/decision_trace.ts +304 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/directive_set_guard.ts +110 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/halt_surface_audit.ts +118 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/index.ts +17 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.ts +161 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/state_shape_validation.ts +45 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/builtin/trace.ts +134 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/context.ts +94 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/events.ts +58 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/exceptions.ts +85 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/index.ts +27 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/registry.ts +66 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/runner.ts +90 -0
- package/src/agent-src/templates/scripts/work_engine/hooks/settings.ts +260 -0
- package/src/agent-src/templates/scripts/work_engine/input_builders.ts +260 -0
- package/src/agent-src/templates/scripts/work_engine/intent/classify.ts +466 -0
- package/src/agent-src/templates/scripts/work_engine/migration/v0_to_v1.ts +531 -0
- package/src/agent-src/templates/scripts/work_engine/orchestration.ts +366 -0
- package/src/agent-src/templates/scripts/work_engine/persona_policy.ts +97 -0
- package/src/agent-src/templates/scripts/work_engine/resolvers/diff.ts +135 -0
- package/src/agent-src/templates/scripts/work_engine/resolvers/file.ts +175 -0
- package/src/agent-src/templates/scripts/work_engine/resolvers/prompt.ts +115 -0
- package/src/agent-src/templates/scripts/work_engine/scoring/confidence.ts +415 -0
- package/src/agent-src/templates/scripts/work_engine/scoring/decision_engine.ts +466 -0
- package/src/agent-src/templates/scripts/work_engine/scoring/decision_trace.ts +298 -0
- package/src/agent-src/templates/scripts/work_engine/scoring/memory_visibility.ts +444 -0
- package/src/agent-src/templates/scripts/work_engine/stack/detect.ts +252 -0
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +745 -0
- package/src/agent-src/templates/scripts/work_engine/state.ts +1151 -0
- package/src/agent-src/templates/scripts/work_engine/state_io.ts +413 -0
- package/src/config/agent-settings.template.yml +1 -1
- package/src/install/atomic.ts +111 -0
- package/src/install/conflict.ts +226 -0
- package/src/install/detect.ts +280 -0
- package/src/install/paths.ts +90 -0
- package/src/install/plan.ts +205 -0
- package/src/install/preflight.ts +210 -0
- package/src/install/selectedTools.ts +80 -0
- package/src/install/toolDetection.ts +120 -0
- package/src/install/txlog.ts +161 -0
- package/src/install/types.ts +175 -0
- package/src/install/wizard-plan.ts +216 -0
- package/src/scripts/_cli/cmd_converge.ts +38 -0
- package/src/scripts/_cli/cmd_doctor.ts +113 -2
- package/src/scripts/_cli/cmd_explain.ts +2 -2
- package/src/scripts/_cli/cmd_export.ts +3 -3
- package/src/scripts/_cli/cmd_fleet.ts +13 -1
- package/src/scripts/_cli/cmd_migrate.ts +3 -3
- package/src/scripts/_cli/cmd_prune.ts +2 -2
- package/src/scripts/_cli/cmd_refresh.ts +4 -4
- package/src/scripts/_cli/cmd_settings_check.ts +2 -2
- package/src/scripts/_cli/cmd_settings_migrate.ts +2 -2
- package/src/scripts/_cli/cmd_sync.ts +2 -2
- package/src/scripts/_cli/cmd_uninstall.ts +2 -2
- package/src/scripts/_cli/cmd_update.ts +8 -8
- package/src/scripts/_cli/cmd_upgrade.ts +4 -3
- package/src/scripts/_cli/cmd_validate.ts +3 -3
- package/src/scripts/_cli/cmd_versions.ts +2 -2
- package/src/scripts/_cli/explain_last/assumptions.ts +2 -2
- package/src/scripts/_cli/explain_last/council.ts +2 -2
- package/src/scripts/_cli/explain_last/halt.ts +2 -2
- package/src/scripts/_cli/explain_last/index.ts +2 -2
- package/src/scripts/_cli/explain_last/inputs.ts +4 -4
- package/src/scripts/_cli/explain_last/memory.ts +2 -2
- package/src/scripts/_cli/explain_last/provider.ts +2 -2
- package/src/scripts/_cli/explain_last/render.ts +2 -2
- package/src/scripts/_cli/explain_last/route.ts +2 -2
- package/src/scripts/_cli/explain_last/scrubber.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/assumptions.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/council.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/halt.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/header.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/index.ts +1 -1
- package/src/scripts/_cli/explain_last/sections/inputs.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/memory.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/pack.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/provider.ts +2 -2
- package/src/scripts/_cli/explain_last/sections/route.ts +2 -2
- package/src/scripts/_cli/explain_last/state_loader.ts +2 -2
- package/src/scripts/_dispatch.bash +20 -1
- package/src/scripts/_lib/agent_settings.ts +1 -1
- package/src/scripts/_lib/agent_src.ts +7 -7
- package/src/scripts/_lib/agents_overlay.ts +1 -1
- package/src/scripts/_lib/bench_ab_cache.ts +1 -1
- package/src/scripts/_lib/bench_ab_scoring.ts +1 -1
- package/src/scripts/_lib/bench_ab_scoring_v2.ts +3 -3
- package/src/scripts/_lib/bench_cost.ts +1 -1
- package/src/scripts/_lib/bench_quality.ts +3 -3
- package/src/scripts/_lib/bench_report.ts +4 -4
- package/src/scripts/_lib/bench_telegraph.ts +1 -1
- package/src/scripts/_lib/bench_telegraph_report.ts +4 -4
- package/src/scripts/_lib/changelog_eras.ts +1 -1
- package/src/scripts/_lib/claude_desktop_bundler.ts +1 -1
- package/src/scripts/_lib/cli_wrapper.ts +1 -1
- package/src/scripts/_lib/fs_atomic.ts +1 -1
- package/src/scripts/_lib/global_deploy_inventory.ts +1 -1
- package/src/scripts/_lib/install_layout.ts +1 -1
- package/src/scripts/_lib/install_regenerator.ts +1 -1
- package/src/scripts/_lib/installed_lock.ts +1 -1
- package/src/scripts/_lib/installed_tools.ts +1 -1
- package/src/scripts/_lib/json_pointers.ts +1 -1
- package/src/scripts/_lib/knowledge_global.ts +1 -1
- package/src/scripts/_lib/knowledge_global_promote.ts +2 -2
- package/src/scripts/_lib/knowledge_global_redaction.ts +2 -2
- package/src/scripts/_lib/link_crypto.ts +4 -4
- package/src/scripts/_lib/linked_projects.ts +4 -4
- package/src/scripts/_lib/model_tier.ts +1 -1
- package/src/scripts/_lib/module_detection.ts +2 -2
- package/src/scripts/_lib/pin_resolver.ts +1 -1
- package/src/scripts/_lib/script_output.ts +1 -1
- package/src/scripts/_lib/security_lint.ts +1 -1
- package/src/scripts/_lib/surface_tiers.ts +1 -1
- package/src/scripts/_lib/text_similarity.ts +1 -1
- package/src/scripts/_lib/update_check.ts +2 -2
- package/src/scripts/_lib/user_global_paths.ts +1 -1
- package/src/scripts/_lib/value_ladder.ts +1 -1
- package/src/scripts/_lib/value_report.ts +1 -1
- package/src/scripts/_lib/zip_min.ts +2 -2
- package/src/scripts/adoption_report.ts +3 -3
- package/src/scripts/adoption_snapshot.ts +3 -3
- package/src/scripts/adoption_status.ts +2 -2
- package/src/scripts/adr/regenerate_index.ts +3 -3
- package/src/scripts/ai_council/_default_prices.ts +2 -3
- package/src/scripts/ai_council/advisors.ts +1 -1
- package/src/scripts/ai_council/airgap.ts +1 -1
- package/src/scripts/ai_council/budget_guard.ts +1 -1
- package/src/scripts/ai_council/bundler.ts +1 -1
- package/src/scripts/ai_council/cli_hints.ts +1 -1
- package/src/scripts/ai_council/clients.ts +5 -5
- package/src/scripts/ai_council/compile_corpus.ts +1 -1
- package/src/scripts/ai_council/confidence_gate.ts +1 -1
- package/src/scripts/ai_council/config.ts +1 -1
- package/src/scripts/ai_council/consensus.ts +1 -1
- package/src/scripts/ai_council/events_log.ts +1 -1
- package/src/scripts/ai_council/learn_low_impact_preview.ts +1 -1
- package/src/scripts/ai_council/low_impact_corpus.ts +1 -1
- package/src/scripts/ai_council/low_impact_intake.ts +1 -1
- package/src/scripts/ai_council/modes.ts +1 -1
- package/src/scripts/ai_council/orchestrator.ts +3 -3
- package/src/scripts/ai_council/pricing.ts +2 -2
- package/src/scripts/ai_council/probation_gate.ts +2 -2
- package/src/scripts/ai_council/project_context.ts +1 -1
- package/src/scripts/ai_council/prompts.ts +1 -1
- package/src/scripts/ai_council/redact_low_impact_entry.ts +2 -2
- package/src/scripts/ai_council/session.ts +1 -1
- package/src/scripts/ai_council/shadow_dispatch.ts +1 -1
- package/src/scripts/ai_council/solo_dispatch.ts +1 -1
- package/src/scripts/analysis_freshness.ts +2 -2
- package/src/scripts/annotate_discovery.ts +2 -2
- package/src/scripts/apply_modules_config.ts +2 -2
- package/src/scripts/audit_adr_coverage.ts +3 -3
- package/src/scripts/audit_auto_rules.ts +2 -2
- package/src/scripts/audit_cloud_compatibility.ts +3 -3
- package/src/scripts/audit_command_surface.ts +2 -2
- package/src/scripts/audit_initial_context.ts +7 -6
- package/src/scripts/audit_likelihood.ts +5 -5
- package/src/scripts/audit_mcp_tools.ts +3 -3
- package/src/scripts/audit_overlap.ts +2 -2
- package/src/scripts/audit_skill_descriptions.ts +2 -2
- package/src/scripts/audit_skill_overlap.ts +5 -5
- package/src/scripts/audit_user_type_axis.ts +4 -4
- package/src/scripts/backfill_model_tier.ts +1 -1
- package/src/scripts/bench_ab_cache_dispatch.ts +2 -2
- package/src/scripts/bench_ab_clone.ts +2 -2
- package/src/scripts/bench_ab_diff.ts +3 -3
- package/src/scripts/bench_ab_integrity.ts +2 -2
- package/src/scripts/bench_ab_run.ts +4 -4
- package/src/scripts/bench_ab_task_runner.ts +1 -1
- package/src/scripts/bench_ab_tracka_run.ts +2 -2
- package/src/scripts/bench_ab_v2_run.ts +1 -1
- package/src/scripts/bench_ab_v2_stats.ts +2 -2
- package/src/scripts/bench_baseline_ready.ts +1 -1
- package/src/scripts/bench_condense_memory.ts +4 -4
- package/src/scripts/bench_drift_check.ts +3 -3
- package/src/scripts/bench_per_tool.ts +1 -1
- package/src/scripts/bench_rtk_savings.ts +4 -4
- package/src/scripts/bench_run.ts +4 -4
- package/src/scripts/bench_runner.ts +1 -1
- package/src/scripts/build_cloud_bundle.ts +3 -3
- package/src/scripts/build_discovery_manifest.ts +13 -15
- package/src/scripts/build_linear_digest.ts +2 -2
- package/src/scripts/build_mcp_registry_manifest.ts +3 -3
- package/src/scripts/build_proof.ts +6 -0
- package/src/scripts/build_rule_trigger_matrix.ts +2 -2
- package/src/scripts/capture_showcase_session.ts +3 -3
- package/src/scripts/chat_history.ts +1 -1
- package/src/scripts/check_always_budget.ts +1 -1
- package/src/scripts/check_artefact_checksums.ts +4 -4
- package/src/scripts/check_artefact_count_messaging.ts +197 -0
- package/src/scripts/check_augment_description_cap.ts +3 -3
- package/src/scripts/check_augmentignore.ts +1 -1
- package/src/scripts/check_beta_review_markers.ts +3 -3
- package/src/scripts/check_bite_sized_granularity.ts +1 -1
- package/src/scripts/check_cluster_patterns.ts +47 -3
- package/src/scripts/check_command_count_messaging.ts +2 -2
- package/src/scripts/check_condensation.ts +2 -2
- package/src/scripts/check_condensed_paths.ts +6 -6
- package/src/scripts/check_context_paths.ts +1 -1
- package/src/scripts/check_council_config_location.ts +3 -3
- package/src/scripts/check_council_layout.ts +2 -2
- package/src/scripts/check_council_references.ts +2 -2
- package/src/scripts/check_discovery_determinism.ts +3 -3
- package/src/scripts/check_gate_paths.ts +4 -4
- package/src/scripts/check_iron_law_prominence.ts +2 -2
- package/src/scripts/check_kernel_rule_bundle.ts +3 -3
- package/src/scripts/check_knowledge_cards.ts +4 -4
- package/src/scripts/check_knowledge_pages.ts +1 -1
- package/src/scripts/check_md_language.ts +3 -3
- package/src/scripts/check_memory.ts +3 -3
- package/src/scripts/check_memory_proposal.ts +2 -2
- package/src/scripts/check_module_management_neutral.ts +1 -1
- package/src/scripts/check_no_conflict_markers.ts +1 -1
- package/src/scripts/check_no_external_sources.ts +1 -1
- package/src/scripts/check_no_local_settings_committed.ts +2 -2
- package/src/scripts/check_no_new_legacy_path.ts +3 -3
- package/src/scripts/check_no_roadmap_refs.ts +3 -3
- package/src/scripts/check_one_off_location.ts +3 -3
- package/src/scripts/check_overlay_cascade_subdirs.ts +3 -3
- package/src/scripts/check_portability.ts +3 -3
- package/src/scripts/check_proposal.ts +0 -0
- package/src/scripts/check_public_catalog_links.ts +1 -1
- package/src/scripts/check_public_links.ts +2 -2
- package/src/scripts/check_references.ts +3 -3
- package/src/scripts/check_release_includes_discovery.ts +2 -2
- package/src/scripts/check_release_pr_shape.ts +2 -2
- package/src/scripts/check_release_published.ts +1 -1
- package/src/scripts/check_release_trunk_sync.ts +3 -3
- package/src/scripts/check_reply_consistency.ts +1 -1
- package/src/scripts/check_roadmap_trackable.ts +2 -2
- package/src/scripts/check_role_doc_links.ts +2 -2
- package/src/scripts/check_safety_floor_untouched.ts +3 -3
- package/src/scripts/check_skill_requires.ts +2 -2
- package/src/scripts/check_structural_breaking.ts +2 -2
- package/src/scripts/check_surface_tiers.ts +2 -2
- package/src/scripts/check_template_pin_drift.ts +1 -1
- package/src/scripts/check_test_coverage_diff.ts +2 -2
- package/src/scripts/check_token_optimizer_freshness.ts +3 -3
- package/src/scripts/check_trigger_evals.ts +2 -2
- package/src/scripts/check_update_banner.ts +1 -1
- package/src/scripts/ci_status.ts +0 -0
- package/src/scripts/ci_summary.ts +3 -3
- package/src/scripts/ci_time_ratio.ts +1 -1
- package/src/scripts/command_suggester/cooldown.ts +1 -1
- package/src/scripts/command_suggester/index.ts +1 -1
- package/src/scripts/command_suggester/loader.ts +1 -1
- package/src/scripts/command_suggester/match.ts +1 -1
- package/src/scripts/command_suggester/rank.ts +1 -1
- package/src/scripts/command_suggester/render.ts +1 -1
- package/src/scripts/command_suggester/sanitize.ts +1 -1
- package/src/scripts/command_suggester/settings.ts +1 -1
- package/src/scripts/command_suggester/types.ts +0 -0
- package/src/scripts/compile_router.ts +4 -4
- package/src/scripts/condense.ts +3 -3
- package/src/scripts/condense_memory.ts +1 -1
- package/src/scripts/config/index.ts +1 -1
- package/src/scripts/config/packs.ts +1 -1
- package/src/scripts/config/presets.ts +1 -1
- package/src/scripts/config/profile_explain.ts +1 -1
- package/src/scripts/config/profiles.ts +1 -1
- package/src/scripts/config/session_profiles.ts +1 -1
- package/src/scripts/context_hygiene_hook.ts +2 -2
- package/src/scripts/cost_by_conversation.ts +1 -1
- package/src/scripts/cost_summary.ts +2 -2
- package/src/scripts/council_cli.ts +1 -1
- package/src/scripts/council_prune.ts +1 -1
- package/src/scripts/cross_repo_retrieve.ts +2 -2
- package/src/scripts/discovery_stats.ts +3 -3
- package/src/scripts/evidence_report.ts +4 -4
- package/src/scripts/extract_audit_patterns.ts +2 -2
- package/src/scripts/first_run_gate_hook.ts +1 -1
- package/src/scripts/gen_discovery_baseline.ts +2 -2
- package/src/scripts/generate_capabilities_index.ts +2 -2
- package/src/scripts/generate_capability_matrix.ts +2 -2
- package/src/scripts/generate_catalog.ts +2 -2
- package/src/scripts/generate_command_flows.ts +2 -2
- package/src/scripts/generate_cookbook.ts +1 -1
- package/src/scripts/generate_index.ts +3 -3
- package/src/scripts/generate_ownership_matrix.ts +2 -2
- package/src/scripts/generate_pack_manifests.ts +2 -2
- package/src/scripts/generate_role_experiences_catalog.ts +3 -3
- package/src/scripts/hooks/block_no_verify.ts +2 -2
- package/src/scripts/hooks/dispatch_hook.ts +2 -2
- package/src/scripts/hooks/dispatch_issues.ts +1 -1
- package/src/scripts/hooks/envelope.ts +1 -1
- package/src/scripts/hooks/replay_hook.ts +1 -1
- package/src/scripts/hooks/state_io.ts +1 -1
- package/src/scripts/hooks_doctor.ts +1 -1
- package/src/scripts/hooks_status.ts +1 -1
- package/src/scripts/injection_scan_hook.ts +1 -1
- package/src/scripts/install.ts +145 -3
- package/src/scripts/inventory_abstraction_budget.ts +5 -5
- package/src/scripts/inventory_frontmatter.ts +1 -1
- package/src/scripts/inventory_meta_layers.ts +1 -1
- package/src/scripts/iron_law_sha.ts +1 -1
- package/src/scripts/knowledge_global_cli.ts +3 -3
- package/src/scripts/linked_projects_list.ts +1 -1
- package/src/scripts/lint_agent_security.ts +4 -4
- package/src/scripts/lint_agent_skill_names.ts +1 -1
- package/src/scripts/lint_agents_layout.ts +2 -2
- package/src/scripts/lint_agents_md.ts +3 -3
- package/src/scripts/lint_archived_skills.ts +2 -2
- package/src/scripts/lint_artefact_frontmatter.ts +2 -2
- package/src/scripts/lint_bench_ab.ts +2 -2
- package/src/scripts/lint_bench_corpus.ts +1 -1
- package/src/scripts/lint_command_flow_coverage.ts +1 -1
- package/src/scripts/lint_command_routing.ts +2 -2
- package/src/scripts/lint_command_tiers.ts +1 -1
- package/src/scripts/lint_command_verbs.ts +4 -4
- package/src/scripts/lint_commit_subjects.ts +2 -2
- package/src/scripts/lint_context_spine_usage.ts +3 -3
- package/src/scripts/lint_discovery_manifest.ts +4 -4
- package/src/scripts/lint_discovery_vocabulary.ts +2 -2
- package/src/scripts/lint_empty_roadmaps.ts +3 -3
- package/src/scripts/lint_eval_freshness.ts +2 -2
- package/src/scripts/lint_examples.ts +2 -2
- package/src/scripts/lint_explain_trace.ts +2 -2
- package/src/scripts/lint_featured_skills.ts +0 -0
- package/src/scripts/lint_flows.ts +5 -5
- package/src/scripts/lint_framework_leakage.ts +1 -1
- package/src/scripts/lint_framework_leakage_allowlist.json +10 -2
- package/src/scripts/lint_frontmatter_boilerplate.ts +2 -2
- package/src/scripts/lint_ghostwriter_source.ts +3 -3
- package/src/scripts/lint_global_paths.ts +1 -1
- package/src/scripts/lint_handoffs.ts +1 -1
- package/src/scripts/lint_hidden_unicode.ts +1 -1
- package/src/scripts/lint_hook_concern_budget.ts +2 -2
- package/src/scripts/lint_hook_manifest.ts +2 -2
- package/src/scripts/lint_instruction_smuggling.ts +1 -1
- package/src/scripts/lint_load_context.ts +2 -2
- package/src/scripts/lint_marketplace.ts +1 -1
- package/src/scripts/lint_marketplace_install_completeness.ts +2 -2
- package/src/scripts/lint_mcp_config_security.ts +1 -1
- package/src/scripts/lint_mcp_registry_manifest.ts +1 -1
- package/src/scripts/lint_media_policy_linkage.ts +3 -3
- package/src/scripts/lint_missions.ts +3 -3
- package/src/scripts/lint_model_tier_coverage.ts +3 -3
- package/src/scripts/lint_namespace.ts +2 -2
- package/src/scripts/lint_namespace_collisions.ts +2 -2
- package/src/scripts/lint_new_skill_gate.ts +3 -3
- package/src/scripts/lint_no_new_atomic_commands.ts +9 -6
- package/src/scripts/lint_no_python_twin_rationale.ts +102 -0
- package/src/scripts/lint_one_off_age.ts +2 -2
- package/src/scripts/lint_orchestration_dsl.ts +3 -3
- package/src/scripts/lint_orchestrator_auto_detect.ts +1 -1
- package/src/scripts/lint_pack_boundaries.ts +2 -2
- package/src/scripts/lint_pack_dependencies.ts +2 -2
- package/src/scripts/lint_pack_first_win.ts +2 -2
- package/src/scripts/lint_persona_governance.ts +3 -3
- package/src/scripts/lint_positioning.ts +1 -1
- package/src/scripts/lint_profile_overlay_set_only.ts +2 -2
- package/src/scripts/lint_readme_jargon.ts +2 -2
- package/src/scripts/lint_readme_size.ts +2 -2
- package/src/scripts/lint_regression.ts +3 -3
- package/src/scripts/lint_roadmap_ci_steps.ts +3 -3
- package/src/scripts/lint_roadmap_complexity.ts +1 -1
- package/src/scripts/lint_roadmap_later_disposition.ts +2 -2
- package/src/scripts/lint_role_experiences.ts +2 -2
- package/src/scripts/lint_rule_interactions.ts +1 -1
- package/src/scripts/lint_rule_tiers.ts +1 -1
- package/src/scripts/lint_showcase_sessions.ts +2 -2
- package/src/scripts/lint_skill_frontmatter_safety.ts +1 -1
- package/src/scripts/lint_skill_originality.ts +1 -1
- package/src/scripts/lint_skill_tools.ts +3 -3
- package/src/scripts/lint_ticket_buildable.ts +2 -2
- package/src/scripts/lint_topics_yaml.ts +3 -3
- package/src/scripts/lint_trust_coherence.ts +3 -3
- package/src/scripts/lint_value_dashboard.ts +3 -3
- package/src/scripts/lint_workflow_security.ts +3 -3
- package/src/scripts/lint_workspace_boundary.ts +2 -2
- package/src/scripts/mcp_parity_smoke.ts +1 -1
- package/src/scripts/mcp_render.ts +1 -1
- package/src/scripts/mcp_server/catalog.ts +1 -1
- package/src/scripts/mcp_server/index.ts +1 -1
- package/src/scripts/mcp_server/metadata.ts +1 -1
- package/src/scripts/mcp_server/prompts.ts +1 -1
- package/src/scripts/mcp_server/resources.ts +1 -1
- package/src/scripts/mcp_server/server.ts +1 -1
- package/src/scripts/mcp_server/telemetry.ts +1 -1
- package/src/scripts/mcp_server/tools.ts +1 -1
- package/src/scripts/mcp_telemetry_health.ts +1 -1
- package/src/scripts/mcp_telemetry_query.ts +3 -3
- package/src/scripts/mcp_telemetry_store.ts +3 -3
- package/src/scripts/measure_augment_budget.ts +2 -2
- package/src/scripts/measure_density.ts +2 -2
- package/src/scripts/measure_frugality_savings.ts +3 -3
- package/src/scripts/measure_markitdown_lift.ts +1 -1
- package/src/scripts/measure_patterns.ts +1 -1
- package/src/scripts/measure_projection_bytes.ts +1 -1
- package/src/scripts/measure_rule_budget.ts +1 -1
- package/src/scripts/measure_skill_reduction.ts +1 -1
- package/src/scripts/memory_hash.ts +1 -1
- package/src/scripts/memory_lookup.ts +6 -6
- package/src/scripts/memory_report.ts +1 -1
- package/src/scripts/memory_signal.ts +1 -1
- package/src/scripts/memory_status.ts +2 -2
- package/src/scripts/migrate_command_suggestions.ts +1 -1
- package/src/scripts/migrate_frontmatter_defaults.ts +1 -1
- package/src/scripts/mine_session.ts +3 -3
- package/src/scripts/minimal_safe_diff_hook.ts +2 -2
- package/src/scripts/move_artefact.ts +3 -3
- package/src/scripts/new_skill.ts +3 -3
- package/src/scripts/onboarding_gate_hook.ts +2 -2
- package/src/scripts/pack_mcp_content.ts +1 -1
- package/src/scripts/parity/replay.ts +3 -2
- package/src/scripts/pattern_share.ts +2 -2
- package/src/scripts/plan_physical_move.ts +3 -3
- package/src/scripts/prediction-pool/poisson_sim.ts +2 -2
- package/src/scripts/prediction-pool/pool_winsim.ts +2 -2
- package/src/scripts/prediction-pool/score_ev.ts +2 -2
- package/src/scripts/prepack-check.mjs +108 -5
- package/src/scripts/print_required_checks.ts +2 -2
- package/src/scripts/probe_projection_fidelity.ts +2 -2
- package/src/scripts/probe_skill_registration.ts +2 -2
- package/src/scripts/profile_staleness_hook.ts +2 -2
- package/src/scripts/profile_use.ts +2 -2
- package/src/scripts/project_thin_rules.ts +3 -3
- package/src/scripts/propose_modules_config.ts +2 -2
- package/src/scripts/prototype_lint_contradictions.ts +2 -2
- package/src/scripts/prove_pack_extractable.ts +1 -1
- package/src/scripts/readme_linter.ts +4 -4
- package/src/scripts/redact_hook_capture.ts +2 -2
- package/src/scripts/refine_ticket_detect.ts +1 -1
- package/src/scripts/release.ts +30 -19
- package/src/scripts/render_benchmark_md.ts +2 -2
- package/src/scripts/render_value_md.ts +2 -2
- package/src/scripts/roadmap_progress_hook.ts +1 -1
- package/src/scripts/router_telemetry.ts +1 -1
- package/src/scripts/run_skill_evals.ts +2 -2
- package/src/scripts/runtime_dispatcher.ts +1 -1
- package/src/scripts/runtime_handler.ts +1 -1
- package/src/scripts/runtime_registry.ts +3 -3
- package/src/scripts/score_skill_selection.ts +1 -1
- package/src/scripts/security_audit_config.ts +2 -2
- package/src/scripts/skill_collision_clusters.ts +1 -1
- package/src/scripts/skill_discovery.ts +1 -1
- package/src/scripts/skill_linter.ts +8 -7
- package/src/scripts/skill_overlap.ts +2 -2
- package/src/scripts/skill_preview.ts +1 -1
- package/src/scripts/skill_tools/audit_persona_coverage.ts +3 -3
- package/src/scripts/skill_tools/audit_user_type_coverage.ts +3 -3
- package/src/scripts/skill_tools/index.ts +1 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +3 -3
- package/src/scripts/skill_tools/score_skill_relevance.ts +3 -3
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +3 -3
- package/src/scripts/skill_trigger_eval.ts +2 -2
- package/src/scripts/skill_usage_collect.ts +2 -2
- package/src/scripts/skill_usage_report.ts +2 -2
- package/src/scripts/smoke_path_resolution.ts +2 -2
- package/src/scripts/smoke_quickstart.ts +4 -4
- package/src/scripts/snapshot_agent_outputs.ts +2 -2
- package/src/scripts/spotcheck_thin_root.ts +2 -2
- package/src/scripts/surface-tiers.yml +1 -0
- package/src/scripts/sync_agent_settings.ts +2 -2
- package/src/scripts/sync_github_metadata.ts +4 -4
- package/src/scripts/sync_gitignore.ts +3 -3
- package/src/scripts/sync_yaml_rt.ts +2 -2
- package/src/scripts/telegraph_stats.ts +1 -1
- package/src/scripts/tool_registry.ts +2 -2
- package/src/scripts/tools/adapter_errors.ts +1 -1
- package/src/scripts/tools/base_adapter.ts +1 -1
- package/src/scripts/tools/github_adapter.ts +1 -1
- package/src/scripts/tools/jira_adapter.ts +1 -1
- package/src/scripts/trigger_coverage.ts +2 -2
- package/src/scripts/update_counts.ts +68 -6
- package/src/scripts/update_prices.ts +3 -3
- package/src/scripts/validate_agent_settings.ts +3 -3
- package/src/scripts/validate_decision_engine.ts +2 -2
- package/src/scripts/validate_discovery_manifest.ts +3 -3
- package/src/scripts/validate_frontmatter.ts +5 -5
- package/src/scripts/validate_pack_yaml.ts +0 -0
- package/src/scripts/validate_safe_paths.ts +2 -2
- package/src/scripts/validate_telegraph_carveouts.ts +3 -3
- package/src/scripts/verify_before_complete_hook.ts +2 -2
- package/src/scripts/verify_physical_move.ts +2 -2
- package/src/scripts/wrapper_freshness_hook.ts +3 -3
- package/src/server/schemas/settings.ts +426 -0
- package/src/shared/settingsSurface.ts +184 -0
- package/src/shared/userMd/formAdapter.ts +86 -0
- package/src/shared/userMd/schema.ts +59 -0
- package/src/shared/userMd/utils.ts +91 -0
- package/dist/agent-src/commands/optimize-project.md +0 -243
- package/dist/ui/assets/index-BbWWuFrF.css +0 -1
- package/dist/ui/assets/index-UjcTG_9O.js +0 -40
- package/dist/ui/assets/index-UjcTG_9O.js.map +0 -1
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vendor-namespaced user-global path resolution.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript twin of `src/scripts/_lib/user_global_paths.py` (ADR-200,
|
|
5
|
+
* Phase 2 / Wave 1 batch B). Mirrors the Python module's public API
|
|
6
|
+
* exactly — same exported snake_case names, same semantics, same
|
|
7
|
+
* path-resolution behavior. Single source of truth for "where does this
|
|
8
|
+
* package keep user-global state on disk?".
|
|
9
|
+
*
|
|
10
|
+
* Resolution order:
|
|
11
|
+
*
|
|
12
|
+
* 1. `$EVENT4U_CONFIG_HOME` — full path override (testing + power users).
|
|
13
|
+
* 2. `~/.event4u/agent-config/` — vendor-namespaced source-of-truth.
|
|
14
|
+
*
|
|
15
|
+
* For backward compatibility during the transition, `legacy_xdg_root()`
|
|
16
|
+
* exposes the old `~/.config/agent-config/` path so loaders can read
|
|
17
|
+
* state written by pre-2.4 installs. Writers should never target the
|
|
18
|
+
* legacy path; the auto-migration shim copies state once into the new
|
|
19
|
+
* namespace.
|
|
20
|
+
*
|
|
21
|
+
* Contract — pure, read-only, never auto-creates directories
|
|
22
|
+
* (except `migrate_legacy_namespace`, which mirrors the Python shim).
|
|
23
|
+
*/
|
|
24
|
+
import * as fs from 'node:fs';
|
|
25
|
+
import * as os from 'node:os';
|
|
26
|
+
import * as path from 'node:path';
|
|
27
|
+
|
|
28
|
+
/** Environment map shape — mirrors Python's `Optional[dict]` env parameter. */
|
|
29
|
+
export type EnvMap = Record<string, string | undefined>;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Marker suffix for in-progress entry copies during migration. A copy
|
|
33
|
+
* that crashes mid-flight leaves `<name><suffix><pid>` behind so the
|
|
34
|
+
* next run can clean it up before retrying — instead of treating a
|
|
35
|
+
* partial subdir as a completed copy.
|
|
36
|
+
*
|
|
37
|
+
* Exported (despite the underscore) because the pytest suite accesses
|
|
38
|
+
* `user_global_paths._PARTIAL_SUFFIX`; the vitest port does the same.
|
|
39
|
+
*/
|
|
40
|
+
export const _PARTIAL_SUFFIX = '.event4u-partial-';
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Environment variable that overrides `event4u_root()` outright.
|
|
44
|
+
* Accepts a full path (`~` expanded). Primarily used by tests; power
|
|
45
|
+
* users may also point this at a custom location.
|
|
46
|
+
*/
|
|
47
|
+
export const EVENT4U_HOME_ENV = 'EVENT4U_CONFIG_HOME';
|
|
48
|
+
|
|
49
|
+
/** Vendor-namespaced default. Relative to the user's home directory. */
|
|
50
|
+
export const DEFAULT_EVENT4U_ROOT_RELATIVE = path.join('.event4u', 'agent-config');
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Legacy XDG-shaped default written by pre-2.4 installs. Read-only
|
|
54
|
+
* fallback during the transition; never the target of a write.
|
|
55
|
+
*/
|
|
56
|
+
export const LEGACY_XDG_ROOT_RELATIVE = path.join('.config', 'agent-config');
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Expand a leading `~` like Python's `Path.expanduser()`.
|
|
60
|
+
*
|
|
61
|
+
* Divergence candidate (flagged, not fixed): Python also expands
|
|
62
|
+
* `~user` via the pwd database; this port leaves `~user` unchanged
|
|
63
|
+
* (which is also Python's behavior when the user is unknown).
|
|
64
|
+
*/
|
|
65
|
+
function expanduser(p: string): string {
|
|
66
|
+
if (p === '~') {
|
|
67
|
+
return os.homedir();
|
|
68
|
+
}
|
|
69
|
+
if (p.startsWith('~/') || (process.platform === 'win32' && p.startsWith('~\\'))) {
|
|
70
|
+
return path.join(os.homedir(), p.slice(2));
|
|
71
|
+
}
|
|
72
|
+
return p;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Mirror of `pathlib.Path.is_absolute()`.
|
|
77
|
+
*
|
|
78
|
+
* On POSIX a path is absolute iff it has a root (`/...`). On Windows,
|
|
79
|
+
* pathlib requires BOTH a drive and a root (`C:\\...` or UNC) — unlike
|
|
80
|
+
* Node's `path.isAbsolute`, which accepts rootless `\\foo`. The Python
|
|
81
|
+
* semantics are replicated here.
|
|
82
|
+
*/
|
|
83
|
+
function is_absolute_like_python(p: string): boolean {
|
|
84
|
+
if (process.platform === 'win32') {
|
|
85
|
+
return /^[a-zA-Z]:[\\/]/.test(p) || /^([\\/]{2})[^\\/]+[\\/][^\\/]+/.test(p);
|
|
86
|
+
}
|
|
87
|
+
return p.startsWith('/');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Return the active user-global root directory.
|
|
92
|
+
*
|
|
93
|
+
* Honours `EVENT4U_CONFIG_HOME` first, falls back to
|
|
94
|
+
* `~/.event4u/agent-config/`. Never creates the directory.
|
|
95
|
+
*/
|
|
96
|
+
export function event4u_root(env?: EnvMap | null): string {
|
|
97
|
+
const env_map = env ?? process.env;
|
|
98
|
+
const override = env_map[EVENT4U_HOME_ENV];
|
|
99
|
+
if (override) {
|
|
100
|
+
return expanduser(override);
|
|
101
|
+
}
|
|
102
|
+
return path.join(os.homedir(), DEFAULT_EVENT4U_ROOT_RELATIVE);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Return the pre-2.4 user-global root at `~/.config/agent-config/`.
|
|
107
|
+
*
|
|
108
|
+
* Used by loaders during the transition to read settings, lockfiles,
|
|
109
|
+
* and keys written before the namespace migration ran. Writers MUST
|
|
110
|
+
* NOT target this path — only `event4u_root()` is a valid write
|
|
111
|
+
* target. Never creates the directory.
|
|
112
|
+
*/
|
|
113
|
+
export function legacy_xdg_root(): string {
|
|
114
|
+
return path.join(os.homedir(), LEGACY_XDG_ROOT_RELATIVE);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Resolve a named file/dir under the user-global root, with legacy fallback.
|
|
119
|
+
*
|
|
120
|
+
* Returns the new-namespace path if it exists on disk, otherwise the
|
|
121
|
+
* legacy XDG path if it exists, otherwise `null`. Callers that need
|
|
122
|
+
* the *write target* (regardless of existence) should use
|
|
123
|
+
* `path.join(event4u_root(), relative_name)` directly.
|
|
124
|
+
*
|
|
125
|
+
* `relative_name` is a forward-slash separated string (e.g.
|
|
126
|
+
* `"installed.lock"` or `"agents/global"`). It is treated as a
|
|
127
|
+
* path fragment relative to the chosen root; absolute paths are
|
|
128
|
+
* rejected with an `Error` (Python raises `ValueError`).
|
|
129
|
+
*/
|
|
130
|
+
export function resolve_with_fallback(
|
|
131
|
+
relative_name: string,
|
|
132
|
+
options: { env?: EnvMap | null } = {},
|
|
133
|
+
): string | null {
|
|
134
|
+
if (is_absolute_like_python(relative_name)) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
`resolve_with_fallback expects a relative path, got '${relative_name}'`,
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
const new_path = path.join(event4u_root(options.env ?? null), relative_name);
|
|
140
|
+
if (fs.existsSync(new_path)) {
|
|
141
|
+
return new_path;
|
|
142
|
+
}
|
|
143
|
+
const legacy_path = path.join(legacy_xdg_root(), relative_name);
|
|
144
|
+
if (fs.existsSync(legacy_path)) {
|
|
145
|
+
return legacy_path;
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Return the canonical write target for a named user-global file/dir.
|
|
152
|
+
*
|
|
153
|
+
* Always rooted at `event4u_root()` — writers never target the
|
|
154
|
+
* legacy XDG path. Caller is responsible for `mkdir -p` on the parent
|
|
155
|
+
* before writing. Never creates the directory itself.
|
|
156
|
+
*/
|
|
157
|
+
export function write_target(
|
|
158
|
+
relative_name: string,
|
|
159
|
+
options: { env?: EnvMap | null } = {},
|
|
160
|
+
): string {
|
|
161
|
+
if (is_absolute_like_python(relative_name)) {
|
|
162
|
+
throw new Error(`write_target expects a relative path, got '${relative_name}'`);
|
|
163
|
+
}
|
|
164
|
+
return path.join(event4u_root(options.env ?? null), relative_name);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Breadcrumb dropped into the legacy root after a successful migration.
|
|
169
|
+
* Tells the user where their state now lives and how to clean up. The
|
|
170
|
+
* legacy tree itself is never auto-deleted — only the user does that.
|
|
171
|
+
*/
|
|
172
|
+
export const MIGRATION_BREADCRUMB_NAME = 'MIGRATED.md';
|
|
173
|
+
|
|
174
|
+
const _BREADCRUMB_TEMPLATE = `# Migrated to \`~/.event4u/agent-config/\`
|
|
175
|
+
|
|
176
|
+
This directory (\`~/.config/agent-config/\`) is the **legacy** location
|
|
177
|
+
for \`event4u/agent-config\` user-global state. As of v2.4 the canonical
|
|
178
|
+
location is \`~/.event4u/agent-config/\`.
|
|
179
|
+
|
|
180
|
+
The migration shim has already copied your settings, keys, lockfiles,
|
|
181
|
+
and overrides into the new namespace. File modes (0600 on keys) were
|
|
182
|
+
preserved. Loaders prefer the new path but still read from this tree
|
|
183
|
+
as a fallback, so removing it is safe **once you've confirmed** the
|
|
184
|
+
new location is working.
|
|
185
|
+
|
|
186
|
+
## To clean up
|
|
187
|
+
|
|
188
|
+
\`\`\`bash
|
|
189
|
+
rm -rf ~/.config/agent-config
|
|
190
|
+
\`\`\`
|
|
191
|
+
|
|
192
|
+
## Why the move
|
|
193
|
+
|
|
194
|
+
\`~/.config/\` is a generic XDG-shaped directory shared by many tools.
|
|
195
|
+
\`~/.event4u/agent-config/\` is vendor-namespaced and avoids collisions
|
|
196
|
+
with unrelated CLIs. See
|
|
197
|
+
\`agents/roadmaps/road-to-event4u-namespace-and-claude-desktop.md\` for
|
|
198
|
+
the full rationale.
|
|
199
|
+
`;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Copy pre-2.4 user-global state from legacy XDG root into the new namespace.
|
|
203
|
+
*
|
|
204
|
+
* Idempotent and safe to call on every install / init. Returns `true`
|
|
205
|
+
* if a copy ran during this invocation, `false` when the migration
|
|
206
|
+
* was already complete or there was nothing to migrate.
|
|
207
|
+
*
|
|
208
|
+
* Contract (mirrors the Python shim):
|
|
209
|
+
*
|
|
210
|
+
* - Never auto-deletes the legacy tree — that's the user's call (the
|
|
211
|
+
* breadcrumb at `~/.config/agent-config/MIGRATED.md` documents it).
|
|
212
|
+
* - Preserves file modes (0600 key files stay 0600 after the copy)
|
|
213
|
+
* and timestamps, like `shutil.copytree(..., copy_function=copy2)`.
|
|
214
|
+
* - If the new root already exists with any content, the migration
|
|
215
|
+
* treats it as already-done and only writes the breadcrumb (if
|
|
216
|
+
* missing) — never overwrites new-namespace state.
|
|
217
|
+
* - If the legacy root is missing or empty, the function is a no-op.
|
|
218
|
+
* - Per-entry atomic write: each entry is copied to a sibling
|
|
219
|
+
* `<name>.event4u-partial-<pid>` and then renamed into the final
|
|
220
|
+
* name. If a previous run crashed mid-copy, the leftover
|
|
221
|
+
* `*.event4u-partial-*` siblings are cleaned up at the top of the
|
|
222
|
+
* next run before retrying — a partial directory is never mistaken
|
|
223
|
+
* for a completed copy.
|
|
224
|
+
*
|
|
225
|
+
* `legacy_root_override` is for tests; production callers omit it.
|
|
226
|
+
*/
|
|
227
|
+
export function migrate_legacy_namespace(
|
|
228
|
+
options: { env?: EnvMap | null; legacy_root_override?: string | null } = {},
|
|
229
|
+
): boolean {
|
|
230
|
+
const legacy_root = options.legacy_root_override ?? legacy_xdg_root();
|
|
231
|
+
const new_root = event4u_root(options.env ?? null);
|
|
232
|
+
|
|
233
|
+
let legacy_stat: fs.Stats;
|
|
234
|
+
try {
|
|
235
|
+
legacy_stat = fs.statSync(legacy_root);
|
|
236
|
+
} catch {
|
|
237
|
+
return false;
|
|
238
|
+
}
|
|
239
|
+
if (!legacy_stat.isDirectory()) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Skip the migrated-breadcrumb itself when checking for content so a
|
|
244
|
+
// second invocation does not loop on its own marker.
|
|
245
|
+
const legacy_entries = fs
|
|
246
|
+
.readdirSync(legacy_root)
|
|
247
|
+
.filter((name) => name !== MIGRATION_BREADCRUMB_NAME);
|
|
248
|
+
if (legacy_entries.length === 0) {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Real content check ignores partial-copy debris from a prior
|
|
253
|
+
// interrupted run; otherwise the breadcrumb would be written for
|
|
254
|
+
// a half-finished migration and retry would never run.
|
|
255
|
+
const new_has_content =
|
|
256
|
+
fs.existsSync(new_root) &&
|
|
257
|
+
fs.readdirSync(new_root).some((name) => !_is_partial_name(name));
|
|
258
|
+
if (new_has_content) {
|
|
259
|
+
_ensure_breadcrumb(legacy_root);
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
fs.mkdirSync(new_root, { recursive: true });
|
|
264
|
+
_purge_partial_entries(new_root);
|
|
265
|
+
|
|
266
|
+
for (const name of legacy_entries) {
|
|
267
|
+
const entry = path.join(legacy_root, name);
|
|
268
|
+
const target = path.join(new_root, name);
|
|
269
|
+
if (fs.existsSync(target)) {
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const staging = path.join(new_root, `${name}${_PARTIAL_SUFFIX}${process.pid}`);
|
|
273
|
+
if (fs.existsSync(staging)) {
|
|
274
|
+
_remove_path(staging);
|
|
275
|
+
}
|
|
276
|
+
if (fs.statSync(entry).isDirectory()) {
|
|
277
|
+
// Mirrors shutil.copytree(copy_function=copy2): modes are
|
|
278
|
+
// preserved by the copy; timestamps via preserveTimestamps.
|
|
279
|
+
fs.cpSync(entry, staging, { recursive: true, preserveTimestamps: true });
|
|
280
|
+
} else {
|
|
281
|
+
fs.copyFileSync(entry, staging);
|
|
282
|
+
// copy2 semantics: explicitly carry over mode + timestamps.
|
|
283
|
+
const src_stat = fs.statSync(entry);
|
|
284
|
+
fs.chmodSync(staging, src_stat.mode & 0o7777);
|
|
285
|
+
fs.utimesSync(staging, src_stat.atime, src_stat.mtime);
|
|
286
|
+
}
|
|
287
|
+
fs.renameSync(staging, target);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
_ensure_breadcrumb(legacy_root);
|
|
291
|
+
return true;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
function _is_partial_name(name: string): boolean {
|
|
295
|
+
return name.includes(_PARTIAL_SUFFIX);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** Remove `*.event4u-partial-*` leftovers from a previous interrupted run. */
|
|
299
|
+
function _purge_partial_entries(new_root: string): void {
|
|
300
|
+
for (const name of fs.readdirSync(new_root)) {
|
|
301
|
+
if (_is_partial_name(name)) {
|
|
302
|
+
_remove_path(path.join(new_root, name));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
function _remove_path(p: string): void {
|
|
308
|
+
let st: fs.Stats | null = null;
|
|
309
|
+
try {
|
|
310
|
+
st = fs.lstatSync(p);
|
|
311
|
+
} catch {
|
|
312
|
+
// Missing path — Python's unlink(missing_ok=True) tolerates this.
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
if (st.isDirectory() && !st.isSymbolicLink()) {
|
|
316
|
+
fs.rmSync(p, { recursive: true });
|
|
317
|
+
} else {
|
|
318
|
+
fs.rmSync(p, { force: true });
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/** Write the `MIGRATED.md` breadcrumb into `legacy_root` if absent. */
|
|
323
|
+
function _ensure_breadcrumb(legacy_root: string): void {
|
|
324
|
+
const breadcrumb = path.join(legacy_root, MIGRATION_BREADCRUMB_NAME);
|
|
325
|
+
if (fs.existsSync(breadcrumb)) {
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
fs.writeFileSync(breadcrumb, _BREADCRUMB_TEMPLATE, 'utf-8');
|
|
329
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command-line entry point for `/implement-ticket`.
|
|
3
|
+
*
|
|
4
|
+
* TypeScript twin of `work_engine/cli.py` (ADR-200 py2ts Phase 1 — work_engine
|
|
5
|
+
* TOP/integration layer). Public API names stay snake_case to mirror the Python
|
|
6
|
+
* module 1:1 (per ADR-200 — Python style is part of the contract).
|
|
7
|
+
*
|
|
8
|
+
* Minimal Option-A transport: the script loads a persisted state file, runs the
|
|
9
|
+
* dispatcher once, writes the updated state back, and prints either the delivery
|
|
10
|
+
* report (on SUCCESS) or the halt surface — directive plus numbered questions —
|
|
11
|
+
* on BLOCKED/PARTIAL.
|
|
12
|
+
*
|
|
13
|
+
* The script never edits code, runs tests, or opens pull requests. All of that
|
|
14
|
+
* is delegated to the agent via `@agent-directive:` markers.
|
|
15
|
+
*
|
|
16
|
+
* Layout (post P2.3 of `road-to-post-pr29-optimize.md`): this file is a thin
|
|
17
|
+
* orchestrator. The argument parser, state I/O, file-input builders, hook
|
|
18
|
+
* bootstrap, and stdout/stderr emitters live in their own leaf modules under
|
|
19
|
+
* `work_engine` — see `cli_args`, `state_io`, `input_builders`, `hook_bootstrap`,
|
|
20
|
+
* `emitters`, `errors`. Public names (`main`, `DEFAULT_STATE_FILE`) and the
|
|
21
|
+
* private surface (`_build_hook_registry`, `_CLIError`, `_load_or_build`, …) are
|
|
22
|
+
* re-exported here so existing imports continue to resolve.
|
|
23
|
+
*
|
|
24
|
+
* Exit codes:
|
|
25
|
+
*
|
|
26
|
+
* - `0` — flow reached SUCCESS; `state.report` printed.
|
|
27
|
+
* - `1` — flow halted BLOCKED; halt surface printed on stdout, the state file
|
|
28
|
+
* carries the updated `outcomes` and `questions` so the agent can resume.
|
|
29
|
+
* - `2` — argument or I/O error. The state file is *not* written in this case.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
import {
|
|
33
|
+
ArgparseExit,
|
|
34
|
+
DEFAULT_STATE_FILE,
|
|
35
|
+
LEGACY_STATE_FILE,
|
|
36
|
+
_FMT_V0,
|
|
37
|
+
_FMT_V1,
|
|
38
|
+
parse_args,
|
|
39
|
+
} from './cli_args.js';
|
|
40
|
+
import { Outcome } from './delivery_state.js';
|
|
41
|
+
import {
|
|
42
|
+
NotImplementedError,
|
|
43
|
+
ValueError,
|
|
44
|
+
assert_kind_supported,
|
|
45
|
+
dispatch,
|
|
46
|
+
load_directive_set,
|
|
47
|
+
select_directive_set,
|
|
48
|
+
} from './dispatcher.js';
|
|
49
|
+
import { _emit, _emit_halt } from './emitters.js';
|
|
50
|
+
import { _CLIError } from './errors.js';
|
|
51
|
+
import { _build_hook_registry, _register_chat_history_hooks } from './hook_bootstrap.js';
|
|
52
|
+
import { HookContext, HookEvent, HookRunner } from './hooks/index.js';
|
|
53
|
+
import {
|
|
54
|
+
_build_from_diff_file,
|
|
55
|
+
_build_from_file_file,
|
|
56
|
+
_build_from_prompt_file,
|
|
57
|
+
_load_or_build,
|
|
58
|
+
} from './input_builders.js';
|
|
59
|
+
import {
|
|
60
|
+
_load,
|
|
61
|
+
_maybe_raise_legacy_hint,
|
|
62
|
+
_read_json,
|
|
63
|
+
_save,
|
|
64
|
+
_sync_back,
|
|
65
|
+
_to_delivery,
|
|
66
|
+
_to_v0_dict,
|
|
67
|
+
} from './state_io.js';
|
|
68
|
+
import type { WorkState } from './state.js';
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Run one dispatch cycle against the persisted state.
|
|
72
|
+
*
|
|
73
|
+
* `argv` is taken as-is; pass `null` to fall back to `process.argv.slice(2)`
|
|
74
|
+
* (the usual entry-point contract).
|
|
75
|
+
*/
|
|
76
|
+
export function main(argv: string[] | null = null): number {
|
|
77
|
+
// The Python source does `_build_parser().parse_args(argv)`. The cli_args
|
|
78
|
+
// twin folds the parser into `parse_args`, which on `-h`/`--help` or any
|
|
79
|
+
// arg error sets `process.exitCode` and throws the `ArgparseExit` sentinel
|
|
80
|
+
// (mirroring argparse's `SystemExit`). main() converts that to its return
|
|
81
|
+
// code so the entry point and the test harness agree on the exit.
|
|
82
|
+
let args;
|
|
83
|
+
try {
|
|
84
|
+
args = parse_args(argv ?? process.argv.slice(2));
|
|
85
|
+
} catch (exc) {
|
|
86
|
+
if (exc instanceof ArgparseExit) {
|
|
87
|
+
return exc.code;
|
|
88
|
+
}
|
|
89
|
+
throw exc;
|
|
90
|
+
}
|
|
91
|
+
const state_file: string = args.state_file;
|
|
92
|
+
|
|
93
|
+
const runner = new HookRunner(_build_hook_registry(args));
|
|
94
|
+
|
|
95
|
+
let halt = runner.emit(
|
|
96
|
+
HookEvent.BEFORE_LOAD,
|
|
97
|
+
new HookContext({ state_file, args }),
|
|
98
|
+
);
|
|
99
|
+
if (halt !== null) {
|
|
100
|
+
return _emit_halt(halt, { state_file, event: 'BEFORE_LOAD' });
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let work: WorkState;
|
|
104
|
+
let fmt: string;
|
|
105
|
+
try {
|
|
106
|
+
[work, fmt] = _load_or_build(state_file, args);
|
|
107
|
+
} catch (exc) {
|
|
108
|
+
if (exc instanceof _CLIError) {
|
|
109
|
+
process.stderr.write(`error: ${exc.message}\n`);
|
|
110
|
+
return 2;
|
|
111
|
+
}
|
|
112
|
+
throw exc;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
halt = runner.emit(
|
|
116
|
+
HookEvent.AFTER_LOAD,
|
|
117
|
+
new HookContext({ state_file, work, fmt, args }),
|
|
118
|
+
);
|
|
119
|
+
if (halt !== null) {
|
|
120
|
+
return _emit_halt(halt, { work, state_file, event: 'AFTER_LOAD' });
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
let set_name: string;
|
|
124
|
+
let steps;
|
|
125
|
+
try {
|
|
126
|
+
set_name = select_directive_set(work);
|
|
127
|
+
assert_kind_supported(work.input.kind, set_name);
|
|
128
|
+
steps = load_directive_set(set_name);
|
|
129
|
+
} catch (exc) {
|
|
130
|
+
if (exc instanceof ValueError || exc instanceof NotImplementedError) {
|
|
131
|
+
process.stderr.write(`error: ${exc.message}\n`);
|
|
132
|
+
return 2;
|
|
133
|
+
}
|
|
134
|
+
throw exc;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const delivery = _to_delivery(work);
|
|
138
|
+
|
|
139
|
+
halt = runner.emit(
|
|
140
|
+
HookEvent.BEFORE_DISPATCH,
|
|
141
|
+
new HookContext({ work, delivery, set_name, args }),
|
|
142
|
+
);
|
|
143
|
+
if (halt !== null) {
|
|
144
|
+
return _emit_halt(halt, { work, state_file, event: 'BEFORE_DISPATCH' });
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
const [final, halting] = dispatch(delivery, steps, runner);
|
|
148
|
+
|
|
149
|
+
halt = runner.emit(
|
|
150
|
+
HookEvent.AFTER_DISPATCH,
|
|
151
|
+
new HookContext({ work, delivery, final, halting, args }),
|
|
152
|
+
);
|
|
153
|
+
if (halt !== null) {
|
|
154
|
+
return _emit_halt(halt, { work, state_file, event: 'AFTER_DISPATCH' });
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
_sync_back(work, delivery);
|
|
158
|
+
|
|
159
|
+
halt = runner.emit(
|
|
160
|
+
HookEvent.BEFORE_SAVE,
|
|
161
|
+
new HookContext({ work, delivery, fmt, args }),
|
|
162
|
+
);
|
|
163
|
+
if (halt !== null) {
|
|
164
|
+
return _emit_halt(halt, { work, state_file, event: 'BEFORE_SAVE' });
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
_save(state_file, work, fmt);
|
|
168
|
+
|
|
169
|
+
halt = runner.emit(
|
|
170
|
+
HookEvent.AFTER_SAVE,
|
|
171
|
+
new HookContext({ work, state_file, fmt, args }),
|
|
172
|
+
);
|
|
173
|
+
if (halt !== null) {
|
|
174
|
+
// State is already on disk; exit 2 still per the P3 branch table.
|
|
175
|
+
return _emit_halt(halt, { work, state_file, event: 'AFTER_SAVE' });
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
_emit(work, final, halting);
|
|
179
|
+
return final === Outcome.SUCCESS ? 0 : 1;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Re-export the leaf-module surface so existing imports / patch targets that
|
|
183
|
+
// reached for `work_engine.cli.<name>` continue to resolve (mirrors the Python
|
|
184
|
+
// `__all__`).
|
|
185
|
+
export {
|
|
186
|
+
DEFAULT_STATE_FILE,
|
|
187
|
+
LEGACY_STATE_FILE,
|
|
188
|
+
_CLIError,
|
|
189
|
+
_FMT_V0,
|
|
190
|
+
_FMT_V1,
|
|
191
|
+
_build_from_diff_file,
|
|
192
|
+
_build_from_file_file,
|
|
193
|
+
_build_from_prompt_file,
|
|
194
|
+
_build_hook_registry,
|
|
195
|
+
_emit,
|
|
196
|
+
_emit_halt,
|
|
197
|
+
_load,
|
|
198
|
+
_load_or_build,
|
|
199
|
+
_maybe_raise_legacy_hint,
|
|
200
|
+
_read_json,
|
|
201
|
+
_register_chat_history_hooks,
|
|
202
|
+
_save,
|
|
203
|
+
_sync_back,
|
|
204
|
+
_to_delivery,
|
|
205
|
+
_to_v0_dict,
|
|
206
|
+
};
|