@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
@@ -43,7 +43,7 @@
43
43
  * something else — and would keep passing after the rule it was written for was
44
44
  * deleted.
45
45
  */
46
- import { AuthorizationGate, NOOP_LOGGER } from '@namzu/sdk';
46
+ import { AuthorizationGate, NOOP_LOGGER, getBuiltinTools } from '@namzu/sdk';
47
47
  import { isPermissionEffect } from './rules.js';
48
48
  /**
49
49
  * The gate's vocabulary against the operator's.
@@ -96,10 +96,16 @@ export function verifyPermissionChecks(rules, checks) {
96
96
  });
97
97
  continue;
98
98
  }
99
+ // A builtin's command line is read for the shell the tool spawns, as it
100
+ // is at runtime; the CLI runs commands on the host unless a sandbox is
101
+ // chosen, and a sandboxed reading is only ever stricter.
102
+ const builtin = getBuiltinTools().find((tool) => tool.name === check.tool);
103
+ const commandDialect = builtin?.commandDialect?.({ sandboxed: false });
99
104
  const verdict = gate.evaluate({
100
105
  toolName: check.tool,
101
106
  toolInput: check.input,
102
107
  toolDef: undefined,
108
+ ...(commandDialect !== undefined ? { commandDialect } : {}),
103
109
  });
104
110
  const actual = asEffect(verdict.decision);
105
111
  if (actual === check.expect)
@@ -1 +1 @@
1
- {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/permissions/checks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAAE,iBAAiB,EAA0B,WAAW,EAAE,MAAM,YAAY,CAAA;AAGnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAW/C;;;;;;GAMG;AACH,SAAS,QAAQ,CAAC,QAAqC;IACtD,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AAChD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACrC,KAAmC,EACnC,MAA0C;IAE1C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE7C,MAAM,WAAW,GAAwB,EAAE,CAAA;IAC3C,MAAM,IAAI,GAAG,IAAI,iBAAiB,CACjC;QACC,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;QACjB,kBAAkB,EAAE,KAAK;QACzB,wDAAwD;QACxD,qBAAqB,EAAE,KAAK;QAC5B,YAAY,EAAE,KAAK;KACnB,EACD,WAAW,CACX,CAAA;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,oBAAoB,KAAK,GAAG,CAAA;QAE1C,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YAC1D,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC,CAAA;YAC3F,SAAQ;QACT,CAAC;QACD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3F,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,kCAAkC,KAAK,CAAC,IAAI,SAAS,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;aACrF,CAAC,CAAA;YACF,SAAQ;QACT,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,yDAAyD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;aAChG,CAAC,CAAA;YACF,SAAQ;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,SAAS,EAAE,KAAK,CAAC,KAAK;YACtB,OAAO,EAAE,SAAS;SAClB,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACzC,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM;YAAE,SAAQ;QAErC,wEAAwE;QACxE,sEAAsE;QACtE,kDAAkD;QAClD,WAAW,CAAC,IAAI,CAAC;YAChB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,MAAM,wBAAwB,KAAK,CAAC,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE;SAC9H,CAAC,CAAA;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC/B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,KAAK,CAAA;AACxD,CAAC"}
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/permissions/checks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/permissions/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,iBAAiB,EAA2B,MAAM,YAAY,CAAA;AAE5E,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,aAAa,CAAA;AAEjF,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAIvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAE1F,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;AAExE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC5C;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAClD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,OAAO,GAAG,MAAe,GACjC,MAAM,CASR;AA+CD,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,MAAM,CAAC,EAAE,sBAAsB,GAC7B,mBAAmB,CAqFrB"}
1
+ {"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/permissions/rules.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACN,KAAK,iBAAiB,EAGtB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,KAAK,sBAAsB,EAA0B,MAAM,aAAa,CAAA;AAEjF,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;AAIvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAE1F,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;AAExE,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,iBAAiB,EAAE,CAAA;IAC5C;;;;;;;OAOG;IACH,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAClD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,OAAO,GAAG,MAAe,GACjC,MAAM,CASR;AA+CD,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU1D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CACjC,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,MAAM,CAAC,EAAE,sBAAsB,GAC7B,mBAAmB,CAqFrB"}
@@ -10,7 +10,7 @@
10
10
  * The whole surface is pure: config in, rules out. The gate stays the only
11
11
  * thing that decides anything, which is what keeps this testable without a turn.
12
12
  */
13
- import { builtinCommandArguments } from '@namzu/sdk';
13
+ import { builtinCommandArguments, permissionPatternToRegExpSource, } from '@namzu/sdk';
14
14
  import { verifyPermissionChecks } from './checks.js';
15
15
  const EFFECTS = new Set(['allow', 'ask', 'deny']);
16
16
  export function isPermissionEffect(value) {
@@ -30,13 +30,9 @@ export function isPermissionEffect(value) {
30
30
  * exists to stop.
31
31
  */
32
32
  export function patternToRegExpSource(pattern) {
33
- const normalized = pattern.replaceAll('\\', '/');
34
- const escaped = normalized
35
- .replace(/[.+^${}()|[\]\\]/g, '\\$&')
36
- .replace(/\*/g, '.*')
37
- .replace(/\?/g, '.');
38
- const trailingSpaceStar = escaped.endsWith(' .*') ? `${escaped.slice(0, -3)}( .*)?` : escaped;
39
- return `^${trailingSpaceStar}$`;
33
+ // The kernel owns the dialect so a skill's `Bash(git status *)` and this
34
+ // table's `"git status *"` cannot drift apart.
35
+ return permissionPatternToRegExpSource(pattern);
40
36
  }
41
37
  /**
42
38
  * A pattern that matches this tool, and only this tool, doing this thing.
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/permissions/rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/permissions/rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Turning what an operator (or a confirmed model proposal) asked for into a
3
+ * job, and what they are shown before they confirm it.
4
+ *
5
+ * Shared by `schedule add`, the TUI and the `schedule` tool's host, so every
6
+ * surface refuses the same things and shows the same preview:
7
+ *
8
+ * - an explicit permission set is required; there is no default;
9
+ * - `unmatched: allow` beside host execution needs `allowUnattendedHost`,
10
+ * which only the CLI flag sets (the tool can never);
11
+ * - the folder is canonicalised and may not be `/`, the home directory, or
12
+ * anything containing or inside `NAMZU_HOME`;
13
+ * - the token budget and the wall clock are always above zero;
14
+ * - the schedule parses in the job's zone and fires at least once.
15
+ *
16
+ * A built job is inert (`pending-confirmation`, no trust) until
17
+ * {@link confirmJob} records who confirmed it and on which surface.
18
+ */
19
+ import { type ScheduleSpec } from '@namzu/sdk';
20
+ import type { NamzuCliConfig } from '../config/schema.js';
21
+ import type { SchedulePaths } from './paths.js';
22
+ import { type CompiledJobPolicy, type PermissionInput } from './policy.js';
23
+ import type { ConfirmationSurface, ScheduleBudget, ScheduleJob } from './types.js';
24
+ export declare const DEFAULT_TOKEN_BUDGET = 500000;
25
+ export declare const DEFAULT_TIMEOUT_MS: number;
26
+ export declare const DEFAULT_MAX_ITERATIONS = 50;
27
+ /** Below this many iterations a run's preview warns that it may stop unfinished. */
28
+ export declare const FEW_ITERATIONS = 10;
29
+ /** Below this token budget a run's preview warns: one model call resends the whole prompt. */
30
+ export declare const FEW_TOKENS = 50000;
31
+ export declare const DEFAULT_WAIT_FOR_PROVIDER_MS: number;
32
+ export declare const DEFAULT_APPROVAL_TTL_MS: number;
33
+ export declare const DEFAULT_KEEP_SESSIONS = 20;
34
+ export declare const DEFAULT_PAUSE_AFTER_FAILURES = 5;
35
+ export interface JobRequest {
36
+ readonly name: string;
37
+ readonly prompt: string;
38
+ readonly when: string;
39
+ /** A spec already parsed (an edit that keeps its schedule); `when` is then ignored. */
40
+ readonly spec?: ScheduleSpec;
41
+ readonly folder: string;
42
+ readonly tz?: string;
43
+ readonly permissions: PermissionInput;
44
+ readonly budget?: Partial<ScheduleBudget>;
45
+ /** `provider` or `provider/model`; absent: the operator's configured primary. */
46
+ readonly model?: string;
47
+ readonly effort?: string;
48
+ readonly includeSummary?: boolean;
49
+ readonly keepSessions?: number;
50
+ readonly pauseAfterFailures?: number;
51
+ readonly approvalTtlMs?: number;
52
+ readonly createdBy: ScheduleJob['createdBy'];
53
+ /** Only the CLI's `--allow-unattended-host` sets this. */
54
+ readonly allowUnattendedHost?: boolean;
55
+ }
56
+ export declare class JobRequestError extends Error {
57
+ readonly name = "JobRequestError";
58
+ }
59
+ /** The model a job pins: `provider[/model]`, or the configured primary. */
60
+ export declare function resolveJobModel(spec: string | undefined, home?: string): ScheduleJob['model'];
61
+ export declare function buildJob(request: JobRequest, context: {
62
+ readonly paths: SchedulePaths;
63
+ readonly config: Pick<NamzuCliConfig, 'limits'>;
64
+ readonly now: Date;
65
+ readonly osHome?: string;
66
+ }): ScheduleJob;
67
+ /**
68
+ * Record a confirmation: trust for the job's folder (for this job only —
69
+ * `trust.json` is not touched), the digest of what was confirmed, and the
70
+ * surface it happened on. A non-interactive surface confirms nothing.
71
+ */
72
+ export declare function confirmJob(job: ScheduleJob, surface: ConfirmationSurface, now: Date, options?: {
73
+ readonly paused?: boolean;
74
+ }): ScheduleJob;
75
+ /** At most how many times a day the schedule fires (the busiest of the next seven days). */
76
+ export declare function runsPerDay(spec: ScheduleSpec, now: Date): number;
77
+ /** The job as a person is asked to confirm it. Every line is computed here, never taken from a proposal. */
78
+ export declare function previewLines(job: ScheduleJob, policy: CompiledJobPolicy, now: Date): string[];
79
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/schedule/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ /**
2
+ * Turning what an operator (or a confirmed model proposal) asked for into a
3
+ * job, and what they are shown before they confirm it.
4
+ *
5
+ * Shared by `schedule add`, the TUI and the `schedule` tool's host, so every
6
+ * surface refuses the same things and shows the same preview:
7
+ *
8
+ * - an explicit permission set is required; there is no default;
9
+ * - `unmatched: allow` beside host execution needs `allowUnattendedHost`,
10
+ * which only the CLI flag sets (the tool can never);
11
+ * - the folder is canonicalised and may not be `/`, the home directory, or
12
+ * anything containing or inside `NAMZU_HOME`;
13
+ * - the token budget and the wall clock are always above zero;
14
+ * - the schedule parses in the job's zone and fires at least once.
15
+ *
16
+ * A built job is inert (`pending-confirmation`, no trust) until
17
+ * {@link confirmJob} records who confirmed it and on which surface.
18
+ */
19
+ import { SCHEDULE_CATCH_UP_WINDOW_MS, countOccurrences, describeSchedule, generateScheduleJobId, hostTimeZone, parseScheduleSpec, upcomingFireTimes, validateTimeZone, } from '@namzu/sdk';
20
+ import { PROVIDER_REGISTRY, readPreferences, } from '../integrations/providers/index.js';
21
+ import { checkJobFolder } from './folder.js';
22
+ import { expandPermissions } from './policy.js';
23
+ import { computeProjectDigest } from './store/digest.js';
24
+ import { JOB_NAME, jobSecurityDigest } from './store/jobs.js';
25
+ export const DEFAULT_TOKEN_BUDGET = 500_000;
26
+ export const DEFAULT_TIMEOUT_MS = 30 * 60_000;
27
+ export const DEFAULT_MAX_ITERATIONS = 50;
28
+ /** Below this many iterations a run's preview warns that it may stop unfinished. */
29
+ export const FEW_ITERATIONS = 10;
30
+ /** Below this token budget a run's preview warns: one model call resends the whole prompt. */
31
+ export const FEW_TOKENS = 50_000;
32
+ export const DEFAULT_WAIT_FOR_PROVIDER_MS = 10 * 60_000;
33
+ export const DEFAULT_APPROVAL_TTL_MS = 7 * 24 * 60 * 60_000;
34
+ export const DEFAULT_KEEP_SESSIONS = 20;
35
+ export const DEFAULT_PAUSE_AFTER_FAILURES = 5;
36
+ export class JobRequestError extends Error {
37
+ name = 'JobRequestError';
38
+ }
39
+ function positive(label, value, fallback) {
40
+ const v = value ?? fallback;
41
+ if (!Number.isSafeInteger(v) || v <= 0)
42
+ throw new JobRequestError(`${label} must be a whole number above zero`);
43
+ return v;
44
+ }
45
+ /** The model a job pins: `provider[/model]`, or the configured primary. */
46
+ export function resolveJobModel(spec, home) {
47
+ if (spec) {
48
+ const [provider = '', ...rest] = spec.split('/');
49
+ if (!(provider in PROVIDER_REGISTRY)) {
50
+ throw new JobRequestError(`unknown provider "${provider}" (known: ${Object.keys(PROVIDER_REGISTRY).join(', ')})`);
51
+ }
52
+ const model = rest.join('/');
53
+ return {
54
+ provider,
55
+ ...(model ? { model } : { model: PROVIDER_REGISTRY[provider].defaultModel }),
56
+ };
57
+ }
58
+ const read = readPreferences(home);
59
+ const primary = read.status === 'ok' ? read.prefs.providers[0] : undefined;
60
+ if (!primary) {
61
+ throw new JobRequestError('no provider is configured; pass --model <provider>/<model> or pick one in namzu first');
62
+ }
63
+ return {
64
+ provider: primary.id,
65
+ model: primary.model ?? PROVIDER_REGISTRY[primary.id].defaultModel,
66
+ };
67
+ }
68
+ export function buildJob(request, context) {
69
+ if (!JOB_NAME.test(request.name)) {
70
+ throw new JobRequestError(`"${request.name}" is not a job name: lowercase letters, digits and dashes, starting with a letter or digit`);
71
+ }
72
+ if (!request.prompt.trim())
73
+ throw new JobRequestError('the prompt is empty');
74
+ const permissions = (() => {
75
+ try {
76
+ return expandPermissions(request.permissions);
77
+ }
78
+ catch (error) {
79
+ throw new JobRequestError(error instanceof Error ? error.message : String(error));
80
+ }
81
+ })();
82
+ if (permissions.unmatched === 'allow' &&
83
+ permissions.execution === 'host' &&
84
+ !request.allowUnattendedHost) {
85
+ throw new JobRequestError('unmatched: allow with execution on the host lets an unattended run do anything no rule forbids; pass --allow-unattended-host to mean it, or use --execution sandbox');
86
+ }
87
+ const folder = checkJobFolder(request.folder, {
88
+ namzuHome: context.paths.home,
89
+ ...(context.osHome ? { osHome: context.osHome } : {}),
90
+ });
91
+ if (!folder.ok)
92
+ throw new JobRequestError(folder.reason);
93
+ const extra = (permissions.additionalDirectories ?? []).map((dir) => {
94
+ const checked = checkJobFolder(dir, {
95
+ namzuHome: context.paths.home,
96
+ ...(context.osHome ? { osHome: context.osHome } : {}),
97
+ });
98
+ if (!checked.ok)
99
+ throw new JobRequestError(`additional directory: ${checked.reason}`);
100
+ return checked.canonical;
101
+ });
102
+ const tz = validateTimeZone(request.tz ?? hostTimeZone());
103
+ let spec;
104
+ try {
105
+ spec = request.spec ?? parseScheduleSpec(request.when, { now: context.now, tz });
106
+ }
107
+ catch (error) {
108
+ throw new JobRequestError(error instanceof Error ? error.message : String(error));
109
+ }
110
+ const limits = context.config.limits ?? {};
111
+ const budget = {
112
+ maxIterations: positive('max iterations', request.budget?.maxIterations, limits.maxIterations || DEFAULT_MAX_ITERATIONS),
113
+ tokenBudget: positive('the token budget', request.budget?.tokenBudget, limits.tokenBudget || DEFAULT_TOKEN_BUDGET),
114
+ timeoutMs: positive('the timeout', request.budget?.timeoutMs, limits.timeoutMs || DEFAULT_TIMEOUT_MS),
115
+ waitForProviderMs: request.budget?.waitForProviderMs ?? limits.waitForProviderMs ?? DEFAULT_WAIT_FOR_PROVIDER_MS,
116
+ };
117
+ if (budget.timeoutMs > 2_147_483_647 - 60_000)
118
+ throw new JobRequestError('the timeout is too long');
119
+ const at = context.now.toISOString();
120
+ return {
121
+ v: 1,
122
+ kind: 'schedule-job',
123
+ id: generateScheduleJobId(),
124
+ name: request.name,
125
+ revision: 0,
126
+ createdAt: at,
127
+ updatedAt: at,
128
+ createdBy: request.createdBy,
129
+ prompt: request.prompt,
130
+ folder: { path: request.folder, canonical: folder.canonical },
131
+ trust: null,
132
+ schedule: spec,
133
+ permissions: { ...permissions, ...(extra.length > 0 ? { additionalDirectories: extra } : {}) },
134
+ budget,
135
+ model: {
136
+ ...resolveJobModel(request.model, context.paths.home),
137
+ ...(request.effort ? { effort: request.effort } : {}),
138
+ },
139
+ catchUp: { windowMs: SCHEDULE_CATCH_UP_WINDOW_MS },
140
+ notify: {
141
+ finished: true,
142
+ failed: true,
143
+ awaitingApproval: true,
144
+ includeSummary: request.includeSummary === true,
145
+ },
146
+ failurePolicy: {
147
+ pauseAfterFailures: request.pauseAfterFailures ?? DEFAULT_PAUSE_AFTER_FAILURES,
148
+ },
149
+ retention: { keepSessions: request.keepSessions ?? DEFAULT_KEEP_SESSIONS },
150
+ state: 'pending-confirmation',
151
+ approvalTtlMs: request.approvalTtlMs ?? DEFAULT_APPROVAL_TTL_MS,
152
+ projectDigest: computeProjectDigest(folder.canonical),
153
+ confirmation: null,
154
+ };
155
+ }
156
+ /**
157
+ * Record a confirmation: trust for the job's folder (for this job only —
158
+ * `trust.json` is not touched), the digest of what was confirmed, and the
159
+ * surface it happened on. A non-interactive surface confirms nothing.
160
+ */
161
+ export function confirmJob(job, surface, now, options = {}) {
162
+ if (surface === 'cli-noninteractive')
163
+ return { ...job, state: 'pending-confirmation', confirmation: null };
164
+ const at = now.toISOString();
165
+ const trusted = {
166
+ ...job,
167
+ trust: { canonical: job.folder.canonical, grantedAt: at, by: 'operator-confirmation' },
168
+ projectDigest: computeProjectDigest(job.folder.canonical),
169
+ };
170
+ return {
171
+ ...trusted,
172
+ state: options.paused ? 'paused' : 'active',
173
+ ...(options.paused ? { pausedAt: at, pausedBy: 'operator' } : {}),
174
+ confirmation: { at, surface, digest: jobSecurityDigest(trusted) },
175
+ };
176
+ }
177
+ /** At most how many times a day the schedule fires (the busiest of the next seven days). */
178
+ export function runsPerDay(spec, now) {
179
+ if (spec.kind === 'at')
180
+ return 1;
181
+ if (spec.kind === 'every')
182
+ return Math.ceil((24 * 60 * 60_000) / spec.everyMs);
183
+ let most = 0;
184
+ for (let d = 0; d < 7; d++) {
185
+ const from = new Date(now.getTime() + d * 24 * 60 * 60_000);
186
+ const to = new Date(from.getTime() + 24 * 60 * 60_000);
187
+ most = Math.max(most, countOccurrences(spec, from, to).count);
188
+ }
189
+ return most;
190
+ }
191
+ function duration(ms) {
192
+ if (ms % 86_400_000 === 0)
193
+ return `${ms / 86_400_000} d`;
194
+ if (ms % 3_600_000 === 0)
195
+ return `${ms / 3_600_000} h`;
196
+ if (ms % 60_000 === 0)
197
+ return `${ms / 60_000} min`;
198
+ return `${Math.round(ms / 1000)} s`;
199
+ }
200
+ /** The job as a person is asked to confirm it. Every line is computed here, never taken from a proposal. */
201
+ export function previewLines(job, policy, now) {
202
+ const tz = job.schedule.kind === 'cron' ? job.schedule.tz : hostTimeZone();
203
+ const next = upcomingFireTimes(job.schedule, now, 3).map((t) => new Intl.DateTimeFormat('en-GB', {
204
+ dateStyle: 'medium',
205
+ timeStyle: 'short',
206
+ timeZone: tz,
207
+ }).format(t));
208
+ const perDay = runsPerDay(job.schedule, now);
209
+ return [
210
+ `Job ${job.name}`,
211
+ `Folder ${job.folder.canonical}`,
212
+ `When ${describeSchedule(job.schedule, { tz })}`,
213
+ `Next ${next.length > 0 ? next.join(' · ') : 'never'}`,
214
+ `Model ${job.model.provider}${job.model.model ? `/${job.model.model}` : ''}${job.model.effort ? ` (${job.model.effort})` : ''}`,
215
+ `Budget ${job.budget.tokenBudget.toLocaleString('en-US')} tokens, ${job.budget.maxIterations} iterations, ${duration(job.budget.timeoutMs)} per run`,
216
+ // A proposal once set 1, read as "one post per run": the first run
217
+ // stopped after its first model call, with nothing done.
218
+ ...(job.budget.maxIterations < FEW_ITERATIONS
219
+ ? [
220
+ `Warning ${job.budget.maxIterations} iteration${job.budget.maxIterations === 1 ? '' : 's'} is one model call${job.budget.maxIterations === 1 ? '' : ' each'} with its tool calls; most tasks need more (the default is ${DEFAULT_MAX_ITERATIONS}), and a run that runs out stops unfinished`,
221
+ ]
222
+ : []),
223
+ // A proposal once set 4,000 tokens for a job whose runs each took
224
+ // about 110,000: every model call resends the whole prompt.
225
+ ...(job.budget.tokenBudget < FEW_TOKENS
226
+ ? [
227
+ `Warning ${job.budget.tokenBudget.toLocaleString('en-US')} tokens may not cover even a few model calls, each of which resends the whole prompt; a run that runs out stops unfinished (the default is ${DEFAULT_TOKEN_BUDGET.toLocaleString('en-US')})`,
228
+ ]
229
+ : []),
230
+ `Ceiling up to ${perDay} run${perDay === 1 ? '' : 's'} a day × ${job.budget.tokenBudget.toLocaleString('en-US')} tokens = ${(perDay * job.budget.tokenBudget).toLocaleString('en-US')} tokens a day`,
231
+ `Runs on ${job.permissions.execution === 'host' ? 'this machine (host)' : 'the sandbox'}`,
232
+ ...(policy.network ? ['Network THIS RUN CAN REACH THE NETWORK'] : []),
233
+ ...(job.permissions.browser
234
+ ? [
235
+ `Browser SIGNED IN AS YOU: profile ${job.permissions.browser.profile}, only ${Object.keys(job.permissions.browser.sites).join(', ')}`,
236
+ ]
237
+ : []),
238
+ ...(job.permissions.unmatched === 'allow'
239
+ ? ['Unmatched CALLS NO RULE COVERS RUN WITHOUT ASKING']
240
+ : []),
241
+ 'Permissions',
242
+ ...policy.lines.map((line) => ` ${line}`),
243
+ `Approvals a call that waits for you expires after ${duration(job.approvalTtlMs)}`,
244
+ ];
245
+ }
246
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/schedule/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * What changed in a job since someone last confirmed it, for the person
3
+ * confirming it again.
4
+ *
5
+ * An edit is confirmed again whole, and the preview is long: a site added to
6
+ * a browser grant was one line among forty. The lines that differ from the
7
+ * version last confirmed are shown on their own, above the question, as
8
+ * `+ added` and `- removed`. An edit saved without a terminal (`--yes`) is
9
+ * confirmed later, by `schedule confirm` or the TUI, so the edit records its
10
+ * changes in the job's history and the confirmation reads them back.
11
+ */
12
+ import type { CompiledJobPolicy } from './policy.js';
13
+ import type { ScheduleHistoryRecord, ScheduleJob } from './types.js';
14
+ /** The preview as compared: without the next fire times, which change by the minute. */
15
+ export declare function confirmationView(job: ScheduleJob, policy: CompiledJobPolicy, now: Date): string[];
16
+ /** `+ line` for each line only in `after`, `- line` for each only in `before`. */
17
+ export declare function describeChanges(before: readonly string[], after: readonly string[]): string[];
18
+ /** The changes recorded by edits saved since the job was last confirmed, oldest first. */
19
+ export declare function changesSinceConfirmed(history: readonly ScheduleHistoryRecord[]): string[];
20
+ /** The block shown above the question, or nothing. */
21
+ export declare function changesBlock(changes: readonly string[]): string[];
22
+ //# sourceMappingURL=changes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes.d.ts","sourceRoot":"","sources":["../../src/schedule/changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEpE,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,EAAE,CAKjG;AAED,kFAAkF;AAClF,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAO7F;AAYD,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAQzF;AAED,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAIjE"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * What changed in a job since someone last confirmed it, for the person
3
+ * confirming it again.
4
+ *
5
+ * An edit is confirmed again whole, and the preview is long: a site added to
6
+ * a browser grant was one line among forty. The lines that differ from the
7
+ * version last confirmed are shown on their own, above the question, as
8
+ * `+ added` and `- removed`. An edit saved without a terminal (`--yes`) is
9
+ * confirmed later, by `schedule confirm` or the TUI, so the edit records its
10
+ * changes in the job's history and the confirmation reads them back.
11
+ */
12
+ import { previewLines } from './build.js';
13
+ /** The preview as compared: without the next fire times, which change by the minute. */
14
+ export function confirmationView(job, policy, now) {
15
+ return [
16
+ ...previewLines(job, policy, now).filter((line) => !line.startsWith('Next ')),
17
+ ...job.prompt.split('\n').map((line) => `Prompt ${line}`),
18
+ ];
19
+ }
20
+ /** `+ line` for each line only in `after`, `- line` for each only in `before`. */
21
+ export function describeChanges(before, after) {
22
+ const was = new Set(before.map((line) => line.trim()));
23
+ const now = new Set(after.map((line) => line.trim()));
24
+ return [
25
+ ...before.filter((line) => !now.has(line.trim())).map((line) => `- ${line.trim()}`),
26
+ ...after.filter((line) => !was.has(line.trim())).map((line) => `+ ${line.trim()}`),
27
+ ];
28
+ }
29
+ /** Records that mean a person confirmed the job as it then stood. */
30
+ function confirmedHere(record) {
31
+ if (record.kind !== 'job')
32
+ return false;
33
+ if (record.action === 'confirmed')
34
+ return true;
35
+ return ((record.action === 'created' || record.action === 'edited') &&
36
+ record.by !== 'cli-noninteractive');
37
+ }
38
+ /** The changes recorded by edits saved since the job was last confirmed, oldest first. */
39
+ export function changesSinceConfirmed(history) {
40
+ const out = [];
41
+ for (const record of history) {
42
+ if (confirmedHere(record))
43
+ out.length = 0;
44
+ else if (record.kind === 'job' && record.action === 'edited' && record.changes)
45
+ out.push(...record.changes);
46
+ }
47
+ return out;
48
+ }
49
+ /** The block shown above the question, or nothing. */
50
+ export function changesBlock(changes) {
51
+ return changes.length === 0
52
+ ? []
53
+ : ['Changed since it was last confirmed', ...changes.map((line) => ` ${line}`)];
54
+ }
55
+ //# sourceMappingURL=changes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes.js","sourceRoot":"","sources":["../../src/schedule/changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIzC,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,GAAgB,EAAE,MAAyB,EAAE,GAAS;IACtF,OAAO;QACN,GAAG,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7E,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC;KAC1D,CAAA;AACF,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,eAAe,CAAC,MAAyB,EAAE,KAAwB;IAClF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACrD,OAAO;QACN,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACnF,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;KAClF,CAAA;AACF,CAAC;AAED,qEAAqE;AACrE,SAAS,aAAa,CAAC,MAA6B;IACnD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAA;IAC9C,OAAO,CACN,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC3D,MAAM,CAAC,EAAE,KAAK,oBAAoB,CAClC,CAAA;AACF,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,qBAAqB,CAAC,OAAyC;IAC9E,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,aAAa,CAAC,MAAM,CAAC;YAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;aACpC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO;YAC7E,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IACD,OAAO,GAAG,CAAA;AACX,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,YAAY,CAAC,OAA0B;IACtD,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,qCAAqC,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAA;AAClF,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `schedule add`, `schedule edit` and `schedule confirm`.
3
+ *
4
+ * A job is confirmed only by a person: on a terminal here, or in the TUI's
5
+ * `/schedule` panel. Without a terminal (`--yes`, a script, a model's own
6
+ * bash call) the job is written INERT — `pending-confirmation` — and the
7
+ * daemon will not run it until someone confirms it. `--yes` means "do not
8
+ * ask", never "consider it confirmed".
9
+ */
10
+ import type { CommandContext } from '../../commands/types.js';
11
+ import { type PermissionInput } from '../policy.js';
12
+ import { type ParsedArgs } from './args.js';
13
+ export declare const ADD_FLAGS: readonly ["home", "prompt", "prompt-file", "when", "folder", "permissions", "unmatched", "execution", "tz", "model", "effort", "max-iterations", "token-budget", "timeout", "wait-for-provider", "approval-ttl", "keep-sessions", "pause-after-failures", "add-dir", "paused!", "yes!", "allow-unattended-host!", "notify-summary!", "browser", "browser-site", "browser-headed!", "no-browser!"];
14
+ /**
15
+ * `--browser <profile>`, `--browser-site <site>=read|ask|act` (repeatable)
16
+ * and `--browser-headed`, over the grant a job already has (an edit). On an
17
+ * edit a site is added or its level changed, `<site>=none` takes it off,
18
+ * and `--no-browser` drops the grant. `undefined`: no grant.
19
+ */
20
+ export declare function browserInput(args: ParsedArgs, base?: PermissionInput['browser']): PermissionInput['browser'] | undefined;
21
+ export declare function addCommand(ctx: CommandContext, argv: readonly string[]): Promise<number>;
22
+ export declare function editCommand(ctx: CommandContext, argv: readonly string[]): Promise<number>;
23
+ export declare function confirmCommand(ctx: CommandContext, argv: readonly string[]): Promise<number>;
24
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../src/schedule/commands/add.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAa7D,OAAO,EAAE,KAAK,eAAe,EAAkC,MAAM,cAAc,CAAA;AAInF,OAAO,EACN,KAAK,UAAU,EAQf,MAAM,WAAW,CAAA;AAGlB,eAAO,MAAM,SAAS,mYA4BZ,CAAA;AAEV;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,IAAI,EAAE,UAAU,EAChB,IAAI,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,GAC/B,eAAe,CAAC,SAAS,CAAC,GAAG,SAAS,CA+CxC;AA6OD,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmD9F;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyE/F;AAED,wBAAsB,cAAc,CACnC,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,SAAS,MAAM,EAAE,GACrB,OAAO,CAAC,MAAM,CAAC,CA6CjB"}