@namzu/cli 29.0.0 → 29.1.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 (390) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/README.md +20 -0
  3. package/dist/browser/commands.d.ts +29 -0
  4. package/dist/browser/commands.d.ts.map +1 -0
  5. package/dist/browser/commands.js +361 -0
  6. package/dist/browser/commands.js.map +1 -0
  7. package/dist/browser/control.d.ts +79 -0
  8. package/dist/browser/control.d.ts.map +1 -0
  9. package/dist/browser/control.js +140 -0
  10. package/dist/browser/control.js.map +1 -0
  11. package/dist/browser/describe.d.ts +12 -0
  12. package/dist/browser/describe.d.ts.map +1 -0
  13. package/dist/browser/describe.js +27 -0
  14. package/dist/browser/describe.js.map +1 -0
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +29 -2
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/acp.d.ts.map +1 -1
  19. package/dist/commands/acp.js +1 -0
  20. package/dist/commands/acp.js.map +1 -1
  21. package/dist/commands/browser.d.ts +7 -0
  22. package/dist/commands/browser.d.ts.map +1 -0
  23. package/dist/commands/browser.js +16 -0
  24. package/dist/commands/browser.js.map +1 -0
  25. package/dist/commands/drain.d.ts +2 -1
  26. package/dist/commands/drain.d.ts.map +1 -1
  27. package/dist/commands/drain.js +6 -3
  28. package/dist/commands/drain.js.map +1 -1
  29. package/dist/commands/exec-flags.d.ts +2 -1
  30. package/dist/commands/exec-flags.d.ts.map +1 -1
  31. package/dist/commands/exec-flags.js +6 -3
  32. package/dist/commands/exec-flags.js.map +1 -1
  33. package/dist/commands/exec-json.d.ts.map +1 -1
  34. package/dist/commands/exec-json.js +2 -1
  35. package/dist/commands/exec-json.js.map +1 -1
  36. package/dist/commands/exec.d.ts.map +1 -1
  37. package/dist/commands/exec.js +2 -1
  38. package/dist/commands/exec.js.map +1 -1
  39. package/dist/commands/host-queries.d.ts.map +1 -1
  40. package/dist/commands/host-queries.js +10 -3
  41. package/dist/commands/host-queries.js.map +1 -1
  42. package/dist/commands/schedule.d.ts +9 -0
  43. package/dist/commands/schedule.d.ts.map +1 -0
  44. package/dist/commands/schedule.js +126 -0
  45. package/dist/commands/schedule.js.map +1 -0
  46. package/dist/commands/serve.d.ts +3 -1
  47. package/dist/commands/serve.d.ts.map +1 -1
  48. package/dist/commands/serve.js +5 -3
  49. package/dist/commands/serve.js.map +1 -1
  50. package/dist/commands/skills.d.ts +10 -0
  51. package/dist/commands/skills.d.ts.map +1 -1
  52. package/dist/commands/skills.js +23 -7
  53. package/dist/commands/skills.js.map +1 -1
  54. package/dist/commands/upgrade.d.ts +5 -0
  55. package/dist/commands/upgrade.d.ts.map +1 -1
  56. package/dist/commands/upgrade.js +11 -0
  57. package/dist/commands/upgrade.js.map +1 -1
  58. package/dist/config/load.d.ts +39 -0
  59. package/dist/config/load.d.ts.map +1 -1
  60. package/dist/config/load.js +232 -1
  61. package/dist/config/load.js.map +1 -1
  62. package/dist/config/schema.d.ts +78 -0
  63. package/dist/config/schema.d.ts.map +1 -1
  64. package/dist/config/schema.js.map +1 -1
  65. package/dist/config/user-config.d.ts +23 -0
  66. package/dist/config/user-config.d.ts.map +1 -0
  67. package/dist/config/user-config.js +48 -0
  68. package/dist/config/user-config.js.map +1 -0
  69. package/dist/context/capabilities.d.ts +1 -1
  70. package/dist/context/capabilities.d.ts.map +1 -1
  71. package/dist/context/capabilities.js +1 -0
  72. package/dist/context/capabilities.js.map +1 -1
  73. package/dist/doctor/checks/browser.d.ts +15 -0
  74. package/dist/doctor/checks/browser.d.ts.map +1 -0
  75. package/dist/doctor/checks/browser.js +63 -0
  76. package/dist/doctor/checks/browser.js.map +1 -0
  77. package/dist/doctor/checks/index.d.ts +4 -1
  78. package/dist/doctor/checks/index.d.ts.map +1 -1
  79. package/dist/doctor/checks/index.js +8 -1
  80. package/dist/doctor/checks/index.js.map +1 -1
  81. package/dist/doctor/checks/scheduler.d.ts +10 -0
  82. package/dist/doctor/checks/scheduler.d.ts.map +1 -0
  83. package/dist/doctor/checks/scheduler.js +74 -0
  84. package/dist/doctor/checks/scheduler.js.map +1 -0
  85. package/dist/index.d.ts +1 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +1 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/integrations/notifications/desktop/freedesktop.d.ts +10 -0
  90. package/dist/integrations/notifications/desktop/freedesktop.d.ts.map +1 -0
  91. package/dist/integrations/notifications/desktop/freedesktop.js +33 -0
  92. package/dist/integrations/notifications/desktop/freedesktop.js.map +1 -0
  93. package/dist/integrations/notifications/desktop/macos.d.ts +6 -0
  94. package/dist/integrations/notifications/desktop/macos.d.ts.map +1 -0
  95. package/dist/integrations/notifications/desktop/macos.js +17 -0
  96. package/dist/integrations/notifications/desktop/macos.js.map +1 -0
  97. package/dist/integrations/notifications/desktop/sanitize.d.ts +16 -0
  98. package/dist/integrations/notifications/desktop/sanitize.d.ts.map +1 -0
  99. package/dist/integrations/notifications/desktop/sanitize.js +49 -0
  100. package/dist/integrations/notifications/desktop/sanitize.js.map +1 -0
  101. package/dist/integrations/notifications/desktop/throttle.d.ts +10 -0
  102. package/dist/integrations/notifications/desktop/throttle.d.ts.map +1 -0
  103. package/dist/integrations/notifications/desktop/throttle.js +39 -0
  104. package/dist/integrations/notifications/desktop/throttle.js.map +1 -0
  105. package/dist/integrations/notifications/desktop/windows-toast.d.ts +23 -0
  106. package/dist/integrations/notifications/desktop/windows-toast.d.ts.map +1 -0
  107. package/dist/integrations/notifications/desktop/windows-toast.js +56 -0
  108. package/dist/integrations/notifications/desktop/windows-toast.js.map +1 -0
  109. package/dist/integrations/notifications/desktop.d.ts +82 -0
  110. package/dist/integrations/notifications/desktop.d.ts.map +1 -0
  111. package/dist/integrations/notifications/desktop.js +198 -0
  112. package/dist/integrations/notifications/desktop.js.map +1 -0
  113. package/dist/integrations/resident/session-step.d.ts.map +1 -1
  114. package/dist/integrations/resident/session-step.js +1 -0
  115. package/dist/integrations/resident/session-step.js.map +1 -1
  116. package/dist/integrations/subagents/runtime.d.ts +6 -0
  117. package/dist/integrations/subagents/runtime.d.ts.map +1 -1
  118. package/dist/integrations/subagents/runtime.js +14 -5
  119. package/dist/integrations/subagents/runtime.js.map +1 -1
  120. package/dist/permissions/browser-sites.d.ts +95 -0
  121. package/dist/permissions/browser-sites.d.ts.map +1 -0
  122. package/dist/permissions/browser-sites.js +270 -0
  123. package/dist/permissions/browser-sites.js.map +1 -0
  124. package/dist/permissions/checks.d.ts.map +1 -1
  125. package/dist/permissions/checks.js +7 -1
  126. package/dist/permissions/checks.js.map +1 -1
  127. package/dist/permissions/rules.d.ts.map +1 -1
  128. package/dist/permissions/rules.js +4 -8
  129. package/dist/permissions/rules.js.map +1 -1
  130. package/dist/schedule/build.d.ts +79 -0
  131. package/dist/schedule/build.d.ts.map +1 -0
  132. package/dist/schedule/build.js +246 -0
  133. package/dist/schedule/build.js.map +1 -0
  134. package/dist/schedule/changes.d.ts +22 -0
  135. package/dist/schedule/changes.d.ts.map +1 -0
  136. package/dist/schedule/changes.js +55 -0
  137. package/dist/schedule/changes.js.map +1 -0
  138. package/dist/schedule/commands/add.d.ts +24 -0
  139. package/dist/schedule/commands/add.d.ts.map +1 -0
  140. package/dist/schedule/commands/add.js +459 -0
  141. package/dist/schedule/commands/add.js.map +1 -0
  142. package/dist/schedule/commands/args.d.ts +22 -0
  143. package/dist/schedule/commands/args.d.ts.map +1 -0
  144. package/dist/schedule/commands/args.js +80 -0
  145. package/dist/schedule/commands/args.js.map +1 -0
  146. package/dist/schedule/commands/confirm-prompt.d.ts +6 -0
  147. package/dist/schedule/commands/confirm-prompt.d.ts.map +1 -0
  148. package/dist/schedule/commands/confirm-prompt.js +21 -0
  149. package/dist/schedule/commands/confirm-prompt.js.map +1 -0
  150. package/dist/schedule/commands/lifecycle.d.ts +39 -0
  151. package/dist/schedule/commands/lifecycle.d.ts.map +1 -0
  152. package/dist/schedule/commands/lifecycle.js +585 -0
  153. package/dist/schedule/commands/lifecycle.js.map +1 -0
  154. package/dist/schedule/commands/list.d.ts +33 -0
  155. package/dist/schedule/commands/list.d.ts.map +1 -0
  156. package/dist/schedule/commands/list.js +202 -0
  157. package/dist/schedule/commands/list.js.map +1 -0
  158. package/dist/schedule/commands/logs.d.ts +7 -0
  159. package/dist/schedule/commands/logs.d.ts.map +1 -0
  160. package/dist/schedule/commands/logs.js +106 -0
  161. package/dist/schedule/commands/logs.js.map +1 -0
  162. package/dist/schedule/commands/service.d.ts +16 -0
  163. package/dist/schedule/commands/service.d.ts.map +1 -0
  164. package/dist/schedule/commands/service.js +458 -0
  165. package/dist/schedule/commands/service.js.map +1 -0
  166. package/dist/schedule/daemon/daemon.d.ts +156 -0
  167. package/dist/schedule/daemon/daemon.d.ts.map +1 -0
  168. package/dist/schedule/daemon/daemon.js +1248 -0
  169. package/dist/schedule/daemon/daemon.js.map +1 -0
  170. package/dist/schedule/daemon/endpoint.d.ts +38 -0
  171. package/dist/schedule/daemon/endpoint.d.ts.map +1 -0
  172. package/dist/schedule/daemon/endpoint.js +158 -0
  173. package/dist/schedule/daemon/endpoint.js.map +1 -0
  174. package/dist/schedule/daemon/exit.d.ts +8 -0
  175. package/dist/schedule/daemon/exit.d.ts.map +1 -0
  176. package/dist/schedule/daemon/exit.js +8 -0
  177. package/dist/schedule/daemon/exit.js.map +1 -0
  178. package/dist/schedule/daemon/log.d.ts +12 -0
  179. package/dist/schedule/daemon/log.d.ts.map +1 -0
  180. package/dist/schedule/daemon/log.js +53 -0
  181. package/dist/schedule/daemon/log.js.map +1 -0
  182. package/dist/schedule/daemon/notify.d.ts +31 -0
  183. package/dist/schedule/daemon/notify.d.ts.map +1 -0
  184. package/dist/schedule/daemon/notify.js +89 -0
  185. package/dist/schedule/daemon/notify.js.map +1 -0
  186. package/dist/schedule/daemon/retention.d.ts +16 -0
  187. package/dist/schedule/daemon/retention.d.ts.map +1 -0
  188. package/dist/schedule/daemon/retention.js +46 -0
  189. package/dist/schedule/daemon/retention.js.map +1 -0
  190. package/dist/schedule/daemon/sessions.d.ts +23 -0
  191. package/dist/schedule/daemon/sessions.d.ts.map +1 -0
  192. package/dist/schedule/daemon/sessions.js +52 -0
  193. package/dist/schedule/daemon/sessions.js.map +1 -0
  194. package/dist/schedule/env.d.ts +28 -0
  195. package/dist/schedule/env.d.ts.map +1 -0
  196. package/dist/schedule/env.js +99 -0
  197. package/dist/schedule/env.js.map +1 -0
  198. package/dist/schedule/fire/browser-preflight.d.ts +41 -0
  199. package/dist/schedule/fire/browser-preflight.d.ts.map +1 -0
  200. package/dist/schedule/fire/browser-preflight.js +73 -0
  201. package/dist/schedule/fire/browser-preflight.js.map +1 -0
  202. package/dist/schedule/fire/fire.d.ts +78 -0
  203. package/dist/schedule/fire/fire.d.ts.map +1 -0
  204. package/dist/schedule/fire/fire.js +482 -0
  205. package/dist/schedule/fire/fire.js.map +1 -0
  206. package/dist/schedule/fire/result.d.ts +13 -0
  207. package/dist/schedule/fire/result.d.ts.map +1 -0
  208. package/dist/schedule/fire/result.js +18 -0
  209. package/dist/schedule/fire/result.js.map +1 -0
  210. package/dist/schedule/fire/unattended-note.d.ts +22 -0
  211. package/dist/schedule/fire/unattended-note.d.ts.map +1 -0
  212. package/dist/schedule/fire/unattended-note.js +46 -0
  213. package/dist/schedule/fire/unattended-note.js.map +1 -0
  214. package/dist/schedule/floor.d.ts +116 -0
  215. package/dist/schedule/floor.d.ts.map +1 -0
  216. package/dist/schedule/floor.js +1051 -0
  217. package/dist/schedule/floor.js.map +1 -0
  218. package/dist/schedule/folder.d.ts +34 -0
  219. package/dist/schedule/folder.d.ts.map +1 -0
  220. package/dist/schedule/folder.js +84 -0
  221. package/dist/schedule/folder.js.map +1 -0
  222. package/dist/schedule/paths.d.ts +49 -0
  223. package/dist/schedule/paths.d.ts.map +1 -0
  224. package/dist/schedule/paths.js +53 -0
  225. package/dist/schedule/paths.js.map +1 -0
  226. package/dist/schedule/policy.d.ts +141 -0
  227. package/dist/schedule/policy.d.ts.map +1 -0
  228. package/dist/schedule/policy.js +378 -0
  229. package/dist/schedule/policy.js.map +1 -0
  230. package/dist/schedule/resume-command.d.ts +36 -0
  231. package/dist/schedule/resume-command.d.ts.map +1 -0
  232. package/dist/schedule/resume-command.js +72 -0
  233. package/dist/schedule/resume-command.js.map +1 -0
  234. package/dist/schedule/service/detect.d.ts +22 -0
  235. package/dist/schedule/service/detect.d.ts.map +1 -0
  236. package/dist/schedule/service/detect.js +29 -0
  237. package/dist/schedule/service/detect.js.map +1 -0
  238. package/dist/schedule/service/index.d.ts +48 -0
  239. package/dist/schedule/service/index.d.ts.map +1 -0
  240. package/dist/schedule/service/index.js +352 -0
  241. package/dist/schedule/service/index.js.map +1 -0
  242. package/dist/schedule/service/launchd.d.ts +24 -0
  243. package/dist/schedule/service/launchd.d.ts.map +1 -0
  244. package/dist/schedule/service/launchd.js +84 -0
  245. package/dist/schedule/service/launchd.js.map +1 -0
  246. package/dist/schedule/service/manifest.d.ts +44 -0
  247. package/dist/schedule/service/manifest.d.ts.map +1 -0
  248. package/dist/schedule/service/manifest.js +16 -0
  249. package/dist/schedule/service/manifest.js.map +1 -0
  250. package/dist/schedule/service/names.d.ts +9 -0
  251. package/dist/schedule/service/names.d.ts.map +1 -0
  252. package/dist/schedule/service/names.js +22 -0
  253. package/dist/schedule/service/names.js.map +1 -0
  254. package/dist/schedule/service/quote.d.ts +24 -0
  255. package/dist/schedule/service/quote.d.ts.map +1 -0
  256. package/dist/schedule/service/quote.js +64 -0
  257. package/dist/schedule/service/quote.js.map +1 -0
  258. package/dist/schedule/service/runner.d.ts +17 -0
  259. package/dist/schedule/service/runner.d.ts.map +1 -0
  260. package/dist/schedule/service/runner.js +31 -0
  261. package/dist/schedule/service/runner.js.map +1 -0
  262. package/dist/schedule/service/systemd.d.ts +37 -0
  263. package/dist/schedule/service/systemd.d.ts.map +1 -0
  264. package/dist/schedule/service/systemd.js +96 -0
  265. package/dist/schedule/service/systemd.js.map +1 -0
  266. package/dist/schedule/service/windows-task.d.ts +51 -0
  267. package/dist/schedule/service/windows-task.d.ts.map +1 -0
  268. package/dist/schedule/service/windows-task.js +134 -0
  269. package/dist/schedule/service/windows-task.js.map +1 -0
  270. package/dist/schedule/service/wsl.d.ts +57 -0
  271. package/dist/schedule/service/wsl.d.ts.map +1 -0
  272. package/dist/schedule/service/wsl.js +111 -0
  273. package/dist/schedule/service/wsl.js.map +1 -0
  274. package/dist/schedule/store/atomic.d.ts +43 -0
  275. package/dist/schedule/store/atomic.d.ts.map +1 -0
  276. package/dist/schedule/store/atomic.js +135 -0
  277. package/dist/schedule/store/atomic.js.map +1 -0
  278. package/dist/schedule/store/claims.d.ts +26 -0
  279. package/dist/schedule/store/claims.d.ts.map +1 -0
  280. package/dist/schedule/store/claims.js +57 -0
  281. package/dist/schedule/store/claims.js.map +1 -0
  282. package/dist/schedule/store/digest.d.ts +18 -0
  283. package/dist/schedule/store/digest.d.ts.map +1 -0
  284. package/dist/schedule/store/digest.js +139 -0
  285. package/dist/schedule/store/digest.js.map +1 -0
  286. package/dist/schedule/store/history.d.ts +21 -0
  287. package/dist/schedule/store/history.d.ts.map +1 -0
  288. package/dist/schedule/store/history.js +114 -0
  289. package/dist/schedule/store/history.js.map +1 -0
  290. package/dist/schedule/store/jobs.d.ts +61 -0
  291. package/dist/schedule/store/jobs.d.ts.map +1 -0
  292. package/dist/schedule/store/jobs.js +210 -0
  293. package/dist/schedule/store/jobs.js.map +1 -0
  294. package/dist/schedule/store/state.d.ts +19 -0
  295. package/dist/schedule/store/state.d.ts.map +1 -0
  296. package/dist/schedule/store/state.js +38 -0
  297. package/dist/schedule/store/state.js.map +1 -0
  298. package/dist/schedule/types.d.ts +256 -0
  299. package/dist/schedule/types.d.ts.map +1 -0
  300. package/dist/schedule/types.js +9 -0
  301. package/dist/schedule/types.js.map +1 -0
  302. package/dist/skills/catalog.d.ts +96 -0
  303. package/dist/skills/catalog.d.ts.map +1 -0
  304. package/dist/skills/catalog.js +226 -0
  305. package/dist/skills/catalog.js.map +1 -0
  306. package/dist/skills/save.d.ts +148 -0
  307. package/dist/skills/save.d.ts.map +1 -0
  308. package/dist/skills/save.js +344 -0
  309. package/dist/skills/save.js.map +1 -0
  310. package/dist/skills/store.d.ts +103 -16
  311. package/dist/skills/store.d.ts.map +1 -1
  312. package/dist/skills/store.js +230 -29
  313. package/dist/skills/store.js.map +1 -1
  314. package/dist/tui/App.d.ts.map +1 -1
  315. package/dist/tui/App.js +591 -72
  316. package/dist/tui/App.js.map +1 -1
  317. package/dist/tui/LiveActivity.d.ts +8 -1
  318. package/dist/tui/LiveActivity.d.ts.map +1 -1
  319. package/dist/tui/LiveActivity.js +20 -4
  320. package/dist/tui/LiveActivity.js.map +1 -1
  321. package/dist/tui/PermissionOverlay.d.ts +24 -4
  322. package/dist/tui/PermissionOverlay.d.ts.map +1 -1
  323. package/dist/tui/PermissionOverlay.js +113 -15
  324. package/dist/tui/PermissionOverlay.js.map +1 -1
  325. package/dist/tui/SaveSkillOverlay.d.ts +33 -0
  326. package/dist/tui/SaveSkillOverlay.d.ts.map +1 -0
  327. package/dist/tui/SaveSkillOverlay.js +118 -0
  328. package/dist/tui/SaveSkillOverlay.js.map +1 -0
  329. package/dist/tui/agent.d.ts +185 -5
  330. package/dist/tui/agent.d.ts.map +1 -1
  331. package/dist/tui/agent.js +325 -54
  332. package/dist/tui/agent.js.map +1 -1
  333. package/dist/tui/browser-notices.d.ts +33 -0
  334. package/dist/tui/browser-notices.d.ts.map +1 -0
  335. package/dist/tui/browser-notices.js +102 -0
  336. package/dist/tui/browser-notices.js.map +1 -0
  337. package/dist/tui/permission-review.d.ts.map +1 -1
  338. package/dist/tui/permission-review.js +53 -4
  339. package/dist/tui/permission-review.js.map +1 -1
  340. package/dist/tui/schedule/host-commands.d.ts +34 -0
  341. package/dist/tui/schedule/host-commands.d.ts.map +1 -0
  342. package/dist/tui/schedule/host-commands.js +309 -0
  343. package/dist/tui/schedule/host-commands.js.map +1 -0
  344. package/dist/tui/schedule/integration.d.ts +62 -0
  345. package/dist/tui/schedule/integration.d.ts.map +1 -0
  346. package/dist/tui/schedule/integration.js +145 -0
  347. package/dist/tui/schedule/integration.js.map +1 -0
  348. package/dist/tui/schedule/loop-host.d.ts +42 -0
  349. package/dist/tui/schedule/loop-host.d.ts.map +1 -0
  350. package/dist/tui/schedule/loop-host.js +153 -0
  351. package/dist/tui/schedule/loop-host.js.map +1 -0
  352. package/dist/tui/schedule/resume.d.ts +122 -0
  353. package/dist/tui/schedule/resume.d.ts.map +1 -0
  354. package/dist/tui/schedule/resume.js +324 -0
  355. package/dist/tui/schedule/resume.js.map +1 -0
  356. package/dist/tui/schedule/startup.d.ts +11 -0
  357. package/dist/tui/schedule/startup.d.ts.map +1 -0
  358. package/dist/tui/schedule/startup.js +121 -0
  359. package/dist/tui/schedule/startup.js.map +1 -0
  360. package/dist/tui/schedule/tool-host.d.ts +44 -0
  361. package/dist/tui/schedule/tool-host.d.ts.map +1 -0
  362. package/dist/tui/schedule/tool-host.js +294 -0
  363. package/dist/tui/schedule/tool-host.js.map +1 -0
  364. package/dist/tui/skills/learning.d.ts +74 -0
  365. package/dist/tui/skills/learning.d.ts.map +1 -0
  366. package/dist/tui/skills/learning.js +131 -0
  367. package/dist/tui/skills/learning.js.map +1 -0
  368. package/dist/tui/skills/suggest-setting.d.ts +22 -0
  369. package/dist/tui/skills/suggest-setting.d.ts.map +1 -0
  370. package/dist/tui/skills/suggest-setting.js +55 -0
  371. package/dist/tui/skills/suggest-setting.js.map +1 -0
  372. package/dist/tui/skills/suggestion-ledger.d.ts +35 -0
  373. package/dist/tui/skills/suggestion-ledger.d.ts.map +1 -0
  374. package/dist/tui/skills/suggestion-ledger.js +52 -0
  375. package/dist/tui/skills/suggestion-ledger.js.map +1 -0
  376. package/dist/tui/slashCommands.d.ts +20 -0
  377. package/dist/tui/slashCommands.d.ts.map +1 -1
  378. package/dist/tui/slashCommands.js +76 -2
  379. package/dist/tui/slashCommands.js.map +1 -1
  380. package/dist/tui/turn-interruption.d.ts +20 -1
  381. package/dist/tui/turn-interruption.d.ts.map +1 -1
  382. package/dist/tui/turn-interruption.js +43 -0
  383. package/dist/tui/turn-interruption.js.map +1 -1
  384. package/dist/tui/types.d.ts +9 -1
  385. package/dist/tui/types.d.ts.map +1 -1
  386. package/package.json +5 -3
  387. package/skills/README.md +15 -0
  388. package/skills/browser-automation/SKILL.md +84 -0
  389. package/skills/schedule-task/SKILL.md +140 -0
  390. package/skills/skill-creator/SKILL.md +101 -0
@@ -0,0 +1,458 @@
1
+ /**
2
+ * `schedule install | uninstall | status | start | stop | daemon | __fire`.
3
+ */
4
+ import { randomUUID } from 'node:crypto';
5
+ import { existsSync, readFileSync, realpathSync, rmSync } from 'node:fs';
6
+ import { dirname, join } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { loadBootstrapConfigWithProvenance } from '../../config/load.js';
9
+ import { EXIT_NO_CONFIG, EXIT_OK, EXIT_UNAVAILABLE, EXIT_USAGE } from '../../exit-codes.js';
10
+ import { selectDesktopBackend, sendDesktopNotification, } from '../../integrations/notifications/desktop.js';
11
+ import { cliLogger, installCliLogging } from '../../logging.js';
12
+ import { CLI_VERSION } from '../../version.js';
13
+ import { ScheduleDaemon, installedFingerprint, requestStop, spawnFireProcess, stopRequestPath, } from '../daemon/daemon.js';
14
+ import { callEndpoint, readEndpoint } from '../daemon/endpoint.js';
15
+ import { EXIT_STOP_REQUESTED } from '../daemon/exit.js';
16
+ import { daemonLogPath, daemonLogSink } from '../daemon/log.js';
17
+ import { parseFireArgs, runFire } from '../fire/fire.js';
18
+ import { isFinal, readRunResult, writeRunResult } from '../fire/result.js';
19
+ import { parkedRunWords, resumeCommand } from '../resume-command.js';
20
+ import { detectPlatform } from '../service/detect.js';
21
+ import { ServiceRefusal, installService, serviceState, startService, stopService, uninstallService, } from '../service/index.js';
22
+ import { launchdLabel, launchdPlist } from '../service/launchd.js';
23
+ import { readManifest } from '../service/manifest.js';
24
+ import { checkServiceName, defaultServiceName } from '../service/names.js';
25
+ import { runCommand } from '../service/runner.js';
26
+ import { systemdUnit, systemdUserAvailable } from '../service/systemd.js';
27
+ import { taskXml } from '../service/windows-task.js';
28
+ import { wslTaskDefinition } from '../service/wsl.js';
29
+ import { listJobs } from '../store/jobs.js';
30
+ import { readState } from '../store/state.js';
31
+ import { flag, has, parseArgs, parseMs, pathsFor } from './args.js';
32
+ const PLATFORMS = [
33
+ 'auto',
34
+ 'systemd-user',
35
+ 'launchd',
36
+ 'windows-task',
37
+ 'wsl-windows-task',
38
+ ];
39
+ /** The CLI entry point this code was loaded from, as the service will start it. */
40
+ export function installedBin() {
41
+ const here = dirname(fileURLToPath(import.meta.url));
42
+ const candidate = join(here, '..', '..', 'bin.js');
43
+ try {
44
+ return realpathSync(candidate);
45
+ }
46
+ catch {
47
+ return realpathSync(process.argv[1] ?? candidate);
48
+ }
49
+ }
50
+ function program(paths) {
51
+ return { node: realpathSync(process.execPath), bin: installedBin(), namzuHome: paths.home };
52
+ }
53
+ export async function installCommand(ctx, argv) {
54
+ const args = parseArgs(argv, ['home', 'platform', 'name', 'at-boot!', 'dry-run!']);
55
+ const platformFlag = flag(args, 'platform') ?? 'auto';
56
+ if (args.unknown.length > 0 || !PLATFORMS.includes(platformFlag)) {
57
+ ctx.formatter.error({
58
+ message: `usage: namzu schedule install [--platform ${PLATFORMS.join('|')}] [--name <n>] [--at-boot] [--dry-run]`,
59
+ });
60
+ return EXIT_USAGE;
61
+ }
62
+ const paths = pathsFor(args);
63
+ let platform;
64
+ if (platformFlag === 'auto') {
65
+ const detected = detectPlatform({
66
+ systemdUser: await systemdUserAvailable({ run: runCommand }),
67
+ });
68
+ if (!detected.platform) {
69
+ ctx.formatter.error({ message: detected.reason });
70
+ return EXIT_UNAVAILABLE;
71
+ }
72
+ platform = detected.platform;
73
+ }
74
+ else
75
+ platform = platformFlag;
76
+ const name = checkServiceName(flag(args, 'name') ?? defaultServiceName(paths.home));
77
+ const prog = program(paths);
78
+ if (has(args, 'dry-run')) {
79
+ let text;
80
+ switch (platform) {
81
+ case 'systemd-user':
82
+ text = systemdUnit(prog);
83
+ break;
84
+ case 'launchd':
85
+ text = launchdPlist(launchdLabel(name), prog);
86
+ break;
87
+ case 'windows-task':
88
+ text = taskXml({
89
+ userId: 'DOMAIN\\user',
90
+ description: 'namzu scheduler',
91
+ command: 'C:\\Windows\\System32\\conhost.exe',
92
+ args: ['--headless', prog.node, prog.bin, 'schedule', 'daemon', '--home', prog.namzuHome],
93
+ });
94
+ break;
95
+ case 'wsl-windows-task':
96
+ text = taskXml(wslTaskDefinition({
97
+ userId: 'DOMAIN\\user',
98
+ distro: process.env.WSL_DISTRO_NAME ?? 'distro',
99
+ linuxUser: process.env.USER ?? 'user',
100
+ ...prog,
101
+ }));
102
+ break;
103
+ }
104
+ ctx.formatter.print({ text, platform, name });
105
+ return EXIT_OK;
106
+ }
107
+ const existing = readManifest(paths);
108
+ if (existing && existing.name !== name && existing.platform !== platform) {
109
+ ctx.formatter.error({
110
+ message: `a scheduler service (${existing.name}, ${existing.platform}) is already installed for this home; uninstall it first`,
111
+ });
112
+ return 1;
113
+ }
114
+ try {
115
+ requestStop(paths, false);
116
+ const { manifest, problems, notes } = await installService({ paths, run: runCommand, env: process.env, version: CLI_VERSION }, { platform, name, program: prog, atBoot: has(args, 'at-boot') });
117
+ for (const note of notes)
118
+ ctx.formatter.info(note);
119
+ if (problems.length > 0) {
120
+ ctx.formatter.error({ message: `installed with problems:\n${problems.join('\n')}` });
121
+ return 1;
122
+ }
123
+ ctx.formatter.print({
124
+ text: `Installed ${manifest.name} (${manifest.platform}). Check it with \`namzu schedule status\`.`,
125
+ platform: manifest.platform,
126
+ name: manifest.name,
127
+ });
128
+ return EXIT_OK;
129
+ }
130
+ catch (error) {
131
+ ctx.formatter.error({ message: error instanceof Error ? error.message : String(error) });
132
+ return error instanceof ServiceRefusal ? EXIT_UNAVAILABLE : 1;
133
+ }
134
+ }
135
+ /** Runs still working: started, and without a final result of their own yet. */
136
+ function runsInFlight(paths) {
137
+ let n = 0;
138
+ for (const job of listJobs(paths).jobs) {
139
+ const run = readState(paths, job.id).activeRun;
140
+ if (run?.status === 'running' && !isFinal(readRunResult(paths, job.id, run.runId)))
141
+ n++;
142
+ }
143
+ return n;
144
+ }
145
+ export async function uninstallCommand(ctx, argv) {
146
+ const args = parseArgs(argv, ['home', 'keep-data!', 'purge-data!', 'wait', 'interrupt-runs!']);
147
+ if (args.unknown.length > 0 || (has(args, 'keep-data') && has(args, 'purge-data'))) {
148
+ ctx.formatter.error({
149
+ message: 'usage: namzu schedule uninstall [--keep-data | --purge-data] [--wait 10m | --interrupt-runs]',
150
+ });
151
+ return EXIT_USAGE;
152
+ }
153
+ const paths = pathsFor(args);
154
+ const manifest = readManifest(paths);
155
+ const endpoint = readEndpoint(paths.endpoint);
156
+ requestStop(paths, true);
157
+ if (endpoint)
158
+ await callEndpoint(endpoint, 'stop');
159
+ if (manifest)
160
+ await stopService({ paths, run: runCommand, env: process.env, version: CLI_VERSION }, manifest);
161
+ if (!has(args, 'interrupt-runs')) {
162
+ const waitMs = parseMs('--wait', flag(args, 'wait')) ?? 10 * 60_000;
163
+ const deadline = Date.now() + waitMs;
164
+ while (runsInFlight(paths) > 0 && Date.now() < deadline) {
165
+ ctx.formatter.info(`waiting for ${runsInFlight(paths)} run(s) in progress to finish…`);
166
+ await new Promise((r) => setTimeout(r, 5_000));
167
+ }
168
+ }
169
+ const inFlight = runsInFlight(paths);
170
+ if (inFlight > 0)
171
+ ctx.formatter.info(`${inFlight} run(s) are still in progress; they finish on their own.`);
172
+ const { problems } = await uninstallService({
173
+ paths,
174
+ run: runCommand,
175
+ env: process.env,
176
+ version: CLI_VERSION,
177
+ });
178
+ if (problems.length > 0) {
179
+ ctx.formatter.error({ message: `could not remove everything:\n${problems.join('\n')}` });
180
+ return 1;
181
+ }
182
+ if (has(args, 'purge-data'))
183
+ rmSync(paths.root, { recursive: true, force: true });
184
+ ctx.formatter.print({
185
+ text: manifest
186
+ ? `Removed ${manifest.name}.${has(args, 'purge-data') ? ' Scheduler data deleted.' : ' Jobs and history are kept.'}`
187
+ : `No scheduler service was installed for ${paths.home}.${has(args, 'purge-data') ? ' Scheduler data deleted.' : ''}`,
188
+ });
189
+ return EXIT_OK;
190
+ }
191
+ function readHeartbeat(paths) {
192
+ try {
193
+ return JSON.parse(readFileSync(paths.heartbeat, 'utf8'));
194
+ }
195
+ catch {
196
+ return undefined;
197
+ }
198
+ }
199
+ /** The backend the daemon reported, `kind: detail`, live or from its heartbeat. */
200
+ function daemonNotifications(heartbeat, live) {
201
+ const reported = typeof live?.notifications === 'string' ? live.notifications : heartbeat?.notifications;
202
+ if (!reported || reported === 'unknown')
203
+ return undefined;
204
+ const at = reported.indexOf(': ');
205
+ return at < 0
206
+ ? { kind: reported, detail: '' }
207
+ : { kind: reported.slice(0, at), detail: reported.slice(at + 2) };
208
+ }
209
+ export async function statusCommand(ctx, argv) {
210
+ const args = parseArgs(argv, ['home', 'json!']);
211
+ if (args.unknown.length > 0) {
212
+ ctx.formatter.error({ message: `unknown option: ${args.unknown.join(', ')}` });
213
+ return EXIT_USAGE;
214
+ }
215
+ const paths = pathsFor(args);
216
+ const manifest = readManifest(paths);
217
+ const heartbeat = readHeartbeat(paths);
218
+ const endpoint = readEndpoint(paths.endpoint);
219
+ const live = endpoint ? await callEndpoint(endpoint, 'status') : undefined;
220
+ const age = heartbeat ? Date.now() - Date.parse(heartbeat.at) : undefined;
221
+ const supervisor = manifest
222
+ ? await serviceState({ paths, run: runCommand, env: process.env, version: CLI_VERSION }, manifest)
223
+ : 'not installed';
224
+ const jobs = listJobs(paths).jobs;
225
+ // What the daemon picked, from its own heartbeat: this shell's environment
226
+ // is not the service's (under systemd in WSL it has no WSL_INTEROP), so a
227
+ // backend computed here named one the daemon was not using.
228
+ const backend = daemonNotifications(heartbeat, live) ?? {
229
+ ...selectDesktopBackend(manifest?.windows?.powershell ? { powershell: manifest.windows.powershell } : {}),
230
+ guessed: true,
231
+ };
232
+ const pathProblems = [];
233
+ if (manifest) {
234
+ for (const [label, path] of [
235
+ ['node', manifest.nodePath],
236
+ ['namzu', manifest.binPath],
237
+ ]) {
238
+ try {
239
+ realpathSync(path);
240
+ }
241
+ catch {
242
+ pathProblems.push(`${label} ${path} no longer exists; run namzu schedule install again`);
243
+ }
244
+ }
245
+ if (manifest.cliVersion !== CLI_VERSION)
246
+ pathProblems.push(`installed by namzu ${manifest.cliVersion}, this is ${CLI_VERSION}; the daemon restarts on the new code by itself`);
247
+ }
248
+ const healthy = Boolean(live) || (age !== undefined && age < 90_000);
249
+ // Runs waiting for the operator, each with the command that answers it:
250
+ // conversations are stored per folder, so the command carries the folder.
251
+ const awaitingApproval = jobs.flatMap((job) => {
252
+ const run = readState(paths, job.id).activeRun;
253
+ return run?.status === 'awaiting-approval' && run.sessionId
254
+ ? [
255
+ {
256
+ job: job.name,
257
+ sessionId: run.sessionId,
258
+ resumeCommand: resumeCommand(job, run.sessionId),
259
+ ...(run.handoff ? { handoff: { reason: run.handoff.reason } } : {}),
260
+ waitingFor: parkedRunWords(run),
261
+ },
262
+ ]
263
+ : [];
264
+ });
265
+ const payload = {
266
+ v: 1,
267
+ installed: Boolean(manifest),
268
+ platform: manifest?.platform ?? null,
269
+ name: manifest?.name ?? null,
270
+ supervisor,
271
+ daemon: live
272
+ ? { responding: true, ...live }
273
+ : heartbeat
274
+ ? {
275
+ responding: false,
276
+ lastSeen: heartbeat.at,
277
+ standby: heartbeat.standby,
278
+ pid: heartbeat.pid,
279
+ version: heartbeat.version,
280
+ }
281
+ : null,
282
+ notifications: `${backend.kind} (${backend.detail})${'guessed' in backend ? ' — the daemon has not reported, so this is what this shell would pick' : ''}`,
283
+ jobs: { total: jobs.length, active: jobs.filter((j) => j.state === 'active').length },
284
+ runsInFlight: runsInFlight(paths),
285
+ awaitingApproval,
286
+ problems: pathProblems,
287
+ log: daemonLogPath(paths.daemonLog),
288
+ };
289
+ if (has(args, 'json') || ctx.formatter.name !== 'text') {
290
+ ctx.formatter.print(ctx.formatter.name === 'text' ? JSON.stringify(payload, null, 2) : payload);
291
+ }
292
+ else {
293
+ ctx.formatter.print([
294
+ `Service ${manifest ? `${manifest.name} (${manifest.platform})` : 'not installed — namzu schedule install'}`,
295
+ `Supervisor ${supervisor}`,
296
+ `Daemon ${live ? `running, pid ${String(live.pid)}, version ${String(live.version)}${live.standby ? ', on standby' : ''}${live.draining ? ', draining for a restart' : ''}` : heartbeat ? `not answering; last seen ${Math.round((age ?? 0) / 1000)} s ago${heartbeat.standby ? ' (on standby)' : ''}` : 'never started'}`,
297
+ `Notifications ${backend.kind}${backend.kind === 'none' ? ` — ${backend.detail}` : ''}${'guessed' in backend ? ' (not reported by the daemon yet; this shell would pick it)' : ''}`,
298
+ `Jobs ${payload.jobs.active} active of ${payload.jobs.total}; ${payload.runsInFlight} run(s) in progress`,
299
+ ...awaitingApproval.map((w) => w.handoff
300
+ ? `Waiting ${w.job} ${w.waitingFor}; when that is done: ${w.resumeCommand}`
301
+ : `Waiting ${w.job} needs your approval: ${w.resumeCommand}`),
302
+ `Log ${payload.log}`,
303
+ ...pathProblems.map((p) => `Warning ${p}`),
304
+ ].join('\n'));
305
+ }
306
+ if (!manifest && !live)
307
+ return EXIT_NO_CONFIG;
308
+ return healthy ? EXIT_OK : EXIT_UNAVAILABLE;
309
+ }
310
+ export async function startStopCommand(ctx, argv, verb) {
311
+ const args = parseArgs(argv, ['home']);
312
+ const paths = pathsFor(args);
313
+ const manifest = readManifest(paths);
314
+ if (!manifest) {
315
+ ctx.formatter.error({
316
+ message: 'no scheduler service is installed for this home; namzu schedule install',
317
+ });
318
+ return EXIT_NO_CONFIG;
319
+ }
320
+ const context = { paths, run: runCommand, env: process.env, version: CLI_VERSION };
321
+ // Before the supervisor acts: a standby daemon, or one a Windows task no
322
+ // longer holds, is reached only through this file.
323
+ requestStop(paths, verb === 'stop');
324
+ const problems = verb === 'start' ? await startService(context, manifest) : await stopService(context, manifest);
325
+ if (verb === 'stop') {
326
+ const endpoint = readEndpoint(paths.endpoint);
327
+ if (endpoint)
328
+ await callEndpoint(endpoint, 'stop');
329
+ }
330
+ if (problems.length > 0) {
331
+ ctx.formatter.error({ message: problems.join('\n') });
332
+ return 1;
333
+ }
334
+ ctx.formatter.print({
335
+ text: verb === 'start'
336
+ ? `Started ${manifest.name}.`
337
+ : `Stopped ${manifest.name}; it stays stopped until namzu schedule start.`,
338
+ });
339
+ return EXIT_OK;
340
+ }
341
+ /** `schedule daemon`: run the scheduler in this process until stopped. */
342
+ export async function daemonCommand(ctx, argv) {
343
+ const args = parseArgs(argv, ['home', 'foreground!', 'once-or-exit!']);
344
+ if (args.unknown.length > 0) {
345
+ ctx.formatter.error({ message: `unknown option: ${args.unknown.join(', ')}` });
346
+ return EXIT_USAGE;
347
+ }
348
+ const paths = pathsFor(args);
349
+ // The service names its home with --home; everything this process and its
350
+ // children resolve on their own must agree with it.
351
+ process.env.NAMZU_HOME = paths.home;
352
+ const config = (() => {
353
+ try {
354
+ return loadBootstrapConfigWithProvenance({ env: process.env }).config;
355
+ }
356
+ catch {
357
+ return ctx.config;
358
+ }
359
+ })();
360
+ installCliLogging(daemonLogSink(paths.daemonLog), 'info');
361
+ const log = cliLogger();
362
+ const manifest = (() => {
363
+ try {
364
+ return readManifest(paths);
365
+ }
366
+ catch {
367
+ return undefined;
368
+ }
369
+ })();
370
+ const backend = selectDesktopBackend(manifest?.windows?.powershell ? { powershell: manifest.windows.powershell } : {});
371
+ const bin = installedBin();
372
+ if (existsSync(stopRequestPath(paths))) {
373
+ ctx.formatter.error({
374
+ message: `the scheduler for ${paths.home} was stopped with \`namzu schedule stop\`; \`namzu schedule start\` lets it run again`,
375
+ });
376
+ return EXIT_STOP_REQUESTED;
377
+ }
378
+ const daemon = new ScheduleDaemon({
379
+ paths,
380
+ log,
381
+ version: CLI_VERSION,
382
+ epoch: randomUUID(),
383
+ maxConcurrentRuns: config.schedule?.maxConcurrentRuns ?? 2,
384
+ notifications: config.schedule?.notifications ?? true,
385
+ notificationBackend: `${backend.kind}: ${backend.detail}`,
386
+ spawnFire: spawnFireProcess({ node: process.execPath, bin, paths, env: process.env }),
387
+ notify: async (notice) => {
388
+ const result = await sendDesktopNotification(backend, notice);
389
+ if (result.kind !== 'sent') {
390
+ log.warn('scheduled run notification not shown', {
391
+ 'namzu.schedule.job_id': notice.jobId,
392
+ 'namzu.schedule.notify_result': result.kind,
393
+ });
394
+ }
395
+ },
396
+ fingerprint: installedFingerprint(bin),
397
+ onceOrExit: has(args, 'once-or-exit'),
398
+ });
399
+ const stop = () => daemon.stop();
400
+ process.on('SIGTERM', stop);
401
+ process.on('SIGINT', stop);
402
+ process.on('SIGHUP', stop);
403
+ log.info('scheduler starting', {
404
+ 'namzu.schedule.home': paths.home,
405
+ 'namzu.schedule.version': CLI_VERSION,
406
+ });
407
+ try {
408
+ const code = await daemon.run();
409
+ if (code === 75) {
410
+ const endpoint = readEndpoint(paths.endpoint);
411
+ ctx.formatter.error({
412
+ message: `another scheduler owns ${paths.home}${endpoint ? ` (pid ${endpoint.pid})` : ''}`,
413
+ });
414
+ }
415
+ return code;
416
+ }
417
+ finally {
418
+ process.removeListener('SIGTERM', stop);
419
+ process.removeListener('SIGINT', stop);
420
+ process.removeListener('SIGHUP', stop);
421
+ }
422
+ }
423
+ /** `schedule __fire`: one run, started by the daemon. */
424
+ export async function fireCommand(ctx, argv, termination) {
425
+ const args = parseArgs(argv, [
426
+ 'home',
427
+ 'job',
428
+ 'run',
429
+ 'key',
430
+ 'revision',
431
+ 'trigger',
432
+ 'scheduled-for',
433
+ 'epoch',
434
+ ]);
435
+ const parsed = parseFireArgs(argv);
436
+ if ('error' in parsed || args.unknown.length > 0) {
437
+ ctx.formatter.error({
438
+ message: 'error' in parsed ? parsed.error : `unknown option: ${args.unknown.join(', ')}`,
439
+ });
440
+ return EXIT_USAGE;
441
+ }
442
+ const paths = pathsFor(args);
443
+ const fire = parsed;
444
+ termination?.onTerminate(async (signal) => {
445
+ const current = readRunResult(paths, fire.jobId, fire.runId);
446
+ if (current && current.status === 'running') {
447
+ writeRunResult(paths, {
448
+ ...current,
449
+ status: 'interrupted',
450
+ exitCode: 1,
451
+ reason: `stopped by ${signal}`,
452
+ endedAt: new Date().toISOString(),
453
+ });
454
+ }
455
+ });
456
+ return runFire(ctx, paths, fire);
457
+ }
458
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/schedule/commands/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * The scheduler daemon: one per `NAMZU_HOME`, started by a user service.
3
+ *
4
+ * ## One owner
5
+ *
6
+ * Ownership is a fenced lease in `schedule/daemon/` — the session lease's own
7
+ * store, `lease.<fence>.json` published with `link`, the highest fence owning,
8
+ * renewed every 30 s with a 90 s expiry. A second daemon does not exit (a
9
+ * supervisor would restart it in a loop): it waits on standby and takes a new
10
+ * fence when the owner's expires. Before every claim the owner checks its
11
+ * fence is still the highest, and one that was fenced out stops dispatching at
12
+ * once. The occurrence claim (`claims/`, also `link`) is the final guarantee
13
+ * that nothing starts twice, lease or no lease.
14
+ *
15
+ * ## The loop
16
+ *
17
+ * Every tick (at most 30 s, sooner when something is due, a job file changes
18
+ * or a run ends): evaluate each job with the SDK's pure evaluator, append what
19
+ * it decided to history, queue what is due, and dispatch the queue up to the
20
+ * concurrency cap — one run at a time per folder for jobs that can write.
21
+ * An occurrence is claimed when its run STARTS, never when it is queued, so a
22
+ * restart re-derives a waiting run instead of losing it.
23
+ *
24
+ * ## Runs
25
+ *
26
+ * A run is a child process, `schedule __fire`, whose stdout and stderr are a
27
+ * log FILE rather than pipes, so it outlives a daemon restart without dying of
28
+ * EPIPE. It enforces its own wall clock. A run this daemon did not start (it
29
+ * was started before a restart) is adopted: finalised from its result file,
30
+ * or from its session log once its lease lapses. Nothing is ever killed by a
31
+ * pid read from disk.
32
+ *
33
+ * ## Upgrades
34
+ *
35
+ * Every tick compares the installed CLI with the one this daemon started
36
+ * from. On a change it stops dispatching, waits for the runs it started and
37
+ * exits 0; the supervisor starts the new code.
38
+ */
39
+ import { type Logger, type SessionLease } from '@namzu/sdk';
40
+ import type { SchedulePaths } from '../paths.js';
41
+ import type { ActiveRun, ScheduleJob, ScheduleJobState, ScheduleRunResult, ScheduleRunTrigger } from '../types.js';
42
+ import { EXIT_STOP_REQUESTED } from './exit.js';
43
+ export { EXIT_STOP_REQUESTED };
44
+ export declare const LEASE_TTL_MS = 90000;
45
+ export declare const LEASE_RENEW_MS = 30000;
46
+ export declare const TICK_MS = 30000;
47
+ export interface SpawnedRun {
48
+ /** Resolves with the exit code (or null when a signal ended it). */
49
+ readonly exited: Promise<number | null>;
50
+ /** Only for a child this daemon started and still holds. */
51
+ terminate(): void;
52
+ }
53
+ export interface FireSpawnRequest {
54
+ readonly job: ScheduleJob;
55
+ readonly runId: string;
56
+ readonly key: string;
57
+ readonly trigger: ScheduleRunTrigger;
58
+ readonly scheduledFor?: string;
59
+ readonly epoch: string;
60
+ }
61
+ export interface DaemonNotice {
62
+ readonly jobId: string;
63
+ readonly title: string;
64
+ readonly body: string;
65
+ }
66
+ export interface DaemonOptions {
67
+ readonly paths: SchedulePaths;
68
+ readonly log: Logger;
69
+ readonly version: string;
70
+ readonly epoch: string;
71
+ readonly maxConcurrentRuns: number;
72
+ readonly notifications: boolean;
73
+ /** Start a fire child. */
74
+ readonly spawnFire: (request: FireSpawnRequest) => SpawnedRun;
75
+ /** Show a desktop notification. Never throws. */
76
+ readonly notify: (notice: DaemonNotice) => Promise<void>;
77
+ /** The installed CLI, cheaply: a change means an upgrade happened. */
78
+ readonly fingerprint: () => string;
79
+ readonly now?: () => number;
80
+ readonly monotonic?: () => number;
81
+ readonly tickMs?: number;
82
+ readonly leaseTtlMs?: number;
83
+ readonly standbyPollMs?: number;
84
+ /** Exit 75 instead of waiting on standby (tests, and `--once-or-exit`). */
85
+ readonly onceOrExit?: boolean;
86
+ /** Status the endpoint reports about notifications. */
87
+ readonly notificationBackend?: string;
88
+ /** Watch `jobs/` for changes; off in tests that drive ticks by hand. */
89
+ readonly watchJobs?: boolean;
90
+ }
91
+ export declare class ScheduleDaemon {
92
+ #private;
93
+ constructor(options: DaemonOptions);
94
+ get standby(): boolean;
95
+ get lease(): SessionLease | null;
96
+ /** Ask the loop to stop at its next wake. Running children are left running. */
97
+ stop(): void;
98
+ /** Stop dispatching, wait for our own runs, then stop (an upgrade restart). */
99
+ drainAndRestart(): void;
100
+ wake(): void;
101
+ /** Try once to own the home (for a caller driving {@link tick} itself). */
102
+ claimOwnership(): Promise<boolean>;
103
+ /** Give the home up (a caller driving {@link tick} itself). */
104
+ releaseOwnership(): Promise<void>;
105
+ /** Run until stopped. Returns the process exit code. */
106
+ run(): Promise<number>;
107
+ /** What the endpoint's `status` reports. */
108
+ status(): Record<string, unknown>;
109
+ /** Queue a manual run (`schedule run-now`). Refused while the job has a run. */
110
+ requestRunNow(jobId: string): {
111
+ ok: boolean;
112
+ message: string;
113
+ };
114
+ /** One pass: every job evaluated, the queue dispatched. Public for tests. */
115
+ tick(): Promise<void>;
116
+ /**
117
+ * Record how a run this daemon did not start has ended — a foreground
118
+ * `schedule run-now` — exactly as a run it started is recorded. False,
119
+ * and nothing written, when the job's state no longer names that run (a
120
+ * daemon that adopted it recorded it first).
121
+ */
122
+ finalizeRun(jobId: string, runId: string, result: ScheduleRunResult): Promise<boolean>;
123
+ /**
124
+ * Settle the job's run in progress if its process is gone, as a tick
125
+ * would, without evaluating the schedule. For a foreground `run-now`
126
+ * finding a run no scheduler is left to settle.
127
+ */
128
+ reconcileJob(jobId: string): Promise<ScheduleJobState | undefined>;
129
+ /** For tests: wait until notifications and archiving started by finalisation are done. */
130
+ settled(): Promise<void>;
131
+ }
132
+ /** A manual run's occurrence key is this and its run id. */
133
+ export declare const MANUAL_KEY_PREFIX = "manual-";
134
+ /**
135
+ * Append the record of how a run ended (or parked) to its job's history. A
136
+ * run still `running` is recorded `interrupted`: the record is final.
137
+ */
138
+ export declare function appendRunRecord(paths: SchedulePaths, jobId: string, run: ActiveRun, result: ScheduleRunResult, at: string): void;
139
+ /** Where `schedule stop` leaves its request. See `ScheduleDaemon#stopRequested`. */
140
+ export declare function stopRequestPath(paths: SchedulePaths): string;
141
+ /** Ask every daemon of this home, owner or standby, to stop; or clear the request. */
142
+ export declare function requestStop(paths: SchedulePaths, stop: boolean): void;
143
+ /** Spawn `node <bin> schedule __fire …` with its output going to a log file, not a pipe. */
144
+ export declare function spawnFireProcess(options: {
145
+ readonly node: string;
146
+ readonly bin: string;
147
+ readonly paths: SchedulePaths;
148
+ readonly env: NodeJS.ProcessEnv;
149
+ }): (request: FireSpawnRequest) => SpawnedRun;
150
+ /**
151
+ * The CLI as installed, cheaply: its version file, its entry point and the
152
+ * scheduler's own modules, by size and time. An npm install rewrites every
153
+ * file; a rebuild rewrites the modules that changed.
154
+ */
155
+ export declare function installedFingerprint(bin: string): () => string;
156
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/schedule/daemon/daemon.ts"],"names":[],"mappings":"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"}