@astrale-os/cli 1.0.0-beta.9 → 1.0.0-npm-deprecated.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. package/README.md +14 -166
  2. package/package.json +10 -102
  3. package/.check-workspace.cjs +0 -40
  4. package/LICENSE +0 -202
  5. package/THIRD-PARTY-NOTICES.md +0 -27
  6. package/dist/astrale.js +0 -93344
  7. package/dist/public/connect-core.js +0 -29187
  8. package/dist/public/keys/index.js +0 -5651
  9. package/dist/public/paths/index.js +0 -4282
  10. package/dist/types/admin/binding.d.ts +0 -19
  11. package/dist/types/admin/instance/client.d.ts +0 -22
  12. package/dist/types/admin/instance/index.d.ts +0 -2
  13. package/dist/types/admin/instance/model.d.ts +0 -33
  14. package/dist/types/connect-core.d.ts +0 -22
  15. package/dist/types/connection/auth.d.ts +0 -39
  16. package/dist/types/connection/call.d.ts +0 -3
  17. package/dist/types/connection/command.d.ts +0 -27
  18. package/dist/types/connection/credential.d.ts +0 -14
  19. package/dist/types/connection/errors.d.ts +0 -1
  20. package/dist/types/connection/exchange.d.ts +0 -9
  21. package/dist/types/connection/failure/classify.d.ts +0 -2
  22. package/dist/types/connection/failure/index.d.ts +0 -5
  23. package/dist/types/connection/failure/model.d.ts +0 -25
  24. package/dist/types/connection/failure/render.d.ts +0 -3
  25. package/dist/types/connection/index.d.ts +0 -8
  26. package/dist/types/connection/reasons.d.ts +0 -37
  27. package/dist/types/connection/self.d.ts +0 -37
  28. package/dist/types/connection/session.d.ts +0 -31
  29. package/dist/types/connection/target.d.ts +0 -38
  30. package/dist/types/errors.d.ts +0 -23
  31. package/dist/types/identity/registry.d.ts +0 -25
  32. package/dist/types/keys/algorithm.d.ts +0 -6
  33. package/dist/types/keys/credential.d.ts +0 -21
  34. package/dist/types/keys/index.d.ts +0 -4
  35. package/dist/types/keys/pair.d.ts +0 -34
  36. package/dist/types/lib/admin-instance.d.ts +0 -17
  37. package/dist/types/lib/admin-target.d.ts +0 -78
  38. package/dist/types/lib/ca-fetch.d.ts +0 -2
  39. package/dist/types/lib/config.d.ts +0 -71
  40. package/dist/types/lib/failure-debug.d.ts +0 -1
  41. package/dist/types/lib/format.d.ts +0 -1
  42. package/dist/types/lib/idp-session.d.ts +0 -33
  43. package/dist/types/lib/idp.d.ts +0 -404
  44. package/dist/types/lib/instance-target.d.ts +0 -38
  45. package/dist/types/lib/instance.d.ts +0 -202
  46. package/dist/types/lib/invocation.d.ts +0 -3
  47. package/dist/types/lib/log.d.ts +0 -33
  48. package/dist/types/lib/login-flow.d.ts +0 -49
  49. package/dist/types/lib/meta.d.ts +0 -36
  50. package/dist/types/lib/output.d.ts +0 -87
  51. package/dist/types/lib/proc.d.ts +0 -43
  52. package/dist/types/lib/self.d.ts +0 -9
  53. package/dist/types/lib/table.d.ts +0 -18
  54. package/dist/types/lib/update.d.ts +0 -131
  55. package/dist/types/lib/validation.d.ts +0 -11
  56. package/dist/types/paths/index.d.ts +0 -2
  57. package/dist/types/state/exchange-credentials.d.ts +0 -25
  58. package/dist/types/state/files.d.ts +0 -9
  59. package/dist/types/state/identities.d.ts +0 -42
  60. package/dist/types/state/index.d.ts +0 -8
  61. package/dist/types/state/paths.d.ts +0 -32
  62. package/src/__tests__/fixtures/publication.ts +0 -20
  63. package/src/admin/.spec/api.d.ts +0 -3
  64. package/src/admin/.spec/architecture.md +0 -15
  65. package/src/admin/.spec/icon.svg +0 -3
  66. package/src/admin/.spec/layout.ts +0 -6
  67. package/src/admin/__tests__/binding.test.ts +0 -31
  68. package/src/admin/__tests__/fixture.ts +0 -101
  69. package/src/admin/binding.ts +0 -98
  70. package/src/admin/catalog/.spec/api.d.ts +0 -65
  71. package/src/admin/catalog/.spec/architecture.md +0 -6
  72. package/src/admin/catalog/.spec/icon.svg +0 -3
  73. package/src/admin/catalog/.spec/layout.ts +0 -6
  74. package/src/admin/catalog/__tests__/client.test.ts +0 -142
  75. package/src/admin/catalog/client.ts +0 -218
  76. package/src/admin/catalog/index.ts +0 -13
  77. package/src/admin/catalog/model.ts +0 -41
  78. package/src/admin/catalog/tsconfig.json +0 -8
  79. package/src/admin/graph/.spec/api.d.ts +0 -22
  80. package/src/admin/graph/.spec/architecture.md +0 -5
  81. package/src/admin/graph/.spec/icon.svg +0 -3
  82. package/src/admin/graph/.spec/layout.ts +0 -3
  83. package/src/admin/graph/index.ts +0 -6
  84. package/src/admin/graph/nodes.ts +0 -56
  85. package/src/admin/index.ts +0 -2
  86. package/src/admin/instance/.spec/api.d.ts +0 -66
  87. package/src/admin/instance/.spec/architecture.md +0 -10
  88. package/src/admin/instance/.spec/icon.svg +0 -3
  89. package/src/admin/instance/.spec/layout.ts +0 -6
  90. package/src/admin/instance/__tests__/client.test.ts +0 -166
  91. package/src/admin/instance/client.ts +0 -196
  92. package/src/admin/instance/index.ts +0 -15
  93. package/src/admin/instance/model.ts +0 -56
  94. package/src/admin/instance/tsconfig.json +0 -8
  95. package/src/commands/__tests__/admin-instance.test.ts +0 -91
  96. package/src/commands/__tests__/auth-login.test.ts +0 -231
  97. package/src/commands/__tests__/auth-token.test.ts +0 -223
  98. package/src/commands/__tests__/call-describe.test.ts +0 -80
  99. package/src/commands/__tests__/call.test.ts +0 -29
  100. package/src/commands/__tests__/domain-install-operation.test.ts +0 -126
  101. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  102. package/src/commands/__tests__/domain-list.test.ts +0 -133
  103. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  104. package/src/commands/__tests__/install-direct.test.ts +0 -21
  105. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  106. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  107. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  108. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  109. package/src/commands/__tests__/instance-use.test.ts +0 -67
  110. package/src/commands/__tests__/introspect-parse.test.ts +0 -21
  111. package/src/commands/__tests__/logs.test.ts +0 -97
  112. package/src/commands/__tests__/read-commands.test.ts +0 -294
  113. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  114. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  115. package/src/commands/__tests__/token-ttl.test.ts +0 -21
  116. package/src/commands/__tests__/update.test.ts +0 -95
  117. package/src/commands/__tests__/view-build.test.ts +0 -58
  118. package/src/commands/__tests__/view.test.ts +0 -149
  119. package/src/commands/admin/status.ts +0 -61
  120. package/src/commands/admin/use.ts +0 -100
  121. package/src/commands/auth/login.ts +0 -82
  122. package/src/commands/auth/logout.ts +0 -52
  123. package/src/commands/auth/status.ts +0 -86
  124. package/src/commands/auth/token.ts +0 -174
  125. package/src/commands/browser.ts +0 -207
  126. package/src/commands/call-describe.ts +0 -123
  127. package/src/commands/call.ts +0 -205
  128. package/src/commands/domain/install.ts +0 -548
  129. package/src/commands/domain/list.ts +0 -155
  130. package/src/commands/domain/publish.ts +0 -136
  131. package/src/commands/domain/uninstall.ts +0 -128
  132. package/src/commands/get.ts +0 -69
  133. package/src/commands/identity/__tests__/register.test.ts +0 -93
  134. package/src/commands/identity/create.ts +0 -35
  135. package/src/commands/identity/delete.ts +0 -24
  136. package/src/commands/identity/export.ts +0 -46
  137. package/src/commands/identity/import.ts +0 -61
  138. package/src/commands/identity/list.ts +0 -56
  139. package/src/commands/identity/register.ts +0 -196
  140. package/src/commands/identity/sync.ts +0 -38
  141. package/src/commands/identity/unsync.ts +0 -34
  142. package/src/commands/identity/use.ts +0 -24
  143. package/src/commands/identity/whoami.ts +0 -34
  144. package/src/commands/idp/add.ts +0 -150
  145. package/src/commands/idp/list.ts +0 -57
  146. package/src/commands/idp/refresh.ts +0 -38
  147. package/src/commands/idp/remove.ts +0 -36
  148. package/src/commands/idp/show.ts +0 -29
  149. package/src/commands/instance/active.ts +0 -73
  150. package/src/commands/instance/bookmark.ts +0 -101
  151. package/src/commands/instance/create.ts +0 -61
  152. package/src/commands/instance/delete.ts +0 -69
  153. package/src/commands/instance/forget.ts +0 -26
  154. package/src/commands/instance/list.ts +0 -197
  155. package/src/commands/instance/status.ts +0 -38
  156. package/src/commands/instance/use.ts +0 -263
  157. package/src/commands/introspect.ts +0 -110
  158. package/src/commands/logs.ts +0 -283
  159. package/src/commands/mutate.ts +0 -122
  160. package/src/commands/query.ts +0 -136
  161. package/src/commands/session/analyze.ts +0 -50
  162. package/src/commands/session/list.ts +0 -36
  163. package/src/commands/setup.ts +0 -54
  164. package/src/commands/status.ts +0 -60
  165. package/src/commands/studio.ts +0 -434
  166. package/src/commands/token.ts +0 -107
  167. package/src/commands/update.ts +0 -334
  168. package/src/commands/use.ts +0 -86
  169. package/src/commands/view-serve.ts +0 -26
  170. package/src/commands/view.ts +0 -614
  171. package/src/connect-core.test.ts +0 -38
  172. package/src/connect-core.ts +0 -42
  173. package/src/connection/.spec/api.d.ts +0 -110
  174. package/src/connection/.spec/architecture.md +0 -47
  175. package/src/connection/.spec/capabilities/connection.ts +0 -13
  176. package/src/connection/.spec/examples/call.ts +0 -7
  177. package/src/connection/.spec/flows/command.ts +0 -20
  178. package/src/connection/.spec/flows/session.ts +0 -61
  179. package/src/connection/.spec/laws/connection.ts +0 -205
  180. package/src/connection/.spec/layout.ts +0 -21
  181. package/src/connection/__tests__/auth.test.ts +0 -128
  182. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  183. package/src/connection/__tests__/call.test.ts +0 -17
  184. package/src/connection/__tests__/credential.test.ts +0 -138
  185. package/src/connection/__tests__/errors.test.ts +0 -577
  186. package/src/connection/__tests__/exchange.test.ts +0 -295
  187. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  188. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  189. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  190. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  191. package/src/connection/__tests__/managed.test.ts +0 -39
  192. package/src/connection/__tests__/reasons.test.ts +0 -78
  193. package/src/connection/__tests__/self.test.ts +0 -71
  194. package/src/connection/__tests__/session.test.ts +0 -140
  195. package/src/connection/__tests__/target.test.ts +0 -94
  196. package/src/connection/auth.ts +0 -249
  197. package/src/connection/call.ts +0 -7
  198. package/src/connection/command.ts +0 -67
  199. package/src/connection/credential.ts +0 -117
  200. package/src/connection/errors.ts +0 -1
  201. package/src/connection/exchange.ts +0 -311
  202. package/src/connection/failure/classify.ts +0 -110
  203. package/src/connection/failure/index.ts +0 -18
  204. package/src/connection/failure/model.ts +0 -28
  205. package/src/connection/failure/render.ts +0 -116
  206. package/src/connection/index.ts +0 -8
  207. package/src/connection/reasons.ts +0 -209
  208. package/src/connection/self.ts +0 -138
  209. package/src/connection/session.ts +0 -196
  210. package/src/connection/target.ts +0 -112
  211. package/src/connection/tsconfig.json +0 -6
  212. package/src/errors.ts +0 -66
  213. package/src/graph/.spec/api.d.ts +0 -41
  214. package/src/graph/.spec/laws/documents.ts +0 -24
  215. package/src/graph/.spec/laws/projection.ts +0 -13
  216. package/src/graph/.spec/layout.ts +0 -14
  217. package/src/graph/__tests__/mutation.test.ts +0 -51
  218. package/src/graph/__tests__/projection.test.ts +0 -22
  219. package/src/graph/__tests__/query.test.ts +0 -173
  220. package/src/graph/class.ts +0 -30
  221. package/src/graph/index.ts +0 -4
  222. package/src/graph/mutation.ts +0 -46
  223. package/src/graph/projection.ts +0 -21
  224. package/src/graph/query.ts +0 -97
  225. package/src/graph/tsconfig.json +0 -6
  226. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  227. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  228. package/src/identity/.spec/api.d.ts +0 -124
  229. package/src/identity/.spec/architecture.md +0 -33
  230. package/src/identity/.spec/capabilities/identity.ts +0 -7
  231. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  232. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  233. package/src/identity/.spec/flows/import.ts +0 -29
  234. package/src/identity/.spec/laws/identity.ts +0 -56
  235. package/src/identity/.spec/layout.ts +0 -13
  236. package/src/identity/.spec/schemas/identity-export-v1.schema.json +0 -25
  237. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -53
  238. package/src/identity/__tests__/registration.test.ts +0 -64
  239. package/src/identity/__tests__/registry.test.ts +0 -70
  240. package/src/identity/__tests__/transfer.test.ts +0 -198
  241. package/src/identity/index.ts +0 -23
  242. package/src/identity/registration.ts +0 -72
  243. package/src/identity/registry.ts +0 -179
  244. package/src/identity/transfer.ts +0 -187
  245. package/src/identity/tsconfig.json +0 -6
  246. package/src/index.ts +0 -1
  247. package/src/keys/.spec/api.d.ts +0 -74
  248. package/src/keys/.spec/architecture.md +0 -13
  249. package/src/keys/.spec/laws/keys.ts +0 -43
  250. package/src/keys/.spec/layout.ts +0 -6
  251. package/src/keys/__tests__/algorithm.test.ts +0 -39
  252. package/src/keys/__tests__/keys.test.ts +0 -168
  253. package/src/keys/algorithm.ts +0 -33
  254. package/src/keys/credential.ts +0 -112
  255. package/src/keys/index.ts +0 -14
  256. package/src/keys/pair.ts +0 -219
  257. package/src/keys/tsconfig.json +0 -6
  258. package/src/lib/__tests__/admin-target.test.ts +0 -184
  259. package/src/lib/__tests__/binary.test.ts +0 -55
  260. package/src/lib/__tests__/command-dx.test.ts +0 -102
  261. package/src/lib/__tests__/concurrency.test.ts +0 -62
  262. package/src/lib/__tests__/config.test.ts +0 -54
  263. package/src/lib/__tests__/design.test.ts +0 -99
  264. package/src/lib/__tests__/domain-publication.test.ts +0 -138
  265. package/src/lib/__tests__/format.test.ts +0 -22
  266. package/src/lib/__tests__/idp-session.driver.ts +0 -53
  267. package/src/lib/__tests__/idp-session.test.ts +0 -379
  268. package/src/lib/__tests__/idp.test.ts +0 -415
  269. package/src/lib/__tests__/instance-candidates.test.ts +0 -146
  270. package/src/lib/__tests__/instance-target.test.ts +0 -213
  271. package/src/lib/__tests__/instance.test.ts +0 -192
  272. package/src/lib/__tests__/local-status.test.ts +0 -202
  273. package/src/lib/__tests__/log-errors.test.ts +0 -64
  274. package/src/lib/__tests__/log.test.ts +0 -31
  275. package/src/lib/__tests__/meta.test.ts +0 -55
  276. package/src/lib/__tests__/output.test.ts +0 -162
  277. package/src/lib/__tests__/panel.test.ts +0 -40
  278. package/src/lib/__tests__/port.test.ts +0 -44
  279. package/src/lib/__tests__/prompt.test.ts +0 -25
  280. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  281. package/src/lib/__tests__/self.test.ts +0 -50
  282. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  283. package/src/lib/__tests__/table.test.ts +0 -53
  284. package/src/lib/__tests__/update.test.ts +0 -351
  285. package/src/lib/__tests__/use-target.test.ts +0 -56
  286. package/src/lib/__tests__/validation.test.ts +0 -34
  287. package/src/lib/__tests__/view-assets.test.ts +0 -146
  288. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  289. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  290. package/src/lib/__tests__/view-server.test.ts +0 -68
  291. package/src/lib/__tests__/view-session.test.ts +0 -99
  292. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  293. package/src/lib/admin-domain.ts +0 -43
  294. package/src/lib/admin-instance.ts +0 -56
  295. package/src/lib/admin-target.ts +0 -290
  296. package/src/lib/binary.ts +0 -110
  297. package/src/lib/browser.ts +0 -150
  298. package/src/lib/ca-fetch.ts +0 -133
  299. package/src/lib/command-dx.ts +0 -191
  300. package/src/lib/concurrency.ts +0 -31
  301. package/src/lib/config.ts +0 -46
  302. package/src/lib/domain-publication.ts +0 -104
  303. package/src/lib/failure-debug.ts +0 -26
  304. package/src/lib/format.ts +0 -4
  305. package/src/lib/idp-session.ts +0 -134
  306. package/src/lib/idp.ts +0 -906
  307. package/src/lib/instance-candidates.ts +0 -49
  308. package/src/lib/instance-target.ts +0 -197
  309. package/src/lib/instance.ts +0 -467
  310. package/src/lib/invocation.ts +0 -11
  311. package/src/lib/local-status.ts +0 -152
  312. package/src/lib/log.ts +0 -143
  313. package/src/lib/login-flow.ts +0 -201
  314. package/src/lib/meta.ts +0 -90
  315. package/src/lib/output.ts +0 -238
  316. package/src/lib/panel.ts +0 -61
  317. package/src/lib/port.ts +0 -41
  318. package/src/lib/proc.ts +0 -82
  319. package/src/lib/prompt.ts +0 -136
  320. package/src/lib/provision-instance.ts +0 -139
  321. package/src/lib/sdk-deps.ts +0 -104
  322. package/src/lib/self.ts +0 -22
  323. package/src/lib/skills.ts +0 -171
  324. package/src/lib/table.ts +0 -62
  325. package/src/lib/update.ts +0 -409
  326. package/src/lib/use-target.ts +0 -24
  327. package/src/lib/validation.ts +0 -59
  328. package/src/lib/view/assets.ts +0 -78
  329. package/src/lib/view/open-intent.ts +0 -67
  330. package/src/lib/view/port-allocation.ts +0 -19
  331. package/src/lib/view/resolve.ts +0 -111
  332. package/src/lib/view/server.ts +0 -244
  333. package/src/lib/view/session.ts +0 -152
  334. package/src/lib/view/snapshot.ts +0 -101
  335. package/src/paths/.spec/api.d.ts +0 -13
  336. package/src/paths/.spec/architecture.md +0 -5
  337. package/src/paths/.spec/layout.ts +0 -3
  338. package/src/paths/index.ts +0 -13
  339. package/src/program/.spec/api.d.ts +0 -42
  340. package/src/program/.spec/architecture.md +0 -18
  341. package/src/program/.spec/laws/program.ts +0 -29
  342. package/src/program/.spec/layout.ts +0 -14
  343. package/src/program/__tests__/program.test.ts +0 -378
  344. package/src/program/build.ts +0 -183
  345. package/src/program/command.ts +0 -42
  346. package/src/program/index.ts +0 -2
  347. package/src/program/options.ts +0 -41
  348. package/src/program/registry.ts +0 -63
  349. package/src/program/tsconfig.json +0 -6
  350. package/src/setup/__tests__/instance-step.test.ts +0 -256
  351. package/src/setup/__tests__/util.test.ts +0 -29
  352. package/src/setup/engine.ts +0 -83
  353. package/src/setup/render.ts +0 -107
  354. package/src/setup/steps/admin.ts +0 -93
  355. package/src/setup/steps/agent-browser.ts +0 -81
  356. package/src/setup/steps/auth.ts +0 -54
  357. package/src/setup/steps/domain.ts +0 -68
  358. package/src/setup/steps/index.ts +0 -18
  359. package/src/setup/steps/instance.ts +0 -206
  360. package/src/setup/steps/skills-bridge.ts +0 -70
  361. package/src/setup/steps/skills.ts +0 -59
  362. package/src/setup/types.ts +0 -61
  363. package/src/setup/util.ts +0 -34
  364. package/src/state/.spec/api.d.ts +0 -133
  365. package/src/state/.spec/architecture.md +0 -31
  366. package/src/state/.spec/capabilities/state.ts +0 -7
  367. package/src/state/.spec/flows/identity-update.ts +0 -22
  368. package/src/state/.spec/laws/state.ts +0 -73
  369. package/src/state/.spec/layout.ts +0 -14
  370. package/src/state/__tests__/exchange-credentials.test.ts +0 -188
  371. package/src/state/__tests__/files.test.ts +0 -113
  372. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  373. package/src/state/__tests__/identities.test.ts +0 -142
  374. package/src/state/__tests__/paths.test.ts +0 -27
  375. package/src/state/exchange-credentials.ts +0 -219
  376. package/src/state/files.ts +0 -129
  377. package/src/state/identities.ts +0 -229
  378. package/src/state/index.ts +0 -29
  379. package/src/state/paths.ts +0 -61
  380. package/src/state/tsconfig.json +0 -6
  381. package/src/telemetry/__tests__/gate.test.ts +0 -63
  382. package/src/telemetry/__tests__/recorder.test.ts +0 -110
  383. package/src/telemetry/__tests__/redact.test.ts +0 -79
  384. package/src/telemetry/__tests__/session.test.ts +0 -166
  385. package/src/telemetry/__tests__/trigger.test.ts +0 -49
  386. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  387. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  388. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  389. package/src/telemetry/adapters/claude-code.ts +0 -90
  390. package/src/telemetry/adapters/codex.ts +0 -160
  391. package/src/telemetry/adapters/index.ts +0 -45
  392. package/src/telemetry/adapters/types.ts +0 -21
  393. package/src/telemetry/analyze.ts +0 -227
  394. package/src/telemetry/gate.ts +0 -79
  395. package/src/telemetry/recorder.ts +0 -57
  396. package/src/telemetry/redact.ts +0 -53
  397. package/src/telemetry/session.ts +0 -88
  398. package/src/telemetry/settings.ts +0 -26
  399. package/src/telemetry/store.ts +0 -91
  400. package/src/telemetry/trigger.ts +0 -119
  401. package/src/telemetry/types.ts +0 -64
  402. package/src/test-utils.ts +0 -18
  403. package/studio/client/dist/assets/elk-api-ByzoDZWH.js +0 -1
  404. package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
  405. package/studio/client/dist/assets/index-B0RCgUOT.js +0 -8
  406. package/studio/client/dist/assets/index-BiGR8Oo9.css +0 -1
  407. package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
  408. package/studio/client/dist/assets/index-N8J8EKlB.js +0 -81
  409. package/studio/client/dist/index.html +0 -13
  410. package/studio/package.json +0 -65
  411. package/studio/server/agent/ask.test.ts +0 -74
  412. package/studio/server/agent/ask.ts +0 -71
  413. package/studio/server/agent/bridge/client.test.ts +0 -49
  414. package/studio/server/agent/bridge/client.ts +0 -37
  415. package/studio/server/agent/bridge/grant.test.ts +0 -62
  416. package/studio/server/agent/bridge/grant.ts +0 -84
  417. package/studio/server/agent/bridge/routes.test.ts +0 -151
  418. package/studio/server/agent/bridge/routes.ts +0 -148
  419. package/studio/server/agent/bridge/stdio.ts +0 -195
  420. package/studio/server/agent/conversation.test.ts +0 -89
  421. package/studio/server/agent/conversation.ts +0 -158
  422. package/studio/server/agent/harness/adapter.ts +0 -171
  423. package/studio/server/agent/harness/claude/adapter.test.ts +0 -348
  424. package/studio/server/agent/harness/claude/adapter.ts +0 -71
  425. package/studio/server/agent/harness/claude/ask.ts +0 -114
  426. package/studio/server/agent/harness/claude/capabilities.ts +0 -27
  427. package/studio/server/agent/harness/claude/command.ts +0 -63
  428. package/studio/server/agent/harness/claude/events.ts +0 -215
  429. package/studio/server/agent/harness/claude/loadout.ts +0 -132
  430. package/studio/server/agent/harness/claude/mcp.test.ts +0 -36
  431. package/studio/server/agent/harness/claude/mcp.ts +0 -41
  432. package/studio/server/agent/harness/claude/skills.ts +0 -43
  433. package/studio/server/agent/harness/codex/adapter.test.ts +0 -269
  434. package/studio/server/agent/harness/codex/adapter.ts +0 -116
  435. package/studio/server/agent/harness/codex/ask.test.ts +0 -176
  436. package/studio/server/agent/harness/codex/ask.ts +0 -181
  437. package/studio/server/agent/harness/codex/command.test.ts +0 -69
  438. package/studio/server/agent/harness/codex/command.ts +0 -43
  439. package/studio/server/agent/harness/codex/events.test.ts +0 -94
  440. package/studio/server/agent/harness/codex/events.ts +0 -132
  441. package/studio/server/agent/harness/codex/exec.ts +0 -113
  442. package/studio/server/agent/harness/codex/loadout.ts +0 -60
  443. package/studio/server/agent/harness/codex/mcp.test.ts +0 -32
  444. package/studio/server/agent/harness/codex/mcp.ts +0 -27
  445. package/studio/server/agent/harness/codex/models.test.ts +0 -167
  446. package/studio/server/agent/harness/codex/models.ts +0 -211
  447. package/studio/server/agent/harness/codex/skills.ts +0 -33
  448. package/studio/server/agent/harness/gateway/config.test.ts +0 -98
  449. package/studio/server/agent/harness/gateway/config.ts +0 -214
  450. package/studio/server/agent/harness/gateway/token.test.ts +0 -133
  451. package/studio/server/agent/harness/gateway/token.ts +0 -166
  452. package/studio/server/agent/harness/mock/adapter.ts +0 -190
  453. package/studio/server/agent/harness/mock/domain-edit.ts +0 -41
  454. package/studio/server/agent/harness/process.test.ts +0 -46
  455. package/studio/server/agent/harness/process.ts +0 -104
  456. package/studio/server/agent/harness/registry.ts +0 -37
  457. package/studio/server/agent/harness/selection.test.ts +0 -75
  458. package/studio/server/agent/harness/selection.ts +0 -85
  459. package/studio/server/agent/harness/skills.test.ts +0 -95
  460. package/studio/server/agent/harness/skills.ts +0 -100
  461. package/studio/server/agent/layout.test.ts +0 -95
  462. package/studio/server/agent/notify.ts +0 -12
  463. package/studio/server/agent/prompts/anchors.test.ts +0 -70
  464. package/studio/server/agent/prompts/anchors.ts +0 -153
  465. package/studio/server/agent/prompts/ask.ts +0 -34
  466. package/studio/server/agent/prompts/system.test.ts +0 -13
  467. package/studio/server/agent/prompts/system.ts +0 -99
  468. package/studio/server/agent/prompts/turn.ts +0 -66
  469. package/studio/server/agent/routes.test.ts +0 -176
  470. package/studio/server/agent/routes.ts +0 -214
  471. package/studio/server/agent/run/completion.ts +0 -193
  472. package/studio/server/agent/run/coordinator.test.ts +0 -337
  473. package/studio/server/agent/run/coordinator.ts +0 -104
  474. package/studio/server/agent/run/live-state.ts +0 -73
  475. package/studio/server/agent/run/preparation.ts +0 -163
  476. package/studio/server/agent/run/transcript.test.ts +0 -81
  477. package/studio/server/agent/run/transcript.ts +0 -196
  478. package/studio/server/agent/run/usage.test.ts +0 -70
  479. package/studio/server/agent/run/usage.ts +0 -62
  480. package/studio/server/agent/stream.ts +0 -37
  481. package/studio/server/agent/telemetry.ts +0 -13
  482. package/studio/server/api/canvas.ts +0 -43
  483. package/studio/server/api/comments.ts +0 -85
  484. package/studio/server/api/context.ts +0 -61
  485. package/studio/server/api/deployment.ts +0 -39
  486. package/studio/server/api/documents.ts +0 -55
  487. package/studio/server/api/domain.ts +0 -59
  488. package/studio/server/api/http.ts +0 -45
  489. package/studio/server/api/project.ts +0 -57
  490. package/studio/server/api/schema.ts +0 -12
  491. package/studio/server/api/views.ts +0 -57
  492. package/studio/server/api/workspace.ts +0 -60
  493. package/studio/server/api-agent-loadout.test.ts +0 -69
  494. package/studio/server/api.test.ts +0 -147
  495. package/studio/server/api.ts +0 -34
  496. package/studio/server/cache.test.ts +0 -122
  497. package/studio/server/cache.ts +0 -303
  498. package/studio/server/cli-consumers.test.ts +0 -494
  499. package/studio/server/cli.test.ts +0 -88
  500. package/studio/server/cli.ts +0 -240
  501. package/studio/server/client-package.test.ts +0 -147
  502. package/studio/server/client-package.ts +0 -266
  503. package/studio/server/detect.ts +0 -81
  504. package/studio/server/domain.test.ts +0 -77
  505. package/studio/server/domain.ts +0 -124
  506. package/studio/server/environment/dotenv-preview.test.ts +0 -39
  507. package/studio/server/environment/dotenv-preview.ts +0 -27
  508. package/studio/server/environment/files.test.ts +0 -53
  509. package/studio/server/environment/files.ts +0 -120
  510. package/studio/server/handoff/copy.ts +0 -171
  511. package/studio/server/handoff/service.test.ts +0 -22
  512. package/studio/server/handoff/service.ts +0 -62
  513. package/studio/server/index.ts +0 -148
  514. package/studio/server/instances/active.ts +0 -72
  515. package/studio/server/instances/deploy-record.test.ts +0 -31
  516. package/studio/server/instances/deploy-record.ts +0 -37
  517. package/studio/server/instances/deploy.ts +0 -56
  518. package/studio/server/instances/probe.test.ts +0 -67
  519. package/studio/server/instances/probe.ts +0 -67
  520. package/studio/server/instances/status.test.ts +0 -12
  521. package/studio/server/instances/status.ts +0 -49
  522. package/studio/server/introspect/anatomy/client-tree.ts +0 -57
  523. package/studio/server/introspect/anatomy/env-fields.ts +0 -66
  524. package/studio/server/introspect/anatomy/schema-definition.ts +0 -53
  525. package/studio/server/introspect/anatomy/source.ts +0 -181
  526. package/studio/server/introspect/anatomy/views/routes.ts +0 -114
  527. package/studio/server/introspect/anatomy/views.ts +0 -53
  528. package/studio/server/introspect/anatomy-extras.test.ts +0 -265
  529. package/studio/server/introspect/anatomy-extras.ts +0 -10
  530. package/studio/server/introspect/anatomy.test.ts +0 -41
  531. package/studio/server/introspect/anatomy.ts +0 -147
  532. package/studio/server/introspect/bundle.ts +0 -69
  533. package/studio/server/introspect/canonical-schema.test.ts +0 -179
  534. package/studio/server/introspect/canonical-schema.ts +0 -583
  535. package/studio/server/introspect/config-preview.test.ts +0 -32
  536. package/studio/server/introspect/config-preview.ts +0 -119
  537. package/studio/server/introspect/core-extractor.ts +0 -30
  538. package/studio/server/introspect/core.ts +0 -45
  539. package/studio/server/introspect/diff.test.ts +0 -124
  540. package/studio/server/introspect/diff.ts +0 -316
  541. package/studio/server/introspect/extractor.ts +0 -41
  542. package/studio/server/introspect/hash.ts +0 -24
  543. package/studio/server/introspect/overlay-tsmorph.test.ts +0 -146
  544. package/studio/server/introspect/overlay-tsmorph.ts +0 -9
  545. package/studio/server/introspect/overlay.test.ts +0 -44
  546. package/studio/server/introspect/overlay.ts +0 -40
  547. package/studio/server/introspect/revision.test.ts +0 -54
  548. package/studio/server/introspect/revision.ts +0 -49
  549. package/studio/server/introspect/runtime.test.ts +0 -157
  550. package/studio/server/introspect/runtime.ts +0 -140
  551. package/studio/server/introspect/schema-ir-json.test.ts +0 -70
  552. package/studio/server/introspect/schema-ir-json.ts +0 -151
  553. package/studio/server/introspect/schema-refs.test.ts +0 -55
  554. package/studio/server/introspect/schema-refs.ts +0 -32
  555. package/studio/server/introspect/source-overlay/annotations.ts +0 -14
  556. package/studio/server/introspect/source-overlay/handlers.ts +0 -161
  557. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -46
  558. package/studio/server/introspect/source-overlay/project.ts +0 -248
  559. package/studio/server/introspect/source-overlay/spans.ts +0 -330
  560. package/studio/server/json.ts +0 -46
  561. package/studio/server/lifecycle.ts +0 -42
  562. package/studio/server/sse.test.ts +0 -26
  563. package/studio/server/sse.ts +0 -60
  564. package/studio/server/state/baseline.test.ts +0 -267
  565. package/studio/server/state/baseline.ts +0 -354
  566. package/studio/server/state/comments.test.ts +0 -94
  567. package/studio/server/state/comments.ts +0 -484
  568. package/studio/server/state/context.ts +0 -199
  569. package/studio/server/state/documents.ts +0 -111
  570. package/studio/server/state/integrations.ts +0 -81
  571. package/studio/server/state/layout.test.ts +0 -34
  572. package/studio/server/state/layout.ts +0 -82
  573. package/studio/server/state/settings.test.ts +0 -78
  574. package/studio/server/state/settings.ts +0 -73
  575. package/studio/server/state/store.test.ts +0 -122
  576. package/studio/server/state/store.ts +0 -146
  577. package/studio/server/state/visibility.ts +0 -48
  578. package/studio/server/views/model.test.ts +0 -57
  579. package/studio/server/views/model.ts +0 -66
  580. package/studio/server/views/runtime.ts +0 -40
  581. package/studio/server/views/selection-repository.test.ts +0 -31
  582. package/studio/server/views/selection-repository.ts +0 -60
  583. package/studio/server/views/session.test.ts +0 -73
  584. package/studio/server/views/session.ts +0 -166
  585. package/studio/server/views/target.test.ts +0 -78
  586. package/studio/server/views/target.ts +0 -222
  587. package/studio/server/watch.test.ts +0 -36
  588. package/studio/server/watch.ts +0 -93
  589. package/studio/server/workspace/catalog.test.ts +0 -17
  590. package/studio/server/workspace/catalog.ts +0 -43
  591. package/studio/server/workspace/create.test.ts +0 -37
  592. package/studio/server/workspace/create.ts +0 -162
  593. package/studio/server/workspace/git.ts +0 -75
  594. package/studio/server/workspace/updates.ts +0 -83
  595. package/studio/server/workspace-state.ts +0 -26
  596. package/studio/server/workspace-watch.ts +0 -106
  597. package/studio/shared/agent-effort.test.ts +0 -12
  598. package/studio/shared/agent-effort.ts +0 -15
  599. package/studio/shared/agent-models.test.ts +0 -9
  600. package/studio/shared/agent-models.ts +0 -14
  601. package/studio/shared/contracts/README.md +0 -16
  602. package/studio/shared/contracts/agent.ts +0 -270
  603. package/studio/shared/contracts/runtime.ts +0 -50
  604. package/studio/shared/contracts/schema.ts +0 -393
  605. package/studio/shared/contracts/surface.test.ts +0 -317
  606. package/studio/shared/contracts/workspace.ts +0 -265
  607. package/studio/shared/layout.test.ts +0 -116
  608. package/studio/shared/schema/identity.test.ts +0 -34
  609. package/studio/shared/schema/identity.ts +0 -68
  610. package/studio/shared/settings-values.test.ts +0 -18
  611. package/studio/shared/settings-values.ts +0 -20
  612. package/studio/shared/types.ts +0 -14
  613. package/studio/tsconfig.json +0 -23
  614. package/tsconfig.json +0 -14
  615. package/viewer/dist/index.html +0 -93
  616. package/viewer/dist/main.js +0 -76
  617. package/viewer/tsconfig.json +0 -13
@@ -1,198 +0,0 @@
1
- import { afterEach, beforeEach, describe, expect, test } from 'bun:test'
2
- import { access, mkdtemp, readFile, readdir, rm, stat } from 'node:fs/promises'
3
- import { tmpdir } from 'node:os'
4
- import { join } from 'node:path'
5
- import { fileURLToPath } from 'node:url'
6
-
7
- import { keypairPaths, persistKeypair, readKeypair } from '../../keys/index'
8
- import { readIdentityStore, updateIdentityStore } from '../../state/index'
9
- import {
10
- decodeIdentityExport,
11
- encodeIdentityExport,
12
- exportIdentity,
13
- importIdentity,
14
- isEncryptedIdentityExport,
15
- writeIdentityExport,
16
- type IdentityExport,
17
- } from '../index'
18
-
19
- describe('identity transfer', () => {
20
- let root = ''
21
- let statePath = ''
22
- let keysDir = ''
23
- const now = () => new Date('2026-08-11T12:00:00.000Z')
24
-
25
- beforeEach(async () => {
26
- root = await mkdtemp(join(tmpdir(), 'astrale-identity-transfer-'))
27
- statePath = join(root, 'identities.json')
28
- keysDir = join(root, 'keys')
29
- })
30
-
31
- afterEach(async () => {
32
- await rm(root, { recursive: true, force: true })
33
- })
34
-
35
- async function envelope(subject: string, suffix: string): Promise<IdentityExport> {
36
- const pair = await persistKeypair(subject, {
37
- keysDir: join(root, `source-${suffix}`),
38
- kid: `${subject}-${suffix}`,
39
- })
40
- return decodeIdentityExport(
41
- JSON.stringify({
42
- version: 1,
43
- subject,
44
- mode: 'local',
45
- kid: pair.kid,
46
- issuer: 'https://identity.example',
47
- privateJwk: pair.privateJwk,
48
- publicJwk: pair.publicJwk,
49
- }),
50
- )
51
- }
52
-
53
- /** @evidence TEST-CLI-IDENTITY-TRANSFER-REJECTS */
54
- test('rejects malformed, newer, and mismatched content before durable mutation', async () => {
55
- await expect(decodeIdentityExport('{')).rejects.toThrow(/not valid JSON/)
56
- await expect(
57
- decodeIdentityExport(
58
- JSON.stringify({
59
- version: 2,
60
- subject: 'alice',
61
- mode: 'local',
62
- privateJwk: {},
63
- publicJwk: {},
64
- }),
65
- ),
66
- ).rejects.toThrow(/invalid or unsupported shape/)
67
-
68
- const alice = await envelope('alice', 'a')
69
- const bob = await envelope('bob', 'b')
70
- const forged = {
71
- ...alice,
72
- publicJwk: { ...bob.publicJwk, kid: alice.kid },
73
- } as IdentityExport
74
- const mismatch = await importIdentity(forged, {
75
- state: { path: statePath, now },
76
- keysDir,
77
- }).catch((error) => error)
78
- expect(mismatch).toBeInstanceOf(Error)
79
- expect((mismatch as Error).message).toMatch(/do not form a valid matching pair/)
80
- expect((mismatch as Error).message).not.toContain(String(alice.privateJwk.d))
81
-
82
- await expect(access(statePath)).rejects.toThrow()
83
- await expect(access(keypairPaths('alice', keysDir).privatePath)).rejects.toThrow()
84
- })
85
-
86
- /** @evidence TEST-CLI-IDENTITY-TRANSFER-ROUNDTRIP */
87
- test('converges legacy, V1, and encrypted representations on one envelope', async () => {
88
- const current = await envelope('alice', 'roundtrip')
89
- const { version: _, ...legacy } = current
90
- expect(await decodeIdentityExport(JSON.stringify(legacy))).toEqual(current)
91
-
92
- const plaintext = await encodeIdentityExport(current)
93
- expect(isEncryptedIdentityExport(plaintext)).toBe(false)
94
- expect(await decodeIdentityExport(plaintext)).toEqual(current)
95
-
96
- const encrypted = await encodeIdentityExport(current, 'correct-horse-battery')
97
- expect(isEncryptedIdentityExport(encrypted)).toBe(true)
98
- expect(await decodeIdentityExport(encrypted, 'correct-horse-battery')).toEqual(current)
99
- await expect(decodeIdentityExport(encrypted, 'wrong')).rejects.toThrow(/Could not decrypt/)
100
- })
101
-
102
- /** @evidence TEST-CLI-IDENTITY-TRANSFER-SCHEMA */
103
- test('keeps the portable V1 JSON Schema aligned with the admitted identity envelope', async () => {
104
- const schemaPath = fileURLToPath(
105
- new URL('../.spec/schemas/identity-export-v1.schema.json', import.meta.url),
106
- )
107
- const schema = JSON.parse(await readFile(schemaPath, 'utf8')) as {
108
- readonly $id: string
109
- readonly additionalProperties: boolean
110
- readonly required: readonly string[]
111
- readonly properties: Readonly<Record<string, unknown>>
112
- }
113
- const identityEnvelope = await envelope('manager-principal', 'host-bootstrap')
114
-
115
- expect(schema.$id).toBe('https://schemas.astrale.ai/cli/identity-export/1')
116
- expect(schema.additionalProperties).toBe(false)
117
- expect(schema.required).toEqual(['version', 'subject', 'privateJwk', 'publicJwk'])
118
- expect(Object.keys(schema.properties).sort()).toEqual(
119
- ['issuer', 'kid', 'mode', 'privateJwk', 'publicJwk', 'subject', 'version'].sort(),
120
- )
121
- await expect(decodeIdentityExport(JSON.stringify(identityEnvelope))).resolves.toEqual(
122
- identityEnvelope,
123
- )
124
- })
125
-
126
- /** @evidence TEST-CLI-IDENTITY-IMPORT-ORDERED */
127
- test('checks conflicts before key replacement and publishes registry after keys', async () => {
128
- const first = await envelope('alice', 'first')
129
- const imported = await importIdentity(first, {
130
- name: 'operator',
131
- state: { path: statePath, now },
132
- keysDir,
133
- })
134
- expect(imported.subject).toBe('alice')
135
- expect((await readKeypair('alice', keysDir)).kid).toBe(first.kid)
136
- expect((await readIdentityStore({ path: statePath })).identities.operator).toEqual(imported)
137
-
138
- const privatePath = keypairPaths('alice', keysDir).privatePath
139
- const originalPrivate = await readFile(privatePath, 'utf-8')
140
- const replacement = await envelope('alice', 'replacement')
141
- await expect(
142
- importIdentity(replacement, {
143
- name: 'operator',
144
- state: { path: statePath, now },
145
- keysDir,
146
- }),
147
- ).rejects.toThrow('already exists')
148
- expect(await readFile(privatePath, 'utf-8')).toBe(originalPrivate)
149
-
150
- await updateIdentityStore(
151
- (store) => ({
152
- next: {
153
- ...store,
154
- identities: {
155
- ...store.identities,
156
- remote: {
157
- subject: 'remote-user',
158
- createdAt: now().toISOString(),
159
- source: 'idp',
160
- mode: 'remote',
161
- idp: 'workos',
162
- issuer: 'https://idp.example',
163
- },
164
- },
165
- },
166
- value: undefined,
167
- }),
168
- { path: statePath, now },
169
- )
170
- await expect(
171
- importIdentity(await envelope('remote-user', 'remote'), {
172
- name: 'remote',
173
- replace: true,
174
- state: { path: statePath, now },
175
- keysDir,
176
- }),
177
- ).rejects.toThrow(/IdP-backed/)
178
- await expect(access(keypairPaths('remote-user', keysDir).privatePath)).rejects.toThrow()
179
- })
180
-
181
- /** @evidence TEST-CLI-IDENTITY-EXPORT-PRIVATE */
182
- test('exports a proven pair through one atomic mode-0600 file', async () => {
183
- await importIdentity(await envelope('alice', 'export'), {
184
- state: { path: statePath, now },
185
- keysDir,
186
- })
187
- const exported = await exportIdentity('alice', {
188
- state: { path: statePath, now },
189
- keysDir,
190
- })
191
- const path = join(root, 'alice.identity.json')
192
- await writeIdentityExport(path, await encodeIdentityExport(exported))
193
-
194
- expect((await stat(path)).mode & 0o777).toBe(0o600)
195
- expect(await decodeIdentityExport(await readFile(path, 'utf-8'))).toEqual(exported)
196
- expect((await readdir(root)).some((entry) => entry.endsWith('.tmp'))).toBe(false)
197
- })
198
- })
@@ -1,23 +0,0 @@
1
- export {
2
- createIdentity,
3
- deleteIdentity,
4
- getDefault,
5
- getIdentity,
6
- readIdentities,
7
- setDefault,
8
- setIdentityMode,
9
- setRegistration,
10
- upsertIdpIdentity,
11
- } from './registry'
12
- export {
13
- decodeIdentityExport,
14
- encodeIdentityExport,
15
- exportIdentity,
16
- importIdentity,
17
- isEncryptedIdentityExport,
18
- writeIdentityExport,
19
- } from './transfer'
20
- export { acceptProvisionedIdentity, submitIdentityProvision } from './registration'
21
- export type { IdentityProvisionSubmission, IdentityRegistrationResult } from './registration'
22
- export type { Identity, IdentityStore, Registration } from './registry'
23
- export type { IdentityExport, IdentityFileOptions, IdentityImportOptions } from './transfer'
@@ -1,72 +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
-
5
- import { issuer } from '@astrale-os/sdk/auth'
6
- import { call } from '@astrale-os/sdk/client'
7
- import { NodeId } from '@astrale-os/sdk/graph/node'
8
- import { Path } from '@astrale-os/sdk/graph/path'
9
-
10
- export interface IdentityRegistrationResult {
11
- readonly iss: string
12
- readonly sub: string
13
- readonly nodeId?: string
14
- }
15
-
16
- export interface IdentityProvisionSubmission {
17
- readonly request: ProvisionRequest
18
- readonly binding: LocalBinding
19
- readonly via?: string
20
- readonly direct: {
21
- provision(request: ProvisionRequest): Promise<unknown>
22
- }
23
- readonly callable: {
24
- call(call: Call): Promise<unknown>
25
- }
26
- }
27
-
28
- /** Submit one prepared request either directly or through its explicit Domain authority owner. */
29
- export async function submitIdentityProvision(
30
- input: IdentityProvisionSubmission,
31
- ): Promise<IdentityRegistrationResult> {
32
- const result =
33
- input.via === undefined
34
- ? await input.direct.provision(input.request)
35
- : await input.callable.call(
36
- // Client admits the portable value before transport. ProvisionRequest is the
37
- // stricter semantic type but does not declare the portable Object index signature.
38
- call(Path.parse(input.via), input.request as unknown as Call['input']),
39
- )
40
- return acceptProvisionedIdentity(result, input.binding)
41
- }
42
-
43
- /** Admit only the exact binding the CLI prepared; remote callables remain untrusted input. */
44
- export function acceptProvisionedIdentity(
45
- value: unknown,
46
- binding: LocalBinding,
47
- ): IdentityRegistrationResult {
48
- const result = record(value, 'Provision result')
49
- const identities = record(result.identities, 'Provision result identities')
50
- const identity = record(identities[binding], 'Provision result identity binding')
51
- const createdNodes = record(result.createdNodes, 'Provision result created Nodes')
52
- const node = createdNodes[binding]
53
- return Object.freeze({
54
- iss: issuer.accept(text(identity.issuer, 'Provisioned Identity issuer')),
55
- sub: text(identity.subject, 'Provisioned Identity subject'),
56
- ...(node === undefined ? {} : { nodeId: NodeId(text(node, 'Provisioned Identity Node')) }),
57
- })
58
- }
59
-
60
- function record(value: unknown, label: string): Record<string, unknown> {
61
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
62
- throw new TypeError(`${label} must be an object.`)
63
- }
64
- return value as Record<string, unknown>
65
- }
66
-
67
- function text(value: unknown, label: string): string {
68
- if (typeof value !== 'string' || value.length === 0) {
69
- throw new TypeError(`${label} must be non-empty text.`)
70
- }
71
- return value
72
- }
@@ -1,179 +0,0 @@
1
- import { AstraleError } from '../errors'
2
- import { persistKeypair, removeKeypair } from '../keys/index'
3
- import { deleteIdpSession } from '../lib/idp'
4
- import { validateName } from '../lib/validation'
5
- import {
6
- readIdentityStore,
7
- updateIdentityStore,
8
- type Identity,
9
- type IdentityMode,
10
- type IdentityStore,
11
- type Registration,
12
- ExchangeCredentialCache,
13
- } from '../state/index'
14
-
15
- export type { Identity, IdentityStore, Registration } from '../state/index'
16
-
17
- export async function readIdentities(): Promise<IdentityStore> {
18
- return readIdentityStore()
19
- }
20
-
21
- export async function createIdentity(
22
- name: string,
23
- options: {
24
- readonly subject?: string
25
- readonly mode?: IdentityMode
26
- readonly issuer?: string
27
- readonly kid?: string
28
- } = {},
29
- ): Promise<Identity> {
30
- validateName(name, 'Identity')
31
- return updateIdentityStore(async (store) => {
32
- if (store.identities[name]) throw new Error(`Identity "${name}" already exists`)
33
-
34
- const subject = options.subject ?? name
35
- const generated = await persistKeypair(subject, { kid: options.kid })
36
- const identity: Identity = {
37
- subject,
38
- createdAt: new Date().toISOString(),
39
- source: 'key',
40
- mode: options.mode ?? 'local',
41
- kid: generated.kid,
42
- issuer: options.issuer,
43
- }
44
- const hasDefault = store.default !== '' && store.identities[store.default] !== undefined
45
- return {
46
- next: {
47
- default: hasDefault ? store.default : name,
48
- identities: { ...store.identities, [name]: identity },
49
- },
50
- value: identity,
51
- }
52
- })
53
- }
54
-
55
- export async function deleteIdentity(name: string): Promise<void> {
56
- await updateIdentityStore(async (store) => {
57
- const entry = store.identities[name]
58
- if (!entry) throw new Error(`Identity "${name}" not found`)
59
- if (store.default === name) {
60
- throw new Error(
61
- `Cannot delete the default identity "${name}". Switch default first with: astrale identity use <other>`,
62
- )
63
- }
64
- if ((entry.source ?? 'key') === 'idp') await deleteIdpSession(name)
65
- else if (!hasAnotherKeyIdentity(store, name, entry.subject)) await removeKeypair(entry.subject)
66
-
67
- const { [name]: _, ...identities } = store.identities
68
- return { next: { ...store, identities }, value: undefined }
69
- })
70
- await new ExchangeCredentialCache().clear()
71
- }
72
-
73
- function hasAnotherKeyIdentity(store: IdentityStore, name: string, subject: string): boolean {
74
- return Object.entries(store.identities).some(
75
- ([candidateName, candidate]) =>
76
- candidateName !== name &&
77
- (candidate.source ?? 'key') === 'key' &&
78
- candidate.subject === subject,
79
- )
80
- }
81
-
82
- export async function setDefault(name: string): Promise<void> {
83
- await updateIdentityStore((store) => {
84
- if (!store.identities[name]) throw new Error(`Identity "${name}" not found`)
85
- return { next: { ...store, default: name }, value: undefined }
86
- })
87
- }
88
-
89
- export async function getDefault(): Promise<Identity & { readonly name: string }> {
90
- const store = await readIdentities()
91
- if (store.default === '' || store.identities[store.default] === undefined) {
92
- throw new AstraleError(
93
- 'NO_IDENTITY',
94
- 'No default identity.',
95
- 'Run: astrale identity create <name>',
96
- )
97
- }
98
- const identity = store.identities[store.default]!
99
- return { ...identity, name: store.default }
100
- }
101
-
102
- export async function getIdentity(name: string): Promise<Identity> {
103
- const store = await readIdentities()
104
- const identity = store.identities[name]
105
- if (!identity) {
106
- throw new Error(`Identity "${name}" not found. Run: astrale identity create ${name}`)
107
- }
108
- return identity
109
- }
110
-
111
- export async function upsertIdpIdentity(
112
- name: string,
113
- options: {
114
- readonly subject: string
115
- readonly idp: string
116
- readonly issuer: string
117
- readonly audience?: string
118
- readonly claims?: Readonly<Record<string, unknown>>
119
- readonly use?: boolean
120
- },
121
- ): Promise<Identity> {
122
- validateName(name, 'Identity')
123
- validateName(options.idp, 'IdP')
124
- return updateIdentityStore((store) => {
125
- const existing = store.identities[name]
126
- if (existing && (existing.source ?? 'key') !== 'idp') {
127
- throw new Error(`Identity "${name}" already exists and is key-backed`)
128
- }
129
- const identity: Identity = {
130
- subject: options.subject,
131
- createdAt: existing?.createdAt ?? new Date().toISOString(),
132
- source: 'idp',
133
- mode: 'remote',
134
- idp: options.idp,
135
- issuer: options.issuer,
136
- audience: options.audience,
137
- claims: options.claims,
138
- registrations: existing?.registrations,
139
- }
140
- return {
141
- next: {
142
- default: options.use === false ? store.default : name,
143
- identities: { ...store.identities, [name]: identity },
144
- },
145
- value: identity,
146
- }
147
- })
148
- }
149
-
150
- export async function setRegistration(
151
- name: string,
152
- instanceSlug: string,
153
- registration: Registration,
154
- ): Promise<void> {
155
- await updateIdentityStore((store) => {
156
- const entry = store.identities[name]
157
- if (!entry) throw new Error(`Identity "${name}" not found`)
158
- const identity: Identity = {
159
- ...entry,
160
- registrations: { ...entry.registrations, [instanceSlug]: registration },
161
- }
162
- return {
163
- next: { ...store, identities: { ...store.identities, [name]: identity } },
164
- value: undefined,
165
- }
166
- })
167
- }
168
-
169
- export async function setIdentityMode(name: string, mode: IdentityMode): Promise<void> {
170
- await updateIdentityStore((store) => {
171
- const entry = store.identities[name]
172
- if (!entry) throw new Error(`Identity "${name}" not found`)
173
- const identity: Identity = { ...entry, mode }
174
- return {
175
- next: { ...store, identities: { ...store.identities, [name]: identity } },
176
- value: undefined,
177
- }
178
- })
179
- }
@@ -1,187 +0,0 @@
1
- import { compactDecrypt, CompactEncrypt, type JWK } from 'jose'
2
- import { z } from 'zod'
3
-
4
- import { AstraleError } from '../errors'
5
- import { acceptKeypair, importKeypair, readKeypair } from '../keys/index'
6
- import { validateName, validateUrl } from '../lib/validation'
7
- import {
8
- atomicWrite,
9
- readIdentityStore,
10
- updateIdentityStore,
11
- type Identity,
12
- type IdentityMode,
13
- type IdentityStoreOptions,
14
- } from '../state/index'
15
-
16
- const IDENTITY_EXPORT_VERSION = 1 as const
17
- const JwkSchema = z.record(z.string(), z.unknown())
18
- const IdentityExportFields = {
19
- subject: z.string().min(1),
20
- mode: z.enum(['local', 'remote']).optional(),
21
- kid: z.string().min(1).optional(),
22
- issuer: z.string().url().optional(),
23
- privateJwk: JwkSchema,
24
- publicJwk: JwkSchema,
25
- }
26
- const LegacyIdentityExportSchema = z.object(IdentityExportFields).strict()
27
- const IdentityExportV1Schema = z
28
- .object({ version: z.literal(IDENTITY_EXPORT_VERSION), ...IdentityExportFields })
29
- .strict()
30
-
31
- export interface IdentityFileOptions {
32
- readonly state?: IdentityStoreOptions
33
- readonly keysDir?: string
34
- }
35
-
36
- export interface IdentityExport {
37
- readonly version: 1
38
- readonly subject: string
39
- readonly mode: IdentityMode
40
- readonly kid?: string
41
- readonly issuer?: string
42
- readonly privateJwk: JWK
43
- readonly publicJwk: JWK
44
- }
45
-
46
- export interface IdentityImportOptions extends IdentityFileOptions {
47
- readonly name?: string
48
- readonly issuer?: string
49
- readonly replace?: boolean
50
- }
51
-
52
- export function isEncryptedIdentityExport(raw: string): boolean {
53
- const content = raw.trim()
54
- return !content.startsWith('{') && content.split('.').length === 5
55
- }
56
-
57
- export async function decodeIdentityExport(
58
- raw: string,
59
- passphrase?: string,
60
- ): Promise<IdentityExport> {
61
- let json = raw
62
- if (isEncryptedIdentityExport(raw)) {
63
- if (passphrase === undefined) {
64
- throw invalidExport('This encrypted identity export requires a passphrase.')
65
- }
66
- try {
67
- const { plaintext } = await compactDecrypt(raw.trim(), new TextEncoder().encode(passphrase), {
68
- keyManagementAlgorithms: ['PBES2-HS256+A128KW'],
69
- contentEncryptionAlgorithms: ['A256GCM'],
70
- })
71
- json = new TextDecoder().decode(plaintext)
72
- } catch {
73
- throw invalidExport('Could not decrypt the identity export.')
74
- }
75
- }
76
-
77
- let input: unknown
78
- try {
79
- input = JSON.parse(json)
80
- } catch {
81
- throw invalidExport('The identity export is not valid JSON.')
82
- }
83
-
84
- let decoded: z.infer<typeof LegacyIdentityExportSchema>
85
- try {
86
- decoded = hasVersion(input)
87
- ? IdentityExportV1Schema.parse(input)
88
- : LegacyIdentityExportSchema.parse(input)
89
- } catch {
90
- throw invalidExport('The identity export has an invalid or unsupported shape.')
91
- }
92
-
93
- const pair = await acceptKeypair({
94
- privateJwk: decoded.privateJwk,
95
- publicJwk: decoded.publicJwk,
96
- })
97
- if (decoded.kid && pair.kid && decoded.kid !== pair.kid) {
98
- throw invalidExport('The envelope key ID differs from its JWK key ID.')
99
- }
100
-
101
- return {
102
- version: IDENTITY_EXPORT_VERSION,
103
- subject: decoded.subject,
104
- mode: decoded.mode ?? 'local',
105
- kid: decoded.kid ?? pair.kid,
106
- issuer: decoded.issuer,
107
- privateJwk: pair.privateJwk,
108
- publicJwk: pair.publicJwk,
109
- }
110
- }
111
-
112
- export async function encodeIdentityExport(
113
- envelope: IdentityExport,
114
- passphrase?: string,
115
- ): Promise<string> {
116
- const plaintext = JSON.stringify(envelope, null, 2)
117
- if (passphrase === undefined) return plaintext
118
- return new CompactEncrypt(new TextEncoder().encode(plaintext))
119
- .setProtectedHeader({ alg: 'PBES2-HS256+A128KW', enc: 'A256GCM' })
120
- .encrypt(new TextEncoder().encode(passphrase))
121
- }
122
-
123
- export async function exportIdentity(
124
- name: string,
125
- options: IdentityFileOptions = {},
126
- ): Promise<IdentityExport> {
127
- const store = await readIdentityStore(options.state)
128
- const identity = store.identities[name]
129
- if (!identity)
130
- throw new Error(`Identity "${name}" not found. Run: astrale identity create ${name}`)
131
- if ((identity.source ?? 'key') !== 'key') {
132
- throw new Error(`Identity "${name}" is IdP-backed and has no transferable local keypair`)
133
- }
134
- const pair = await readKeypair(identity.subject, options.keysDir)
135
- return {
136
- version: IDENTITY_EXPORT_VERSION,
137
- subject: identity.subject,
138
- mode: identity.mode ?? 'local',
139
- kid: identity.kid ?? pair.kid,
140
- issuer: identity.issuer,
141
- privateJwk: pair.privateJwk,
142
- publicJwk: pair.publicJwk,
143
- }
144
- }
145
-
146
- export async function importIdentity(
147
- envelope: IdentityExport,
148
- options: IdentityImportOptions = {},
149
- ): Promise<Identity> {
150
- const name = options.name ?? envelope.subject
151
- validateName(name, 'Identity')
152
- if (options.issuer !== undefined) validateUrl(options.issuer)
153
-
154
- return updateIdentityStore(async (store) => {
155
- const existing = store.identities[name]
156
- if (existing && !options.replace) throw new Error(`Identity "${name}" already exists`)
157
- if (existing && (existing.source ?? 'key') !== 'key') {
158
- throw new Error(`Identity "${name}" already exists and is IdP-backed`)
159
- }
160
-
161
- const pair = await importKeypair(envelope.subject, envelope, options.keysDir)
162
- const identity: Identity = {
163
- subject: envelope.subject,
164
- createdAt: existing?.createdAt ?? (options.state?.now?.() ?? new Date()).toISOString(),
165
- source: 'key',
166
- mode: envelope.mode,
167
- kid: envelope.kid ?? pair.kid,
168
- issuer: options.issuer ?? envelope.issuer,
169
- }
170
- return {
171
- next: { ...store, identities: { ...store.identities, [name]: identity } },
172
- value: identity,
173
- }
174
- }, options.state)
175
- }
176
-
177
- export async function writeIdentityExport(path: string, content: string): Promise<void> {
178
- await atomicWrite(path, content)
179
- }
180
-
181
- function hasVersion(input: unknown): input is { readonly version: unknown } {
182
- return typeof input === 'object' && input !== null && Object.hasOwn(input, 'version')
183
- }
184
-
185
- function invalidExport(message: string): AstraleError {
186
- return new AstraleError('INVALID_IDENTITY_EXPORT', message)
187
- }
@@ -1,6 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.json",
3
- "compilerOptions": { "types": ["@types/node"] },
4
- "include": ["*.ts"],
5
- "exclude": ["__tests__"]
6
- }
package/src/index.ts DELETED
@@ -1 +0,0 @@
1
- export {}