@event4u/agent-config 14.6.0 → 14.8.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 (258) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +255 -145
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/inbox.md +264 -10
  5. package/dist/agent-src/commands/analyze.md +1 -1
  6. package/dist/agent-src/commands/evals/git-pr-merge.json +13 -0
  7. package/dist/agent-src/commands/evals/roadmap.json +17 -1
  8. package/dist/agent-src/commands/pr/create.md +14 -2
  9. package/dist/agent-src/commands/pr/merge.md +379 -0
  10. package/dist/agent-src/commands/roadmap/process-full.md +272 -32
  11. package/dist/agent-src/commands/roadmap.md +1 -1
  12. package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +46 -36
  13. package/dist/agent-src/contexts/execution/autonomy-mechanics.md +37 -2
  14. package/dist/agent-src/contexts/execution/roadmap-execution-contract.md +95 -2
  15. package/dist/agent-src/contexts/execution/roadmap-process-loop.md +289 -106
  16. package/dist/agent-src/rules/artifact-drafting-protocol.md +5 -1
  17. package/dist/agent-src/rules/context-hygiene.md +2 -0
  18. package/dist/agent-src/rules/decision-revisit-gate.md +67 -32
  19. package/dist/agent-src/rules/fix-what-you-see.md +108 -0
  20. package/dist/agent-src/rules/no-roadmap-references.md +0 -5
  21. package/dist/agent-src/rules/recurring-criticism.md +110 -0
  22. package/dist/agent-src/rules/roadmap-progress-sync.md +20 -1
  23. package/dist/agent-src/rules/rule-type-governance.md +0 -2
  24. package/dist/agent-src/rules/self-repair-loop.md +17 -0
  25. package/dist/agent-src/rules/skill-quality.md +0 -2
  26. package/dist/agent-src/rules/source-confidentiality.md +37 -7
  27. package/dist/agent-src/scripts/archival_sweep.ts +117 -0
  28. package/dist/agent-src/scripts/archive_completed_roadmaps.ts +26 -7
  29. package/dist/agent-src/scripts/dashboard_mode.ts +212 -0
  30. package/dist/agent-src/scripts/gate_budget.ts +282 -0
  31. package/dist/agent-src/scripts/gate_execute.ts +72 -31
  32. package/dist/agent-src/scripts/roadmap_gates.ts +74 -3
  33. package/dist/agent-src/scripts/update_roadmap_progress.ts +296 -53
  34. package/dist/agent-src/skills/adr-create/SKILL.md +124 -5
  35. package/dist/agent-src/skills/ai-council/SKILL.md +48 -807
  36. package/dist/agent-src/skills/ai-council/references/advanced-modes.md +320 -0
  37. package/dist/agent-src/skills/ai-council/references/cost-and-redaction.md +99 -0
  38. package/dist/agent-src/skills/ai-council/references/execution-modes.md +162 -0
  39. package/dist/agent-src/skills/ai-council/references/output-and-synthesis.md +125 -0
  40. package/dist/agent-src/skills/ai-council/references/procedure.md +143 -0
  41. package/dist/agent-src/skills/decision-record/SKILL.md +61 -3
  42. package/dist/agent-src/skills/decision-review/SKILL.md +65 -0
  43. package/dist/agent-src/skills/merge-conflicts/SKILL.md +26 -0
  44. package/dist/agent-src/skills/quality-tools/SKILL.md +34 -326
  45. package/dist/agent-src/skills/quality-tools/references/js-ts-tools.md +113 -0
  46. package/dist/agent-src/skills/quality-tools/references/php-tools.md +222 -0
  47. package/dist/agent-src/skills/roadmap-management/SKILL.md +15 -409
  48. package/dist/agent-src/skills/roadmap-management/references/archival.md +226 -0
  49. package/dist/agent-src/skills/roadmap-management/references/authoring.md +107 -0
  50. package/dist/agent-src/skills/roadmap-management/references/dashboard.md +47 -0
  51. package/dist/agent-src/skills/roadmap-management/references/lifecycle.md +58 -0
  52. package/dist/agent-src/skills/security/SKILL.md +8 -0
  53. package/dist/agent-src/skills/security-audit/SKILL.md +12 -1
  54. package/dist/agent-src/skills/skill-writing/SKILL.md +34 -570
  55. package/dist/agent-src/skills/skill-writing/references/procedure.md +275 -0
  56. package/dist/agent-src/skills/skill-writing/references/read-only-scripts.md +18 -0
  57. package/dist/agent-src/skills/skill-writing/references/section-patterns.md +298 -0
  58. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  59. package/dist/agent-src/templates/roadmaps.md +65 -4
  60. package/dist/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  61. package/dist/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  62. package/dist/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  63. package/dist/cli/registry.js +2 -1
  64. package/dist/cli/registry.js.map +1 -1
  65. package/dist/cli-delegate/chunk-2GNWGMAL.js +172 -0
  66. package/dist/cli-delegate/{chunk-P6LQDIWK.js → chunk-7PRE6ZV2.js} +338 -0
  67. package/dist/cli-delegate/{chunk-BKO2AZ7Z.js → chunk-B2ERU2VA.js} +1 -1
  68. package/dist/cli-delegate/chunk-E4XIZDIB.js +402 -0
  69. package/dist/cli-delegate/{chunk-3UCJWMMP.js → chunk-EEJUMCDZ.js} +16 -16
  70. package/dist/cli-delegate/{chunk-NXFWFAYV.js → chunk-G23AT6GD.js} +1 -0
  71. package/dist/cli-delegate/{chunk-XURJ4AQC.js → chunk-H4VIVD4C.js} +385 -284
  72. package/dist/cli-delegate/chunk-I3EIN2YG.js +36 -0
  73. package/dist/cli-delegate/{chunk-RLN73PR5.js → chunk-LPPWO5CE.js} +12 -8
  74. package/dist/cli-delegate/chunk-MWRD5YOH.js +100 -0
  75. package/dist/cli-delegate/{chunk-UEZ7D35A.js → chunk-N7CDDGI3.js} +4 -23
  76. package/dist/cli-delegate/{chunk-63WSP6YZ.js → chunk-PMEKGDED.js} +74 -167
  77. package/dist/cli-delegate/{chunk-GRRPEPRN.js → chunk-T7L2QK3K.js} +24 -5
  78. package/dist/cli-delegate/{chunk-EVTY7ISR.js → chunk-YM4GZDJG.js} +9 -1
  79. package/dist/cli-delegate/cmd_adr_effective.js +1162 -0
  80. package/dist/cli-delegate/cmd_conformance.js +466 -716
  81. package/dist/cli-delegate/cmd_converge.js +3 -3
  82. package/dist/cli-delegate/cmd_doctor.js +10 -10
  83. package/dist/cli-delegate/cmd_explain.js +1 -1
  84. package/dist/cli-delegate/cmd_export.js +10 -9
  85. package/dist/cli-delegate/cmd_handoff.js +10 -9
  86. package/dist/cli-delegate/cmd_memory_get.js +2 -1
  87. package/dist/cli-delegate/cmd_migrate.js +2 -2
  88. package/dist/cli-delegate/cmd_packs_active.js +1 -1
  89. package/dist/cli-delegate/cmd_preflight.js +5 -5
  90. package/dist/cli-delegate/cmd_prune.js +11 -10
  91. package/dist/cli-delegate/cmd_route_audit.js +6 -5
  92. package/dist/cli-delegate/cmd_route_explain.js +3 -3
  93. package/dist/cli-delegate/cmd_session_recycle.js +840 -30
  94. package/dist/cli-delegate/cmd_settings_get.js +3 -3
  95. package/dist/cli-delegate/cmd_settings_migrate.js +10 -9
  96. package/dist/cli-delegate/cmd_settings_set.js +1 -1
  97. package/dist/cli-delegate/cmd_sync.js +11 -10
  98. package/dist/cli-delegate/cmd_uninstall.js +13 -11
  99. package/dist/cli-delegate/cmd_update.js +4 -4
  100. package/dist/cli-delegate/cmd_upgrade.js +4 -4
  101. package/dist/cli-delegate/cmd_validate.js +11 -10
  102. package/dist/cli-delegate/cmd_versions.js +3 -3
  103. package/dist/discovery/deprecation-report.md +1 -1
  104. package/dist/discovery/discovery-manifest.json +111 -37
  105. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  106. package/dist/discovery/discovery-manifest.summary.md +5 -5
  107. package/dist/discovery/dormancy-report.md +1 -1
  108. package/dist/discovery/orphan-report.md +1 -1
  109. package/dist/discovery/packs.json +15 -12
  110. package/dist/discovery/trust-report.md +3 -3
  111. package/dist/discovery/workspaces.json +11 -8
  112. package/dist/hooks/dispatch.js +3165 -2192
  113. package/dist/install/claudePathsPlan.js +187 -0
  114. package/dist/install/claudePathsPlan.js.map +1 -0
  115. package/dist/install/globalRuleLayers.js +169 -0
  116. package/dist/install/globalRuleLayers.js.map +1 -0
  117. package/dist/install/hostLayerFingerprint.js +136 -0
  118. package/dist/install/hostLayerFingerprint.js.map +1 -0
  119. package/dist/install/install.mjs +553 -425
  120. package/dist/install/partitionEligibility.js +432 -0
  121. package/dist/install/partitionEligibility.js.map +1 -0
  122. package/dist/install/ruleLayerPartition.js +157 -0
  123. package/dist/install/ruleLayerPartition.js.map +1 -0
  124. package/dist/mcp/registry-manifest.json +3 -3
  125. package/dist/mcp/server.json +2 -2
  126. package/dist/mcp/server.mjs +1863 -1234
  127. package/dist/router.json +1 -1
  128. package/dist/scripts/_lib/agent_src.js +41 -0
  129. package/dist/scripts/_lib/agent_src.js.map +1 -1
  130. package/dist/scripts/_lib/install_layout.js +83 -0
  131. package/dist/scripts/_lib/install_layout.js.map +1 -0
  132. package/dist/scripts/_lib/installed_lock.js +444 -0
  133. package/dist/scripts/_lib/installed_lock.js.map +1 -0
  134. package/dist/scripts/_lib/prune_empty_dirs.js +85 -0
  135. package/dist/scripts/_lib/prune_empty_dirs.js.map +1 -0
  136. package/dist/scripts/condense.js +63 -251
  137. package/dist/scripts/condense.js.map +1 -1
  138. package/dist/server/schemas/settings.js +4 -0
  139. package/dist/server/schemas/settings.js.map +1 -1
  140. package/docs/contracts/settings-classes.md +12 -6
  141. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +8 -3
  142. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +45 -1
  143. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +26 -0
  144. package/docs/guidelines/agent-infra/false-green.md +47 -1
  145. package/docs/guidelines/agent-infra/memory-access.md +17 -0
  146. package/docs/guidelines/agent-infra/recurring-criticism-mechanics.md +96 -0
  147. package/package.json +1 -1
  148. package/src/agent-src/scripts/archival_sweep.ts +117 -0
  149. package/src/agent-src/scripts/archive_completed_roadmaps.ts +26 -7
  150. package/src/agent-src/scripts/dashboard_mode.ts +212 -0
  151. package/src/agent-src/scripts/gate_budget.ts +282 -0
  152. package/src/agent-src/scripts/gate_execute.ts +72 -31
  153. package/src/agent-src/scripts/roadmap_gates.ts +74 -3
  154. package/src/agent-src/scripts/update_roadmap_progress.ts +296 -53
  155. package/src/agent-src/templates/scripts/telemetry/flush_sender.mjs +163 -0
  156. package/src/agent-src/templates/scripts/telemetry/remote.ts +160 -7
  157. package/src/agent-src/templates/scripts/telemetry/transport.ts +169 -0
  158. package/src/config/agent-settings.template.yml +27 -2
  159. package/src/config/ci-local-parity.yml +39 -0
  160. package/src/config/estate-count-budget.json +612 -3
  161. package/src/config/evaluator-budgets.json +3 -3
  162. package/src/config/gate-coverage.yml +220 -12
  163. package/src/config/gate-violation-baselines.json +73 -63
  164. package/src/config/gitignore-block.txt +15 -2
  165. package/src/config/hook-latency-budget.json +5 -0
  166. package/src/config/rule-activation-census.json +14 -6
  167. package/src/config/rule-stub-ceilings.json +34 -7
  168. package/src/install/claudePathsPlan.ts +196 -0
  169. package/src/install/globalRuleLayers.ts +197 -0
  170. package/src/install/hostLayerFingerprint.ts +145 -0
  171. package/src/install/partitionEligibility.ts +502 -0
  172. package/src/install/ruleLayerPartition.ts +212 -0
  173. package/src/scripts/_cli/cmd_adr_effective.ts +484 -0
  174. package/src/scripts/_cli/cmd_session_recycle.ts +9 -1
  175. package/src/scripts/_dispatch.bash +17 -1
  176. package/src/scripts/_lib/ac_heading.ts +30 -0
  177. package/src/scripts/_lib/adr_frontmatter.test.ts +365 -0
  178. package/src/scripts/_lib/adr_frontmatter.ts +459 -0
  179. package/src/scripts/_lib/agent_src.ts +42 -0
  180. package/src/scripts/_lib/bench_ab_pinned_repo.ts +162 -0
  181. package/src/scripts/_lib/bench_ab_workspace.ts +10 -1
  182. package/src/scripts/_lib/envelope_grounding.ts +49 -9
  183. package/src/scripts/_lib/installed_lock.ts +50 -5
  184. package/src/scripts/_lib/layer_overlap_notice.ts +11 -2
  185. package/src/scripts/_lib/md_section.ts +129 -0
  186. package/src/scripts/_lib/prune_empty_dirs.ts +80 -0
  187. package/src/scripts/_lib/scope_guard.sh +26 -3
  188. package/src/scripts/_lib/self_repair.ts +19 -0
  189. package/src/scripts/_lib/self_repair_class_b.ts +171 -0
  190. package/src/scripts/adr/evidence_census.ts +899 -0
  191. package/src/scripts/adr/regenerate_index.ts +12 -32
  192. package/src/scripts/adr_cite_check.ts +540 -39
  193. package/src/scripts/ai_council/cli_help.ts +55 -0
  194. package/src/scripts/audit_adr_coverage.ts +103 -17
  195. package/src/scripts/before_complete_hook.ts +153 -28
  196. package/src/scripts/bench_ab_v2_complexity.ts +27 -7
  197. package/src/scripts/bench_hook_latency.ts +204 -0
  198. package/src/scripts/build_archive_index.ts +34 -0
  199. package/src/scripts/check_adr_frontmatter.ts +574 -39
  200. package/src/scripts/check_hook_bundle_content.ts +219 -0
  201. package/src/scripts/check_new_adr_evidence.ts +529 -0
  202. package/src/scripts/check_references.ts +78 -0
  203. package/src/scripts/check_release_published.ts +32 -11
  204. package/src/scripts/check_rule_layer_partition.ts +531 -0
  205. package/src/scripts/check_single_delivery.ts +194 -17
  206. package/src/scripts/check_standing_rule_delivery.ts +8 -2
  207. package/src/scripts/ci_settle.ts +170 -0
  208. package/src/scripts/condense.ts +79 -259
  209. package/src/scripts/council_cli.ts +3 -3
  210. package/src/scripts/dispatch_r2_reviewer.ts +6 -14
  211. package/src/scripts/external_sources_denylist.json +4 -1
  212. package/src/scripts/hook_manifest.json +1 -1
  213. package/src/scripts/hook_manifest.yaml +77 -14
  214. package/src/scripts/hooks/block_no_verify.ts +61 -10
  215. package/src/scripts/hooks/block_unauthorized_git.ts +21 -1
  216. package/src/scripts/hooks/concern_registry.ts +4 -0
  217. package/src/scripts/hooks/dispatch_hook.ts +154 -187
  218. package/src/scripts/hooks/dispatch_issues.ts +38 -19
  219. package/src/scripts/hooks/fallback_yaml.ts +66 -0
  220. package/src/scripts/hooks/host_semantics.ts +21 -0
  221. package/src/scripts/hooks/injection_budget.ts +13 -3
  222. package/src/scripts/hooks/py_json_dumps.ts +103 -0
  223. package/src/scripts/hooks/rtk_wrap_hook.ts +8 -3
  224. package/src/scripts/hooks/run_continuation_hook.ts +8 -5
  225. package/src/scripts/hooks/ship_diff_volume_hook.ts +81 -15
  226. package/src/scripts/hooks/source_first_gate_hook.ts +464 -0
  227. package/src/scripts/hooks/state_io.ts +870 -21
  228. package/src/scripts/hooks/stdin_failure_policy.ts +96 -0
  229. package/src/scripts/hooks/subagent_ledger_hook.ts +44 -15
  230. package/src/scripts/hooks/telemetry_flush_hook.ts +139 -0
  231. package/src/scripts/hooks/telemetry_self_repair.ts +128 -0
  232. package/src/scripts/hooks/telemetry_usage_hook.ts +22 -4
  233. package/src/scripts/hooks/turn_end_gate_hook.ts +81 -15
  234. package/src/scripts/injection_scan_hook.ts +137 -5
  235. package/src/scripts/install.ts +16 -11
  236. package/src/scripts/language_mirror_hook.ts +561 -25
  237. package/src/scripts/lint_framework_leakage_allowlist.json +2 -2
  238. package/src/scripts/lint_hook_manifest.ts +49 -0
  239. package/src/scripts/lint_plan_risk_register.ts +4 -3
  240. package/src/scripts/lint_provenance_vocabulary.ts +472 -4
  241. package/src/scripts/lint_skill_router_head.ts +4 -4
  242. package/src/scripts/mcp_server/tools.ts +2 -2
  243. package/src/scripts/new_roadmap.ts +136 -0
  244. package/src/scripts/pack_mcp_content.ts +20 -5
  245. package/src/scripts/release.ts +37 -38
  246. package/src/scripts/report_layer_overlap.ts +6 -0
  247. package/src/scripts/routing_doctor.ts +5 -1
  248. package/src/scripts/self_repair_hook.ts +37 -5
  249. package/src/scripts/session_register_hook.ts +11 -0
  250. package/src/scripts/skill_usage_collect.ts +11 -1
  251. package/src/scripts/skill_usage_report.ts +278 -8
  252. package/src/scripts/sync_pr_branch.ts +170 -20
  253. package/src/server/schemas/settings.ts +8 -0
  254. package/dist/cli-delegate/chunk-EJITJBJX.js +0 -172
  255. package/dist/cli-delegate/chunk-PZWRPRWP.js +0 -38
  256. package/dist/cli-delegate/{chunk-PPQO4NGR.js → chunk-6RJA2F5A.js} +3 -3
  257. package/dist/cli-delegate/{chunk-RYNADUFG.js → chunk-LWTYTX6F.js} +0 -0
  258. package/dist/cli-delegate/{chunk-FBKL6JWT.js → chunk-MMSGVZKV.js} +3 -3
@@ -0,0 +1,402 @@
1
+ import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
+
3
+ // src/scripts/hooks/state_io.ts
4
+ import { createHash } from "node:crypto";
5
+ import fs from "node:fs";
6
+ import path from "node:path";
7
+ var LOCK_BASENAME = ".dispatcher.lock";
8
+ var REPLAY_ENV_VAR = "AGENT_CONFIG_REPLAY";
9
+ function is_replay_mode() {
10
+ return (process.env[REPLAY_ENV_VAR] ?? "").trim() === "1";
11
+ }
12
+ function _lock_path(state_dir) {
13
+ return path.join(state_dir, LOCK_BASENAME);
14
+ }
15
+ function _target_lock_path(target_path) {
16
+ return `${target_path}.lock`;
17
+ }
18
+ function _py_json_dumps(value, indent) {
19
+ const pad = " ".repeat(indent);
20
+ const escapeString = (s) => {
21
+ let out = '"';
22
+ for (const ch of s) {
23
+ const code = ch.codePointAt(0);
24
+ switch (ch) {
25
+ case '"':
26
+ out += '\\"';
27
+ break;
28
+ case "\\":
29
+ out += "\\\\";
30
+ break;
31
+ case "\n":
32
+ out += "\\n";
33
+ break;
34
+ case "\r":
35
+ out += "\\r";
36
+ break;
37
+ case " ":
38
+ out += "\\t";
39
+ break;
40
+ case "\b":
41
+ out += "\\b";
42
+ break;
43
+ case "\f":
44
+ out += "\\f";
45
+ break;
46
+ default:
47
+ if (code < 32 || code > 126) {
48
+ if (code > 65535) {
49
+ const c = code - 65536;
50
+ const hi = 55296 + (c >> 10);
51
+ const lo = 56320 + (c & 1023);
52
+ out += "\\u" + hi.toString(16).padStart(4, "0") + "\\u" + lo.toString(16).padStart(4, "0");
53
+ } else {
54
+ out += "\\u" + code.toString(16).padStart(4, "0");
55
+ }
56
+ } else {
57
+ out += ch;
58
+ }
59
+ }
60
+ }
61
+ return out + '"';
62
+ };
63
+ const render = (v, depth) => {
64
+ if (v === null || v === void 0) {
65
+ return "null";
66
+ }
67
+ if (typeof v === "boolean") {
68
+ return v ? "true" : "false";
69
+ }
70
+ if (typeof v === "number") {
71
+ if (!Number.isFinite(v)) {
72
+ if (Number.isNaN(v)) return "NaN";
73
+ return v > 0 ? "Infinity" : "-Infinity";
74
+ }
75
+ return String(v);
76
+ }
77
+ if (typeof v === "string") {
78
+ return escapeString(v);
79
+ }
80
+ const curPad = pad.repeat(depth + 1);
81
+ const closePad = pad.repeat(depth);
82
+ if (Array.isArray(v)) {
83
+ if (v.length === 0) {
84
+ return "[]";
85
+ }
86
+ const items = v.map((item) => curPad + render(item, depth + 1));
87
+ return "[\n" + items.join(",\n") + "\n" + closePad + "]";
88
+ }
89
+ if (typeof v === "object") {
90
+ const obj = v;
91
+ const keys = Object.keys(obj);
92
+ if (keys.length === 0) {
93
+ return "{}";
94
+ }
95
+ const items = keys.map(
96
+ (k) => curPad + escapeString(k) + ": " + render(obj[k], depth + 1)
97
+ );
98
+ return "{\n" + items.join(",\n") + "\n" + closePad + "}";
99
+ }
100
+ throw new TypeError(`Object of type ${typeof v} is not JSON serializable`);
101
+ };
102
+ return render(value, 0);
103
+ }
104
+ function atomic_write_json(target, payload, options = {}) {
105
+ if (is_replay_mode()) {
106
+ return;
107
+ }
108
+ const indent = options.indent ?? 2;
109
+ const targetPath = path.resolve(target);
110
+ const state_dir = path.dirname(targetPath);
111
+ fs.mkdirSync(state_dir, { recursive: true });
112
+ const body = _py_json_dumps(payload, indent) + "\n";
113
+ _atomic_write_text(targetPath, body);
114
+ }
115
+ function atomic_write_text(target, text) {
116
+ if (is_replay_mode()) {
117
+ return;
118
+ }
119
+ const targetPath = path.resolve(target);
120
+ const state_dir = path.dirname(targetPath);
121
+ fs.mkdirSync(state_dir, { recursive: true });
122
+ _atomic_write_text(targetPath, text);
123
+ }
124
+ var LOCK_STALE_MS = 3e4;
125
+ var LOCK_ACQUIRE_DEADLINE_MS = 5e3;
126
+ var LOCK_SPIN_SLEEP_MS = 2;
127
+ function _sleep(ms) {
128
+ const sab = new Int32Array(new SharedArrayBuffer(4));
129
+ Atomics.wait(sab, 0, 0, ms);
130
+ }
131
+ function _acquire_lock(lock_path, options = {}) {
132
+ const blocking = options.blocking ?? true;
133
+ const fd = fs.openSync(lock_path, "a", 420);
134
+ const held = lock_path + ".held";
135
+ const give_up = () => {
136
+ try {
137
+ fs.closeSync(fd);
138
+ } catch {
139
+ }
140
+ return null;
141
+ };
142
+ const start = Date.now();
143
+ for (; ; ) {
144
+ try {
145
+ const heldFd = fs.openSync(held, "wx", 420);
146
+ fs.closeSync(heldFd);
147
+ return fd;
148
+ } catch (err) {
149
+ if (err.code !== "EEXIST") {
150
+ return fd;
151
+ }
152
+ let age_ms;
153
+ try {
154
+ age_ms = Date.now() - fs.statSync(held).mtimeMs;
155
+ } catch {
156
+ continue;
157
+ }
158
+ if (age_ms >= LOCK_STALE_MS) {
159
+ try {
160
+ fs.rmSync(held, { force: true });
161
+ } catch {
162
+ }
163
+ continue;
164
+ }
165
+ if (!blocking) {
166
+ return give_up();
167
+ }
168
+ if (Date.now() - start > LOCK_ACQUIRE_DEADLINE_MS) {
169
+ return give_up();
170
+ }
171
+ _sleep(LOCK_SPIN_SLEEP_MS);
172
+ }
173
+ }
174
+ }
175
+ function _release_lock(fd, lock_path) {
176
+ try {
177
+ fs.closeSync(fd);
178
+ } catch {
179
+ }
180
+ try {
181
+ fs.rmSync(lock_path + ".held", { force: true });
182
+ } catch {
183
+ }
184
+ }
185
+ function _publish_text_locked(target, text) {
186
+ const tmp = target + `.tmp.${process.pid}`;
187
+ fs.writeFileSync(tmp, text, { encoding: "utf-8" });
188
+ fs.renameSync(tmp, target);
189
+ }
190
+ function _atomic_write_text(target, text) {
191
+ const lock_path = _lock_path(path.dirname(target));
192
+ const fd = _acquire_lock(lock_path);
193
+ if (fd === null) {
194
+ _publish_text_locked(target, text);
195
+ return;
196
+ }
197
+ try {
198
+ _publish_text_locked(target, text);
199
+ } finally {
200
+ _release_lock(fd, lock_path);
201
+ }
202
+ }
203
+ function has_stable_session_id(session_id) {
204
+ return typeof session_id === "string" && session_id.trim() !== "";
205
+ }
206
+ function session_state_file(dir, session_id) {
207
+ const digest = createHash("sha256").update(session_id, "utf8").digest("hex").slice(0, 32);
208
+ return path.join(dir, `${digest}.json`);
209
+ }
210
+ function restore_claimed_state(tomb, live, link = fs.linkSync) {
211
+ try {
212
+ link(tomb, live);
213
+ } catch (err) {
214
+ const code = err.code;
215
+ if (code !== "EEXIST" && code !== "ENOENT") {
216
+ if (!NO_HARD_LINK_CODES.has(code ?? "")) throw err;
217
+ if (!fs.existsSync(live)) {
218
+ fs.renameSync(tomb, live);
219
+ return;
220
+ }
221
+ }
222
+ }
223
+ fs.rmSync(tomb, { force: true });
224
+ }
225
+ var NO_HARD_LINK_CODES = /* @__PURE__ */ new Set(["EPERM", "ENOSYS", "EXDEV", "EOPNOTSUPP", "EMLINK"]);
226
+ function prune_stale_session_states(dir, now_ms, retention_days, mtime_of = (target) => fs.statSync(target).mtimeMs) {
227
+ if (is_replay_mode()) return 0;
228
+ const cutoff = now_ms - retention_days * 24 * 60 * 60 * 1e3;
229
+ let entries;
230
+ try {
231
+ entries = fs.readdirSync(dir);
232
+ } catch {
233
+ return 0;
234
+ }
235
+ let removed = 0;
236
+ let claim = 0;
237
+ for (const name of entries) {
238
+ const orphan = /^(.+\.json)\.\d+\.\d+\.tomb$/.exec(name);
239
+ const live_name = orphan?.[1];
240
+ if (live_name === void 0) continue;
241
+ const tomb = path.join(dir, name);
242
+ const live = path.join(dir, live_name);
243
+ try {
244
+ if (mtime_of(tomb) >= cutoff) {
245
+ restore_claimed_state(tomb, live);
246
+ continue;
247
+ }
248
+ fs.rmSync(tomb, { force: true });
249
+ removed += 1;
250
+ } catch {
251
+ }
252
+ }
253
+ for (const name of entries) {
254
+ if (!name.endsWith(".json")) continue;
255
+ const full = path.join(dir, name);
256
+ try {
257
+ if (mtime_of(full) >= cutoff) continue;
258
+ claim += 1;
259
+ const tomb = `${full}.${process.pid}.${claim}.tomb`;
260
+ fs.renameSync(full, tomb);
261
+ if (mtime_of(tomb) >= cutoff) {
262
+ restore_claimed_state(tomb, full);
263
+ continue;
264
+ }
265
+ fs.rmSync(tomb, { force: true });
266
+ for (const suffix of [".lock", ".lock.held"]) {
267
+ try {
268
+ fs.rmSync(`${full}${suffix}`, { force: true });
269
+ } catch {
270
+ }
271
+ }
272
+ removed += 1;
273
+ } catch {
274
+ }
275
+ }
276
+ return removed;
277
+ }
278
+ function prune_legacy_state_file(target) {
279
+ if (is_replay_mode()) return;
280
+ try {
281
+ if (fs.statSync(target).isFile()) {
282
+ fs.rmSync(target, { force: true });
283
+ }
284
+ } catch {
285
+ }
286
+ }
287
+ function owns_session_state(state, session_id) {
288
+ if (typeof state !== "object" || state === null || Array.isArray(state)) return false;
289
+ return state["session_id"] === session_id;
290
+ }
291
+ function update_json_under_lock(target, mutate, options = {}) {
292
+ if (is_replay_mode()) return "failed";
293
+ const targetPath = path.resolve(target);
294
+ const state_dir = path.dirname(targetPath);
295
+ try {
296
+ fs.mkdirSync(state_dir, { recursive: true });
297
+ } catch {
298
+ return "failed";
299
+ }
300
+ const lock_path = _target_lock_path(targetPath);
301
+ let fd;
302
+ try {
303
+ fd = _acquire_lock(lock_path, { blocking: options.blocking ?? true });
304
+ } catch {
305
+ return "failed";
306
+ }
307
+ if (fd === null) return "failed";
308
+ try {
309
+ let loaded = {};
310
+ try {
311
+ const raw = fs.readFileSync(targetPath, "utf-8");
312
+ const decoded = JSON.parse(raw);
313
+ if (typeof decoded === "object" && decoded !== null && !Array.isArray(decoded)) {
314
+ loaded = decoded;
315
+ }
316
+ } catch {
317
+ }
318
+ const next = mutate(loaded);
319
+ if (next === null) return "skipped";
320
+ _publish_text_locked(targetPath, _py_json_dumps(next, options.indent ?? 2) + "\n");
321
+ return "written";
322
+ } catch {
323
+ return "failed";
324
+ } finally {
325
+ _release_lock(fd, lock_path);
326
+ }
327
+ }
328
+
329
+ // src/scripts/_lib/git_common_dir.ts
330
+ import fs2 from "node:fs";
331
+ import path2 from "node:path";
332
+ function realpath_or_self(p) {
333
+ try {
334
+ return fs2.realpathSync(p);
335
+ } catch {
336
+ return p;
337
+ }
338
+ }
339
+ function git_dir(project_root) {
340
+ const dot_git = path2.join(project_root, ".git");
341
+ try {
342
+ const st = fs2.statSync(dot_git);
343
+ if (st.isDirectory()) {
344
+ return realpath_or_self(dot_git);
345
+ }
346
+ const m = fs2.readFileSync(dot_git, "utf-8").match(/^gitdir:\s*(.+)\s*$/m);
347
+ if (m === null) {
348
+ return null;
349
+ }
350
+ return realpath_or_self(path2.resolve(project_root, m[1].trim()));
351
+ } catch {
352
+ return null;
353
+ }
354
+ }
355
+ function current_branch(project_root) {
356
+ const gd = git_dir(project_root);
357
+ if (gd === null) return null;
358
+ try {
359
+ const head = fs2.readFileSync(path2.join(gd, "HEAD"), "utf-8").trim();
360
+ const m = head.match(/^ref:\s*refs\/heads\/(.+)$/);
361
+ return m === null ? null : m[1].trim();
362
+ } catch {
363
+ return null;
364
+ }
365
+ }
366
+ function git_common_dir(project_root) {
367
+ const dot_git = path2.join(project_root, ".git");
368
+ try {
369
+ const st = fs2.statSync(dot_git);
370
+ if (st.isDirectory()) {
371
+ return realpath_or_self(dot_git);
372
+ }
373
+ const m = fs2.readFileSync(dot_git, "utf-8").match(/^gitdir:\s*(.+)\s*$/m);
374
+ if (m === null) {
375
+ return null;
376
+ }
377
+ const gitdir = path2.resolve(project_root, m[1].trim());
378
+ const commondir_file = path2.join(gitdir, "commondir");
379
+ if (fs2.existsSync(commondir_file)) {
380
+ const common = path2.resolve(gitdir, fs2.readFileSync(commondir_file, "utf-8").trim());
381
+ return realpath_or_self(common);
382
+ }
383
+ return realpath_or_self(gitdir);
384
+ } catch {
385
+ return null;
386
+ }
387
+ }
388
+
389
+ export {
390
+ is_replay_mode,
391
+ atomic_write_json,
392
+ atomic_write_text,
393
+ has_stable_session_id,
394
+ session_state_file,
395
+ prune_stale_session_states,
396
+ prune_legacy_state_file,
397
+ owns_session_state,
398
+ update_json_under_lock,
399
+ git_dir,
400
+ current_branch,
401
+ git_common_dir
402
+ };
@@ -10,6 +10,11 @@ import {
10
10
  claude_plugin_snapshot_version,
11
11
  codex_plugin_identity
12
12
  } from "./chunk-FTAISGDQ.js";
13
+ import {
14
+ DEFAULT_GITATTRIBUTES,
15
+ SECTION_HEADER,
16
+ _is_source_repo
17
+ } from "./chunk-M2DPGFZ4.js";
13
18
  import {
14
19
  DEFAULT_PROJECTS_ROOT,
15
20
  aggregateByBucket,
@@ -21,15 +26,10 @@ import {
21
26
  projectStoreSlug,
22
27
  scanTranscripts,
23
28
  weightedInputUnits
24
- } from "./chunk-FBKL6JWT.js";
29
+ } from "./chunk-MMSGVZKV.js";
25
30
  import {
26
31
  git_common_dir
27
- } from "./chunk-PZWRPRWP.js";
28
- import {
29
- DEFAULT_GITATTRIBUTES,
30
- SECTION_HEADER,
31
- _is_source_repo
32
- } from "./chunk-M2DPGFZ4.js";
32
+ } from "./chunk-E4XIZDIB.js";
33
33
  import {
34
34
  DEFAULT_DEPLOY_ROOTS,
35
35
  MANAGED_SIGNATURE,
@@ -38,15 +38,21 @@ import {
38
38
  global_deploy_inventory_exports,
39
39
  manifest_path,
40
40
  read_manifest
41
- } from "./chunk-63WSP6YZ.js";
41
+ } from "./chunk-PMEKGDED.js";
42
42
  import {
43
43
  read_lockfile
44
- } from "./chunk-GRRPEPRN.js";
44
+ } from "./chunk-T7L2QK3K.js";
45
45
  import {
46
46
  LEGACY_ALL,
47
47
  excludedRuleBasenames,
48
48
  ruleScopeFromSettings
49
- } from "./chunk-NXFWFAYV.js";
49
+ } from "./chunk-G23AT6GD.js";
50
+ import {
51
+ require_dist
52
+ } from "./chunk-OY53J6II.js";
53
+ import {
54
+ resolvePackageRoot
55
+ } from "./chunk-MCJYCQPF.js";
50
56
  import {
51
57
  PROJECT_ROOT_ENV,
52
58
  ProjectRootError,
@@ -59,12 +65,6 @@ import {
59
65
  event4u_root,
60
66
  resolve_with_fallback
61
67
  } from "./chunk-NDJLNC6Q.js";
62
- import {
63
- require_dist
64
- } from "./chunk-OY53J6II.js";
65
- import {
66
- resolvePackageRoot
67
- } from "./chunk-MCJYCQPF.js";
68
68
  import {
69
69
  __export,
70
70
  __toESM
@@ -332,6 +332,7 @@ export {
332
332
  load_packs_registry,
333
333
  compute_active_pack_ids,
334
334
  is_pruned_under_scoped,
335
+ parseFrontmatter,
335
336
  LEGACY_ALL,
336
337
  ruleScopeFromSettings,
337
338
  ruleFileArrives,