@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
@@ -24,9 +24,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
24
24
  Object.defineProperty(exports, "__esModule", { value: true });
25
25
  exports.runHeadersHelper = exports.SENTINEL_TRIGGERING_FAILURES = exports.__resetAuthHelperFailureReasonForTest = exports.getLastAuthHelperFailureReason = exports.getDefaultHelperTtlMs = exports.invokeAuthHelper = exports.AuthHelperUnavailableError = exports.AuthHelperUntrustedError = exports.isStaticTokenKind = exports.PERSONAL_ACCESS_TOKEN_PREFIX = exports.CI_TOKEN_PREFIX = exports.classifyTokenKind = exports.invalidateAuthHelperCache = exports.__resetCredentialResolverForTest = exports.CREDENTIAL_PRECEDENCE = exports.CredentialResolver = exports.__setFdReaderForTest = exports.readAuthFromFd = exports.createRefreshScheduler = exports.UNKNOWN_401_BUDGET = exports.__resetUnknown401StreaksForTest = exports.__refreshDiagnostics = exports.installLockExitHandlers = exports.clearReauthState = exports.needsReauthState = exports.persistReauthState = exports.withAuthLock = exports.revokeDaemonRefreshSession = exports.refreshDaemonToken = exports.classifyRefreshResponse = exports.EXIT_NEEDS_REAUTH = exports.reauthCommand = exports.formatReauthMessage = exports.handleMidStreamAuthExpiry = exports.isAuthExpiredSseEvent = exports.decodeJwtPayload = exports.decodeJwtExpiry = exports.TransientAuthFailure = exports.PermanentAuthFailure = exports.emitAuthTelemetry = exports.getAuthBinaryName = exports.getAuthKillSwitches = exports.getAuthConfigDir = exports.getAuthLogger = exports.configureAuthCore = exports.OAUTH_CLI_SCOPE = exports.isDaemonScope = exports.VALID_DAEMON_SCOPE_SET = exports.ALL_DAEMON_SCOPES = exports.SCOPES = void 0;
26
26
  exports.jwkThumbprint = exports.generateDeviceKeyPair = exports.buildDeviceProof = exports.zeroizeKekCaches = exports.WindowsKek = exports.registerZeroizeHook = exports.MacosKek = exports.LinuxKek = exports.KekUnavailableError = exports.UnavailableKek = exports.InMemoryKek = exports.getKekStrategy = exports.__setKekStrategyForTest = exports.credEnvelopeWrap = exports.credEnvelopeUnwrap = exports.credEnvelopeSerialize = exports.credSealBuffer = exports.credOpenBuffer = exports.CRED_KEY_LEN = exports.isCredEnvelopeString = exports.generateDek = exports.CRED_ENVELOPE_MAGIC = exports.credEnvelopeEncrypt = exports.credEnvelopeDeserialize = exports.credEnvelopeDecrypt = exports.buildCredentialAad = exports.isValidRecoveryCode = exports.normalizeRecoveryCode = exports.parseRecoveryCode = exports.formatRecoveryCode = exports.MAX_TTL_DAYS = exports.MIN_TTL_DAYS = exports.parseTtlDays = exports.LoginExchangeError = exports.LoginInitError = exports.loginWithLocalhost = exports.LocalCallbackMalformedError = exports.LocalCallbackDeniedError = exports.LocalCallbackStateMismatchError = exports.LocalCallbackTimeoutError = exports.LocalCallbackBindError = exports.LocalCallbackError = exports.DEFAULT_LOGIN_TIMEOUT_MS = exports.startLocalCallback = exports.verifyChallenge = exports.safeEqual = exports.generateState = exports.challenge = exports.generateVerifier = exports.invalidateHeadersHelperCache = void 0;
27
- exports.qualifyMachineUuid = exports.getMachineUuidProfile = exports.setMachineUuidProfile = exports.getHardwareMachineUuid = exports.getMachineUuid = exports.__getDeviceIdentityStateForTest = exports.__setDeviceIdentityStateForTest = exports.__enrollmentBackoffPathForTest = exports.__enrollmentMarkerPathForTest = exports.__privateKeyPathForTest = exports.__publicKeyPathForTest = exports.describeDeviceKeySplit = exports.describeDeviceIdentityState = exports.getDevicePublicKey = exports.isDeviceIdentityActive = exports.clearEnrollmentMarker = exports.enrollWithServer = exports.signServerRequest = exports.resetDeviceIdentity = exports.initDeviceIdentity = exports.__resetShutdownGuardForTest = exports.__getCredEnvelopeStateForTest = exports.__setCredEnvelopeStateForTest = exports.__wrappedDekFilePathForTest = exports.DEFAULT_UNREADABLE_CREDENTIAL_HINT = exports.maybeDecryptOnRead = exports.maybeEncryptForWrite = exports.splitKeyConvergencePolicy = exports.describeCredEnvelopeState = exports.hasCredEnvelopePathConflict = exports.isCredEnvelopeActive = exports.shutdownCredEnvelope = exports.resetCredEnvelope = exports.initCredEnvelope = exports.verifyDpopProof = exports.normalizeDpopHtu = exports.isJwkThumbprint = exports.isAth = exports.createDpopKey = exports.accessTokenHash = exports.DPOP_PROOF_VERIFY_UNAVAILABLE = exports.DPOP_PROOF_TYP = exports.DPOP_PROOF_REQUIRED = exports.DPOP_PROOF_INVALID = exports.DPOP_MAX_AGE_SECONDS = exports.DPOP_HEADER = exports.verifyDeviceProof = exports.tokenHash = exports.publicJwkFromX = exports.normalizeHtu = void 0;
28
- exports.LOOPBACK_DEFAULT_MAX_BODY_BYTES = exports.LoopbackTargetRefusedError = exports.isLoopbackAddress = exports.isLoopbackHostname = exports.assertLoopbackHttpUrl = exports.loopbackFetch = exports.withLoopbackNoProxy = exports.envHasProxy = exports.LOOPBACK_NO_PROXY_HOSTS = exports.isDaemonChildEnv = exports.DAEMON_CHILD_ENV = exports.SENSITIVE_ENV_PREFIX_EXCEPTIONS = exports.SENSITIVE_ENV_NAME_TOKENS = exports.SENSITIVE_ENV_SUFFIXES = exports.SENSITIVE_ENV_PREFIXES = exports.SENSITIVE_ENV_VARS = exports.sanitizeSpawnEnv = exports.harnessLoadsClaudeSkillsLayout = exports.claudeSkillsLayoutEvidence = exports.HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT = exports.tierPermitsConfiguredAutoMode = exports.credentialPolicyForTier = exports.getHarnessTier = exports.HARNESS_TIERS = exports.pairUint8ArrayToBase64Url = exports.pairUint8ArrayToBase64 = exports.parsePairUrl = exports.parsePairPlaintext = exports.parsePairBundle = exports.openPairBundleBase64 = exports.generatePairKeyPair = exports.buildPairUrl = exports.buildPairAad = exports.pairBase64UrlToUint8Array = exports.pairBase64ToUint8Array = exports.assemblePairBundleBase64 = exports.PairBundleError = exports.PAIR_SECRET_LEN = exports.PAIR_PUBKEY_LEN = exports.PAIR_NONCE_LEN = exports.PAIR_BUNDLE_MAX_BASE64_LEN = exports.PAIR_AAD_MAX_LEN = exports.PAIR_AAD_PREFIX = exports.__resetCachedDaemonIdForTest = exports.legacyDaemonUuids = exports.ensureMachineDaemonId = exports.__resetMachineUuidCacheForTest = exports.HOSTED_RUNTIME_MACHINE_SOURCES = exports.hostedRuntimeIdOverride = exports.MACHINE_IDENTITY_FILENAME = void 0;
29
- exports.compareReleaseVersions = exports.consolidateProfileState = exports.profileStateFilePathsToClear = exports.profileStateFileLocations = exports.resolveProfileStateFile = exports.resolveProfileStateDir = exports.legacyProfileStateDir = exports.profileStateDir = exports.SUPERSEDED_COPY_SUFFIX = exports.SUPERSEDED_MARKER_SUFFIX = exports.PROFILES_SEGMENT = exports.isConfigRootOverridden = exports.configRootPath = exports.resolveConfigRoot = exports.verifyManifest = exports.verifyArtifact = exports.isTrustedArtifactOrigin = exports.getDeltaFor = exports.buildManifestMessage = exports.buildArtifactMessage = exports.TRUSTED_FEED_ORIGINS = exports.MAX_SIGS = exports.OVERSKY_RELEASE_PUBLIC_KEYS = exports.resolveFirstPartyHarnessChannel = exports.resolveChannelManifestUrl = exports.isFirstPartyHarnessChannel = exports.firstPartyHarnessFeedCandidates = exports.firstPartyHarnessFeedBase = exports.firstPartyHarnessChannelPrefix = exports.FIRST_PARTY_HARNESS_CHANNELS = exports.DEFAULT_FIRST_PARTY_HARNESS_CHANNEL = exports.migrateFirstPartyHarnessHome = exports.linkFirstPartyHarnessAliases = exports.firstPartyHarnessInstalledBinaryPath = exports.firstPartyHarnessHomeDir = exports.firstPartyHarnessBinDir = exports.FIRST_PARTY_HARNESS_PROVENANCE_SUFFIX = exports.FIRST_PARTY_HARNESS_PREVIOUS_SUFFIX = exports.describeLegacyState = exports.findLegacyLocalState = exports.DEFAULT_BINARY_NAME = exports.LEGACY_NATIVE_ID_PREFIXES = exports.NATIVE_ID_PREFIX = exports.LEGACY_CONFIG_DIR_NAMES = exports.CONFIG_DIR_NAME = void 0;
27
+ exports.setMachineUuidProfile = exports.getHardwareMachineUuid = exports.describeMachineIdentity = exports.getMachineUuidForProfile = exports.getMachineUuid = exports.__getDeviceIdentityStateForTest = exports.__setDeviceIdentityStateForTest = exports.__enrollmentBackoffPathForTest = exports.__enrollmentMarkerPathForTest = exports.__privateKeyPathForTest = exports.__publicKeyPathForTest = exports.describeDeviceKeySplit = exports.describeDeviceIdentityState = exports.getDevicePublicKey = exports.isDeviceIdentityActive = exports.clearEnrollmentMarker = exports.enrollWithServer = exports.signServerRequest = exports.resetDeviceIdentity = exports.initDeviceIdentity = exports.__resetShutdownGuardForTest = exports.__getCredEnvelopeStateForTest = exports.__setCredEnvelopeStateForTest = exports.__wrappedDekFilePathForTest = exports.DEFAULT_UNREADABLE_CREDENTIAL_HINT = exports.maybeDecryptOnRead = exports.maybeEncryptForWrite = exports.splitKeyConvergencePolicy = exports.describeCredEnvelopeState = exports.hasCredEnvelopePathConflict = exports.isCredEnvelopeActive = exports.shutdownCredEnvelope = exports.resetCredEnvelope = exports.initCredEnvelope = exports.verifyDpopProof = exports.normalizeDpopHtu = exports.isJwkThumbprint = exports.isAth = exports.createDpopKey = exports.accessTokenHash = exports.DPOP_PROOF_VERIFY_UNAVAILABLE = exports.DPOP_PROOF_TYP = exports.DPOP_PROOF_REQUIRED = exports.DPOP_PROOF_INVALID = exports.DPOP_MAX_AGE_SECONDS = exports.DPOP_HEADER = exports.verifyDeviceProof = exports.tokenHash = exports.publicJwkFromX = exports.normalizeHtu = void 0;
28
+ exports.isLoopbackAddress = exports.isLoopbackHostname = exports.assertLoopbackHttpUrl = exports.loopbackFetch = exports.withLoopbackNoProxy = exports.envHasProxy = exports.LOOPBACK_NO_PROXY_HOSTS = exports.isDaemonChildEnv = exports.DAEMON_CHILD_ENV = exports.SENSITIVE_ENV_PREFIX_EXCEPTIONS = exports.SENSITIVE_ENV_NAME_TOKENS = exports.SENSITIVE_ENV_SUFFIXES = exports.SENSITIVE_ENV_PREFIXES = exports.SENSITIVE_ENV_VARS = exports.sanitizeSpawnEnv = exports.harnessLoadsClaudeSkillsLayout = exports.claudeSkillsLayoutEvidence = exports.HARNESSES_LOADING_CLAUDE_SKILLS_LAYOUT = exports.tierPermitsConfiguredAutoMode = exports.credentialPolicyForTier = exports.getHarnessTier = exports.HARNESS_TIERS = exports.pairUint8ArrayToBase64Url = exports.pairUint8ArrayToBase64 = exports.parsePairUrl = exports.parsePairPlaintext = exports.parsePairBundle = exports.openPairBundleBase64 = exports.generatePairKeyPair = exports.buildPairUrl = exports.buildPairAad = exports.pairBase64UrlToUint8Array = exports.pairBase64ToUint8Array = exports.assemblePairBundleBase64 = exports.PairBundleError = exports.PAIR_SECRET_LEN = exports.PAIR_PUBKEY_LEN = exports.PAIR_NONCE_LEN = exports.PAIR_BUNDLE_MAX_BASE64_LEN = exports.PAIR_AAD_MAX_LEN = exports.PAIR_AAD_PREFIX = exports.__resetCachedDaemonIdForTest = exports.legacyDaemonUuids = exports.ensureMachineDaemonId = exports.__resetMachineUuidCacheForTest = exports.HOSTED_RUNTIME_MACHINE_SOURCES = exports.hostedRuntimeIdOverride = exports.MACHINE_IDENTITY_FILENAME = exports.qualifyMachineUuid = exports.getMachineUuidProfile = void 0;
29
+ exports.compareReleaseVersions = exports.consolidateProfileState = exports.profileStateFilePathsToClear = exports.profileStateFileLocations = exports.resolveProfileStateFile = exports.resolveProfileStateDir = exports.legacyProfileStateDir = exports.profileStateDir = exports.SUPERSEDED_COPY_SUFFIX = exports.SUPERSEDED_MARKER_SUFFIX = exports.PROFILES_SEGMENT = exports.isConfigRootOverridden = exports.configRootPath = exports.resolveConfigRoot = exports.verifyManifest = exports.verifyArtifact = exports.isTrustedArtifactOrigin = exports.getDeltaFor = exports.buildManifestMessage = exports.buildArtifactMessage = exports.TRUSTED_FEED_ORIGINS = exports.MAX_SIGS = exports.OVERSKY_RELEASE_PUBLIC_KEYS = exports.resolveFirstPartyHarnessChannel = exports.resolveChannelManifestUrl = exports.isFirstPartyHarnessChannel = exports.firstPartyHarnessFeedCandidates = exports.firstPartyHarnessFeedBase = exports.firstPartyHarnessChannelPrefix = exports.FIRST_PARTY_HARNESS_CHANNELS = exports.DEFAULT_FIRST_PARTY_HARNESS_CHANNEL = exports.migrateFirstPartyHarnessHome = exports.linkFirstPartyHarnessAliases = exports.firstPartyHarnessInstalledBinaryPath = exports.firstPartyHarnessHomeDir = exports.firstPartyHarnessBinDir = exports.FIRST_PARTY_HARNESS_PROVENANCE_SUFFIX = exports.FIRST_PARTY_HARNESS_PREVIOUS_SUFFIX = exports.describeLegacyState = exports.findLegacyLocalState = exports.DEFAULT_BINARY_NAME = exports.LEGACY_NATIVE_ID_PREFIXES = exports.NATIVE_ID_PREFIX = exports.LEGACY_CONFIG_DIR_NAMES = exports.CONFIG_DIR_NAME = exports.LOOPBACK_DEFAULT_MAX_BODY_BYTES = exports.LoopbackTargetRefusedError = void 0;
30
30
  // Daemon scope vocabulary — single source of truth for non-Mongoose tiers
31
31
  // (daemon, desktop, cli). Schema-bound canonical lives in
32
32
  // `@skrr-ai/data-schemas/common/daemonScopes`; the two are kept byte-equal
@@ -284,6 +284,8 @@ Object.defineProperty(exports, "__getDeviceIdentityStateForTest", { enumerable:
284
284
  // OSK-12063. Also exposed dependency-free as `@skrr-ai/auth-core/machine-uuid`.
285
285
  var machineUuid_js_1 = require("./machineUuid.js");
286
286
  Object.defineProperty(exports, "getMachineUuid", { enumerable: true, get: function () { return machineUuid_js_1.getMachineUuid; } });
287
+ Object.defineProperty(exports, "getMachineUuidForProfile", { enumerable: true, get: function () { return machineUuid_js_1.getMachineUuidForProfile; } });
288
+ Object.defineProperty(exports, "describeMachineIdentity", { enumerable: true, get: function () { return machineUuid_js_1.describeMachineIdentity; } });
287
289
  Object.defineProperty(exports, "getHardwareMachineUuid", { enumerable: true, get: function () { return machineUuid_js_1.getHardwareMachineUuid; } });
288
290
  Object.defineProperty(exports, "setMachineUuidProfile", { enumerable: true, get: function () { return machineUuid_js_1.setMachineUuidProfile; } });
289
291
  Object.defineProperty(exports, "getMachineUuidProfile", { enumerable: true, get: function () { return machineUuid_js_1.getMachineUuidProfile; } });
@@ -56,5 +56,65 @@ export declare function getMachineUuidProfile(): string | null;
56
56
  * profile that already held credentials; see the block above.
57
57
  */
58
58
  export declare function getMachineUuid(): string;
59
+ /**
60
+ * The `machineUuid` a process running as `profile` sends, WITHOUT changing which
61
+ * profile this process runs as.
62
+ *
63
+ * The CLI needs the answer for the profile it is about to hand a credential to,
64
+ * and asks the daemon binary what IT will send (`accept-handoff --print-id`).
65
+ * Two programs that compute one identity can only be known to agree by
66
+ * comparing them, and a daemon that predates per-profile identities does not
67
+ * agree: it sends the hardware value whatever the profile's
68
+ * `machine-identity.json` says, so a credential minted for what it reports
69
+ * registers the profile on the default machine's row (the OSK-13845 failure, now
70
+ * reached through version skew rather than through the rule). The comparison
71
+ * needs this: the expected value for the TARGET profile, which is not
72
+ * necessarily the one this process is running as.
73
+ *
74
+ * Decides and persists the profile's identity if nothing has yet — the same
75
+ * side effect `getMachineUuid()` has, for the same reason.
76
+ */
77
+ export declare function getMachineUuidForProfile(profile: string | null | undefined): string;
78
+ export type MachineIdentityReason =
79
+ /** The default profile, which always uses this computer's own identity. */
80
+ 'default_profile'
81
+ /** A hosted runtime, whose identity the control plane issued. */
82
+ | 'hosted_runtime'
83
+ /** A profile that held no credentials when its identity was first decided. */
84
+ | 'new_profile'
85
+ /** A profile that already held credentials, so it keeps the shared identity. */
86
+ | 'pre_existing_profile'
87
+ /** Recovered from the copy kept outside the profile after product state was removed. */
88
+ | 'restored_profile'
89
+ /** The profile's record could not be read (the identity is still the one in use). */
90
+ | 'unrecorded';
91
+ export interface MachineIdentityDescription {
92
+ /** The profile this process runs as; null for the default profile. */
93
+ profile: string | null;
94
+ /** The value sent to the server as `machineUuid`. */
95
+ machineUuid: string;
96
+ /** This computer's own identity. */
97
+ hardware: string;
98
+ /**
99
+ * A non-default profile that registers on the SAME machine row as the default
100
+ * profile: they share one Daemon row, one device-key pin and one machine page.
101
+ */
102
+ sharesDefaultMachine: boolean;
103
+ reason: MachineIdentityReason;
104
+ /** The files that made a profile "already hold credentials", when recorded. */
105
+ evidence: string[];
106
+ decidedAt: string | null;
107
+ /** One sentence for a person. Written once, here, so no surface words it differently. */
108
+ sentence: string;
109
+ }
110
+ /**
111
+ * Which machine this process registers as, and WHY — the question a person has
112
+ * when two profiles turn up on one machine page and the logs say nothing.
113
+ *
114
+ * A read, not a decision: it reports the identity `getMachineUuid()` settled on
115
+ * (settling it if nothing has, exactly as any caller would) and the record that
116
+ * explains it. It never changes what a profile registers as.
117
+ */
118
+ export declare function describeMachineIdentity(): MachineIdentityDescription;
59
119
  /** @internal test seam — forget the cached value so the next call re-probes. */
60
120
  export declare function __resetMachineUuidCacheForTest(): void;
@@ -10,6 +10,8 @@ exports.qualifyMachineUuid = qualifyMachineUuid;
10
10
  exports.setMachineUuidProfile = setMachineUuidProfile;
11
11
  exports.getMachineUuidProfile = getMachineUuidProfile;
12
12
  exports.getMachineUuid = getMachineUuid;
13
+ exports.getMachineUuidForProfile = getMachineUuidForProfile;
14
+ exports.describeMachineIdentity = describeMachineIdentity;
13
15
  exports.__resetMachineUuidCacheForTest = __resetMachineUuidCacheForTest;
14
16
  /**
15
17
  * machineUuid.ts — the ONE hardware machine identity sent to the server as
@@ -231,7 +233,7 @@ function readPersistedChoice(file, hardware, profile, requireProfile = false) {
231
233
  return null;
232
234
  }
233
235
  }
234
- function persistChoice(dir, file, hardware, machineUuid, reason, profile) {
236
+ function persistChoice(dir, file, hardware, machineUuid, reason, profile, evidence) {
235
237
  try {
236
238
  node_fs_1.default.mkdirSync(dir, { recursive: true, mode: 0o700 });
237
239
  const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
@@ -241,6 +243,12 @@ function persistChoice(dir, file, hardware, machineUuid, reason, profile) {
241
243
  machineUuid,
242
244
  profile,
243
245
  reason,
246
+ // WHICH file made a profile "already hold credentials". The reason alone
247
+ // says a profile shares the default's machine row; this says what put it
248
+ // there, which is the difference between "an older Skrr set it up" and
249
+ // "its first credential was written before anything chose its identity".
250
+ // Additive: a reader that predates it ignores the field.
251
+ ...(evidence && evidence.length > 0 ? { evidence: [...evidence] } : {}),
244
252
  decidedAt: new Date().toISOString(),
245
253
  };
246
254
  node_fs_1.default.writeFileSync(tmp, `${JSON.stringify(body)}\n`, { mode: 0o600 });
@@ -280,7 +288,7 @@ function resolveProfileMachineUuid(profile, hardware) {
280
288
  persistChoice(dir, file, hardware, chosen, 'restored_profile', profile);
281
289
  }
282
290
  if (!chosen) {
283
- const preExisting = PRE_EXISTING_PROFILE_EVIDENCE.some((name) => {
291
+ const evidence = PRE_EXISTING_PROFILE_EVIDENCE.filter((name) => {
284
292
  try {
285
293
  return node_fs_1.default.existsSync(node_path_1.default.join(dir, name));
286
294
  }
@@ -288,8 +296,9 @@ function resolveProfileMachineUuid(profile, hardware) {
288
296
  return false;
289
297
  }
290
298
  });
299
+ const preExisting = evidence.length > 0;
291
300
  chosen = preExisting ? hardware : qualifyMachineUuid(hardware, profile);
292
- persistChoice(dir, file, hardware, chosen, preExisting ? 'pre_existing_profile' : 'new_profile', profile);
301
+ persistChoice(dir, file, hardware, chosen, preExisting ? 'pre_existing_profile' : 'new_profile', profile, evidence);
293
302
  }
294
303
  preserveRecoveryChoice(profile, hardware, chosen);
295
304
  profileChoiceCache.set(cacheKey, chosen);
@@ -309,14 +318,129 @@ function resolveProfileMachineUuid(profile, hardware) {
309
318
  * profile that already held credentials; see the block above.
310
319
  */
311
320
  function getMachineUuid() {
321
+ return getMachineUuidForProfile(activeMachineProfile);
322
+ }
323
+ /**
324
+ * The `machineUuid` a process running as `profile` sends, WITHOUT changing which
325
+ * profile this process runs as.
326
+ *
327
+ * The CLI needs the answer for the profile it is about to hand a credential to,
328
+ * and asks the daemon binary what IT will send (`accept-handoff --print-id`).
329
+ * Two programs that compute one identity can only be known to agree by
330
+ * comparing them, and a daemon that predates per-profile identities does not
331
+ * agree: it sends the hardware value whatever the profile's
332
+ * `machine-identity.json` says, so a credential minted for what it reports
333
+ * registers the profile on the default machine's row (the OSK-13845 failure, now
334
+ * reached through version skew rather than through the rule). The comparison
335
+ * needs this: the expected value for the TARGET profile, which is not
336
+ * necessarily the one this process is running as.
337
+ *
338
+ * Decides and persists the profile's identity if nothing has yet — the same
339
+ * side effect `getMachineUuid()` has, for the same reason.
340
+ */
341
+ function getMachineUuidForProfile(profile) {
312
342
  const hardware = getHardwareMachineUuid();
313
343
  // A hosted runtime's identity is ISSUED and fenced by the control plane.
314
344
  if (hostedRuntimeIdOverride('OVERSKY_MACHINE_UUID'))
315
345
  return hardware;
316
- const profile = activeMachineProfile;
317
- if (!profile || profile === DEFAULT_PROFILE_NAME)
346
+ const name = typeof profile === 'string' ? profile.trim() : '';
347
+ if (!name || name === DEFAULT_PROFILE_NAME)
318
348
  return hardware;
319
- return resolveProfileMachineUuid(profile, hardware);
349
+ return resolveProfileMachineUuid(name, hardware);
350
+ }
351
+ function readRecordedChoice(profile) {
352
+ try {
353
+ const file = node_path_1.default.join((0, configRoot_js_1.resolveConfigRoot)(), 'profiles', profile, exports.MACHINE_IDENTITY_FILENAME);
354
+ const parsed = JSON.parse(node_fs_1.default.readFileSync(file, 'utf-8'));
355
+ const reason = parsed.reason === 'new_profile' ||
356
+ parsed.reason === 'pre_existing_profile' ||
357
+ parsed.reason === 'restored_profile'
358
+ ? parsed.reason
359
+ : null;
360
+ return {
361
+ reason,
362
+ evidence: Array.isArray(parsed.evidence)
363
+ ? parsed.evidence.filter((e) => typeof e === 'string')
364
+ : [],
365
+ decidedAt: typeof parsed.decidedAt === 'string' ? parsed.decidedAt : null,
366
+ };
367
+ }
368
+ catch {
369
+ return { reason: null, evidence: [], decidedAt: null };
370
+ }
371
+ }
372
+ /**
373
+ * Which machine this process registers as, and WHY — the question a person has
374
+ * when two profiles turn up on one machine page and the logs say nothing.
375
+ *
376
+ * A read, not a decision: it reports the identity `getMachineUuid()` settled on
377
+ * (settling it if nothing has, exactly as any caller would) and the record that
378
+ * explains it. It never changes what a profile registers as.
379
+ */
380
+ function describeMachineIdentity() {
381
+ const hardware = getHardwareMachineUuid();
382
+ const machineUuid = getMachineUuid();
383
+ const active = activeMachineProfile;
384
+ const profile = active && active !== DEFAULT_PROFILE_NAME ? active : null;
385
+ const base = { profile, machineUuid, hardware };
386
+ if (hostedRuntimeIdOverride('OVERSKY_MACHINE_UUID')) {
387
+ return {
388
+ ...base,
389
+ sharesDefaultMachine: false,
390
+ reason: 'hosted_runtime',
391
+ evidence: [],
392
+ decidedAt: null,
393
+ sentence: 'This runtime is hosted; its machine identity was issued by the control plane.',
394
+ };
395
+ }
396
+ if (!profile) {
397
+ return {
398
+ ...base,
399
+ sharesDefaultMachine: false,
400
+ reason: 'default_profile',
401
+ evidence: [],
402
+ decidedAt: null,
403
+ sentence: "The default profile uses this computer's own machine identity.",
404
+ };
405
+ }
406
+ const recorded = readRecordedChoice(profile);
407
+ const sharesDefaultMachine = machineUuid === hardware;
408
+ const reason = recorded.reason ?? 'unrecorded';
409
+ const decided = recorded.decidedAt ? ` (decided ${recorded.decidedAt})` : '';
410
+ const held = recorded.evidence.length > 0 ? ` (${recorded.evidence.join(', ')})` : '';
411
+ let sentence;
412
+ if (reason === 'new_profile') {
413
+ sentence =
414
+ `Profile '${profile}' has its own machine identity: it held no credentials when that ` +
415
+ `identity was first chosen${decided}.`;
416
+ }
417
+ else if (reason === 'pre_existing_profile') {
418
+ sentence =
419
+ `Profile '${profile}' shares this computer's default machine identity: it already held ` +
420
+ `credentials${held} when its identity was first chosen${decided}, and the server ties ` +
421
+ 'those credentials to that identity, so changing it would sign the profile out.';
422
+ }
423
+ else if (reason === 'restored_profile') {
424
+ sentence = sharesDefaultMachine
425
+ ? `Profile '${profile}' shares this computer's default machine identity, restored from the ` +
426
+ `copy kept outside the profile after its state was removed${decided}.`
427
+ : `Profile '${profile}' has its own machine identity, restored from the copy kept outside ` +
428
+ `the profile after its state was removed${decided}.`;
429
+ }
430
+ else {
431
+ sentence = sharesDefaultMachine
432
+ ? `Profile '${profile}' uses this computer's default machine identity; the record of why ` +
433
+ 'could not be read.'
434
+ : `Profile '${profile}' has its own machine identity; the record of why could not be read.`;
435
+ }
436
+ return {
437
+ ...base,
438
+ sharesDefaultMachine,
439
+ reason,
440
+ evidence: recorded.evidence,
441
+ decidedAt: recorded.decidedAt,
442
+ sentence,
443
+ };
320
444
  }
321
445
  /** @internal test seam — forget the cached value so the next call re-probes. */
322
446
  function __resetMachineUuidCacheForTest() {
@@ -282,6 +282,8 @@ export declare function needsReauthState(): {
282
282
  * which one they hit (OSK-12116).
283
283
  */
284
284
  message?: string;
285
+ /** OSK-16941 — the server's session-revocation reason, when one was latched. */
286
+ revocationReason?: string;
285
287
  since?: number;
286
288
  };
287
289
  export declare function clearReauthState(): void;
@@ -851,8 +851,18 @@ async function doRefresh(serverUrl, currentRefreshToken, daemonId, options = {})
851
851
  statusCode: 401,
852
852
  },
853
853
  });
854
- persistReauthState({ code, message: parsedBody.message, at: Date.now() });
855
- throw new types_js_1.PermanentAuthFailure(code, parsedBody.message || code);
854
+ // OSK-16941 — keep WHY a revoked session was revoked, so the CLI and the
855
+ // desktop banner can tell the person instead of a bare code.
856
+ const revocationReason = code === 'SESSION_REVOKED' && typeof parsedBody.reason === 'string'
857
+ ? parsedBody.reason.slice(0, 64)
858
+ : undefined;
859
+ persistReauthState({
860
+ code,
861
+ message: parsedBody.message,
862
+ ...(revocationReason ? { revocationReason } : {}),
863
+ at: Date.now(),
864
+ });
865
+ throw new types_js_1.PermanentAuthFailure(code, parsedBody.message || code, revocationReason);
856
866
  }
857
867
  // Unknown-shape 401 — unknown code, missing code, or unparseable body.
858
868
  // By construction this is NOT a daemon's actual refresh-family burn
@@ -975,6 +985,9 @@ function needsReauthState() {
975
985
  ...(typeof state.message === 'string' && state.message.length > 0
976
986
  ? { message: state.message }
977
987
  : {}),
988
+ ...(typeof state.revocationReason === 'string' && state.revocationReason.length > 0
989
+ ? { revocationReason: state.revocationReason }
990
+ : {}),
978
991
  since: state.at,
979
992
  };
980
993
  }
@@ -21,6 +21,11 @@ export interface RefreshResponseShape {
21
21
  code?: string;
22
22
  /** Optional human-readable error message. */
23
23
  message?: string;
24
+ /**
25
+ * OSK-16941 — with `code: 'SESSION_REVOKED'`, why the session was revoked
26
+ * (`@skrr-ai/data-provider` `SESSION_REVOCATION_REASONS`).
27
+ */
28
+ reason?: string;
24
29
  /** When 200, the new access token. */
25
30
  token?: string;
26
31
  /** When 200, the (possibly rotated) refresh token. */
@@ -97,7 +97,9 @@ function classifyRefreshResponse(status, body) {
97
97
  const fallback = body?.code === 'REFRESH_MISSING' ? 'Refresh token missing' : reason;
98
98
  return {
99
99
  kind: 'failure',
100
- failure: new types_js_1.PermanentAuthFailure(reason, body?.message ?? fallback),
100
+ failure: new types_js_1.PermanentAuthFailure(reason, body?.message ?? fallback, reason === 'SESSION_REVOKED' && typeof body?.reason === 'string'
101
+ ? body.reason
102
+ : undefined),
101
103
  };
102
104
  }
103
105
  // Unknown-shape 401 (no code, or a code we don't recognise). This is NOT a
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Why a session was signed out, and what the person should do next (OSK-16941).
3
+ *
4
+ * ## Why this file exists
5
+ *
6
+ * The server always knew why it refused a session: `requireJwtAuth` answers
7
+ * `401 SESSION_REVOKED` with a `reason` for an inactive account, an account-wide
8
+ * revocation, a password change and a per-session sign-out. Nothing passed it
9
+ * on. The CLI dropped the field, the web client folded every unrecognised code
10
+ * into "your saved credentials are no longer valid", and a refresh refused for a
11
+ * revoked session answered with no code at all. A person signed out with no
12
+ * explanation reasonably concludes their account was stolen.
13
+ *
14
+ * So the vocabulary lives here, once, beside the one function that turns a
15
+ * reason into words: the API writes these codes, the web login page, the desktop
16
+ * banner, the desktop main process (OS notification and tray) and the CLI all
17
+ * render them through `describeSessionRevocation`.
18
+ *
19
+ * ## Why auth-core, behind its own subpath
20
+ *
21
+ * It was declared in `@skrr-ai/data-provider`, which the Electron main process
22
+ * does not (and should not) depend on — so main kept printing the server's raw
23
+ * message in the OS notification and the tray. auth-core is already the
24
+ * package that LATCHES the reason (`refresh.ts` writes `revocationReason` into
25
+ * `needs-reauth.json`), and every desktop, daemon and CLI process already
26
+ * depends on it. This module imports nothing, so the
27
+ * `@skrr-ai/auth-core/session-revocation` subpath is safe in a browser, React
28
+ * Native and Node alike, the same way `first-party-harness` is.
29
+ * `@skrr-ai/data-provider` re-exports it unchanged: there is still exactly one
30
+ * declaration of the vocabulary and one copy of its words.
31
+ *
32
+ * ## Three closed lists
33
+ *
34
+ * - `SESSION_REVOCATION_REASONS` — what a refused CLIENT is told. Wire values;
35
+ * the 401 body's `reason` field. The account-state members keep the spelling
36
+ * `requireJwtAuth` already sent (`banned`, `pending_deletion`, ...), so a
37
+ * client that already switched on them keeps working.
38
+ * - `SESSION_REVOCATION_CAUSES` — what HAPPENED, recorded in Security activity
39
+ * when sessions are revoked. Each cause names its trigger and the reason the
40
+ * signed-out client is told.
41
+ * - `SESSION_REVOCATION_TRIGGERS` — who or what did it.
42
+ *
43
+ * ## Unknown is a member, and it is never hidden
44
+ *
45
+ * Each list carries an explicit `unknown`. A missing, empty or unrecognised
46
+ * value normalizes to it, and its copy says plainly that we could not tell why.
47
+ * It is never folded into the nearest reassuring reading: "Everything reads
48
+ * healthy and the thing is unusable" (root CLAUDE.md) is exactly what an
49
+ * optimistic default here would produce.
50
+ *
51
+ * Copy avoids contractions in code strings so a terminal and a source file read
52
+ * them the same; the web reads the localized keys instead.
53
+ */
54
+ /**
55
+ * The CLI binary the `cli` surface names when the caller passes no `bin`. A
56
+ * literal because this module imports nothing; `@skrr-ai/data-provider`'s
57
+ * `sessionRevocation.spec` asserts it equals `BRAND_NAME`, so the two cannot
58
+ * drift.
59
+ */
60
+ export declare const SESSION_REVOCATION_DEFAULT_BIN: "skrr";
61
+ export declare const SESSION_REVOCATION_REASONS: readonly ["password_change", "sessions_revoked", "logged_out", "session_limit", "sign_in_method_removed", "security_check", "machine_removed", "banned", "disabled", "deleted", "pending_deletion", "unknown"];
62
+ export type SessionRevocationReason = (typeof SESSION_REVOCATION_REASONS)[number];
63
+ export declare const SESSION_REVOCATION_UNKNOWN: "unknown";
64
+ /**
65
+ * The login-page query parameter that carries a revocation reason across the
66
+ * sign-out redirect (`/login?reason=SESSION_REVOKED&revocation=password_change`).
67
+ * `reason` keeps the refusal CODE it always carried, so a login page that
68
+ * predates this still says something.
69
+ */
70
+ export declare const SESSION_REVOCATION_QUERY_PARAM: "revocation";
71
+ export declare function isSessionRevocationReason(value: unknown): value is SessionRevocationReason;
72
+ /**
73
+ * The canonical reason for any value a server or a URL handed us. Anything not
74
+ * in the vocabulary is `unknown` — never a guess.
75
+ */
76
+ export declare function normalizeSessionRevocationReason(value: unknown): SessionRevocationReason;
77
+ /**
78
+ * Refusal codes that end a session WITHOUT revoking it, each of which a surface
79
+ * explains in its own sentence (expired, no longer valid). Every other code a
80
+ * refusal latch can carry is read as a revocation.
81
+ */
82
+ export declare const NON_REVOCATION_REFUSAL_CODES: readonly ["REFRESH_EXPIRED", "TOKEN_EXPIRED", "REFRESH_INVALID", "TOKEN_INVALID"];
83
+ export type NonRevocationRefusalCode = (typeof NON_REVOCATION_REFUSAL_CODES)[number];
84
+ export declare function isNonRevocationRefusalCode(value: unknown): value is NonRevocationRefusalCode;
85
+ /**
86
+ * The revocation reason a refusal names — from a refusal CODE (`SESSION_REVOKED`,
87
+ * `REFRESH_REUSED`, ...) and the revocation reason that travelled beside it —
88
+ * or `null` when the code is one of `NON_REVOCATION_REFUSAL_CODES`.
89
+ *
90
+ * - A revocation reason, when present, always wins.
91
+ * - `SESSION_REVOKED` with no reason beside it IS a revocation whose reason we
92
+ * do not know, so it is `unknown`.
93
+ * - `REFRESH_REUSED` is the refresh-family burn, i.e. a security check.
94
+ * - Any other code, including none at all, is `unknown`: "we could not tell
95
+ * why", never a guess.
96
+ *
97
+ * Shared by the web banner and the desktop main process so the two read one
98
+ * latch the same way.
99
+ */
100
+ export declare function sessionRevocationForRefusal(code: string | undefined | null, revocation?: string | undefined | null): SessionRevocationReason | null;
101
+ export declare const SESSION_REVOCATION_NEXT_STEPS: readonly ["sign_in", "sign_in_and_review", "cancel_deletion", "contact_support", "use_another_account"];
102
+ export type SessionRevocationNextStep = (typeof SESSION_REVOCATION_NEXT_STEPS)[number];
103
+ /** Where the copy is shown: the CLI names its command, an app names a screen. */
104
+ export type SessionRevocationSurface = 'cli' | 'app';
105
+ /** Translation keys the web client renders; English values mirror the copy above. */
106
+ export interface SessionRevocationKeys {
107
+ title: `com_auth_revoked_${SessionRevocationReason}_title`;
108
+ detail: `com_auth_revoked_${SessionRevocationReason}_detail`;
109
+ nextStep: `com_auth_revoked_next_${SessionRevocationNextStep}`;
110
+ }
111
+ export interface SessionRevocationDescription {
112
+ /** The canonical reason; `unknown` for anything unrecognised or missing. */
113
+ reason: SessionRevocationReason;
114
+ /**
115
+ * The value as received when it was NOT a recognised reason (and not empty),
116
+ * so a surface can show the code it could not explain instead of losing it.
117
+ */
118
+ unrecognized: string | null;
119
+ title: string;
120
+ detail: string;
121
+ nextStep: SessionRevocationNextStep;
122
+ /** The next step as a sentence for the requested surface. */
123
+ nextStepText: string;
124
+ /** Whether the person should look at Security activity to explain it. */
125
+ reviewSecurityActivity: boolean;
126
+ keys: SessionRevocationKeys;
127
+ }
128
+ /**
129
+ * THE copy for a revoked session. Never throws, whatever it is given: the server
130
+ * can ship a reason before a client knows it, and that case must still say
131
+ * something true ("we could not tell why"), not nothing.
132
+ */
133
+ export declare function describeSessionRevocation(value: unknown, { surface, bin, }?: {
134
+ surface?: SessionRevocationSurface;
135
+ bin?: string;
136
+ }): SessionRevocationDescription;
137
+ /** One line for a terminal or a notification: title, detail and next step. */
138
+ export declare function formatSessionRevocation(value: unknown, options?: {
139
+ surface?: SessionRevocationSurface;
140
+ bin?: string;
141
+ }): string;
142
+ export declare const SESSION_REVOCATION_TRIGGERS: readonly ["account_owner", "administrator", "security_system", "external_provider", "account_lifecycle", "unknown"];
143
+ export type SessionRevocationTrigger = (typeof SESSION_REVOCATION_TRIGGERS)[number];
144
+ export declare const SESSION_REVOCATION_CAUSES: readonly ["password_change", "password_reset", "sign_out_everywhere", "sign_out_other_sessions", "session_signed_out", "two_factor_change", "email_change", "email_change_reverted", "account_recovery", "reported_not_me", "sign_in_method_removed", "machine_removed", "oauth_app_revoked", "session_limit", "suspicious_reuse", "administrator", "account_suspended", "external_provider", "account_deletion_scheduled", "account_superseded", "unverified_account_cleanup", "unknown"];
145
+ export type SessionRevocationCause = (typeof SESSION_REVOCATION_CAUSES)[number];
146
+ interface CauseFacts {
147
+ trigger: SessionRevocationTrigger;
148
+ /** What a client signed out by this cause is told. */
149
+ reason: SessionRevocationReason;
150
+ /** English sentence for the Security activity row. */
151
+ copy: string;
152
+ }
153
+ export declare const SESSION_REVOCATION_CAUSE_FACTS: Readonly<Record<SessionRevocationCause, CauseFacts>>;
154
+ export declare const SESSION_REVOCATION_TRIGGER_COPY: Readonly<Record<SessionRevocationTrigger, string>>;
155
+ export declare function normalizeSessionRevocationCause(value: unknown): SessionRevocationCause;
156
+ export declare function normalizeSessionRevocationTrigger(value: unknown): SessionRevocationTrigger;
157
+ export interface SessionRevocationActivityDescription {
158
+ cause: SessionRevocationCause;
159
+ trigger: SessionRevocationTrigger;
160
+ reason: SessionRevocationReason;
161
+ causeText: string;
162
+ triggerText: string;
163
+ keys: {
164
+ cause: `com_nav_security_activity_revocation_cause_${SessionRevocationCause}`;
165
+ trigger: `com_nav_security_activity_revocation_trigger_${SessionRevocationTrigger}`;
166
+ };
167
+ }
168
+ /**
169
+ * How Security activity explains one recorded revocation. A stored trigger wins
170
+ * over the cause's usual one (an administrator can change a password too); an
171
+ * unreadable one is `unknown`, never the cause's default.
172
+ */
173
+ export declare function describeSessionRevocationActivity(record: {
174
+ cause?: unknown;
175
+ trigger?: unknown;
176
+ }): SessionRevocationActivityDescription;
177
+ export {};