@astrale-os/cli 1.0.0-beta.32 → 1.0.0-beta.43

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 (441) hide show
  1. package/CHANGELOG.md +928 -0
  2. package/README.md +53 -43
  3. package/THIRD-PARTY-NOTICES.md +37 -1
  4. package/dist/astrale.js +349631 -83669
  5. package/dist/public/connect-core.js +16 -47
  6. package/dist/public/keys/index.js +1 -1
  7. package/dist/types/admin/contract.d.ts +11 -0
  8. package/dist/types/admin/graph/index.d.ts +1 -0
  9. package/dist/types/admin/graph/nodes.d.ts +12 -0
  10. package/dist/types/admin/instance/client.d.ts +2 -0
  11. package/dist/types/connection/lifetime.d.ts +1 -1
  12. package/dist/types/errors.d.ts +3 -0
  13. package/dist/types/lib/proc.d.ts +1 -0
  14. package/dist/types/lib/update.d.ts +15 -7
  15. package/package.json +8 -6
  16. package/studio/client/dist/assets/index-5C1uT6ML.css +2 -0
  17. package/studio/client/dist/assets/index-C4kNlvwF.js +80 -0
  18. package/studio/client/dist/assets/schema-studio-BR9d0faB.js +8 -0
  19. package/studio/client/dist/index.html +13 -2
  20. package/studio/package.json +2 -1
  21. package/studio/server/agent/ask.test.ts +7 -1
  22. package/studio/server/agent/bridge/grant.ts +15 -3
  23. package/studio/server/agent/prompts/system.test.ts +5 -0
  24. package/studio/server/agent/prompts/system.ts +19 -4
  25. package/studio/server/agent/routes.test.ts +39 -1
  26. package/studio/server/agent/routes.ts +3 -0
  27. package/studio/server/agent/run/coordinator.test.ts +7 -1
  28. package/studio/server/agent/run/preparation.ts +1 -0
  29. package/studio/server/agent/run/transcript.test.ts +47 -2
  30. package/studio/server/agent/run/transcript.ts +32 -3
  31. package/studio/server/api/documents.test.ts +31 -0
  32. package/studio/server/api/documents.ts +35 -1
  33. package/studio/server/api-agent-loadout.test.ts +7 -1
  34. package/studio/server/api.test.ts +7 -1
  35. package/studio/server/cache.ts +4 -4
  36. package/studio/server/detect.ts +9 -12
  37. package/studio/server/domain.test.ts +83 -3
  38. package/studio/server/domain.ts +205 -27
  39. package/studio/server/handoff/service.ts +1 -1
  40. package/studio/server/index.ts +5 -8
  41. package/studio/server/introspect/extractor.ts +111 -17
  42. package/studio/server/introspect/overlay-tsmorph.test.ts +9 -9
  43. package/studio/server/introspect/overlay.ts +1 -1
  44. package/studio/server/introspect/runtime.ts +9 -1
  45. package/studio/server/introspect/source-overlay/spans.ts +2 -5
  46. package/studio/server/lifecycle.ts +1 -1
  47. package/studio/server/state/baseline.test.ts +14 -0
  48. package/studio/server/state/baseline.ts +16 -2
  49. package/studio/server/watch.test.ts +2 -1
  50. package/studio/server/watch.ts +5 -2
  51. package/studio/server/workspace/create.ts +9 -8
  52. package/studio/server/workspace-state.ts +4 -6
  53. package/studio/server/workspace-watch.ts +33 -22
  54. package/studio/shared/contracts/agent.ts +3 -0
  55. package/viewer/dist/main.js +12 -12
  56. package/src/__tests__/fixtures/publication.ts +0 -20
  57. package/src/admin/.spec/api.d.ts +0 -3
  58. package/src/admin/.spec/architecture.md +0 -22
  59. package/src/admin/.spec/icon.svg +0 -3
  60. package/src/admin/.spec/layout.ts +0 -6
  61. package/src/admin/__tests__/fixture.ts +0 -25
  62. package/src/admin/catalog/.spec/api.d.ts +0 -63
  63. package/src/admin/catalog/.spec/architecture.md +0 -7
  64. package/src/admin/catalog/.spec/icon.svg +0 -3
  65. package/src/admin/catalog/.spec/layout.ts +0 -6
  66. package/src/admin/catalog/__tests__/client.test.ts +0 -245
  67. package/src/admin/catalog/client.ts +0 -195
  68. package/src/admin/catalog/index.ts +0 -13
  69. package/src/admin/catalog/model.ts +0 -41
  70. package/src/admin/catalog/tsconfig.json +0 -8
  71. package/src/admin/contract.ts +0 -47
  72. package/src/admin/graph/.spec/api.d.ts +0 -22
  73. package/src/admin/graph/.spec/architecture.md +0 -5
  74. package/src/admin/graph/.spec/icon.svg +0 -3
  75. package/src/admin/graph/.spec/layout.ts +0 -3
  76. package/src/admin/graph/index.ts +0 -6
  77. package/src/admin/graph/nodes.ts +0 -56
  78. package/src/admin/index.ts +0 -2
  79. package/src/admin/instance/.spec/api.d.ts +0 -62
  80. package/src/admin/instance/.spec/architecture.md +0 -10
  81. package/src/admin/instance/.spec/icon.svg +0 -3
  82. package/src/admin/instance/.spec/layout.ts +0 -6
  83. package/src/admin/instance/__tests__/client.test.ts +0 -273
  84. package/src/admin/instance/client.ts +0 -191
  85. package/src/admin/instance/index.ts +0 -15
  86. package/src/admin/instance/model.ts +0 -59
  87. package/src/admin/instance/tsconfig.json +0 -8
  88. package/src/commands/__tests__/admin-instance.test.ts +0 -91
  89. package/src/commands/__tests__/auth-login.test.ts +0 -231
  90. package/src/commands/__tests__/auth-token.test.ts +0 -223
  91. package/src/commands/__tests__/call-describe.test.ts +0 -80
  92. package/src/commands/__tests__/call.test.ts +0 -63
  93. package/src/commands/__tests__/domain-install-operation.test.ts +0 -145
  94. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  95. package/src/commands/__tests__/domain-list.test.ts +0 -133
  96. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  97. package/src/commands/__tests__/install-direct.test.ts +0 -128
  98. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  99. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  100. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  101. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  102. package/src/commands/__tests__/instance-status.test.ts +0 -139
  103. package/src/commands/__tests__/instance-use.test.ts +0 -67
  104. package/src/commands/__tests__/introspect-parse.test.ts +0 -100
  105. package/src/commands/__tests__/logs.test.ts +0 -345
  106. package/src/commands/__tests__/read-commands.test.ts +0 -377
  107. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  108. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  109. package/src/commands/__tests__/token-ttl.test.ts +0 -66
  110. package/src/commands/__tests__/update.test.ts +0 -95
  111. package/src/commands/__tests__/view-build.test.ts +0 -58
  112. package/src/commands/__tests__/view.test.ts +0 -197
  113. package/src/commands/admin/status.ts +0 -61
  114. package/src/commands/admin/use.ts +0 -100
  115. package/src/commands/auth/login.ts +0 -82
  116. package/src/commands/auth/logout.ts +0 -53
  117. package/src/commands/auth/status.ts +0 -86
  118. package/src/commands/auth/token.ts +0 -174
  119. package/src/commands/browser.ts +0 -236
  120. package/src/commands/call-describe.ts +0 -123
  121. package/src/commands/call.ts +0 -230
  122. package/src/commands/domain/install.ts +0 -575
  123. package/src/commands/domain/list.ts +0 -155
  124. package/src/commands/domain/publish.ts +0 -136
  125. package/src/commands/domain/uninstall.ts +0 -128
  126. package/src/commands/get.ts +0 -69
  127. package/src/commands/identity/__tests__/register.test.ts +0 -93
  128. package/src/commands/identity/create.ts +0 -35
  129. package/src/commands/identity/delete.ts +0 -24
  130. package/src/commands/identity/export.ts +0 -46
  131. package/src/commands/identity/import.ts +0 -61
  132. package/src/commands/identity/list.ts +0 -56
  133. package/src/commands/identity/register.ts +0 -195
  134. package/src/commands/identity/sync.ts +0 -38
  135. package/src/commands/identity/unsync.ts +0 -34
  136. package/src/commands/identity/use.ts +0 -24
  137. package/src/commands/identity/whoami.ts +0 -34
  138. package/src/commands/idp/add.ts +0 -150
  139. package/src/commands/idp/list.ts +0 -57
  140. package/src/commands/idp/refresh.ts +0 -38
  141. package/src/commands/idp/remove.ts +0 -36
  142. package/src/commands/idp/show.ts +0 -29
  143. package/src/commands/instance/active.ts +0 -73
  144. package/src/commands/instance/bookmark.ts +0 -101
  145. package/src/commands/instance/create.ts +0 -61
  146. package/src/commands/instance/delete.ts +0 -69
  147. package/src/commands/instance/forget.ts +0 -26
  148. package/src/commands/instance/list.ts +0 -197
  149. package/src/commands/instance/status.ts +0 -92
  150. package/src/commands/instance/use.ts +0 -263
  151. package/src/commands/introspect.ts +0 -129
  152. package/src/commands/logs.ts +0 -371
  153. package/src/commands/mutate.ts +0 -122
  154. package/src/commands/query.ts +0 -142
  155. package/src/commands/session/analyze.ts +0 -72
  156. package/src/commands/session/list.ts +0 -36
  157. package/src/commands/setup.ts +0 -54
  158. package/src/commands/status.ts +0 -60
  159. package/src/commands/studio.ts +0 -434
  160. package/src/commands/token.ts +0 -121
  161. package/src/commands/ui/__tests__/commands.test.ts +0 -152
  162. package/src/commands/ui/add.ts +0 -51
  163. package/src/commands/ui/doctor.ts +0 -21
  164. package/src/commands/ui/init.ts +0 -38
  165. package/src/commands/ui/list.ts +0 -26
  166. package/src/commands/ui/preset-apply.ts +0 -19
  167. package/src/commands/ui/preset-list.ts +0 -12
  168. package/src/commands/ui/shared.ts +0 -25
  169. package/src/commands/update.ts +0 -356
  170. package/src/commands/use.ts +0 -86
  171. package/src/commands/view-serve.ts +0 -26
  172. package/src/commands/view.ts +0 -658
  173. package/src/connect-core.test.ts +0 -38
  174. package/src/connect-core.ts +0 -42
  175. package/src/connection/.spec/api.d.ts +0 -110
  176. package/src/connection/.spec/architecture.md +0 -58
  177. package/src/connection/.spec/capabilities/connection.ts +0 -13
  178. package/src/connection/.spec/examples/call.ts +0 -7
  179. package/src/connection/.spec/flows/command.ts +0 -20
  180. package/src/connection/.spec/flows/session.ts +0 -62
  181. package/src/connection/.spec/laws/connection.ts +0 -213
  182. package/src/connection/.spec/layout.ts +0 -22
  183. package/src/connection/__tests__/auth.test.ts +0 -129
  184. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  185. package/src/connection/__tests__/call.test.ts +0 -17
  186. package/src/connection/__tests__/credential.test.ts +0 -254
  187. package/src/connection/__tests__/errors.test.ts +0 -577
  188. package/src/connection/__tests__/exchange.test.ts +0 -404
  189. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  190. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  191. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  192. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  193. package/src/connection/__tests__/managed.test.ts +0 -39
  194. package/src/connection/__tests__/reasons.test.ts +0 -78
  195. package/src/connection/__tests__/self.test.ts +0 -71
  196. package/src/connection/__tests__/session.test.ts +0 -144
  197. package/src/connection/__tests__/target.test.ts +0 -95
  198. package/src/connection/auth.ts +0 -265
  199. package/src/connection/call.ts +0 -7
  200. package/src/connection/command.ts +0 -67
  201. package/src/connection/credential.ts +0 -138
  202. package/src/connection/errors.ts +0 -1
  203. package/src/connection/exchange.ts +0 -394
  204. package/src/connection/failure/classify.ts +0 -110
  205. package/src/connection/failure/index.ts +0 -18
  206. package/src/connection/failure/model.ts +0 -28
  207. package/src/connection/failure/render.ts +0 -116
  208. package/src/connection/index.ts +0 -8
  209. package/src/connection/lifetime.ts +0 -25
  210. package/src/connection/reasons.ts +0 -209
  211. package/src/connection/self.ts +0 -138
  212. package/src/connection/session.ts +0 -203
  213. package/src/connection/target.ts +0 -112
  214. package/src/connection/tsconfig.json +0 -6
  215. package/src/errors.ts +0 -66
  216. package/src/graph/.spec/api.d.ts +0 -41
  217. package/src/graph/.spec/laws/documents.ts +0 -24
  218. package/src/graph/.spec/laws/projection.ts +0 -13
  219. package/src/graph/.spec/layout.ts +0 -14
  220. package/src/graph/__tests__/mutation.test.ts +0 -51
  221. package/src/graph/__tests__/projection.test.ts +0 -22
  222. package/src/graph/__tests__/query.test.ts +0 -180
  223. package/src/graph/class.ts +0 -30
  224. package/src/graph/index.ts +0 -4
  225. package/src/graph/mutation.ts +0 -46
  226. package/src/graph/projection.ts +0 -21
  227. package/src/graph/query.ts +0 -95
  228. package/src/graph/tsconfig.json +0 -6
  229. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  230. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  231. package/src/identity/.spec/api.d.ts +0 -124
  232. package/src/identity/.spec/architecture.md +0 -33
  233. package/src/identity/.spec/capabilities/identity.ts +0 -7
  234. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  235. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  236. package/src/identity/.spec/flows/import.ts +0 -29
  237. package/src/identity/.spec/laws/identity.ts +0 -56
  238. package/src/identity/.spec/layout.ts +0 -13
  239. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -65
  240. package/src/identity/__tests__/registration.test.ts +0 -64
  241. package/src/identity/__tests__/registry.test.ts +0 -74
  242. package/src/identity/__tests__/transfer.test.ts +0 -198
  243. package/src/identity/index.ts +0 -23
  244. package/src/identity/registration.ts +0 -72
  245. package/src/identity/registry.ts +0 -181
  246. package/src/identity/transfer.ts +0 -187
  247. package/src/identity/tsconfig.json +0 -6
  248. package/src/index.ts +0 -1
  249. package/src/keys/.spec/api.d.ts +0 -74
  250. package/src/keys/.spec/architecture.md +0 -13
  251. package/src/keys/.spec/laws/keys.ts +0 -43
  252. package/src/keys/.spec/layout.ts +0 -6
  253. package/src/keys/__tests__/algorithm.test.ts +0 -39
  254. package/src/keys/__tests__/keys.test.ts +0 -172
  255. package/src/keys/algorithm.ts +0 -33
  256. package/src/keys/credential.ts +0 -113
  257. package/src/keys/index.ts +0 -14
  258. package/src/keys/pair.ts +0 -219
  259. package/src/keys/tsconfig.json +0 -6
  260. package/src/lib/__tests__/admin-target.test.ts +0 -184
  261. package/src/lib/__tests__/binary.test.ts +0 -70
  262. package/src/lib/__tests__/browser-retention.test.ts +0 -212
  263. package/src/lib/__tests__/command-dx.test.ts +0 -102
  264. package/src/lib/__tests__/concurrency.test.ts +0 -62
  265. package/src/lib/__tests__/config.test.ts +0 -81
  266. package/src/lib/__tests__/design.test.ts +0 -99
  267. package/src/lib/__tests__/domain-publication.test.ts +0 -138
  268. package/src/lib/__tests__/format.test.ts +0 -22
  269. package/src/lib/__tests__/idp-session.driver.ts +0 -60
  270. package/src/lib/__tests__/idp-session.test.ts +0 -404
  271. package/src/lib/__tests__/idp.test.ts +0 -415
  272. package/src/lib/__tests__/instance-candidates.test.ts +0 -146
  273. package/src/lib/__tests__/instance-target.test.ts +0 -213
  274. package/src/lib/__tests__/instance.test.ts +0 -192
  275. package/src/lib/__tests__/local-status.test.ts +0 -202
  276. package/src/lib/__tests__/log-errors.test.ts +0 -64
  277. package/src/lib/__tests__/log.test.ts +0 -31
  278. package/src/lib/__tests__/meta.test.ts +0 -55
  279. package/src/lib/__tests__/output.test.ts +0 -162
  280. package/src/lib/__tests__/panel.test.ts +0 -40
  281. package/src/lib/__tests__/port.test.ts +0 -44
  282. package/src/lib/__tests__/prompt.test.ts +0 -25
  283. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  284. package/src/lib/__tests__/self.test.ts +0 -50
  285. package/src/lib/__tests__/skills.test.ts +0 -834
  286. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  287. package/src/lib/__tests__/table.test.ts +0 -53
  288. package/src/lib/__tests__/update.test.ts +0 -511
  289. package/src/lib/__tests__/use-target.test.ts +0 -56
  290. package/src/lib/__tests__/validation.test.ts +0 -34
  291. package/src/lib/__tests__/view-assets.test.ts +0 -171
  292. package/src/lib/__tests__/view-external-open-intent.test.ts +0 -150
  293. package/src/lib/__tests__/view-external-open-origins.test.ts +0 -27
  294. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  295. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  296. package/src/lib/__tests__/view-server.test.ts +0 -91
  297. package/src/lib/__tests__/view-session.test.ts +0 -100
  298. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  299. package/src/lib/admin-domain.ts +0 -43
  300. package/src/lib/admin-instance.ts +0 -56
  301. package/src/lib/admin-target.ts +0 -290
  302. package/src/lib/binary.ts +0 -127
  303. package/src/lib/browser-retention.ts +0 -210
  304. package/src/lib/browser.ts +0 -150
  305. package/src/lib/ca-fetch.ts +0 -133
  306. package/src/lib/command-dx.ts +0 -191
  307. package/src/lib/concurrency.ts +0 -31
  308. package/src/lib/config.ts +0 -57
  309. package/src/lib/credential-lifetime.ts +0 -24
  310. package/src/lib/domain-publication.ts +0 -104
  311. package/src/lib/failure-debug.ts +0 -26
  312. package/src/lib/format.ts +0 -4
  313. package/src/lib/idp-session.ts +0 -156
  314. package/src/lib/idp.ts +0 -926
  315. package/src/lib/instance-candidates.ts +0 -49
  316. package/src/lib/instance-target.ts +0 -197
  317. package/src/lib/instance.ts +0 -468
  318. package/src/lib/invocation.ts +0 -11
  319. package/src/lib/local-status.ts +0 -152
  320. package/src/lib/log.ts +0 -143
  321. package/src/lib/login-flow.ts +0 -201
  322. package/src/lib/meta.ts +0 -90
  323. package/src/lib/output.ts +0 -238
  324. package/src/lib/panel.ts +0 -61
  325. package/src/lib/port.ts +0 -41
  326. package/src/lib/proc.ts +0 -87
  327. package/src/lib/prompt.ts +0 -136
  328. package/src/lib/provision-instance.ts +0 -139
  329. package/src/lib/sdk-deps.ts +0 -104
  330. package/src/lib/self.ts +0 -22
  331. package/src/lib/skills/lock.ts +0 -117
  332. package/src/lib/skills/sync.ts +0 -878
  333. package/src/lib/skills.ts +0 -120
  334. package/src/lib/table.ts +0 -62
  335. package/src/lib/update.ts +0 -568
  336. package/src/lib/use-target.ts +0 -24
  337. package/src/lib/validation.ts +0 -59
  338. package/src/lib/view/assets.ts +0 -87
  339. package/src/lib/view/external-open-intent.ts +0 -41
  340. package/src/lib/view/external-open-origins.ts +0 -37
  341. package/src/lib/view/host-capabilities.ts +0 -17
  342. package/src/lib/view/open-intent.ts +0 -67
  343. package/src/lib/view/port-allocation.ts +0 -19
  344. package/src/lib/view/resolve.ts +0 -111
  345. package/src/lib/view/server.ts +0 -259
  346. package/src/lib/view/session.ts +0 -154
  347. package/src/lib/view/snapshot.ts +0 -101
  348. package/src/paths/.spec/api.d.ts +0 -13
  349. package/src/paths/.spec/architecture.md +0 -5
  350. package/src/paths/.spec/layout.ts +0 -3
  351. package/src/paths/index.ts +0 -13
  352. package/src/program/.spec/api.d.ts +0 -43
  353. package/src/program/.spec/architecture.md +0 -18
  354. package/src/program/.spec/laws/program.ts +0 -29
  355. package/src/program/.spec/layout.ts +0 -14
  356. package/src/program/__tests__/program.test.ts +0 -556
  357. package/src/program/argv.ts +0 -14
  358. package/src/program/build.ts +0 -205
  359. package/src/program/command.ts +0 -43
  360. package/src/program/index.ts +0 -3
  361. package/src/program/options.ts +0 -41
  362. package/src/program/registry.ts +0 -64
  363. package/src/program/tsconfig.json +0 -6
  364. package/src/setup/__tests__/instance-step.test.ts +0 -256
  365. package/src/setup/__tests__/util.test.ts +0 -29
  366. package/src/setup/engine.ts +0 -83
  367. package/src/setup/render.ts +0 -107
  368. package/src/setup/steps/admin.ts +0 -93
  369. package/src/setup/steps/agent-browser.ts +0 -81
  370. package/src/setup/steps/auth.ts +0 -54
  371. package/src/setup/steps/domain.ts +0 -68
  372. package/src/setup/steps/index.ts +0 -18
  373. package/src/setup/steps/instance.ts +0 -206
  374. package/src/setup/steps/skills-bridge.ts +0 -70
  375. package/src/setup/steps/skills.ts +0 -61
  376. package/src/setup/types.ts +0 -61
  377. package/src/setup/util.ts +0 -34
  378. package/src/state/.spec/api.d.ts +0 -152
  379. package/src/state/.spec/architecture.md +0 -45
  380. package/src/state/.spec/capabilities/state.ts +0 -7
  381. package/src/state/.spec/flows/identity-update.ts +0 -22
  382. package/src/state/.spec/laws/state.ts +0 -73
  383. package/src/state/.spec/layout.ts +0 -15
  384. package/src/state/__tests__/exchange-credentials.test.ts +0 -341
  385. package/src/state/__tests__/files.test.ts +0 -136
  386. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  387. package/src/state/__tests__/fixtures/session-route-process.ts +0 -93
  388. package/src/state/__tests__/identities.test.ts +0 -142
  389. package/src/state/__tests__/paths.test.ts +0 -28
  390. package/src/state/__tests__/session-routes.test.ts +0 -138
  391. package/src/state/exchange-credentials.ts +0 -250
  392. package/src/state/files.ts +0 -170
  393. package/src/state/identities.ts +0 -229
  394. package/src/state/index.ts +0 -31
  395. package/src/state/paths.ts +0 -64
  396. package/src/state/session-routes.ts +0 -34
  397. package/src/state/tsconfig.json +0 -6
  398. package/src/telemetry/__tests__/analyze-log.test.ts +0 -38
  399. package/src/telemetry/__tests__/gate.test.ts +0 -63
  400. package/src/telemetry/__tests__/recorder.test.ts +0 -111
  401. package/src/telemetry/__tests__/redact.test.ts +0 -79
  402. package/src/telemetry/__tests__/retention.test.ts +0 -267
  403. package/src/telemetry/__tests__/session.test.ts +0 -166
  404. package/src/telemetry/__tests__/settings.test.ts +0 -102
  405. package/src/telemetry/__tests__/store-scan.test.ts +0 -128
  406. package/src/telemetry/__tests__/trigger.test.ts +0 -78
  407. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  408. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  409. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  410. package/src/telemetry/adapters/claude-code.ts +0 -90
  411. package/src/telemetry/adapters/codex.ts +0 -160
  412. package/src/telemetry/adapters/index.ts +0 -45
  413. package/src/telemetry/adapters/types.ts +0 -21
  414. package/src/telemetry/analyze.ts +0 -249
  415. package/src/telemetry/gate.ts +0 -79
  416. package/src/telemetry/recorder.ts +0 -68
  417. package/src/telemetry/redact.ts +0 -53
  418. package/src/telemetry/retention.ts +0 -176
  419. package/src/telemetry/session.ts +0 -94
  420. package/src/telemetry/settings.ts +0 -79
  421. package/src/telemetry/store.ts +0 -174
  422. package/src/telemetry/trigger.ts +0 -107
  423. package/src/telemetry/types.ts +0 -64
  424. package/src/test-utils.ts +0 -18
  425. package/src/ui/.spec/api.d.ts +0 -14
  426. package/src/ui/.spec/architecture.md +0 -14
  427. package/src/ui/.spec/laws.ts +0 -50
  428. package/src/ui/.spec/layout.ts +0 -16
  429. package/src/ui/__tests__/ui.test.ts +0 -1742
  430. package/src/ui/index.ts +0 -13
  431. package/src/ui/lock.ts +0 -89
  432. package/src/ui/model.ts +0 -83
  433. package/src/ui/operations.ts +0 -1044
  434. package/src/ui/project.ts +0 -333
  435. package/src/ui/release.ts +0 -398
  436. package/src/ui/runner.ts +0 -18
  437. package/studio/client/dist/assets/index-BFVFs_8x.js +0 -81
  438. package/studio/client/dist/assets/index-DuB9iUdu.css +0 -2
  439. package/studio/client/dist/assets/schema-studio-DH6oEWME.js +0 -8
  440. package/studio/tsconfig.json +0 -24
  441. package/viewer/tsconfig.json +0 -13
@@ -1,180 +0,0 @@
1
- import { describe, expect, test } from 'bun:test'
2
-
3
- import { prepareQuery } from '../query'
4
-
5
- describe('prepareQuery', () => {
6
- /** @evidence TEST-CLI-GRAPH-AUTHORS-QUERY-V6 */
7
- test('authors the supported Path and exact-edge subset as canonical Query V6', () => {
8
- const prepared = prepareQuery({
9
- sources: ['/:notes.example.dev:class.Note'],
10
- edge: '/:notes.example.dev:class.references',
11
- direction: 'incoming',
12
- limit: '25',
13
- cursor: 'next-page',
14
- })
15
-
16
- expect(JSON.parse(JSON.stringify(prepared))).toEqual({
17
- ast: {
18
- format: 'astrale.graph.query',
19
- version: 'v6',
20
- source: {
21
- kind: 'node',
22
- terms: [{ kind: 'path', path: '/:notes.example.dev:class.Note' }],
23
- binding: 'n0',
24
- },
25
- steps: [
26
- {
27
- op: 'expand',
28
- from: 'n0',
29
- via: [{ origin: 'notes.example.dev', kind: 'class', name: 'references' }],
30
- direction: 'incoming',
31
- bindings: { edge: 'e0', node: 'n1' },
32
- },
33
- ],
34
- select: { kind: 'graph', binding: 'n1' },
35
- },
36
- page: { size: 25, after: 'next-page' },
37
- })
38
- })
39
-
40
- /** @evidence TEST-CLI-GRAPH-AUTHORS-CLASS-QUERY */
41
- test('authors an exact Class source without backend query text', () => {
42
- const prepared = prepareQuery({
43
- sources: [],
44
- class: '/:issues.astrale.ai:class.Issue',
45
- limit: '201',
46
- })
47
-
48
- expect(JSON.parse(JSON.stringify(prepared.ast))).toEqual({
49
- format: 'astrale.graph.query',
50
- version: 'v6',
51
- source: {
52
- kind: 'node',
53
- terms: [
54
- {
55
- kind: 'class',
56
- class: { origin: 'issues.astrale.ai', kind: 'class', name: 'Issue' },
57
- },
58
- ],
59
- binding: 'n0',
60
- },
61
- steps: [],
62
- select: { kind: 'graph', binding: 'n0' },
63
- })
64
- expect(prepared.page).toEqual({ size: 201 })
65
- })
66
-
67
- test('unions positional Paths and one Class source in authored order', () => {
68
- const prepared = prepareQuery({
69
- sources: ['@note'],
70
- class: '/:issues.astrale.ai:class.Issue',
71
- })
72
-
73
- expect(JSON.parse(JSON.stringify(prepared.ast.source))).toEqual({
74
- kind: 'node',
75
- terms: [
76
- { kind: 'path', path: '@note' },
77
- {
78
- kind: 'class',
79
- class: { origin: 'issues.astrale.ai', kind: 'class', name: 'Issue' },
80
- },
81
- ],
82
- binding: 'n0',
83
- })
84
- })
85
-
86
- /** @evidence TEST-CLI-GRAPH-ADMITS-QUERY-V6-ORDERING */
87
- test('admits one exact Property-ordered Query V6 document', () => {
88
- const ast = {
89
- format: 'astrale.graph.query',
90
- version: 'v6',
91
- source: {
92
- kind: 'node',
93
- terms: [
94
- {
95
- kind: 'class',
96
- class: { origin: 'notes.example.dev', kind: 'class', name: 'Note' },
97
- },
98
- ],
99
- binding: 'n0',
100
- },
101
- steps: [],
102
- select: {
103
- kind: 'graph',
104
- binding: 'n0',
105
- order: {
106
- property: 'notes.example.dev:class.Note.property.sequence',
107
- direction: 'desc',
108
- unranked: 'last',
109
- },
110
- },
111
- }
112
-
113
- const prepared = prepareQuery({ sources: [], ast, limit: '3' })
114
- expect(JSON.parse(JSON.stringify(prepared.ast))).toEqual(ast)
115
- expect(prepared.page).toEqual({ size: 3 })
116
- })
117
-
118
- /** @evidence TEST-CLI-GRAPH-ADMITS-QUERY-V6-PROJECTIONS */
119
- test('admits exact Node and Edge projection profiles in Query V6 documents', () => {
120
- const source = {
121
- terms: [{ kind: 'path', path: '/:notes.example.dev:class.Note' }],
122
- binding: 'n0',
123
- kind: 'node',
124
- } as const
125
- const node = {
126
- format: 'astrale.graph.query',
127
- version: 'v6',
128
- source,
129
- steps: [],
130
- select: { kind: 'nodes', binding: 'n0', projection: { kind: 'reference' } },
131
- }
132
- const edge = {
133
- format: 'astrale.graph.query',
134
- version: 'v6',
135
- source,
136
- steps: [
137
- {
138
- op: 'expand',
139
- from: 'n0',
140
- via: [{ origin: 'notes.example.dev', kind: 'class', name: 'references' }],
141
- direction: 'outgoing',
142
- bindings: { edge: 'e0', node: 'n1' },
143
- },
144
- ],
145
- select: {
146
- kind: 'edges',
147
- binding: 'e0',
148
- projection: { edge: 'value', source: 'reference', target: 'value' },
149
- },
150
- }
151
-
152
- expect(
153
- JSON.parse(JSON.stringify(prepareQuery({ sources: [], ast: node, limit: '5' }).ast)),
154
- ).toEqual(node)
155
- expect(
156
- JSON.parse(JSON.stringify(prepareQuery({ sources: [], ast: edge, limit: '5' }).ast)),
157
- ).toEqual(edge)
158
- })
159
-
160
- /** @evidence TEST-CLI-GRAPH-REJECTS-LEGACY-QUERY */
161
- test('rejects V1 queries and unsupported combinations locally', () => {
162
- expect(() => prepareQuery({ sources: [], ast: { version: 1, from: ['/'] } })).toThrow()
163
- expect(() =>
164
- prepareQuery({ sources: ['/:notes.example.dev:class.Note'], direction: 'incident' }),
165
- ).toThrow('--direction requires --edge')
166
- expect(() =>
167
- prepareQuery({ sources: ['/:notes.example.dev:class.Note'], limit: 'all' }),
168
- ).toThrow('--limit must be a positive integer')
169
- expect(() =>
170
- prepareQuery({
171
- sources: [],
172
- ast: {},
173
- class: '/:notes.example.dev:class.Note',
174
- }),
175
- ).toThrow('--ast/--file cannot be combined with sources, --class, --edge, or --direction')
176
- expect(() => prepareQuery({ sources: [], class: '/:notes.example.dev:view.note' })).toThrow(
177
- '--class must be one canonical Class Path',
178
- )
179
- })
180
- })
@@ -1,30 +0,0 @@
1
- import type { ClassKey as ClassKeyValue, ClassRef } from '@astrale-os/sdk/graph/class'
2
-
3
- import { ClassKey } from '@astrale-os/sdk/graph/class'
4
- import { Path } from '@astrale-os/sdk/graph/path'
5
-
6
- /** Admit one canonical Domain-rooted Class Path into its DSL coordinate. */
7
- export function classReference(input: string, label: string): ClassRef {
8
- const path = Path.parse(input)
9
- const step = path.ast.steps[0]
10
- if (
11
- path.ast.anchor.kind !== 'domain' ||
12
- path.ast.steps.length !== 1 ||
13
- step?.kind !== 'projection' ||
14
- step.projection.kind !== 'class'
15
- ) {
16
- throw new TypeError(`${label} must be one canonical Class Path`)
17
- }
18
- return ClassKey.ref(
19
- ClassKey.of({
20
- origin: path.ast.anchor.origin,
21
- kind: 'class',
22
- name: step.projection.name,
23
- }),
24
- )
25
- }
26
-
27
- /** Admit one canonical Domain-rooted Class Path into its exact string identity. */
28
- export function classKey(input: string, label: string): ClassKeyValue {
29
- return ClassKey.of(classReference(input, label))
30
- }
@@ -1,4 +0,0 @@
1
- export { classKey, classReference } from './class'
2
- export { prepareMutation } from './mutation'
3
- export { nodeProperty, unqualifyProperty } from './projection'
4
- export { prepareQuery, type PreparedQuery, type QueryCommandInput } from './query'
@@ -1,46 +0,0 @@
1
- import type { MutationAST as MutationASTValue, MutationInput } from '@astrale-os/sdk/mutation'
2
-
3
- import { MutationAST } from '@astrale-os/sdk/mutation'
4
-
5
- /** Admit the canonical document or Core's exact rich authoring input at the CLI JSON boundary. */
6
- export function prepareMutation(input: unknown): MutationASTValue {
7
- if (isLegacyPatchData(input)) {
8
- throw new TypeError(
9
- 'Legacy PatchData { nodes, edges } is not Mutation V3. Author { preconditions, operations } or a canonical astrale.graph.mutation/v3 document.',
10
- )
11
- }
12
- if (hasEmptyOperations(input)) {
13
- throw new TypeError('Mutation V3 requires at least one operation')
14
- }
15
- if (isCanonicalCandidate(input)) return MutationAST.decode(input)
16
- return MutationAST.create(input as MutationInput)
17
- }
18
-
19
- function hasEmptyOperations(input: unknown): boolean {
20
- return (
21
- input !== null &&
22
- typeof input === 'object' &&
23
- !Array.isArray(input) &&
24
- Array.isArray((input as { operations?: unknown }).operations) &&
25
- (input as { operations: unknown[] }).operations.length === 0
26
- )
27
- }
28
-
29
- function isCanonicalCandidate(input: unknown): boolean {
30
- return (
31
- input !== null &&
32
- typeof input === 'object' &&
33
- !Array.isArray(input) &&
34
- (Object.hasOwn(input, 'format') || Object.hasOwn(input, 'version'))
35
- )
36
- }
37
-
38
- function isLegacyPatchData(input: unknown): boolean {
39
- return (
40
- input !== null &&
41
- typeof input === 'object' &&
42
- !Array.isArray(input) &&
43
- !Object.hasOwn(input, 'operations') &&
44
- (Object.hasOwn(input, 'nodes') || Object.hasOwn(input, 'edges'))
45
- )
46
- }
@@ -1,21 +0,0 @@
1
- /** Strip a fully-qualified Property key to the leaf used by CLI presentation. */
2
- export function unqualifyProperty(key: string): string {
3
- const property = key.lastIndexOf('.property.')
4
- if (property >= 0) return key.slice(property + '.property.'.length)
5
- const slash = key.lastIndexOf('/')
6
- return slash >= 0 ? key.slice(slash + 1) : key
7
- }
8
-
9
- /** Read an exact key first, then one canonical qualified key with the requested leaf. */
10
- export function nodeProperty(
11
- node: { readonly props: Readonly<Record<string, unknown>> } | null | undefined,
12
- name: string,
13
- ): unknown {
14
- const props = node?.props
15
- if (props === undefined) return undefined
16
- if (Object.hasOwn(props, name)) return props[name]
17
- for (const [key, value] of Object.entries(props)) {
18
- if (unqualifyProperty(key) === name) return value
19
- }
20
- return undefined
21
- }
@@ -1,95 +0,0 @@
1
- import type {
2
- NodeQueryBuilder,
3
- QueryAST as QueryASTValue,
4
- QueryDirection,
5
- QueryNodeInput,
6
- } from '@astrale-os/sdk/query'
7
-
8
- import { Path } from '@astrale-os/sdk/graph/path'
9
- import { Query, QueryAST } from '@astrale-os/sdk/query'
10
-
11
- import { classReference } from './class'
12
-
13
- export interface QueryCommandInput {
14
- readonly sources: readonly string[]
15
- readonly class?: string
16
- readonly ast?: unknown
17
- readonly edge?: string
18
- readonly direction?: QueryDirection
19
- readonly limit?: string
20
- readonly cursor?: string
21
- }
22
-
23
- export interface PreparedQuery {
24
- readonly ast: QueryASTValue
25
- readonly page: Readonly<{ readonly size: number; readonly after?: string }>
26
- }
27
-
28
- const DEFAULT_LIMIT = 100
29
-
30
- /** Admit canonical Query V6 or author the intentionally small Path/Class/one-edge subset. */
31
- export function prepareQuery(input: QueryCommandInput): PreparedQuery {
32
- const limit = positiveInteger(input.limit, '--limit', DEFAULT_LIMIT)
33
- if (input.ast !== undefined) {
34
- if (
35
- input.sources.length > 0 ||
36
- input.class !== undefined ||
37
- input.edge !== undefined ||
38
- input.direction !== undefined
39
- ) {
40
- throw new TypeError(
41
- '--ast/--file cannot be combined with sources, --class, --edge, or --direction',
42
- )
43
- }
44
- return withPage(QueryAST.decode(input.ast), limit, input.cursor)
45
- }
46
-
47
- if (input.sources.length === 0 && input.class === undefined) {
48
- throw new TypeError('query requires a Path source, --class, or a canonical Query V6 document')
49
- }
50
- if (input.direction !== undefined && input.edge === undefined) {
51
- throw new TypeError('--direction requires --edge')
52
- }
53
-
54
- const paths = input.sources.map((source) => Path.parse(source))
55
- const selectedClass =
56
- input.class === undefined ? undefined : classReference(input.class, '--class')
57
- const nodes = selectedClass === undefined ? paths : [...paths, selectedClass]
58
- const query: NodeQueryBuilder<unknown> = Query.from({
59
- nodes: nodes as [QueryNodeInput, ...QueryNodeInput[]],
60
- })
61
- const ast =
62
- input.edge === undefined
63
- ? query.select({ kind: 'graph', binding: query.node })
64
- : expanded(query, input.edge, input.direction)
65
- return withPage(ast, limit, input.cursor)
66
- }
67
-
68
- function expanded(
69
- query: NodeQueryBuilder<unknown>,
70
- edge: string,
71
- direction: QueryDirection | undefined,
72
- ): QueryASTValue {
73
- const result = query.expand({
74
- via: [classReference(edge, '--edge')],
75
- direction: direction ?? 'outgoing',
76
- })
77
- return result.select({ kind: 'graph', binding: result.node })
78
- }
79
-
80
- function positiveInteger(raw: string | undefined, name: string, fallback: number): number {
81
- if (raw === undefined) return fallback
82
- if (!/^\d+$/.test(raw)) throw new TypeError(`${name} must be a positive integer`)
83
- const value = Number.parseInt(raw, 10)
84
- if (!Number.isSafeInteger(value) || value <= 0) {
85
- throw new TypeError(`${name} must be a positive integer`)
86
- }
87
- return value
88
- }
89
-
90
- function withPage(ast: QueryASTValue, size: number, cursor: string | undefined): PreparedQuery {
91
- return Object.freeze({
92
- ast,
93
- page: Object.freeze({ size, ...(cursor === undefined ? {} : { after: cursor }) }),
94
- })
95
- }
@@ -1,6 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": { "types": ["@types/node"] },
4
- "include": ["*.ts"],
5
- "exclude": ["__tests__"]
6
- }
@@ -1,57 +0,0 @@
1
- # Bootstrap root transfer and child authority
2
-
3
- Status: resolved
4
- Impact: high
5
- Selection: identity-export-v1-and-authenticated-management-delegation
6
-
7
- ## Context
8
-
9
- A production Host creates the manager Kernel's signing material before the CLI has any local state.
10
- Qualification may mount that generated secret into the operator environment, but it must not
11
- manufacture the CLI registry or key files. The Host producer and CLI importer previously agreed only
12
- through coincident TypeScript object shapes. The root-to-child journey was also distributed across
13
- Host, Runtime, Client, and CLI behavior, leaving room to confuse a manager-signed Management carrier
14
- with the effective child principal.
15
-
16
- ## Decision
17
-
18
- https://schemas.astrale.ai/cli/identity-export/1 is the portable JSON Schema for the plaintext
19
- IdentityExport V1 envelope. CLI Identity owns and publishes that schema. Structural schema admission
20
- does not prove a keypair: identity import additionally proves that the private and public JWKs form
21
- one pair before publishing either keys or registry state.
22
-
23
- The Host secret generator emits one schema-conforming identity.json with mode 0600. The platform
24
- runner imports it through:
25
-
26
- astrale identity import <identity.json> --name platform-root
27
-
28
- The imported root is the manager Kernel principal. It is never provisioned or registered as an
29
- application identity. The manager bookmark uses the non-reserved alias platform-manager, pins the
30
- manager issuer, and selects platform-root as its default identity. Manager identity is proved by the
31
- authenticated public Identity.whoami syscall, not local CLI status.
32
-
33
- Because this credential is issued by the target Kernel itself, CLI signing carries the imported
34
- subject as an already-resolved identity Grant. The external-primary `{ identity: self }` form is not
35
- valid for a self-issued Kernel bearer and cannot be substituted at this boundary.
36
-
37
- Child creation is the public receiver call
38
- /:host.astrale.ai:core.manager::createInstance. Once its Operation and Instance status report a
39
- ready route and issuer, the canonical child credential is minted at the manager:
40
-
41
- astrale token -i platform-manager --for platform-root --audience <child-issuer> --raw
42
-
43
- That token is a manager-to-child Management carrier. Its outer JWT subject names the manager
44
- principal; child Runtime maps it to the child Kernel principal. Child calls therefore keep the token
45
- as --creds, and @self resolves through the child's authenticated Identity.whoami. The child bookmark
46
- pins the child issuer and carries no --as platform-root default.
47
-
48
- ## Consequences
49
-
50
- - Bootstrap crosses one explicit file contract and one supported CLI command; no CLI state file is
51
- fabricated.
52
- - Direct manager signing and child Management delegation remain distinct.
53
- - No consumer may infer the effective principal from an unverified JWT subject or cached
54
- registration.
55
- - The portable schema is structural and versioned; cryptographic pair proof remains CLI admission.
56
- - A future encrypted Host-to-CLI bootstrap format requires a new explicit deployment decision. CLI's
57
- interactive compact-JWE export remains an operator transfer representation, not Host output.
@@ -1,36 +0,0 @@
1
- # Domain-mediated Identity registration
2
-
3
- Status: resolved
4
- Impact: high
5
- Selection: explicit-authority-owner-callable
6
-
7
- ## Context
8
-
9
- `identity register` prepares an atomic graph Node and self-proven Identity designation. Submitting
10
- that request directly to Kernel Auth is correct only when the authenticated caller already holds
11
- creation authority for the chosen Class. A child Kernel management principal does not thereby own
12
- an installed application Domain's `Operator` Class, and production correctly denied that attempted
13
- authority substitution.
14
-
15
- The CLI must still own local key proof and target-bound registration state. Manufacturing CLI state,
16
- handing application credentials to the operator, or weakening mutation authorization would cross
17
- the wrong boundary.
18
-
19
- ## Decision
20
-
21
- Registration retains direct Auth submission as its default. `--via <callablePath>` selects a second,
22
- explicit submission boundary: after constructing the exact same Provision request and fingerprint-
23
- bound self proof, CLI invokes the named Domain callable through the normal Host route. That callable
24
- owns admission and may exercise its Domain authority to submit the request to Kernel Auth.
25
-
26
- CLI treats the callable response as untrusted. It admits the prepared binding's issuer, subject, and
27
- optional created Node ID, then stores only the target-keyed issuer and subject. It never accepts or
28
- persists application authority, and it never exposes the self proof in argv or output.
29
-
30
- ## Consequences
31
-
32
- - Kernel mutation non-amplification remains unchanged.
33
- - A Domain that offers registration must declare and authorize a Provision-shaped callable.
34
- - The option is explicit because choosing the authority owner is security-significant.
35
- - Direct registration remains useful for Classes the selected caller genuinely owns.
36
- - A failed callable or malformed response leaves CLI registration state unchanged.
@@ -1,124 +0,0 @@
1
- import type { ProvisionRequest } from '@astrale-os/sdk/auth'
2
- import type { Call } from '@astrale-os/sdk/client'
3
- import type { LocalBinding } from '@astrale-os/sdk/graph'
4
- import type { JWK } from 'jose'
5
-
6
- import type {
7
- Identity,
8
- IdentityMode,
9
- IdentityStore,
10
- IdentityStoreOptions,
11
- Registration,
12
- } from '../../state/.spec/api.js'
13
-
14
- export type { Identity, IdentityStore, Registration } from '../../state/.spec/api.js'
15
-
16
- /** Filesystem coordinates used only by explicit identity transfer operations. */
17
- export interface IdentityFileOptions {
18
- readonly state?: IdentityStoreOptions
19
- readonly keysDir?: string
20
- }
21
-
22
- /** Canonical V1 key-identity transfer envelope. */
23
- export interface IdentityExport {
24
- readonly version: 1
25
- readonly subject: string
26
- readonly mode: IdentityMode
27
- readonly kid?: string
28
- readonly issuer?: string
29
- readonly privateJwk: JWK
30
- readonly publicJwk: JWK
31
- }
32
-
33
- export interface IdentityImportOptions extends IdentityFileOptions {
34
- readonly name?: string
35
- readonly issuer?: string
36
- readonly replace?: boolean
37
- }
38
-
39
- export interface IdentityRegistrationResult {
40
- readonly iss: string
41
- readonly sub: string
42
- readonly nodeId?: string
43
- }
44
-
45
- export interface IdentityProvisionSubmission {
46
- readonly request: ProvisionRequest
47
- readonly binding: LocalBinding
48
- readonly via?: string
49
- readonly direct: {
50
- provision(request: ProvisionRequest): Promise<unknown>
51
- }
52
- readonly callable: {
53
- call(call: Call): Promise<unknown>
54
- }
55
- }
56
-
57
- /** Submit one prepared request either directly or through its explicit Domain authority owner. */
58
- export function submitIdentityProvision(
59
- input: IdentityProvisionSubmission,
60
- ): Promise<IdentityRegistrationResult>
61
-
62
- /** Admit only the exact binding the CLI prepared; remote callables remain untrusted input. */
63
- export function acceptProvisionedIdentity(
64
- value: unknown,
65
- binding: LocalBinding,
66
- ): IdentityRegistrationResult
67
-
68
- export function readIdentities(): Promise<IdentityStore>
69
-
70
- export function createIdentity(
71
- name: string,
72
- options?: {
73
- readonly subject?: string
74
- readonly mode?: IdentityMode
75
- readonly issuer?: string
76
- readonly kid?: string
77
- },
78
- ): Promise<Identity>
79
-
80
- export function deleteIdentity(name: string): Promise<void>
81
- export function setDefault(name: string): Promise<void>
82
- export function getDefault(): Promise<Identity & { readonly name: string }>
83
- export function getIdentity(name: string): Promise<Identity>
84
-
85
- export function upsertIdpIdentity(
86
- name: string,
87
- options: {
88
- readonly subject: string
89
- readonly idp: string
90
- readonly issuer: string
91
- readonly audience?: string
92
- readonly claims?: Readonly<Record<string, unknown>>
93
- readonly use?: boolean
94
- },
95
- ): Promise<Identity>
96
-
97
- export function setRegistration(
98
- name: string,
99
- instanceSlug: string,
100
- registration: Registration,
101
- ): Promise<void>
102
-
103
- export function setIdentityMode(name: string, mode: IdentityMode): Promise<void>
104
-
105
- /** Detect the retained compact-JWE representation without decoding it. */
106
- export function isEncryptedIdentityExport(raw: string): boolean
107
-
108
- /** Decode legacy plaintext, V1 plaintext, or compact-JWE content into one admitted V1 envelope. */
109
- export function decodeIdentityExport(raw: string, passphrase?: string): Promise<IdentityExport>
110
-
111
- /** Encode one admitted envelope as plaintext JSON or compact JWE. */
112
- export function encodeIdentityExport(envelope: IdentityExport, passphrase?: string): Promise<string>
113
-
114
- /** Read and prove one key-backed identity's transferable envelope. */
115
- export function exportIdentity(name: string, options?: IdentityFileOptions): Promise<IdentityExport>
116
-
117
- /** Import one admitted envelope after checking registry conflicts but before publishing registry state. */
118
- export function importIdentity(
119
- envelope: IdentityExport,
120
- options?: IdentityImportOptions,
121
- ): Promise<Identity>
122
-
123
- /** Atomically publish one explicit private export file with mode 0600. */
124
- export function writeIdentityExport(path: string, content: string): Promise<void>
@@ -1,33 +0,0 @@
1
- # CLI identity ownership
2
-
3
- Identity owns local identity selection and the coordination between the State registry, per-subject
4
- Keys, and IdP sessions. State owns durable registry decoding and locking; Keys owns JWK admission,
5
- pair proof, and private files. Commands own prompts and presentation, not persistence mechanics.
6
-
7
- Identity transfer accepts the retained unversioned plaintext envelope and the current V1 plaintext
8
- or compact-JWE representation. Admission completes before mutation. Import checks the registry under
9
- its file lock, persists the admitted keypair, and only then publishes the identity entry. Export
10
- proves the stored pair and atomically writes one mode-`0600` user-selected file.
11
-
12
- The canonical plaintext V1 structure is independently published as
13
- `https://schemas.astrale.ai/cli/identity-export/1`. A production Host may emit that envelope as its
14
- bootstrap root secret, but CLI Identity remains the format owner and cryptographically proves the
15
- pair on import. The governing bootstrap flow imports the root as `platform-root`, authenticates it
16
- directly to the `platform-manager` Kernel, and reaches a child only through a manager-minted
17
- child-audience Management carrier. The carrier's outer subject is not the child's effective
18
- principal; authenticated child `Identity.whoami` owns that projection.
19
-
20
- Identity registration always prepares one self-proven atomic Provision request. Direct registration
21
- submits it to Kernel Auth only when the selected caller already owns the target Class authority. An
22
- explicit `--via <callable>` instead sends those exact bytes through the Domain that owns an
23
- application Identity Class. The Domain callable owns admission and effect authority; CLI admits only
24
- the prepared binding from the response before persisting its target-bound `(issuer, subject)`.
25
-
26
- ```mermaid
27
- flowchart LR
28
- C[identity command] --> D[decode or encode transfer]
29
- D --> I[Identity orchestration]
30
- I --> S[State registry lock]
31
- I --> K[Keys pair proof and files]
32
- S --> F[identities.json]
33
- ```
@@ -1,7 +0,0 @@
1
- import { defineCapability } from '@astrale-os/spec/authoring'
2
-
3
- export const CLI_IDENTITY = defineCapability({
4
- id: 'CLI-IDENTITY',
5
- statement:
6
- 'Preserves local identity selection, isolated key material, and explicit import/export journeys.',
7
- })