@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
package/src/lib/update.ts DELETED
@@ -1,409 +0,0 @@
1
- import { createHash } from 'node:crypto'
2
- import {
3
- chmod,
4
- copyFile,
5
- mkdir,
6
- mkdtemp,
7
- readFile,
8
- realpath,
9
- rename,
10
- rm,
11
- writeFile,
12
- } from 'node:fs/promises'
13
- import { tmpdir } from 'node:os'
14
- import { dirname, join } from 'node:path'
15
- import { z } from 'zod'
16
-
17
- import { AstraleError } from '../errors'
18
- import { INSTALL_PATH } from '../state/index'
19
- import { run } from './proc'
20
-
21
- const DEFAULT_REPO = 'astrale-os/cli'
22
- export const DEFAULT_UPDATE_CHANNEL = 'beta'
23
-
24
- export const InstallMetadataSchema = z.object({
25
- method: z.literal('script'),
26
- channel: z.string().min(1).default(DEFAULT_UPDATE_CHANNEL),
27
- version: z.string().min(1).optional(),
28
- repo: z.string().min(1).default(DEFAULT_REPO),
29
- bin: z.string().min(1),
30
- installedAt: z.string().optional(),
31
- })
32
-
33
- export type InstallMetadata = z.infer<typeof InstallMetadataSchema>
34
-
35
- const ManifestAssetSchema = z.object({
36
- name: z.string().min(1),
37
- sha256: z
38
- .string()
39
- .regex(/^[a-fA-F0-9]{64}$/)
40
- .optional(),
41
- })
42
-
43
- export const UpdateManifestSchema = z.object({
44
- version: z.string().min(1),
45
- binaryVersion: z.string().min(1).optional(),
46
- channel: z.string().min(1),
47
- repo: z.string().min(1).optional(),
48
- assets: z.record(
49
- z.string(),
50
- z.union([
51
- ManifestAssetSchema,
52
- z
53
- .string()
54
- .min(1)
55
- .transform((name) => ({ name })),
56
- ]),
57
- ),
58
- })
59
-
60
- export type UpdateManifest = z.infer<typeof UpdateManifestSchema>
61
-
62
- export type Platform = {
63
- os: 'darwin' | 'linux'
64
- arch: 'arm64' | 'x64'
65
- }
66
-
67
- export type UpdateRequest = {
68
- check?: boolean
69
- channel?: string
70
- version?: string
71
- currentVersion: string
72
- platform?: Platform
73
- installPath?: string
74
- execution?: UpdateExecution
75
- }
76
-
77
- export type UpdateExecution =
78
- | { kind: 'standalone'; executable: string }
79
- | { kind: 'package-managed'; executable: string }
80
-
81
- const admittedScriptInstall = Symbol('admittedScriptInstall')
82
- export type AdmittedScriptInstall = Readonly<{
83
- metadata: InstallMetadata
84
- executable: string
85
- [admittedScriptInstall]: true
86
- }>
87
-
88
- export type UpdateResult =
89
- | {
90
- status: 'managed'
91
- currentVersion: string
92
- executable: string
93
- }
94
- | {
95
- status: 'up-to-date'
96
- currentVersion: string
97
- latestVersion: string
98
- channel: string
99
- }
100
- | {
101
- status: 'available'
102
- currentVersion: string
103
- latestVersion: string
104
- channel: string
105
- }
106
- | {
107
- status: 'updated'
108
- previousVersion: string
109
- currentVersion: string
110
- channel: string
111
- bin: string
112
- }
113
-
114
- export function detectPlatform(): Platform {
115
- const os = process.platform
116
- const arch = process.arch
117
- if (os !== 'darwin' && os !== 'linux') {
118
- throw new AstraleError(
119
- 'UNSUPPORTED_PLATFORM',
120
- `Unsupported OS "${os}" — Astrale update supports macOS and Linux.`,
121
- )
122
- }
123
- if (arch !== 'arm64' && arch !== 'x64') {
124
- throw new AstraleError(
125
- 'UNSUPPORTED_PLATFORM',
126
- `Unsupported CPU architecture "${arch}" — Astrale update supports arm64 and x64.`,
127
- )
128
- }
129
- return { os, arch }
130
- }
131
-
132
- export function platformKey(platform: Platform): string {
133
- return `${platform.os}-${platform.arch}`
134
- }
135
-
136
- export function classifyUpdateExecution(input: {
137
- bunVersion?: string
138
- executable: string
139
- entry?: string
140
- }): UpdateExecution {
141
- return input.bunVersion && input.entry?.startsWith('/$bunfs/')
142
- ? { kind: 'standalone', executable: input.executable }
143
- : { kind: 'package-managed', executable: input.executable }
144
- }
145
-
146
- export function detectUpdateExecution(): UpdateExecution {
147
- return classifyUpdateExecution({
148
- bunVersion: (process.versions as { bun?: string }).bun,
149
- executable: process.execPath,
150
- entry: process.argv[1],
151
- })
152
- }
153
-
154
- export function packageManagedUpdateError(executable: string): AstraleError {
155
- return new AstraleError(
156
- 'UPDATE_PACKAGE_MANAGED',
157
- 'This Astrale build is managed by your package manager.',
158
- `Active binary: ${executable}. Update it with npm, pnpm, or bun; or put the official script installation first on PATH.`,
159
- )
160
- }
161
-
162
- export async function readInstallMetadata(path = INSTALL_PATH): Promise<InstallMetadata> {
163
- let raw: string
164
- try {
165
- raw = await readFile(path, 'utf8')
166
- } catch (error) {
167
- if (!isMissingFile(error)) throw error
168
- throw new AstraleError(
169
- 'UPDATE_NOT_SCRIPT_INSTALLED',
170
- 'Astrale was not installed by the official install script.',
171
- 'Reinstall with: curl -fsSL https://raw.githubusercontent.com/astrale-os/cli/main/install.sh | sh',
172
- )
173
- }
174
-
175
- let decoded: unknown
176
- try {
177
- decoded = JSON.parse(raw)
178
- } catch {
179
- throw badInstallMetadata(path)
180
- }
181
- const parsed = InstallMetadataSchema.safeParse(decoded)
182
- if (!parsed.success) {
183
- throw badInstallMetadata(path)
184
- }
185
- return parsed.data
186
- }
187
-
188
- function isMissingFile(error: unknown): error is NodeJS.ErrnoException {
189
- return error instanceof Error && 'code' in error && error.code === 'ENOENT'
190
- }
191
-
192
- function badInstallMetadata(path: string): AstraleError {
193
- return new AstraleError(
194
- 'UPDATE_BAD_INSTALL_METADATA',
195
- `Invalid install metadata at ${path}.`,
196
- 'Reinstall with: curl -fsSL https://raw.githubusercontent.com/astrale-os/cli/main/install.sh | sh',
197
- )
198
- }
199
-
200
- export async function admitScriptInstall(
201
- meta: InstallMetadata,
202
- execution: Extract<UpdateExecution, { kind: 'standalone' }>,
203
- ): Promise<AdmittedScriptInstall> {
204
- const [running, recorded] = await Promise.all([
205
- realpathIfExists(execution.executable),
206
- realpathIfExists(meta.bin),
207
- ])
208
- if (running === undefined || recorded === undefined || running !== recorded) {
209
- throw new AstraleError(
210
- 'UPDATE_INSTALL_MISMATCH',
211
- 'The running Astrale binary does not own the recorded script installation.',
212
- `Running binary: ${execution.executable}; recorded binary: ${meta.bin}. Refusing to replace a different installation.`,
213
- )
214
- }
215
- return Object.freeze({
216
- metadata: meta,
217
- executable: running,
218
- [admittedScriptInstall]: true as const,
219
- })
220
- }
221
-
222
- async function realpathIfExists(path: string): Promise<string | undefined> {
223
- try {
224
- return await realpath(path)
225
- } catch (error) {
226
- if (isMissingFile(error)) return undefined
227
- throw error
228
- }
229
- }
230
-
231
- export async function writeInstallMetadata(
232
- meta: InstallMetadata,
233
- path = INSTALL_PATH,
234
- ): Promise<void> {
235
- await mkdir(dirname(path), { recursive: true })
236
- await writeFile(path, JSON.stringify(meta, null, 2) + '\n')
237
- }
238
-
239
- export function releaseBase(
240
- meta: InstallMetadata,
241
- req: Pick<UpdateRequest, 'channel' | 'version'>,
242
- ): string {
243
- if (process.env.ASTRALE_UPDATE_BASE) return process.env.ASTRALE_UPDATE_BASE.replace(/\/+$/, '')
244
- const repo = meta.repo || DEFAULT_REPO
245
- if (req.version) {
246
- const version = req.version.replace(/^cli\/v/, '').replace(/^v/, '')
247
- return `https://github.com/${repo}/releases/download/cli/v${version}`
248
- }
249
- return `https://github.com/${repo}/releases/download/${req.channel ?? meta.channel ?? DEFAULT_UPDATE_CHANNEL}`
250
- }
251
-
252
- export async function fetchManifest(base: string): Promise<UpdateManifest> {
253
- const raw = await readUrlText(`${base}/manifest.json`)
254
- return UpdateManifestSchema.parse(JSON.parse(raw))
255
- }
256
-
257
- export function shouldUpdate(currentVersion: string, manifestVersion: string): boolean {
258
- return currentVersion !== manifestVersion
259
- }
260
-
261
- export async function updateAstrale(req: UpdateRequest): Promise<UpdateResult> {
262
- const execution = req.execution ?? detectUpdateExecution()
263
- if (execution.kind === 'package-managed') {
264
- return {
265
- status: 'managed',
266
- currentVersion: req.currentVersion,
267
- executable: execution.executable,
268
- }
269
- }
270
-
271
- const install = await admitScriptInstall(await readInstallMetadata(req.installPath), execution)
272
- const meta = install.metadata
273
- const currentVersion = meta.version ?? req.currentVersion
274
- const channel = req.channel ?? meta.channel ?? DEFAULT_UPDATE_CHANNEL
275
- const platform = req.platform ?? detectPlatform()
276
- const key = platformKey(platform)
277
- const base = releaseBase(meta, { channel, version: req.version })
278
- const manifest = await fetchManifest(base)
279
- const asset = manifest.assets[key]
280
- if (!asset) {
281
- throw new AstraleError(
282
- 'UPDATE_ASSET_NOT_FOUND',
283
- `No Astrale CLI release asset for ${key}.`,
284
- `Available platforms: ${Object.keys(manifest.assets).join(', ')}`,
285
- )
286
- }
287
-
288
- if (!shouldUpdate(currentVersion, manifest.version)) {
289
- return {
290
- status: 'up-to-date',
291
- currentVersion,
292
- latestVersion: manifest.version,
293
- channel: manifest.channel,
294
- }
295
- }
296
-
297
- if (req.check) {
298
- return {
299
- status: 'available',
300
- currentVersion,
301
- latestVersion: manifest.version,
302
- channel: manifest.channel,
303
- }
304
- }
305
-
306
- const tmp = await mkdtemp(join(tmpdir(), 'astrale-update-'))
307
- try {
308
- const archive = join(tmp, asset.name)
309
- await downloadToFile(`${base}/${asset.name}`, archive)
310
- const manifestChecksum = 'sha256' in asset ? asset.sha256 : undefined
311
- const expected = manifestChecksum ?? (await fetchChecksum(base, asset.name))
312
- const actual = await sha256File(archive)
313
- if (actual !== expected.toLowerCase()) {
314
- throw new AstraleError(
315
- 'UPDATE_CHECKSUM_MISMATCH',
316
- `Checksum mismatch for ${asset.name}.`,
317
- `Expected ${expected}; got ${actual}.`,
318
- )
319
- }
320
-
321
- await extractTarGz(archive, tmp)
322
- const nextBin = join(tmp, 'astrale')
323
- await chmod(nextBin, 0o755)
324
- await smokeVersion(nextBin, manifest.binaryVersion ?? manifest.version)
325
-
326
- const previous = `${meta.bin}.previous`
327
- const staged = `${meta.bin}.next`
328
- await copyFile(meta.bin, previous).catch(() => undefined)
329
- await copyFile(nextBin, staged)
330
- await chmod(staged, 0o755)
331
- await rename(staged, meta.bin)
332
-
333
- await writeInstallMetadata(
334
- {
335
- ...meta,
336
- channel: manifest.channel,
337
- version: manifest.version,
338
- installedAt: new Date().toISOString(),
339
- },
340
- req.installPath,
341
- )
342
-
343
- return {
344
- status: 'updated',
345
- previousVersion: currentVersion,
346
- currentVersion: manifest.version,
347
- channel: manifest.channel,
348
- bin: meta.bin,
349
- }
350
- } finally {
351
- await rm(tmp, { recursive: true, force: true })
352
- }
353
- }
354
-
355
- async function readUrlText(url: string): Promise<string> {
356
- if (url.startsWith('file://')) {
357
- return readFile(new URL(url), 'utf8')
358
- }
359
- const res = await fetch(url)
360
- if (!res.ok) throw new Error(`GET ${url} failed: HTTP ${res.status}`)
361
- return res.text()
362
- }
363
-
364
- async function downloadToFile(url: string, path: string): Promise<void> {
365
- if (url.startsWith('file://')) {
366
- await copyFile(new URL(url), path)
367
- return
368
- }
369
- const res = await fetch(url)
370
- if (!res.ok) throw new Error(`GET ${url} failed: HTTP ${res.status}`)
371
- const bytes = new Uint8Array(await res.arrayBuffer())
372
- await writeFile(path, bytes)
373
- }
374
-
375
- async function fetchChecksum(base: string, assetName: string): Promise<string> {
376
- const raw = await readUrlText(`${base}/sha256sums.txt`)
377
- for (const line of raw.split(/\r?\n/)) {
378
- const [sha, file] = line.trim().split(/\s+/, 2)
379
- if (!sha || !file) continue
380
- if (file.replace(/^\*/, '') === assetName && /^[a-fA-F0-9]{64}$/.test(sha)) return sha
381
- }
382
- throw new AstraleError(
383
- 'UPDATE_CHECKSUM_NOT_FOUND',
384
- `Checksum entry not found for ${assetName}.`,
385
- `Release base: ${base}`,
386
- )
387
- }
388
-
389
- async function sha256File(path: string): Promise<string> {
390
- const hash = createHash('sha256')
391
- hash.update(await readFile(path))
392
- return hash.digest('hex')
393
- }
394
-
395
- async function extractTarGz(archive: string, cwd: string): Promise<void> {
396
- const { code, stderr } = await run('tar', ['-xzf', archive, '-C', cwd])
397
- if (code !== 0) {
398
- throw new Error(`Could not extract update archive: ${stderr.trim()}`)
399
- }
400
- }
401
-
402
- async function smokeVersion(bin: string, expectedVersion: string): Promise<void> {
403
- const { code, stdout, stderr } = await run(bin, ['--version'])
404
- if (code !== 0) throw new Error(`Updated binary failed --version: ${stderr.trim()}`)
405
- const actual = stdout.trim()
406
- if (actual !== expectedVersion) {
407
- throw new Error(`Updated binary reported version ${actual}, expected ${expectedVersion}`)
408
- }
409
- }
@@ -1,24 +0,0 @@
1
- import type { IdentityStore } from '../identity/index'
2
- import type { InstanceStore } from './instance'
3
-
4
- import { resolveInstanceKey } from './instance'
5
-
6
- export type UseTarget =
7
- | { kind: 'identity'; name: string }
8
- | { kind: 'instance'; name: string }
9
- | { kind: 'ambiguous'; name: string }
10
- | { kind: 'missing'; name: string }
11
-
12
- export function resolveUseTarget(
13
- name: string,
14
- instances: InstanceStore,
15
- identities: IdentityStore,
16
- ): UseTarget {
17
- const identityExists = !!identities.identities[name]
18
- const instanceKey = resolveInstanceKey(instances, name)
19
-
20
- if (identityExists && instanceKey) return { kind: 'ambiguous', name }
21
- if (identityExists) return { kind: 'identity', name }
22
- if (instanceKey) return { kind: 'instance', name: instanceKey }
23
- return { kind: 'missing', name }
24
- }
@@ -1,59 +0,0 @@
1
- import { isDnsLabel } from '@astrale-os/sdk/value'
2
- import { z } from 'zod'
3
-
4
- import { ReservedSlugError } from '../errors'
5
-
6
- // Shared validators + schema fragments used by both instance and identity
7
- // registries — kept in a leaf module to avoid circular imports.
8
-
9
- const NAME_RE = /^[a-zA-Z0-9_.-]+$/
10
- // `host` is the reserved slug of the host/manager kernel (SPEC §5.2); `manager` is the legacy name.
11
- const RESERVED_SLUGS = new Set(['manager', 'host'])
12
-
13
- export { RESERVED_SLUGS }
14
-
15
- export function validateName(name: string, entity: string): void {
16
- if (!name || !NAME_RE.test(name)) {
17
- throw new Error(
18
- `Invalid ${entity.toLowerCase()} name "${name}" — must be non-empty and contain only letters, digits, hyphens, underscores, and dots`,
19
- )
20
- }
21
- }
22
-
23
- export function validateSlug(slug: string): void {
24
- // Canonical Core DNS-label rule: a slug becomes a
25
- // hostname label, so reject anything not DNS-safe (§4.7).
26
- if (!slug || !isDnsLabel(slug)) {
27
- throw new Error(
28
- `Invalid slug "${slug}" — must be a lowercase DNS label [a-z0-9-], ≤63 chars, no leading/trailing hyphen (§4.7)`,
29
- )
30
- }
31
- if (RESERVED_SLUGS.has(slug)) {
32
- throw new ReservedSlugError(slug)
33
- }
34
- }
35
-
36
- export function validateUrl(url: string): void {
37
- try {
38
- const parsed = new URL(url)
39
- if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
40
- throw new Error('not http(s)')
41
- }
42
- } catch {
43
- throw new Error(`Invalid URL "${url}" — expected a valid http:// or https:// URL`)
44
- }
45
- }
46
-
47
- /** Non-throwing predicate form of `validateUrl`. */
48
- export function isHttpUrl(url: string): boolean {
49
- try {
50
- validateUrl(url)
51
- return true
52
- } catch {
53
- return false
54
- }
55
- }
56
-
57
- /** `local` = only this machine. `remote` = mirrored via astrale cloud (§2.7). */
58
- export const RegistryModeSchema = z.enum(['local', 'remote'])
59
- export type RegistryMode = z.infer<typeof RegistryModeSchema>
@@ -1,78 +0,0 @@
1
- import { existsSync, statSync } from 'node:fs'
2
- import { copyFile } from 'node:fs/promises'
3
- import { dirname, join } from 'node:path'
4
- import { fileURLToPath } from 'node:url'
5
-
6
- /**
7
- * The prebuilt host-page bundle, shipped next to the CLI module
8
- * (`<pkg>/viewer/dist`). The module URL is authoritative because npm global
9
- * installs expose the CLI through a bin symlink outside the package root.
10
- */
11
- export function viewerDistDir(moduleUrl = import.meta.url, entry = process.argv[1] ?? '.'): string {
12
- const override = process.env.ASTRALE_VIEWER_DIR
13
- if (override) return override
14
-
15
- const moduleDirectory = dirname(fileURLToPath(moduleUrl))
16
- const published = join(moduleDirectory, '..', 'viewer', 'dist')
17
- const source = join(moduleDirectory, '..', '..', '..', 'viewer', 'dist')
18
- const legacy = join(dirname(entry), '..', 'viewer', 'dist')
19
- const complete = [published, source, legacy].find(hasViewerBundle)
20
- if (complete) return complete
21
-
22
- // A source checkout may intentionally omit generated dist assets. Keep the
23
- // source-derived destination so ensureViewerAssets can build it on demand.
24
- if (hasViewerSource(join(source, '..'))) return source
25
-
26
- // Published installs cannot rebuild: preserve the package-relative path in
27
- // the diagnostic instead of pointing at the npm prefix beside the bin link.
28
- return published
29
- }
30
-
31
- /** Ensure the host bundle exists; on a dev checkout, build it with Bun. */
32
- export async function ensureViewerAssets(
33
- moduleUrl = import.meta.url,
34
- entry = process.argv[1] ?? '.',
35
- ): Promise<string> {
36
- const dist = viewerDistDir(moduleUrl, entry)
37
- const srcDir = join(dist, '..')
38
- if (hasViewerBundle(dist) && !viewerSourceIsNewer(srcDir, dist)) return dist
39
- const bun = (
40
- globalThis as { Bun?: { build: (o: object) => Promise<{ success: boolean; logs: unknown[] }> } }
41
- ).Bun
42
- if (bun && hasViewerSource(srcDir)) {
43
- const result = await bun.build({
44
- entrypoints: [join(srcDir, 'main.ts')],
45
- outdir: dist,
46
- target: 'browser',
47
- minify: false,
48
- })
49
- if (!result.success) throw new Error(`viewer build failed: ${result.logs.join('\n')}`)
50
- await copyFile(join(srcDir, 'index.html'), join(dist, 'index.html'))
51
- return dist
52
- }
53
- throw new Error(
54
- `viewer bundle missing at ${dist} — reinstall the CLI (or run \`bun scripts/build.ts\` in a dev checkout)`,
55
- )
56
- }
57
-
58
- function hasViewerBundle(directory: string): boolean {
59
- return existsSync(join(directory, 'main.js')) && existsSync(join(directory, 'index.html'))
60
- }
61
-
62
- function hasViewerSource(directory: string): boolean {
63
- return existsSync(join(directory, 'main.ts')) && existsSync(join(directory, 'index.html'))
64
- }
65
-
66
- function viewerSourceIsNewer(source: string, dist: string): boolean {
67
- if (!hasViewerSource(source)) return false
68
- if (!hasViewerBundle(dist)) return true
69
- const newestSource = Math.max(
70
- statSync(join(source, 'main.ts')).mtimeMs,
71
- statSync(join(source, 'index.html')).mtimeMs,
72
- )
73
- const oldestOutput = Math.min(
74
- statSync(join(dist, 'main.js')).mtimeMs,
75
- statSync(join(dist, 'index.html')).mtimeMs,
76
- )
77
- return newestSource > oldestOutput
78
- }
@@ -1,67 +0,0 @@
1
- import type { IntentMessage, MountedWindow, ResolvedView, Shell } from '@astrale-os/shell'
2
-
3
- export interface OpenIntentHost {
4
- current(): MountedWindow | null
5
- setCurrent(window: MountedWindow): void
6
- mount(view: ResolvedView): Promise<MountedWindow>
7
- opened(view: ResolvedView): void
8
- failed(error: unknown): void
9
- reply(message: IntentMessage<'open'>, windowId: string): void
10
- reject(message: IntentMessage<'open'>, error: unknown): void
11
- }
12
-
13
- /** Register the root host's serialized node-to-View navigation handler. */
14
- export function installOpenIntentHandler(shell: Shell, host: OpenIntentHost): () => void {
15
- let queue = Promise.resolve()
16
- return shell.onIntent('open', (message) => {
17
- const run = queue.then(() => handleOpenIntent(shell, host, message))
18
- queue = run.catch(() => {})
19
- return run
20
- })
21
- }
22
-
23
- export async function handleOpenIntent(
24
- shell: Pick<Shell, 'views'>,
25
- host: OpenIntentHost,
26
- message: IntentMessage<'open'>,
27
- ): Promise<void> {
28
- const { nodeId, viewId } = message.envelope.payload
29
- try {
30
- const selected = selectResolvedView(await shell.views.resolve(nodeId), viewId)
31
- const previous = host.current()
32
- const next = await host.mount(selected)
33
-
34
- host.setCurrent(next)
35
- host.opened(selected)
36
- // A correlated requester is normally `previous`; answer while its channel
37
- // still exists, then retire the old mount.
38
- host.reply(message, next.windowId)
39
-
40
- if (previous && previous.windowId !== next.windowId) {
41
- try {
42
- const closed = await previous.close({ force: true })
43
- if (closed.kind === 'refused') {
44
- host.failed(new Error(closed.reason ?? `Window ${previous.windowId} refused to close`))
45
- }
46
- } catch (error) {
47
- host.failed(error)
48
- }
49
- }
50
- } catch (error) {
51
- host.reject(message, error)
52
- host.failed(error)
53
- }
54
- }
55
-
56
- export function selectResolvedView(
57
- views: readonly ResolvedView[],
58
- viewId: string | undefined,
59
- ): ResolvedView {
60
- const selected = viewId
61
- ? views.find((view) => view.route.key === viewId || `/:${view.route.key}` === viewId)
62
- : views[0]
63
- if (selected) return selected
64
- throw new Error(
65
- viewId ? `View ${viewId} does not resolve for this node` : 'No view resolves for this node',
66
- )
67
- }
@@ -1,19 +0,0 @@
1
- import { join } from 'node:path'
2
-
3
- import { withFileLock } from '../../state/index'
4
- import { VIEW_DIR } from './session'
5
-
6
- const VIEW_PORT_LOCK = join(VIEW_DIR, 'ports.lock')
7
-
8
- /**
9
- * Keep the free-port probe and detached server startup in one cross-process
10
- * critical section. A probe alone is only advisory: without this lock, two
11
- * concurrent `astrale view` processes can both observe 4419 as free before
12
- * either child binds it.
13
- */
14
- export function withViewPortAllocationLock<T>(
15
- fn: () => Promise<T>,
16
- lockPath = VIEW_PORT_LOCK,
17
- ): Promise<T> {
18
- return withFileLock(lockPath, fn)
19
- }