@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,140 +0,0 @@
1
- import type { AuthApi } from '@astrale-os/sdk/auth'
2
- import type { GraphApi } from '@astrale-os/sdk/client'
3
- import type { ClientSession } from '@astrale-os/sdk/client/session'
4
-
5
- import { issuer } from '@astrale-os/sdk/auth'
6
- import { describe, expect, test } from 'bun:test'
7
-
8
- import type { AstraleConfig } from '../../lib/config'
9
- import type { ConnectionContext, ConnectionFactory } from '../session'
10
-
11
- import { createClientSessionOptions, withResolvedClientSession } from '../session'
12
-
13
- const target = Object.freeze({
14
- url: 'https://gateway.example/instances/child/invoke',
15
- kernelIssuer: issuer.accept('https://child.example'),
16
- })
17
-
18
- const config: AstraleConfig = {
19
- issuer: 'https://cli.example',
20
- admin: {
21
- name: 'admin',
22
- url: 'https://admin.example',
23
- kernelIssuer: 'https://admin.example',
24
- },
25
- telemetry: { enabled: false },
26
- }
27
-
28
- const context: ConnectionContext = Object.freeze({
29
- session: {} as ClientSession,
30
- callerSession: {} as ClientSession,
31
- graph: {} as GraphApi,
32
- auth: {} as AuthApi,
33
- target,
34
- })
35
-
36
- describe('connection session', () => {
37
- /** @evidence TEST-CLI-CONNECTION-PINS-SOURCE-ISSUER */
38
- test('pins the selected canonical Kernel issuer without a transport escape hatch', async () => {
39
- const auth = { ttlSeconds: 3_600, resolve: async () => ({ credential: 'credential' }) }
40
- const options = createClientSessionOptions(target, globalThis.fetch, auth, 2_500)
41
-
42
- expect(options.kernel).toBe(target.kernelIssuer)
43
- expect(options).not.toHaveProperty('url')
44
- expect(options).not.toHaveProperty('sourceIssuer')
45
- })
46
-
47
- /** @evidence TEST-CLI-CONNECTION-OMITS-EXPLICIT-ANONYMOUS-CREDENTIAL */
48
- test('constructs an anonymous Client Session without an auth resolver', () => {
49
- const options = createClientSessionOptions(target, globalThis.fetch, undefined, 2_500)
50
-
51
- expect(options.kernel).toBe(target.kernelIssuer)
52
- expect(options.auth).toBeUndefined()
53
- expect(Object.hasOwn(options, 'auth')).toBe(false)
54
- })
55
-
56
- /** @evidence TEST-CLI-CONNECTION-CLOSES-OWNED-CLIENTS */
57
- test('closes its owned connection after success, failure, and cancellation', async () => {
58
- for (const outcome of ['success', 'failure', 'cancellation'] as const) {
59
- let closes = 0
60
- const open: ConnectionFactory = () => ({
61
- context,
62
- close() {
63
- closes += 1
64
- },
65
- })
66
- const pending = withResolvedClientSession(
67
- target,
68
- {},
69
- config,
70
- async (received) => {
71
- expect(received).toBe(context)
72
- if (outcome === 'failure') throw new Error('action failed')
73
- if (outcome === 'cancellation') throw new DOMException('cancelled', 'AbortError')
74
- return 'done'
75
- },
76
- open,
77
- )
78
- if (outcome === 'success') await expect(pending).resolves.toBe('done')
79
- else await expect(pending).rejects.toThrow()
80
- expect(closes).toBe(1)
81
- }
82
- })
83
-
84
- /** @evidence TEST-CLI-CONNECTION-REJECTS-INVALID-TIMEOUT-BEFORE-OPEN */
85
- test('rejects invalid timeouts before constructing a connection', async () => {
86
- for (const timeout of ['0', '-1', '1.5', 'nope', '999999999999999999999']) {
87
- let opened = false
88
- await expect(
89
- withResolvedClientSession(
90
- target,
91
- { timeout },
92
- config,
93
- async () => undefined,
94
- () => {
95
- opened = true
96
- throw new Error('must not open')
97
- },
98
- ),
99
- ).rejects.toMatchObject({ code: 'INVALID_FLAG' })
100
- expect(opened).toBe(false)
101
- }
102
-
103
- let receivedTimeout = 0
104
- await withResolvedClientSession(
105
- target,
106
- { timeout: '2500' },
107
- config,
108
- async () => undefined,
109
- (_target, timeoutMs) => {
110
- receivedTimeout = timeoutMs
111
- return { context, close() {} }
112
- },
113
- )
114
- expect(receivedTimeout).toBe(2_500)
115
- })
116
-
117
- /** @evidence TEST-CLI-CONNECTION-REJECTS-ANONYMOUS-CREDENTIAL-CONFLICT */
118
- test('rejects anonymous plus explicit credentials before opening a connection', async () => {
119
- for (const options of [
120
- { anonymous: true, as: 'alice' },
121
- { anonymous: true, creds: 'token' },
122
- { anonymous: true, as: 'alice', creds: 'token' },
123
- ]) {
124
- let opened = false
125
- await expect(
126
- withResolvedClientSession(
127
- target,
128
- options,
129
- config,
130
- async () => undefined,
131
- () => {
132
- opened = true
133
- throw new Error('must not open')
134
- },
135
- ),
136
- ).rejects.toMatchObject({ code: 'INVALID_FLAG' })
137
- expect(opened).toBe(false)
138
- }
139
- })
140
- })
@@ -1,94 +0,0 @@
1
- import { issuer } from '@astrale-os/sdk/auth'
2
- import { describe, expect, test } from 'bun:test'
3
-
4
- import type { AstraleConfig } from '../../lib/config'
5
- import type { InstanceStore } from '../../lib/instance'
6
-
7
- import { resolveAdminConnectionTarget, resolveConnectionTarget } from '../target'
8
-
9
- const config: AstraleConfig = {
10
- issuer: 'https://cli.example',
11
- admin: {
12
- name: 'control',
13
- url: 'https://admin.example/api',
14
- kernelIssuer: 'https://admin.example/issuer',
15
- domainIssuer: 'https://admin-domain.example',
16
- },
17
- telemetry: { enabled: false },
18
- }
19
-
20
- const instances: InstanceStore = {
21
- active: 'staging',
22
- instances: {
23
- staging: {
24
- url: 'https://staging.example/api',
25
- issuer: 'https://identity.staging.example',
26
- defaultIdentity: 'alice',
27
- caFile: '/etc/astrale/staging-ca.pem',
28
- },
29
- },
30
- }
31
-
32
- describe('connection target', () => {
33
- /** @evidence TEST-CLI-CONNECTION-SELECTS-EXACT-TARGET */
34
- test('preserves URL, bookmark, active, managed, and Admin target semantics', async () => {
35
- expect(
36
- await resolveConnectionTarget({ url: 'https://direct.example/invoke' }, config, {
37
- instances,
38
- }),
39
- ).toEqual({
40
- url: 'https://direct.example/invoke',
41
- kernelIssuer: issuer.accept('https://direct.example/invoke'),
42
- })
43
-
44
- expect(await resolveConnectionTarget({}, config, { instances })).toEqual({
45
- url: 'https://staging.example/api',
46
- kernelIssuer: issuer.accept('https://identity.staging.example'),
47
- slug: 'staging',
48
- defaultIdentity: 'alice',
49
- caFile: '/etc/astrale/staging-ca.pem',
50
- })
51
-
52
- expect(
53
- await resolveConnectionTarget(
54
- { instance: 'staging', url: 'https://override.example/invoke' },
55
- config,
56
- { instances },
57
- ),
58
- ).toMatchObject({
59
- url: 'https://override.example/invoke',
60
- kernelIssuer: 'https://identity.staging.example',
61
- slug: 'staging',
62
- })
63
-
64
- expect(
65
- await resolveConnectionTarget({ instance: 'remote' }, config, {
66
- instances,
67
- managed: async (slug) => ({
68
- id: 'managed-id',
69
- slug,
70
- url: 'https://managed.example',
71
- state: 'ready',
72
- }),
73
- }),
74
- ).toEqual({
75
- url: 'https://managed.example',
76
- kernelIssuer: issuer.accept('https://managed.example'),
77
- slug: 'remote',
78
- })
79
-
80
- expect(await resolveConnectionTarget({ instance: 'control' }, config, { instances })).toEqual({
81
- url: 'https://admin.example/api',
82
- kernelIssuer: issuer.accept('https://admin.example/issuer'),
83
- domainIssuer: issuer.accept('https://admin-domain.example'),
84
- slug: 'control',
85
- })
86
-
87
- expect(await resolveAdminConnectionTarget({}, config, instances)).toEqual({
88
- url: 'https://admin.example/api',
89
- kernelIssuer: issuer.accept('https://admin.example/issuer'),
90
- domainIssuer: issuer.accept('https://admin-domain.example'),
91
- slug: 'control',
92
- })
93
- })
94
- })
@@ -1,249 +0,0 @@
1
- import type { AstraleConfig } from '../lib/config'
2
- import type { ConnectionOptions, ConnectionTarget } from './target'
3
-
4
- import { AuthError } from '../errors'
5
- import { getDefault, getIdentity, type Identity } from '../identity/registry'
6
- import { signAs } from '../keys/index'
7
- import {
8
- accessTokenForAudience,
9
- classifyRefreshFailure,
10
- IdpAudienceMismatchError,
11
- } from '../lib/idp'
12
- import {
13
- ensureFreshSession,
14
- IdpSessionMissingError,
15
- IdpSessionNoRefreshTokenError,
16
- } from '../lib/idp-session'
17
- import { KEYS_DIR } from '../state/index'
18
-
19
- export type KeyIdentityAuthOptions = {
20
- issuer: string
21
- subject?: string
22
- audience: string
23
- }
24
-
25
- /** Pin the local identity label before a session performs any authenticated effect. */
26
- export async function bindCredentialIdentity<Options extends ConnectionOptions>(
27
- options: Options,
28
- target: ConnectionTarget,
29
- ): Promise<Options> {
30
- if (options.anonymous === true || options.creds !== undefined || options.as !== undefined) {
31
- return options
32
- }
33
- const identity = target.defaultIdentity ?? (await getDefault()).name
34
- return Object.freeze({ ...options, as: identity })
35
- }
36
-
37
- /**
38
- * Resolve a signed JWT credential from CLI options.
39
- *
40
- * The **audience** is passed in explicitly by the caller because transport URL
41
- * and kernel issuer can differ for remote deployments.
42
- *
43
- * Three cases, in order of priority:
44
- * 1. `opts.creds` — pre-signed credential, returned as-is.
45
- * 2. `opts.as` — sign as a named local identity.
46
- * 3. Default — sign as the active local identity. If the identity has a
47
- * registration for the target instance, use that target-issued `(iss, sub)`.
48
- */
49
- export async function resolveCredential(
50
- opts: { as?: string; creds?: string; defaultIdentity?: string },
51
- config: AstraleConfig,
52
- audience: string = config.issuer,
53
- registrationKey?: string,
54
- ): Promise<string> {
55
- if (opts.creds) return opts.creds
56
- // Track the resolved identity so the catch block can tailor its hint: an
57
- // IdP-backed identity whose session lapsed needs `astrale auth login`, not
58
- // the `astrale identity create` keypair hint that suits local key identities.
59
- let resolvedIdentity: Identity | undefined
60
- let resolvedName: string | undefined
61
- try {
62
- const identityName = opts.as ?? opts.defaultIdentity
63
- // Explicit `--as` wins: sign with that identity's key. When the identity
64
- // has a registration record for the targeted instance (populated by
65
- // `astrale identity register`), use the kernel-derived `(iss, sub)` so the
66
- // JWT matches what the kernel published under its issuer store.
67
- if (identityName) {
68
- const identity = await getIdentity(identityName)
69
- resolvedIdentity = identity
70
- resolvedName = identityName
71
- if ((identity.source ?? 'key') === 'idp')
72
- return await resolveIdpAccessToken(identityName, identity, audience)
73
- return await signAs(
74
- identity.subject,
75
- KEYS_DIR,
76
- resolveKeyIdentityAuthOptions(identity, config, audience, registrationKey),
77
- )
78
- }
79
-
80
- const identity = await getDefault()
81
- resolvedIdentity = identity
82
- resolvedName = identity.name
83
- if ((identity.source ?? 'key') === 'idp') {
84
- return await resolveIdpAccessToken(identity.name, identity, audience)
85
- }
86
-
87
- return await signAs(
88
- identity.subject,
89
- KEYS_DIR,
90
- resolveKeyIdentityAuthOptions(identity, config, audience, registrationKey),
91
- )
92
- } catch (e) {
93
- const message = e instanceof Error ? e.message : 'Failed to resolve credentials'
94
- const hint = resolveCredentialHint(opts, resolvedIdentity, resolvedName, e)
95
- throw new AuthError(message, hint)
96
- }
97
- }
98
-
99
- function resolveCredentialHint(
100
- opts: { as?: string; defaultIdentity?: string },
101
- identity: Identity | undefined,
102
- name: string | undefined,
103
- error?: unknown,
104
- ): string {
105
- // Audience mismatch: the IdP minted a token for a different `aud` than the
106
- // target requires (e.g. WorkOS stamps a fixed API audience and ignores the
107
- // requested one). Re-login mints the *same* aud again, so don't suggest it —
108
- // point at targeting an instance whose audience matches what the IdP issues.
109
- if (error instanceof IdpAudienceMismatchError) {
110
- return error.actual
111
- ? `The IdP issues tokens for audience ${error.actual}, not the target's ${error.requested}. Target an instance whose URL/issuer is ${error.actual} (re-login won't change the audience).`
112
- : `The IdP did not mint a token for the target audience ${error.requested}, and re-login won't change it. Target an instance whose audience the IdP issues, or reconfigure the bookmark/IdP.`
113
- }
114
- // Org-membership rejection: the session is healthy; the org we scoped the
115
- // token to doesn't hold this user. Re-login can never fix it.
116
- if (error instanceof IdpOrgMembershipError) {
117
- return 'This instance might belong to a different account.'
118
- }
119
- // Transient IdP outage: the cached session is still valid — retrying is the
120
- // fix, not re-login.
121
- if (error instanceof IdpRefreshTransientError) {
122
- return 'The IdP could not be reached. Check the network and retry — the cached session is likely still valid.'
123
- }
124
- // IdP-backed identities fail when the cached session expires or the upstream
125
- // session is terminated (e.g. WorkOS "Session has already ended"). Re-login,
126
- // don't recreate keys.
127
- if (identity && (identity.source ?? 'key') === 'idp' && name) {
128
- const idpFlag = identity.idp ? ` --idp ${identity.idp}` : ''
129
- return `IdP session for "${name}" has expired. Run: astrale auth login --name ${name}${idpFlag}`
130
- }
131
- if (opts.as) {
132
- return 'Check identity name. Available identities: astrale identity list'
133
- }
134
- if (opts.defaultIdentity) {
135
- return `Check bookmark default identity "${opts.defaultIdentity}". Available identities: astrale identity list`
136
- }
137
- return 'Run `astrale identity create <name>` to set up keys'
138
- }
139
-
140
- export function resolveKeyIdentityAuthOptions(
141
- identity: Identity,
142
- config: AstraleConfig,
143
- audience: string = config.issuer,
144
- registrationKey?: string,
145
- ): KeyIdentityAuthOptions {
146
- const registration = registrationKey ? identity.registrations?.[registrationKey] : undefined
147
- return {
148
- issuer:
149
- registration?.iss ?? identity.issuer ?? systemIdentityIssuer(identity, audience, config),
150
- subject: registration?.sub,
151
- audience,
152
- }
153
- }
154
-
155
- function systemIdentityIssuer(identity: Identity, audience: string, config: AstraleConfig): string {
156
- // Imported kernel bootstrap keys are subject=system and are published by the
157
- // target kernel's JWKS. Without a stored issuer, signing them as the
158
- // placeholder CLI issuer makes the kernel try OIDC discovery for a
159
- // non-resolving host — use the audience (the target kernel) instead.
160
- return identity.subject === 'system' ? audience : config.issuer
161
- }
162
-
163
- async function resolveIdpAccessToken(
164
- identityName: string,
165
- identity: Identity,
166
- audience: string,
167
- ): Promise<string> {
168
- let resolved
169
- try {
170
- resolved = await ensureFreshSession(identityName, { audience })
171
- } catch (e) {
172
- if (e instanceof IdpSessionMissingError) {
173
- throw new Error(
174
- `No cached IdP session for "${identityName}". Run: astrale auth login --idp ${identity.idp ?? '<idp>'}`,
175
- )
176
- }
177
- if (e instanceof IdpSessionNoRefreshTokenError) {
178
- throw classifyNoRefreshTokenError(audience, identity.audience, e)
179
- }
180
- // An audience mismatch means the session is healthy but the IdP won't
181
- // mint this audience — re-login is futile, so propagate it verbatim for
182
- // the hint logic to handle.
183
- if (e instanceof IdpAudienceMismatchError) throw e
184
- throw refreshFailureError(identityName, identity, e)
185
- }
186
-
187
- const token = accessTokenForAudience(resolved, audience)
188
- if (!token) {
189
- throw new Error(
190
- `IdP token for "${identityName}" was not minted for target audience ${audience}. ` +
191
- `Run: astrale auth login --name ${identityName} --idp ${identity.idp ?? '<idp>'} --audience ${audience}`,
192
- )
193
- }
194
-
195
- return token
196
- }
197
-
198
- export function classifyNoRefreshTokenError(
199
- requestedAudience: string,
200
- sourceAudience: string | undefined,
201
- error: IdpSessionNoRefreshTokenError,
202
- ): IdpSessionNoRefreshTokenError | IdpAudienceMismatchError {
203
- return sourceAudience !== undefined && sourceAudience !== requestedAudience
204
- ? new IdpAudienceMismatchError(requestedAudience, sourceAudience)
205
- : error
206
- }
207
-
208
- /** A refresh attempt failed for a reason that re-login will NOT fix. */
209
- export class IdpRefreshTransientError extends Error {
210
- constructor(message: string) {
211
- super(message)
212
- this.name = 'IdpRefreshTransientError'
213
- }
214
- }
215
-
216
- /** The IdP refused to scope the session to the target's organization. */
217
- export class IdpOrgMembershipError extends Error {
218
- constructor(message: string) {
219
- super(message)
220
- this.name = 'IdpOrgMembershipError'
221
- }
222
- }
223
-
224
- function refreshFailureError(identityName: string, identity: Identity, cause: unknown): Error {
225
- const reason = cause instanceof Error ? cause.message : String(cause)
226
- const idpFlag = identity.idp ? ` --idp ${identity.idp}` : ''
227
- // Only a definitively dead grant (invalid_grant: WorkOS idle/absolute
228
- // timeout, logout elsewhere, reuse-detection revocation) warrants a
229
- // re-login. Network failures and IdP 5xx leave the cached session valid —
230
- // telling the user to re-login for those would burn a perfectly good
231
- // session.
232
- switch (classifyRefreshFailure(cause)) {
233
- case 'transient':
234
- return new IdpRefreshTransientError(
235
- `Could not reach the IdP to refresh the session for "${identityName}" (${reason}). ` +
236
- 'The cached session is likely still valid — retry the command.',
237
- )
238
- case 'org-rejected':
239
- // Healthy session, wrong org — re-login can never fix it.
240
- return new IdpOrgMembershipError(
241
- `The IdP refused to scope "${identityName}" to this instance's organization (${reason}).`,
242
- )
243
- default:
244
- return new Error(
245
- `IdP session for "${identityName}" could not be refreshed (${reason}). ` +
246
- `The cached session has expired or ended — run: astrale auth login --name ${identityName}${idpFlag}`,
247
- )
248
- }
249
- }
@@ -1,7 +0,0 @@
1
- import { call, type Call } from '@astrale-os/sdk/client'
2
- import { Path } from '@astrale-os/sdk/graph/path'
3
-
4
- /** Convert the CLI's untrusted text/JSON boundary into the one public Call representation. */
5
- export function createPathCall(path: string, input: unknown): Call {
6
- return call(Path.parse(path), input as Parameters<typeof call>[1])
7
- }
@@ -1,67 +0,0 @@
1
- import chalk from 'chalk'
2
-
3
- import type { ConnectionContext } from './session'
4
- import type { ConnectionOptions } from './target'
5
-
6
- import { formatElapsed } from '../lib/format'
7
- import { spinner } from '../lib/log'
8
- import { isMachine, present } from '../lib/output'
9
- import { formatKernelError } from './errors'
10
- import { withClientSession } from './session'
11
-
12
- export interface KernelCommandOpts extends ConnectionOptions {
13
- readonly raw?: boolean
14
- readonly json?: boolean
15
- readonly format?: 'yaml' | 'json'
16
- readonly debug?: boolean
17
- }
18
-
19
- export interface OperationRecovery {
20
- readonly operation: string
21
- readonly retry: string
22
- }
23
-
24
- /**
25
- * Encapsulates the standard kernel command lifecycle:
26
- * spinner → connect → call → timing → output → error handling.
27
- *
28
- * Commands provide a `fn` that does the actual work and an optional
29
- * `format` callback for custom output. If `format` is omitted, the
30
- * result is passed to the standard `output()` function.
31
- */
32
- export async function runKernelCommand<T>(input: {
33
- readonly opts: KernelCommandOpts
34
- readonly label: string
35
- readonly recovery?: OperationRecovery
36
- readonly fn: (context: ConnectionContext) => Promise<T>
37
- readonly format?: (
38
- result: T,
39
- options: KernelCommandOpts,
40
- machine: boolean,
41
- ) => void | Promise<void>
42
- }): Promise<void> {
43
- const { opts, label, fn } = input
44
- const isRaw = isMachine(opts)
45
- const spin = !isRaw ? spinner(`${label}...`) : null
46
- const startTime = performance.now()
47
-
48
- try {
49
- const result = await withClientSession(opts, fn)
50
- const elapsed = performance.now() - startTime
51
-
52
- spin?.succeed(`${label} ${chalk.dim(formatElapsed(elapsed))}`)
53
- if (!isRaw) console.log('')
54
-
55
- if (input.format) {
56
- await input.format(result, opts, isRaw)
57
- } else {
58
- present(result, opts)
59
- }
60
- } catch (error) {
61
- if (!isRaw && spin) spin.fail(`${label} failed`)
62
- await formatKernelError(error, isRaw, undefined, opts.debug, {
63
- recovery: input.recovery,
64
- })
65
- process.exit(1)
66
- }
67
- }
@@ -1,117 +0,0 @@
1
- import type { Fetch } from '@astrale-os/sdk/client'
2
- import type { SessionAuth } from '@astrale-os/sdk/client/session'
3
-
4
- import { credential, type IssuerId } from '@astrale-os/sdk/auth'
5
-
6
- import type { AstraleConfig } from '../lib/config'
7
- import type { ConnectionOptions, ConnectionTarget } from './target'
8
-
9
- import { AstraleError } from '../errors'
10
- import { resolveCredential } from './auth'
11
- import { createExchangeCredentialResolver } from './exchange'
12
- import { registrationKeyForTarget } from './target'
13
-
14
- const DELEGATION_TTL_SECONDS = 60
15
-
16
- export interface SourceCredentialResolver {
17
- resolve(audience: IssuerId, signal: AbortSignal): Promise<string>
18
- }
19
-
20
- /** Resolve source authority; an omitted Session delegation preserves exact current authority. */
21
- export function createConnectionCredential(
22
- expectedSourceIssuer: IssuerId,
23
- source: SourceCredentialResolver,
24
- ): SessionAuth {
25
- const resolveSource = source.resolve.bind(source)
26
- return Object.freeze({
27
- ttlSeconds: DELEGATION_TTL_SECONDS,
28
- async resolve(
29
- _call: Parameters<SessionAuth['resolve']>[0],
30
- signal: Parameters<SessionAuth['resolve']>[1],
31
- ) {
32
- const resolved = await resolveSource(expectedSourceIssuer, signal)
33
- const ttlSeconds = sourceBoundDelegationTtl(resolved)
34
- return Object.freeze({
35
- credential: resolved,
36
- ...(ttlSeconds === undefined ? {} : { delegate: { ttlSeconds } }),
37
- })
38
- },
39
- })
40
- }
41
-
42
- /** Never request a destination carrier that could outlive its current source bearer. */
43
- function sourceBoundDelegationTtl(input: string): number | undefined {
44
- try {
45
- const expiresAt = credential.inspect(input).claims.exp
46
- if (typeof expiresAt !== 'number' || !Number.isSafeInteger(expiresAt)) return undefined
47
- const remaining = expiresAt - Math.ceil(Date.now() / 1_000) - 1
48
- return Math.max(1, Math.min(DELEGATION_TTL_SECONDS, remaining))
49
- } catch {
50
- // Preserve opaque explicit credentials; the Kernel remains their authority.
51
- return undefined
52
- }
53
- }
54
-
55
- /** Bind CLI identity state and Core Auth delegation to one Session auth capability. */
56
- export function createCliCredential(
57
- target: ConnectionTarget,
58
- options: ConnectionOptions,
59
- config: AstraleConfig,
60
- fetch: Fetch = globalThis.fetch,
61
- timeoutMs = 30_000,
62
- ): SessionAuth | undefined {
63
- validateCredentialSelection(options)
64
- if (options.anonymous === true) return undefined
65
- const authOptions = Object.freeze({
66
- ...(options.as === undefined ? {} : { as: options.as }),
67
- ...(options.creds === undefined ? {} : { creds: options.creds }),
68
- ...(target.defaultIdentity === undefined ? {} : { defaultIdentity: target.defaultIdentity }),
69
- })
70
- const source: SourceCredentialResolver = {
71
- async resolve(audience, signal) {
72
- requireLive(signal)
73
- const credential = await resolveCredential(
74
- authOptions,
75
- config,
76
- audience,
77
- registrationKeyForTarget(target),
78
- )
79
- requireLive(signal)
80
- return credential
81
- },
82
- }
83
- const effective =
84
- target.domainIssuer === undefined || options.creds !== undefined
85
- ? source
86
- : createExchangeCredentialResolver(
87
- { ...target, domainIssuer: target.domainIssuer },
88
- source,
89
- fetch,
90
- timeoutMs,
91
- )
92
- return createConnectionCredential(target.kernelIssuer, effective)
93
- }
94
-
95
- /** Reject contradictory explicit credential selections before identity or network access. */
96
- export function validateCredentialSelection(options: ConnectionOptions): void {
97
- if (options.as !== undefined && options.creds !== undefined) {
98
- throw new AstraleError('INVALID_FLAG', '--as cannot be combined with --creds.')
99
- }
100
- if (options.anonymous !== true) return
101
- const conflicting = [
102
- ...(options.as === undefined ? [] : ['--as']),
103
- ...(options.creds === undefined ? [] : ['--creds']),
104
- ]
105
- if (conflicting.length === 0) return
106
- throw new AstraleError(
107
- 'INVALID_FLAG',
108
- `--anonymous cannot be combined with ${conflicting.join(' or ')}.`,
109
- )
110
- }
111
-
112
- function requireLive(signal: AbortSignal): void {
113
- if (!signal.aborted) return
114
- throw signal.reason instanceof Error
115
- ? signal.reason
116
- : new DOMException('The operation was aborted.', 'AbortError')
117
- }
@@ -1 +0,0 @@
1
- export { formatKernelError, functionInputIssues, schemaUpgradeHint } from './failure'