@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 @@
1
+ {"version":3,"file":"retention.js","sourceRoot":"","sources":["../../../src/schedule/daemon/retention.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,YAAY,GACZ,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAG9D,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAChC,KAAoB,EACpB,GAAgB,EAChB,KAAiD;IAEjD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAC/D,CAAC,CAAC,EAA2C,EAAE,CAC9C,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAChF,CAAA;IACD,OAAO,SAAS;SACd,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAmB,CAAC;SACjC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,KAAoB,EACpB,GAAgB,EAChB,KAAiD;IAEjD,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IAChD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IACpF,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,CAAC;QACJ,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC;gBACJ,MAAM,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;gBACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAClB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,KAAK,YAAY,KAAK,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACxF,CAAC;QACF,CAAC;IACF,CAAC;YAAS,CAAC;QACV,aAAa,CAAC,QAAQ,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,QAAQ,CAAA;AAChB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What the daemon reads about a run's session: whether its lease is held,
3
+ * and how its turn ended. Read-only, from the log and the lease files; the
4
+ * daemon writes a session only to abandon an expired park and to archive old
5
+ * runs.
6
+ */
7
+ import { type ConversationFacts } from '../../integrations/sessions/store.js';
8
+ export interface RunSessionRef {
9
+ readonly home: string;
10
+ readonly projectSlug: string;
11
+ readonly sessionId: string;
12
+ }
13
+ /** Whether somebody holds the session's writer lease right now. */
14
+ export declare function sessionLeaseLive(ref: RunSessionRef, now?: number): Promise<boolean>;
15
+ export declare function sessionFacts(ref: RunSessionRef): Promise<ConversationFacts | null>;
16
+ /** How a settled turn ended: `completed`, `failed`, or `undefined` if the log does not say. */
17
+ export declare function turnOutcome(facts: ConversationFacts, turnId: string | undefined): {
18
+ status: 'completed' | 'failed';
19
+ reason?: string;
20
+ } | undefined;
21
+ /** Close a parked turn nobody answered in time (`turn_failed{ abandoned }`). */
22
+ export declare function abandonParkedTurn(ref: RunSessionRef, turnId: string, reason: string): Promise<void>;
23
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../src/schedule/daemon/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,sCAAsC,CAAA;AAEpG,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC1B;AAMD,mEAAmE;AACnE,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,SAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7F;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAUxF;AAED,+FAA+F;AAC/F,wBAAgB,WAAW,CAC1B,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,GAAG,SAAS,GACxB;IAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAiBjE;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,aAAa,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * What the daemon reads about a run's session: whether its lease is held,
3
+ * and how its turn ended. Read-only, from the log and the lease files; the
4
+ * daemon writes a session only to abandon an expired park and to archive old
5
+ * runs.
6
+ */
7
+ import { DiskSessionLog, SessionPaths, abandonTurn, asSessionId, isLeaseLive, readSessionLease, } from '@namzu/sdk';
8
+ import { readConversationFacts } from '../../integrations/sessions/store.js';
9
+ function pathsOf(ref) {
10
+ return new SessionPaths({ home: ref.home, slug: ref.projectSlug });
11
+ }
12
+ /** Whether somebody holds the session's writer lease right now. */
13
+ export async function sessionLeaseLive(ref, now = Date.now()) {
14
+ const dir = pathsOf(ref).sessionDir({ sessionId: asSessionId(ref.sessionId) });
15
+ try {
16
+ return isLeaseLive(await readSessionLease(dir), now);
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ export async function sessionFacts(ref) {
23
+ try {
24
+ return await readConversationFacts({ paths: pathsOf(ref) }, asSessionId(ref.sessionId), 'tolerant');
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ /** How a settled turn ended: `completed`, `failed`, or `undefined` if the log does not say. */
31
+ export function turnOutcome(facts, turnId) {
32
+ for (let i = facts.records.length - 1; i >= 0; i--) {
33
+ const record = facts.records[i];
34
+ if (turnId && record.turnId !== turnId)
35
+ continue;
36
+ if (record.type === 'turn_completed')
37
+ return { status: 'completed' };
38
+ if (record.type === 'turn_failed') {
39
+ return {
40
+ status: 'failed',
41
+ ...(record.error?.message ? { reason: record.error.message } : {}),
42
+ };
43
+ }
44
+ }
45
+ return undefined;
46
+ }
47
+ /** Close a parked turn nobody answered in time (`turn_failed{ abandoned }`). */
48
+ export async function abandonParkedTurn(ref, turnId, reason) {
49
+ const log = DiskSessionLog.at(pathsOf(ref), { sessionId: asSessionId(ref.sessionId) });
50
+ await abandonTurn(asSessionId(ref.sessionId), turnId, reason, { log });
51
+ }
52
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/schedule/daemon/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACN,cAAc,EACd,YAAY,EAEZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EAA0B,qBAAqB,EAAE,MAAM,sCAAsC,CAAA;AAQpG,SAAS,OAAO,CAAC,GAAkB;IAClC,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,GAAkB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC1E,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9E,IAAI,CAAC;QACJ,OAAO,WAAW,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAA;IACb,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAkB;IACpD,IAAI,CAAC;QACJ,OAAO,MAAM,qBAAqB,CACjC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EACvB,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAC1B,UAAU,CACV,CAAA;IACF,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,WAAW,CAC1B,KAAwB,EACxB,MAA0B;IAE1B,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAI7B,CAAA;QACD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;YAAE,SAAQ;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB;YAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAA;QACpE,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACnC,OAAO;gBACN,MAAM,EAAE,QAAQ;gBAChB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAClE,CAAA;QACF,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAA;AACjB,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,GAAkB,EAClB,MAAc,EACd,MAAc;IAEd,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACtF,MAAM,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAgB,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;AACjF,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The environment a scheduled run starts with.
3
+ *
4
+ * A service does not see what an interactive shell exported, so the daemon
5
+ * builds each child's environment from an allowlist rather than passing its
6
+ * own along; `daemon.env` (0600, `KEY=value` lines) supplies credentials. Its
7
+ * values reach PROVIDER DISCOVERY only — the fire child reads the file itself
8
+ * and hands the variables to discovery as an object, never into `process.env`,
9
+ * where the bash tool would inherit whatever name a credential happened to
10
+ * have.
11
+ */
12
+ /** Variables a child inherits from the daemon. Nothing else. */
13
+ export declare const CHILD_ENV_ALLOWLIST: readonly ["HOME", "USER", "LOGNAME", "LANG", "LC_ALL", "TZ", "TMPDIR", "SHELL", "XDG_RUNTIME_DIR", "XDG_CONFIG_HOME", "DBUS_SESSION_BUS_ADDRESS", "WSL_DISTRO_NAME", "WSL_INTEROP", "SystemRoot", "USERPROFILE", "APPDATA", "LOCALAPPDATA", "DISPLAY", "WAYLAND_DISPLAY", "XAUTHORITY"];
14
+ /** `PATH` without Windows drive mounts: under WSL a failed lookup through `/mnt/c` costs seconds. */
15
+ export declare function stripWindowsMounts(path: string | undefined): string;
16
+ /** The environment of a fire child. */
17
+ export declare function childEnvironment(source: NodeJS.ProcessEnv, namzuHome: string): NodeJS.ProcessEnv;
18
+ export interface DaemonEnvFile {
19
+ readonly values: Readonly<Record<string, string>>;
20
+ readonly warnings: readonly string[];
21
+ }
22
+ /**
23
+ * Read `daemon.env`: `KEY=value` per line, `#` comments, optional matching
24
+ * quotes around a value. A file others can read is reported, not refused:
25
+ * refusing would stop every job over a mode bit.
26
+ */
27
+ export declare function readDaemonEnv(path: string): DaemonEnvFile;
28
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/schedule/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,yRAuBtB,CAAA;AAEV,qGAAqG;AACrG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKnE;AAED,uCAAuC;AACvC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,UAAU,CAUhG;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CA8BzD"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * The environment a scheduled run starts with.
3
+ *
4
+ * A service does not see what an interactive shell exported, so the daemon
5
+ * builds each child's environment from an allowlist rather than passing its
6
+ * own along; `daemon.env` (0600, `KEY=value` lines) supplies credentials. Its
7
+ * values reach PROVIDER DISCOVERY only — the fire child reads the file itself
8
+ * and hands the variables to discovery as an object, never into `process.env`,
9
+ * where the bash tool would inherit whatever name a credential happened to
10
+ * have.
11
+ */
12
+ import { readFileSync, statSync } from 'node:fs';
13
+ /** Variables a child inherits from the daemon. Nothing else. */
14
+ export const CHILD_ENV_ALLOWLIST = [
15
+ 'HOME',
16
+ 'USER',
17
+ 'LOGNAME',
18
+ 'LANG',
19
+ 'LC_ALL',
20
+ 'TZ',
21
+ 'TMPDIR',
22
+ 'SHELL',
23
+ 'XDG_RUNTIME_DIR',
24
+ 'XDG_CONFIG_HOME',
25
+ 'DBUS_SESSION_BUS_ADDRESS',
26
+ 'WSL_DISTRO_NAME',
27
+ 'WSL_INTEROP',
28
+ 'SystemRoot',
29
+ 'USERPROFILE',
30
+ 'APPDATA',
31
+ 'LOCALAPPDATA',
32
+ // A job with `browser.headed` opens a window: X11, Wayland (WSLg sets
33
+ // both), and the X authority file a display may need.
34
+ 'DISPLAY',
35
+ 'WAYLAND_DISPLAY',
36
+ 'XAUTHORITY',
37
+ ];
38
+ /** `PATH` without Windows drive mounts: under WSL a failed lookup through `/mnt/c` costs seconds. */
39
+ export function stripWindowsMounts(path) {
40
+ return (path ?? '')
41
+ .split(':')
42
+ .filter((entry) => entry !== '' && !/^\/mnt\/[a-z](\/|$)/i.test(entry))
43
+ .join(':');
44
+ }
45
+ /** The environment of a fire child. */
46
+ export function childEnvironment(source, namzuHome) {
47
+ const env = {};
48
+ for (const key of CHILD_ENV_ALLOWLIST)
49
+ if (source[key] !== undefined)
50
+ env[key] = source[key];
51
+ env.PATH =
52
+ process.platform === 'win32'
53
+ ? (source.PATH ?? source.Path ?? '')
54
+ : stripWindowsMounts(source.PATH);
55
+ if (!env.PATH)
56
+ env.PATH = '/usr/local/bin:/usr/bin:/bin';
57
+ env.NAMZU_HOME = namzuHome;
58
+ return env;
59
+ }
60
+ /**
61
+ * Read `daemon.env`: `KEY=value` per line, `#` comments, optional matching
62
+ * quotes around a value. A file others can read is reported, not refused:
63
+ * refusing would stop every job over a mode bit.
64
+ */
65
+ export function readDaemonEnv(path) {
66
+ let text;
67
+ try {
68
+ text = readFileSync(path, 'utf8');
69
+ }
70
+ catch {
71
+ return { values: {}, warnings: [] };
72
+ }
73
+ const warnings = [];
74
+ try {
75
+ const mode = statSync(path).mode & 0o077;
76
+ if (mode !== 0 && process.platform !== 'win32') {
77
+ warnings.push(`${path} can be read by other users; run chmod 600 on it`);
78
+ }
79
+ }
80
+ catch { }
81
+ const values = {};
82
+ text.split(/\r?\n/).forEach((raw, index) => {
83
+ const line = raw.trim();
84
+ if (!line || line.startsWith('#'))
85
+ return;
86
+ const match = /^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(line);
87
+ if (!match) {
88
+ warnings.push(`${path}:${index + 1} is not KEY=value; ignored`);
89
+ return;
90
+ }
91
+ let value = match[2] ?? '';
92
+ if (value.length >= 2 && (value[0] === '"' || value[0] === "'") && value.at(-1) === value[0]) {
93
+ value = value.slice(1, -1);
94
+ }
95
+ values[match[1]] = value;
96
+ });
97
+ return { values, warnings };
98
+ }
99
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/schedule/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEhD,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,iBAAiB;IACjB,iBAAiB;IACjB,0BAA0B;IAC1B,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,aAAa;IACb,SAAS;IACT,cAAc;IACd,sEAAsE;IACtE,sDAAsD;IACtD,SAAS;IACT,iBAAiB;IACjB,YAAY;CACH,CAAA;AAEV,qGAAqG;AACrG,MAAM,UAAU,kBAAkB,CAAC,IAAwB;IAC1D,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtE,IAAI,CAAC,GAAG,CAAC,CAAA;AACZ,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,gBAAgB,CAAC,MAAyB,EAAE,SAAiB;IAC5E,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,GAAG,IAAI,mBAAmB;QAAE,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5F,GAAG,CAAC,IAAI;QACP,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC3B,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACpC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,GAAG,CAAC,IAAI;QAAE,GAAG,CAAC,IAAI,GAAG,8BAA8B,CAAA;IACxD,GAAG,CAAC,UAAU,GAAG,SAAS,CAAA;IAC1B,OAAO,GAAG,CAAA;AACX,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,IAAI,IAAY,CAAA;IAChB,IAAI,CAAC;QACJ,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACpC,CAAC;IACD,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAA;QACxC,IAAI,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,kDAAkD,CAAC,CAAA;QACzE,CAAC;IACF,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;QACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAM;QACzC,MAAM,KAAK,GAAG,qDAAqD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9E,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,4BAA4B,CAAC,CAAA;YAC/D,OAAM;QACP,CAAC;QACD,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC1B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,GAAG,KAAK,CAAA;IACnC,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Whether a scheduled run with a browser grant can drive its browser, asked
3
+ * before any model call: a run that would stop at its first browser call
4
+ * because the profile is missing or the browser cannot start is
5
+ * `blocked-config` with nothing spent, and says what to do.
6
+ *
7
+ * Checks, in order: `@namzu/browser` loads; the profile has a descriptor in
8
+ * `NAMZU_HOME` and its user data directory is there; the engine the profile
9
+ * was signed in with can run in this process's environment (for the Windows
10
+ * browser from WSL: interop, `powershell.exe` and Chrome or Edge, which a
11
+ * systemd service finds through `/run/WSL`); and a window, when the job
12
+ * asks for one, has a display.
13
+ *
14
+ * The run uses the engine the profile belongs to, never another: a
15
+ * profile signed in with the Windows Chrome has its cookies there, and a
16
+ * local Chromium would start signed out.
17
+ */
18
+ import type { BrowserEngineSetting, BrowserEnvironmentProbes } from '@namzu/browser';
19
+ import type { ScheduleBrowserGrant } from '@namzu/sdk';
20
+ export type BrowserPreflight = {
21
+ readonly ok: true;
22
+ /** The engine the profile belongs to, forced for the run. */
23
+ readonly engine: Exclude<BrowserEngineSetting, 'auto'>;
24
+ /** Why the run's browser is what it is, for the run's warnings. */
25
+ readonly warnings: readonly string[];
26
+ } | {
27
+ readonly ok: false;
28
+ readonly reason: string;
29
+ };
30
+ export interface BrowserPreflightDependencies {
31
+ readonly env: NodeJS.ProcessEnv;
32
+ readonly platform?: NodeJS.Platform;
33
+ /** Test seam: the file-system questions detection asks. */
34
+ readonly probes?: BrowserEnvironmentProbes;
35
+ /** Test seam: whether a path exists. */
36
+ readonly exists?: (path: string) => boolean;
37
+ /** Test seam: the browser package. */
38
+ readonly load?: () => Promise<typeof import('@namzu/browser')>;
39
+ }
40
+ export declare function browserPreflight(grant: ScheduleBrowserGrant, home: string, deps: BrowserPreflightDependencies): Promise<BrowserPreflight>;
41
+ //# sourceMappingURL=browser-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-preflight.d.ts","sourceRoot":"","sources":["../../../src/schedule/fire/browser-preflight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,MAAM,MAAM,gBAAgB,GACzB;IACA,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;IACjB,6DAA6D;IAC7D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAA;IACtD,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACnC,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,wBAAwB,CAAA;IAC1C,wCAAwC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC3C,sCAAsC;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,cAAc,gBAAgB,CAAC,CAAC,CAAA;CAC9D;AAED,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,oBAAoB,EAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,4BAA4B,GAChC,OAAO,CAAC,gBAAgB,CAAC,CA2D3B"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Whether a scheduled run with a browser grant can drive its browser, asked
3
+ * before any model call: a run that would stop at its first browser call
4
+ * because the profile is missing or the browser cannot start is
5
+ * `blocked-config` with nothing spent, and says what to do.
6
+ *
7
+ * Checks, in order: `@namzu/browser` loads; the profile has a descriptor in
8
+ * `NAMZU_HOME` and its user data directory is there; the engine the profile
9
+ * was signed in with can run in this process's environment (for the Windows
10
+ * browser from WSL: interop, `powershell.exe` and Chrome or Edge, which a
11
+ * systemd service finds through `/run/WSL`); and a window, when the job
12
+ * asks for one, has a display.
13
+ *
14
+ * The run uses the engine the profile belongs to, never another: a
15
+ * profile signed in with the Windows Chrome has its cookies there, and a
16
+ * local Chromium would start signed out.
17
+ */
18
+ import { existsSync } from 'node:fs';
19
+ export async function browserPreflight(grant, home, deps) {
20
+ let browser;
21
+ try {
22
+ browser = await (deps.load ?? (() => import('@namzu/browser')))();
23
+ }
24
+ catch (error) {
25
+ return {
26
+ ok: false,
27
+ reason: `the job uses the browser, but @namzu/browser cannot be loaded (${error instanceof Error ? error.message : String(error)}); run namzu doctor`,
28
+ };
29
+ }
30
+ const login = `namzu browser login ${grant.profile} ${Object.keys(grant.sites)[0] ?? '<url>'}`;
31
+ let descriptor;
32
+ try {
33
+ descriptor = new browser.BrowserProfileStore(home).get(grant.profile);
34
+ }
35
+ catch (error) {
36
+ return {
37
+ ok: false,
38
+ reason: `browser profile ${grant.profile} cannot be read: ${error instanceof Error ? error.message : String(error)}`,
39
+ };
40
+ }
41
+ if (!descriptor) {
42
+ return {
43
+ ok: false,
44
+ reason: `browser profile ${grant.profile} does not exist; sign in once with ${login}`,
45
+ };
46
+ }
47
+ const engine = descriptor.engine === 'windows-cdp' ? 'windows' : 'local';
48
+ const plan = browser.runnableBrowserPlan(browser.detectBrowserEnvironment(deps.env, deps.platform ?? process.platform, deps.probes ?? browser.nodeBrowserProbes, { engine, headless: grant.headed ? 'never' : 'always', mode: 'unattended' }));
49
+ if (plan.unavailableReason !== undefined) {
50
+ return {
51
+ ok: false,
52
+ reason: `the browser for profile ${grant.profile} cannot start here: ${plan.unavailableReason}`,
53
+ };
54
+ }
55
+ if (plan.engine !== descriptor.engine) {
56
+ return {
57
+ ok: false,
58
+ reason: `browser profile ${grant.profile} was signed in with ${descriptor.engine === 'windows-cdp' ? 'the Windows browser' : 'a browser inside Linux'}, and this run would use ${plan.engine === 'windows-cdp' ? 'the Windows browser' : 'a browser inside Linux'}`,
59
+ };
60
+ }
61
+ const exists = deps.exists ?? existsSync;
62
+ const dataDir = plan.engine === 'windows-cdp'
63
+ ? browser.windowsPathToWsl(descriptor.userDataDir, plan.mountRoot)
64
+ : descriptor.userDataDir;
65
+ if (dataDir === undefined || !exists(dataDir)) {
66
+ return {
67
+ ok: false,
68
+ reason: `browser profile ${grant.profile} has no data at ${descriptor.userDataDir}; sign in again with ${login}`,
69
+ };
70
+ }
71
+ return { ok: true, engine, warnings: plan.warnings };
72
+ }
73
+ //# sourceMappingURL=browser-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-preflight.js","sourceRoot":"","sources":["../../../src/schedule/fire/browser-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * `namzu schedule __fire`: one scheduled run, as a headless turn in the
3
+ * job's folder. Started only by the daemon (or `schedule run-now` without
4
+ * one), never by hand, and not listed in help.
5
+ *
6
+ * It composes what `exec` composes — trust, the project's config, a new
7
+ * conversation, `createAgentSession`, `send`, the provider wait — without
8
+ * sharing `exec`'s runner: `exec` resolves `prompt` into `auto` because
9
+ * nobody can answer, and a scheduled run must do the opposite. Here every
10
+ * batch that would reach a person is HELD (`SendOptions.reviewHold`): the
11
+ * turn parks durably, the run records `awaiting-approval`, and the operator
12
+ * answers later in the TUI.
13
+ *
14
+ * Checks before any model call, each ending the run as `blocked-config` with
15
+ * zero tokens spent: the job still exists at the revision the daemon
16
+ * claimed, is active and still matches its confirmation; the folder is the
17
+ * canonical folder trust was granted for and can be listed; the project's
18
+ * code-executing config is the one confirmed; every permission rule compiles;
19
+ * the pinned provider has a credential in the service's environment.
20
+ *
21
+ * The child's own watchdog enforces the wall clock: the kernel's turn
22
+ * timeout first, then, a minute later, it releases its session lease and
23
+ * exits. The daemon never kills a run by a pid it read from disk.
24
+ */
25
+ import type { CommandContext } from '../../commands/types.js';
26
+ import type { SchedulePaths } from '../paths.js';
27
+ import type { ScheduleJob, ScheduleRunTrigger } from '../types.js';
28
+ import { browserPreflight } from './browser-preflight.js';
29
+ export declare const HOLD_REASON = "Scheduled run: waiting for the operator to approve";
30
+ /** How long past the turn's own timeout the child waits before it stops itself. */
31
+ export declare const WATCHDOG_GRACE_MS = 60000;
32
+ export interface FireArgs {
33
+ readonly jobId: string;
34
+ readonly runId: string;
35
+ readonly key: string;
36
+ readonly revision: number;
37
+ readonly trigger: ScheduleRunTrigger;
38
+ readonly scheduledFor?: string;
39
+ readonly daemonEpoch?: string;
40
+ }
41
+ export declare function parseFireArgs(argv: readonly string[]): FireArgs | {
42
+ error: string;
43
+ };
44
+ export declare const BORROWED_CREDENTIAL_WARNING = "This run used another program's sign-in. Refreshing it here can race that program's own refresh; store a credential with `namzu login` or daemon.env for unattended runs.";
45
+ export interface FireDependencies {
46
+ /** The environment the service gave this process; read, never modified. */
47
+ readonly env?: NodeJS.ProcessEnv;
48
+ /** Test seam: the agent module. */
49
+ readonly agent?: Pick<typeof import('../../tui/agent.js'), 'probeAgentSession' | 'createAgentSession'>;
50
+ /** Test seam: stop the process after the watchdog grace. */
51
+ readonly exit?: (code: number) => void;
52
+ readonly now?: () => Date;
53
+ /** Test seam: how long past the turn timeout the watchdog waits. */
54
+ readonly graceMs?: number;
55
+ /** Test seam: leave the process's logging as it is. */
56
+ readonly keepLogging?: boolean;
57
+ /** Test seam: whether the job's browser can run (see `browser-preflight.ts`). */
58
+ readonly browserPreflight?: typeof browserPreflight;
59
+ }
60
+ /**
61
+ * Run one fire. Returns the exit code; the result file is the record. Exit
62
+ * codes follow `exec`: 0 completed or parked, 1 failed, 64 usage, 75 the
63
+ * provider stayed unavailable, 77 the folder is not trusted for this job.
64
+ */
65
+ export declare function runFire(ctx: CommandContext, paths: SchedulePaths, args: FireArgs, deps?: FireDependencies): Promise<number>;
66
+ /**
67
+ * What a parked run tells the operator it needs: the tool's reason, and for
68
+ * the browser the command that signs in again. "http://… is showing a
69
+ * sign-in page" alone, in a notification and `schedule list`, left what to
70
+ * do unsaid.
71
+ */
72
+ export declare function handoffReason(handoff: {
73
+ readonly reason: string;
74
+ readonly detail?: Readonly<Record<string, string>>;
75
+ }): string;
76
+ /** A one-line description for logs and notifications; never the prompt. */
77
+ export declare function describeJob(job: ScheduleJob): string;
78
+ //# sourceMappingURL=fire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fire.d.ts","sourceRoot":"","sources":["../../../src/schedule/fire/fire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAWH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAgB7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,OAAO,KAAK,EACX,WAAW,EAGX,kBAAkB,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAyB,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAIhF,eAAO,MAAM,WAAW,uDAAuD,CAAA;AAC/E,mFAAmF;AACnF,eAAO,MAAM,iBAAiB,QAAS,CAAA;AAEvC,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CA2BnF;AAyBD,eAAO,MAAM,2BAA2B,8KACoI,CAAA;AAE5K,MAAM,WAAW,gBAAgB;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IAChC,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CACpB,cAAc,oBAAoB,CAAC,EACnC,mBAAmB,GAAG,oBAAoB,CAC1C,CAAA;IACD,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,oEAAoE;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,uDAAuD;IACvD,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAA;CACnD;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAC5B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE,gBAAqB,GACzB,OAAO,CAAC,MAAM,CAAC,CA+XjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAClD,GAAG,MAAM,CAGT;AAcD,2EAA2E;AAC3E,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAEpD"}