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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/CHANGELOG.md +928 -0
  2. package/README.md +53 -43
  3. package/THIRD-PARTY-NOTICES.md +37 -1
  4. package/dist/astrale.js +349631 -83669
  5. package/dist/public/connect-core.js +16 -47
  6. package/dist/public/keys/index.js +1 -1
  7. package/dist/types/admin/contract.d.ts +11 -0
  8. package/dist/types/admin/graph/index.d.ts +1 -0
  9. package/dist/types/admin/graph/nodes.d.ts +12 -0
  10. package/dist/types/admin/instance/client.d.ts +2 -0
  11. package/dist/types/connection/lifetime.d.ts +1 -1
  12. package/dist/types/errors.d.ts +3 -0
  13. package/dist/types/lib/proc.d.ts +1 -0
  14. package/dist/types/lib/update.d.ts +15 -7
  15. package/package.json +8 -6
  16. package/studio/client/dist/assets/index-5C1uT6ML.css +2 -0
  17. package/studio/client/dist/assets/index-C4kNlvwF.js +80 -0
  18. package/studio/client/dist/assets/schema-studio-BR9d0faB.js +8 -0
  19. package/studio/client/dist/index.html +13 -2
  20. package/studio/package.json +2 -1
  21. package/studio/server/agent/ask.test.ts +7 -1
  22. package/studio/server/agent/bridge/grant.ts +15 -3
  23. package/studio/server/agent/prompts/system.test.ts +5 -0
  24. package/studio/server/agent/prompts/system.ts +19 -4
  25. package/studio/server/agent/routes.test.ts +39 -1
  26. package/studio/server/agent/routes.ts +3 -0
  27. package/studio/server/agent/run/coordinator.test.ts +7 -1
  28. package/studio/server/agent/run/preparation.ts +1 -0
  29. package/studio/server/agent/run/transcript.test.ts +47 -2
  30. package/studio/server/agent/run/transcript.ts +32 -3
  31. package/studio/server/api/documents.test.ts +31 -0
  32. package/studio/server/api/documents.ts +35 -1
  33. package/studio/server/api-agent-loadout.test.ts +7 -1
  34. package/studio/server/api.test.ts +7 -1
  35. package/studio/server/cache.ts +4 -4
  36. package/studio/server/detect.ts +9 -12
  37. package/studio/server/domain.test.ts +83 -3
  38. package/studio/server/domain.ts +205 -27
  39. package/studio/server/handoff/service.ts +1 -1
  40. package/studio/server/index.ts +5 -8
  41. package/studio/server/introspect/extractor.ts +111 -17
  42. package/studio/server/introspect/overlay-tsmorph.test.ts +9 -9
  43. package/studio/server/introspect/overlay.ts +1 -1
  44. package/studio/server/introspect/runtime.ts +9 -1
  45. package/studio/server/introspect/source-overlay/spans.ts +2 -5
  46. package/studio/server/lifecycle.ts +1 -1
  47. package/studio/server/state/baseline.test.ts +14 -0
  48. package/studio/server/state/baseline.ts +16 -2
  49. package/studio/server/watch.test.ts +2 -1
  50. package/studio/server/watch.ts +5 -2
  51. package/studio/server/workspace/create.ts +9 -8
  52. package/studio/server/workspace-state.ts +4 -6
  53. package/studio/server/workspace-watch.ts +33 -22
  54. package/studio/shared/contracts/agent.ts +3 -0
  55. package/viewer/dist/main.js +12 -12
  56. package/src/__tests__/fixtures/publication.ts +0 -20
  57. package/src/admin/.spec/api.d.ts +0 -3
  58. package/src/admin/.spec/architecture.md +0 -22
  59. package/src/admin/.spec/icon.svg +0 -3
  60. package/src/admin/.spec/layout.ts +0 -6
  61. package/src/admin/__tests__/fixture.ts +0 -25
  62. package/src/admin/catalog/.spec/api.d.ts +0 -63
  63. package/src/admin/catalog/.spec/architecture.md +0 -7
  64. package/src/admin/catalog/.spec/icon.svg +0 -3
  65. package/src/admin/catalog/.spec/layout.ts +0 -6
  66. package/src/admin/catalog/__tests__/client.test.ts +0 -245
  67. package/src/admin/catalog/client.ts +0 -195
  68. package/src/admin/catalog/index.ts +0 -13
  69. package/src/admin/catalog/model.ts +0 -41
  70. package/src/admin/catalog/tsconfig.json +0 -8
  71. package/src/admin/contract.ts +0 -47
  72. package/src/admin/graph/.spec/api.d.ts +0 -22
  73. package/src/admin/graph/.spec/architecture.md +0 -5
  74. package/src/admin/graph/.spec/icon.svg +0 -3
  75. package/src/admin/graph/.spec/layout.ts +0 -3
  76. package/src/admin/graph/index.ts +0 -6
  77. package/src/admin/graph/nodes.ts +0 -56
  78. package/src/admin/index.ts +0 -2
  79. package/src/admin/instance/.spec/api.d.ts +0 -62
  80. package/src/admin/instance/.spec/architecture.md +0 -10
  81. package/src/admin/instance/.spec/icon.svg +0 -3
  82. package/src/admin/instance/.spec/layout.ts +0 -6
  83. package/src/admin/instance/__tests__/client.test.ts +0 -273
  84. package/src/admin/instance/client.ts +0 -191
  85. package/src/admin/instance/index.ts +0 -15
  86. package/src/admin/instance/model.ts +0 -59
  87. package/src/admin/instance/tsconfig.json +0 -8
  88. package/src/commands/__tests__/admin-instance.test.ts +0 -91
  89. package/src/commands/__tests__/auth-login.test.ts +0 -231
  90. package/src/commands/__tests__/auth-token.test.ts +0 -223
  91. package/src/commands/__tests__/call-describe.test.ts +0 -80
  92. package/src/commands/__tests__/call.test.ts +0 -63
  93. package/src/commands/__tests__/domain-install-operation.test.ts +0 -145
  94. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  95. package/src/commands/__tests__/domain-list.test.ts +0 -133
  96. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  97. package/src/commands/__tests__/install-direct.test.ts +0 -128
  98. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  99. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  100. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  101. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  102. package/src/commands/__tests__/instance-status.test.ts +0 -139
  103. package/src/commands/__tests__/instance-use.test.ts +0 -67
  104. package/src/commands/__tests__/introspect-parse.test.ts +0 -100
  105. package/src/commands/__tests__/logs.test.ts +0 -345
  106. package/src/commands/__tests__/read-commands.test.ts +0 -377
  107. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  108. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  109. package/src/commands/__tests__/token-ttl.test.ts +0 -66
  110. package/src/commands/__tests__/update.test.ts +0 -95
  111. package/src/commands/__tests__/view-build.test.ts +0 -58
  112. package/src/commands/__tests__/view.test.ts +0 -197
  113. package/src/commands/admin/status.ts +0 -61
  114. package/src/commands/admin/use.ts +0 -100
  115. package/src/commands/auth/login.ts +0 -82
  116. package/src/commands/auth/logout.ts +0 -53
  117. package/src/commands/auth/status.ts +0 -86
  118. package/src/commands/auth/token.ts +0 -174
  119. package/src/commands/browser.ts +0 -236
  120. package/src/commands/call-describe.ts +0 -123
  121. package/src/commands/call.ts +0 -230
  122. package/src/commands/domain/install.ts +0 -575
  123. package/src/commands/domain/list.ts +0 -155
  124. package/src/commands/domain/publish.ts +0 -136
  125. package/src/commands/domain/uninstall.ts +0 -128
  126. package/src/commands/get.ts +0 -69
  127. package/src/commands/identity/__tests__/register.test.ts +0 -93
  128. package/src/commands/identity/create.ts +0 -35
  129. package/src/commands/identity/delete.ts +0 -24
  130. package/src/commands/identity/export.ts +0 -46
  131. package/src/commands/identity/import.ts +0 -61
  132. package/src/commands/identity/list.ts +0 -56
  133. package/src/commands/identity/register.ts +0 -195
  134. package/src/commands/identity/sync.ts +0 -38
  135. package/src/commands/identity/unsync.ts +0 -34
  136. package/src/commands/identity/use.ts +0 -24
  137. package/src/commands/identity/whoami.ts +0 -34
  138. package/src/commands/idp/add.ts +0 -150
  139. package/src/commands/idp/list.ts +0 -57
  140. package/src/commands/idp/refresh.ts +0 -38
  141. package/src/commands/idp/remove.ts +0 -36
  142. package/src/commands/idp/show.ts +0 -29
  143. package/src/commands/instance/active.ts +0 -73
  144. package/src/commands/instance/bookmark.ts +0 -101
  145. package/src/commands/instance/create.ts +0 -61
  146. package/src/commands/instance/delete.ts +0 -69
  147. package/src/commands/instance/forget.ts +0 -26
  148. package/src/commands/instance/list.ts +0 -197
  149. package/src/commands/instance/status.ts +0 -92
  150. package/src/commands/instance/use.ts +0 -263
  151. package/src/commands/introspect.ts +0 -129
  152. package/src/commands/logs.ts +0 -371
  153. package/src/commands/mutate.ts +0 -122
  154. package/src/commands/query.ts +0 -142
  155. package/src/commands/session/analyze.ts +0 -72
  156. package/src/commands/session/list.ts +0 -36
  157. package/src/commands/setup.ts +0 -54
  158. package/src/commands/status.ts +0 -60
  159. package/src/commands/studio.ts +0 -434
  160. package/src/commands/token.ts +0 -121
  161. package/src/commands/ui/__tests__/commands.test.ts +0 -152
  162. package/src/commands/ui/add.ts +0 -51
  163. package/src/commands/ui/doctor.ts +0 -21
  164. package/src/commands/ui/init.ts +0 -38
  165. package/src/commands/ui/list.ts +0 -26
  166. package/src/commands/ui/preset-apply.ts +0 -19
  167. package/src/commands/ui/preset-list.ts +0 -12
  168. package/src/commands/ui/shared.ts +0 -25
  169. package/src/commands/update.ts +0 -356
  170. package/src/commands/use.ts +0 -86
  171. package/src/commands/view-serve.ts +0 -26
  172. package/src/commands/view.ts +0 -658
  173. package/src/connect-core.test.ts +0 -38
  174. package/src/connect-core.ts +0 -42
  175. package/src/connection/.spec/api.d.ts +0 -110
  176. package/src/connection/.spec/architecture.md +0 -58
  177. package/src/connection/.spec/capabilities/connection.ts +0 -13
  178. package/src/connection/.spec/examples/call.ts +0 -7
  179. package/src/connection/.spec/flows/command.ts +0 -20
  180. package/src/connection/.spec/flows/session.ts +0 -62
  181. package/src/connection/.spec/laws/connection.ts +0 -213
  182. package/src/connection/.spec/layout.ts +0 -22
  183. package/src/connection/__tests__/auth.test.ts +0 -129
  184. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  185. package/src/connection/__tests__/call.test.ts +0 -17
  186. package/src/connection/__tests__/credential.test.ts +0 -254
  187. package/src/connection/__tests__/errors.test.ts +0 -577
  188. package/src/connection/__tests__/exchange.test.ts +0 -404
  189. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  190. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  191. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  192. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  193. package/src/connection/__tests__/managed.test.ts +0 -39
  194. package/src/connection/__tests__/reasons.test.ts +0 -78
  195. package/src/connection/__tests__/self.test.ts +0 -71
  196. package/src/connection/__tests__/session.test.ts +0 -144
  197. package/src/connection/__tests__/target.test.ts +0 -95
  198. package/src/connection/auth.ts +0 -265
  199. package/src/connection/call.ts +0 -7
  200. package/src/connection/command.ts +0 -67
  201. package/src/connection/credential.ts +0 -138
  202. package/src/connection/errors.ts +0 -1
  203. package/src/connection/exchange.ts +0 -394
  204. package/src/connection/failure/classify.ts +0 -110
  205. package/src/connection/failure/index.ts +0 -18
  206. package/src/connection/failure/model.ts +0 -28
  207. package/src/connection/failure/render.ts +0 -116
  208. package/src/connection/index.ts +0 -8
  209. package/src/connection/lifetime.ts +0 -25
  210. package/src/connection/reasons.ts +0 -209
  211. package/src/connection/self.ts +0 -138
  212. package/src/connection/session.ts +0 -203
  213. package/src/connection/target.ts +0 -112
  214. package/src/connection/tsconfig.json +0 -6
  215. package/src/errors.ts +0 -66
  216. package/src/graph/.spec/api.d.ts +0 -41
  217. package/src/graph/.spec/laws/documents.ts +0 -24
  218. package/src/graph/.spec/laws/projection.ts +0 -13
  219. package/src/graph/.spec/layout.ts +0 -14
  220. package/src/graph/__tests__/mutation.test.ts +0 -51
  221. package/src/graph/__tests__/projection.test.ts +0 -22
  222. package/src/graph/__tests__/query.test.ts +0 -180
  223. package/src/graph/class.ts +0 -30
  224. package/src/graph/index.ts +0 -4
  225. package/src/graph/mutation.ts +0 -46
  226. package/src/graph/projection.ts +0 -21
  227. package/src/graph/query.ts +0 -95
  228. package/src/graph/tsconfig.json +0 -6
  229. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  230. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  231. package/src/identity/.spec/api.d.ts +0 -124
  232. package/src/identity/.spec/architecture.md +0 -33
  233. package/src/identity/.spec/capabilities/identity.ts +0 -7
  234. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  235. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  236. package/src/identity/.spec/flows/import.ts +0 -29
  237. package/src/identity/.spec/laws/identity.ts +0 -56
  238. package/src/identity/.spec/layout.ts +0 -13
  239. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -65
  240. package/src/identity/__tests__/registration.test.ts +0 -64
  241. package/src/identity/__tests__/registry.test.ts +0 -74
  242. package/src/identity/__tests__/transfer.test.ts +0 -198
  243. package/src/identity/index.ts +0 -23
  244. package/src/identity/registration.ts +0 -72
  245. package/src/identity/registry.ts +0 -181
  246. package/src/identity/transfer.ts +0 -187
  247. package/src/identity/tsconfig.json +0 -6
  248. package/src/index.ts +0 -1
  249. package/src/keys/.spec/api.d.ts +0 -74
  250. package/src/keys/.spec/architecture.md +0 -13
  251. package/src/keys/.spec/laws/keys.ts +0 -43
  252. package/src/keys/.spec/layout.ts +0 -6
  253. package/src/keys/__tests__/algorithm.test.ts +0 -39
  254. package/src/keys/__tests__/keys.test.ts +0 -172
  255. package/src/keys/algorithm.ts +0 -33
  256. package/src/keys/credential.ts +0 -113
  257. package/src/keys/index.ts +0 -14
  258. package/src/keys/pair.ts +0 -219
  259. package/src/keys/tsconfig.json +0 -6
  260. package/src/lib/__tests__/admin-target.test.ts +0 -184
  261. package/src/lib/__tests__/binary.test.ts +0 -70
  262. package/src/lib/__tests__/browser-retention.test.ts +0 -212
  263. package/src/lib/__tests__/command-dx.test.ts +0 -102
  264. package/src/lib/__tests__/concurrency.test.ts +0 -62
  265. package/src/lib/__tests__/config.test.ts +0 -81
  266. package/src/lib/__tests__/design.test.ts +0 -99
  267. package/src/lib/__tests__/domain-publication.test.ts +0 -138
  268. package/src/lib/__tests__/format.test.ts +0 -22
  269. package/src/lib/__tests__/idp-session.driver.ts +0 -60
  270. package/src/lib/__tests__/idp-session.test.ts +0 -404
  271. package/src/lib/__tests__/idp.test.ts +0 -415
  272. package/src/lib/__tests__/instance-candidates.test.ts +0 -146
  273. package/src/lib/__tests__/instance-target.test.ts +0 -213
  274. package/src/lib/__tests__/instance.test.ts +0 -192
  275. package/src/lib/__tests__/local-status.test.ts +0 -202
  276. package/src/lib/__tests__/log-errors.test.ts +0 -64
  277. package/src/lib/__tests__/log.test.ts +0 -31
  278. package/src/lib/__tests__/meta.test.ts +0 -55
  279. package/src/lib/__tests__/output.test.ts +0 -162
  280. package/src/lib/__tests__/panel.test.ts +0 -40
  281. package/src/lib/__tests__/port.test.ts +0 -44
  282. package/src/lib/__tests__/prompt.test.ts +0 -25
  283. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  284. package/src/lib/__tests__/self.test.ts +0 -50
  285. package/src/lib/__tests__/skills.test.ts +0 -834
  286. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  287. package/src/lib/__tests__/table.test.ts +0 -53
  288. package/src/lib/__tests__/update.test.ts +0 -511
  289. package/src/lib/__tests__/use-target.test.ts +0 -56
  290. package/src/lib/__tests__/validation.test.ts +0 -34
  291. package/src/lib/__tests__/view-assets.test.ts +0 -171
  292. package/src/lib/__tests__/view-external-open-intent.test.ts +0 -150
  293. package/src/lib/__tests__/view-external-open-origins.test.ts +0 -27
  294. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  295. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  296. package/src/lib/__tests__/view-server.test.ts +0 -91
  297. package/src/lib/__tests__/view-session.test.ts +0 -100
  298. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  299. package/src/lib/admin-domain.ts +0 -43
  300. package/src/lib/admin-instance.ts +0 -56
  301. package/src/lib/admin-target.ts +0 -290
  302. package/src/lib/binary.ts +0 -127
  303. package/src/lib/browser-retention.ts +0 -210
  304. package/src/lib/browser.ts +0 -150
  305. package/src/lib/ca-fetch.ts +0 -133
  306. package/src/lib/command-dx.ts +0 -191
  307. package/src/lib/concurrency.ts +0 -31
  308. package/src/lib/config.ts +0 -57
  309. package/src/lib/credential-lifetime.ts +0 -24
  310. package/src/lib/domain-publication.ts +0 -104
  311. package/src/lib/failure-debug.ts +0 -26
  312. package/src/lib/format.ts +0 -4
  313. package/src/lib/idp-session.ts +0 -156
  314. package/src/lib/idp.ts +0 -926
  315. package/src/lib/instance-candidates.ts +0 -49
  316. package/src/lib/instance-target.ts +0 -197
  317. package/src/lib/instance.ts +0 -468
  318. package/src/lib/invocation.ts +0 -11
  319. package/src/lib/local-status.ts +0 -152
  320. package/src/lib/log.ts +0 -143
  321. package/src/lib/login-flow.ts +0 -201
  322. package/src/lib/meta.ts +0 -90
  323. package/src/lib/output.ts +0 -238
  324. package/src/lib/panel.ts +0 -61
  325. package/src/lib/port.ts +0 -41
  326. package/src/lib/proc.ts +0 -87
  327. package/src/lib/prompt.ts +0 -136
  328. package/src/lib/provision-instance.ts +0 -139
  329. package/src/lib/sdk-deps.ts +0 -104
  330. package/src/lib/self.ts +0 -22
  331. package/src/lib/skills/lock.ts +0 -117
  332. package/src/lib/skills/sync.ts +0 -878
  333. package/src/lib/skills.ts +0 -120
  334. package/src/lib/table.ts +0 -62
  335. package/src/lib/update.ts +0 -568
  336. package/src/lib/use-target.ts +0 -24
  337. package/src/lib/validation.ts +0 -59
  338. package/src/lib/view/assets.ts +0 -87
  339. package/src/lib/view/external-open-intent.ts +0 -41
  340. package/src/lib/view/external-open-origins.ts +0 -37
  341. package/src/lib/view/host-capabilities.ts +0 -17
  342. package/src/lib/view/open-intent.ts +0 -67
  343. package/src/lib/view/port-allocation.ts +0 -19
  344. package/src/lib/view/resolve.ts +0 -111
  345. package/src/lib/view/server.ts +0 -259
  346. package/src/lib/view/session.ts +0 -154
  347. package/src/lib/view/snapshot.ts +0 -101
  348. package/src/paths/.spec/api.d.ts +0 -13
  349. package/src/paths/.spec/architecture.md +0 -5
  350. package/src/paths/.spec/layout.ts +0 -3
  351. package/src/paths/index.ts +0 -13
  352. package/src/program/.spec/api.d.ts +0 -43
  353. package/src/program/.spec/architecture.md +0 -18
  354. package/src/program/.spec/laws/program.ts +0 -29
  355. package/src/program/.spec/layout.ts +0 -14
  356. package/src/program/__tests__/program.test.ts +0 -556
  357. package/src/program/argv.ts +0 -14
  358. package/src/program/build.ts +0 -205
  359. package/src/program/command.ts +0 -43
  360. package/src/program/index.ts +0 -3
  361. package/src/program/options.ts +0 -41
  362. package/src/program/registry.ts +0 -64
  363. package/src/program/tsconfig.json +0 -6
  364. package/src/setup/__tests__/instance-step.test.ts +0 -256
  365. package/src/setup/__tests__/util.test.ts +0 -29
  366. package/src/setup/engine.ts +0 -83
  367. package/src/setup/render.ts +0 -107
  368. package/src/setup/steps/admin.ts +0 -93
  369. package/src/setup/steps/agent-browser.ts +0 -81
  370. package/src/setup/steps/auth.ts +0 -54
  371. package/src/setup/steps/domain.ts +0 -68
  372. package/src/setup/steps/index.ts +0 -18
  373. package/src/setup/steps/instance.ts +0 -206
  374. package/src/setup/steps/skills-bridge.ts +0 -70
  375. package/src/setup/steps/skills.ts +0 -61
  376. package/src/setup/types.ts +0 -61
  377. package/src/setup/util.ts +0 -34
  378. package/src/state/.spec/api.d.ts +0 -152
  379. package/src/state/.spec/architecture.md +0 -45
  380. package/src/state/.spec/capabilities/state.ts +0 -7
  381. package/src/state/.spec/flows/identity-update.ts +0 -22
  382. package/src/state/.spec/laws/state.ts +0 -73
  383. package/src/state/.spec/layout.ts +0 -15
  384. package/src/state/__tests__/exchange-credentials.test.ts +0 -341
  385. package/src/state/__tests__/files.test.ts +0 -136
  386. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  387. package/src/state/__tests__/fixtures/session-route-process.ts +0 -93
  388. package/src/state/__tests__/identities.test.ts +0 -142
  389. package/src/state/__tests__/paths.test.ts +0 -28
  390. package/src/state/__tests__/session-routes.test.ts +0 -138
  391. package/src/state/exchange-credentials.ts +0 -250
  392. package/src/state/files.ts +0 -170
  393. package/src/state/identities.ts +0 -229
  394. package/src/state/index.ts +0 -31
  395. package/src/state/paths.ts +0 -64
  396. package/src/state/session-routes.ts +0 -34
  397. package/src/state/tsconfig.json +0 -6
  398. package/src/telemetry/__tests__/analyze-log.test.ts +0 -38
  399. package/src/telemetry/__tests__/gate.test.ts +0 -63
  400. package/src/telemetry/__tests__/recorder.test.ts +0 -111
  401. package/src/telemetry/__tests__/redact.test.ts +0 -79
  402. package/src/telemetry/__tests__/retention.test.ts +0 -267
  403. package/src/telemetry/__tests__/session.test.ts +0 -166
  404. package/src/telemetry/__tests__/settings.test.ts +0 -102
  405. package/src/telemetry/__tests__/store-scan.test.ts +0 -128
  406. package/src/telemetry/__tests__/trigger.test.ts +0 -78
  407. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  408. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  409. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  410. package/src/telemetry/adapters/claude-code.ts +0 -90
  411. package/src/telemetry/adapters/codex.ts +0 -160
  412. package/src/telemetry/adapters/index.ts +0 -45
  413. package/src/telemetry/adapters/types.ts +0 -21
  414. package/src/telemetry/analyze.ts +0 -249
  415. package/src/telemetry/gate.ts +0 -79
  416. package/src/telemetry/recorder.ts +0 -68
  417. package/src/telemetry/redact.ts +0 -53
  418. package/src/telemetry/retention.ts +0 -176
  419. package/src/telemetry/session.ts +0 -94
  420. package/src/telemetry/settings.ts +0 -79
  421. package/src/telemetry/store.ts +0 -174
  422. package/src/telemetry/trigger.ts +0 -107
  423. package/src/telemetry/types.ts +0 -64
  424. package/src/test-utils.ts +0 -18
  425. package/src/ui/.spec/api.d.ts +0 -14
  426. package/src/ui/.spec/architecture.md +0 -14
  427. package/src/ui/.spec/laws.ts +0 -50
  428. package/src/ui/.spec/layout.ts +0 -16
  429. package/src/ui/__tests__/ui.test.ts +0 -1742
  430. package/src/ui/index.ts +0 -13
  431. package/src/ui/lock.ts +0 -89
  432. package/src/ui/model.ts +0 -83
  433. package/src/ui/operations.ts +0 -1044
  434. package/src/ui/project.ts +0 -333
  435. package/src/ui/release.ts +0 -398
  436. package/src/ui/runner.ts +0 -18
  437. package/studio/client/dist/assets/index-BFVFs_8x.js +0 -81
  438. package/studio/client/dist/assets/index-DuB9iUdu.css +0 -2
  439. package/studio/client/dist/assets/schema-studio-DH6oEWME.js +0 -8
  440. package/studio/tsconfig.json +0 -24
  441. package/viewer/tsconfig.json +0 -13
@@ -1,174 +0,0 @@
1
- import type { CommandDefinition } from '../../program/index'
2
-
3
- import { AstraleError } from '../../errors'
4
- import { getDefault, getIdentity, readIdentities } from '../../identity/index'
5
- import { isSessionExpired, readIdpSession, type IdpSession } from '../../lib/idp'
6
- import { ensureFreshSession } from '../../lib/idp-session'
7
- import { fatal, log } from '../../lib/log'
8
- import { output } from '../../lib/output'
9
-
10
- type AuthTokenType = 'access' | 'id'
11
-
12
- type AuthTokenOpts = {
13
- name?: string
14
- idp?: string
15
- type?: AuthTokenType
16
- refresh?: boolean
17
- raw?: boolean
18
- json?: boolean
19
- }
20
-
21
- type AuthTokenResult = {
22
- identity: string
23
- idp: string
24
- issuer: string
25
- subject: string
26
- type: AuthTokenType
27
- token: string
28
- token_type?: string
29
- scope?: string
30
- expires_at?: string
31
- expired: boolean
32
- refreshed: boolean
33
- updatedAt: string
34
- }
35
-
36
- export default {
37
- name: 'token',
38
- description: 'Print a cached IdP provider token for an IdP-backed identity',
39
- options: [
40
- {
41
- flags: '--name <name>',
42
- description: 'IdP-backed identity name (defaults to active identity)',
43
- },
44
- { flags: '--idp <name>', description: 'Select the IdP when identity name is omitted' },
45
- {
46
- flags: '--type <type>',
47
- description: 'Token type to print',
48
- choices: ['access', 'id'],
49
- default: 'access',
50
- },
51
- {
52
- flags: '--no-refresh',
53
- description: 'Do not refresh an expired cached session before printing',
54
- },
55
- { flags: '--raw', description: 'Print only the token string' },
56
- { flags: '--json', description: 'Print JSON metadata including the token' },
57
- ],
58
- afterHelpText: `
59
- Behavior:
60
- Defaults to the active IdP-backed identity. If the cached session is expired,
61
- the CLI refreshes it before printing unless --no-refresh is passed. --raw
62
- prints only the token string for shell use.
63
-
64
- Examples:
65
- $ astrale auth token --raw
66
- $ astrale auth token --idp workos --raw
67
- $ astrale auth token --name alice --type id --json
68
- `,
69
- action: async (opts: AuthTokenOpts) => {
70
- let result: AuthTokenResult
71
- try {
72
- result = await resolveAuthToken(opts)
73
- } catch (error) {
74
- fatal(error, opts)
75
- }
76
-
77
- if (opts.raw) {
78
- process.stdout.write(result.token + '\n')
79
- return
80
- }
81
-
82
- if (opts.json) {
83
- output(result, { json: true })
84
- return
85
- }
86
-
87
- log.dim(` (${result.idp} ${result.type}_token for identity "${result.identity}" - secret)`)
88
- process.stdout.write(result.token + '\n')
89
- },
90
- } satisfies CommandDefinition
91
-
92
- export async function resolveAuthToken(opts: AuthTokenOpts): Promise<AuthTokenResult> {
93
- const identityName = await resolveIdentityName(opts)
94
- const session = await readIdpSession(identityName)
95
- if (!session) {
96
- throw new Error(
97
- `No cached IdP session for "${identityName}". Run: astrale auth login --name ${identityName}`,
98
- )
99
- }
100
-
101
- // ensureFreshSession serializes the (single-use) refresh-token exchange
102
- // across concurrent CLI processes and is a no-op while the token is fresh.
103
- const resolved = opts.refresh !== false ? await ensureFreshSession(identityName) : session
104
- const type = opts.type ?? 'access'
105
- const token = tokenFromSession(resolved, type)
106
-
107
- return {
108
- identity: resolved.identity,
109
- idp: resolved.idp,
110
- issuer: resolved.issuer,
111
- subject: resolved.subject,
112
- type,
113
- token,
114
- token_type: resolved.token_type,
115
- scope: resolved.scope,
116
- expires_at: resolved.expires_at,
117
- expired: isSessionExpired(resolved),
118
- refreshed: resolved.updatedAt !== session.updatedAt,
119
- updatedAt: resolved.updatedAt,
120
- }
121
- }
122
-
123
- async function resolveIdentityName(opts: AuthTokenOpts): Promise<string> {
124
- if (opts.name) {
125
- const identity = await getIdentity(opts.name)
126
- if ((identity.source ?? 'key') !== 'idp') {
127
- throw new AstraleError('AUTH_ERROR', `Identity "${opts.name}" is not IdP-backed`)
128
- }
129
- if (opts.idp && identity.idp !== opts.idp) {
130
- throw new AstraleError(
131
- 'AUTH_ERROR',
132
- `Identity "${opts.name}" is backed by IdP "${identity.idp ?? '?'}", not "${opts.idp}"`,
133
- )
134
- }
135
- return opts.name
136
- }
137
-
138
- if (opts.idp) {
139
- const store = await readIdentities()
140
- const matches = Object.entries(store.identities)
141
- .filter(([, identity]) => identity.source === 'idp' && identity.idp === opts.idp)
142
- .map(([name]) => name)
143
-
144
- if (matches.length === 0) {
145
- throw new AstraleError(
146
- 'AUTH_ERROR',
147
- `No IdP-backed identities found for IdP "${opts.idp}". Run: astrale auth login --idp ${opts.idp}`,
148
- )
149
- }
150
- if (matches.includes(store.default)) return store.default
151
- if (matches.length === 1) return matches[0]
152
- throw new AstraleError(
153
- 'AUTH_ERROR',
154
- `Multiple IdP-backed identities found for IdP "${opts.idp}": ${matches.join(', ')}. Pass --name.`,
155
- )
156
- }
157
-
158
- const identity = await getDefault()
159
- if ((identity.source ?? 'key') !== 'idp') {
160
- throw new AstraleError(
161
- 'AUTH_ERROR',
162
- 'Default identity is not IdP-backed. Pass --name or --idp.',
163
- )
164
- }
165
- return identity.name
166
- }
167
-
168
- function tokenFromSession(session: IdpSession, type: AuthTokenType): string {
169
- if (type === 'access') return session.access_token
170
- if (session.id_token) return session.id_token
171
- throw new Error(
172
- `Cached IdP session for "${session.identity}" has no id_token. Use --type access.`,
173
- )
174
- }
@@ -1,236 +0,0 @@
1
- import chalk from 'chalk'
2
- import { existsSync } from 'node:fs'
3
-
4
- import type { CommandDefinition } from '../program/index'
5
-
6
- import {
7
- ab,
8
- AGENT_BROWSER_REPO,
9
- type BrowserSession,
10
- findAgentBrowser,
11
- navigateAndCheck,
12
- pollAuth,
13
- profileDirFor,
14
- saveSession,
15
- } from '../lib/browser'
16
- import { sweepBrowserProfiles } from '../lib/browser-retention'
17
- import { readLocalStatus } from '../lib/local-status'
18
- import { fatal, log } from '../lib/log'
19
- import { isMachine, output, RAW_OUTPUT_OPTIONS, type RawOutputOpts } from '../lib/output'
20
-
21
- type BrowserOpts = RawOutputOpts & {
22
- url?: string
23
- cdp?: string
24
- profile?: string
25
- login?: boolean
26
- check?: boolean
27
- }
28
-
29
- /**
30
- * Opportunistic profile retention, the same `git gc --auto` shape the session
31
- * store uses: no daemon, no cron, it just rides on the command that created the
32
- * mess. Silent when there is nothing to do, and never fatal — losing a sweep is
33
- * strictly better than losing the browser command.
34
- */
35
- async function reportSweep(machine: boolean): Promise<void> {
36
- try {
37
- const swept = await sweepBrowserProfiles()
38
- if (machine || swept.bytesFreed === 0) return
39
- const freed = `${(swept.bytesFreed / 1024 / 1024).toFixed(0)} MB`
40
- const what = [
41
- swept.removed.length > 0 ? `${swept.removed.length} dormant profile(s) removed` : null,
42
- swept.purged.length > 0 ? `${swept.purged.length} cache(s) trimmed` : null,
43
- ]
44
- .filter(Boolean)
45
- .join(', ')
46
- log.dim(`retention: ${what} — ${freed} freed`)
47
- } catch {
48
- /* retention must never break the browser command */
49
- }
50
- }
51
-
52
- const LOGIN_TIMEOUT_MS = 180_000
53
- const POLL_INTERVAL_MS = 2500
54
-
55
- const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
56
-
57
- /** Resolve the GUI origin for the active instance (or an explicit --url). */
58
- async function resolveGuiOrigin(explicit?: string): Promise<string> {
59
- let target = explicit
60
- if (!target) {
61
- const status = await readLocalStatus()
62
- target = status.instance?.url ?? undefined
63
- }
64
- if (!target) {
65
- fatal(
66
- new Error(
67
- 'No target instance. Set one with `astrale instance use <name>`, or pass `--url <gui-url>`.',
68
- ),
69
- )
70
- }
71
- try {
72
- return new URL(target).origin
73
- } catch {
74
- return fatal(new Error(`Invalid instance URL: ${target}`))
75
- }
76
- }
77
-
78
- function requireAgentBrowser(machine: boolean, opts: RawOutputOpts): Promise<string> {
79
- return findAgentBrowser().then((bin) => {
80
- if (bin) return bin
81
- if (machine) {
82
- output({ error: 'agent-browser-not-installed', repo: AGENT_BROWSER_REPO }, opts)
83
- } else {
84
- log.error('agent-browser is not installed — it is the engine `astrale browser` drives.')
85
- log.dim(' Install it:')
86
- log.dim(' npm install -g agent-browser && agent-browser install')
87
- log.dim(' Recommended — also install its agent skill so your coding agent knows it:')
88
- log.dim(` npx skills add ${AGENT_BROWSER_REPO}`)
89
- }
90
- process.exit(1)
91
- })
92
- }
93
-
94
- function reportConnected(session: BrowserSession, machine: boolean, opts: RawOutputOpts): void {
95
- if (machine) {
96
- output({ connected: true, ...session }, opts)
97
- return
98
- }
99
- const drive = session.profile ? `--profile ${session.profile}` : `--cdp ${session.cdp}`
100
- log.success(
101
- `Connected to ${chalk.bold(session.url)}${session.email ? ` as ${session.email}` : ''}`,
102
- )
103
- log.dim(` session saved → ~/.astrale/browser.json (reused automatically next time)`)
104
- console.log('')
105
- console.log(chalk.bold('Drive it:'))
106
- console.log(` agent-browser ${drive} snapshot`)
107
- console.log(` agent-browser ${drive} open ${session.url}`)
108
- console.log(` agent-browser ${drive} click @e3`)
109
- }
110
-
111
- export default {
112
- name: 'browser',
113
- description: 'Open a reusable, authenticated browser session your agent can drive',
114
- options: [
115
- { flags: '--url <url>', description: 'GUI URL to connect (default: active instance)' },
116
- {
117
- flags: '--cdp <endpoint>',
118
- description: 'Attach to a running Chrome (port or ws URL) instead of a profile',
119
- },
120
- { flags: '--profile <dir>', description: 'Override the persistent profile directory' },
121
- { flags: '--login', description: 'Force interactive sign-in even if a session exists' },
122
- { flags: '--check', description: 'Report session status only; never open a window' },
123
- ...RAW_OUTPUT_OPTIONS,
124
- ],
125
- afterHelpText: `
126
- What it does:
127
- Wires your coding agent to the live Astrale GUI. It owns the *session* — pins a
128
- persistent per-instance profile, runs the one-time WorkOS sign-in, and verifies
129
- auth. Driving the page is agent-browser's job: once connected, your agent runs
130
- \`agent-browser --profile <dir> snapshot|open|click|eval\` directly.
131
-
132
- The GUI session is an httpOnly cookie with no token-injection path, so "use my
133
- session" means driving a browser whose profile holds the cookie. You sign in
134
- once; the profile keeps it and every later run is silent.
135
-
136
- Requires agent-browser (https://github.com/${AGENT_BROWSER_REPO}):
137
- npm install -g agent-browser && agent-browser install
138
- npx skills add ${AGENT_BROWSER_REPO} # recommended: teaches the agent its commands
139
-
140
- Examples:
141
- $ astrale browser # connect the active instance (sign in once)
142
- $ astrale browser --check # is the saved session still authenticated?
143
- $ astrale browser --login # force a fresh sign-in
144
- $ astrale browser --cdp 9222 # attach to a Chrome you already have open
145
- `,
146
- action: async (opts: BrowserOpts) => {
147
- const machine = isMachine(opts)
148
- const gui = await resolveGuiOrigin(opts.url)
149
- const host = new URL(gui).host
150
- await requireAgentBrowser(machine, opts)
151
-
152
- // Retention runs BEFORE anything launches, so no profile we touch can be in
153
- // use by a browser this command started. Profiles held by someone else's
154
- // live browser are skipped by the sweep itself.
155
- await reportSweep(machine)
156
-
157
- const usingCdp = !!opts.cdp
158
- const profile = usingCdp ? null : (opts.profile ?? profileDirFor(host))
159
- const target = usingCdp ? { cdp: opts.cdp } : { profile: profile! }
160
-
161
- const persist = async (state: { email?: string }): Promise<BrowserSession> => {
162
- const session: BrowserSession = {
163
- url: gui,
164
- host,
165
- profile,
166
- cdp: opts.cdp ?? null,
167
- email: state.email,
168
- updatedAt: new Date().toISOString(),
169
- }
170
- await saveSession(session)
171
- return session
172
- }
173
-
174
- // Attach mode: the external Chrome is the user's — never drive its login.
175
- if (usingCdp) {
176
- const state = await navigateAndCheck(gui, target)
177
- if (!state.authed) {
178
- if (machine) output({ connected: false, url: gui, host, cdp: opts.cdp }, opts)
179
- else {
180
- log.warn(`Attached to Chrome on ${opts.cdp}, but not signed in to ${gui}.`)
181
- log.dim(' Sign in in that browser window, then re-run `astrale browser --cdp ...`.')
182
- }
183
- process.exit(1)
184
- }
185
- reportConnected(await persist(state), machine, opts)
186
- return
187
- }
188
-
189
- // Profile mode: silent (headless) reuse check when the profile may already
190
- // hold a cookie. Skip for a brand-new profile — nothing to reuse, and it
191
- // avoids a throwaway headless navigation before the sign-in window opens.
192
- if (!opts.login && profile && existsSync(profile)) {
193
- const reused = await navigateAndCheck(gui, target)
194
- if (reused.authed) {
195
- reportConnected(await persist(reused), machine, opts)
196
- return
197
- }
198
- }
199
-
200
- // Not authenticated. In check/machine mode we never pop a window.
201
- if (opts.check || machine) {
202
- if (machine) output({ connected: false, url: gui, host, profile }, opts)
203
- else {
204
- log.warn(`No authenticated session for ${gui}.`)
205
- log.dim(' Run `astrale browser` (without --check) to sign in.')
206
- }
207
- process.exit(1)
208
- }
209
-
210
- // Interactive sign-in: open a HEADED window and poll until the router sets
211
- // the cookie. Every command on this browser must carry `headed:true` —
212
- // agent-browser defaults to headless, and an unflagged command flips the
213
- // live window back to headless (closing it mid-login). Proven: a poll
214
- // `eval` without --headed turns HEADED → HEADLESS on the next call.
215
- const headedTarget = { ...target, headed: true }
216
- log.step(`Opening ${chalk.bold(gui)} — sign in with your Astrale account in the window…`)
217
- await ab(['close'], target) // release any stale browser on this profile
218
- await ab(['open', gui], headedTarget)
219
-
220
- const deadline = Date.now() + LOGIN_TIMEOUT_MS
221
- let state = { authed: false } as { authed: boolean; email?: string }
222
- while (Date.now() < deadline) {
223
- await sleep(POLL_INTERVAL_MS)
224
- state = await pollAuth(headedTarget)
225
- if (state.authed) break
226
- }
227
- if (!state.authed) {
228
- fatal(
229
- new Error(
230
- `Sign-in not detected within ${LOGIN_TIMEOUT_MS / 1000}s. Re-run \`astrale browser\`.`,
231
- ),
232
- )
233
- }
234
- reportConnected(await persist(state), machine, opts)
235
- },
236
- } satisfies CommandDefinition
@@ -1,123 +0,0 @@
1
- import type { Path } from '@astrale-os/sdk/graph/path'
2
- import type { ResolvedFunction, ResolvedMethod } from '@astrale-os/sdk/schema'
3
-
4
- import { bundle, schema } from '@astrale-os/sdk/schema'
5
-
6
- import { AstraleError } from '../errors'
7
-
8
- export interface CallableDescription {
9
- readonly path: string
10
- readonly origin: string
11
- readonly method?: string
12
- readonly function?: string
13
- readonly class?: string
14
- readonly dispatch?: 'static' | 'instance'
15
- readonly description?: string
16
- readonly auth?: unknown
17
- readonly input?: unknown
18
- readonly output?: unknown
19
- readonly candidates?: readonly CallableDescription[]
20
- }
21
-
22
- /** Resolve one callable from an admitted installed Domain bundle. */
23
- export function describeCallableFromBundle(
24
- path: Path,
25
- input: unknown,
26
- ): CallableDescription | undefined {
27
- if (path.ast.anchor.kind !== 'domain') return undefined
28
- const origin = path.ast.anchor.origin
29
- const last = path.ast.steps.at(-1)
30
- if (last === undefined) return undefined
31
- const domain = schema.resolve(bundle.accept(input).root)
32
- if (domain.origin !== origin) return undefined
33
-
34
- if (last.kind === 'method') {
35
- const ownerStep = path.ast.steps.at(-2)
36
- if (ownerStep?.kind === 'projection' && ownerStep.projection.kind === 'class') {
37
- const owner = domain.classes[ownerStep.projection.name]
38
- if (owner?.kind !== 'node') return undefined
39
- const method = namedMethod(
40
- last.dispatch === 'static' ? owner.static.methods : owner.methods,
41
- last.name,
42
- last.dispatch,
43
- )
44
- return method === undefined
45
- ? undefined
46
- : description(path, origin, owner.ref.name, method, last.dispatch)
47
- }
48
-
49
- const matches = Object.values(domain.classes).flatMap((owner) => {
50
- if (owner.kind !== 'node') return []
51
- const method = namedMethod(owner.methods, last.name, last.dispatch)
52
- return method === undefined
53
- ? []
54
- : [description(path, origin, owner.ref.name, method, last.dispatch)]
55
- })
56
- if (matches.length === 1) return matches[0]
57
- if (matches.length > 1) {
58
- return Object.freeze({
59
- path: path.raw,
60
- origin,
61
- method: last.name,
62
- dispatch: last.dispatch,
63
- candidates: Object.freeze(matches),
64
- })
65
- }
66
- return undefined
67
- }
68
-
69
- if (last.kind === 'projection' && last.projection.kind === 'function') {
70
- const callable = domain.functions[last.projection.name]
71
- if (callable === undefined) return undefined
72
- return Object.freeze({
73
- path: path.raw,
74
- origin,
75
- function: callable.ref.name,
76
- ...callableFields(callable),
77
- })
78
- }
79
- return undefined
80
- }
81
-
82
- export function missingCallableDescription(path: string): AstraleError {
83
- return new AstraleError(
84
- 'CALL_DESCRIBE_UNAVAILABLE',
85
- `No callable schema is installed for ${path}.`,
86
- 'Use a Domain-rooted Path such as /:kernel.astrale.ai:class.Identity:whois. Method Paths are not Function nodes.',
87
- )
88
- }
89
-
90
- function namedMethod(
91
- methods: Iterable<ResolvedMethod>,
92
- name: string,
93
- dispatch: 'static' | 'instance',
94
- ): ResolvedMethod | undefined {
95
- const expectedStatic = dispatch === 'static'
96
- return [...methods].find((method) => method.name === name && method.static === expectedStatic)
97
- }
98
-
99
- function description(
100
- path: Path,
101
- origin: string,
102
- className: string,
103
- callable: ResolvedMethod,
104
- dispatch: 'static' | 'instance',
105
- ): CallableDescription {
106
- return Object.freeze({
107
- path: path.raw,
108
- origin,
109
- class: className,
110
- method: callable.name,
111
- dispatch,
112
- ...callableFields(callable),
113
- })
114
- }
115
-
116
- function callableFields(callable: ResolvedFunction | ResolvedMethod): Partial<CallableDescription> {
117
- return {
118
- ...(callable.description === undefined ? {} : { description: callable.description }),
119
- auth: callable.auth,
120
- input: callable.input,
121
- output: callable.output,
122
- }
123
- }