@astrale-os/cli 1.0.0-beta.8 → 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 (599) 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 -93172
  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/instance/model.d.ts +0 -39
  11. package/dist/types/connect-core.d.ts +0 -22
  12. package/dist/types/connection/auth.d.ts +0 -36
  13. package/dist/types/errors.d.ts +0 -23
  14. package/dist/types/identity/registry.d.ts +0 -25
  15. package/dist/types/keys/algorithm.d.ts +0 -6
  16. package/dist/types/keys/credential.d.ts +0 -21
  17. package/dist/types/keys/index.d.ts +0 -4
  18. package/dist/types/keys/pair.d.ts +0 -34
  19. package/dist/types/lib/admin-target.d.ts +0 -78
  20. package/dist/types/lib/ca-fetch.d.ts +0 -2
  21. package/dist/types/lib/config.d.ts +0 -71
  22. package/dist/types/lib/failure-debug.d.ts +0 -1
  23. package/dist/types/lib/format.d.ts +0 -1
  24. package/dist/types/lib/idp-session.d.ts +0 -33
  25. package/dist/types/lib/idp.d.ts +0 -404
  26. package/dist/types/lib/instance-target.d.ts +0 -38
  27. package/dist/types/lib/instance.d.ts +0 -196
  28. package/dist/types/lib/invocation.d.ts +0 -3
  29. package/dist/types/lib/log.d.ts +0 -33
  30. package/dist/types/lib/login-flow.d.ts +0 -49
  31. package/dist/types/lib/meta.d.ts +0 -36
  32. package/dist/types/lib/output.d.ts +0 -87
  33. package/dist/types/lib/proc.d.ts +0 -43
  34. package/dist/types/lib/table.d.ts +0 -18
  35. package/dist/types/lib/update.d.ts +0 -131
  36. package/dist/types/lib/validation.d.ts +0 -11
  37. package/dist/types/paths/index.d.ts +0 -2
  38. package/dist/types/state/exchange-credentials.d.ts +0 -25
  39. package/dist/types/state/files.d.ts +0 -9
  40. package/dist/types/state/identities.d.ts +0 -42
  41. package/dist/types/state/index.d.ts +0 -8
  42. package/dist/types/state/paths.d.ts +0 -32
  43. package/src/__tests__/fixtures/publication.ts +0 -20
  44. package/src/admin/.spec/api.d.ts +0 -3
  45. package/src/admin/.spec/architecture.md +0 -15
  46. package/src/admin/.spec/icon.svg +0 -3
  47. package/src/admin/.spec/layout.ts +0 -6
  48. package/src/admin/__tests__/binding.test.ts +0 -31
  49. package/src/admin/__tests__/fixture.ts +0 -101
  50. package/src/admin/binding.ts +0 -98
  51. package/src/admin/catalog/.spec/api.d.ts +0 -65
  52. package/src/admin/catalog/.spec/architecture.md +0 -6
  53. package/src/admin/catalog/.spec/icon.svg +0 -3
  54. package/src/admin/catalog/.spec/layout.ts +0 -6
  55. package/src/admin/catalog/__tests__/client.test.ts +0 -142
  56. package/src/admin/catalog/client.ts +0 -218
  57. package/src/admin/catalog/index.ts +0 -13
  58. package/src/admin/catalog/model.ts +0 -41
  59. package/src/admin/catalog/tsconfig.json +0 -8
  60. package/src/admin/graph/.spec/api.d.ts +0 -22
  61. package/src/admin/graph/.spec/architecture.md +0 -5
  62. package/src/admin/graph/.spec/icon.svg +0 -3
  63. package/src/admin/graph/.spec/layout.ts +0 -3
  64. package/src/admin/graph/index.ts +0 -6
  65. package/src/admin/graph/nodes.ts +0 -56
  66. package/src/admin/index.ts +0 -2
  67. package/src/admin/instance/.spec/api.d.ts +0 -66
  68. package/src/admin/instance/.spec/architecture.md +0 -10
  69. package/src/admin/instance/.spec/icon.svg +0 -3
  70. package/src/admin/instance/.spec/layout.ts +0 -6
  71. package/src/admin/instance/__tests__/client.test.ts +0 -266
  72. package/src/admin/instance/client.ts +0 -290
  73. package/src/admin/instance/index.ts +0 -16
  74. package/src/admin/instance/model.ts +0 -66
  75. package/src/admin/instance/tsconfig.json +0 -8
  76. package/src/commands/__tests__/admin-instance.test.ts +0 -88
  77. package/src/commands/__tests__/auth-login.test.ts +0 -231
  78. package/src/commands/__tests__/auth-token.test.ts +0 -223
  79. package/src/commands/__tests__/call-describe.test.ts +0 -80
  80. package/src/commands/__tests__/call.test.ts +0 -29
  81. package/src/commands/__tests__/domain-install-operation.test.ts +0 -126
  82. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  83. package/src/commands/__tests__/domain-list.test.ts +0 -133
  84. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  85. package/src/commands/__tests__/install-direct.test.ts +0 -21
  86. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  87. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  88. package/src/commands/__tests__/instance-create-hosts.test.ts +0 -29
  89. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  90. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  91. package/src/commands/__tests__/instance-use.test.ts +0 -67
  92. package/src/commands/__tests__/introspect-parse.test.ts +0 -21
  93. package/src/commands/__tests__/logs.test.ts +0 -97
  94. package/src/commands/__tests__/read-commands.test.ts +0 -294
  95. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  96. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  97. package/src/commands/__tests__/token-ttl.test.ts +0 -21
  98. package/src/commands/__tests__/update.test.ts +0 -95
  99. package/src/commands/__tests__/view-build.test.ts +0 -58
  100. package/src/commands/__tests__/view.test.ts +0 -149
  101. package/src/commands/admin/status.ts +0 -61
  102. package/src/commands/admin/use.ts +0 -100
  103. package/src/commands/auth/login.ts +0 -82
  104. package/src/commands/auth/logout.ts +0 -52
  105. package/src/commands/auth/status.ts +0 -86
  106. package/src/commands/auth/token.ts +0 -174
  107. package/src/commands/browser.ts +0 -207
  108. package/src/commands/call-describe.ts +0 -123
  109. package/src/commands/call.ts +0 -205
  110. package/src/commands/domain/install.ts +0 -548
  111. package/src/commands/domain/list.ts +0 -155
  112. package/src/commands/domain/publish.ts +0 -133
  113. package/src/commands/domain/uninstall.ts +0 -128
  114. package/src/commands/get.ts +0 -69
  115. package/src/commands/identity/__tests__/register.test.ts +0 -93
  116. package/src/commands/identity/create.ts +0 -35
  117. package/src/commands/identity/delete.ts +0 -24
  118. package/src/commands/identity/export.ts +0 -46
  119. package/src/commands/identity/import.ts +0 -61
  120. package/src/commands/identity/list.ts +0 -56
  121. package/src/commands/identity/register.ts +0 -196
  122. package/src/commands/identity/sync.ts +0 -38
  123. package/src/commands/identity/unsync.ts +0 -34
  124. package/src/commands/identity/use.ts +0 -24
  125. package/src/commands/identity/whoami.ts +0 -34
  126. package/src/commands/idp/add.ts +0 -150
  127. package/src/commands/idp/list.ts +0 -57
  128. package/src/commands/idp/refresh.ts +0 -38
  129. package/src/commands/idp/remove.ts +0 -36
  130. package/src/commands/idp/show.ts +0 -29
  131. package/src/commands/instance/active.ts +0 -73
  132. package/src/commands/instance/bookmark.ts +0 -101
  133. package/src/commands/instance/create.ts +0 -69
  134. package/src/commands/instance/delete.ts +0 -68
  135. package/src/commands/instance/forget.ts +0 -26
  136. package/src/commands/instance/list.ts +0 -197
  137. package/src/commands/instance/status.ts +0 -38
  138. package/src/commands/instance/use.ts +0 -259
  139. package/src/commands/introspect.ts +0 -110
  140. package/src/commands/logs.ts +0 -283
  141. package/src/commands/mutate.ts +0 -122
  142. package/src/commands/query.ts +0 -136
  143. package/src/commands/session/analyze.ts +0 -50
  144. package/src/commands/session/list.ts +0 -36
  145. package/src/commands/setup.ts +0 -54
  146. package/src/commands/status.ts +0 -60
  147. package/src/commands/studio.ts +0 -434
  148. package/src/commands/token.ts +0 -107
  149. package/src/commands/update.ts +0 -334
  150. package/src/commands/use.ts +0 -86
  151. package/src/commands/view-serve.ts +0 -26
  152. package/src/commands/view.ts +0 -614
  153. package/src/connect-core.test.ts +0 -38
  154. package/src/connect-core.ts +0 -42
  155. package/src/connection/.spec/api.d.ts +0 -110
  156. package/src/connection/.spec/architecture.md +0 -47
  157. package/src/connection/.spec/capabilities/connection.ts +0 -13
  158. package/src/connection/.spec/examples/call.ts +0 -7
  159. package/src/connection/.spec/flows/command.ts +0 -20
  160. package/src/connection/.spec/flows/session.ts +0 -61
  161. package/src/connection/.spec/laws/connection.ts +0 -205
  162. package/src/connection/.spec/layout.ts +0 -21
  163. package/src/connection/__tests__/auth.test.ts +0 -128
  164. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  165. package/src/connection/__tests__/call.test.ts +0 -17
  166. package/src/connection/__tests__/credential.test.ts +0 -119
  167. package/src/connection/__tests__/errors.test.ts +0 -577
  168. package/src/connection/__tests__/exchange.test.ts +0 -295
  169. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  170. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  171. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  172. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  173. package/src/connection/__tests__/managed.test.ts +0 -39
  174. package/src/connection/__tests__/reasons.test.ts +0 -78
  175. package/src/connection/__tests__/self.test.ts +0 -71
  176. package/src/connection/__tests__/session.test.ts +0 -140
  177. package/src/connection/__tests__/target.test.ts +0 -93
  178. package/src/connection/auth.ts +0 -236
  179. package/src/connection/call.ts +0 -7
  180. package/src/connection/command.ts +0 -67
  181. package/src/connection/credential.ts +0 -117
  182. package/src/connection/errors.ts +0 -1
  183. package/src/connection/exchange.ts +0 -311
  184. package/src/connection/failure/classify.ts +0 -110
  185. package/src/connection/failure/index.ts +0 -18
  186. package/src/connection/failure/model.ts +0 -28
  187. package/src/connection/failure/render.ts +0 -116
  188. package/src/connection/index.ts +0 -8
  189. package/src/connection/reasons.ts +0 -209
  190. package/src/connection/self.ts +0 -138
  191. package/src/connection/session.ts +0 -185
  192. package/src/connection/target.ts +0 -112
  193. package/src/connection/tsconfig.json +0 -6
  194. package/src/errors.ts +0 -66
  195. package/src/graph/.spec/api.d.ts +0 -41
  196. package/src/graph/.spec/laws/documents.ts +0 -24
  197. package/src/graph/.spec/laws/projection.ts +0 -13
  198. package/src/graph/.spec/layout.ts +0 -14
  199. package/src/graph/__tests__/mutation.test.ts +0 -51
  200. package/src/graph/__tests__/projection.test.ts +0 -22
  201. package/src/graph/__tests__/query.test.ts +0 -173
  202. package/src/graph/class.ts +0 -30
  203. package/src/graph/index.ts +0 -4
  204. package/src/graph/mutation.ts +0 -46
  205. package/src/graph/projection.ts +0 -21
  206. package/src/graph/query.ts +0 -97
  207. package/src/graph/tsconfig.json +0 -6
  208. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  209. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  210. package/src/identity/.spec/api.d.ts +0 -124
  211. package/src/identity/.spec/architecture.md +0 -33
  212. package/src/identity/.spec/capabilities/identity.ts +0 -7
  213. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  214. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  215. package/src/identity/.spec/flows/import.ts +0 -29
  216. package/src/identity/.spec/laws/identity.ts +0 -56
  217. package/src/identity/.spec/layout.ts +0 -13
  218. package/src/identity/.spec/schemas/identity-export-v1.schema.json +0 -25
  219. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -53
  220. package/src/identity/__tests__/registration.test.ts +0 -64
  221. package/src/identity/__tests__/registry.test.ts +0 -70
  222. package/src/identity/__tests__/transfer.test.ts +0 -198
  223. package/src/identity/index.ts +0 -23
  224. package/src/identity/registration.ts +0 -72
  225. package/src/identity/registry.ts +0 -179
  226. package/src/identity/transfer.ts +0 -187
  227. package/src/identity/tsconfig.json +0 -6
  228. package/src/index.ts +0 -1
  229. package/src/keys/.spec/api.d.ts +0 -74
  230. package/src/keys/.spec/architecture.md +0 -13
  231. package/src/keys/.spec/laws/keys.ts +0 -43
  232. package/src/keys/.spec/layout.ts +0 -6
  233. package/src/keys/__tests__/algorithm.test.ts +0 -39
  234. package/src/keys/__tests__/keys.test.ts +0 -168
  235. package/src/keys/algorithm.ts +0 -33
  236. package/src/keys/credential.ts +0 -112
  237. package/src/keys/index.ts +0 -14
  238. package/src/keys/pair.ts +0 -219
  239. package/src/keys/tsconfig.json +0 -6
  240. package/src/lib/__tests__/admin-target.test.ts +0 -184
  241. package/src/lib/__tests__/binary.test.ts +0 -55
  242. package/src/lib/__tests__/command-dx.test.ts +0 -102
  243. package/src/lib/__tests__/concurrency.test.ts +0 -62
  244. package/src/lib/__tests__/config.test.ts +0 -54
  245. package/src/lib/__tests__/design.test.ts +0 -99
  246. package/src/lib/__tests__/domain-publication.test.ts +0 -133
  247. package/src/lib/__tests__/format.test.ts +0 -22
  248. package/src/lib/__tests__/idp-session.driver.ts +0 -53
  249. package/src/lib/__tests__/idp-session.test.ts +0 -379
  250. package/src/lib/__tests__/idp.test.ts +0 -415
  251. package/src/lib/__tests__/instance-candidates.test.ts +0 -148
  252. package/src/lib/__tests__/instance-target.test.ts +0 -212
  253. package/src/lib/__tests__/instance.test.ts +0 -192
  254. package/src/lib/__tests__/local-status.test.ts +0 -202
  255. package/src/lib/__tests__/log-errors.test.ts +0 -64
  256. package/src/lib/__tests__/log.test.ts +0 -31
  257. package/src/lib/__tests__/meta.test.ts +0 -55
  258. package/src/lib/__tests__/output.test.ts +0 -162
  259. package/src/lib/__tests__/panel.test.ts +0 -40
  260. package/src/lib/__tests__/port.test.ts +0 -44
  261. package/src/lib/__tests__/prompt.test.ts +0 -25
  262. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  263. package/src/lib/__tests__/self.test.ts +0 -50
  264. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  265. package/src/lib/__tests__/table.test.ts +0 -53
  266. package/src/lib/__tests__/update.test.ts +0 -351
  267. package/src/lib/__tests__/use-target.test.ts +0 -56
  268. package/src/lib/__tests__/validation.test.ts +0 -34
  269. package/src/lib/__tests__/view-assets.test.ts +0 -146
  270. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  271. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  272. package/src/lib/__tests__/view-server.test.ts +0 -68
  273. package/src/lib/__tests__/view-session.test.ts +0 -99
  274. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  275. package/src/lib/admin-domain.ts +0 -43
  276. package/src/lib/admin-instance.ts +0 -50
  277. package/src/lib/admin-target.ts +0 -290
  278. package/src/lib/binary.ts +0 -110
  279. package/src/lib/browser.ts +0 -150
  280. package/src/lib/ca-fetch.ts +0 -133
  281. package/src/lib/command-dx.ts +0 -188
  282. package/src/lib/concurrency.ts +0 -31
  283. package/src/lib/config.ts +0 -46
  284. package/src/lib/domain-publication.ts +0 -102
  285. package/src/lib/failure-debug.ts +0 -26
  286. package/src/lib/format.ts +0 -4
  287. package/src/lib/idp-session.ts +0 -134
  288. package/src/lib/idp.ts +0 -906
  289. package/src/lib/instance-candidates.ts +0 -49
  290. package/src/lib/instance-target.ts +0 -197
  291. package/src/lib/instance.ts +0 -463
  292. package/src/lib/invocation.ts +0 -11
  293. package/src/lib/local-status.ts +0 -152
  294. package/src/lib/log.ts +0 -143
  295. package/src/lib/login-flow.ts +0 -201
  296. package/src/lib/meta.ts +0 -90
  297. package/src/lib/output.ts +0 -238
  298. package/src/lib/panel.ts +0 -61
  299. package/src/lib/port.ts +0 -41
  300. package/src/lib/proc.ts +0 -82
  301. package/src/lib/prompt.ts +0 -136
  302. package/src/lib/provision-instance.ts +0 -162
  303. package/src/lib/sdk-deps.ts +0 -104
  304. package/src/lib/self.ts +0 -22
  305. package/src/lib/skills.ts +0 -171
  306. package/src/lib/table.ts +0 -62
  307. package/src/lib/update.ts +0 -409
  308. package/src/lib/use-target.ts +0 -24
  309. package/src/lib/validation.ts +0 -59
  310. package/src/lib/view/assets.ts +0 -78
  311. package/src/lib/view/open-intent.ts +0 -67
  312. package/src/lib/view/port-allocation.ts +0 -19
  313. package/src/lib/view/resolve.ts +0 -111
  314. package/src/lib/view/server.ts +0 -244
  315. package/src/lib/view/session.ts +0 -152
  316. package/src/lib/view/snapshot.ts +0 -101
  317. package/src/paths/.spec/api.d.ts +0 -13
  318. package/src/paths/.spec/architecture.md +0 -5
  319. package/src/paths/.spec/layout.ts +0 -3
  320. package/src/paths/index.ts +0 -13
  321. package/src/program/.spec/api.d.ts +0 -42
  322. package/src/program/.spec/architecture.md +0 -18
  323. package/src/program/.spec/laws/program.ts +0 -29
  324. package/src/program/.spec/layout.ts +0 -14
  325. package/src/program/__tests__/program.test.ts +0 -362
  326. package/src/program/build.ts +0 -183
  327. package/src/program/command.ts +0 -42
  328. package/src/program/index.ts +0 -2
  329. package/src/program/options.ts +0 -41
  330. package/src/program/registry.ts +0 -63
  331. package/src/program/tsconfig.json +0 -6
  332. package/src/setup/__tests__/instance-step.test.ts +0 -239
  333. package/src/setup/__tests__/util.test.ts +0 -29
  334. package/src/setup/engine.ts +0 -83
  335. package/src/setup/render.ts +0 -107
  336. package/src/setup/steps/admin.ts +0 -93
  337. package/src/setup/steps/agent-browser.ts +0 -81
  338. package/src/setup/steps/auth.ts +0 -54
  339. package/src/setup/steps/domain.ts +0 -68
  340. package/src/setup/steps/index.ts +0 -18
  341. package/src/setup/steps/instance.ts +0 -199
  342. package/src/setup/steps/skills-bridge.ts +0 -70
  343. package/src/setup/steps/skills.ts +0 -59
  344. package/src/setup/types.ts +0 -61
  345. package/src/setup/util.ts +0 -34
  346. package/src/state/.spec/api.d.ts +0 -133
  347. package/src/state/.spec/architecture.md +0 -31
  348. package/src/state/.spec/capabilities/state.ts +0 -7
  349. package/src/state/.spec/flows/identity-update.ts +0 -22
  350. package/src/state/.spec/laws/state.ts +0 -73
  351. package/src/state/.spec/layout.ts +0 -14
  352. package/src/state/__tests__/exchange-credentials.test.ts +0 -188
  353. package/src/state/__tests__/files.test.ts +0 -113
  354. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  355. package/src/state/__tests__/identities.test.ts +0 -142
  356. package/src/state/__tests__/paths.test.ts +0 -27
  357. package/src/state/exchange-credentials.ts +0 -219
  358. package/src/state/files.ts +0 -129
  359. package/src/state/identities.ts +0 -229
  360. package/src/state/index.ts +0 -29
  361. package/src/state/paths.ts +0 -61
  362. package/src/state/tsconfig.json +0 -6
  363. package/src/telemetry/__tests__/gate.test.ts +0 -63
  364. package/src/telemetry/__tests__/recorder.test.ts +0 -110
  365. package/src/telemetry/__tests__/redact.test.ts +0 -79
  366. package/src/telemetry/__tests__/session.test.ts +0 -166
  367. package/src/telemetry/__tests__/trigger.test.ts +0 -49
  368. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  369. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  370. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  371. package/src/telemetry/adapters/claude-code.ts +0 -90
  372. package/src/telemetry/adapters/codex.ts +0 -160
  373. package/src/telemetry/adapters/index.ts +0 -45
  374. package/src/telemetry/adapters/types.ts +0 -21
  375. package/src/telemetry/analyze.ts +0 -227
  376. package/src/telemetry/gate.ts +0 -79
  377. package/src/telemetry/recorder.ts +0 -57
  378. package/src/telemetry/redact.ts +0 -53
  379. package/src/telemetry/session.ts +0 -88
  380. package/src/telemetry/settings.ts +0 -26
  381. package/src/telemetry/store.ts +0 -91
  382. package/src/telemetry/trigger.ts +0 -119
  383. package/src/telemetry/types.ts +0 -64
  384. package/src/test-utils.ts +0 -18
  385. package/studio/client/dist/assets/elk-api-Di4OXGNH.js +0 -1
  386. package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
  387. package/studio/client/dist/assets/index-BLm6J11H.js +0 -81
  388. package/studio/client/dist/assets/index-BiGR8Oo9.css +0 -1
  389. package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
  390. package/studio/client/dist/assets/index-DTjvkOUX.js +0 -8
  391. package/studio/client/dist/index.html +0 -13
  392. package/studio/package.json +0 -65
  393. package/studio/server/agent/ask.test.ts +0 -74
  394. package/studio/server/agent/ask.ts +0 -71
  395. package/studio/server/agent/bridge/client.test.ts +0 -49
  396. package/studio/server/agent/bridge/client.ts +0 -37
  397. package/studio/server/agent/bridge/grant.test.ts +0 -62
  398. package/studio/server/agent/bridge/grant.ts +0 -84
  399. package/studio/server/agent/bridge/routes.test.ts +0 -151
  400. package/studio/server/agent/bridge/routes.ts +0 -148
  401. package/studio/server/agent/bridge/stdio.ts +0 -195
  402. package/studio/server/agent/conversation.test.ts +0 -89
  403. package/studio/server/agent/conversation.ts +0 -158
  404. package/studio/server/agent/harness/adapter.ts +0 -171
  405. package/studio/server/agent/harness/claude/adapter.test.ts +0 -348
  406. package/studio/server/agent/harness/claude/adapter.ts +0 -71
  407. package/studio/server/agent/harness/claude/ask.ts +0 -114
  408. package/studio/server/agent/harness/claude/capabilities.ts +0 -27
  409. package/studio/server/agent/harness/claude/command.ts +0 -63
  410. package/studio/server/agent/harness/claude/events.ts +0 -215
  411. package/studio/server/agent/harness/claude/loadout.ts +0 -132
  412. package/studio/server/agent/harness/claude/mcp.test.ts +0 -36
  413. package/studio/server/agent/harness/claude/mcp.ts +0 -41
  414. package/studio/server/agent/harness/claude/skills.ts +0 -43
  415. package/studio/server/agent/harness/codex/adapter.test.ts +0 -269
  416. package/studio/server/agent/harness/codex/adapter.ts +0 -116
  417. package/studio/server/agent/harness/codex/ask.test.ts +0 -176
  418. package/studio/server/agent/harness/codex/ask.ts +0 -181
  419. package/studio/server/agent/harness/codex/command.test.ts +0 -69
  420. package/studio/server/agent/harness/codex/command.ts +0 -43
  421. package/studio/server/agent/harness/codex/events.test.ts +0 -94
  422. package/studio/server/agent/harness/codex/events.ts +0 -132
  423. package/studio/server/agent/harness/codex/exec.ts +0 -113
  424. package/studio/server/agent/harness/codex/loadout.ts +0 -60
  425. package/studio/server/agent/harness/codex/mcp.test.ts +0 -32
  426. package/studio/server/agent/harness/codex/mcp.ts +0 -27
  427. package/studio/server/agent/harness/codex/models.test.ts +0 -167
  428. package/studio/server/agent/harness/codex/models.ts +0 -211
  429. package/studio/server/agent/harness/codex/skills.ts +0 -33
  430. package/studio/server/agent/harness/gateway/config.test.ts +0 -98
  431. package/studio/server/agent/harness/gateway/config.ts +0 -214
  432. package/studio/server/agent/harness/gateway/token.test.ts +0 -133
  433. package/studio/server/agent/harness/gateway/token.ts +0 -166
  434. package/studio/server/agent/harness/mock/adapter.ts +0 -190
  435. package/studio/server/agent/harness/mock/domain-edit.ts +0 -41
  436. package/studio/server/agent/harness/process.test.ts +0 -46
  437. package/studio/server/agent/harness/process.ts +0 -104
  438. package/studio/server/agent/harness/registry.ts +0 -37
  439. package/studio/server/agent/harness/selection.test.ts +0 -75
  440. package/studio/server/agent/harness/selection.ts +0 -85
  441. package/studio/server/agent/harness/skills.test.ts +0 -95
  442. package/studio/server/agent/harness/skills.ts +0 -100
  443. package/studio/server/agent/layout.test.ts +0 -95
  444. package/studio/server/agent/notify.ts +0 -12
  445. package/studio/server/agent/prompts/anchors.test.ts +0 -70
  446. package/studio/server/agent/prompts/anchors.ts +0 -153
  447. package/studio/server/agent/prompts/ask.ts +0 -34
  448. package/studio/server/agent/prompts/system.test.ts +0 -13
  449. package/studio/server/agent/prompts/system.ts +0 -99
  450. package/studio/server/agent/prompts/turn.ts +0 -66
  451. package/studio/server/agent/routes.test.ts +0 -176
  452. package/studio/server/agent/routes.ts +0 -214
  453. package/studio/server/agent/run/completion.ts +0 -193
  454. package/studio/server/agent/run/coordinator.test.ts +0 -337
  455. package/studio/server/agent/run/coordinator.ts +0 -104
  456. package/studio/server/agent/run/live-state.ts +0 -73
  457. package/studio/server/agent/run/preparation.ts +0 -163
  458. package/studio/server/agent/run/transcript.test.ts +0 -81
  459. package/studio/server/agent/run/transcript.ts +0 -196
  460. package/studio/server/agent/run/usage.test.ts +0 -70
  461. package/studio/server/agent/run/usage.ts +0 -62
  462. package/studio/server/agent/stream.ts +0 -37
  463. package/studio/server/agent/telemetry.ts +0 -13
  464. package/studio/server/api/canvas.ts +0 -43
  465. package/studio/server/api/comments.ts +0 -85
  466. package/studio/server/api/context.ts +0 -61
  467. package/studio/server/api/deployment.ts +0 -39
  468. package/studio/server/api/documents.ts +0 -55
  469. package/studio/server/api/domain.ts +0 -59
  470. package/studio/server/api/http.ts +0 -45
  471. package/studio/server/api/project.ts +0 -57
  472. package/studio/server/api/schema.ts +0 -12
  473. package/studio/server/api/views.ts +0 -57
  474. package/studio/server/api/workspace.ts +0 -60
  475. package/studio/server/api-agent-loadout.test.ts +0 -69
  476. package/studio/server/api.test.ts +0 -147
  477. package/studio/server/api.ts +0 -34
  478. package/studio/server/cache.test.ts +0 -122
  479. package/studio/server/cache.ts +0 -303
  480. package/studio/server/cli-consumers.test.ts +0 -494
  481. package/studio/server/cli.test.ts +0 -88
  482. package/studio/server/cli.ts +0 -240
  483. package/studio/server/client-package.test.ts +0 -147
  484. package/studio/server/client-package.ts +0 -266
  485. package/studio/server/detect.ts +0 -81
  486. package/studio/server/domain.test.ts +0 -77
  487. package/studio/server/domain.ts +0 -124
  488. package/studio/server/environment/dotenv-preview.test.ts +0 -39
  489. package/studio/server/environment/dotenv-preview.ts +0 -27
  490. package/studio/server/environment/files.test.ts +0 -53
  491. package/studio/server/environment/files.ts +0 -120
  492. package/studio/server/handoff/copy.ts +0 -171
  493. package/studio/server/handoff/service.test.ts +0 -22
  494. package/studio/server/handoff/service.ts +0 -62
  495. package/studio/server/index.ts +0 -148
  496. package/studio/server/instances/active.ts +0 -72
  497. package/studio/server/instances/deploy-record.test.ts +0 -31
  498. package/studio/server/instances/deploy-record.ts +0 -37
  499. package/studio/server/instances/deploy.ts +0 -56
  500. package/studio/server/instances/probe.test.ts +0 -67
  501. package/studio/server/instances/probe.ts +0 -67
  502. package/studio/server/instances/status.test.ts +0 -12
  503. package/studio/server/instances/status.ts +0 -49
  504. package/studio/server/introspect/anatomy/client-tree.ts +0 -57
  505. package/studio/server/introspect/anatomy/env-fields.ts +0 -66
  506. package/studio/server/introspect/anatomy/schema-definition.ts +0 -53
  507. package/studio/server/introspect/anatomy/source.ts +0 -181
  508. package/studio/server/introspect/anatomy/views/routes.ts +0 -114
  509. package/studio/server/introspect/anatomy/views.ts +0 -53
  510. package/studio/server/introspect/anatomy-extras.test.ts +0 -265
  511. package/studio/server/introspect/anatomy-extras.ts +0 -10
  512. package/studio/server/introspect/anatomy.test.ts +0 -41
  513. package/studio/server/introspect/anatomy.ts +0 -147
  514. package/studio/server/introspect/bundle.ts +0 -69
  515. package/studio/server/introspect/canonical-schema.test.ts +0 -179
  516. package/studio/server/introspect/canonical-schema.ts +0 -583
  517. package/studio/server/introspect/config-preview.test.ts +0 -32
  518. package/studio/server/introspect/config-preview.ts +0 -119
  519. package/studio/server/introspect/core-extractor.ts +0 -30
  520. package/studio/server/introspect/core.ts +0 -45
  521. package/studio/server/introspect/diff.test.ts +0 -124
  522. package/studio/server/introspect/diff.ts +0 -316
  523. package/studio/server/introspect/extractor.ts +0 -41
  524. package/studio/server/introspect/hash.ts +0 -24
  525. package/studio/server/introspect/overlay-tsmorph.test.ts +0 -146
  526. package/studio/server/introspect/overlay-tsmorph.ts +0 -9
  527. package/studio/server/introspect/overlay.test.ts +0 -44
  528. package/studio/server/introspect/overlay.ts +0 -40
  529. package/studio/server/introspect/revision.test.ts +0 -54
  530. package/studio/server/introspect/revision.ts +0 -49
  531. package/studio/server/introspect/runtime.test.ts +0 -157
  532. package/studio/server/introspect/runtime.ts +0 -140
  533. package/studio/server/introspect/schema-ir-json.test.ts +0 -70
  534. package/studio/server/introspect/schema-ir-json.ts +0 -151
  535. package/studio/server/introspect/schema-refs.test.ts +0 -55
  536. package/studio/server/introspect/schema-refs.ts +0 -32
  537. package/studio/server/introspect/source-overlay/annotations.ts +0 -14
  538. package/studio/server/introspect/source-overlay/handlers.ts +0 -161
  539. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -46
  540. package/studio/server/introspect/source-overlay/project.ts +0 -248
  541. package/studio/server/introspect/source-overlay/spans.ts +0 -330
  542. package/studio/server/json.ts +0 -46
  543. package/studio/server/lifecycle.ts +0 -42
  544. package/studio/server/sse.test.ts +0 -26
  545. package/studio/server/sse.ts +0 -60
  546. package/studio/server/state/baseline.test.ts +0 -267
  547. package/studio/server/state/baseline.ts +0 -354
  548. package/studio/server/state/comments.test.ts +0 -94
  549. package/studio/server/state/comments.ts +0 -484
  550. package/studio/server/state/context.ts +0 -199
  551. package/studio/server/state/documents.ts +0 -111
  552. package/studio/server/state/integrations.ts +0 -81
  553. package/studio/server/state/layout.test.ts +0 -34
  554. package/studio/server/state/layout.ts +0 -82
  555. package/studio/server/state/settings.test.ts +0 -78
  556. package/studio/server/state/settings.ts +0 -73
  557. package/studio/server/state/store.test.ts +0 -122
  558. package/studio/server/state/store.ts +0 -146
  559. package/studio/server/state/visibility.ts +0 -48
  560. package/studio/server/views/model.test.ts +0 -57
  561. package/studio/server/views/model.ts +0 -66
  562. package/studio/server/views/runtime.ts +0 -40
  563. package/studio/server/views/selection-repository.test.ts +0 -31
  564. package/studio/server/views/selection-repository.ts +0 -60
  565. package/studio/server/views/session.test.ts +0 -73
  566. package/studio/server/views/session.ts +0 -166
  567. package/studio/server/views/target.test.ts +0 -78
  568. package/studio/server/views/target.ts +0 -222
  569. package/studio/server/watch.test.ts +0 -36
  570. package/studio/server/watch.ts +0 -93
  571. package/studio/server/workspace/catalog.test.ts +0 -17
  572. package/studio/server/workspace/catalog.ts +0 -43
  573. package/studio/server/workspace/create.test.ts +0 -37
  574. package/studio/server/workspace/create.ts +0 -162
  575. package/studio/server/workspace/git.ts +0 -75
  576. package/studio/server/workspace/updates.ts +0 -83
  577. package/studio/server/workspace-state.ts +0 -26
  578. package/studio/server/workspace-watch.ts +0 -106
  579. package/studio/shared/agent-effort.test.ts +0 -12
  580. package/studio/shared/agent-effort.ts +0 -15
  581. package/studio/shared/agent-models.test.ts +0 -9
  582. package/studio/shared/agent-models.ts +0 -14
  583. package/studio/shared/contracts/README.md +0 -16
  584. package/studio/shared/contracts/agent.ts +0 -270
  585. package/studio/shared/contracts/runtime.ts +0 -50
  586. package/studio/shared/contracts/schema.ts +0 -393
  587. package/studio/shared/contracts/surface.test.ts +0 -317
  588. package/studio/shared/contracts/workspace.ts +0 -265
  589. package/studio/shared/layout.test.ts +0 -116
  590. package/studio/shared/schema/identity.test.ts +0 -34
  591. package/studio/shared/schema/identity.ts +0 -68
  592. package/studio/shared/settings-values.test.ts +0 -18
  593. package/studio/shared/settings-values.ts +0 -20
  594. package/studio/shared/types.ts +0 -14
  595. package/studio/tsconfig.json +0 -23
  596. package/tsconfig.json +0 -14
  597. package/viewer/dist/index.html +0 -93
  598. package/viewer/dist/main.js +0 -76
  599. package/viewer/tsconfig.json +0 -13
@@ -1,548 +0,0 @@
1
- import { Path } from '@astrale-os/sdk/graph/path'
2
- import { K } from '@astrale-os/sdk/schema'
3
- import chalk from 'chalk'
4
-
5
- import type { KernelCommandOpts } from '../../connection'
6
- import type { CommandDefinition } from '../../program/index'
7
-
8
- import { createPathCall, runKernelCommand, withAdminClientSession } from '../../connection'
9
- import { formatKernelError } from '../../connection/errors'
10
- import { AstraleError } from '../../errors'
11
- import {
12
- installAdminDomainInContext,
13
- listAdminDomainsInContext,
14
- type DomainInfo,
15
- } from '../../lib/admin-domain'
16
- import { listOwnedInstancesInContext, type OwnedInstanceInfo } from '../../lib/admin-instance'
17
- import { ADMIN_TARGET_OPTIONS, type AdminTargetCommandOpts } from '../../lib/admin-target'
18
- import { fetchDomainPublication } from '../../lib/domain-publication'
19
- import { getActive } from '../../lib/instance'
20
- import { fatal, log, withSpinner } from '../../lib/log'
21
- import { isMachine, output } from '../../lib/output'
22
- import { confirmWithInput, promptText, selectFrom } from '../../lib/prompt'
23
- import { isHttpUrl } from '../../lib/validation'
24
-
25
- /** Public Kernel install syscall input for one remote URL. */
26
- export function directInstallCallInput(url: string, operation: string, token?: string) {
27
- return Object.freeze({
28
- operation,
29
- domains: [
30
- Object.freeze({
31
- source: Object.freeze({
32
- kind: 'remote' as const,
33
- url,
34
- ...(token === undefined ? {} : { token }),
35
- }),
36
- }),
37
- ],
38
- })
39
- }
40
-
41
- type DirectInstallResult = {
42
- readonly operation: string
43
- readonly transitions: readonly {
44
- readonly intent: {
45
- readonly origin: string
46
- readonly target?: { readonly schemaRevision?: string } | null
47
- }
48
- }[]
49
- }
50
-
51
- const OPERATION_ID_PATTERN =
52
- /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u
53
-
54
- function acceptOperationId(input: unknown): string {
55
- if (typeof input !== 'string' || !OPERATION_ID_PATTERN.test(input)) {
56
- throw new AstraleError(
57
- 'INVALID_FLAG',
58
- '--operation must be a canonical lowercase UUIDv4.',
59
- 'Omit --operation for a fresh install; use it only with the exact UUID printed for recovery.',
60
- )
61
- }
62
- return input
63
- }
64
-
65
- function createOperationId(): string {
66
- return acceptOperationId(globalThis.crypto.randomUUID())
67
- }
68
-
69
- type InstallOpts = KernelCommandOpts &
70
- AdminTargetCommandOpts & {
71
- direct?: boolean
72
- operation?: string
73
- token?: string
74
- allowIdentityOverride?: boolean
75
- // Global flags (program.ts) that force non-interactive.
76
- ci?: boolean
77
- noPrompt?: boolean
78
- }
79
-
80
- export default {
81
- name: 'install',
82
- description: 'Install a domain on an instance (via the admin catalog, or --direct from a url)',
83
- afterHelpText: `
84
- Behavior:
85
- Default: installs a PUBLISHED domain through the admin control plane
86
- (DomainEntry.install). Address it by its catalog \`origin\` (the unique
87
- registry key) or by its \`url\`; run it bare to pick from the catalog
88
- interactively. The target instance is the active one, or -i <slug>; it must be
89
- admin-managed (otherwise the command fails loudly and points you at --direct).
90
-
91
- --direct: installs a url through the public Kernel install syscall,
92
- bypassing the admin catalog. Works on any instance you can authenticate to
93
- (managed, bookmarked, or local), using your own authority. This is the only
94
- mode that runs the identity-override consent gate: when the domain's declared
95
- origin differs from its serving host, it requires explicit consent (an
96
- interactive DANGER prompt, or --allow-identity-override in scripts).
97
-
98
- A fresh, strong operation id is generated automatically. Use --operation
99
- only to retry or recover the exact same direct install after an outcome-unknown
100
- timeout or disconnect.
101
-
102
- Examples:
103
- $ astrale domain install crm.acme.dev -i staging # by origin, via admin
104
- $ astrale domain install https://crm.acme.dev # by url, via admin
105
- $ astrale domain install # interactive: pick domain + instance
106
- $ astrale domain install https://crm.workers.dev --direct # straight to the instance kernel
107
- $ astrale domain install http://localhost:8787 --direct --token "$INSTALL_TOKEN"
108
- `,
109
- arguments: [
110
- {
111
- name: 'target',
112
- description: 'Domain origin or url (omit to pick from the catalog interactively)',
113
- required: false,
114
- },
115
- ],
116
- options: [
117
- ...ADMIN_TARGET_OPTIONS,
118
- {
119
- flags: '--direct',
120
- description:
121
- 'Install a url straight onto the instance kernel, bypassing the admin catalog (any instance; runs the identity-override gate)',
122
- },
123
- {
124
- flags: '--token <token>',
125
- description: 'Bearer token for private domain install endpoints (--direct only)',
126
- },
127
- {
128
- flags: '--operation <uuid>',
129
- description: 'Reuse an exact direct-install operation id for explicit retry/recovery',
130
- },
131
- {
132
- flags: '--allow-identity-override',
133
- description: 'Consent to a domain whose origin differs from its serving host (--direct only)',
134
- },
135
- ],
136
- action: async (target: string | undefined, opts: InstallOpts) => {
137
- if (opts.operation !== undefined && !opts.direct) {
138
- fatal(
139
- new AstraleError(
140
- 'INVALID_FLAG',
141
- '--operation is valid only with --direct.',
142
- 'Ordinary direct installs generate a fresh operation id automatically.',
143
- ),
144
- opts,
145
- )
146
- }
147
- if (opts.direct) {
148
- await installDirect(target, opts)
149
- return
150
- }
151
- await installViaAdmin(target, opts)
152
- },
153
- } satisfies CommandDefinition
154
-
155
- // ── Admin path (default) ──────────────────────────────────────────────────────
156
-
157
- /**
158
- * Install a published domain through the admin control plane. The domain is
159
- * addressed by `origin` (catalog key) or `url`; the target instance is the
160
- * active one or `-i <slug>` and must be admin-managed.
161
- *
162
- * `-i` here means the INSTALL TARGET, not the admin target — so it is stripped
163
- * before resolving the admin client (which would otherwise read `-i`/`--url` as
164
- * an admin-kernel override). The admin kernel is chosen via --admin/--admin-url
165
- * or config, exactly like `domain publish`.
166
- */
167
- export async function installViaAdmin(
168
- target: string | undefined,
169
- opts: InstallOpts,
170
- dependencies: Partial<AdminInstallDependencies> = {},
171
- ): Promise<void> {
172
- const admin = { ...defaultAdminInstallDependencies, ...dependencies }
173
- const interactive = !!process.stdin.isTTY && !(opts.ci || opts.noPrompt || process.env.CI)
174
- if (!target && !interactive) {
175
- fatal(
176
- new AstraleError(
177
- 'MISSING_ARG',
178
- 'No domain given and no TTY for interactive selection.',
179
- 'Pass an origin or url, e.g. astrale domain install crm.acme.dev — or use --direct <url>.',
180
- ),
181
- )
182
- }
183
- // Strip the install-target selector so the admin client resolves only the
184
- // admin kernel (via --admin/--admin-url/config), not the instance under `-i`.
185
- const adminOpts = {
186
- admin: opts.admin,
187
- adminUrl: opts.adminUrl,
188
- timeout: opts.timeout,
189
- as: opts.as,
190
- creds: opts.creds,
191
- }
192
-
193
- try {
194
- await withAdminClientSession(adminOpts, async (ctx) => {
195
- const instances = await admin.listInstances(ctx)
196
- const slug = await resolveTargetSlug(opts, target, interactive, instances)
197
-
198
- const match = instances.find((i) => i.slug === slug)
199
- if (!match) {
200
- const known = instances.map((i) => i.slug).join(', ') || '(none)'
201
- throw new AstraleError(
202
- 'INSTANCE_NOT_MANAGED',
203
- `Instance "${slug}" is not admin-managed (managed: ${known}).`,
204
- `Install the url directly onto it instead: astrale domain install <url> --direct -i ${slug}`,
205
- )
206
- }
207
- assertInstallTargetReady(match)
208
-
209
- const domains = await admin.listDomains(ctx)
210
- const domain = await resolveDomain(domains, target, interactive)
211
-
212
- const label = domain.origin
213
- const result = await withSpinner(
214
- `Installing ${label} on ${match.slug}`,
215
- !isMachine(opts),
216
- () => admin.install(ctx, match, domain),
217
- { success: (r) => `Installed ${r.origin} on ${match.slug}` },
218
- )
219
-
220
- if (isMachine(opts)) {
221
- output(result, opts)
222
- return
223
- }
224
- // The admin returns install failures as `ok:false` (it never throws past
225
- // the saga). Surface them loudly rather than printing a quiet success.
226
- if (!result.ok) {
227
- throw new AstraleError(
228
- 'INSTALL_FAILED',
229
- `Install failed on ${match.slug}: ${result.error ?? 'unknown error'}`,
230
- )
231
- }
232
- log.dim(` origin: ${result.origin}`)
233
- log.dim(` url: ${result.url}`)
234
- })
235
- } catch (error) {
236
- await formatKernelError(error, isMachine(opts), undefined, opts.debug)
237
- process.exit(1)
238
- }
239
- }
240
-
241
- function assertInstallTargetReady(instance: OwnedInstanceInfo): void {
242
- if (instance.state === 'ready') return
243
- const detail = instance.phase && instance.phase !== instance.state ? ` (${instance.phase})` : ''
244
- throw new AstraleError(
245
- 'INSTANCE_NOT_READY',
246
- `Instance "${instance.slug}" is ${instance.state}${detail}; domains cannot be installed yet.`,
247
- instance.error ?? `Run: astrale instance status ${instance.slug}`,
248
- )
249
- }
250
-
251
- /**
252
- * Classify the positional install target for the admin path: an http(s) URL
253
- * installs by `url`, anything else is treated as a catalog `origin` (the unique
254
- * registry key). The admin method accepts either.
255
- */
256
- export function domainRefFromTarget(target: string): { origin?: string; url?: string } {
257
- return isHttpUrl(target) ? { url: target } : { origin: target }
258
- }
259
-
260
- /** Resolve the domain to install: the positional `target`, or an interactive pick. */
261
- async function resolveDomain(
262
- catalog: readonly DomainInfo[],
263
- target: string | undefined,
264
- interactive: boolean,
265
- ): Promise<DomainInfo> {
266
- if (target) {
267
- const ref = domainRefFromTarget(target)
268
- const found = catalog.find((domain) =>
269
- ref.origin === undefined ? domain.url === ref.url : domain.origin === ref.origin,
270
- )
271
- if (found !== undefined) return found
272
- throw new AstraleError(
273
- 'DOMAIN_NOT_FOUND',
274
- `No published domain matches "${target}".`,
275
- 'Run `astrale domain list` to see the Admin catalog.',
276
- )
277
- }
278
- if (!interactive) throw new AstraleError('MISSING_ARG', 'No domain given.')
279
-
280
- const installable = catalog.filter((d) => d.url)
281
- if (installable.length === 0) {
282
- throw new AstraleError(
283
- 'EMPTY_CATALOG',
284
- 'No published domains in the admin catalog.',
285
- 'Publish one first: astrale domain publish --origin … --name … --public-url …',
286
- )
287
- }
288
- const origin = await selectFrom(
289
- 'Select a domain to install',
290
- installable.map((d) => ({
291
- label: `${d.name} ${chalk.dim(`${d.origin} → ${d.url}`)}`,
292
- value: d.origin,
293
- })),
294
- )
295
- if (!origin) throw new AstraleError('CANCELLED', 'No domain selected.')
296
- return catalog.find((domain) => domain.origin === origin)!
297
- }
298
-
299
- interface AdminInstallDependencies {
300
- readonly listInstances: typeof listOwnedInstancesInContext
301
- readonly listDomains: typeof listAdminDomainsInContext
302
- readonly install: typeof installAdminDomainInContext
303
- }
304
-
305
- const defaultAdminInstallDependencies: AdminInstallDependencies = Object.freeze({
306
- listInstances: listOwnedInstancesInContext,
307
- listDomains: listAdminDomainsInContext,
308
- install: installAdminDomainInContext,
309
- })
310
-
311
- /**
312
- * Resolve the target instance slug: `-i`, else the active instance. When run
313
- * bare (no positional) in a TTY, prompt for it with the active instance
314
- * pre-filled (Enter accepts) and validated against the managed list.
315
- */
316
- async function resolveTargetSlug(
317
- opts: InstallOpts,
318
- target: string | undefined,
319
- interactive: boolean,
320
- instances: OwnedInstanceInfo[],
321
- ): Promise<string> {
322
- if (opts.instance) return opts.instance
323
- const active = await activeSlug()
324
-
325
- if (target === undefined && interactive) {
326
- const slugs = instances.map((i) => i.slug)
327
- if (slugs.length > 0) log.dim(` managed instances: ${slugs.join(', ')}`)
328
- const chosen = await promptText('Instance to install on', {
329
- default: active && slugs.includes(active) ? active : undefined,
330
- validate: (v) =>
331
- slugs.includes(v) ||
332
- `unknown managed instance "${v}" (one of: ${slugs.join(', ') || 'none'})`,
333
- })
334
- if (!chosen) throw new AstraleError('CANCELLED', 'No instance selected.')
335
- return chosen
336
- }
337
-
338
- if (!active) {
339
- throw new AstraleError(
340
- 'NO_TARGET_INSTANCE',
341
- 'No target instance: none active and no -i <slug> given.',
342
- 'Pass -i <slug>, or select one with astrale instance use <slug>.',
343
- )
344
- }
345
- return active
346
- }
347
-
348
- /** The active instance's slug (its admin-side id), or undefined when none. */
349
- async function activeSlug(): Promise<string | undefined> {
350
- try {
351
- const a = await getActive()
352
- return a.slug ?? a.name
353
- } catch {
354
- return undefined
355
- }
356
- }
357
-
358
- // ── Direct path (--direct) ────────────────────────────────────────────────────
359
-
360
- /**
361
- * Install a url through the public Kernel install syscall,
362
- * bypassing the admin catalog, with the identity-override
363
- * consent gate. Works on any instance the caller can authenticate to.
364
- */
365
- interface DirectInstallDependencies {
366
- readonly acceptOperationId: (input: unknown) => string
367
- readonly createOperationId: () => string
368
- readonly runKernelCommand: typeof runKernelCommand
369
- }
370
-
371
- const defaultDirectInstallDependencies: DirectInstallDependencies = Object.freeze({
372
- acceptOperationId,
373
- createOperationId,
374
- runKernelCommand,
375
- })
376
-
377
- export async function installDirect(
378
- target: string | undefined,
379
- opts: InstallOpts,
380
- dependencies: Partial<DirectInstallDependencies> = {},
381
- ): Promise<void> {
382
- const direct = { ...defaultDirectInstallDependencies, ...dependencies }
383
- let host = ''
384
- let consentedOrigin: string | undefined
385
- let operation: string
386
- try {
387
- if (!target) {
388
- throw new AstraleError(
389
- 'MISSING_ARG',
390
- '--direct requires a domain url.',
391
- 'e.g. astrale domain install https://crm.acme.dev --direct',
392
- )
393
- }
394
- host = validateInstallUrl(target)
395
- operation =
396
- opts.operation === undefined
397
- ? direct.createOperationId()
398
- : direct.acceptOperationId(opts.operation)
399
- consentedOrigin = await ensureIdentityOverrideConsent(
400
- target,
401
- host,
402
- opts.allowIdentityOverride ?? false,
403
- )
404
- } catch (e) {
405
- fatal(e, opts)
406
- }
407
- const url = target as string
408
- const retry = directInstallRetry(url, operation, opts)
409
-
410
- await direct.runKernelCommand<DirectInstallResult>({
411
- opts,
412
- label: `Installing domain from ${url} (operation ${operation})`,
413
- recovery: { operation, retry },
414
- fn: async ({ session }) =>
415
- (await session.call(
416
- createPathCall(
417
- Path.project(K.functions.install.ref).raw,
418
- directInstallCallInput(url, operation, opts.token),
419
- ),
420
- )) as DirectInstallResult,
421
- format: (result, fmtOpts, isRaw) => {
422
- if (isRaw) {
423
- output(result, fmtOpts)
424
- return
425
- }
426
- const installed = result.transitions[0]?.intent
427
- if (!installed) throw new Error('Kernel install returned no committed Domain transition.')
428
- const revision = installed.target?.schemaRevision ?? result.operation
429
- log.success(`Domain installed: ${installed.origin}@${revision}`)
430
- log.dim(` operation: ${result.operation}`)
431
- // Belt-and-braces: the kernel-confirmed origin is authoritative. If it
432
- // aliases the host and the pre-install gate never consented to THAT
433
- // origin (lying or unavailable Publication), say so loudly after the fact.
434
- if (isIdentityOverride(installed.origin, host) && installed.origin !== consentedOrigin) {
435
- log.warn(
436
- `Installed origin "${installed.origin}" differs from the serving host "${host}" ` +
437
- `and was not confirmed before install (the worker Publication was unavailable). ` +
438
- `Every ${installed.origin}/* call on this instance now routes to ${host}.`,
439
- )
440
- }
441
- },
442
- })
443
- }
444
-
445
- function directInstallRetry(url: string, operation: string, opts: InstallOpts): string {
446
- const instance = opts.instance === undefined ? '' : ` -i ${opts.instance}`
447
- return `astrale domain install ${url} --direct --operation ${operation}${instance}`
448
- }
449
-
450
- function validateInstallUrl(value: string): string {
451
- let url: URL
452
- try {
453
- url = new URL(value)
454
- } catch {
455
- throw new AstraleError(
456
- 'INVALID_DOMAIN_URL',
457
- `Domain install source must be an http(s) URL, got "${value}".`,
458
- 'Run or deploy the domain service, then install its base URL, for example: astrale domain install https://contract.astrale.ai --direct',
459
- )
460
- }
461
- if (url.protocol !== 'http:' && url.protocol !== 'https:') {
462
- throw new AstraleError(
463
- 'INVALID_DOMAIN_URL',
464
- `Domain install URL must use http or https, got "${url.protocol}".`,
465
- )
466
- }
467
- return url.hostname
468
- }
469
-
470
- /** An override = the declared origin and the serving host name differ. */
471
- export function isIdentityOverride(origin: string, host: string): boolean {
472
- return origin.toLowerCase() !== host.toLowerCase()
473
- }
474
-
475
- /**
476
- * The §5 identity-override gate (spec: CREATE_ASTRALE_DOMAIN_DX). A domain's
477
- * `origin` is its addressing identity on the instance: every `<origin>/*` call
478
- * — including other domains' `requires` — routes to the installed URL.
479
- * Claiming an origin that differs from the serving host is an explicit actAs
480
- * and needs typed consent (or `--allow-identity-override` in scripts).
481
- *
482
- * The pre-install check reads the worker's canonical Publication origin,
483
- * so it is consent UX, not enforcement — a hostile worker can lie here, and
484
- * the kernel anchors the cryptographic identity (`iss`) on the real URL
485
- * regardless. When the Publication is unreachable or invalid, the gate
486
- * degrades to a warning and the kernel-confirmed origin is re-checked after
487
- * install (see `format` above).
488
- *
489
- * Returns the origin the user consented to (or `undefined` when no override
490
- * was detected / verifiable pre-install).
491
- */
492
- async function ensureIdentityOverrideConsent(
493
- url: string,
494
- host: string,
495
- allow: boolean,
496
- ): Promise<string | undefined> {
497
- const origin = await probeDeclaredOrigin(url)
498
- if (origin === undefined) {
499
- log.warn(
500
- `Could not read a declared origin from ` +
501
- `${new URL('/.well-known/astrale/domain.json', url).href} — ` +
502
- `skipping the pre-install identity check (the installed origin is verified after install).`,
503
- )
504
- return undefined
505
- }
506
- if (!isIdentityOverride(origin, host)) return undefined
507
-
508
- if (allow) {
509
- log.warn(`Identity override consented via --allow-identity-override: ${origin} ← ${host}`)
510
- return origin
511
- }
512
-
513
- const banner =
514
- chalk.red.bold('⚠ DANGER — IDENTITY OVERRIDE') +
515
- '\n' +
516
- chalk.dim('│') +
517
- ` deployed ${host}\n` +
518
- chalk.dim('│') +
519
- ` origin ${chalk.bold(origin)} ${chalk.red('(≠)')}\n` +
520
- chalk.dim('│') +
521
- '\n' +
522
- chalk.dim('│') +
523
- ` Every call to ${origin}/* on this instance —\n` +
524
- chalk.dim('│') +
525
- ` including from other domains — will hit ${host}.\n` +
526
- chalk.dim('│') +
527
- ` Only proceed if you trust ${host}.`
528
- const confirmed = await confirmWithInput(banner, origin)
529
- if (!confirmed) {
530
- throw new AstraleError(
531
- 'IDENTITY_OVERRIDE_REJECTED',
532
- `Install aborted: the domain at ${host} declares origin "${origin}" (identity override) and it was not confirmed.`,
533
- 'Re-run interactively and type the origin to confirm, or pass --allow-identity-override in scripts.',
534
- )
535
- }
536
- return origin
537
- }
538
-
539
- /** Best-effort read of the worker's origin from its admitted canonical Publication. */
540
- export async function probeDeclaredOrigin(url: string): Promise<string | undefined> {
541
- try {
542
- return (await fetchDomainPublication(url, AbortSignal.timeout(10_000))).origin
543
- } catch {
544
- // An unreachable or invalid Publication is not fatal here: the caller warns
545
- // and the install itself will surface a dead worker with its own error.
546
- return undefined
547
- }
548
- }
@@ -1,155 +0,0 @@
1
- import chalk from 'chalk'
2
-
3
- import type { KernelCommandOpts } from '../../connection'
4
- import type { ListProjection, RawOutputOpts } from '../../lib/output'
5
- import type { CommandDefinition } from '../../program/index'
6
-
7
- import { listAdminDomains, type DomainInfo } from '../../lib/admin-domain'
8
- import { ADMIN_TARGET_OPTIONS, type AdminTargetCommandOpts } from '../../lib/admin-target'
9
- import { fetchDomainPublication } from '../../lib/domain-publication'
10
- import { fatal, withSpinner } from '../../lib/log'
11
- import { isMachine, presentList } from '../../lib/output'
12
-
13
- type ListOpts = KernelCommandOpts &
14
- AdminTargetCommandOpts &
15
- RawOutputOpts & {
16
- check?: boolean
17
- defaultOnly?: boolean
18
- quiet?: boolean
19
- count?: boolean
20
- long?: boolean
21
- format?: 'yaml' | 'json'
22
- }
23
-
24
- /** A catalog entry, optionally enriched with a live `--check` probe. */
25
- export type DomainRow = DomainInfo & {
26
- reachable?: boolean
27
- schemaRevision?: string
28
- checkError?: string | null
29
- }
30
-
31
- /**
32
- * Catalog rows for the human table. `paths` is the published URL (falling back
33
- * to origin) so `astrale domain list -q | xargs -I{} astrale domain install {}`
34
- * composes — install takes a URL. The STATUS column is dropped by `renderTable`
35
- * unless `--check` filled it in.
36
- */
37
- export function domainProjection(items: DomainRow[]): ListProjection {
38
- return {
39
- columns: [
40
- { key: 'name', header: 'NAME', color: chalk.bold },
41
- { key: 'origin', header: 'ORIGIN', color: chalk.cyan },
42
- { key: 'url', header: 'URL', color: chalk.dim },
43
- { key: 'default', header: 'DEFAULT' },
44
- { key: 'status', header: 'STATUS' },
45
- ],
46
- rows: items.map((d) => ({
47
- name: d.name,
48
- origin: d.origin,
49
- url: d.url ?? chalk.dim('(unpublished)'),
50
- default: d.installByDefault ? chalk.green('default') : '',
51
- status: statusCell(d),
52
- })),
53
- paths: items.map((d) => d.url ?? d.origin),
54
- }
55
- }
56
-
57
- function statusCell(d: DomainRow): string {
58
- if (d.reachable === undefined) return ''
59
- return d.reachable ? chalk.green('● live') : chalk.red(`○ ${d.checkError ?? 'unreachable'}`)
60
- }
61
-
62
- export default {
63
- name: 'list',
64
- description: 'List domains published in the admin catalog (DomainEntry.list)',
65
- afterHelpText: `
66
- Behavior:
67
- Reads the admin catalog — every domain that has been \`publish\`ed
68
- (origin → published worker URL). Listing only shows what is INSTALLABLE;
69
- what is actually mounted where lives on each instance's own graph
70
- (\`astrale query\` against that instance).
71
-
72
- Default output is a NAME/ORIGIN/URL/DEFAULT table on a TTY, JSON when piped
73
- or with --json/--raw (agent-friendly — full DomainInfo objects). -q prints
74
- one install URL per line (pipeable into \`domain install\`); --count prints
75
- only the number. --default-only keeps the install-by-default entries (what
76
- every new instance gets via alphaCreate). --check probes each published URL's
77
- canonical Publication and adds a live/unreachable STATUS column
78
- (+ reachable/schemaRevision in machine output).
79
-
80
- The admin kernel is selected like every admin op — the configured default,
81
- or --admin <bookmark> / --admin-url <url>.
82
-
83
- Examples:
84
- $ astrale domain list
85
- $ astrale domain list --check
86
- $ astrale domain list --default-only -q
87
- $ astrale domain list --json | jq -r '.[].url'
88
- `,
89
- options: [
90
- ...ADMIN_TARGET_OPTIONS,
91
- {
92
- flags: '--check',
93
- description: "Probe each domain's canonical Publication + schema revision",
94
- },
95
- { flags: '--default-only', description: 'Only show install-by-default domains' },
96
- { flags: '-q, --quiet', description: 'One install URL per line (unix-pipeable)' },
97
- { flags: '--count', description: 'Print only the number of published domains' },
98
- { flags: '-l, --long', description: 'Full catalog records in machine output' },
99
- ],
100
- action: async (opts: ListOpts) => {
101
- try {
102
- const domains = await withSpinner(
103
- 'Fetching domains',
104
- !isMachine(opts),
105
- async (): Promise<DomainRow[]> => {
106
- const list = await listAdminDomains(opts)
107
- const filtered = opts.defaultOnly ? list.filter((d) => d.installByDefault) : list
108
- filtered.sort(byDefaultThenName)
109
- if (!opts.check) return filtered as DomainRow[]
110
- // Reachability is a direct client-side Publication fetch per entry, in
111
- // parallel — no admin round-trip, and version-independent of the
112
- // admin worker (mirrors `domain install`'s probeDeclaredOrigin).
113
- return Promise.all(filtered.map(probe))
114
- },
115
- )
116
-
117
- presentList(
118
- domains,
119
- { ...opts, quiet: opts.quiet, count: opts.count, long: opts.long },
120
- domainProjection,
121
- )
122
- } catch (e) {
123
- fatal(e)
124
- }
125
- },
126
- } satisfies CommandDefinition
127
-
128
- /** Install-by-default first, then alphabetical by origin — a stable display order. */
129
- export function byDefaultThenName(a: DomainInfo, b: DomainInfo): number {
130
- if (!!a.installByDefault !== !!b.installByDefault) return a.installByDefault ? -1 : 1
131
- return a.origin.localeCompare(b.origin)
132
- }
133
-
134
- /**
135
- * Enrich one entry with a reachability probe: fetch the published worker's
136
- * canonical Publication and read its schema revision. A dead or missing URL is
137
- * itself a result, not a throw.
138
- */
139
- export async function probe(d: DomainInfo): Promise<DomainRow> {
140
- if (!d.url) return { ...d, reachable: false, checkError: 'no url published' }
141
- try {
142
- const deployed = await fetchDomainPublication(d.url, AbortSignal.timeout(10_000))
143
- if (deployed.origin !== d.origin) {
144
- throw new Error(`Domain origin mismatch: deployed=${deployed.origin} expected=${d.origin}`)
145
- }
146
- return {
147
- ...d,
148
- reachable: true,
149
- schemaRevision: deployed.schema.revision,
150
- checkError: null,
151
- }
152
- } catch (err) {
153
- return { ...d, reachable: false, checkError: err instanceof Error ? err.message : String(err) }
154
- }
155
- }