@wjarka/cezarion 0.14.8 → 0.14.9-dev.1004

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 (274) hide show
  1. package/README.md +129 -2
  2. package/dist/application-update/bin-recovery.d.ts +5 -0
  3. package/dist/application-update/bin-recovery.js +96 -0
  4. package/dist/application-update/bin-recovery.js.map +1 -0
  5. package/dist/application-update/discovery.d.ts +22 -0
  6. package/dist/application-update/discovery.js +91 -0
  7. package/dist/application-update/discovery.js.map +1 -0
  8. package/dist/application-update/helper.d.ts +57 -0
  9. package/dist/application-update/helper.js +374 -0
  10. package/dist/application-update/helper.js.map +1 -0
  11. package/dist/application-update/launcher.d.ts +8 -0
  12. package/dist/application-update/launcher.js +53 -0
  13. package/dist/application-update/launcher.js.map +1 -0
  14. package/dist/application-update/lock.d.ts +4 -0
  15. package/dist/application-update/lock.js +70 -0
  16. package/dist/application-update/lock.js.map +1 -0
  17. package/dist/application-update/npm-process.d.ts +17 -0
  18. package/dist/application-update/npm-process.js +133 -0
  19. package/dist/application-update/npm-process.js.map +1 -0
  20. package/dist/application-update/service.d.ts +69 -0
  21. package/dist/application-update/service.js +456 -0
  22. package/dist/application-update/service.js.map +1 -0
  23. package/dist/artifacts/cli.d.ts +1 -0
  24. package/dist/artifacts/cli.js +32 -0
  25. package/dist/artifacts/cli.js.map +1 -0
  26. package/dist/artifacts/lifecycle.d.ts +4 -0
  27. package/dist/artifacts/lifecycle.js +42 -0
  28. package/dist/artifacts/lifecycle.js.map +1 -0
  29. package/dist/artifacts/resolve.d.ts +18 -0
  30. package/dist/artifacts/resolve.js +102 -0
  31. package/dist/artifacts/resolve.js.map +1 -0
  32. package/dist/artifacts/store.d.ts +8 -0
  33. package/dist/artifacts/store.js +323 -0
  34. package/dist/artifacts/store.js.map +1 -0
  35. package/dist/automations/scheduler.d.ts +6 -0
  36. package/dist/automations/scheduler.js +45 -17
  37. package/dist/automations/scheduler.js.map +1 -1
  38. package/dist/automations/store.d.ts +12 -4
  39. package/dist/automations/store.js +199 -22
  40. package/dist/automations/store.js.map +1 -1
  41. package/dist/automations/types.d.ts +2 -0
  42. package/dist/automations/types.js +1 -0
  43. package/dist/automations/types.js.map +1 -1
  44. package/dist/ci-wait/mcp.d.ts +3 -0
  45. package/dist/ci-wait/mcp.js +14 -3
  46. package/dist/ci-wait/mcp.js.map +1 -1
  47. package/dist/contract/application-update.d.ts +32 -0
  48. package/dist/contract/artifacts.d.ts +83 -0
  49. package/dist/contract/ask-schema.d.ts +32 -0
  50. package/dist/contract/ask.d.ts +2 -32
  51. package/dist/contract/automations.d.ts +6 -0
  52. package/dist/contract/conversations.d.ts +165 -0
  53. package/dist/contract/delegation.d.ts +68 -0
  54. package/dist/contract/discovery.d.ts +134 -0
  55. package/dist/contract/events.d.ts +49 -0
  56. package/dist/contract/health.d.ts +12 -0
  57. package/dist/contract/index.d.ts +3 -0
  58. package/dist/contract/index.js +1654 -1454
  59. package/dist/contract/projects.d.ts +40 -0
  60. package/dist/contract/runs.d.ts +186 -0
  61. package/dist/contract/skills.d.ts +33 -0
  62. package/dist/core/agent-runner.d.ts +33 -4
  63. package/dist/core/agent-runner.js +5 -0
  64. package/dist/core/agent-runner.js.map +1 -1
  65. package/dist/core/claude-cli-runner.d.ts +6 -12
  66. package/dist/core/claude-cli-runner.js +90 -20
  67. package/dist/core/claude-cli-runner.js.map +1 -1
  68. package/dist/core/codex-app-server-runner.d.ts +2 -1
  69. package/dist/core/codex-app-server-runner.js +327 -92
  70. package/dist/core/codex-app-server-runner.js.map +1 -1
  71. package/dist/core/codex-app-server-transport.d.ts +13 -1
  72. package/dist/core/codex-app-server-transport.js +58 -17
  73. package/dist/core/codex-app-server-transport.js.map +1 -1
  74. package/dist/core/cursor-acp-runner.d.ts +6 -1
  75. package/dist/core/cursor-acp-runner.js +162 -26
  76. package/dist/core/cursor-acp-runner.js.map +1 -1
  77. package/dist/core/cursor-provider-error.d.ts +3 -0
  78. package/dist/core/cursor-provider-error.js +16 -1
  79. package/dist/core/cursor-provider-error.js.map +1 -1
  80. package/dist/core/input-submissions.d.ts +14 -0
  81. package/dist/core/input-submissions.js +26 -0
  82. package/dist/core/input-submissions.js.map +1 -0
  83. package/dist/core/opencode-server-runner.d.ts +4 -1
  84. package/dist/core/opencode-server-runner.js +156 -26
  85. package/dist/core/opencode-server-runner.js.map +1 -1
  86. package/dist/core/pi-runner.d.ts +2 -1
  87. package/dist/core/pi-runner.js +88 -10
  88. package/dist/core/pi-runner.js.map +1 -1
  89. package/dist/core/provider-auth.d.ts +99 -1
  90. package/dist/core/provider-auth.js +203 -2
  91. package/dist/core/provider-auth.js.map +1 -1
  92. package/dist/delegation/cli.d.ts +1 -0
  93. package/dist/delegation/cli.js +103 -7
  94. package/dist/delegation/cli.js.map +1 -1
  95. package/dist/delegation/conversations.js +13 -5
  96. package/dist/delegation/conversations.js.map +1 -1
  97. package/dist/delegation/input.d.ts +2 -1
  98. package/dist/delegation/input.js +6 -1
  99. package/dist/delegation/input.js.map +1 -1
  100. package/dist/delegation/policy.d.ts +3 -2
  101. package/dist/delegation/policy.js +3 -1
  102. package/dist/delegation/policy.js.map +1 -1
  103. package/dist/delegation/process-liveness.d.ts +66 -0
  104. package/dist/delegation/process-liveness.js +215 -0
  105. package/dist/delegation/process-liveness.js.map +1 -0
  106. package/dist/delegation/provision.d.ts +1 -1
  107. package/dist/delegation/provision.js +10 -5
  108. package/dist/delegation/provision.js.map +1 -1
  109. package/dist/delegation/questions.d.ts +19 -0
  110. package/dist/delegation/questions.js +45 -0
  111. package/dist/delegation/questions.js.map +1 -0
  112. package/dist/delegation/results.d.ts +1 -1
  113. package/dist/delegation/results.js +33 -19
  114. package/dist/delegation/results.js.map +1 -1
  115. package/dist/delegation/routes.d.ts +185 -11
  116. package/dist/delegation/routes.js +6 -2
  117. package/dist/delegation/routes.js.map +1 -1
  118. package/dist/delegation/service.d.ts +16 -5
  119. package/dist/delegation/service.js +161 -13
  120. package/dist/delegation/service.js.map +1 -1
  121. package/dist/delegation/transport.d.ts +228 -65
  122. package/dist/discovery/catalog.d.ts +14 -0
  123. package/dist/discovery/catalog.js +31 -0
  124. package/dist/discovery/catalog.js.map +1 -0
  125. package/dist/discovery/cli.d.ts +8 -0
  126. package/dist/discovery/cli.js +104 -0
  127. package/dist/discovery/cli.js.map +1 -0
  128. package/dist/git-worktree.d.ts +3 -1
  129. package/dist/git-worktree.js +26 -4
  130. package/dist/git-worktree.js.map +1 -1
  131. package/dist/index.js +92 -26
  132. package/dist/index.js.map +1 -1
  133. package/dist/open-url.d.ts +2 -0
  134. package/dist/open-url.js +20 -0
  135. package/dist/open-url.js.map +1 -0
  136. package/dist/release/snapshot.d.ts +3 -3
  137. package/dist/release/snapshot.js +6 -6
  138. package/dist/release/snapshot.js.map +1 -1
  139. package/dist/runs/agent-tmpdir.d.ts +2 -0
  140. package/dist/runs/agent-tmpdir.js +5 -2
  141. package/dist/runs/agent-tmpdir.js.map +1 -1
  142. package/dist/runs/client-request.d.ts +11 -0
  143. package/dist/runs/client-request.js +26 -0
  144. package/dist/runs/client-request.js.map +1 -0
  145. package/dist/runs/delegation-state.d.ts +17 -0
  146. package/dist/runs/event-history.js +6 -0
  147. package/dist/runs/event-history.js.map +1 -1
  148. package/dist/runs/retention.d.ts +7 -2
  149. package/dist/runs/retention.js +39 -7
  150. package/dist/runs/retention.js.map +1 -1
  151. package/dist/runs/store.d.ts +100 -6
  152. package/dist/runs/store.js +245 -2
  153. package/dist/runs/store.js.map +1 -1
  154. package/dist/runs/webhook.d.ts +125 -0
  155. package/dist/runs/webhook.js +256 -0
  156. package/dist/runs/webhook.js.map +1 -0
  157. package/dist/server/provider-auth-runtime.d.ts +30 -4
  158. package/dist/server/provider-auth-runtime.js +71 -6
  159. package/dist/server/provider-auth-runtime.js.map +1 -1
  160. package/dist/server/server.d.ts +8226 -4860
  161. package/dist/server/server.js +309 -15
  162. package/dist/server/server.js.map +1 -1
  163. package/dist/server-install/platforms/ubuntu-vps.d.ts +5 -1
  164. package/dist/server-install/platforms/ubuntu-vps.js +160 -18
  165. package/dist/server-install/platforms/ubuntu-vps.js.map +1 -1
  166. package/dist/server-install/steps.d.ts +4 -2
  167. package/dist/server-install/steps.js +5 -4
  168. package/dist/server-install/steps.js.map +1 -1
  169. package/dist/skills-remote.d.ts +30 -5
  170. package/dist/skills-remote.js +122 -32
  171. package/dist/skills-remote.js.map +1 -1
  172. package/dist/skills.js +15 -6
  173. package/dist/skills.js.map +1 -1
  174. package/dist/task-cli/cli.d.ts +38 -0
  175. package/dist/task-cli/cli.js +580 -0
  176. package/dist/task-cli/cli.js.map +1 -0
  177. package/dist/task-cli/discovery.d.ts +22 -0
  178. package/dist/task-cli/discovery.js +96 -0
  179. package/dist/task-cli/discovery.js.map +1 -0
  180. package/dist/task-cli/http.d.ts +46 -0
  181. package/dist/task-cli/http.js +101 -0
  182. package/dist/task-cli/http.js.map +1 -0
  183. package/dist/task-cli/projections.d.ts +40 -0
  184. package/dist/task-cli/projections.js +45 -0
  185. package/dist/task-cli/projections.js.map +1 -0
  186. package/dist/task-cli/watch.d.ts +78 -0
  187. package/dist/task-cli/watch.js +336 -0
  188. package/dist/task-cli/watch.js.map +1 -0
  189. package/dist/workflows/run.d.ts +160 -2
  190. package/dist/workflows/run.js +1141 -108
  191. package/dist/workflows/run.js.map +1 -1
  192. package/dist/workspace/agent-profiles.d.ts +22 -0
  193. package/dist/workspace/agent-profiles.js +15 -0
  194. package/dist/workspace/agent-profiles.js.map +1 -1
  195. package/dist/workspace/config.d.ts +9 -0
  196. package/dist/workspace/config.js +13 -1
  197. package/dist/workspace/config.js.map +1 -1
  198. package/dist/workspace/projects-cli.js +1 -1
  199. package/dist/workspace/projects.d.ts +24 -1
  200. package/dist/workspace/projects.js +14 -1
  201. package/dist/workspace/projects.js.map +1 -1
  202. package/package.json +5 -5
  203. package/scripts/mock-claude.mjs +64 -2
  204. package/scripts/mock-codex-app-server.mjs +124 -1
  205. package/scripts/mock-cursor-acp.mjs +54 -3
  206. package/scripts/mock-cursor-hang-stdin-late.mjs +35 -0
  207. package/scripts/mock-cursor-hang-stdin.mjs +30 -0
  208. package/scripts/mock-opencode-serve.mjs +102 -2
  209. package/scripts/mock-pi-rpc.mjs +82 -3
  210. package/web/dist/assets/agent-accounts-CerclGiO.js +1 -0
  211. package/web/dist/assets/centered-state-DH8qtCz-.js +43 -0
  212. package/web/dist/assets/collapsible-De2G0xqQ.js +1 -0
  213. package/web/dist/assets/commit-list-CQubP1iS.js +1 -0
  214. package/web/dist/assets/compare-variants-C_NijJvg.js +1 -0
  215. package/web/dist/assets/{diff-tRE59UNb2.js → diff-8M5HlDxq2.js} +2 -2
  216. package/web/dist/assets/diff-controls-B6ok0TtQ.js +1 -0
  217. package/web/dist/assets/{diff-stat-Cgnl_hYF.js → diff-stat-D1AODN2a.js} +1 -1
  218. package/web/dist/assets/{diff-view-DN1ort7Q.js → diff-view-Bs5Gh7UF.js} +2 -2
  219. package/web/dist/assets/dropdown-menu-7KGQMoFj.js +1 -0
  220. package/web/dist/assets/git-toolbar-DqbapMXr.js +1 -0
  221. package/web/dist/assets/github-lMHiuYSx.js +1 -0
  222. package/web/dist/assets/{image-preview-C2JGcBlC.js → image-preview-jzHoEyLM.js} +1 -1
  223. package/web/dist/assets/index-D4OJTArJ.js +7 -0
  224. package/web/dist/assets/index-D5NkwqY7.css +1 -0
  225. package/web/dist/assets/markdown-DvbymqXz.js +2 -0
  226. package/web/dist/assets/pill-BL6ugwXo.js +1 -0
  227. package/web/dist/assets/project-router-ChC5Rb-Y.js +1 -0
  228. package/web/dist/assets/prompt-templates-j8qlK7c-.js +15 -0
  229. package/web/dist/assets/repo-git-BbPAgkqb.js +1 -0
  230. package/web/dist/assets/{run-diff-CyG0Nciv.js → run-diff-BuATgZpx.js} +2 -2
  231. package/web/dist/assets/run-header-DuAWswYM.js +1 -0
  232. package/web/dist/assets/skills-DiC2XrU1.js +1 -0
  233. package/web/dist/assets/{tab-link-BWNp3mLY.js → tab-link-BmGKj9Rt.js} +1 -1
  234. package/web/dist/assets/task-changes-CP9kPnsy.js +1 -0
  235. package/web/dist/assets/task-commits-D6NfTw5r.js +1 -0
  236. package/web/dist/assets/task-files-W-b_gtcb.js +2 -0
  237. package/web/dist/assets/task-thread-Bw_nQuTx.css +1 -0
  238. package/web/dist/assets/task-thread-Q7Nj33DH.js +9 -0
  239. package/web/dist/assets/textarea-ByZ-txS7.js +1 -0
  240. package/web/dist/assets/thread-loading-DHT9p5o5.js +1 -0
  241. package/web/dist/assets/token-metrics-k4XoovDS.js +1 -0
  242. package/web/dist/assets/utils-BTFBhZ55.js +64 -0
  243. package/web/dist/assets/workflows-DqQszPHJ.js +11 -0
  244. package/web/dist/assets/{zoomable-image-Z3JDnm0b.js → zoomable-image-Ba6y6Wyl.js} +1 -1
  245. package/web/dist/index.html +14 -14
  246. package/web/dist/assets/agent-accounts-BZm_2WAv.js +0 -1
  247. package/web/dist/assets/alert-dialog-B422RI-k.js +0 -43
  248. package/web/dist/assets/collapsible-Cy_Fmkrd.js +0 -1
  249. package/web/dist/assets/commit-list-Dcnk7TnI.js +0 -1
  250. package/web/dist/assets/compare-variants-Ciqwvd_f.js +0 -1
  251. package/web/dist/assets/diff-controls-BGrXGi7O.js +0 -1
  252. package/web/dist/assets/dropdown-menu-dwDGT8MM.js +0 -1
  253. package/web/dist/assets/git-toolbar-UiHnGvE0.js +0 -1
  254. package/web/dist/assets/github-D-MrkbJ7.js +0 -1
  255. package/web/dist/assets/ibm-plex-mono-regular-BF3vfe7_.ttf +0 -0
  256. package/web/dist/assets/index-BszfYvBq.js +0 -7
  257. package/web/dist/assets/index-CWh4pKP3.css +0 -1
  258. package/web/dist/assets/markdown-C_IcKVQd.js +0 -2
  259. package/web/dist/assets/pill-BsbO6G7y.js +0 -1
  260. package/web/dist/assets/project-router-DbLkll25.js +0 -1
  261. package/web/dist/assets/prompt-templates-BlTGJB5W.js +0 -15
  262. package/web/dist/assets/repo-git-Bm3s6Why.js +0 -1
  263. package/web/dist/assets/run-header-IFyIGCey.js +0 -1
  264. package/web/dist/assets/skills-C-C4DVFY.js +0 -1
  265. package/web/dist/assets/task-changes-D2PHtWUW.js +0 -1
  266. package/web/dist/assets/task-commits-N5u9U0_R.js +0 -1
  267. package/web/dist/assets/task-files-BS7c7CFm.js +0 -2
  268. package/web/dist/assets/task-thread-BQFdz1dJ.css +0 -1
  269. package/web/dist/assets/task-thread-DGM2dZV-.js +0 -9
  270. package/web/dist/assets/textarea-FjaU370i.js +0 -1
  271. package/web/dist/assets/thread-loading-77sJ8Yu_.js +0 -1
  272. package/web/dist/assets/token-metrics-Clxh03bE.js +0 -1
  273. package/web/dist/assets/utils-PYYcpCFZ.js +0 -64
  274. package/web/dist/assets/workflows-Czl0ZfXH.js +0 -11
@@ -0,0 +1,215 @@
1
+ import { spawnSync } from 'node:child_process';
2
+ import { readdirSync, readFileSync, readlinkSync, realpathSync, statSync } from 'node:fs';
3
+ import { resolve, sep } from 'node:path';
4
+ /** `/proc/<pid>/stat` field 22 (`starttime`); `comm` may hold spaces and `)`, so parse after the LAST `)`. */
5
+ export function parseProcStat(stat) {
6
+ const fields = stat.slice(stat.lastIndexOf(')') + 1).trim().split(/\s+/);
7
+ return stat.includes(')') && fields.length >= 20 && /^\d+$/.test(fields[19]) ? { state: fields[0], startToken: fields[19] } : undefined;
8
+ }
9
+ function procStat(pid) {
10
+ try {
11
+ return parseProcStat(readFileSync(`/proc/${pid}/stat`, 'utf8'));
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ let bootId;
18
+ /** `starttime` counts ticks since boot, so it repeats across reboots; the boot id scopes it. */
19
+ function linuxBootId() {
20
+ if (bootId === undefined) {
21
+ try {
22
+ bootId = readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim() || null;
23
+ }
24
+ catch {
25
+ bootId = null;
26
+ }
27
+ }
28
+ return bootId ?? undefined;
29
+ }
30
+ /** One process incarnation, so a reused PID never matches. Absent when the platform cannot say. */
31
+ export function processStartToken(pid, platform = process.platform) {
32
+ if (!Number.isSafeInteger(pid) || pid <= 0)
33
+ return undefined;
34
+ if (platform === 'linux') {
35
+ const start = procStat(pid)?.startToken;
36
+ const boot = linuxBootId();
37
+ return start && boot ? `${boot}:${start}` : start;
38
+ }
39
+ if (platform !== 'darwin')
40
+ return undefined;
41
+ // `lstart` is locale- and zone-formatted; pin both so the token is stable across cezar processes.
42
+ const ps = spawnSync('ps', ['-o', 'lstart=', '-p', String(pid)], { encoding: 'utf8', timeout: 2_000, env: { ...process.env, LC_ALL: 'C', TZ: 'UTC' } });
43
+ const token = ps.status === 0 ? ps.stdout.trim() : '';
44
+ return token || undefined;
45
+ }
46
+ function pidExists(pid) {
47
+ if (!Number.isSafeInteger(pid) || pid <= 0)
48
+ return false;
49
+ try {
50
+ process.kill(pid, 0);
51
+ }
52
+ catch (error) {
53
+ return error.code === 'EPERM';
54
+ }
55
+ // A zombie has exited; only its parent's wait remains.
56
+ return process.platform !== 'linux' || procStat(pid)?.state !== 'Z';
57
+ }
58
+ const LINUX_TOKEN = /^(?:[0-9a-f-]{36}:)?(\d+)$/;
59
+ /** Liveness-only comparison: when exactly one Linux token lacks the boot id (it was unreadable on one
60
+ * side), the `starttime` suffix decides. Reaping still requires an exact match. */
61
+ function sameIncarnation(recorded, current) {
62
+ if (recorded === current)
63
+ return true;
64
+ const a = LINUX_TOKEN.exec(recorded), b = LINUX_TOKEN.exec(current);
65
+ return !!a && !!b && recorded.includes(':') !== current.includes(':') && a[1] === b[1];
66
+ }
67
+ /** Live and the same incarnation. A token-less entry (or an unreadable current token) counts while the PID exists. */
68
+ export function recordedProcessLive(entry) {
69
+ if (!pidExists(entry.pid))
70
+ return false;
71
+ if (entry.startToken === undefined)
72
+ return true;
73
+ const current = processStartToken(entry.pid);
74
+ return current === undefined || sameIncarnation(entry.startToken, current);
75
+ }
76
+ export function isCurrentProcess(entry) {
77
+ if (entry.pid !== process.pid)
78
+ return false;
79
+ const own = processStartToken(process.pid);
80
+ return entry.startToken === undefined || own === undefined || sameIncarnation(entry.startToken, own);
81
+ }
82
+ let clockTicks;
83
+ let bootTimeMs;
84
+ /** Wall-clock start of a process: boot time (`/proc/stat` btime) plus its starttime ticks. */
85
+ function procStartedAtMs(pid) {
86
+ try {
87
+ bootTimeMs ??= Number(/^btime (\d+)$/m.exec(readFileSync('/proc/stat', 'utf8'))?.[1]) * 1000;
88
+ clockTicks ??= Number(spawnSync('getconf', ['CLK_TCK'], { encoding: 'utf8', timeout: 2_000 }).stdout.trim()) || 100;
89
+ const start = procStat(Number(pid))?.startToken;
90
+ return start === undefined || !Number.isFinite(bootTimeMs) ? undefined : bootTimeMs + Number(start) / clockTicks * 1000;
91
+ }
92
+ catch {
93
+ return undefined;
94
+ }
95
+ }
96
+ const realDarwin = {
97
+ lsof: () => {
98
+ const lsof = spawnSync('lsof', ['-a', '-d', 'cwd', '-Fpn'], { encoding: 'utf8', timeout: 5_000, maxBuffer: 16 * 1024 * 1024 });
99
+ // Status 1 is ordinary (some process unreadable); completeness is judged against `ps` instead.
100
+ return { ok: !lsof.error && (lsof.status === 0 || lsof.status === 1) && !!lsof.stdout, stdout: lsof.stdout ?? '' };
101
+ },
102
+ ownProcesses: () => {
103
+ const uid = process.getuid?.();
104
+ if (uid === undefined)
105
+ return undefined;
106
+ const ps = spawnSync('ps', ['-U', String(uid), '-o', 'pid=,lstart='], { encoding: 'utf8', timeout: 2_000, env: { ...process.env, LC_ALL: 'C', TZ: 'UTC' } });
107
+ if (ps.error || ps.status !== 0 || !ps.stdout)
108
+ return undefined;
109
+ return ps.stdout.split('\n').flatMap(line => {
110
+ const match = /^\s*(\d+)\s+(.+?)\s*$/.exec(line);
111
+ // `ps` lists itself, and lsof (which ran first) never saw it.
112
+ if (!match || Number(match[1]) === ps.pid)
113
+ return [];
114
+ const startedAtMs = Date.parse(`${match[2]} UTC`);
115
+ return [{ pid: Number(match[1]), ...(Number.isFinite(startedAtMs) ? { startedAtMs } : {}) }];
116
+ });
117
+ },
118
+ };
119
+ const realProc = {
120
+ readdir: () => readdirSync('/proc'),
121
+ readlink: pid => readlinkSync(`/proc/${pid}/cwd`),
122
+ ownerUid: pid => { try {
123
+ return statSync(`/proc/${pid}`).uid;
124
+ }
125
+ catch {
126
+ return undefined;
127
+ } },
128
+ startedAtMs: procStartedAtMs,
129
+ };
130
+ /** PIDs (never this process) whose working directory is one of `dirs` or beneath it, in one scan
131
+ * pass; `unknown` when no scan can run. cezar's own short-lived git children in a worktree make
132
+ * this read "alive" briefly: conservative, and a retry self-heals. `since` (epoch ms) is the
133
+ * earliest moment the generation's processes can have started; see the EACCES rule below. */
134
+ export function processesWithCwdUnder(dirs, platform = process.platform, proc = realProc, since, darwin = realDarwin) {
135
+ const targets = (typeof dirs === 'string' ? [dirs] : dirs).map(dir => { try {
136
+ return realpathSync(dir);
137
+ }
138
+ catch {
139
+ return resolve(dir);
140
+ } });
141
+ const under = (cwd) => { const path = cwd.replace(/ \(deleted\)$/, ''); return targets.some(target => path === target || path.startsWith(target + sep)); };
142
+ const found = [];
143
+ if (platform === 'linux') {
144
+ let entries;
145
+ try {
146
+ entries = proc.readdir();
147
+ }
148
+ catch {
149
+ return 'unknown';
150
+ }
151
+ const uid = process.getuid?.();
152
+ for (const entry of entries) {
153
+ if (!/^\d+$/.test(entry) || Number(entry) === process.pid)
154
+ continue;
155
+ try {
156
+ if (under(proc.readlink(entry)))
157
+ found.push(Number(entry));
158
+ }
159
+ catch (error) {
160
+ // A vanished process is gone; another user's is unreadable by design and skipped. Our own
161
+ // user's non-dumpable processes are unreadable too (systemd --user, sshd, gpg-agent, which
162
+ // every host has), so they cannot all block the proof: one that started before the worker
163
+ // existed cannot be its descendant. A later one is a possible holder, never signalled.
164
+ if (error.code === 'ENOENT' || uid === undefined || proc.ownerUid(entry) !== uid)
165
+ continue;
166
+ const started = since === undefined ? undefined : proc.startedAtMs(entry);
167
+ if (started === undefined || started >= since)
168
+ found.push(Number(entry));
169
+ }
170
+ }
171
+ return found;
172
+ }
173
+ if (platform !== 'darwin')
174
+ return 'unknown';
175
+ const lsof = darwin.lsof();
176
+ if (!lsof.ok)
177
+ return 'unknown';
178
+ const seen = new Set();
179
+ let pid;
180
+ for (const line of lsof.stdout.split('\n')) {
181
+ if (line.startsWith('p')) {
182
+ pid = Number(line.slice(1));
183
+ seen.add(pid);
184
+ }
185
+ else if (line.startsWith('n') && pid !== undefined && pid !== process.pid && under(line.slice(1)))
186
+ found.push(pid);
187
+ }
188
+ // lsof silently omits what it cannot read. An own-user process it omitted is judged by the
189
+ // Linux EACCES rule: a possible holder unless it predates the worker. Other users' are skipped.
190
+ const own = darwin.ownProcesses();
191
+ if (!own)
192
+ return 'unknown';
193
+ for (const entry of own) {
194
+ if (seen.has(entry.pid) || entry.pid === process.pid)
195
+ continue;
196
+ if (since === undefined || entry.startedAtMs === undefined || entry.startedAtMs >= since)
197
+ found.push(entry.pid);
198
+ }
199
+ return [...new Set(found)];
200
+ }
201
+ /** A missing record (legacy) relies on the working-directory scan alone. `paths` are the
202
+ * worktree and every scratch location, which finalization deletes. A live foreign controller
203
+ * short-circuits the scan; otherwise `pids` names every live recorded or scanned process. */
204
+ export function inspectGeneration({ record, paths, since }) {
205
+ if (record && !isCurrentProcess(record.controller) && recordedProcessLive(record.controller))
206
+ return { liveness: 'alive', controller: record.controller.pid, pids: [] };
207
+ const recorded = record?.processes.filter(recordedProcessLive).map(entry => entry.pid) ?? [];
208
+ const scan = processesWithCwdUnder(paths, process.platform, realProc, since);
209
+ const pids = [...new Set([...recorded, ...(scan === 'unknown' ? [] : scan)])];
210
+ return { liveness: pids.length ? 'alive' : scan === 'unknown' ? 'unknown' : 'gone', pids };
211
+ }
212
+ export function probeGeneration(input) {
213
+ return inspectGeneration(input).liveness;
214
+ }
215
+ //# sourceMappingURL=process-liveness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-liveness.js","sourceRoot":"","sources":["../../src/delegation/process-liveness.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAWzC,8GAA8G;AAC9G,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAE,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7I,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QAAC,OAAO,aAAa,CAAC,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AACtG,CAAC;AAED,IAAI,MAAiC,CAAC;AACtC,gGAAgG;AAChG,SAAS,WAAW;IAClB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAAC,IAAI,CAAC;YAAC,MAAM,GAAG,YAAY,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,GAAG,IAAI,CAAC;QAAC,CAAC;IAAC,CAAC;IAC/I,OAAO,MAAM,IAAI,SAAS,CAAC;AAC7B,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,QAAQ,GAAoB,OAAO,CAAC,QAAQ;IACzF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QACpE,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5C,kGAAkG;IAClG,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACxJ,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,OAAO,KAAK,IAAI,SAAS,CAAC;AAC5B,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAAC,CAAC;IACzG,uDAAuD;IACvD,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,GAAG,CAAC;AACtE,CAAC;AAED,MAAM,WAAW,GAAG,4BAA4B,CAAC;AACjD;mFACmF;AACnF,SAAS,eAAe,CAAC,QAAgB,EAAE,OAAe;IACxD,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,OAAO,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAsB;IACrD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,eAAe,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACvG,CAAC;AAOD,IAAI,UAA8B,CAAC;AACnC,IAAI,UAA8B,CAAC;AACnC,8FAA8F;AAC9F,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,UAAU,KAAK,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC7F,UAAU,KAAK,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC;QACpH,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC;QAChD,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;IAC1H,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/B,CAAC;AAGD,MAAM,UAAU,GAAiB;IAC/B,IAAI,EAAE,GAAG,EAAE;QACT,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;QAC/H,+FAA+F;QAC/F,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;IACrH,CAAC;IACD,YAAY,EAAE,GAAG,EAAE;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7J,IAAI,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAChE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC1C,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,8DAA8D;YAC9D,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG;gBAAE,OAAO,EAAE,CAAC;YACrD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AACF,MAAM,QAAQ,GAAe;IAC3B,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC;IACnC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC;IACjD,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC,CAAC,CAAC;IAC7F,WAAW,EAAE,eAAe;CAC7B,CAAC;AAEF;;;6FAG6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,IAAgC,EAAE,QAAQ,GAAoB,OAAO,CAAC,QAAQ,EAAE,IAAI,GAAe,QAAQ,EAAE,KAAc,EAAE,MAAM,GAAiB,UAAU;IAClM,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5I,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnK,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,GAAG;gBAAE,SAAS;YACpE,IAAI,CAAC;gBAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAAC,CAAC;YACnE,OAAO,KAAK,EAAE,CAAC;gBACb,0FAA0F;gBAC1F,2FAA2F;gBAC3F,0FAA0F;gBAC1F,uFAAuF;gBACvF,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG;oBAAE,SAAS;gBACtH,MAAM,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBAC1E,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,KAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,GAAuB,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;aACpE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrH,CAAC;IACD,2FAA2F;IAC3F,gGAAgG;IAChG,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;YAAE,SAAS;QAC/D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAID;;6FAE6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAA8E;IACpI,IAAI,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACxK,MAAM,QAAQ,GAAG,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC7F,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9E,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiF;IAC/G,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;AAC3C,CAAC"}
@@ -8,7 +8,7 @@ export type DelegationSession = {
8
8
  revoke(): void;
9
9
  };
10
10
  export type DelegationProvisioner = (runId: string) => DelegationSession | undefined;
11
- export declare function bundledWorkerInvocation(): string;
11
+ export declare function bundledWorkerInvocation(command?: 'worker' | 'discover'): string;
12
12
  export declare function provisionDelegationSession(options: {
13
13
  projectId: string;
14
14
  runId: string;
@@ -7,11 +7,11 @@ import { createDelegationRoutes } from './routes.js';
7
7
  import { createDelegationApp, startDelegationTransport } from './transport.js';
8
8
  import { delegationEndpoint } from './cli.js';
9
9
  const quote = (value) => `'${value.replaceAll("'", "'\\''")}'`;
10
- export function bundledWorkerInvocation() {
10
+ export function bundledWorkerInvocation(command = 'worker') {
11
11
  // Source-mode dev uses this checkout's loader; a published installation needs only Node.
12
12
  const source = import.meta.url.endsWith('.ts');
13
13
  const entry = fileURLToPath(new URL(source ? '../index.ts' : '../index.js', import.meta.url));
14
- return [process.execPath, ...(source ? ['--import', import.meta.resolve('tsx')] : []), entry].map(quote).join(' ') + ' worker';
14
+ return [process.execPath, ...(source ? ['--import', import.meta.resolve('tsx')] : []), entry].map(quote).join(' ') + ` ${command}`;
15
15
  }
16
16
  export function provisionDelegationSession(options) {
17
17
  if (!delegationEnabled())
@@ -26,13 +26,14 @@ export function provisionDelegationSession(options) {
26
26
  `Use ${invocation} send <recipient-run-id> '<text>' --id <message-UUID> --kind request to request an explicit reply; use progress <recipient-run-id> '<text>' --id <message-UUID> for an update without an obligation.`,
27
27
  `Use ${invocation} follow-up <recipient-run-id> '<text>' --id <message-UUID> --request-id <request-UUID> to clarify your request, or ${invocation} reply <recipient-run-id> '<text>' --id <message-UUID> --request-id <request-UUID> to answer an incoming request.`,
28
28
  `A request's ID is its message ID. Reuse a message ID only for an exact retry, including timeout; changed payloads are rejected.`,
29
+ `Messages reach the recipient's live session as soon as they are accepted, including mid-turn; they are read at its next model step. ${invocation} inbox remains a fallback read during an active turn; it acknowledges only the messages it returns. Use conversation <recipient-run-id> for history or investigation; it does not acknowledge messages.`,
29
30
  `Use conversation <recipient-run-id> to inspect messages/outcomes, cancel-request <request-UUID> to cancel your obligation, and wait --request <request-UUID> [--request <another-UUID>] --mode <one|any|all> --timeout-seconds <1-1800> to register a request wait.`,
30
31
  `Request and wait deadlines default to 600 seconds. One active wait per run; cancel-wait <wait-id> stops waiting without cancelling requests or work.`,
31
32
  `Wait returns immediately: end your turn to release capacity; incoming messages may interrupt waiting without resolving pending requests. No automatic re-wait.`,
32
33
  `Acceptance, provider delivery, explicit reply, and task completion are distinct. Only reply resolves a request as replied; a late reply remains visible without reopening a settled obligation.`,
33
34
  `Parents can resume their settled done/review/failed worker by sending a new instruction with ${invocation} send <worker-id> '<instruction>' --id <new-message-UUID> --kind request --resume. Exact retries never create another continuation.`,
34
- `Without --resume, review/terminal sends return not-delivered with a reason and next command, and exit 1. Changing a rejected send requires a new message ID. Workers cannot resume parents; stopped/destroyed workers need a new worker. Messages never answer human questions.`,
35
- `Pending conversations arrive together at the next safe turn boundary, within a 100,000-character batch limit. Each keeps its own ID and request outcome. A wait refusal explains why; successful registration parks only when you end your turn.`,
35
+ `Without --resume, review/terminal sends return not-delivered with a reason and next command, and exit 1. Changing a rejected send requires a new message ID. Workers cannot resume parents; stopped/destroyed workers need a new worker. Messages never answer a human's question; a parent's reply answers only its worker's routed question.`,
36
+ `Pending conversations are submitted together within a 100,000-character batch limit. Each keeps its own ID and request outcome; receipts report queued, delivered and consumed separately. A wait refusal explains why; successful registration parks only when you end your turn.`,
36
37
  `At most 100,000 characters per message, 32 undelivered inputs per recipient, 1,024 family messages, and 32 pending requests.`,
37
38
  `Controller persistence prevents duplicate queue entries; a crash between provider acceptance and its delivery checkpoint can still make delivery ambiguous.`,
38
39
  `Credentials stay in the environment: never read, echo, forward, or persist them.`,
@@ -51,7 +52,7 @@ export function provisionDelegationSession(options) {
51
52
  `You are an owned cezar worker. Your parent run ID is ${run.delegation.parentRunId}.`,
52
53
  conversationGuidance,
53
54
  `You cannot delegate, control peers, merge automatically, or accept your own review.`,
54
- `Follow your assigned task and selected input context; only a human can answer a pending human question.`,
55
+ `Follow your assigned task and selected input context. Your questions, native or CEZ:ASK, go to your parent, which answers or asks the human; do not wait for a human.`,
55
56
  `Native workers are not tracked by cezar: do not spawn them.`,
56
57
  `Per-run controls suppress verified native entry points only; custom extensions and same-user unrestricted shell are not hard isolation.`,
57
58
  `Commit reviewed work before your parent deliberately integrates it; report the summary, commits, tests and remaining concerns.`,
@@ -62,7 +63,11 @@ export function provisionDelegationSession(options) {
62
63
  `Per-run controls suppress verified native entry points only; custom extensions and same-user unrestricted shell are not hard isolation.`,
63
64
  `Owned workers are available through the bundled command ${invocation}.`,
64
65
  `Commands return JSON.`,
66
+ `Before choosing a runner or model, use ${bundledWorkerInvocation('discover')} runners, then ${bundledWorkerInvocation('discover')} models --runner=<name>.`,
67
+ `Discovery lists host default-account runner status, enablement, model IDs and advertised per-model effortLevels; absent effort metadata means unknown. It uses your controller automatically. Spawn still uses --backend for runner selection.`,
68
+ `A fresh nonempty default-account catalog rejects unknown explicit default-account model pins before creating a worker and reports available models and alternative runners; unavailable, empty or stale discovery does not invent choices. Inherited defaults and accepted retries stay unchanged.`,
65
69
  conversationGuidance,
70
+ `Worker questions arrive as requests carrying a question; answer with worker reply <worker-id> '<answer>' --id <new-message-UUID> --request-id <question-id>, one '<header>: <option>' line per question, which the worker reads verbatim as its answer. If you cannot decide, ask the human with your own question, then reply. Progress and follow-ups never answer it, and you cannot finish while it is unanswered.`,
66
71
  `Use ${invocation} spawn --baseline parent-head --request-id <UUID> '<task>' (or an explicit committed ref).`,
67
72
  `Reuse the request ID only for the exact same task/baseline/context/backend/model/effort/workflow on a retry.`,
68
73
  `Optional spawn flags: --workflow <name>, --context '<selected text>' or --context-file <local-UTF-8-file> (mutually exclusive), --backend <claude|codex|opencode|pi|cursor>, --model <model>, --effort <low|medium|high|xhigh|max>.`,
@@ -1 +1 @@
1
- {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/delegation/provision.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provision.js","sourceRoot":"","sources":["../../src/delegation/provision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { AgentInput, AskRequest, ConversationMessage, ConversationState } from '../contract/index.js';
2
+ /** A worker's question travels to its owning parent as a conversation request (#505). Its ID
3
+ * derives from the worker and the ask's event seq, so routing it again after a restart finds
4
+ * the same message instead of asking twice. */
5
+ export declare function questionMessage(input: {
6
+ workerRunId: string;
7
+ parentRunId: string;
8
+ askSeq: number;
9
+ request: AskRequest;
10
+ now: string;
11
+ }): ConversationMessage;
12
+ /** What the parent reads: the questions, their options, and the exact reply command. */
13
+ export declare function formatQuestionText(workerRunId: string, messageId: string, request: AskRequest): string;
14
+ /** Only a reply naming this question answers it; progress and follow-ups never do. */
15
+ export declare function answersQuestion(message: ConversationMessage, input: AgentInput): boolean;
16
+ /** Routed questions still awaiting an answer. Each one holds a reserved conversation slot, and
17
+ * a slot in its worker's inbox, for its reply: otherwise ordinary traffic could fill both and
18
+ * leave a question nobody can answer (#505). */
19
+ export declare function openQuestions(state: ConversationState): ConversationMessage[];
@@ -0,0 +1,45 @@
1
+ import { createHash } from 'node:crypto';
2
+ /** A worker's question travels to its owning parent as a conversation request (#505). Its ID
3
+ * derives from the worker and the ask's event seq, so routing it again after a restart finds
4
+ * the same message instead of asking twice. */
5
+ export function questionMessage(input) {
6
+ const id = uuidFrom(`worker-question:${input.workerRunId}:${input.askSeq}`);
7
+ const text = formatQuestionText(input.workerRunId, id, input.request);
8
+ const requestHash = createHash('sha256')
9
+ .update(JSON.stringify({ senderRunId: input.workerRunId, recipientRunId: input.parentRunId, question: input.request }))
10
+ .digest('hex');
11
+ // No deadline: a question settles when it is answered or falls back to a human.
12
+ return { id, senderRunId: input.workerRunId, recipientRunId: input.parentRunId, kind: 'request', text,
13
+ createdAt: input.now, requestHash, state: 'accepted', question: input.request };
14
+ }
15
+ /** What the parent reads: the questions, their options, and the exact reply command. */
16
+ export function formatQuestionText(workerRunId, messageId, request) {
17
+ const lines = [`Your worker ${workerRunId} is waiting for your answer:`];
18
+ request.questions.forEach((question, index) => {
19
+ lines.push(`${index + 1}. [${question.header}] ${question.question}${question.multiSelect ? ' (choose one or more)' : ''}`);
20
+ for (const option of question.options)
21
+ lines.push(` - ${option.label}${option.description ? `: ${option.description}` : ''}`);
22
+ });
23
+ const format = request.questions.map(question => `${question.header}: <option>`).join('\n');
24
+ lines.push(`Answer with one line per question, exactly as the worker reads a human answer:\n${format}`);
25
+ lines.push(`Send it with: worker reply ${workerRunId} '<answer>' --id <new-message-UUID> --request-id ${messageId}`);
26
+ lines.push('If you cannot decide, ask the human with your own question, then reply with their answer.');
27
+ return lines.join('\n');
28
+ }
29
+ /** Only a reply naming this question answers it; progress and follow-ups never do. */
30
+ export function answersQuestion(message, input) {
31
+ return !!message.question && input.conversation?.kind === 'reply' && input.conversation.requestId === message.id;
32
+ }
33
+ /** Routed questions still awaiting an answer. Each one holds a reserved conversation slot, and
34
+ * a slot in its worker's inbox, for its reply: otherwise ordinary traffic could fill both and
35
+ * leave a question nobody can answer (#505). */
36
+ export function openQuestions(state) {
37
+ return state.messages.filter(message => message.question && !state.outcomes.some(outcome => outcome.requestId === message.id));
38
+ }
39
+ /** A UUID-shaped (version 4 layout) identifier derived from a stable key. */
40
+ function uuidFrom(key) {
41
+ const hex = createHash('sha256').update(key).digest('hex');
42
+ const variant = ((parseInt(hex[16], 16) & 0x3) | 0x8).toString(16);
43
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-4${hex.slice(13, 16)}-${variant}${hex.slice(17, 20)}-${hex.slice(20, 32)}`;
44
+ }
45
+ //# sourceMappingURL=questions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../src/delegation/questions.ts"],"names":[],"mappings":"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"}
@@ -7,4 +7,4 @@ export declare function collectWorkerEvidence(repoRoot: string, store: RunStore,
7
7
  diffSnapshot?: string;
8
8
  }>;
9
9
  /** History deletion retains observation bytes, not attachment files or live Git refs. */
10
- export declare function revalidateRetainedWorkerResult(repoRoot: string, previous: WorkerCollectedResult): WorkerCollectedResult;
10
+ export declare function revalidateRetainedWorkerResult(repoRoot: string, previous: WorkerCollectedResult): Promise<WorkerCollectedResult>;
@@ -4,6 +4,7 @@ import { existsSync } from 'node:fs';
4
4
  import { join } from 'node:path';
5
5
  import { isAttachmentFileName, resolveAttachmentPath } from '../workflows/attachment-path.js';
6
6
  import { readOwnedDiff, verifyOwnedWorkspace } from './workspace.js';
7
+ import { artifactDirectory, listArtifacts, readArtifact } from '../artifacts/store.js';
7
8
  export const workerRevision = (run) => run.delegation?.role === 'worker' ? run.delegation.executionRevision ?? 0 : 0;
8
9
  /** Snapshot collection is deliberately read-only until the service rechecks lifecycle identity. */
9
10
  export async function collectWorkerEvidence(repoRoot, store, run) {
@@ -50,12 +51,16 @@ export async function collectWorkerEvidence(repoRoot, store, run) {
50
51
  if (!destroyed)
51
52
  diff = { state: 'unavailable', reason: 'unverified' };
52
53
  }
53
- // A retained snapshot guarantees bytes even after cleanup; live availability is represented by cleanup/workspace and HEAD.
54
- if (diffSnapshot === undefined && delegation.destroy && previous?.revision === workerRevision(run) && previous.diff.state === 'available') {
55
- const retained = store.readWorkerResultDiff(delegation.parentRunId, run.id);
56
- if (retained !== undefined) {
57
- diffSnapshot = retained;
58
- diff = { ...previous.diff, snapshotId: randomUUID() };
54
+ // Re-read after the live workspace checks. A concurrent reclaim can commit a
55
+ // snapshot while this collect still holds a `previous` captured as undefined.
56
+ if (diffSnapshot === undefined) {
57
+ const stored = store.readWorkerResult(delegation.parentRunId, run.id);
58
+ if (stored?.revision === workerRevision(run) && stored.diff.state === 'available') {
59
+ const retained = store.readWorkerResultDiff(delegation.parentRunId, run.id);
60
+ if (retained !== undefined) {
61
+ diffSnapshot = retained;
62
+ diff = { ...stored.diff, snapshotId: randomUUID() };
63
+ }
59
64
  }
60
65
  }
61
66
  const dataDir = join(repoRoot, '.ai/cezar');
@@ -73,12 +78,14 @@ export async function collectWorkerEvidence(repoRoot, store, run) {
73
78
  if (isAttachmentFileName(name))
74
79
  ids.add(name);
75
80
  }
76
- const items = [...ids].slice(0, 32).map(id => {
77
- const path = join(dataDir, 'runs', `${run.id}-images`, id);
78
- if (resolveAttachmentPath(dataDir, run.id, id))
79
- return { state: 'available', id, path };
80
- return existsSync(path) ? { state: 'unavailable', reason: 'unreadable', id, path } : { state: 'deleted', reason: 'missing', id, path };
81
- });
81
+ const published = await listArtifacts(artifactDirectory(dataDir, run.id), run.id);
82
+ const publishedItems = published.slice().reverse().map(item => ({ state: 'available', id: `published:${item.id}`, path: join(artifactDirectory(dataDir, run.id), item.id, 'content') }));
83
+ const items = [...publishedItems, ...[...ids].map((id) => {
84
+ const path = join(dataDir, 'runs', `${run.id}-images`, id);
85
+ if (resolveAttachmentPath(dataDir, run.id, id))
86
+ return { state: 'available', id, path };
87
+ return existsSync(path) ? { state: 'unavailable', reason: 'unreadable', id, path } : { state: 'deleted', reason: 'missing', id, path };
88
+ })].slice(0, 32);
82
89
  return { result: {
83
90
  workerId: run.id, parentRunId: delegation.parentRunId, revision: workerRevision(run), observedAt: new Date().toISOString(),
84
91
  status: run.status, outcome: destroyed ? 'destroyed' : lastExecutionOutcome, lastExecutionOutcome,
@@ -86,21 +93,28 @@ export async function collectWorkerEvidence(repoRoot, store, run) {
86
93
  ...(run.error ? { error: run.error.slice(0, 2000) } : {}),
87
94
  ...(run.runner ? { backend: run.runner } : {}), ...(run.model ? { model: run.model } : {}),
88
95
  baselineSha: delegation.workspace.baselineSha, workspace: { ...delegation.workspace, state: workspaceRemoved ? 'deleted' : head.state === 'available' ? 'available' : 'unavailable' }, cleanup: delegation.destroy?.phase ?? 'retained',
89
- summary, head, diff, artifacts: { state: 'available', items, truncated: ids.size > 32 },
96
+ summary, head, diff, artifacts: { state: 'available', items, truncated: ids.size + published.length > 32 },
90
97
  }, ...(diffSnapshot === undefined ? {} : { diffSnapshot }) };
91
98
  }
92
99
  /** History deletion retains observation bytes, not attachment files or live Git refs. */
93
- export function revalidateRetainedWorkerResult(repoRoot, previous) {
100
+ export async function revalidateRetainedWorkerResult(repoRoot, previous) {
94
101
  const dataDir = join(repoRoot, '.ai/cezar');
95
102
  return { ...previous, observedAt: new Date().toISOString(),
96
103
  head: previous.head.state === 'available' ? { state: 'unavailable', reason: 'unverified', sha: previous.head.sha } : previous.head,
97
104
  diff: previous.diff.state === 'available' ? { ...previous.diff, snapshotId: randomUUID() } : previous.diff,
98
105
  artifacts: previous.artifacts.state !== 'available' ? previous.artifacts : { ...previous.artifacts,
99
- items: previous.artifacts.items.map(item => resolveAttachmentPath(dataDir, previous.workerId, item.id)
100
- ? { state: 'available', id: item.id, path: item.path }
101
- : existsSync(join(dataDir, 'runs', `${previous.workerId}-images`, item.id))
102
- ? { state: 'unavailable', reason: 'unreadable', id: item.id, path: item.path }
103
- : { state: 'deleted', reason: 'missing', id: item.id, path: item.path }),
106
+ items: await Promise.all(previous.artifacts.items.map(async (item) => {
107
+ if (item.id.startsWith('published:')) {
108
+ const available = await readArtifact(artifactDirectory(dataDir, previous.workerId), previous.workerId, item.id.slice('published:'.length));
109
+ return available ? { state: 'available', id: item.id, path: item.path }
110
+ : { state: 'deleted', reason: 'missing', id: item.id, path: item.path };
111
+ }
112
+ return resolveAttachmentPath(dataDir, previous.workerId, item.id)
113
+ ? { state: 'available', id: item.id, path: item.path }
114
+ : existsSync(join(dataDir, 'runs', `${previous.workerId}-images`, item.id))
115
+ ? { state: 'unavailable', reason: 'unreadable', id: item.id, path: item.path }
116
+ : { state: 'deleted', reason: 'missing', id: item.id, path: item.path };
117
+ })),
104
118
  },
105
119
  };
106
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/delegation/results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAc,EAAU,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExI,mGAAmG;AACnG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAgB,EAAE,KAAe,EAAE,GAAc;IAC3F,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,KAAK,QAAQ;QAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1G,IAAI,OAAO,GAAqC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IACxG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,IAA0F,CAAC;QAC9G,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;YACpE,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxJ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;IAC/K,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,KAAK,UAAU,CAAC;IAC3D,MAAM,gBAAgB,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpG,MAAM,oBAAoB,GAAG,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW;QACzG,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9F,MAAM,OAAO,GAAG,oBAAoB,KAAK,SAAS,IAAI,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,KAAK,UAAU,CAAC;IAC9G,MAAM,aAAa,GAAG,QAAQ,EAAE,IAAI,IAAI,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/F,IAAI,IAAI,GAAkC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACvK,IAAI,IAAI,GAAkC,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrH,IAAI,YAAgC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,eAAe,CAAC,EACnH,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACnJ,IAAI,CAAC,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;QAC9E,IAAI,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QAAC,IAAI,CAAC,gBAAgB;YAAE,IAAI,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAAC,CAAC;IAC3I,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvD,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC;QAChC,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,IAAI,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,wBAAwB,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC;IAChK,CAAC;IAAC,MAAM,CAAC;QAAC,IAAI,CAAC,SAAS;YAAE,IAAI,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,CAAC;IAClF,2HAA2H;IAC3H,IAAI,YAAY,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,IAAI,QAAQ,EAAE,QAAQ,KAAK,cAAc,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1I,MAAM,QAAQ,GAAG,KAAK,CAAC,oBAAoB,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAAC,YAAY,GAAG,QAAQ,CAAC;YAAC,IAAI,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;QAAC,CAAC;IACjH,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ;YAAE,SAAS;QACtE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,sBAAsB,GAAG,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAC1F,IAAI,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,IAAI,GAAG;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE;QAAE,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACpG,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;YAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5F,CAAC;IACD,MAAM,KAAK,GAAiF,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACzH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACxF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACzI,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE;YACf,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC1H,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,EAAE,oBAAoB;YACjG,OAAO,EAAE,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,OAAO;YACnF,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,IAAI,UAAU;YACvO,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE;SACxF,EAAE,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,8BAA8B,CAAC,QAAgB,EAAE,QAA+B;IAC9F,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5C,OAAO,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxD,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;QAClI,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;QAC1G,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS;YAChG,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;gBACpG,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;gBACtD,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;oBACzE,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;oBAC9E,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7E;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/delegation/results.ts"],"names":[],"mappings":"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"}