@event4u/agent-config 9.28.0 → 9.29.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.
Files changed (147) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/AGENTS.md +6 -6
  3. package/CHANGELOG.md +66 -0
  4. package/README.md +1 -1
  5. package/agents/templates/.ai-council.yml.example +55 -24
  6. package/dist/agent-src/commands/cost/report.md +2 -2
  7. package/dist/agent-src/commands/team/adversarial.md +8 -7
  8. package/dist/agent-src/commands/team/delegate.md +13 -12
  9. package/dist/agent-src/commands/team/review.md +9 -8
  10. package/dist/agent-src/commands/team/status.md +9 -8
  11. package/dist/agent-src/commands/team.md +29 -19
  12. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +88 -2
  13. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +29 -21
  14. package/dist/agent-src/contexts/execution/host-capability-manifest.md +26 -15
  15. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +18 -0
  16. package/dist/agent-src/contexts/execution/subagent-response-contract.md +54 -0
  17. package/dist/agent-src/contexts/execution/subagent-routing.md +13 -11
  18. package/dist/agent-src/contexts/execution/subagent-spawn-contract.md +25 -0
  19. package/dist/agent-src/contexts/execution/subagent-steering.md +6 -3
  20. package/dist/agent-src/rules/delegation-policy.md +11 -7
  21. package/dist/agent-src/rules/settings-ask-protocol.md +8 -7
  22. package/dist/agent-src/rules/token-budget-discipline.md +1 -1
  23. package/dist/agent-src/skills/forensics-report/SKILL.md +114 -0
  24. package/dist/agent-src/skills/forensics-report/evals/triggers.json +17 -0
  25. package/dist/agent-src/skills/premortem/SKILL.md +30 -1
  26. package/dist/agent-src/skills/reasoning-orchestrator/SKILL.md +2 -1
  27. package/dist/agent-src/skills/subagent-orchestration/SKILL.md +7 -5
  28. package/dist/agent-src/skills/subagent-orchestration/schemas/subagent-status.json +61 -3
  29. package/dist/agent-src/skills/test-case-discovery/SKILL.md +1 -1
  30. package/dist/agent-src/templates/AGENTS.md +4 -4
  31. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  32. package/dist/agent-src/templates/roadmaps.md +23 -0
  33. package/dist/cli-delegate/{chunk-22GCIJ2O.js → chunk-66OVWGB5.js} +1 -1
  34. package/dist/cli-delegate/{chunk-GB2FSUEE.js → chunk-LCFJIQ4J.js} +32 -0
  35. package/dist/cli-delegate/{chunk-VSYT7OHO.js → chunk-LVRYBKTI.js} +31 -2
  36. package/dist/cli-delegate/{chunk-DVRS2KVR.js → chunk-MMXA5GY7.js} +10 -17
  37. package/dist/cli-delegate/{chunk-JXARCGVN.js → chunk-MP3JT3IU.js} +1 -1
  38. package/dist/cli-delegate/{chunk-PQSAQKHW.js → chunk-NZ5N2XQL.js} +3 -3
  39. package/dist/cli-delegate/{chunk-7OMQCH4V.js → chunk-OJM3MBJM.js} +1 -1
  40. package/dist/cli-delegate/{chunk-2BE5I2MN.js → chunk-RCIA67XN.js} +111 -90
  41. package/dist/cli-delegate/cmd_analyze_session.js +1 -1
  42. package/dist/cli-delegate/cmd_brand_status.js +1 -1
  43. package/dist/cli-delegate/cmd_conformance.js +6 -43
  44. package/dist/cli-delegate/cmd_doctor.js +9 -5
  45. package/dist/cli-delegate/cmd_explain.js +2 -2
  46. package/dist/cli-delegate/cmd_export.js +4 -4
  47. package/dist/cli-delegate/cmd_handoff.js +3 -3
  48. package/dist/cli-delegate/cmd_mcp_available.js +1 -1
  49. package/dist/cli-delegate/cmd_migrate.js +2 -2
  50. package/dist/cli-delegate/cmd_packs_active.js +2 -2
  51. package/dist/cli-delegate/cmd_prune.js +4 -4
  52. package/dist/cli-delegate/cmd_route_audit.js +2 -2
  53. package/dist/cli-delegate/cmd_route_explain.js +1 -1
  54. package/dist/cli-delegate/cmd_settings_get.js +1 -7
  55. package/dist/cli-delegate/cmd_settings_migrate.js +4 -4
  56. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  57. package/dist/cli-delegate/cmd_sync.js +4 -4
  58. package/dist/cli-delegate/cmd_uninstall.js +4 -4
  59. package/dist/cli-delegate/cmd_update.js +1 -1
  60. package/dist/cli-delegate/cmd_upgrade.js +1 -1
  61. package/dist/cli-delegate/cmd_validate.js +4 -4
  62. package/dist/cli-delegate/cmd_versions.js +1 -1
  63. package/dist/discovery/deprecation-report.md +1 -1
  64. package/dist/discovery/discovery-manifest.json +69 -20
  65. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  66. package/dist/discovery/discovery-manifest.summary.md +3 -2
  67. package/dist/discovery/orphan-report.md +1 -1
  68. package/dist/discovery/packs.json +39 -2
  69. package/dist/discovery/trust-report.md +2 -2
  70. package/dist/discovery/workspaces.json +12 -4
  71. package/dist/hooks/dispatch.js +373 -35
  72. package/dist/install/install.mjs +42 -17
  73. package/dist/mcp/registry-manifest.json +2 -2
  74. package/dist/mcp/server.json +2 -2
  75. package/dist/mcp/server.mjs +651 -262
  76. package/dist/router.json +1 -1
  77. package/dist/scripts/_lib/agent_settings.js +54 -0
  78. package/dist/scripts/_lib/agent_settings.js.map +1 -1
  79. package/dist/scripts/condense.js +147 -2
  80. package/dist/scripts/condense.js.map +1 -1
  81. package/dist/server/schemas/settings.js +6 -7
  82. package/dist/server/schemas/settings.js.map +1 -1
  83. package/dist/shared/settingsCarveOut.js +0 -9
  84. package/dist/shared/settingsCarveOut.js.map +1 -1
  85. package/dist/shared/settingsClasses.js +11 -9
  86. package/dist/shared/settingsClasses.js.map +1 -1
  87. package/dist/ui/assets/{index-DmR0mbk4.js → index-JDAF00bC.js} +2 -2
  88. package/dist/ui/assets/{index-DmR0mbk4.js.map → index-JDAF00bC.js.map} +1 -1
  89. package/dist/ui/index.html +1 -1
  90. package/docs/contracts/settings-classes.md +39 -9
  91. package/package.json +1 -1
  92. package/src/agent-src/templates/AGENTS.md +4 -4
  93. package/src/config/agent-settings.template.yml +52 -66
  94. package/src/config/discovery/packs.yml +11 -0
  95. package/src/config/discovery/workspaces.yml +1 -1
  96. package/src/config/gate-violation-baselines.json +3 -3
  97. package/src/scripts/_cli/cmd_conformance.ts +14 -42
  98. package/src/scripts/_cli/cmd_doctor.ts +65 -48
  99. package/src/scripts/_lib/agent_settings.ts +58 -0
  100. package/src/scripts/_lib/auto_dispatch.corpus.test.ts +1 -1
  101. package/src/scripts/_lib/auto_dispatch.ts +23 -18
  102. package/src/scripts/_lib/capsule_trigger.ts +124 -0
  103. package/src/scripts/_lib/host_capability.ts +63 -6
  104. package/src/scripts/_lib/judgment_ladder.ts +382 -0
  105. package/src/scripts/_lib/orchestration_gate.ts +8 -0
  106. package/src/scripts/_lib/orchestration_record.ts +37 -0
  107. package/src/scripts/_lib/orchestration_savings.ts +1 -1
  108. package/src/scripts/_lib/self_repair.ts +160 -13
  109. package/src/scripts/_lib/self_repair_store.ts +28 -0
  110. package/src/scripts/_lib/subagent_capsule.ts +182 -0
  111. package/src/scripts/_lib/subagent_response.ts +19 -0
  112. package/src/scripts/_lib/subagent_spawn.ts +13 -0
  113. package/src/scripts/_lib/subagent_steering.ts +9 -4
  114. package/src/scripts/_lib/tier_budget_routing.ts +6 -1
  115. package/src/scripts/_lib/worker_budget.ts +37 -2
  116. package/src/scripts/ai_council/clients.ts +76 -54
  117. package/src/scripts/ai_council/config.ts +94 -6
  118. package/src/scripts/ai_council/handoff.ts +113 -0
  119. package/src/scripts/ai_council/modes.ts +19 -4
  120. package/src/scripts/ai_council/orchestrator.ts +105 -0
  121. package/src/scripts/ai_council/quorum.ts +84 -0
  122. package/src/scripts/ai_council/session.ts +44 -0
  123. package/src/scripts/ai_council/transport_resolver.ts +127 -1
  124. package/src/scripts/ai_team/availability.ts +110 -0
  125. package/src/scripts/ai_team/config.ts +34 -14
  126. package/src/scripts/ai_team/team_dispatch.ts +71 -29
  127. package/src/scripts/bench_critic_protocol.ts +396 -0
  128. package/src/scripts/check_detector_corpus.ts +202 -0
  129. package/src/scripts/check_hook_bundle_freshness.ts +4 -1
  130. package/src/scripts/condense.ts +162 -2
  131. package/src/scripts/council_cli.ts +401 -25
  132. package/src/scripts/forensics_report.ts +333 -0
  133. package/src/scripts/hooks/delegation_nudge_hook.ts +69 -35
  134. package/src/scripts/lint_discovery_vocabulary.ts +2 -0
  135. package/src/scripts/lint_never_silent.ts +276 -0
  136. package/src/scripts/lint_no_activation_gates.ts +271 -0
  137. package/src/scripts/orchestration_record.ts +8 -0
  138. package/src/scripts/rebuild_hook_bundle.ts +177 -0
  139. package/src/scripts/release.ts +74 -2
  140. package/src/scripts/routing_doctor.ts +21 -36
  141. package/src/scripts/score_skill_selection.ts +19 -5
  142. package/src/scripts/self_repair_cli.ts +287 -57
  143. package/src/scripts/team_events_spike.ts +271 -0
  144. package/src/scripts/team_review_gate_hook.ts +31 -9
  145. package/src/server/schemas/settings.ts +10 -17
  146. package/src/shared/settingsCarveOut.ts +0 -10
  147. package/src/shared/settingsClasses.ts +11 -9
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: forensics-report
3
+ description: "Use when a release review needs machine-derived evidence from git history — hotspot risk and change-coupling analyzers. Triggers on 'hotspot', 'what changes together', 'release forensics'."
4
+ domain: engineering
5
+ model_tier: medium
6
+ workspaces:
7
+ - engineering
8
+ packs:
9
+ - forensics
10
+ lifecycle: experimental
11
+ trust:
12
+ level: experimental
13
+ install:
14
+ default: false
15
+ removable: true
16
+ ---
17
+
18
+ # forensics-report
19
+
20
+ ## When to use
21
+
22
+ - Before or during a **release review**, when machine-derived evidence is
23
+ wanted alongside the human review: "which files are the risk hotspots in
24
+ this release", "what changes together", "release forensics".
25
+ - When intended module boundaries should be checked against what the git
26
+ history actually shows (change-coupling across module lines).
27
+ - The output is **advisory, never a gate** — it points reviewers at places
28
+ worth attention; it never passes or fails anything.
29
+ - NOT for IT-security incident forensics (route to `incident-commander`) and
30
+ NOT for runtime performance hotspots (route to `performance-analysis`).
31
+
32
+ ## Procedure
33
+
34
+ 1. **Pick the range** — the previous release tag to HEAD (`vPREV..HEAD`) or a
35
+ released pair (`vPREV..vNEW`). Pin the range explicitly; a floating range
36
+ breaks determinism.
37
+ 2. **Run the report:**
38
+
39
+ ```bash
40
+ npx tsx node_modules/@event4u/agent-config/src/scripts/forensics_report.ts --range vPREV..vNEW --out report.json
41
+ ```
42
+
43
+ Two deterministic, git-log-based analyzers run, read-only and offline:
44
+ - **Hotspot risk** = normalized change frequency x normalized complexity
45
+ per file over the range.
46
+ - **Change-coupling** = `co_changes(A,B) / min(changes(A), changes(B))`
47
+ per file pair.
48
+ 3. **Optionally feed the release findings ledger:** add
49
+ `--findings-out findings.json`, then ingest via
50
+
51
+ ```bash
52
+ npx tsx node_modules/@event4u/agent-config/src/scripts/check_finding_dispositions.ts --ingest findings.json --release X.Y.Z
53
+ ```
54
+
55
+ which appends to the existing ledger at
56
+ `agents/evidence/release-findings/<version>.json`. Emitted findings are
57
+ `kind: correctness` with `severity: low|medium` — non-blocking for the
58
+ release gate by construction.
59
+ 4. **Read the results:**
60
+ - `hotspots[]` — a hotspot is a place for reviewer attention, NEVER a
61
+ quality verdict. A frequently changed complex file can be exactly right
62
+ as it is; the score says "look here", not "this is bad".
63
+ - `coupling[]` — file pairs that habitually change together.
64
+ - `boundary_contradictions[]` — cross-module coupling above the threshold,
65
+ i.e. a contradiction between intended and actual boundaries. This is a
66
+ finding CLASS to discuss, not a failure.
67
+
68
+ ## Output format
69
+
70
+ 1. Lead with the scanned denominator (`scanned.commits` / `scanned.files`, including skipped bulk commits) — a reader must be able to judge the sample before the findings.
71
+ 2. Present hotspots and coupling as ranked tables with the score interpretation line ("a place to look, not a quality verdict") attached.
72
+ 3. When `--findings-out` was used, state the ingest command and the ledger path the findings landed in.
73
+
74
+ Deterministic JSON with these fields:
75
+
76
+ | Field | Meaning |
77
+ |---|---|
78
+ | `mode` | analyzer mode the run used |
79
+ | `range` | the pinned rev-range analyzed |
80
+ | `scanned` | commit/file counts, including skipped bulk commits |
81
+ | `params` | thresholds and normalization parameters in effect |
82
+ | `hotspots[]` | per-file hotspot entries (path, frequency, complexity, score) |
83
+ | `coupling[]` | file-pair coupling entries (paths, co-change ratio) |
84
+ | `boundary_contradictions[]` | cross-module coupling hits above threshold |
85
+
86
+ Findings emitted via `--findings-out` conform to
87
+ `review-findings.schema.json` (shipped with the package; `kind: correctness`,
88
+ `severity: low|medium`).
89
+
90
+ ## Gotchas
91
+
92
+ - **Bulk commits are coupling noise** — commits touching more than
93
+ `max_commit_files` files (default 50) are skipped by the coupling analyzer
94
+ and counted in the report's `scanned` section.
95
+ - **Only git log + working-tree file metrics are read** — renamed files
96
+ appear as two separate paths, splitting their history across both.
97
+ - **Deterministic only with a pinned range** — `vPREV..vNEW` reproduces;
98
+ "since today" or a date-relative range does not.
99
+
100
+ ## Do NOT
101
+
102
+ - Do NOT build a gate out of this report — the pre-registered value question
103
+ in `docs/CLAIMS.md` (`forensics-pack-value`) decides promotion or closure;
104
+ until then the output stays advisory.
105
+ - Do NOT sell hotspot scores as a code-quality proxy — they measure change
106
+ frequency and complexity, not correctness or craftsmanship.
107
+ - Do NOT emit findings with `severity: high|critical` or
108
+ `kind: security|claim` — that would block the release gate, which this
109
+ analyzer must never do.
110
+
111
+ ## See also
112
+
113
+ - `forensics_report.ts` (this package's scripts tree; consumer path `node_modules/@event4u/agent-config/src/scripts/forensics_report.ts`) — the analyzer implementation.
114
+ - `docs/CLAIMS.md` — the pre-registered `forensics-pack-value` question.
@@ -0,0 +1,17 @@
1
+ {
2
+ "skill": "forensics-report",
3
+ "last_eval": "2026-08-09",
4
+ "description": "5 should-trigger + 5 should-not-trigger. Should-trigger covers DE+EN phrasings for git-history release forensics (hotspot risk, change-coupling, release-review evidence). Should-not-trigger covers near-miss neighbours: security incident forensics (incident-commander), plain git log, runtime performance hotspots (performance-analysis), line blame, security audit.",
5
+ "queries": [
6
+ { "q": "which files are the riskiest hotspots in this release", "trigger": true },
7
+ { "q": "what files always change together", "trigger": true },
8
+ { "q": "run the forensics report for the release review", "trigger": true },
9
+ { "q": "zeig mir hotspot und coupling evidenz für das release", "trigger": true },
10
+ { "q": "machine-derived evidence for the release review", "trigger": true },
11
+ { "q": "do a forensic analysis of the security incident from last night", "trigger": false },
12
+ { "q": "show me the git log for the last week", "trigger": false },
13
+ { "q": "find the performance hotspots in production at runtime", "trigger": false },
14
+ { "q": "who wrote this line — run git blame on it", "trigger": false },
15
+ { "q": "run a security audit on the auth module", "trigger": false }
16
+ ]
17
+ }
@@ -80,6 +80,31 @@ For each top failure mode (sorted by L × I from `risk-officer`):
80
80
  rollout strategy that reduces the likelihood of this failure mode. Keep it
81
81
  executable; flag as `accept` if no practical guardrail exists.
82
82
 
83
+ ### 3b. Compress into the four-part failure register
84
+
85
+ When the pre-mortem accompanies a plan artefact (a roadmap, an ADR, a design
86
+ doc), compress the analysis into the **four-part failure register** — the
87
+ fixed, comparable shape the roadmap template's optional `## Pre-mortem`
88
+ section consumes:
89
+
90
+ 1. **Three most probable causes of death, ranked** — one paragraph each,
91
+ naming the concrete mechanism by which the plan most plausibly dies.
92
+ Mechanisms, not topics: "the gate's two inputs are unmeasurable from this
93
+ corpus" is a cause; "measurement risk" is not.
94
+ 2. **One untested hidden dependency** — the assumption the plan relies on but
95
+ never tests.
96
+ 3. **One modification that makes failure survivable** — a concrete plan change
97
+ that converts a fatal outcome into a recoverable one.
98
+ 4. **One tripwire metric with a horizon** — a measurable signal plus a
99
+ threshold and deadline that says early that cause #1 is materializing.
100
+
101
+ The register was validated blind against this repo's own closed nulls
102
+ (3 of 4 registers named the actual failure cause at rank 1 —
103
+ `agents/evidence/analysis/premortem-blind-retro-validation.md`). The hits were
104
+ all failures of *measurability*; the miss was a mechanism that worked but
105
+ added nothing — weight the register toward "can this experiment answer its
106
+ question" and state redundancy risks explicitly.
107
+
83
108
  ### 4. Optional memory write-back
84
109
 
85
110
  If the analysis surfaces a pattern worth preserving for future decisions:
@@ -96,7 +121,11 @@ If the analysis surfaces a pattern worth preserving for future decisions:
96
121
  1. **Ranked prospective failure modes** — L × I ordered list (from `risk-officer`)
97
122
  2. **Early-warning signal per failure mode** — concrete, observable indicator
98
123
  3. **Preventive guardrails** — one per failure mode (or `accept` with rationale)
99
- 4. **Optional memory candidate** — drafted to `/memory propose` if the pattern
124
+ 4. **Four-part failure register** (when accompanying a plan artefact) — three
125
+ ranked causes of death · one untested hidden dependency · one
126
+ survivable-failure modification · one tripwire metric with a horizon
127
+ (step 3b; feeds the roadmap template's optional `## Pre-mortem` section)
128
+ 5. **Optional memory candidate** — drafted to `/memory propose` if the pattern
100
129
  clears the admission gate (≥ 2 distinct file paths OR ≥ 3 future decisions)
101
130
 
102
131
  ## Do NOT
@@ -82,7 +82,8 @@ Each link **delegates** to the artifact that owns it (no duplication):
82
82
  ([`complexity-first-planning`](../complexity-first-planning/SKILL.md)); dispatch
83
83
  independent subtasks async ([`subagent-orchestration` § RDP](../subagent-orchestration/SKILL.md)),
84
84
  auto-triggered by the [`delegation-policy`](../../rules/delegation-policy.md) rule
85
- (gates on `subagents.enabled`/`auto` + host manifest).
85
+ (gates on the emergency incident switch + host manifest — always-on
86
+ orchestration carries no per-layer on/off setting).
86
87
  5. **audit** — check progress against real tool results
87
88
  ([`verify-before-complete`](../../rules/verify-before-complete.md)).
88
89
  6. **verify** — fresh-context verifier on the structural-complexity gate
@@ -56,15 +56,17 @@ parallel subagents **by default** and keep working while they run (async), rathe
56
56
  than blocking on each return — intervene only if one goes off track. Engage per
57
57
  [`rdp-gate`](../../contexts/execution/rdp-gate.md).
58
58
 
59
- ### Settings-gated auto-dispatch
59
+ ### Always-on auto-dispatch
60
60
 
61
61
  "By default" is governed by the [`delegation-policy`](../../rules/delegation-policy.md)
62
62
  rule — the single source of the auto-trigger. It gates on the activation context
63
63
  ([`auto-orchestration-activation`](../../contexts/execution/auto-orchestration-activation.md)):
64
- dispatch only when `subagents.enabled`, `subagents.auto != off`, the host
64
+ dispatch only when `emergency.orchestration_halt` is not set, the host
65
65
  manifest reports `subagent_spawn: true`, and the task is classified delegable.
66
- `auto: ask` → ask once; `auto: on` → surface mode + per-subtask tiers in one
67
- line; any gate failing → in-session no-op. Never lifts a safety floor.
66
+ A matched signal → dispatch, surfacing mode + per-subtask tiers in one line;
67
+ an ambiguous verdict → ask, always; any gate failing → in-session no-op.
68
+ There is no more per-layer on/off setting (always-on orchestration). Never
69
+ lifts a safety floor.
68
70
 
69
71
  ## Worker-prompt contract
70
72
 
@@ -326,7 +328,7 @@ After every auto-dispatched run, write one audit-log-v1 line
326
328
  never hand-author the JSON. Line shape, field semantics, recorder
327
329
  invocation, and `token_delta` sourcing priority →
328
330
  [`orchestration-telemetry` § Emit procedure](../../agent-src/contexts/execution/orchestration-telemetry.md).
329
- Skip emit when `subagents.enabled: false` or `spawn_count == 0`
331
+ Skip emit when `emergency.orchestration_halt` is set or `spawn_count == 0`
330
332
  (in-session run).
331
333
 
332
334
  ## Gotcha
@@ -2,15 +2,15 @@
2
2
  "$schema": "https://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://event4u.dev/agent-config/schemas/subagent-status.json",
4
4
  "title": "Subagent Status Envelope",
5
- "description": "Required wire format for every implementer or judge subagent return. Loaded by /do-and-judge, /do-in-steps, and the subagent-orchestration skill. Hand-validated by tests/test_subagent_status_schema.py (no jsonschema runtime dep).",
5
+ "description": "Required wire format for every implementer or judge subagent return. Loaded by /do-and-judge, /do-in-steps, and the subagent-orchestration skill. No jsonschema runtime dep — the authoritative validators are src/scripts/_lib/subagent_response.ts (body) and src/scripts/_lib/subagent_capsule.ts (CHECKPOINT capsule), covered by tests/scripts/_lib_subagent_response.test.ts and tests/scripts/_lib_subagent_capsule.test.ts.",
6
6
  "type": "object",
7
7
  "required": ["status", "summary"],
8
8
  "additionalProperties": false,
9
9
  "properties": {
10
10
  "status": {
11
11
  "type": "string",
12
- "enum": ["DONE", "DONE_WITH_CONCERNS", "NEEDS_CONTEXT", "BLOCKED"],
13
- "description": "DONE = work shipped, gate green. DONE_WITH_CONCERNS = work shipped but caller must read concerns[]. NEEDS_CONTEXT = paused, blocking_question[] must be answered. BLOCKED = halted, blocking_reason describes why no path forward."
12
+ "enum": ["DONE", "DONE_WITH_CONCERNS", "NEEDS_CONTEXT", "BLOCKED", "CHECKPOINT"],
13
+ "description": "DONE = work shipped, gate green. DONE_WITH_CONCERNS = work shipped but caller must read concerns[]. NEEDS_CONTEXT = paused, blocking_question[] must be answered. BLOCKED = halted, blocking_reason describes why no path forward. CHECKPOINT = the worker reached its budget watermark and hands off a state capsule; done/remaining/generation are required."
14
14
  },
15
15
  "summary": {
16
16
  "type": "string",
@@ -40,6 +40,60 @@
40
40
  "next_action": {
41
41
  "type": "string",
42
42
  "description": "What the caller does now. Optional; orchestrator infers from status when omitted."
43
+ },
44
+ "generation": {
45
+ "type": "integer",
46
+ "minimum": 1,
47
+ "description": "CHECKPOINT only. Generation index in the recycling chain; the first dispatch is 1."
48
+ },
49
+ "done": {
50
+ "type": "array",
51
+ "maxItems": 40,
52
+ "items": {"type": "string", "minLength": 1, "maxLength": 200, "pattern": "^[^\\n\\r]*$"},
53
+ "description": "CHECKPOINT only. What is finished — ref tokens (file:line, id, path), never bodies."
54
+ },
55
+ "remaining": {
56
+ "type": "array",
57
+ "maxItems": 40,
58
+ "items": {"type": "string", "minLength": 1, "maxLength": 240, "pattern": "^[^\\n\\r]*$"},
59
+ "description": "CHECKPOINT only. What is left, one short line each."
60
+ },
61
+ "decisions": {
62
+ "type": "array",
63
+ "maxItems": 40,
64
+ "items": {"type": "string", "minLength": 1, "maxLength": 240, "pattern": "^[^\\n\\r]*$"},
65
+ "description": "CHECKPOINT only. Choices already made that the successor must not silently re-open."
66
+ },
67
+ "open_risks": {
68
+ "type": "array",
69
+ "maxItems": 40,
70
+ "items": {"type": "string", "minLength": 1, "maxLength": 240, "pattern": "^[^\\n\\r]*$"},
71
+ "description": "CHECKPOINT only. Risks still open at handoff."
72
+ },
73
+ "touched_files": {
74
+ "type": "array",
75
+ "maxItems": 40,
76
+ "items": {"type": "string", "minLength": 1, "maxLength": 200, "pattern": "^[^\\n\\r]*$"},
77
+ "description": "CHECKPOINT only. Paths / file:line this generation touched — never diffs."
78
+ },
79
+ "assumptions": {
80
+ "type": "array",
81
+ "maxItems": 40,
82
+ "description": "Stated premises the successor inherits instead of re-deriving. Valid on a CHECKPOINT capsule AND on a completed worker result — unstated assumptions are the first thing compression drops.",
83
+ "items": {
84
+ "type": "object",
85
+ "required": ["statement", "basis", "epistemic_state"],
86
+ "additionalProperties": false,
87
+ "properties": {
88
+ "statement": {"type": "string", "minLength": 1, "maxLength": 240, "pattern": "^[^\\n\\r]*$"},
89
+ "basis": {"type": "string", "minLength": 1, "maxLength": 200, "pattern": "^[^\\n\\r]*$", "description": "Ref token the premise rests on."},
90
+ "epistemic_state": {
91
+ "type": "string",
92
+ "enum": ["verified", "assumed", "gap"],
93
+ "description": "The Evidence-Report buckets from evidence-discipline.md — the capsule does not get a private grading scale."
94
+ }
95
+ }
96
+ }
43
97
  }
44
98
  },
45
99
  "allOf": [
@@ -58,6 +112,10 @@
58
112
  {
59
113
  "if": {"properties": {"status": {"const": "BLOCKED"}}, "required": ["status"]},
60
114
  "then": {"required": ["blocking_reason"]}
115
+ },
116
+ {
117
+ "if": {"properties": {"status": {"const": "CHECKPOINT"}}, "required": ["status"]},
118
+ "then": {"required": ["done", "remaining", "generation"]}
61
119
  }
62
120
  ]
63
121
  }
@@ -61,7 +61,7 @@ Generate ≥ 1 concrete case per HIGH dimension, plus the happy path. Enforce th
61
61
 
62
62
  Widen the list with a second pair of eyes:
63
63
 
64
- - **Subagent path** — when the host supports subagent spawn and subagents are enabled (`subagents.enabled`, `subagents.auto` ≠ off): spawn **one** subagent with an adversarial lens — *"Behavior: {sentence}. Case list so far: {list}. As a security researcher / SRE / chaos engineer: which non-obvious failure mode or abuse vector is missing?"* On security-critical surfaces a **second** subagent with a different lens is allowed; more is waste. Merge only novel cases.
64
+ - **Subagent path** — when the host supports subagent spawn and no emergency halt is set (always-on orchestration: there is no more per-layer on/off setting): spawn **one** subagent with an adversarial lens — *"Behavior: {sentence}. Case list so far: {list}. As a security researcher / SRE / chaos engineer: which non-obvious failure mode or abuse vector is missing?"* On security-critical surfaces a **second** subagent with a different lens is allowed; more is waste. Merge only novel cases.
65
65
  - **Degraded path (mandatory when no subagent runs)** — a self-review pass with an explicit lens shift: re-walk step 2 asking *"what breaks in production? what would an attacker try?"* and emit the same output shape (1–2 additional cases, or explicitly "none found").
66
66
 
67
67
  Unavailability of subagents never skips this step — it only switches the path.
@@ -1,6 +1,6 @@
1
1
  # {{project_name}}
2
2
 
3
- <!-- Fill placeholders or run `/agents init`; delete after. Capability bullets, not paths. Recipes: `.augment/contexts/contracts/agents-md-anatomy.md`. -->
3
+ <!-- Fill placeholders or run `/agents init`; delete after. Recipes: `.augment/contexts/contracts/agents-md-anatomy.md`. -->
4
4
 
5
5
  > {{project_description}}
6
6
 
@@ -8,8 +8,8 @@
8
8
 
9
9
  | Layer | Location | Edits |
10
10
  |---|---|---|
11
- | Installed package | `.augment/`, `dist/agent-src/` | hands-off — managed by `event4u/agent-config` |
12
- | Project layer | `agents/`, `agents/overrides/`, `.agent-settings.yml` | your customizations and config |
11
+ | Installed package | `.augment/`, `dist/agent-src/` | managed by `event4u/agent-config` |
12
+ | Project layer | `agents/`, `agents/overrides/`, `.agent-settings.yml` | your customizations |
13
13
 
14
14
  ## Pointers
15
15
 
@@ -18,7 +18,7 @@
18
18
  - **Skills (on-demand expertise)** — domain skills surfaced by description, invoked on trigger match: [`.augment/skills/`](.augment/skills/).
19
19
  - **Commands (workflows)** — slash-commands the agent runs end-to-end (`/work`, `/create-pr`, …): [`.augment/commands/`](.augment/commands/).
20
20
  - **Project-specific docs** — your own architecture notes, roadmaps, sessions, contexts: [`agents/`](agents/).
21
- - **Delegation & review** — dispatch independent-slice tasks to subagents instead of serial work; a mutating session ends after a neutral cross-model review: [`delegation-policy`](.augment/rules/delegation-policy.md).
21
+ - **Delegation & review** — dispatch independent-slice tasks to subagents instead of serial work; in a team (host-flag gated) the lead coordinates, teammates implement; a mutating session ends after a neutral cross-model review: [`delegation-policy`](.augment/rules/delegation-policy.md).
22
22
 
23
23
  ## Emergency triage — read this when nothing else is reachable
24
24
 
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.ts (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "9.28.0"
42
+ agent_config_version: "9.29.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -251,6 +251,20 @@ Templates for roadmap files stored in `agents/roadmaps/` or `{module_root}/{Modu
251
251
  `status: draft` roadmaps are exempt until flipped to ready. Enforced
252
252
  by `lint_plan_risk_register` at pre-push + CI.
253
253
 
254
+ 25. **`## Pre-mortem` is optional — and only worth having when it is a
255
+ forecast.** A roadmap MAY carry a `## Pre-mortem` section holding the
256
+ four-part failure register from the
257
+ [`premortem`](../skills/premortem/SKILL.md) skill (three ranked causes
258
+ of death · one untested hidden dependency · one survivable-failure
259
+ modification · one tripwire metric with a horizon). It is deliberately
260
+ NOT required: a failure register written to satisfy a template stops
261
+ being a forecast, and boilerplate in a failure register is worse than
262
+ its absence. Include it when the plan is heavy or irreversible enough
263
+ that a named tripwire changes behaviour; omit it entirely otherwise —
264
+ never ship an empty or perfunctory one. Distinct from rule 24's Risk
265
+ Register: the register ranks *known* risks with mitigations; the
266
+ pre-mortem imagines the *whole plan dead* and reconstructs why.
267
+
254
268
  ---
255
269
 
256
270
  ## Quality Gates (remote CI by default)
@@ -357,6 +371,15 @@ complexity: lightweight
357
371
 
358
372
  {Optional: edge cases, decisions, links to related docs.}
359
373
 
374
+ <!-- ## Pre-mortem — INCLUDE ONLY when the plan is heavy or irreversible
375
+ enough that a failure forecast changes behaviour (rule 25). OMIT
376
+ entirely otherwise — a perfunctory register is worse than none.
377
+ Shape: the four-part failure register from the premortem skill.
378
+ 1. Causes of death, ranked: {three, one paragraph each — mechanisms, not topics}
379
+ 2. Untested hidden dependency: {the assumption the plan never tests}
380
+ 3. Survivable-failure modification: {one concrete plan change}
381
+ 4. Tripwire: {metric + threshold + horizon that says cause #1 is materializing} -->
382
+
360
383
  <!-- ## Provenance — INCLUDE ONLY for source-derived / harvest / capability-adoption
361
384
  roadmaps (rule 19). OMIT entirely for internally-originated roadmaps —
362
385
  do NOT ship an empty Provenance section.
@@ -2,7 +2,7 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
2
2
  import {
3
3
  DEFAULT_PROJECT_FILE,
4
4
  logger
5
- } from "./chunk-GB2FSUEE.js";
5
+ } from "./chunk-LCFJIQ4J.js";
6
6
 
7
7
  // src/scripts/config/profiles.ts
8
8
  import * as fs2 from "node:fs";
@@ -406,8 +406,40 @@ function load_agent_settings(options = {}) {
406
406
  _deep_merge(merged, layer);
407
407
  }
408
408
  }
409
+ _warn_removed_always_on_keys(merged);
409
410
  return merged;
410
411
  }
412
+ var REMOVED_ALWAYS_ON_KEYS = [
413
+ "subagents.enabled",
414
+ "subagents.auto",
415
+ "subagents.host_capabilities",
416
+ "subagents.budget_routing",
417
+ "ai_team.enabled"
418
+ ];
419
+ var _warnedRemovedAlwaysOnKeys = /* @__PURE__ */ new Set();
420
+ function _readDottedSettingsPath(root, dotted) {
421
+ let node = root;
422
+ for (const part of dotted.split(".")) {
423
+ if (typeof node !== "object" || node === null || Array.isArray(node)) {
424
+ return void 0;
425
+ }
426
+ node = node[part];
427
+ }
428
+ return node;
429
+ }
430
+ function _warn_removed_always_on_keys(merged) {
431
+ for (const key of REMOVED_ALWAYS_ON_KEYS) {
432
+ if (_warnedRemovedAlwaysOnKeys.has(key)) {
433
+ continue;
434
+ }
435
+ if (_readDottedSettingsPath(merged, key) === void 0) {
436
+ continue;
437
+ }
438
+ _warnedRemovedAlwaysOnKeys.add(key);
439
+ process.stderr.write(`${key} was removed (always-on orchestration); ignored.
440
+ `);
441
+ }
442
+ }
411
443
  function* iter_setting_overrides(options = {}) {
412
444
  const project_path = options.project_path ?? null;
413
445
  const user_global_path = options.user_global_path ?? null;
@@ -343,6 +343,7 @@ function _build_config(raw, source_path) {
343
343
  const cli_call_budget = _build_cli_call_budget(
344
344
  _asDict(_getOr(raw, "cli_call_budget", {}))
345
345
  );
346
+ const quorum = _build_quorum(_get(raw, "quorum", "majority"));
346
347
  const necessity_classifier = _build_necessity_classifier(
347
348
  _asDict(_getOr(raw, "necessity_classifier", {}))
348
349
  );
@@ -368,6 +369,7 @@ function _build_config(raw, source_path) {
368
369
  "debate_gates"
369
370
  );
370
371
  const restate = _build_restate(_asDict(_getOr(raw, "restate", {})), "restate");
372
+ const critic_protocol = _build_critic_protocol(_getOr(raw, "critic_protocol", "legacy"));
371
373
  const decision_resolution = _build_decision_resolution(
372
374
  _asDict(_getOr(raw, "decision_resolution", {}))
373
375
  );
@@ -389,6 +391,7 @@ function _build_config(raw, source_path) {
389
391
  advisors,
390
392
  consensus_scoring: consensus,
391
393
  cli_call_budget,
394
+ quorum,
392
395
  necessity_classifier,
393
396
  model_downgrade,
394
397
  debate,
@@ -397,6 +400,7 @@ function _build_config(raw, source_path) {
397
400
  chairman,
398
401
  debate_gates,
399
402
  restate,
403
+ critic_protocol,
400
404
  decision_resolution,
401
405
  routing,
402
406
  low_impact,
@@ -598,6 +602,16 @@ function _build_restate(d, scope) {
598
602
  }
599
603
  return { enabled: Boolean(enabled) };
600
604
  }
605
+ var _VALID_CRITIC_PROTOCOLS = /* @__PURE__ */ new Set(["legacy", "load_bearing"]);
606
+ function _build_critic_protocol(v) {
607
+ if (v === void 0 || v === null) return "legacy";
608
+ if (!(_isStr(v) && _VALID_CRITIC_PROTOCOLS.has(v))) {
609
+ throw new CouncilConfigError(
610
+ `\`critic_protocol\`=${_pyRepr(v)} not in ${_sortedListRepr(_VALID_CRITIC_PROTOCOLS)}.`
611
+ );
612
+ }
613
+ return v;
614
+ }
601
615
  var _VALID_RESOLUTION_MODES = /* @__PURE__ */ new Set([
602
616
  "agent",
603
617
  "council",
@@ -873,7 +887,7 @@ function _build_defaults(d) {
873
887
  if (!_isDict(d)) {
874
888
  throw new CouncilConfigError("`defaults` must be a mapping.");
875
889
  }
876
- const mode = _get(d, "mode", "api");
890
+ const mode = _get(d, "mode", "auto");
877
891
  if (!(_isStr(mode) && _VALID_MODES.has(mode))) {
878
892
  throw new CouncilConfigError(
879
893
  `defaults.mode=${_pyRepr(mode)} not in ${_sortedListRepr(_VALID_MODES)}.`
@@ -1035,7 +1049,7 @@ function _build_cost_budget(d) {
1035
1049
  }
1036
1050
  return cb;
1037
1051
  }
1038
- function _build_member(name, cfg, default_mode = "api") {
1052
+ function _build_member(name, cfg, default_mode = "auto") {
1039
1053
  if (!_VALID_PROVIDERS.has(name)) {
1040
1054
  throw new CouncilConfigError(
1041
1055
  `members.${name}: unknown provider; valid: ${_sortedListRepr(_VALID_PROVIDERS)}.`
@@ -1152,6 +1166,7 @@ function _build_member(name, cfg, default_mode = "api") {
1152
1166
  prompt_cache_ttl
1153
1167
  };
1154
1168
  }
1169
+ var _DEFAULT_CLI_CALLS_PER_DAY = 50;
1155
1170
  function _build_cli_call_budget(d) {
1156
1171
  if (!_isDict(d)) {
1157
1172
  throw new CouncilConfigError("`cli_call_budget` must be a mapping.");
@@ -1163,6 +1178,9 @@ function _build_cli_call_budget(d) {
1163
1178
  );
1164
1179
  }
1165
1180
  const caps = /* @__PURE__ */ new Map();
1181
+ for (const provider of _VALID_PROVIDERS) {
1182
+ caps.set(provider, _DEFAULT_CLI_CALLS_PER_DAY);
1183
+ }
1166
1184
  for (const [provider, value] of Object.entries(raw_caps)) {
1167
1185
  if (!_VALID_PROVIDERS.has(provider)) {
1168
1186
  throw new CouncilConfigError(
@@ -1190,6 +1208,17 @@ function _build_cli_call_budget(d) {
1190
1208
  }
1191
1209
  return { max_calls_per_day: caps, warn_at };
1192
1210
  }
1211
+ function _build_quorum(raw) {
1212
+ if (raw === "majority") {
1213
+ return "majority";
1214
+ }
1215
+ if (_isInt(raw) && !_isBool(raw) && raw >= 1) {
1216
+ return raw;
1217
+ }
1218
+ throw new CouncilConfigError(
1219
+ `\`quorum\`=${_pyRepr(raw)} must be 'majority' or an integer >= 1 (got ${_pyTypeName(raw)}).`
1220
+ );
1221
+ }
1193
1222
  function _build_advisor(name, cfg) {
1194
1223
  if (!_isDict(cfg)) {
1195
1224
  throw new CouncilConfigError(`advisors.${name}: must be a mapping.`);
@@ -4355,18 +4355,9 @@ var settingsSchema = external_exports.object({
4355
4355
  }).default({})
4356
4356
  }).default({}),
4357
4357
  subagents: external_exports.object({
4358
- enabled: external_exports.boolean().default(true).describe(
4359
- "Global master switch for the subagent layer. true (default) = available; false = fully disabled (the canonical kill-switch \u2014 no auto-dispatch, no routing, everything runs in-session)."
4360
- ),
4361
- auto: external_exports.enum(["off", "ask", "on"]).default("on").describe(
4362
- "Automatic-dispatch mode. off = subagents only via explicit command. ask = classify the task and ask once before dispatching. on = auto-dispatch delegable tasks (surface the choice in one line). Shipped default is on on subagent-capable hosts (flipped from ask 2026-07-09, ADR-117), off elsewhere; no-op where the host has no subagent primitive."
4363
- ),
4364
4358
  downshift: external_exports.boolean().default(true).describe(
4365
4359
  "Route delegable sub-tasks to the lowest-capable model tier (cost + speed via model downshift). false = every subagent runs on the session tier."
4366
4360
  ),
4367
- budget_routing: external_exports.enum(["ask", "auto", "off"]).default("ask").describe(
4368
- "Budget-aware cheap-request delegation (docs/contracts/budget-routing.md): pick the cheapest classifier-adequate tier WITH available budget (cost.budgets.per_tier); cheap exhausted but strong funded \u2192 strong tier; all exhausted \u2192 session model + notice. Work is never blocked to save money; the session model is never switched (delegation with a model override). ask = confirm the first budget-motivated downshift per session (default). auto = apply silently with telemetry. off = today's behavior (single-flip rollback). Distinct from downshift: that is the quality/cost knob, this is the resource-availability gate."
4369
- ),
4370
4361
  quota_arbitrage: external_exports.boolean().default(true).describe(
4371
4362
  "Prefer a separate quota-pool model for delegable sub-tasks where the host manifest reports one. Optional bonus only \u2014 identical behaviour (minus the quota win) where unsupported. Never load-bearing."
4372
4363
  ),
@@ -4377,9 +4368,6 @@ var settingsSchema = external_exports.object({
4377
4368
  }).default({}).describe(
4378
4369
  "Per-tier model map for downshift routing. Each empty value uses the tier runtime default (no vendor model baked in)."
4379
4370
  ),
4380
- host_capabilities: external_exports.object({}).passthrough().default({}).describe(
4381
- "Optional override of the host-capability manifest (subagent_spawn / parallel_spawn / status_polling / separate_quota_pool). Any field set wins; omitted fields fall back to the all-false safe default. Empty = the agent resolves the manifest from host knowledge."
4382
- ),
4383
4371
  implementer_model: external_exports.string().default("").describe(
4384
4372
  "Override the model the orchestrator dispatches to subagents that write code (e.g. claude-sonnet-4, gpt-5). Empty (default) = inherit the session's primary model \u2014 cheapest and usually right."
4385
4373
  ),
@@ -4399,14 +4387,11 @@ var settingsSchema = external_exports.object({
4399
4387
  )
4400
4388
  }),
4401
4389
  ai_team: external_exports.object({
4402
- enabled: external_exports.boolean().default(false).describe(
4403
- "Master switch for the /team cross-model review family (docs/contracts/ai-team-config.md). false (default) = commands are never suggested and every invocation refuses with an enable pointer. true = the family is live; individual gates (allow_delegate) still apply."
4404
- ),
4405
4390
  model: external_exports.string().default("auto").describe(
4406
4391
  "Model handed to the codex CLI. 'auto' (default) = pass no --model flag so the CLI's own default applies \u2014 tracks the subscription's current strongest model instead of pinning a stale ID. Any other value passes through verbatim as `--model <value>`."
4407
4392
  ),
4408
4393
  allow_delegate: external_exports.boolean().default(false).describe(
4409
- "Second opt-in for the only wrapper that delegates write access (/team:delegate). false (default) = delegate refuses even when ai_team.enabled is true. Both keys must be true before delegation is reachable."
4394
+ "Second opt-in for the only wrapper that delegates write access (/team:delegate). false (default) = delegate refuses even when /team itself is available. Availability (codex CLI installed + authenticated) is necessary but not sufficient \u2014 this key must ALSO be true before delegation is reachable."
4410
4395
  ),
4411
4396
  max_calls_per_day: external_exports.number().int().min(0).default(50).describe(
4412
4397
  "Per-day cap on team calls, read against the EXISTING cli_call_budget openai bucket (~/.event4u/agent-config/cli-calls.json, daily UTC reset) \u2014 one subscription, one counter, never a parallel count. 0 = block all team calls."
@@ -4422,7 +4407,15 @@ var settingsSchema = external_exports.object({
4422
4407
  "Circuit-breaker bound: after this many CONSECUTIVE BLOCK verdicts in one session, a visible notice is injected exactly once and the managed layer stops re-blocking \u2014 the user decides, never an infinite Claude\u2194Codex loop. An ALLOW verdict resets the counter. Positive integer."
4423
4408
  )
4424
4409
  }).default({ managed: false, max_consecutive_blocks: 3 })
4425
- }).default({ enabled: false, model: "auto", allow_delegate: false, max_calls_per_day: 50, suppress_setup_hint: false, review_gate: { managed: false, max_consecutive_blocks: 3 } }),
4410
+ }).default({ model: "auto", allow_delegate: false, max_calls_per_day: 50, suppress_setup_hint: false, review_gate: { managed: false, max_consecutive_blocks: 3 } }),
4411
+ emergency: external_exports.object({
4412
+ orchestration_halt: external_exports.boolean().default(false).describe(
4413
+ "The one audited incident switch over the always-on orchestration stack (subagents, council, team). NOT an activation gate: false (default) = the stack runs normally. true = halted; arming requires no ceremony. Disarming (returning to false) requires orchestration_halt_justification to be a non-empty string. Both transitions emit one telemetry line."
4414
+ ),
4415
+ orchestration_halt_justification: external_exports.string().default("").describe(
4416
+ "Required non-empty before orchestration_halt may return to false. Ignored while arming the halt."
4417
+ )
4418
+ }).default({ orchestration_halt: false, orchestration_halt_justification: "" }),
4426
4419
  onboarding: external_exports.object({
4427
4420
  onboarded: external_exports.boolean().default(false).describe(
4428
4421
  "Set to true once the developer has completed `agent-config setup`. The onboarding-gate rule blocks the first turn of every chat until this is true. Toggle back to false to re-trigger the wizard."
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  resolve_project_root
4
- } from "./chunk-GB2FSUEE.js";
4
+ } from "./chunk-LCFJIQ4J.js";
5
5
  import {
6
6
  resolvePackageRoot
7
7
  } from "./chunk-MCJYCQPF.js";
@@ -2,10 +2,10 @@ import { createRequire as __acCreateRequire } from 'node:module'; const require
2
2
  import {
3
3
  ZodFirstPartyTypeKind,
4
4
  settingsSchema
5
- } from "./chunk-DVRS2KVR.js";
5
+ } from "./chunk-MMXA5GY7.js";
6
6
  import {
7
7
  main
8
- } from "./chunk-JXARCGVN.js";
8
+ } from "./chunk-MP3JT3IU.js";
9
9
  import {
10
10
  RULE_SOURCE_REL
11
11
  } from "./chunk-BKO2AZ7Z.js";
@@ -48,7 +48,7 @@ import {
48
48
  import {
49
49
  find_project_root_with_anchor,
50
50
  load_agent_settings
51
- } from "./chunk-GB2FSUEE.js";
51
+ } from "./chunk-LCFJIQ4J.js";
52
52
  import {
53
53
  event4u_root,
54
54
  legacy_xdg_root,