harnery 0.45.1 → 0.46.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 (332) hide show
  1. package/dist/commander.d.ts +13 -0
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commands/admission.d.ts.map +1 -1
  4. package/dist/commands/admission.js +214 -27
  5. package/dist/commands/agents.d.ts +4 -0
  6. package/dist/commands/agents.d.ts.map +1 -1
  7. package/dist/commands/agents.js +102 -25
  8. package/dist/commands/browse.d.ts +3 -0
  9. package/dist/commands/browse.d.ts.map +1 -1
  10. package/dist/commands/browse.js +172 -8
  11. package/dist/commands/fetch.js +1 -0
  12. package/dist/commands/ledger-v3.d.ts.map +1 -1
  13. package/dist/commands/ledger-v3.js +8 -2
  14. package/dist/commands/presence.d.ts.map +1 -1
  15. package/dist/commands/presence.js +40 -0
  16. package/dist/commands/qa-run.d.ts.map +1 -1
  17. package/dist/commands/qa-run.js +4 -3
  18. package/dist/commands/review-pack.d.ts.map +1 -1
  19. package/dist/commands/review-pack.js +33 -6
  20. package/dist/commands/workflow.d.ts.map +1 -1
  21. package/dist/commands/workflow.js +6 -45
  22. package/dist/core/agents/coord-client.d.ts.map +1 -1
  23. package/dist/core/agents/coord-client.js +0 -18
  24. package/dist/core/agents/index.d.ts +1 -0
  25. package/dist/core/agents/index.d.ts.map +1 -1
  26. package/dist/core/agents/index.js +1 -0
  27. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  28. package/dist/core/agents/live-authority-v3.js +11 -4
  29. package/dist/core/agents/render/session-context.d.ts +0 -6
  30. package/dist/core/agents/render/session-context.d.ts.map +1 -1
  31. package/dist/core/agents/render/session-context.js +1 -6
  32. package/dist/core/agents/session-events.d.ts.map +1 -1
  33. package/dist/core/agents/session-events.js +12 -4
  34. package/dist/core/agents/state/heartbeat-reader.d.ts +3 -0
  35. package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -1
  36. package/dist/core/agents/state/live-coordination-view.d.ts +3 -1
  37. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  38. package/dist/core/agents/state/live-coordination-view.js +6 -2
  39. package/dist/core/agents/state/parent-reference-contract.d.ts +16 -0
  40. package/dist/core/agents/state/parent-reference-contract.d.ts.map +1 -0
  41. package/dist/core/agents/state/parent-reference-contract.js +1 -0
  42. package/dist/core/agents/state/parent-reference.d.ts +18 -0
  43. package/dist/core/agents/state/parent-reference.d.ts.map +1 -0
  44. package/dist/core/agents/state/parent-reference.js +119 -0
  45. package/dist/core/agents/state/pidmap.js +2 -2
  46. package/dist/core/agents/state/proc-start.d.ts +20 -31
  47. package/dist/core/agents/state/proc-start.d.ts.map +1 -1
  48. package/dist/core/agents/state/proc-start.js +37 -70
  49. package/dist/core/agents/state/service-process.d.ts +61 -0
  50. package/dist/core/agents/state/service-process.d.ts.map +1 -0
  51. package/dist/core/agents/state/service-process.js +143 -0
  52. package/dist/core/config.d.ts +39 -0
  53. package/dist/core/config.d.ts.map +1 -1
  54. package/dist/core/config.js +63 -0
  55. package/dist/core/context/index.d.ts +6 -4
  56. package/dist/core/context/index.d.ts.map +1 -1
  57. package/dist/core/context/index.js +194 -256
  58. package/dist/core/context/observation.d.ts +9 -9
  59. package/dist/core/context/observation.d.ts.map +1 -1
  60. package/dist/core/context/observation.js +37 -6
  61. package/dist/core/diagnostics/path-identity.d.ts +1 -1
  62. package/dist/core/diagnostics/path-identity.d.ts.map +1 -1
  63. package/dist/core/diagnostics/path-identity.js +51 -6
  64. package/dist/core/events/v3/canonical.js +43 -14
  65. package/dist/core/events/v3/index.d.ts +1 -1
  66. package/dist/core/events/v3/index.d.ts.map +1 -1
  67. package/dist/core/events/v3/index.js +1 -1
  68. package/dist/core/events/v3/producers/recorder.d.ts +34 -0
  69. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  70. package/dist/core/events/v3/producers/recorder.js +117 -13
  71. package/dist/core/events/v3/reader.d.ts.map +1 -1
  72. package/dist/core/events/v3/reader.js +53 -13
  73. package/dist/core/events/v3/runtime-build.d.ts +14 -0
  74. package/dist/core/events/v3/runtime-build.d.ts.map +1 -1
  75. package/dist/core/events/v3/runtime-build.js +44 -0
  76. package/dist/core/events/v3/validate.d.ts.map +1 -1
  77. package/dist/core/events/v3/validate.js +36 -1
  78. package/dist/core/governor/index.d.ts +2 -1
  79. package/dist/core/governor/index.d.ts.map +1 -1
  80. package/dist/core/governor/index.js +2 -1
  81. package/dist/core/governor/service-read.d.ts +3 -10
  82. package/dist/core/governor/service-read.d.ts.map +1 -1
  83. package/dist/core/governor/service-read.js +10 -94
  84. package/dist/core/governor/service.d.ts +3 -7
  85. package/dist/core/governor/service.d.ts.map +1 -1
  86. package/dist/core/governor/service.js +17 -182
  87. package/dist/core/hooks/adapter/native-parent.d.ts +23 -0
  88. package/dist/core/hooks/adapter/native-parent.d.ts.map +1 -0
  89. package/dist/core/hooks/adapter/native-parent.js +91 -0
  90. package/dist/core/hooks/cli.js +79 -4
  91. package/dist/core/hooks/resolve/owner.d.ts +0 -11
  92. package/dist/core/hooks/resolve/owner.d.ts.map +1 -1
  93. package/dist/core/hooks/resolve/owner.js +2 -25
  94. package/dist/core/hooks/shell-admission.d.ts +84 -0
  95. package/dist/core/hooks/shell-admission.d.ts.map +1 -0
  96. package/dist/core/hooks/shell-admission.js +622 -0
  97. package/dist/core/hooks/shell-commit-tree.d.ts +2 -0
  98. package/dist/core/hooks/shell-commit-tree.d.ts.map +1 -0
  99. package/dist/core/hooks/shell-commit-tree.js +104 -0
  100. package/dist/core/inbox/contract.d.ts +12 -0
  101. package/dist/core/inbox/contract.d.ts.map +1 -1
  102. package/dist/core/inbox/contract.js +16 -0
  103. package/dist/core/inbox/peer-messages.d.ts +41 -16
  104. package/dist/core/inbox/peer-messages.d.ts.map +1 -1
  105. package/dist/core/inbox/peer-messages.js +372 -15
  106. package/dist/core/inbox/service.d.ts +8 -1
  107. package/dist/core/inbox/service.d.ts.map +1 -1
  108. package/dist/core/inbox/service.js +83 -3
  109. package/dist/core/inbox/targets.d.ts +17 -3
  110. package/dist/core/inbox/targets.d.ts.map +1 -1
  111. package/dist/core/inbox/targets.js +77 -2
  112. package/dist/core/presence/git.d.ts +18 -12
  113. package/dist/core/presence/git.d.ts.map +1 -1
  114. package/dist/core/presence/git.js +32 -38
  115. package/dist/core/presence/index.d.ts +2 -2
  116. package/dist/core/presence/index.d.ts.map +1 -1
  117. package/dist/core/presence/index.js +8 -6
  118. package/dist/core/presence/mail.d.ts +133 -0
  119. package/dist/core/presence/mail.d.ts.map +1 -0
  120. package/dist/core/presence/mail.js +464 -0
  121. package/dist/core/resources/sampler.js +2 -2
  122. package/dist/core/resources/service-status.d.ts +2 -14
  123. package/dist/core/resources/service-status.d.ts.map +1 -1
  124. package/dist/core/resources/service-status.js +3 -23
  125. package/dist/core/resources/service.d.ts +3 -7
  126. package/dist/core/resources/service.d.ts.map +1 -1
  127. package/dist/core/resources/service.js +12 -101
  128. package/dist/core/resources/status.d.ts.map +1 -1
  129. package/dist/core/resources/status.js +3 -2
  130. package/dist/core/semantic/contract.d.ts +5 -5
  131. package/dist/core/semantic/service.d.ts.map +1 -1
  132. package/dist/core/semantic/service.js +9 -2
  133. package/dist/core/servers/index.d.ts +0 -2
  134. package/dist/core/servers/index.d.ts.map +1 -1
  135. package/dist/core/servers/index.js +3 -18
  136. package/dist/core/storage/modes.d.ts +4 -0
  137. package/dist/core/storage/modes.d.ts.map +1 -1
  138. package/dist/core/storage/modes.js +4 -0
  139. package/dist/core/storage/segments.d.ts.map +1 -1
  140. package/dist/core/storage/segments.js +5 -4
  141. package/dist/core/supervisor/service.d.ts +4 -7
  142. package/dist/core/supervisor/service.d.ts.map +1 -1
  143. package/dist/core/supervisor/service.js +23 -122
  144. package/dist/core/supervisor/services.js +2 -2
  145. package/dist/core/supervisor/status.d.ts +3 -17
  146. package/dist/core/supervisor/status.d.ts.map +1 -1
  147. package/dist/core/supervisor/status.js +7 -70
  148. package/dist/core/workflow/engine.js +2 -1
  149. package/dist/core/workflow/index.d.ts +3 -4
  150. package/dist/core/workflow/index.d.ts.map +1 -1
  151. package/dist/core/workflow/index.js +2 -2
  152. package/dist/core/workflow/proof.d.ts.map +1 -1
  153. package/dist/core/workflow/proof.js +30 -74
  154. package/dist/core/workflow/resume-lock.d.ts +17 -0
  155. package/dist/core/workflow/resume-lock.d.ts.map +1 -0
  156. package/dist/core/workflow/resume-lock.js +158 -0
  157. package/dist/core/workflow/run-state.d.ts +0 -21
  158. package/dist/core/workflow/run-state.d.ts.map +1 -1
  159. package/dist/core/workflow/run-state.js +3 -174
  160. package/dist/core/workflow/workspaces/leases.d.ts +4 -0
  161. package/dist/core/workflow/workspaces/leases.d.ts.map +1 -1
  162. package/dist/core/workflow/workspaces/leases.js +1 -1
  163. package/dist/core/workflow/workspaces/local-git.js +91 -210
  164. package/dist/core/workflow/workspaces/ownership.d.ts +0 -7
  165. package/dist/core/workflow/workspaces/ownership.d.ts.map +1 -1
  166. package/dist/core/workflow/workspaces/ownership.js +3 -130
  167. package/dist/core/workflow/workspaces/reclaim.d.ts +4 -7
  168. package/dist/core/workflow/workspaces/reclaim.d.ts.map +1 -1
  169. package/dist/core/workflow/workspaces/reclaim.js +0 -4
  170. package/dist/core/workflow/workspaces/recovery.d.ts +1 -1
  171. package/dist/core/workflow/workspaces/recovery.d.ts.map +1 -1
  172. package/dist/core/workflow/workspaces/recovery.js +1 -1
  173. package/dist/core/workflow/workspaces/state.d.ts.map +1 -1
  174. package/dist/core/workflow/workspaces/state.js +1 -4
  175. package/dist/lib/admission-history.d.ts +96 -0
  176. package/dist/lib/admission-history.d.ts.map +1 -0
  177. package/dist/lib/admission-history.js +196 -0
  178. package/dist/lib/admission.d.ts +56 -7
  179. package/dist/lib/admission.d.ts.map +1 -1
  180. package/dist/lib/admission.js +161 -19
  181. package/dist/lib/browser/client.d.ts +18 -0
  182. package/dist/lib/browser/client.d.ts.map +1 -1
  183. package/dist/lib/browser/client.js +100 -12
  184. package/dist/lib/browser/content-checks.d.ts +3 -1
  185. package/dist/lib/browser/content-checks.d.ts.map +1 -1
  186. package/dist/lib/browser/content-checks.js +10 -2
  187. package/dist/lib/browser/critique.d.ts +32 -0
  188. package/dist/lib/browser/critique.d.ts.map +1 -1
  189. package/dist/lib/browser/critique.js +72 -3
  190. package/dist/lib/browser/geometry.d.ts +2 -0
  191. package/dist/lib/browser/geometry.d.ts.map +1 -1
  192. package/dist/lib/browser/geometry.js +61 -15
  193. package/dist/lib/browser/index.d.ts +1 -1
  194. package/dist/lib/browser/index.d.ts.map +1 -1
  195. package/dist/lib/browser/index.js +1 -1
  196. package/dist/lib/browser/page-review-contracts.d.ts +6 -1
  197. package/dist/lib/browser/page-review-contracts.d.ts.map +1 -1
  198. package/dist/lib/browser/page-review-contracts.js +6 -1
  199. package/dist/lib/browser/page-review-judge.d.ts +3 -1
  200. package/dist/lib/browser/page-review-judge.d.ts.map +1 -1
  201. package/dist/lib/browser/page-review-judge.js +41 -11
  202. package/dist/lib/browser/page-review-pack.d.ts +3 -0
  203. package/dist/lib/browser/page-review-pack.d.ts.map +1 -1
  204. package/dist/lib/browser/page-review-pack.js +5 -2
  205. package/dist/lib/browser/qa-run-contracts.d.ts +11 -0
  206. package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -1
  207. package/dist/lib/browser/qa-run-contracts.js +11 -4
  208. package/dist/lib/browser/qa-run.d.ts.map +1 -1
  209. package/dist/lib/browser/qa-run.js +73 -16
  210. package/dist/lib/browser/runts.d.ts +4 -2
  211. package/dist/lib/browser/runts.d.ts.map +1 -1
  212. package/dist/lib/browser/runts.js +84 -33
  213. package/dist/lib/browser/windows-chrome.d.ts +14 -0
  214. package/dist/lib/browser/windows-chrome.d.ts.map +1 -1
  215. package/dist/lib/browser/windows-chrome.js +42 -0
  216. package/dist/lib/browser/windows-login-sync.d.ts +110 -0
  217. package/dist/lib/browser/windows-login-sync.d.ts.map +1 -0
  218. package/dist/lib/browser/windows-login-sync.js +171 -0
  219. package/dist/lib/cookies/client.d.ts +30 -5
  220. package/dist/lib/cookies/client.d.ts.map +1 -1
  221. package/dist/lib/cookies/client.js +55 -10
  222. package/dist/lib/cookies/index.d.ts +1 -1
  223. package/dist/lib/cookies/index.d.ts.map +1 -1
  224. package/dist/lib/cookies/index.js +1 -1
  225. package/dist/lib/docs-metadata-sync.d.ts.map +1 -1
  226. package/dist/lib/docs-metadata-sync.js +41 -2
  227. package/dist/lib/durable-job.d.ts +8 -0
  228. package/dist/lib/durable-job.d.ts.map +1 -1
  229. package/dist/lib/durable-job.js +10 -0
  230. package/dist/lib/http/client.d.ts +9 -8
  231. package/dist/lib/http/client.d.ts.map +1 -1
  232. package/dist/lib/http/client.js +44 -2
  233. package/dist/lib/instructions/templates.js +4 -4
  234. package/package.json +2 -2
  235. package/src/commander.ts +13 -0
  236. package/src/commands/admission.ts +272 -29
  237. package/src/commands/agents.ts +132 -27
  238. package/src/commands/browse.ts +208 -6
  239. package/src/commands/fetch.ts +1 -0
  240. package/src/commands/ledger-v3.ts +8 -2
  241. package/src/commands/presence.ts +49 -0
  242. package/src/commands/qa-run.ts +4 -3
  243. package/src/commands/review-pack.ts +41 -5
  244. package/src/commands/workflow.ts +8 -58
  245. package/src/core/agents/coord-client.ts +0 -20
  246. package/src/core/agents/index.ts +6 -0
  247. package/src/core/agents/live-authority-v3.ts +11 -4
  248. package/src/core/agents/render/session-context.ts +1 -7
  249. package/src/core/agents/session-events.ts +18 -3
  250. package/src/core/agents/state/heartbeat-reader.ts +3 -0
  251. package/src/core/agents/state/live-coordination-view.ts +13 -6
  252. package/src/core/agents/state/parent-reference-contract.ts +14 -0
  253. package/src/core/agents/state/parent-reference.ts +179 -0
  254. package/src/core/agents/state/pidmap.ts +2 -2
  255. package/src/core/agents/state/proc-start.ts +41 -69
  256. package/src/core/agents/state/service-process.ts +217 -0
  257. package/src/core/config.ts +85 -0
  258. package/src/core/context/index.ts +207 -272
  259. package/src/core/context/observation.ts +40 -9
  260. package/src/core/diagnostics/path-identity.ts +52 -6
  261. package/src/core/events/v3/canonical.ts +46 -13
  262. package/src/core/events/v3/index.ts +3 -0
  263. package/src/core/events/v3/producers/recorder.ts +151 -13
  264. package/src/core/events/v3/reader.ts +55 -11
  265. package/src/core/events/v3/runtime-build.ts +62 -0
  266. package/src/core/events/v3/validate.ts +42 -1
  267. package/src/core/governor/index.ts +1 -2
  268. package/src/core/governor/service-read.ts +15 -114
  269. package/src/core/governor/service.ts +36 -220
  270. package/src/core/hooks/adapter/native-parent.ts +109 -0
  271. package/src/core/hooks/cli.ts +83 -4
  272. package/src/core/hooks/resolve/owner.ts +2 -25
  273. package/src/core/hooks/shell-admission.ts +634 -0
  274. package/src/core/hooks/shell-commit-tree.ts +102 -0
  275. package/src/core/inbox/contract.ts +18 -0
  276. package/src/core/inbox/peer-messages.ts +501 -15
  277. package/src/core/inbox/service.ts +108 -3
  278. package/src/core/inbox/targets.ts +94 -3
  279. package/src/core/presence/git.ts +45 -37
  280. package/src/core/presence/index.ts +16 -8
  281. package/src/core/presence/mail.ts +620 -0
  282. package/src/core/resources/sampler.ts +3 -2
  283. package/src/core/resources/service-status.ts +6 -35
  284. package/src/core/resources/service.ts +23 -133
  285. package/src/core/resources/status.ts +3 -2
  286. package/src/core/semantic/service.ts +8 -2
  287. package/src/core/servers/index.ts +3 -23
  288. package/src/core/storage/modes.ts +6 -0
  289. package/src/core/storage/segments.ts +5 -4
  290. package/src/core/supervisor/service.ts +33 -155
  291. package/src/core/supervisor/services.ts +2 -2
  292. package/src/core/supervisor/status.ts +10 -85
  293. package/src/core/workflow/engine.ts +1 -1
  294. package/src/core/workflow/index.ts +2 -13
  295. package/src/core/workflow/proof.ts +35 -83
  296. package/src/core/workflow/resume-lock.ts +179 -0
  297. package/src/core/workflow/run-state.ts +3 -207
  298. package/src/core/workflow/workspaces/leases.ts +1 -1
  299. package/src/core/workflow/workspaces/local-git.ts +120 -239
  300. package/src/core/workflow/workspaces/ownership.ts +3 -158
  301. package/src/core/workflow/workspaces/reclaim.ts +3 -9
  302. package/src/core/workflow/workspaces/recovery.ts +1 -1
  303. package/src/core/workflow/workspaces/state.ts +1 -5
  304. package/src/lib/admission-history.ts +267 -0
  305. package/src/lib/admission.ts +217 -19
  306. package/src/lib/browser/client.ts +147 -35
  307. package/src/lib/browser/content-checks.ts +14 -3
  308. package/src/lib/browser/critique.ts +113 -3
  309. package/src/lib/browser/geometry.ts +63 -14
  310. package/src/lib/browser/index.ts +5 -0
  311. package/src/lib/browser/page-review-contracts.ts +6 -1
  312. package/src/lib/browser/page-review-judge.ts +58 -13
  313. package/src/lib/browser/page-review-pack.ts +13 -2
  314. package/src/lib/browser/qa-run-contracts.ts +30 -4
  315. package/src/lib/browser/qa-run.ts +78 -17
  316. package/src/lib/browser/runts.ts +85 -37
  317. package/src/lib/browser/windows-chrome.ts +50 -0
  318. package/src/lib/browser/windows-login-sync.ts +275 -0
  319. package/src/lib/cookies/client.ts +62 -10
  320. package/src/lib/cookies/index.ts +3 -0
  321. package/src/lib/docs-metadata-sync.ts +44 -2
  322. package/src/lib/durable-job.ts +15 -0
  323. package/src/lib/http/client.ts +63 -1
  324. package/src/lib/instructions/templates.ts +4 -4
  325. package/dist/core/agents/state/process-handle.d.ts +0 -26
  326. package/dist/core/agents/state/process-handle.d.ts.map +0 -1
  327. package/dist/core/agents/state/process-handle.js +0 -121
  328. package/dist/core/workflow/recovery-audit.d.ts +0 -30
  329. package/dist/core/workflow/recovery-audit.d.ts.map +0 -1
  330. package/dist/core/workflow/recovery-audit.js +0 -116
  331. package/src/core/agents/state/process-handle.ts +0 -165
  332. package/src/core/workflow/recovery-audit.ts +0 -181
@@ -1,24 +1,25 @@
1
1
  import { spawn } from "node:child_process";
2
- import { randomUUID } from "node:crypto";
3
- import { closeSync, existsSync, mkdirSync, openSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
2
+ import { existsSync, mkdirSync, readdirSync, rmSync } from "node:fs";
4
3
  import { hostname } from "node:os";
5
4
  import { resolve } from "node:path";
6
5
  import { performance } from "node:perf_hooks";
7
6
  import { fileURLToPath } from "node:url";
8
7
  import { collectCoordinationHealthSnapshot } from "../agents/health.js";
9
- import { processStartToken, signalIfSameGeneration, } from "../agents/state/proc-start.js";
8
+ import { processStartToken } from "../agents/state/proc-start.js";
9
+ import { acquireServiceLease, requestServiceStop, serviceLeaseOwner, serviceStartRefusal, } from "../agents/state/service-process.js";
10
10
  import { resolveBinName } from "../config.js";
11
11
  import { pressureHistoryFromSupervisor } from "../diagnostics/advice.js";
12
12
  import { assessPressure } from "../diagnostics/pressure.js";
13
13
  import { readEventV3ControlState } from "../events/v3/control.js";
14
14
  import { janitorLiveDisplayV3 } from "../events/v3/live-feed.js";
15
+ import { installedHarneryBuild } from "../events/v3/runtime-build.js";
15
16
  import { sampleResources } from "../resources/sampler.js";
16
17
  import { requestResourceServiceStop } from "../resources/service.js";
17
18
  import { readResourceServiceStatus } from "../resources/service-status.js";
18
19
  import { resourcePaths } from "../resources/storage.js";
19
20
  import { writePrivateJsonAtomic } from "../storage/atomic-json.js";
20
21
  import { closeProcessLoggers, legacyLogFields, processLogger } from "../storage/logger.js";
21
- import { stateDirMode, stateFileMode } from "../storage/modes.js";
22
+ import { stateDirMode } from "../storage/modes.js";
22
23
  import { collectSupervisorActivitySnapshot } from "./activity.js";
23
24
  import { SUPERVISOR_PRESSURE_SCHEMA_VERSION, SUPERVISOR_SNAPSHOT_SCHEMA_VERSION, SUPERVISOR_STATUS_SCHEMA_VERSION, } from "./contract.js";
24
25
  import { explainSupervisorFinding } from "./explanations.js";
@@ -29,7 +30,7 @@ import { writeSupervisorHookHealth } from "./hook-health-storage.js";
29
30
  import { collectHookHealth } from "./hooks.js";
30
31
  import { SupervisorLogCollector } from "./log-feed.js";
31
32
  import { collectServiceHealth } from "./services.js";
32
- import { installedSupervisorBuild, readSupervisorStatus, supervisorProcessLiveness, } from "./status.js";
33
+ import { readSupervisorStatus } from "./status.js";
33
34
  import { readSupervisorFindings, readSupervisorHistory, readSupervisorPressure, supervisorPaths, } from "./storage.js";
34
35
  import { buildSupervisorTimeline } from "./timeline.js";
35
36
  export const SUPERVISOR_DEFAULT_INTERVAL_MS = 2_000;
@@ -42,13 +43,12 @@ const LIVE_DISPLAY_SWEEP_INTERVAL_MS = 5 * 60_000;
42
43
  export async function spawnSupervisor(coordRootRaw, options = {}) {
43
44
  const coordRoot = resolve(coordRootRaw);
44
45
  const current = readSupervisorStatus(coordRoot);
45
- if (current.liveness === "unknown")
46
- throw unknownOwnerError();
47
- if (current.liveness === "running") {
48
- throw new Error(`local supervisor is already running under pid ${current.record?.pid}`);
49
- }
46
+ if (current.liveness !== "stopped")
47
+ throw startRefusal(current.record?.pid, current.liveness);
50
48
  const paths = supervisorPaths(coordRoot);
51
- assertLeaseAvailable(paths.lease);
49
+ const lease = serviceLeaseOwner(paths.lease);
50
+ if (lease.liveness !== "stopped")
51
+ throw startRefusal(lease.lease?.pid, lease.liveness);
52
52
  await stopLegacyResourceObserver(coordRoot);
53
53
  const intervalMs = normalizeInterval(options.intervalMs);
54
54
  const idleExitMs = normalizeIdleExit(options.idleExitMs);
@@ -112,45 +112,29 @@ export async function ensureSupervisorRunning(coordRoot) {
112
112
  };
113
113
  }
114
114
  }
115
+ /** Windows has no graceful SIGTERM, so the durable request alone stops it there. */
115
116
  export function requestSupervisorStop(coordRootRaw, dependencies = {}) {
116
117
  const coordRoot = resolve(coordRootRaw);
117
- const paths = supervisorPaths(coordRoot);
118
- const status = readSupervisorStatus(coordRoot, Date.now(), dependencies);
119
- mkdirSync(paths.root, { recursive: true, mode: stateDirMode() });
120
- writePrivateJsonAtomic(paths.stop, {
121
- requested_at: new Date().toISOString(),
122
- requested_by_pid: process.pid,
123
- });
124
118
  const legacyPaths = resourcePaths(coordRoot);
125
119
  if (existsSync(legacyPaths.service) || existsSync(legacyPaths.lease))
126
120
  requestResourceServiceStop(coordRoot, dependencies);
127
- let signal = { sent: false, verdict: status.generation };
128
- if (status.liveness === "running" &&
129
- status.record?.host === hostname() &&
130
- process.platform !== "win32") {
131
- signal = signalIfSameGeneration(status.record.pid, status.record.start_token, "SIGTERM", dependencies);
132
- }
133
- return {
134
- ...readSupervisorStatus(coordRoot, Date.now(), dependencies),
135
- signal_sent: signal.sent,
136
- signal_verdict: signal.verdict,
137
- };
121
+ const read = () => readSupervisorStatus(coordRoot, Date.now(), dependencies);
122
+ return requestServiceStop(read(), read, supervisorPaths(coordRoot).stop, dependencies, {
123
+ signal: process.platform !== "win32",
124
+ });
138
125
  }
139
126
  export async function runSupervisor(input) {
140
127
  const coordRoot = resolve(input.coordRoot);
141
128
  const current = readSupervisorStatus(coordRoot);
142
- if (current.liveness === "unknown")
143
- throw unknownOwnerError();
144
- if (current.liveness === "running") {
145
- throw new Error(`local supervisor is already running under pid ${current.record?.pid}`);
146
- }
129
+ if (current.liveness !== "stopped")
130
+ throw startRefusal(current.record?.pid, current.liveness);
147
131
  const paths = supervisorPaths(coordRoot);
148
132
  const intervalMs = normalizeInterval(input.intervalMs);
149
133
  const idleExitMs = normalizeIdleExit(input.idleExitMs);
150
134
  const keepAlive = input.keepAlive ?? false;
151
135
  const now = input.now ?? (() => new Date());
152
136
  const wait = input.wait ?? delay;
153
- const lease = acquireLease(coordRoot, now());
137
+ const lease = acquireServiceLease(paths.lease, startRefusal);
154
138
  rmSync(paths.stop, { force: true });
155
139
  const startedAt = now().toISOString();
156
140
  const startToken = processStartToken(process.pid);
@@ -158,7 +142,7 @@ export async function runSupervisor(input) {
158
142
  schema_version: SUPERVISOR_STATUS_SCHEMA_VERSION,
159
143
  pid: process.pid,
160
144
  ...(startToken ? { start_token: startToken } : {}),
161
- running_build: installedSupervisorBuild(),
145
+ running_build: installedHarneryBuild(),
162
146
  host: hostname(),
163
147
  nonce: lease.nonce,
164
148
  state: "starting",
@@ -400,7 +384,7 @@ export async function runSupervisor(input) {
400
384
  await closeProcessLoggers();
401
385
  }
402
386
  finally {
403
- releaseLease(paths.lease, lease.nonce);
387
+ lease.release();
404
388
  }
405
389
  }
406
390
  return status;
@@ -440,48 +424,6 @@ function observeLedgerControlState(coordRoot, now) {
440
424
  };
441
425
  }
442
426
  }
443
- function acquireLease(coordRoot, now) {
444
- const paths = supervisorPaths(coordRoot);
445
- mkdirSync(paths.root, { recursive: true, mode: stateDirMode() });
446
- for (let attempt = 0; attempt < 2; attempt++) {
447
- const startToken = processStartToken(process.pid);
448
- const lease = {
449
- pid: process.pid,
450
- ...(startToken ? { start_token: startToken } : {}),
451
- host: hostname(),
452
- nonce: randomUUID(),
453
- created_at: now.toISOString(),
454
- };
455
- try {
456
- const fd = openSync(paths.lease, "wx", stateFileMode());
457
- try {
458
- writeFileSync(fd, `${JSON.stringify(lease)}\n`, "utf8");
459
- }
460
- finally {
461
- closeSync(fd);
462
- }
463
- return lease;
464
- }
465
- catch (error) {
466
- if (error.code !== "EEXIST")
467
- throw error;
468
- const existing = readLease(paths.lease);
469
- const liveness = existing ? leaseIsLive(existing) : "unknown";
470
- if (liveness === "unknown")
471
- throw unknownOwnerError();
472
- if (existing && liveness === "running") {
473
- throw new Error(`local supervisor lease is held by pid ${existing.pid}`);
474
- }
475
- try {
476
- unlinkSync(paths.lease);
477
- }
478
- catch {
479
- // A concurrent starter may have replaced or removed the stale lease.
480
- }
481
- }
482
- }
483
- throw new Error("local supervisor could not acquire its singleton lease");
484
- }
485
427
  function pruneProjectionDirectory(directory, retainedFindingIds) {
486
428
  for (const file of readdirSync(directory)) {
487
429
  if (!file.endsWith(".json"))
@@ -491,49 +433,8 @@ function pruneProjectionDirectory(directory, retainedFindingIds) {
491
433
  rmSync(resolve(directory, file), { force: true });
492
434
  }
493
435
  }
494
- function releaseLease(path, nonce) {
495
- const current = readLease(path);
496
- if (current?.nonce !== nonce)
497
- return;
498
- try {
499
- unlinkSync(path);
500
- }
501
- catch {
502
- // A missing lease is already released.
503
- }
504
- }
505
- function readLease(path) {
506
- try {
507
- const value = JSON.parse(readFileSync(path, "utf8"));
508
- return value &&
509
- Number.isSafeInteger(value.pid) &&
510
- value.pid > 0 &&
511
- typeof value.host === "string" &&
512
- value.host.length > 0 &&
513
- typeof value.nonce === "string" &&
514
- value.nonce.length > 0
515
- ? value
516
- : undefined;
517
- }
518
- catch {
519
- return undefined;
520
- }
521
- }
522
- function leaseIsLive(lease) {
523
- return supervisorProcessLiveness(lease).liveness;
524
- }
525
- function assertLeaseAvailable(path) {
526
- if (!existsSync(path))
527
- return;
528
- const lease = readLease(path);
529
- const liveness = lease ? leaseIsLive(lease) : "unknown";
530
- if (liveness === "unknown")
531
- throw unknownOwnerError();
532
- if (liveness === "running")
533
- throw new Error(`local supervisor lease is held by pid ${lease?.pid}`);
534
- }
535
- function unknownOwnerError() {
536
- return new Error(`local supervisor process identity is unknown; run ${resolveBinName()} supervisor stop to write the durable stop request before starting again`);
436
+ function startRefusal(pid, liveness) {
437
+ return serviceStartRefusal("local supervisor", `${resolveBinName()} supervisor stop`, pid, liveness);
537
438
  }
538
439
  async function stopLegacyResourceObserver(coordRoot) {
539
440
  const legacy = readResourceServiceStatus(coordRoot);
@@ -1,7 +1,7 @@
1
1
  import { existsSync, readdirSync, readFileSync, rmSync, statSync } from "node:fs";
2
2
  import { hostname } from "node:os";
3
3
  import { join } from "node:path";
4
- import { checkPidToken, processStartToken } from "../agents/state/proc-start.js";
4
+ import { processStartToken, verifyProcessGeneration } from "../agents/state/proc-start.js";
5
5
  import { readGovernorServiceStatus } from "../governor/service-read.js";
6
6
  import { writePrivateJsonAtomic } from "../storage/atomic-json.js";
7
7
  import { SUPERVISOR_CONSUMER_SCHEMA_VERSION, } from "./contract.js";
@@ -87,7 +87,7 @@ function consumerAlive(record) {
87
87
  if (error.code !== "EPERM")
88
88
  return false;
89
89
  }
90
- return checkPidToken(record.pid, record.start_token) !== "mismatch";
90
+ return verifyProcessGeneration(record.pid, record.start_token) !== "different";
91
91
  }
92
92
  function readDetachedService(path, id) {
93
93
  const record = readBoundedJson(path);
@@ -1,18 +1,4 @@
1
- import { type ProcessGenerationVerdict } from "../agents/state/proc-start.js";
2
- import { type SupervisorBuild, type SupervisorStatus } from "./contract.js";
3
- export interface SupervisorProcessDependencies {
4
- readToken?: (pid: number) => string | null;
5
- probePid?: (pid: number) => unknown;
6
- }
7
- export declare function installedSupervisorBuild(): SupervisorBuild;
8
- export declare function readSupervisorStatus(coordRoot: string, nowMs?: number, dependencies?: SupervisorProcessDependencies): SupervisorStatus;
9
- /** A stale heartbeat does not prove that a process has exited. */
10
- export declare function supervisorProcessLiveness(owner: {
11
- pid: number;
12
- host: string;
13
- start_token?: string;
14
- }, dependencies?: SupervisorProcessDependencies): {
15
- liveness: SupervisorStatus["liveness"];
16
- generation: ProcessGenerationVerdict;
17
- };
1
+ import { type ServiceProcessDependencies } from "../agents/state/service-process.js";
2
+ import { type SupervisorStatus } from "./contract.js";
3
+ export declare function readSupervisorStatus(coordRoot: string, nowMs?: number, dependencies?: ServiceProcessDependencies): SupervisorStatus;
18
4
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/status.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,wBAAwB,EAE9B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAEL,KAAK,eAAe,EAEpB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAKvB,MAAM,WAAW,6BAA6B;IAC5C,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACrC;AAED,wBAAgB,wBAAwB,IAAI,eAAe,CAW1D;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,SAAa,EAClB,YAAY,GAAE,6BAAkC,GAC/C,gBAAgB,CA+ClB;AAeD,kEAAkE;AAClE,wBAAgB,yBAAyB,CACvC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1D,YAAY,GAAE,6BAAkC,GAC/C;IAAE,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAAC,UAAU,EAAE,wBAAwB,CAAA;CAAE,CAgBlF"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/core/supervisor/status.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAKvB,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,SAAa,EAClB,YAAY,GAAE,0BAA+B,GAC5C,gBAAgB,CA4BlB"}
@@ -1,45 +1,13 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { hostname } from "node:os";
3
- import { join } from "node:path";
4
- import { verifyProcessGeneration, } from "../agents/state/proc-start.js";
5
- import { currentHarneryRuntimeBuild, harneryPackageRoot } from "../events/v3/runtime-build.js";
1
+ import { existsSync } from "node:fs";
2
+ import { observeServiceProcess, } from "../agents/state/service-process.js";
3
+ import { serviceBuildStatus } from "../events/v3/runtime-build.js";
6
4
  import { SUPERVISOR_STATUS_SCHEMA_VERSION, } from "./contract.js";
7
5
  import { readSupervisorServiceRecord, supervisorPaths } from "./storage.js";
8
6
  const STALE_HEARTBEAT_MS = 15_000;
9
- export function installedSupervisorBuild() {
10
- let version = "unknown";
11
- let revision = "unknown";
12
- try {
13
- const pkg = JSON.parse(readFileSync(join(harneryPackageRoot(), "package.json"), "utf8"));
14
- if (typeof pkg.version === "string")
15
- version = pkg.version;
16
- revision = currentHarneryRuntimeBuild();
17
- }
18
- catch {
19
- // Missing build evidence must still produce an inspectable status.
20
- }
21
- return { version, revision };
22
- }
23
7
  export function readSupervisorStatus(coordRoot, nowMs = Date.now(), dependencies = {}) {
24
8
  const paths = supervisorPaths(coordRoot);
25
9
  const record = readSupervisorServiceRecord(coordRoot);
26
- const installedBuild = installedSupervisorBuild();
27
- const runningBuild = validBuild(record?.running_build) ? record.running_build : null;
28
- const restartNeeded = !runningBuild ||
29
- installedBuild.version === "unknown" ||
30
- installedBuild.revision === "unknown" ||
31
- runningBuild.version !== installedBuild.version ||
32
- runningBuild.revision !== installedBuild.revision;
33
- const build = {
34
- running_build: runningBuild,
35
- installed_build: installedBuild,
36
- restart_needed: restartNeeded,
37
- build_status: !runningBuild
38
- ? "running build unknown; restart needed"
39
- : restartNeeded
40
- ? "restart needed"
41
- : "current",
42
- };
10
+ const build = serviceBuildStatus(record?.running_build);
43
11
  if (!validRecord(record)) {
44
12
  return {
45
13
  running: false,
@@ -53,12 +21,11 @@ export function readSupervisorStatus(coordRoot, nowMs = Date.now(), dependencies
53
21
  }
54
22
  const heartbeatAt = Date.parse(record.heartbeat_at);
55
23
  const stale = !Number.isFinite(heartbeatAt) || nowMs - heartbeatAt > STALE_HEARTBEAT_MS;
56
- const owner = supervisorProcessLiveness(record, dependencies);
57
- const liveness = owner.generation === "same" && record.state === "stopped" ? "stopped" : owner.liveness;
24
+ const { generation, liveness } = observeServiceProcess(record, dependencies);
58
25
  return {
59
- running: liveness === "running" && !stale && record.state !== "stopped",
26
+ running: liveness === "running" && !stale,
60
27
  stale,
61
- generation: owner.generation,
28
+ generation,
62
29
  liveness,
63
30
  ...build,
64
31
  record,
@@ -74,33 +41,3 @@ function validRecord(value) {
74
41
  typeof value.heartbeat_at === "string" &&
75
42
  typeof value.keep_alive === "boolean");
76
43
  }
77
- /** A stale heartbeat does not prove that a process has exited. */
78
- export function supervisorProcessLiveness(owner, dependencies = {}) {
79
- if (owner.host !== hostname())
80
- return { liveness: "unknown", generation: "unknown" };
81
- try {
82
- (dependencies.probePid ?? ((pid) => process.kill(pid, 0)))(owner.pid);
83
- }
84
- catch (error) {
85
- return {
86
- liveness: error.code === "ESRCH" ? "stopped" : "unknown",
87
- generation: "unknown",
88
- };
89
- }
90
- const generation = verifyProcessGeneration(owner.pid, owner.start_token, dependencies.readToken);
91
- return {
92
- generation,
93
- liveness: generation === "same" ? "running" : generation === "different" ? "stopped" : "unknown",
94
- };
95
- }
96
- function validBuild(value) {
97
- if (!value || typeof value !== "object")
98
- return false;
99
- const build = value;
100
- return (typeof build.version === "string" &&
101
- !!build.version &&
102
- build.version !== "unknown" &&
103
- typeof build.revision === "string" &&
104
- !!build.revision &&
105
- build.revision !== "unknown");
106
- }
@@ -39,7 +39,8 @@ import { stableDigest } from "./durable-record.js";
39
39
  import { evidencePreflightError } from "./evidence-preflight.js";
40
40
  import { endWorkflowChildSessionV3, startWorkflowChildSessionV3 } from "./live-session-v3.js";
41
41
  import { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, writeWorkflowProof, } from "./proof.js";
42
- import { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
42
+ import { acquireWorkflowResumeLease } from "./resume-lock.js";
43
+ import { assertWorkflowRunResumable, assertWorkflowScriptUnchanged, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
43
44
  import { assertProjectionWithinWorkspace, resolveGitGrantRoots } from "./sandbox-projection.js";
44
45
  import { normalizeWorkflowSpecialists, resolveSpecialistAssignment } from "./specialists.js";
45
46
  import { appendWorkflowTranscriptEvent } from "./transcript.js";
@@ -4,10 +4,9 @@ export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, rea
4
4
  export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
5
5
  export { runWorkflow, WorkflowParkedError, WorkflowRunError } from "./engine.js";
6
6
  export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
7
- export type { WorkflowRecoveryAuthorization, WorkflowRecoveryIntent, WorkflowRecoveryRecord, } from "./recovery-audit.js";
8
- export { beginWorkflowRecovery, readWorkflowRecoveryLedger } from "./recovery-audit.js";
9
- export type { WorkflowResumeRecoveryOptions, WorkflowResumeRecoveryResult, WorkflowRunManifest, } from "./run-state.js";
10
- export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, recoverWorkflowResumeLease, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
7
+ export { acquireWorkflowResumeLease } from "./resume-lock.js";
8
+ export type { WorkflowRunManifest } from "./run-state.js";
9
+ export { assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
11
10
  export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
12
11
  export type { AcceptanceCriterion, AcceptanceResult, AcceptanceStatus, AcceptanceSummary, AdapterEvidenceCapability, AdapterEvidenceCoverage, AdapterName, AgentOpts, EngineOpts, EvidenceKind, EvidenceSource, EvidenceStatus, ResultDigest, RunReport, Spawner, SpawnFailureClass, SpawnRequest, SpawnResult, StageSchema, WorkflowAgentProof, WorkflowApprovalMode, WorkflowAttemptContext, WorkflowAttemptFailureCause, WorkflowAttemptPriorContext, WorkflowAttemptUnresolvedCriterion, WorkflowContext, WorkflowDiagnosticAdmissionConfig, WorkflowDiagnosticAdmissionObservation, WorkflowDiagnosticAdmissionProof, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowPolicyProof, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, WorkflowSpecialistProfile, WorkflowWorkContext, } from "./types.js";
13
12
  export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ export { assertWorkflowRunId, createWorkflowApproval, listWorkflowApprovals, rea
3
3
  export { freezeWorkflowAttemptContext, isCanonicalWorkflowAttemptContext, normalizeWorkflowAttemptContext, } from "./attempt-context.js";
4
4
  export { runWorkflow, WorkflowParkedError, WorkflowRunError } from "./engine.js";
5
5
  export { buildWorkflowProof, createEvidenceRecord, deriveRunFailureClass, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
6
- export { beginWorkflowRecovery, readWorkflowRecoveryLedger } from "./recovery-audit.js";
7
- export { acquireWorkflowResumeLease, assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, recoverWorkflowResumeLease, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
6
+ export { acquireWorkflowResumeLease } from "./resume-lock.js";
7
+ export { assertWorkflowRunResumable, assertWorkflowScriptUnchanged, readWorkflowRunManifest, WORKFLOW_RUN_MANIFEST_SCHEMA_VERSION, workflowRunManifestPath, workflowScriptDigest, writeWorkflowRunManifest, } from "./run-state.js";
8
8
  export { isUpstreamFailureText, vendorFailureText } from "./spawn-failure.js";
9
9
  export { WORKFLOW_ATTEMPT_CONTEXT_SCHEMA_VERSION, WORKFLOW_DIAGNOSTIC_ADMISSION_SCHEMA_VERSION, WORKFLOW_PROOF_SCHEMA_VERSION, WORKFLOW_WORK_CONTEXT_SCHEMA_VERSION, } from "./types.js";
10
10
  export { applyIntegration, assertWorkspaceLifecycleTransition, cancelWorkspace, cleanupWorkspace, createLocalGitWorktreeProvider, deriveWorkspaceLifecycle, IntegrationPrepareParkedError, inspectWorkflowWorkspace, isWorkspaceLifecycleState, listWorkflowWorkspaceInspections, prepareIntegration, probeLocalGitWorktreeProvider, readWorkflowWorkspaceStatus, renderWorkflowWorkspaceStatus, validateProviderEventChain, WORKSPACE_BINDING_SCHEMA_VERSION, WORKSPACE_RECEIPT_SCHEMA_VERSION, } from "./workspaces/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { existsSync, readFileSync, statSync } from "node:fs";
3
- import { isAbsolute, join } from "node:path";
4
- import { observationsComparable } from "../context/observation.js";
3
+ import { join } from "node:path";
4
+ import { repoComparisonProblems } from "../context/observation.js";
5
5
  import { DIAGNOSTIC_ADVICE_SCHEMA_VERSION } from "../diagnostics/contract.js";
6
6
  import { policyDigest } from "../policy/index.js";
7
7
  import { isCanonicalWorkflowAttemptContext } from "./attempt-context.js";
@@ -276,13 +276,8 @@ export function readWorkflowProof(coordRoot, runId) {
276
276
  !isWorkspaceExecutionEvidence(proof.execution, runId, proof.run.status))) {
277
277
  throw new Error(`workflow proof at ${path} has an unsupported or mismatched schema`);
278
278
  }
279
- if (repoComparisonProblem(proof.repository.before, proof.repository.after) !== undefined ||
280
- proof.repository.before.dirty_paths_truncated ||
281
- proof.repository.after.dirty_paths_truncated ||
282
- !proof.repository.before.branch?.trim() ||
283
- !proof.repository.after.branch?.trim() ||
284
- !proof.repository.before.head?.trim() ||
285
- !proof.repository.after.head?.trim()) {
279
+ // Packets written before observation checks may carry unproven drift.
280
+ if (repoProblems(proof.repository).length > 0) {
286
281
  proof.repository = buildRepoEvidence(proof.repository.before, proof.repository.after);
287
282
  proof.unknowns = proof.unknowns.filter((item) => item.code !== "repository_drift_incomplete");
288
283
  proof.unknowns.push({
@@ -384,26 +379,16 @@ export function renderWorkflowProof(proof) {
384
379
  `${observation.advice.assessment.recommended_action}; action none`
385
380
  : "admission: shadow not needed; no real child dispatch");
386
381
  }
387
- const comparable = repoComparisonProblem(proof.repository.before, proof.repository.after) === undefined;
388
- const repo = comparable &&
389
- !proof.repository.before.dirty_paths_truncated &&
390
- !proof.repository.after.dirty_paths_truncated &&
391
- proof.repository.before.branch?.trim() &&
392
- proof.repository.after.branch?.trim() &&
393
- proof.repository.before.head?.trim() &&
394
- proof.repository.after.head?.trim()
395
- ? proof.repository
396
- : buildRepoEvidence(proof.repository.before, proof.repository.after);
397
- const drift = repo.drift;
398
- if (!comparable) {
399
- lines.push(`repository: drift unknown. ${drift.note}`);
382
+ const problems = repoProblems(proof.repository);
383
+ if (problems.length > 0) {
384
+ lines.push(`repository: drift unknown. ${unverifiedDrift(problems)}`);
400
385
  }
401
386
  else {
402
- const paths = drift.dirty_paths_added === null || drift.dirty_paths_cleared === null
403
- ? "dirty-path drift unknown"
404
- : `${drift.dirty_paths_added.length} dirty added, ${drift.dirty_paths_cleared.length} cleared`;
405
- lines.push(`repository: branch ${repo.before.branch ?? "unknown"} -> ${repo.after.branch ?? "unknown"}; ` +
406
- `HEAD ${short(repo.before.head)} -> ${short(repo.after.head)}; ${paths}`);
387
+ const { before, after, drift } = proof.repository;
388
+ lines.push(`repository: branch ${before.branch} -> ${after.branch}; ` +
389
+ `HEAD ${short(before.head)} -> ${short(after.head)}; ` +
390
+ `${drift.dirty_paths_added?.length ?? "unknown"} dirty added, ` +
391
+ `${drift.dirty_paths_cleared?.length ?? "unknown"} cleared`);
407
392
  }
408
393
  if (proof.unknowns.length > 0) {
409
394
  lines.push(`unknowns: ${proof.unknowns.length}`);
@@ -416,8 +401,8 @@ export function renderWorkflowProof(proof) {
416
401
  function buildRepoEvidence(beforeRaw, afterRaw) {
417
402
  const before = normalizeRepoSnapshot(beforeRaw);
418
403
  const after = normalizeRepoSnapshot(afterRaw);
419
- const problem = repoComparisonProblem(before, after);
420
- if (problem !== undefined) {
404
+ const problems = repoProblems({ before, after });
405
+ if (problems.length > 0) {
421
406
  return {
422
407
  source: "engine",
423
408
  before,
@@ -429,46 +414,37 @@ function buildRepoEvidence(beforeRaw, afterRaw) {
429
414
  dirty_paths_cleared: null,
430
415
  dirty_paths_retained: null,
431
416
  incomplete: true,
432
- note: `Repository drift could not be verified: ${problem}. Re-check before editing.`,
417
+ note: unverifiedDrift(problems),
433
418
  },
434
419
  };
435
420
  }
436
- const pathsComparable = !before.dirty_paths_truncated && !after.dirty_paths_truncated;
437
- const branchKnown = Boolean(before.branch && after.branch);
438
- const headKnown = Boolean(before.head && after.head);
439
421
  const beforeDirty = new Set(before.dirty_paths);
440
422
  const afterDirty = new Set(after.dirty_paths);
441
423
  const retained = after.dirty_paths.filter((path) => beforeDirty.has(path));
442
- const notes = [
443
- ...(!pathsComparable
444
- ? ["Dirty-path drift is unknown because a snapshot list was truncated."]
445
- : []),
446
- ...(!branchKnown ? ["Branch drift is unknown because a snapshot has no branch."] : []),
447
- ...(!headKnown ? ["HEAD drift is unknown because a snapshot has no HEAD."] : []),
448
- ...(pathsComparable && retained.length > 0
449
- ? ["Snapshots cannot prove whether retained dirty paths changed during the run."]
450
- : []),
451
- ];
452
- const incomplete = notes.length > 0;
424
+ const incomplete = retained.length > 0;
453
425
  return {
454
426
  source: "engine",
455
427
  before,
456
428
  after,
457
429
  drift: {
458
- branch_changed: branchKnown ? before.branch !== after.branch : null,
459
- head_changed: headKnown ? before.head !== after.head : null,
460
- dirty_paths_added: pathsComparable
461
- ? after.dirty_paths.filter((path) => !beforeDirty.has(path))
462
- : null,
463
- dirty_paths_cleared: pathsComparable
464
- ? before.dirty_paths.filter((path) => !afterDirty.has(path))
465
- : null,
466
- dirty_paths_retained: pathsComparable ? retained : null,
430
+ branch_changed: before.branch !== after.branch,
431
+ head_changed: before.head !== after.head,
432
+ dirty_paths_added: after.dirty_paths.filter((path) => !beforeDirty.has(path)),
433
+ dirty_paths_cleared: before.dirty_paths.filter((path) => !afterDirty.has(path)),
434
+ dirty_paths_retained: retained,
467
435
  incomplete,
468
- note: incomplete ? notes.join(" ") : undefined,
436
+ note: incomplete
437
+ ? "Snapshots cannot prove whether retained dirty paths changed during the run."
438
+ : undefined,
469
439
  },
470
440
  };
471
441
  }
442
+ function repoProblems(repository) {
443
+ return repoComparisonProblems(repository.before, repository.after, ["before", "after"]);
444
+ }
445
+ function unverifiedDrift(problems) {
446
+ return `Repository drift could not be verified: ${problems.join("; ")}. Re-check before editing.`;
447
+ }
472
448
  function normalizeRepoSnapshot(snapshot) {
473
449
  return {
474
450
  cwd: snapshot.cwd,
@@ -483,26 +459,6 @@ function normalizeRepoSnapshot(snapshot) {
483
459
  dirty_paths_truncated: snapshot.dirty_paths_truncated,
484
460
  };
485
461
  }
486
- function snapshotFailure(label, snapshot) {
487
- return `${label} snapshot is ${snapshot.observation}${snapshot.observation_detail ? ` (${snapshot.observation_detail})` : ""}`;
488
- }
489
- function repoComparisonProblem(before, after) {
490
- if (!observationsComparable(before, after)) {
491
- return [
492
- ...(before.observation !== "ok" ? [snapshotFailure("before", before)] : []),
493
- ...(after.observation !== "ok" ? [snapshotFailure("after", after)] : []),
494
- ].join("; ");
495
- }
496
- const unknownRoots = [
497
- ...(!before.root || !isAbsolute(before.root) ? ["before"] : []),
498
- ...(!after.root || !isAbsolute(after.root) ? ["after"] : []),
499
- ];
500
- if (unknownRoots.length > 0)
501
- return `${unknownRoots.join(" and ")} snapshot repository root is unknown`;
502
- if (before.root !== after.root)
503
- return "snapshots name different repository roots";
504
- return undefined;
505
- }
506
462
  function buildAdapterCoverage(agents, claims, attestations) {
507
463
  return [...new Set(agents.map((agent) => agent.adapter))].map((adapter) => {
508
464
  const adapterAgents = agents.filter((agent) => agent.adapter === adapter);
@@ -0,0 +1,17 @@
1
+ export type WorkflowResumeOwnerState = "dead" | "live" | "unknown";
2
+ export interface WorkflowResumeLockOwner {
3
+ pid: number;
4
+ host: string;
5
+ created_at: string;
6
+ start_token?: string | null;
7
+ }
8
+ /** Acquire the exclusive lease shared by resume and reclaim. A lock whose
9
+ * same-host owner has exited, or whose PID now names a different process, is
10
+ * retired automatically. Every other existing lock refuses. */
11
+ export declare function acquireWorkflowResumeLease(coordRoot: string, runId: string): () => void;
12
+ export declare function workflowResumeLockPath(coordRoot: string, runId: string): string;
13
+ /** Only a same-host owner can be proven gone: by ESRCH, or by a recorded start
14
+ * token that no longer matches its PID. Foreign and unreadable owners stay live. */
15
+ export declare function workflowResumeOwnerState(owner: WorkflowResumeLockOwner): WorkflowResumeOwnerState;
16
+ export declare function readWorkflowResumeLock(coordRoot: string, runId: string): WorkflowResumeLockOwner | null;
17
+ //# sourceMappingURL=resume-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-lock.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/resume-lock.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;+DAE+D;AAC/D,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,IAAI,CAsDvF;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED;oFACoF;AACpF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,wBAAwB,CAUjG;AAkCD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,uBAAuB,GAAG,IAAI,CAEhC"}