@skrr-ai/cli 0.1.109 → 0.1.111

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 (434) hide show
  1. package/bin/run.js +15 -1
  2. package/dist/base-command.d.ts +44 -1
  3. package/dist/base-command.js +194 -33
  4. package/dist/commands/actions/list.js +2 -1
  5. package/dist/commands/agenda/trigger/create.js +1 -1
  6. package/dist/commands/agenda/trigger/list.js +2 -1
  7. package/dist/commands/agent-groups/list.js +2 -1
  8. package/dist/commands/agents/actions/list.js +2 -1
  9. package/dist/commands/agents/always-on/status.js +5 -0
  10. package/dist/commands/agents/chat.js +4 -1
  11. package/dist/commands/agents/duplicate.js +4 -0
  12. package/dist/commands/agents/eval/list.js +2 -1
  13. package/dist/commands/agents/files/list.js +2 -1
  14. package/dist/commands/agents/folders/list.js +2 -1
  15. package/dist/commands/agents/goals/list.js +2 -1
  16. package/dist/commands/agents/intuitions/list.js +8 -5
  17. package/dist/commands/agents/list.d.ts +12 -0
  18. package/dist/commands/agents/list.js +45 -8
  19. package/dist/commands/agents/releases/known-issues/list.js +2 -1
  20. package/dist/commands/agents/releases/list.js +5 -1
  21. package/dist/commands/agents/releases/trusted-publishers/list.js +2 -1
  22. package/dist/commands/agents/roles/list.js +2 -1
  23. package/dist/commands/agents/skills/list.js +2 -1
  24. package/dist/commands/agents/todos/list.js +2 -1
  25. package/dist/commands/agents/triggers/create.js +1 -1
  26. package/dist/commands/agents/triggers/list.js +2 -1
  27. package/dist/commands/agents/triggers/update.js +1 -1
  28. package/dist/commands/agents/update.d.ts +11 -0
  29. package/dist/commands/agents/update.js +58 -2
  30. package/dist/commands/api-keys/list.js +2 -1
  31. package/dist/commands/apps/channel.d.ts +20 -0
  32. package/dist/commands/apps/channel.js +64 -0
  33. package/dist/commands/apps/check-draft.d.ts +12 -0
  34. package/dist/commands/apps/check-draft.js +41 -0
  35. package/dist/commands/apps/check.d.ts +42 -0
  36. package/dist/commands/apps/check.js +91 -0
  37. package/dist/commands/apps/create.d.ts +15 -0
  38. package/dist/commands/apps/create.js +59 -0
  39. package/dist/commands/apps/data/put.d.ts +18 -0
  40. package/dist/commands/apps/data/put.js +72 -0
  41. package/dist/commands/apps/data/query.d.ts +20 -0
  42. package/dist/commands/apps/data/query.js +88 -0
  43. package/dist/commands/apps/disclosure.d.ts +16 -0
  44. package/dist/commands/apps/disclosure.js +71 -0
  45. package/dist/commands/apps/file/cat.d.ts +15 -0
  46. package/dist/commands/apps/file/cat.js +50 -0
  47. package/dist/commands/apps/file/ls.d.ts +13 -0
  48. package/dist/commands/apps/file/ls.js +47 -0
  49. package/dist/commands/apps/file/mv.d.ts +15 -0
  50. package/dist/commands/apps/file/mv.js +49 -0
  51. package/dist/commands/apps/file/rm.d.ts +15 -0
  52. package/dist/commands/apps/file/rm.js +53 -0
  53. package/dist/commands/apps/file/write.d.ts +17 -0
  54. package/dist/commands/apps/file/write.js +81 -0
  55. package/dist/commands/apps/install.d.ts +19 -0
  56. package/dist/commands/apps/install.js +136 -0
  57. package/dist/commands/apps/installations/list.d.ts +11 -0
  58. package/dist/commands/apps/installations/list.js +49 -0
  59. package/dist/commands/apps/installations/show.d.ts +12 -0
  60. package/dist/commands/apps/installations/show.js +61 -0
  61. package/dist/commands/apps/layout/set.d.ts +11 -0
  62. package/dist/commands/apps/layout/set.js +125 -0
  63. package/dist/commands/apps/layout/show.d.ts +9 -0
  64. package/dist/commands/apps/layout/show.js +33 -0
  65. package/dist/commands/apps/list.d.ts +10 -0
  66. package/dist/commands/apps/list.js +45 -0
  67. package/dist/commands/apps/logs.d.ts +13 -0
  68. package/dist/commands/apps/logs.js +55 -0
  69. package/dist/commands/apps/preview.d.ts +12 -0
  70. package/dist/commands/apps/preview.js +39 -0
  71. package/dist/commands/apps/publish/propose.d.ts +14 -0
  72. package/dist/commands/apps/publish/propose.js +45 -0
  73. package/dist/commands/apps/pull.d.ts +14 -0
  74. package/dist/commands/apps/pull.js +56 -0
  75. package/dist/commands/apps/push.d.ts +15 -0
  76. package/dist/commands/apps/push.js +75 -0
  77. package/dist/commands/apps/reconsent.d.ts +13 -0
  78. package/dist/commands/apps/reconsent.js +67 -0
  79. package/dist/commands/apps/report.d.ts +20 -0
  80. package/dist/commands/apps/report.js +63 -0
  81. package/dist/commands/apps/resume.d.ts +12 -0
  82. package/dist/commands/apps/resume.js +36 -0
  83. package/dist/commands/apps/settings/set.d.ts +13 -0
  84. package/dist/commands/apps/settings/set.js +54 -0
  85. package/dist/commands/apps/settings/show.d.ts +11 -0
  86. package/dist/commands/apps/settings/show.js +31 -0
  87. package/dist/commands/apps/show.d.ts +12 -0
  88. package/dist/commands/apps/show.js +49 -0
  89. package/dist/commands/apps/suspend.d.ts +12 -0
  90. package/dist/commands/apps/suspend.js +35 -0
  91. package/dist/commands/apps/uninstall.d.ts +13 -0
  92. package/dist/commands/apps/uninstall.js +43 -0
  93. package/dist/commands/apps/upgrade.d.ts +14 -0
  94. package/dist/commands/apps/upgrade.js +49 -0
  95. package/dist/commands/apps/version/create.d.ts +14 -0
  96. package/dist/commands/apps/version/create.js +53 -0
  97. package/dist/commands/apps/version/show.d.ts +12 -0
  98. package/dist/commands/apps/version/show.js +39 -0
  99. package/dist/commands/apps/versions.d.ts +12 -0
  100. package/dist/commands/apps/versions.js +40 -0
  101. package/dist/commands/apps/webhooks/list.d.ts +12 -0
  102. package/dist/commands/apps/webhooks/list.js +47 -0
  103. package/dist/commands/characters/list.js +2 -1
  104. package/dist/commands/chats/files/list.js +2 -1
  105. package/dist/commands/chats/folders/list.js +2 -1
  106. package/dist/commands/chats/list.js +2 -1
  107. package/dist/commands/chats/spaces/list.js +2 -1
  108. package/dist/commands/chats/widgets/list.js +2 -1
  109. package/dist/commands/code/jobs/list.js +4 -1
  110. package/dist/commands/commerce/incidents/list.js +2 -1
  111. package/dist/commands/commitments/accounting.js +3 -0
  112. package/dist/commands/commitments/action-proposals.d.ts +8 -0
  113. package/dist/commands/commitments/action-proposals.js +17 -2
  114. package/dist/commands/commitments/cost.d.ts +11 -0
  115. package/dist/commands/commitments/cost.js +25 -0
  116. package/dist/commands/commitments/create.js +6 -1
  117. package/dist/commands/commitments/endpoints/list.js +2 -1
  118. package/dist/commands/commitments/links/list.js +2 -1
  119. package/dist/commands/commitments/list.js +2 -1
  120. package/dist/commands/commitments/liveness.d.ts +30 -0
  121. package/dist/commands/commitments/liveness.js +22 -5
  122. package/dist/commands/commitments/pack/list.js +2 -1
  123. package/dist/commands/commitments/preflight.js +6 -2
  124. package/dist/commands/commitments/update.js +10 -1
  125. package/dist/commands/compass/list.js +2 -1
  126. package/dist/commands/context.js +7 -1
  127. package/dist/commands/convos/list.js +3 -2
  128. package/dist/commands/daemon/install.js +17 -1
  129. package/dist/commands/daemon/login.js +14 -0
  130. package/dist/commands/dm/list.js +2 -1
  131. package/dist/commands/dm/work.d.ts +19 -0
  132. package/dist/commands/dm/work.js +54 -0
  133. package/dist/commands/feeds/list.js +2 -1
  134. package/dist/commands/followups/list.js +2 -1
  135. package/dist/commands/followups/plans/cancel.d.ts +13 -0
  136. package/dist/commands/followups/plans/cancel.js +26 -0
  137. package/dist/commands/followups/plans/create.d.ts +11 -0
  138. package/dist/commands/followups/plans/create.js +35 -0
  139. package/dist/commands/followups/plans/list.d.ts +13 -0
  140. package/dist/commands/followups/plans/list.js +50 -0
  141. package/dist/commands/followups/plans/observability.d.ts +11 -0
  142. package/dist/commands/followups/plans/observability.js +46 -0
  143. package/dist/commands/followups/plans/revise.d.ts +13 -0
  144. package/dist/commands/followups/plans/revise.js +35 -0
  145. package/dist/commands/followups/plans/show.d.ts +11 -0
  146. package/dist/commands/followups/plans/show.js +32 -0
  147. package/dist/commands/goals/key-results/list.js +2 -1
  148. package/dist/commands/goals/labels/list.js +3 -2
  149. package/dist/commands/goals/list.js +3 -2
  150. package/dist/commands/grants/list.js +2 -1
  151. package/dist/commands/harnesses/grants/list.js +2 -1
  152. package/dist/commands/harnesses/leases/list.js +2 -1
  153. package/dist/commands/harnesses/list.js +10 -1
  154. package/dist/commands/harnesses/prune.d.ts +26 -0
  155. package/dist/commands/harnesses/prune.js +172 -0
  156. package/dist/commands/ingress/list.js +2 -1
  157. package/dist/commands/initiatives/list.js +2 -1
  158. package/dist/commands/instruction-blocks/list.js +2 -1
  159. package/dist/commands/instructions/list.js +2 -1
  160. package/dist/commands/integrations/connections/list.js +2 -1
  161. package/dist/commands/integrations/tools/list.js +2 -1
  162. package/dist/commands/labels/list.js +3 -2
  163. package/dist/commands/learning/adapters.d.ts +16 -0
  164. package/dist/commands/learning/adapters.js +44 -0
  165. package/dist/commands/login.js +11 -0
  166. package/dist/commands/machines/dedicated/list.js +2 -1
  167. package/dist/commands/machines/hosted/list.js +2 -1
  168. package/dist/commands/machines/list.js +2 -1
  169. package/dist/commands/machines/show.js +5 -2
  170. package/dist/commands/measures/list.js +2 -1
  171. package/dist/commands/memory/list.js +2 -1
  172. package/dist/commands/memory/proposals/list.js +2 -1
  173. package/dist/commands/memory/stores/list.js +2 -1
  174. package/dist/commands/memory/topics/list.js +2 -1
  175. package/dist/commands/memory/versions/list.js +2 -1
  176. package/dist/commands/messages/list.js +2 -1
  177. package/dist/commands/northstars/intents/list.js +2 -1
  178. package/dist/commands/northstars/list.js +2 -1
  179. package/dist/commands/northstars/recommendations/list.js +2 -1
  180. package/dist/commands/outbox/list.js +2 -1
  181. package/dist/commands/profiles/list.js +2 -1
  182. package/dist/commands/projects/docs/list.js +8 -1
  183. package/dist/commands/projects/updates/list.js +2 -1
  184. package/dist/commands/proposals/list.js +2 -1
  185. package/dist/commands/requests/comments/list.js +2 -1
  186. package/dist/commands/requests/list.js +2 -1
  187. package/dist/commands/shares/list.js +2 -1
  188. package/dist/commands/shortcuts/list.js +2 -1
  189. package/dist/commands/signals/monitors/list.js +2 -1
  190. package/dist/commands/signals/schemas/list.js +2 -1
  191. package/dist/commands/signals/sources/list.js +2 -1
  192. package/dist/commands/space-directory-views/list.js +2 -1
  193. package/dist/commands/spaces/actions/list.js +4 -3
  194. package/dist/commands/spaces/briefs/list.js +2 -1
  195. package/dist/commands/spaces/cycles/list.js +2 -1
  196. package/dist/commands/spaces/files/folders/list.js +2 -1
  197. package/dist/commands/spaces/files/list.js +3 -2
  198. package/dist/commands/spaces/heartbeats/list.js +3 -2
  199. package/dist/commands/spaces/labels/list.js +3 -2
  200. package/dist/commands/spaces/list.d.ts +3 -18
  201. package/dist/commands/spaces/list.js +28 -35
  202. package/dist/commands/spaces/live/cards/list.js +2 -1
  203. package/dist/commands/spaces/members/list.d.ts +1 -0
  204. package/dist/commands/spaces/members/list.js +4 -1
  205. package/dist/commands/spaces/show.js +2 -2
  206. package/dist/commands/spaces/skills/list.js +6 -2
  207. package/dist/commands/spaces/states/list.js +2 -1
  208. package/dist/commands/spaces/views/list.js +2 -1
  209. package/dist/commands/spaces/widgets/list.js +3 -2
  210. package/dist/commands/spaces/workflow-templates/list.js +2 -1
  211. package/dist/commands/spaces/workflows/fixtures/list.js +2 -1
  212. package/dist/commands/spaces/workflows/list.js +3 -2
  213. package/dist/commands/spaces/workflows/proposals/list.js +2 -1
  214. package/dist/commands/spaces/workflows/start.js +3 -1
  215. package/dist/commands/spaces/workflows/triggers/list.js +2 -1
  216. package/dist/commands/spaces/workflows/validate.js +12 -2
  217. package/dist/commands/store/acquisitions/list.js +2 -1
  218. package/dist/commands/store/admissions/list.js +17 -1
  219. package/dist/commands/store/advisories/list.js +2 -1
  220. package/dist/commands/store/follows/list.js +2 -1
  221. package/dist/commands/store/publishers/domains/list.js +2 -1
  222. package/dist/commands/store/reports/list.js +2 -1
  223. package/dist/commands/subscriptions/list.js +2 -1
  224. package/dist/commands/tasks/actionability.js +7 -30
  225. package/dist/commands/tasks/activity.js +14 -8
  226. package/dist/commands/tasks/approvals/list.js +2 -1
  227. package/dist/commands/tasks/assign.d.ts +1 -0
  228. package/dist/commands/tasks/assign.js +43 -7
  229. package/dist/commands/tasks/attachments/list.js +2 -1
  230. package/dist/commands/tasks/chat/send.js +34 -0
  231. package/dist/commands/tasks/comments/add.js +6 -1
  232. package/dist/commands/tasks/comments/list.js +2 -1
  233. package/dist/commands/tasks/complete.js +26 -2
  234. package/dist/commands/tasks/continue.d.ts +18 -0
  235. package/dist/commands/tasks/continue.js +54 -0
  236. package/dist/commands/tasks/create-tree.d.ts +5 -0
  237. package/dist/commands/tasks/create-tree.js +399 -219
  238. package/dist/commands/tasks/create.d.ts +1 -0
  239. package/dist/commands/tasks/create.js +63 -11
  240. package/dist/commands/tasks/deliverable/add.js +10 -3
  241. package/dist/commands/tasks/deliverable/list.js +2 -1
  242. package/dist/commands/tasks/events/list.js +2 -1
  243. package/dist/commands/tasks/execution-state.d.ts +12 -0
  244. package/dist/commands/tasks/execution-state.js +28 -0
  245. package/dist/commands/tasks/expectations/assess.js +40 -5
  246. package/dist/commands/tasks/guide.d.ts +10 -0
  247. package/dist/commands/tasks/guide.js +20 -0
  248. package/dist/commands/tasks/labels/list.js +2 -1
  249. package/dist/commands/tasks/list.d.ts +19 -0
  250. package/dist/commands/tasks/list.js +103 -6
  251. package/dist/commands/tasks/move.js +10 -2
  252. package/dist/commands/tasks/preflight.d.ts +14 -0
  253. package/dist/commands/tasks/preflight.js +77 -0
  254. package/dist/commands/tasks/rearm-recurrence.js +22 -3
  255. package/dist/commands/tasks/resource/list.js +2 -1
  256. package/dist/commands/tasks/result/submit.js +10 -1
  257. package/dist/commands/tasks/review.js +6 -1
  258. package/dist/commands/tasks/revisions.d.ts +2 -0
  259. package/dist/commands/tasks/revisions.js +8 -1
  260. package/dist/commands/tasks/show.d.ts +8 -0
  261. package/dist/commands/tasks/show.js +81 -43
  262. package/dist/commands/tasks/start.d.ts +1 -0
  263. package/dist/commands/tasks/start.js +35 -0
  264. package/dist/commands/tasks/templates/list.js +2 -1
  265. package/dist/commands/tasks/timeline.d.ts +5 -0
  266. package/dist/commands/tasks/timeline.js +9 -1
  267. package/dist/commands/tasks/unschedule.js +5 -1
  268. package/dist/commands/tasks/update.d.ts +1 -0
  269. package/dist/commands/tasks/update.js +36 -3
  270. package/dist/commands/tasks/updates/add.js +6 -1
  271. package/dist/commands/tasks/updates/list.js +2 -1
  272. package/dist/commands/tasks/upsert.d.ts +1 -0
  273. package/dist/commands/tasks/upsert.js +8 -1
  274. package/dist/commands/token/list.js +2 -1
  275. package/dist/commands/tokens/list.js +2 -1
  276. package/dist/commands/tones/list.js +4 -2
  277. package/dist/commands/triggers/audit.js +12 -3
  278. package/dist/commands/triggers/create.js +1 -1
  279. package/dist/commands/triggers/fire-detail.d.ts +7 -0
  280. package/dist/commands/triggers/fire-detail.js +30 -12
  281. package/dist/commands/triggers/fire.js +13 -3
  282. package/dist/commands/triggers/list.js +2 -1
  283. package/dist/commands/triggers/parse-intent.js +1 -1
  284. package/dist/commands/triggers/update.js +1 -1
  285. package/dist/commands/views/list.js +2 -1
  286. package/dist/commands/webhooks/list.js +2 -1
  287. package/dist/commands/whoami.js +1 -1
  288. package/dist/commands/widgets/list.js +2 -1
  289. package/dist/commands/widgets/save-as-app.d.ts +13 -0
  290. package/dist/commands/widgets/save-as-app.js +65 -0
  291. package/dist/commands/work-views/list.js +2 -1
  292. package/dist/commands/worklog/list.js +2 -1
  293. package/dist/commands/workspaces/grants.js +1 -4
  294. package/dist/commands/workspaces/list.js +3 -2
  295. package/dist/commands/workspaces/members.d.ts +1 -0
  296. package/dist/commands/workspaces/members.js +10 -7
  297. package/dist/generated/managed-instruction-guides.json +2 -2
  298. package/dist/help.js +7 -0
  299. package/dist/lib/agent-proactive-baseline.d.ts +9 -0
  300. package/dist/lib/agent-proactive-baseline.js +44 -0
  301. package/dist/lib/agentic-stream.d.ts +4 -1
  302. package/dist/lib/agentic-stream.js +29 -4
  303. package/dist/lib/appData.d.ts +75 -0
  304. package/dist/lib/appData.js +274 -0
  305. package/dist/lib/appInstallations.d.ts +117 -0
  306. package/dist/lib/appInstallations.js +960 -0
  307. package/dist/lib/appSettings.d.ts +3 -0
  308. package/dist/lib/appSettings.js +71 -0
  309. package/dist/lib/appWebhooks.d.ts +7 -0
  310. package/dist/lib/appWebhooks.js +59 -0
  311. package/dist/lib/apps-command.d.ts +44 -0
  312. package/dist/lib/apps-command.js +164 -0
  313. package/dist/lib/apps.d.ts +45 -0
  314. package/dist/lib/apps.js +148 -0
  315. package/dist/lib/appsCheck.d.ts +12 -0
  316. package/dist/lib/appsCheck.js +173 -0
  317. package/dist/lib/appsFs.d.ts +58 -0
  318. package/dist/lib/appsFs.js +384 -0
  319. package/dist/lib/auth-failure.d.ts +20 -0
  320. package/dist/lib/auth-failure.js +40 -3
  321. package/dist/lib/cli-installers.d.ts +9 -2
  322. package/dist/lib/command-miss.js +107 -0
  323. package/dist/lib/commitment-loop-status.js +25 -3
  324. package/dist/lib/commitment-product.js +5 -2
  325. package/dist/lib/commitments.d.ts +45 -3
  326. package/dist/lib/commitments.js +139 -41
  327. package/dist/lib/compasses.d.ts +4 -0
  328. package/dist/lib/compasses.js +11 -0
  329. package/dist/lib/daemon-machine-identity-copy.d.ts +14 -0
  330. package/dist/lib/daemon-machine-identity-copy.js +27 -0
  331. package/dist/lib/daemon-machine-identity.d.ts +27 -0
  332. package/dist/lib/daemon-machine-identity.js +61 -0
  333. package/dist/lib/daemon-setup.js +7 -7
  334. package/dist/lib/daemonHandoff.d.ts +19 -1
  335. package/dist/lib/daemonHandoff.js +62 -2
  336. package/dist/lib/dedicated-ssh.d.ts +2 -0
  337. package/dist/lib/dedicated-ssh.js +98 -28
  338. package/dist/lib/harnesses.d.ts +71 -0
  339. package/dist/lib/harnesses.js +70 -0
  340. package/dist/lib/json-output.d.ts +33 -0
  341. package/dist/lib/json-output.js +37 -0
  342. package/dist/lib/list-output.d.ts +9 -4
  343. package/dist/lib/list-output.js +38 -9
  344. package/dist/lib/lookbackPlans.d.ts +13 -0
  345. package/dist/lib/lookbackPlans.js +68 -0
  346. package/dist/lib/machines.d.ts +27 -6
  347. package/dist/lib/machines.js +25 -14
  348. package/dist/lib/member-output.d.ts +20 -0
  349. package/dist/lib/member-output.js +57 -0
  350. package/dist/lib/preflight-copy.d.ts +7 -0
  351. package/dist/lib/preflight-copy.js +31 -0
  352. package/dist/lib/profile-machine-identity-guard.js +11 -1
  353. package/dist/lib/roles.d.ts +2 -2
  354. package/dist/lib/task-admission.d.ts +9 -0
  355. package/dist/lib/task-admission.js +35 -0
  356. package/dist/lib/task-batch.d.ts +4 -0
  357. package/dist/lib/task-batch.js +2 -0
  358. package/dist/lib/task-economics.d.ts +10 -0
  359. package/dist/lib/task-economics.js +24 -2
  360. package/dist/lib/task-operations.d.ts +25 -0
  361. package/dist/lib/task-operations.js +123 -0
  362. package/dist/lib/task-preflight.d.ts +35 -0
  363. package/dist/lib/task-preflight.js +121 -0
  364. package/dist/lib/task-resource-references.d.ts +23 -0
  365. package/dist/lib/task-resource-references.js +119 -0
  366. package/dist/lib/task-spec-verification.d.ts +42 -0
  367. package/dist/lib/task-spec-verification.js +101 -0
  368. package/dist/lib/task-work.d.ts +11 -0
  369. package/dist/lib/task-work.js +41 -0
  370. package/dist/lib/task-write-attribution.d.ts +26 -0
  371. package/dist/lib/task-write-attribution.js +47 -0
  372. package/dist/lib/tasks.d.ts +13 -0
  373. package/dist/lib/tasks.js +61 -8
  374. package/dist/lib/triggers.d.ts +18 -0
  375. package/dist/lib/triggers.js +97 -5
  376. package/dist/lib/usage-discovery.d.ts +4 -0
  377. package/dist/lib/usage-discovery.js +14 -4
  378. package/dist/lib/widgetApps.d.ts +10 -0
  379. package/dist/lib/widgetApps.js +47 -0
  380. package/dist/lib/widgetStaticScan.js +25 -1
  381. package/dist/lib/workflow-run-view.d.ts +4 -0
  382. package/dist/lib/workflow-run-view.js +5 -0
  383. package/dist/lib/workspaces.d.ts +33 -9
  384. package/dist/lib/workspaces.js +19 -3
  385. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.d.ts +14 -1
  386. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/computerWire.js +47 -2
  387. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonToolApproval.d.ts +49 -1
  388. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonToolApproval.js +26 -0
  389. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonWire.d.ts +118 -0
  390. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/daemonWire.js +614 -0
  391. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.d.ts +1 -1
  392. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/index.js +5 -3
  393. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/machineUuid.d.ts +60 -0
  394. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/machineUuid.js +130 -6
  395. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refresh.d.ts +2 -0
  396. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refresh.js +15 -2
  397. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refreshClassification.d.ts +5 -0
  398. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/refreshClassification.js +3 -1
  399. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/sessionRevocation.d.ts +177 -0
  400. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/sessionRevocation.js +484 -0
  401. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.d.ts +11 -0
  402. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/telemetryRedaction.js +46 -7
  403. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.d.ts +232 -0
  404. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/toolApprovalSignature.js +372 -0
  405. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/types.d.ts +17 -1
  406. package/dist/node_modules/@skrr-ai/auth-core/dist/cjs/types.js +12 -1
  407. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.d.ts +14 -1
  408. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/computerWire.js +45 -2
  409. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonToolApproval.d.ts +49 -1
  410. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonToolApproval.js +24 -0
  411. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonWire.d.ts +118 -0
  412. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/daemonWire.js +608 -0
  413. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.d.ts +1 -1
  414. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/index.js +1 -1
  415. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/machineUuid.d.ts +60 -0
  416. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/machineUuid.js +128 -6
  417. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refresh.d.ts +2 -0
  418. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refresh.js +15 -2
  419. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refreshClassification.d.ts +5 -0
  420. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/refreshClassification.js +3 -1
  421. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/sessionRevocation.d.ts +177 -0
  422. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/sessionRevocation.js +472 -0
  423. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.d.ts +11 -0
  424. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/telemetryRedaction.js +44 -6
  425. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.d.ts +232 -0
  426. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/toolApprovalSignature.js +360 -0
  427. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/types.d.ts +17 -1
  428. package/dist/node_modules/@skrr-ai/auth-core/dist/esm/types.js +12 -1
  429. package/dist/node_modules/@skrr-ai/auth-core/package.json +31 -1
  430. package/dist/node_modules/@skrr-ai/data-provider/index.js +25255 -18711
  431. package/docs/v1/operations.md +52 -0
  432. package/docs/v1/space-search.md +19 -0
  433. package/oclif.manifest.json +4843 -513
  434. package/package.json +32 -2
@@ -6,6 +6,7 @@ exports.completionLines = completionLines;
6
6
  exports.reviewPolicyLine = reviewPolicyLine;
7
7
  exports.labelsLine = labelsLine;
8
8
  exports.taskExecutorLabel = taskExecutorLabel;
9
+ exports.resolutionLines = resolutionLines;
9
10
  exports.recurrenceArmFailureLines = recurrenceArmFailureLines;
10
11
  exports.taskFailureLines = taskFailureLines;
11
12
  const core_1 = require("@oclif/core");
@@ -151,6 +152,43 @@ function taskExecutorLabel(t, bin = 'skrr') {
151
152
  return '-';
152
153
  }
153
154
  }
155
+ function resolverLabel(by, names) {
156
+ if (!by || typeof by !== 'object' || !by.kind)
157
+ return null;
158
+ const kind = String(by.kind);
159
+ if (kind === 'human')
160
+ return `person ${(0, principal_display_1.displayPrincipal)(by.userId, names)}`;
161
+ if (kind === 'agent')
162
+ return `agent ${(0, principal_display_1.displayPrincipal)(by.agentId, names)}`;
163
+ if (kind === 'system')
164
+ return `system${by.service ? ` (${String(by.service)})` : ''}`;
165
+ if (kind === 'integration')
166
+ return `integration${by.provider ? ` (${String(by.provider)})` : ''}`;
167
+ return kind;
168
+ }
169
+ /**
170
+ * The `Resolution:` lines for any resolved Task: how it ended, the reason the
171
+ * closer recorded, who closed it, and what the close stood on. The reason used to
172
+ * be JSON-only, so text showed "Task workflow type is cancelled" for every
173
+ * cancel, and a Task its Workflow step cancelled could not be told from one a
174
+ * person cancelled by hand (OSK-16475). Silent for an open Task.
175
+ */
176
+ function resolutionLines(t, names) {
177
+ const resolution = t.resolution;
178
+ if (!resolution || typeof resolution !== 'object' || !resolution.kind)
179
+ return [];
180
+ const reason = typeof resolution.reason === 'string' ? resolution.reason.trim() : '';
181
+ const closure = resolution.closure
182
+ ? (0, task_closure_1.closureSnapshotLines)(resolution.closure)
183
+ : [];
184
+ const lines = [`Resolution: ${String(resolution.kind)}${reason ? ` — ${reason}` : ''}`];
185
+ if (closure.length > 0)
186
+ lines.push(` ${closure.join(' ')}`);
187
+ const by = resolverLabel(resolution.resolvedBy, names);
188
+ if (by)
189
+ lines.push(`Resolved by: ${by}`);
190
+ return lines;
191
+ }
154
192
  /**
155
193
  * The `Recurrence:` line for a series whose next occurrence was never armed.
156
194
  * Silent otherwise: a healthy series has nothing to say here.
@@ -163,10 +201,14 @@ function recurrenceArmFailureLines(t, bin = 'skrr') {
163
201
  const ref = (typeof t.identifier === 'string' && t.identifier) ||
164
202
  (typeof t.id === 'string' && t.id) ||
165
203
  '<task-id>';
204
+ // A finished occurrence is re-armed (`tasks schedule` refuses it, OSK-15338); a LIVE series the
205
+ // scheduler stopped on an unrunnable pattern is rescheduled with a valid one, which clears it.
206
+ const finished = ['completed', 'cancelled'].includes(String(t.statusType ?? ''));
166
207
  return [
167
208
  `Recurrence: ${(0, data_provider_1.describeRecurrenceArmFailure)(code)} (${code})`,
168
- // Not `tasks schedule`: that refuses the finished occurrence carrying this failure (OSK-15338).
169
- ` ${(0, task_recurrence_outcome_1.recurrenceRearmHint)(code, ref, bin)}`,
209
+ finished || t.statusType === undefined
210
+ ? ` ${(0, task_recurrence_outcome_1.recurrenceRearmHint)(code, ref, bin)}`
211
+ : ` Reschedule it with \`${bin} tasks schedule ${ref} --at <ISO time> --cron "<minute hour day month weekday>"\`.`,
170
212
  ];
171
213
  }
172
214
  /**
@@ -203,25 +245,31 @@ function taskFailureLines(t, bin = 'skrr') {
203
245
  if (!error && !failedAt && !isFailed)
204
246
  return [];
205
247
  const lines = [];
206
- const attempts = typeof t.executionAttempts === 'number' ? t.executionAttempts : null;
207
- const runId = typeof t.lastFinalizedRunId === 'string' ? t.lastFinalizedRunId : null;
208
- const facts = [
209
- failedAt,
210
- attempts != null ? `attempt ${attempts}` : null,
211
- runId ? `run ${runId}` : null,
212
- ].filter(Boolean);
213
- if (facts.length > 0)
214
- lines.push(`Failed: ${facts.join(' · ')}`);
248
+ // Task failure stamps survive later successful Runs. Neither the lifetime
249
+ // attempt counter nor lastFinalizedRunId identifies the Run that failed.
250
+ if (failedAt)
251
+ lines.push(`Failure recorded: ${failedAt}`);
215
252
  if (error) {
216
253
  // Labelled with the JSON key, because a reader who needs this in a script
217
254
  // needs the key more than they need the prose.
218
- lines.push(`Error: ${error}`);
255
+ lines.push(`Recorded error: ${error}`);
219
256
  lines.push(' (`executionError` in --json)');
220
257
  }
221
258
  else if (isFailed) {
222
- lines.push('Error: none recorded on the task.');
259
+ lines.push('Recorded error: none recorded on the task.');
260
+ }
261
+ const failure = t.executionFailure;
262
+ if (failure?.recovery && typeof failure.recovery === 'string' && !error.includes(failure.recovery)) {
263
+ lines.push(`Recovery: ${failure.recovery}`);
264
+ }
265
+ if (failure?.headline && typeof failure.headline === 'string' && !error.includes(failure.headline)) {
266
+ lines.push(`Cause: ${failure.headline}`);
267
+ }
268
+ if (failure?.runId) {
269
+ lines.push(`Diagnostic: executionFailure in --json (run ${failure.runId})`);
223
270
  }
224
271
  const ref = String(t.identifier ?? t.id ?? t._id ?? '<task-id>');
272
+ lines.push(`Latest runs: ${bin} tasks runs ${ref}`);
225
273
  lines.push(`Per-run why: ${bin} tasks activity ${ref} --json (details.error, keyed by runId)`);
226
274
  return lines;
227
275
  }
@@ -352,6 +400,21 @@ class TasksShow extends base_command_1.BaseCommand {
352
400
  this.log(line);
353
401
  const agents = Array.isArray(t.assigneeAgentIds) ? t.assigneeAgentIds : [];
354
402
  const users = Array.isArray(t.assigneeUserIds) ? t.assigneeUserIds : [];
403
+ // Principals print as names, not ObjectIds — same rule as labels: a
404
+ // roster that cannot be read prints ids rather than failing the command.
405
+ const resolvedBy = t.resolution?.resolvedBy;
406
+ const principalIds = [
407
+ t.author,
408
+ t.dri?.resolved?.id,
409
+ ...(Array.isArray(t.assigneeAgentIds) ? t.assigneeAgentIds : []),
410
+ ...(Array.isArray(t.assigneeUserIds) ? t.assigneeUserIds : []),
411
+ t.economics?.confirmedBy,
412
+ resolvedBy?.userId,
413
+ resolvedBy?.agentId,
414
+ ];
415
+ const principalNames = await (0, principal_display_1.resolvePrincipalNames)(principalIds, {
416
+ spaceId: t.spaceId ?? null,
417
+ });
355
418
  this.log(`ID: ${t.id ?? t._id ?? '-'}`);
356
419
  this.log(`Ref: ${t.identifier ?? (t.taskNumber ? `#${t.taskNumber}` : '-')}`);
357
420
  this.log(`Title: ${t.title ?? '-'}`);
@@ -368,25 +431,12 @@ class TasksShow extends base_command_1.BaseCommand {
368
431
  * Closing is the actor's call — a Task may be `done` with work still
369
432
  * outstanding, and `resolution.closure` is where the server recorded what
370
433
  * it stood on at close. Show it so a bare "done" never reads as "clean."
434
+ * The closure sentences share the `tasks move` receipt's renderer, so the
435
+ * two cannot disagree; the reason and the closer are printed for every
436
+ * resolved Task (OSK-16475).
371
437
  */
372
- const resolution = t.resolution;
373
- /*
374
- * Same renderer as the `tasks move` receipt, so the two cannot disagree
375
- * about a Task they are both describing.
376
- *
377
- * This copy showed an owner's ordinary close as an override:
378
- * `TASK_RESULT_REVIEW_REQUIRED` lands in `blockers` whenever the policy is
379
- * unsatisfied — including when the owner, who is not bound by the Review
380
- * they declared, closes it themselves — and this rendered it identically to
381
- * a genuine forced close. So the only read surface for "was this gate
382
- * overridden?" could not answer the question.
383
- */
384
- if (resolution?.closure) {
385
- const sentences = (0, task_closure_1.closureSnapshotLines)(resolution.closure);
386
- if (sentences.length > 0) {
387
- this.log(`Resolution: ${resolution.kind ?? '-'} — ${sentences.join(' ')}`);
388
- }
389
- }
438
+ for (const line of resolutionLines(t, principalNames))
439
+ this.log(line);
390
440
  /*
391
441
  * A Result orphaned by a spec edit is not the same as no Result.
392
442
  *
@@ -519,18 +569,6 @@ class TasksShow extends base_command_1.BaseCommand {
519
569
  }
520
570
  }
521
571
  this.log(`Labels: ${labelsLine(labelIds, labelNames)}`);
522
- // Principals print as names, not ObjectIds — same rule as labels above: a
523
- // roster that cannot be read prints ids rather than failing the command.
524
- const principalIds = [
525
- t.author,
526
- t.dri?.resolved?.id,
527
- ...(Array.isArray(t.assigneeAgentIds) ? t.assigneeAgentIds : []),
528
- ...(Array.isArray(t.assigneeUserIds) ? t.assigneeUserIds : []),
529
- t.economics?.confirmedBy,
530
- ];
531
- const principalNames = await (0, principal_display_1.resolvePrincipalNames)(principalIds, {
532
- spaceId: t.spaceId ?? null,
533
- });
534
572
  this.log(`Author: ${t.authorDisplayName || (0, principal_display_1.displayPrincipal)(t.author, principalNames)}`);
535
573
  const dri = t.dri;
536
574
  if (dri?.resolved) {
@@ -8,6 +8,7 @@ export default class TasksStart extends BaseCommand {
8
8
  };
9
9
  static flags: {
10
10
  json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
+ 'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
12
  task: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
13
  skill: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
14
  branch: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
@@ -7,6 +7,7 @@ const data_provider_1 = require("@skrr-ai/data-provider");
7
7
  const base_command_1 = require("../../base-command");
8
8
  const task_resolver_1 = require("../../lib/task-resolver");
9
9
  const git_task_1 = require("../../lib/git-task");
10
+ const task_admission_1 = require("../../lib/task-admission");
10
11
  class TasksStart extends base_command_1.BaseCommand {
11
12
  static description = 'Start execution of a task: its assignee agent runs it in a new conversation + session. ' +
12
13
  'Alias: tasks execute';
@@ -20,6 +21,7 @@ class TasksStart extends base_command_1.BaseCommand {
20
21
  '<%= config.bin %> tasks start <task-id> --skill <skill-id>',
21
22
  '<%= config.bin %> tasks start OSK-123 --branch',
22
23
  '<%= config.bin %> tasks start <task-id> --json',
24
+ '<%= config.bin %> tasks start <task-id> --dry-run --json',
23
25
  ];
24
26
  static args = {
25
27
  id: core_1.Args.string({
@@ -30,6 +32,7 @@ class TasksStart extends base_command_1.BaseCommand {
30
32
  };
31
33
  static flags = {
32
34
  json: core_1.Flags.boolean({ description: 'Output as JSON' }),
35
+ 'dry-run': core_1.Flags.boolean({ description: 'Preview effective unattended execution prerequisites without creating a Run or checking out a branch', exclusive: ['branch'] }),
33
36
  task: core_1.Flags.string({
34
37
  description: 'Task ID; overrides daemon runtime context',
35
38
  }),
@@ -57,6 +60,36 @@ class TasksStart extends base_command_1.BaseCommand {
57
60
  details: { suggestion: failure.suggestion, context: failure.details },
58
61
  });
59
62
  }
63
+ if (flags['dry-run']) {
64
+ if (flags.branch)
65
+ this.error('--dry-run cannot check out a branch; omit --branch.', { exit: 2 });
66
+ let preview;
67
+ try {
68
+ // A separate route is intentional: an older /start silently ignores
69
+ // unknown request fields. A dryRun flag there could start real work.
70
+ preview = await data_provider_1.dataService.previewTaskStart(taskIdentity.id, flags.skill ? { skillId: flags.skill } : undefined);
71
+ }
72
+ catch (err) {
73
+ this.handleApiError(err, { subject: `Task ${taskIdentity.id} execution preview` });
74
+ }
75
+ if (!(0, task_admission_1.isAdmissionPreview)(preview)) {
76
+ this.failWithCliError({
77
+ message: 'The server did not return a confirmed execution preview. Update the server before using --dry-run.',
78
+ code: 'TASK_START_PREVIEW_UNSUPPORTED', exit: 2, retryable: false,
79
+ });
80
+ }
81
+ if (flags.json)
82
+ this.printJsonResult(preview, { ok: preview.executionAdmission.state !== 'blocked' });
83
+ else {
84
+ this.log(`Execution preview for ${preview.taskId}:`);
85
+ for (const line of (0, task_admission_1.admissionLines)(preview.executionAdmission))
86
+ this.log(line);
87
+ this.log('No Run was created. Starting later rechecks current prerequisites.');
88
+ }
89
+ if (preview.executionAdmission.state === 'blocked')
90
+ this.exit(1);
91
+ return;
92
+ }
60
93
  // Resolve once before asking the server to start. It makes a title or
61
94
  // human-readable ref usable for branch naming, while UUID callers retain
62
95
  // their existing one-request behavior when --branch is omitted.
@@ -137,6 +170,8 @@ class TasksStart extends base_command_1.BaseCommand {
137
170
  this.log(`Started task ${taskId}${flags.skill ? ` with skill ${flags.skill}` : ''}`);
138
171
  if (branch)
139
172
  this.log(`${branch.created ? 'Created' : 'Checked out'} branch: ${branch.branch}`);
173
+ for (const line of (0, task_admission_1.admissionLines)(result.executionAdmission))
174
+ this.log(line);
140
175
  this.log(`Conversation: ${result.conversationId}`);
141
176
  this.log(`Session: ${result.sessionId}`);
142
177
  for (const line of startFollowUpLines(this.config.bin, taskIdentity.id))
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const list_output_1 = require("../../../lib/list-output");
3
4
  const core_1 = require("@oclif/core");
4
5
  const data_provider_1 = require("@skrr-ai/data-provider");
5
6
  const base_command_1 = require("../../../base-command");
@@ -25,7 +26,7 @@ class TasksTemplatesList extends base_command_1.BaseCommand {
25
26
  this.handleApiError(err);
26
27
  }
27
28
  if (flags.json) {
28
- this.log(JSON.stringify(response, null, 2));
29
+ this.printJsonResult((0, list_output_1.listResult)(response));
29
30
  return;
30
31
  }
31
32
  const items = response?.data ?? [];
@@ -6,6 +6,11 @@ import { BaseCommand } from '../../base-command';
6
6
  * renders `details` with, so the two surfaces describe one entry the same way.
7
7
  */
8
8
  export declare function withDetails(item: Record<string, unknown>): string;
9
+ /**
10
+ * Who, not just which kind: `human:<id> (via CLI credential)` (OSK-16621). A
11
+ * row written before channels existed renders as it always did.
12
+ */
13
+ export declare function timelineActor(item: Record<string, unknown>): string;
9
14
  export default class TasksTimeline extends BaseCommand {
10
15
  static description: string;
11
16
  static args: {
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.withDetails = withDetails;
4
+ exports.timelineActor = timelineActor;
4
5
  const core_1 = require("@oclif/core");
5
6
  const data_provider_1 = require("@skrr-ai/data-provider");
6
7
  const base_command_1 = require("../../base-command");
@@ -21,6 +22,13 @@ function withDetails(item) {
21
22
  const details = (0, format_1.formatCell)(item.data ?? item.details, '');
22
23
  return details ? `${preview} (${details})` : preview;
23
24
  }
25
+ /**
26
+ * Who, not just which kind: `human:<id> (via CLI credential)` (OSK-16621). A
27
+ * row written before channels existed renders as it always did.
28
+ */
29
+ function timelineActor(item) {
30
+ return item.actor ? (0, data_provider_1.formatTaskPrincipal)(item.actor) : '-';
31
+ }
24
32
  class TasksTimeline extends base_command_1.BaseCommand {
25
33
  static description = 'Show the immutable multi-actor Task Activity timeline';
26
34
  static args = {
@@ -67,7 +75,7 @@ class TasksTimeline extends base_command_1.BaseCommand {
67
75
  .replace('T', ' ')
68
76
  .slice(0, 19),
69
77
  source: String(item.type ?? '-'),
70
- actor: String(item.actor?.kind ?? '-'),
78
+ actor: timelineActor(item),
71
79
  // A lifecycle row's preview is the bare action, so `status_changed`
72
80
  // appeared three times in a row without ever naming a status. The
73
81
  // answer is in `details` (`status=blocked`), which `tasks activity`
@@ -5,7 +5,11 @@ const data_provider_1 = require("@skrr-ai/data-provider");
5
5
  const base_command_1 = require("../../base-command");
6
6
  const web_url_1 = require("../../lib/web-url");
7
7
  class TasksUnschedule extends base_command_1.BaseCommand {
8
- static description = 'Clear the schedule on a task (no future fires)';
8
+ // Decision (OSK-15321, round 3): unschedule ENDS the series at this occurrence; it clears the
9
+ // time and the recurrence. Stopping without ending is `pause-schedule` (keeps the series,
10
+ // `resume-schedule` continues it). A series ended here by mistake is restored, settings and
11
+ // all, with `rearm-recurrence <the previous occurrence>`.
12
+ static description = 'Clear the schedule on a task and end its series here (no future fires). To stop without ending the series use pause-schedule; to restore an ended series run rearm-recurrence on the previous occurrence';
9
13
  static examples = [
10
14
  '<%= config.bin %> tasks unschedule <task-id>',
11
15
  '<%= config.bin %> tasks unschedule <task-id> --json',
@@ -50,6 +50,7 @@ export default class TasksUpdate extends BaseCommand {
50
50
  goal: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
51
51
  cycle: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
52
52
  space: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
53
+ unassigned: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
53
54
  'assignee-agent': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
54
55
  'assignee-user': import("@oclif/core/lib/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
55
56
  'dri-agent': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -138,6 +138,9 @@ class TasksUpdate extends base_command_1.BaseCommand {
138
138
  space: core_1.Flags.string({
139
139
  description: 'Move task to a different space (for a project, use `tasks move --project`)',
140
140
  }),
141
+ unassigned: core_1.Flags.boolean({
142
+ description: 'Clear all Agent and Human assignees, retaining executor intent unless explicitly changed. Overrides JSON assignment; does not start a Run.',
143
+ }),
141
144
  'assignee-agent': core_1.Flags.string({
142
145
  description: 'Replace assignee agents — id or name (repeatable)',
143
146
  multiple: true,
@@ -153,7 +156,7 @@ class TasksUpdate extends base_command_1.BaseCommand {
153
156
  description: 'Set explicit accountable human DRI; use --from-json null to clear',
154
157
  }),
155
158
  'execution-mode': core_1.Flags.string({
156
- description: 'Set the default executor class for mixed Human/Agent assignees',
159
+ description: 'Set executor intent independently of assignment; required when assigning both Humans and Agents',
157
160
  options: ['agent', 'human'],
158
161
  }),
159
162
  'add-assignee-agent': core_1.Flags.string({
@@ -219,6 +222,15 @@ class TasksUpdate extends base_command_1.BaseCommand {
219
222
  async run() {
220
223
  this.requireAuth();
221
224
  const { args, flags } = await this.parse(TasksUpdate);
225
+ this.setJsonOperation({ command: 'tasks:update', mode: 'execute' });
226
+ const assignmentError = (0, tasks_2.taskUnassignmentFlagError)(flags);
227
+ if (assignmentError)
228
+ this.failWithCliError({
229
+ message: assignmentError,
230
+ code: 'TASK_ASSIGNMENT_FLAG_CONFLICT',
231
+ exit: 2,
232
+ retryable: false,
233
+ });
222
234
  // Default to {} so TS flow-analysis is satisfied — the catch calls this.error(), which throws.
223
235
  let body = {};
224
236
  try {
@@ -451,6 +463,7 @@ class TasksUpdate extends base_command_1.BaseCommand {
451
463
  // for, so it never counts toward the "nothing to update" check below.
452
464
  repairReleasePins: flags['repair-release-pins'] ? true : undefined,
453
465
  });
466
+ (0, tasks_2.applyExplicitTaskUnassignment)(payload, flags.unassigned === true);
454
467
  const payloadKeys = Object.keys(payload);
455
468
  if (payload.driAgentId && payload.driUserId) {
456
469
  this.failWithCliError({
@@ -494,6 +507,7 @@ class TasksUpdate extends base_command_1.BaseCommand {
494
507
  // to the task's current space. Fetching the task is skipped entirely when
495
508
  // every assignee entry is already a raw id — the overwhelmingly common
496
509
  // scripted case — so this adds no round-trip to existing usage.
510
+ await this.resolveTaskResourceReferences(payload, { taskId: taskRef });
497
511
  await this.resolveAssigneesInPayload(payload, {
498
512
  resolveSpaceId: async () => {
499
513
  try {
@@ -538,12 +552,31 @@ class TasksUpdate extends base_command_1.BaseCommand {
538
552
  if (tagWarning)
539
553
  this.warn(tagWarning);
540
554
  if (flags.json) {
541
- this.log(JSON.stringify((0, web_url_1.withTaskUrl)(this.cliConfig.baseURL, updated), null, 2));
555
+ const row = updated;
556
+ this.printJsonOperation({
557
+ ...(0, web_url_1.withTaskUrl)(this.cliConfig.baseURL, row),
558
+ assignmentPreview: (0, tasks_2.taskAssignmentPreview)(row),
559
+ }, {
560
+ resource: row.id ? { kind: 'task', id: String(row.id) } : null,
561
+ task: row.id ? { id: String(row.id) } : null,
562
+ });
542
563
  return;
543
564
  }
544
565
  const t = updated;
545
566
  const ref = t.identifier ?? (t.taskNumber ? `#${t.taskNumber}` : '');
546
- this.log(`Updated task ${t.id ?? t._id ?? taskRef}${ref ? ` (${ref})` : ''} — ${t.title ?? '(no title)'}`);
567
+ const label = `${t.id ?? t._id ?? taskRef}${ref ? ` (${ref})` : ''}`;
568
+ // The server's own answer about the estimate (OSK-16476): a no-op says so, never "Updated".
569
+ const unchanged = (0, task_economics_1.estimateUnchangedLine)(payload.economics, t);
570
+ const onlyEstimate = payloadKeys.every((key) => key === 'economics' || payload[key] === undefined);
571
+ if (unchanged && onlyEstimate) {
572
+ this.log(`Task ${label}: ${unchanged}`);
573
+ return;
574
+ }
575
+ this.log(`Updated task ${label} — ${t.title ?? '(no title)'}`);
576
+ if (flags.unassigned)
577
+ this.log(`Executor intent: ${(0, tasks_2.taskAssignmentPreview)(t).executor.mode || 'unspecified'}; assignment: unassigned. No Run requested.`);
578
+ if (unchanged)
579
+ this.log(unchanged);
547
580
  // `--yes` asserts the revocation; it does not erase that it happened.
548
581
  // Report the cost after the write too, or the evidence is silently gone.
549
582
  if (changesSpec && flags.yes && (settledSpecAssessments > 0 || acceptanceUnreadable)) {
@@ -118,6 +118,7 @@ class TasksUpdatesAdd extends base_command_1.BaseCommand {
118
118
  json: core_1.Flags.boolean({ description: 'Output JSON' }),
119
119
  };
120
120
  async run() {
121
+ this.setJsonOperation({ command: 'tasks:updates:add', mode: 'execute' });
121
122
  this.requireAuth();
122
123
  const { args, flags } = await this.parse(TasksUpdatesAdd);
123
124
  const task = (0, task_resolver_1.resolveTaskIdentity)({ positionalId: args.task, flagTask: flags.task });
@@ -190,7 +191,11 @@ class TasksUpdatesAdd extends base_command_1.BaseCommand {
190
191
  this.handleApiError(error);
191
192
  }
192
193
  if (flags.json)
193
- return this.log(JSON.stringify(result, null, 2));
194
+ return this.printJsonOperation(result, {
195
+ resource: { kind: 'task_update', id: result?.update?.id },
196
+ task: { id: result?.update?.taskId },
197
+ ...(typeof result?.idempotent === 'boolean' ? { replayed: result.idempotent } : {}),
198
+ });
194
199
  // A replayed idempotency key answers the SAME stored record — say so,
195
200
  // otherwise a retried write reads as a second write.
196
201
  this.log(result?.idempotent
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const list_output_1 = require("../../../lib/list-output");
3
4
  const core_1 = require("@oclif/core");
4
5
  const data_provider_1 = require("@skrr-ai/data-provider");
5
6
  const base_command_1 = require("../../../base-command");
@@ -44,7 +45,7 @@ class TasksUpdatesList extends base_command_1.BaseCommand {
44
45
  this.handleApiError(error);
45
46
  }
46
47
  if (flags.json)
47
- return this.log(JSON.stringify(result, null, 2));
48
+ return this.printJsonResult((0, list_output_1.listResult)(result));
48
49
  if (!result?.data.length)
49
50
  return this.log('No Updates recorded.');
50
51
  for (const update of result.data) {
@@ -7,6 +7,7 @@ export default class TasksUpsert extends BaseCommand {
7
7
  'from-json': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
8
  'external-key': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
9
9
  'default-agent': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
+ unassigned: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
11
  title: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
12
  description: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
13
  'description-format': import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -25,6 +25,7 @@ class TasksUpsert extends base_command_1.BaseCommand {
25
25
  'default-agent': core_1.Flags.string({
26
26
  description: 'Override the automatic assignee for creates, or fill an unassigned existing match. Use "auto" to inherit the space lead agent.',
27
27
  }),
28
+ unassigned: core_1.Flags.boolean({ description: 'Explicitly clear both assignee kinds, suppressing automatic defaults while retaining executor intent.', exclusive: ['default-agent', 'assignee-agent', 'assignee-user'] }),
28
29
  title: core_1.Flags.string({ description: 'Task title (required when creating)' }),
29
30
  description: core_1.Flags.string({ description: 'Task description' }),
30
31
  'description-format': core_1.Flags.string({
@@ -66,6 +67,10 @@ class TasksUpsert extends base_command_1.BaseCommand {
66
67
  async run() {
67
68
  this.requireAuth();
68
69
  const { flags } = await this.parse(TasksUpsert);
70
+ this.setJsonOperation({ command: 'tasks:upsert', mode: 'execute' });
71
+ const unassignmentError = (0, tasks_1.taskUnassignmentFlagError)(flags);
72
+ if (unassignmentError)
73
+ this.failWithCliError({ message: unassignmentError, code: 'TASK_UNASSIGNED_CONFLICT', exit: 2, retryable: false });
69
74
  let body = {};
70
75
  try {
71
76
  body = await (0, prompt_1.readJsonBody)(flags['from-json']);
@@ -92,6 +97,7 @@ class TasksUpsert extends base_command_1.BaseCommand {
92
97
  });
93
98
  }
94
99
  let scope;
100
+ await this.resolveTaskResourceReferences(payload);
95
101
  try {
96
102
  scope = await (0, tasks_1.resolveTaskCreateScope)(payload);
97
103
  }
@@ -219,10 +225,11 @@ class TasksUpsert extends base_command_1.BaseCommand {
219
225
  externalKey,
220
226
  defaultAgent: defaultAgentResolution,
221
227
  task,
228
+ assignmentPreview: (0, tasks_1.taskAssignmentPreview)(task),
222
229
  url: (0, web_url_1.taskUrlFrom)(this.cliConfig.baseURL, task),
223
230
  };
224
231
  if (flags.json) {
225
- this.log(JSON.stringify(result, null, 2));
232
+ this.printJsonOperation(result, { resource: { kind: 'task', id: task?.id }, task: { id: task?.id } });
226
233
  return;
227
234
  }
228
235
  this.log(`${capitalize(action)} task ${(0, tasks_1.formatTaskLabel)(task)}`);
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const list_output_1 = require("../../lib/list-output");
3
4
  const core_1 = require("@oclif/core");
4
5
  const base_command_1 = require("../../base-command");
5
6
  const api_fetch_1 = require("../../lib/api-fetch");
@@ -102,7 +103,7 @@ class TokenList extends base_command_1.BaseCommand {
102
103
  // web session as if it were one.
103
104
  const sessions = allSessions.filter((session) => !flags.kind || session.kind === flags.kind);
104
105
  if (flags.json) {
105
- return this.log(JSON.stringify({ sessions, count: sessions.length, hasMore }, null, 2));
106
+ return this.printJsonResult((0, list_output_1.listResult)({ sessions, count: sessions.length, hasMore }, 'sessions'));
106
107
  }
107
108
  if (!sessions.length && !hasMore) {
108
109
  return this.log(flags.kind ? 'No matching active sessions.' : 'No active sessions.');
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const list_output_1 = require("../../lib/list-output");
3
4
  const core_1 = require("@oclif/core");
4
5
  const base_command_1 = require("../../base-command");
5
6
  const access_tokens_1 = require("../../lib/access-tokens");
@@ -28,7 +29,7 @@ class TokensList extends base_command_1.BaseCommand {
28
29
  }
29
30
  const shown = flags.all ? tokens : tokens.filter((t) => t.state === 'active');
30
31
  if (flags.json) {
31
- this.log(JSON.stringify({ accessTokens: shown }, null, 2));
32
+ this.printJsonResult((0, list_output_1.listResult)({ accessTokens: shown }, 'accessTokens'));
32
33
  return;
33
34
  }
34
35
  if (shown.length === 0) {
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const list_output_1 = require("../../lib/list-output");
3
4
  const core_1 = require("@oclif/core");
4
5
  const data_provider_1 = require("@skrr-ai/data-provider");
5
6
  const base_command_1 = require("../../base-command");
@@ -41,11 +42,12 @@ class TonesList extends base_command_1.BaseCommand {
41
42
  : library.presets.filter((preset) => !flags.family || preset.family === flags.family);
42
43
  const custom = flags.presets || flags.family ? [] : library.custom;
43
44
  if (flags.json) {
44
- this.log(JSON.stringify({
45
+ this.printJsonResult((0, list_output_1.listResult)({
46
+ data: [...presets, ...custom].map(tone_input_1.summarizeToneForList),
45
47
  presets: presets.map(tone_input_1.summarizeToneForList),
46
48
  custom: custom.map(tone_input_1.summarizeToneForList),
47
49
  defaultToneId: library.defaultToneId ?? null,
48
- }, null, 2));
50
+ }));
49
51
  return;
50
52
  }
51
53
  const rows = [...presets, ...custom].map((tone) => ({
@@ -25,17 +25,25 @@ class TriggersAudit extends base_command_1.BaseCommand {
25
25
  agent: core_1.Flags.string({ description: 'Agent ID filter for owner-wide audit history' }),
26
26
  scope: core_1.Flags.string({ description: 'Scope kind filter for owner-wide audit history' }),
27
27
  outcome: core_1.Flags.string({
28
- description: 'Outcome filter for owner-wide audit history (succeeded, failed, skipped, incomplete, capped, ...); an unknown value is refused with the full list',
28
+ description: 'Outcome filter (succeeded, failed, skipped, incomplete, capped, ...); an unknown value is refused with the full list',
29
29
  }),
30
30
  source: core_1.Flags.string({
31
- description: 'Source filter for owner-wide audit history (schedule, once, event, manual, webhook, replay, ...); an unknown value is refused with the full list',
31
+ description: 'Source filter (schedule, once, event, manual, webhook, replay, ...); an unknown value is refused with the full list',
32
32
  }),
33
33
  };
34
34
  async run() {
35
35
  this.requireAuth();
36
36
  const { args, flags } = await this.parse(TriggersAudit);
37
37
  const triggerId = args.id ?? flags.trigger;
38
- const path = triggerId
38
+ // The per-trigger route takes no filters. A filter passed with a trigger id used to be
39
+ // dropped without a word, so `--outcome failed` listed succeeded rows and exited 0 (OSK-16474).
40
+ // A filter now always reaches the filtered history, narrowed to that trigger; that history
41
+ // covers triggers you own, which is said out loud rather than discovered.
42
+ const filtered = [flags.outcome, flags.source, flags.scope, flags.agent].some((value) => value !== undefined);
43
+ if (triggerId && filtered && !flags.json) {
44
+ this.warn('Filters read the fire history of triggers you own: a trigger shared with you but owned by someone else lists no rows here (omit the filters to read its own audit).');
45
+ }
46
+ const path = triggerId && !filtered
39
47
  ? (0, triggers_1.withQuery)(`/api/triggers/${encodeURIComponent(triggerId)}/audit`, {
40
48
  limit: flags.limit,
41
49
  before: flags.before,
@@ -47,6 +55,7 @@ class TriggersAudit extends base_command_1.BaseCommand {
47
55
  agentId: flags.agent,
48
56
  outcome: flags.outcome,
49
57
  source: flags.source,
58
+ ...(triggerId ? { triggerId } : {}),
50
59
  });
51
60
  let response;
52
61
  try {
@@ -99,7 +99,7 @@ class TriggersCreate extends base_command_1.BaseCommand {
99
99
  description: 'ISO-8601 datetime after which a schedule stops firing',
100
100
  }),
101
101
  'stale-catchup-ms': core_1.Flags.integer({
102
- description: 'How late a missed occurrence may still run, in ms (a positive number). After downtime, an occurrence more than this overdue is skipped rather than run late, and the schedule moves to its next future slot. Unset: 3600000 (1 hour).',
102
+ description: 'How late a missed occurrence may still run, in ms, from 1000 (1 second) to 31622400000 (366 days). After downtime, an occurrence more than this overdue is skipped rather than run late, and the schedule moves to its next future slot. Unset: 3600000 (1 hour).',
103
103
  }),
104
104
  at: core_1.Flags.string({
105
105
  description: 'ISO-8601 datetime for once triggers. --next-run-at is also accepted with --kind once for backwards compatibility.',
@@ -1,4 +1,11 @@
1
1
  import { BaseCommand } from '../../base-command';
2
+ /**
3
+ * The text rendering of one fire. `reason` is the typed code and `errorMessage` the sentence a
4
+ * person reads; the view printed whichever came first, so a fire that resolved nothing showed
5
+ * only `Reason: no_waiting_step` and its sentence ("No step in this Space was waiting on that
6
+ * event key.") was JSON-only (OSK-16474). Both are shown now when both exist.
7
+ */
8
+ export declare function describeFireAuditDetail(detail: Record<string, unknown>, fireId: string, triggerId: string): string[];
2
9
  export default class TriggersFireDetail extends BaseCommand {
3
10
  static description: string;
4
11
  static examples: string[];