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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. package/README.md +14 -166
  2. package/package.json +10 -102
  3. package/.check-workspace.cjs +0 -40
  4. package/LICENSE +0 -202
  5. package/THIRD-PARTY-NOTICES.md +0 -27
  6. package/dist/astrale.js +0 -93344
  7. package/dist/public/connect-core.js +0 -29187
  8. package/dist/public/keys/index.js +0 -5651
  9. package/dist/public/paths/index.js +0 -4282
  10. package/dist/types/admin/binding.d.ts +0 -19
  11. package/dist/types/admin/instance/client.d.ts +0 -22
  12. package/dist/types/admin/instance/index.d.ts +0 -2
  13. package/dist/types/admin/instance/model.d.ts +0 -33
  14. package/dist/types/connect-core.d.ts +0 -22
  15. package/dist/types/connection/auth.d.ts +0 -39
  16. package/dist/types/connection/call.d.ts +0 -3
  17. package/dist/types/connection/command.d.ts +0 -27
  18. package/dist/types/connection/credential.d.ts +0 -14
  19. package/dist/types/connection/errors.d.ts +0 -1
  20. package/dist/types/connection/exchange.d.ts +0 -9
  21. package/dist/types/connection/failure/classify.d.ts +0 -2
  22. package/dist/types/connection/failure/index.d.ts +0 -5
  23. package/dist/types/connection/failure/model.d.ts +0 -25
  24. package/dist/types/connection/failure/render.d.ts +0 -3
  25. package/dist/types/connection/index.d.ts +0 -8
  26. package/dist/types/connection/reasons.d.ts +0 -37
  27. package/dist/types/connection/self.d.ts +0 -37
  28. package/dist/types/connection/session.d.ts +0 -31
  29. package/dist/types/connection/target.d.ts +0 -38
  30. package/dist/types/errors.d.ts +0 -23
  31. package/dist/types/identity/registry.d.ts +0 -25
  32. package/dist/types/keys/algorithm.d.ts +0 -6
  33. package/dist/types/keys/credential.d.ts +0 -21
  34. package/dist/types/keys/index.d.ts +0 -4
  35. package/dist/types/keys/pair.d.ts +0 -34
  36. package/dist/types/lib/admin-instance.d.ts +0 -17
  37. package/dist/types/lib/admin-target.d.ts +0 -78
  38. package/dist/types/lib/ca-fetch.d.ts +0 -2
  39. package/dist/types/lib/config.d.ts +0 -71
  40. package/dist/types/lib/failure-debug.d.ts +0 -1
  41. package/dist/types/lib/format.d.ts +0 -1
  42. package/dist/types/lib/idp-session.d.ts +0 -33
  43. package/dist/types/lib/idp.d.ts +0 -404
  44. package/dist/types/lib/instance-target.d.ts +0 -38
  45. package/dist/types/lib/instance.d.ts +0 -202
  46. package/dist/types/lib/invocation.d.ts +0 -3
  47. package/dist/types/lib/log.d.ts +0 -33
  48. package/dist/types/lib/login-flow.d.ts +0 -49
  49. package/dist/types/lib/meta.d.ts +0 -36
  50. package/dist/types/lib/output.d.ts +0 -87
  51. package/dist/types/lib/proc.d.ts +0 -43
  52. package/dist/types/lib/self.d.ts +0 -9
  53. package/dist/types/lib/table.d.ts +0 -18
  54. package/dist/types/lib/update.d.ts +0 -131
  55. package/dist/types/lib/validation.d.ts +0 -11
  56. package/dist/types/paths/index.d.ts +0 -2
  57. package/dist/types/state/exchange-credentials.d.ts +0 -25
  58. package/dist/types/state/files.d.ts +0 -9
  59. package/dist/types/state/identities.d.ts +0 -42
  60. package/dist/types/state/index.d.ts +0 -8
  61. package/dist/types/state/paths.d.ts +0 -32
  62. package/src/__tests__/fixtures/publication.ts +0 -20
  63. package/src/admin/.spec/api.d.ts +0 -3
  64. package/src/admin/.spec/architecture.md +0 -15
  65. package/src/admin/.spec/icon.svg +0 -3
  66. package/src/admin/.spec/layout.ts +0 -6
  67. package/src/admin/__tests__/binding.test.ts +0 -31
  68. package/src/admin/__tests__/fixture.ts +0 -101
  69. package/src/admin/binding.ts +0 -98
  70. package/src/admin/catalog/.spec/api.d.ts +0 -65
  71. package/src/admin/catalog/.spec/architecture.md +0 -6
  72. package/src/admin/catalog/.spec/icon.svg +0 -3
  73. package/src/admin/catalog/.spec/layout.ts +0 -6
  74. package/src/admin/catalog/__tests__/client.test.ts +0 -142
  75. package/src/admin/catalog/client.ts +0 -218
  76. package/src/admin/catalog/index.ts +0 -13
  77. package/src/admin/catalog/model.ts +0 -41
  78. package/src/admin/catalog/tsconfig.json +0 -8
  79. package/src/admin/graph/.spec/api.d.ts +0 -22
  80. package/src/admin/graph/.spec/architecture.md +0 -5
  81. package/src/admin/graph/.spec/icon.svg +0 -3
  82. package/src/admin/graph/.spec/layout.ts +0 -3
  83. package/src/admin/graph/index.ts +0 -6
  84. package/src/admin/graph/nodes.ts +0 -56
  85. package/src/admin/index.ts +0 -2
  86. package/src/admin/instance/.spec/api.d.ts +0 -66
  87. package/src/admin/instance/.spec/architecture.md +0 -10
  88. package/src/admin/instance/.spec/icon.svg +0 -3
  89. package/src/admin/instance/.spec/layout.ts +0 -6
  90. package/src/admin/instance/__tests__/client.test.ts +0 -166
  91. package/src/admin/instance/client.ts +0 -196
  92. package/src/admin/instance/index.ts +0 -15
  93. package/src/admin/instance/model.ts +0 -56
  94. package/src/admin/instance/tsconfig.json +0 -8
  95. package/src/commands/__tests__/admin-instance.test.ts +0 -91
  96. package/src/commands/__tests__/auth-login.test.ts +0 -231
  97. package/src/commands/__tests__/auth-token.test.ts +0 -223
  98. package/src/commands/__tests__/call-describe.test.ts +0 -80
  99. package/src/commands/__tests__/call.test.ts +0 -29
  100. package/src/commands/__tests__/domain-install-operation.test.ts +0 -126
  101. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  102. package/src/commands/__tests__/domain-list.test.ts +0 -133
  103. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  104. package/src/commands/__tests__/install-direct.test.ts +0 -21
  105. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  106. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  107. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  108. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  109. package/src/commands/__tests__/instance-use.test.ts +0 -67
  110. package/src/commands/__tests__/introspect-parse.test.ts +0 -21
  111. package/src/commands/__tests__/logs.test.ts +0 -97
  112. package/src/commands/__tests__/read-commands.test.ts +0 -294
  113. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  114. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  115. package/src/commands/__tests__/token-ttl.test.ts +0 -21
  116. package/src/commands/__tests__/update.test.ts +0 -95
  117. package/src/commands/__tests__/view-build.test.ts +0 -58
  118. package/src/commands/__tests__/view.test.ts +0 -149
  119. package/src/commands/admin/status.ts +0 -61
  120. package/src/commands/admin/use.ts +0 -100
  121. package/src/commands/auth/login.ts +0 -82
  122. package/src/commands/auth/logout.ts +0 -52
  123. package/src/commands/auth/status.ts +0 -86
  124. package/src/commands/auth/token.ts +0 -174
  125. package/src/commands/browser.ts +0 -207
  126. package/src/commands/call-describe.ts +0 -123
  127. package/src/commands/call.ts +0 -205
  128. package/src/commands/domain/install.ts +0 -548
  129. package/src/commands/domain/list.ts +0 -155
  130. package/src/commands/domain/publish.ts +0 -136
  131. package/src/commands/domain/uninstall.ts +0 -128
  132. package/src/commands/get.ts +0 -69
  133. package/src/commands/identity/__tests__/register.test.ts +0 -93
  134. package/src/commands/identity/create.ts +0 -35
  135. package/src/commands/identity/delete.ts +0 -24
  136. package/src/commands/identity/export.ts +0 -46
  137. package/src/commands/identity/import.ts +0 -61
  138. package/src/commands/identity/list.ts +0 -56
  139. package/src/commands/identity/register.ts +0 -196
  140. package/src/commands/identity/sync.ts +0 -38
  141. package/src/commands/identity/unsync.ts +0 -34
  142. package/src/commands/identity/use.ts +0 -24
  143. package/src/commands/identity/whoami.ts +0 -34
  144. package/src/commands/idp/add.ts +0 -150
  145. package/src/commands/idp/list.ts +0 -57
  146. package/src/commands/idp/refresh.ts +0 -38
  147. package/src/commands/idp/remove.ts +0 -36
  148. package/src/commands/idp/show.ts +0 -29
  149. package/src/commands/instance/active.ts +0 -73
  150. package/src/commands/instance/bookmark.ts +0 -101
  151. package/src/commands/instance/create.ts +0 -61
  152. package/src/commands/instance/delete.ts +0 -69
  153. package/src/commands/instance/forget.ts +0 -26
  154. package/src/commands/instance/list.ts +0 -197
  155. package/src/commands/instance/status.ts +0 -38
  156. package/src/commands/instance/use.ts +0 -263
  157. package/src/commands/introspect.ts +0 -110
  158. package/src/commands/logs.ts +0 -283
  159. package/src/commands/mutate.ts +0 -122
  160. package/src/commands/query.ts +0 -136
  161. package/src/commands/session/analyze.ts +0 -50
  162. package/src/commands/session/list.ts +0 -36
  163. package/src/commands/setup.ts +0 -54
  164. package/src/commands/status.ts +0 -60
  165. package/src/commands/studio.ts +0 -434
  166. package/src/commands/token.ts +0 -107
  167. package/src/commands/update.ts +0 -334
  168. package/src/commands/use.ts +0 -86
  169. package/src/commands/view-serve.ts +0 -26
  170. package/src/commands/view.ts +0 -614
  171. package/src/connect-core.test.ts +0 -38
  172. package/src/connect-core.ts +0 -42
  173. package/src/connection/.spec/api.d.ts +0 -110
  174. package/src/connection/.spec/architecture.md +0 -47
  175. package/src/connection/.spec/capabilities/connection.ts +0 -13
  176. package/src/connection/.spec/examples/call.ts +0 -7
  177. package/src/connection/.spec/flows/command.ts +0 -20
  178. package/src/connection/.spec/flows/session.ts +0 -61
  179. package/src/connection/.spec/laws/connection.ts +0 -205
  180. package/src/connection/.spec/layout.ts +0 -21
  181. package/src/connection/__tests__/auth.test.ts +0 -128
  182. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  183. package/src/connection/__tests__/call.test.ts +0 -17
  184. package/src/connection/__tests__/credential.test.ts +0 -138
  185. package/src/connection/__tests__/errors.test.ts +0 -577
  186. package/src/connection/__tests__/exchange.test.ts +0 -295
  187. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  188. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  189. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  190. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  191. package/src/connection/__tests__/managed.test.ts +0 -39
  192. package/src/connection/__tests__/reasons.test.ts +0 -78
  193. package/src/connection/__tests__/self.test.ts +0 -71
  194. package/src/connection/__tests__/session.test.ts +0 -140
  195. package/src/connection/__tests__/target.test.ts +0 -94
  196. package/src/connection/auth.ts +0 -249
  197. package/src/connection/call.ts +0 -7
  198. package/src/connection/command.ts +0 -67
  199. package/src/connection/credential.ts +0 -117
  200. package/src/connection/errors.ts +0 -1
  201. package/src/connection/exchange.ts +0 -311
  202. package/src/connection/failure/classify.ts +0 -110
  203. package/src/connection/failure/index.ts +0 -18
  204. package/src/connection/failure/model.ts +0 -28
  205. package/src/connection/failure/render.ts +0 -116
  206. package/src/connection/index.ts +0 -8
  207. package/src/connection/reasons.ts +0 -209
  208. package/src/connection/self.ts +0 -138
  209. package/src/connection/session.ts +0 -196
  210. package/src/connection/target.ts +0 -112
  211. package/src/connection/tsconfig.json +0 -6
  212. package/src/errors.ts +0 -66
  213. package/src/graph/.spec/api.d.ts +0 -41
  214. package/src/graph/.spec/laws/documents.ts +0 -24
  215. package/src/graph/.spec/laws/projection.ts +0 -13
  216. package/src/graph/.spec/layout.ts +0 -14
  217. package/src/graph/__tests__/mutation.test.ts +0 -51
  218. package/src/graph/__tests__/projection.test.ts +0 -22
  219. package/src/graph/__tests__/query.test.ts +0 -173
  220. package/src/graph/class.ts +0 -30
  221. package/src/graph/index.ts +0 -4
  222. package/src/graph/mutation.ts +0 -46
  223. package/src/graph/projection.ts +0 -21
  224. package/src/graph/query.ts +0 -97
  225. package/src/graph/tsconfig.json +0 -6
  226. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  227. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  228. package/src/identity/.spec/api.d.ts +0 -124
  229. package/src/identity/.spec/architecture.md +0 -33
  230. package/src/identity/.spec/capabilities/identity.ts +0 -7
  231. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  232. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  233. package/src/identity/.spec/flows/import.ts +0 -29
  234. package/src/identity/.spec/laws/identity.ts +0 -56
  235. package/src/identity/.spec/layout.ts +0 -13
  236. package/src/identity/.spec/schemas/identity-export-v1.schema.json +0 -25
  237. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -53
  238. package/src/identity/__tests__/registration.test.ts +0 -64
  239. package/src/identity/__tests__/registry.test.ts +0 -70
  240. package/src/identity/__tests__/transfer.test.ts +0 -198
  241. package/src/identity/index.ts +0 -23
  242. package/src/identity/registration.ts +0 -72
  243. package/src/identity/registry.ts +0 -179
  244. package/src/identity/transfer.ts +0 -187
  245. package/src/identity/tsconfig.json +0 -6
  246. package/src/index.ts +0 -1
  247. package/src/keys/.spec/api.d.ts +0 -74
  248. package/src/keys/.spec/architecture.md +0 -13
  249. package/src/keys/.spec/laws/keys.ts +0 -43
  250. package/src/keys/.spec/layout.ts +0 -6
  251. package/src/keys/__tests__/algorithm.test.ts +0 -39
  252. package/src/keys/__tests__/keys.test.ts +0 -168
  253. package/src/keys/algorithm.ts +0 -33
  254. package/src/keys/credential.ts +0 -112
  255. package/src/keys/index.ts +0 -14
  256. package/src/keys/pair.ts +0 -219
  257. package/src/keys/tsconfig.json +0 -6
  258. package/src/lib/__tests__/admin-target.test.ts +0 -184
  259. package/src/lib/__tests__/binary.test.ts +0 -55
  260. package/src/lib/__tests__/command-dx.test.ts +0 -102
  261. package/src/lib/__tests__/concurrency.test.ts +0 -62
  262. package/src/lib/__tests__/config.test.ts +0 -54
  263. package/src/lib/__tests__/design.test.ts +0 -99
  264. package/src/lib/__tests__/domain-publication.test.ts +0 -138
  265. package/src/lib/__tests__/format.test.ts +0 -22
  266. package/src/lib/__tests__/idp-session.driver.ts +0 -53
  267. package/src/lib/__tests__/idp-session.test.ts +0 -379
  268. package/src/lib/__tests__/idp.test.ts +0 -415
  269. package/src/lib/__tests__/instance-candidates.test.ts +0 -146
  270. package/src/lib/__tests__/instance-target.test.ts +0 -213
  271. package/src/lib/__tests__/instance.test.ts +0 -192
  272. package/src/lib/__tests__/local-status.test.ts +0 -202
  273. package/src/lib/__tests__/log-errors.test.ts +0 -64
  274. package/src/lib/__tests__/log.test.ts +0 -31
  275. package/src/lib/__tests__/meta.test.ts +0 -55
  276. package/src/lib/__tests__/output.test.ts +0 -162
  277. package/src/lib/__tests__/panel.test.ts +0 -40
  278. package/src/lib/__tests__/port.test.ts +0 -44
  279. package/src/lib/__tests__/prompt.test.ts +0 -25
  280. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  281. package/src/lib/__tests__/self.test.ts +0 -50
  282. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  283. package/src/lib/__tests__/table.test.ts +0 -53
  284. package/src/lib/__tests__/update.test.ts +0 -351
  285. package/src/lib/__tests__/use-target.test.ts +0 -56
  286. package/src/lib/__tests__/validation.test.ts +0 -34
  287. package/src/lib/__tests__/view-assets.test.ts +0 -146
  288. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  289. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  290. package/src/lib/__tests__/view-server.test.ts +0 -68
  291. package/src/lib/__tests__/view-session.test.ts +0 -99
  292. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  293. package/src/lib/admin-domain.ts +0 -43
  294. package/src/lib/admin-instance.ts +0 -56
  295. package/src/lib/admin-target.ts +0 -290
  296. package/src/lib/binary.ts +0 -110
  297. package/src/lib/browser.ts +0 -150
  298. package/src/lib/ca-fetch.ts +0 -133
  299. package/src/lib/command-dx.ts +0 -191
  300. package/src/lib/concurrency.ts +0 -31
  301. package/src/lib/config.ts +0 -46
  302. package/src/lib/domain-publication.ts +0 -104
  303. package/src/lib/failure-debug.ts +0 -26
  304. package/src/lib/format.ts +0 -4
  305. package/src/lib/idp-session.ts +0 -134
  306. package/src/lib/idp.ts +0 -906
  307. package/src/lib/instance-candidates.ts +0 -49
  308. package/src/lib/instance-target.ts +0 -197
  309. package/src/lib/instance.ts +0 -467
  310. package/src/lib/invocation.ts +0 -11
  311. package/src/lib/local-status.ts +0 -152
  312. package/src/lib/log.ts +0 -143
  313. package/src/lib/login-flow.ts +0 -201
  314. package/src/lib/meta.ts +0 -90
  315. package/src/lib/output.ts +0 -238
  316. package/src/lib/panel.ts +0 -61
  317. package/src/lib/port.ts +0 -41
  318. package/src/lib/proc.ts +0 -82
  319. package/src/lib/prompt.ts +0 -136
  320. package/src/lib/provision-instance.ts +0 -139
  321. package/src/lib/sdk-deps.ts +0 -104
  322. package/src/lib/self.ts +0 -22
  323. package/src/lib/skills.ts +0 -171
  324. package/src/lib/table.ts +0 -62
  325. package/src/lib/update.ts +0 -409
  326. package/src/lib/use-target.ts +0 -24
  327. package/src/lib/validation.ts +0 -59
  328. package/src/lib/view/assets.ts +0 -78
  329. package/src/lib/view/open-intent.ts +0 -67
  330. package/src/lib/view/port-allocation.ts +0 -19
  331. package/src/lib/view/resolve.ts +0 -111
  332. package/src/lib/view/server.ts +0 -244
  333. package/src/lib/view/session.ts +0 -152
  334. package/src/lib/view/snapshot.ts +0 -101
  335. package/src/paths/.spec/api.d.ts +0 -13
  336. package/src/paths/.spec/architecture.md +0 -5
  337. package/src/paths/.spec/layout.ts +0 -3
  338. package/src/paths/index.ts +0 -13
  339. package/src/program/.spec/api.d.ts +0 -42
  340. package/src/program/.spec/architecture.md +0 -18
  341. package/src/program/.spec/laws/program.ts +0 -29
  342. package/src/program/.spec/layout.ts +0 -14
  343. package/src/program/__tests__/program.test.ts +0 -378
  344. package/src/program/build.ts +0 -183
  345. package/src/program/command.ts +0 -42
  346. package/src/program/index.ts +0 -2
  347. package/src/program/options.ts +0 -41
  348. package/src/program/registry.ts +0 -63
  349. package/src/program/tsconfig.json +0 -6
  350. package/src/setup/__tests__/instance-step.test.ts +0 -256
  351. package/src/setup/__tests__/util.test.ts +0 -29
  352. package/src/setup/engine.ts +0 -83
  353. package/src/setup/render.ts +0 -107
  354. package/src/setup/steps/admin.ts +0 -93
  355. package/src/setup/steps/agent-browser.ts +0 -81
  356. package/src/setup/steps/auth.ts +0 -54
  357. package/src/setup/steps/domain.ts +0 -68
  358. package/src/setup/steps/index.ts +0 -18
  359. package/src/setup/steps/instance.ts +0 -206
  360. package/src/setup/steps/skills-bridge.ts +0 -70
  361. package/src/setup/steps/skills.ts +0 -59
  362. package/src/setup/types.ts +0 -61
  363. package/src/setup/util.ts +0 -34
  364. package/src/state/.spec/api.d.ts +0 -133
  365. package/src/state/.spec/architecture.md +0 -31
  366. package/src/state/.spec/capabilities/state.ts +0 -7
  367. package/src/state/.spec/flows/identity-update.ts +0 -22
  368. package/src/state/.spec/laws/state.ts +0 -73
  369. package/src/state/.spec/layout.ts +0 -14
  370. package/src/state/__tests__/exchange-credentials.test.ts +0 -188
  371. package/src/state/__tests__/files.test.ts +0 -113
  372. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  373. package/src/state/__tests__/identities.test.ts +0 -142
  374. package/src/state/__tests__/paths.test.ts +0 -27
  375. package/src/state/exchange-credentials.ts +0 -219
  376. package/src/state/files.ts +0 -129
  377. package/src/state/identities.ts +0 -229
  378. package/src/state/index.ts +0 -29
  379. package/src/state/paths.ts +0 -61
  380. package/src/state/tsconfig.json +0 -6
  381. package/src/telemetry/__tests__/gate.test.ts +0 -63
  382. package/src/telemetry/__tests__/recorder.test.ts +0 -110
  383. package/src/telemetry/__tests__/redact.test.ts +0 -79
  384. package/src/telemetry/__tests__/session.test.ts +0 -166
  385. package/src/telemetry/__tests__/trigger.test.ts +0 -49
  386. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  387. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  388. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  389. package/src/telemetry/adapters/claude-code.ts +0 -90
  390. package/src/telemetry/adapters/codex.ts +0 -160
  391. package/src/telemetry/adapters/index.ts +0 -45
  392. package/src/telemetry/adapters/types.ts +0 -21
  393. package/src/telemetry/analyze.ts +0 -227
  394. package/src/telemetry/gate.ts +0 -79
  395. package/src/telemetry/recorder.ts +0 -57
  396. package/src/telemetry/redact.ts +0 -53
  397. package/src/telemetry/session.ts +0 -88
  398. package/src/telemetry/settings.ts +0 -26
  399. package/src/telemetry/store.ts +0 -91
  400. package/src/telemetry/trigger.ts +0 -119
  401. package/src/telemetry/types.ts +0 -64
  402. package/src/test-utils.ts +0 -18
  403. package/studio/client/dist/assets/elk-api-ByzoDZWH.js +0 -1
  404. package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
  405. package/studio/client/dist/assets/index-B0RCgUOT.js +0 -8
  406. package/studio/client/dist/assets/index-BiGR8Oo9.css +0 -1
  407. package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
  408. package/studio/client/dist/assets/index-N8J8EKlB.js +0 -81
  409. package/studio/client/dist/index.html +0 -13
  410. package/studio/package.json +0 -65
  411. package/studio/server/agent/ask.test.ts +0 -74
  412. package/studio/server/agent/ask.ts +0 -71
  413. package/studio/server/agent/bridge/client.test.ts +0 -49
  414. package/studio/server/agent/bridge/client.ts +0 -37
  415. package/studio/server/agent/bridge/grant.test.ts +0 -62
  416. package/studio/server/agent/bridge/grant.ts +0 -84
  417. package/studio/server/agent/bridge/routes.test.ts +0 -151
  418. package/studio/server/agent/bridge/routes.ts +0 -148
  419. package/studio/server/agent/bridge/stdio.ts +0 -195
  420. package/studio/server/agent/conversation.test.ts +0 -89
  421. package/studio/server/agent/conversation.ts +0 -158
  422. package/studio/server/agent/harness/adapter.ts +0 -171
  423. package/studio/server/agent/harness/claude/adapter.test.ts +0 -348
  424. package/studio/server/agent/harness/claude/adapter.ts +0 -71
  425. package/studio/server/agent/harness/claude/ask.ts +0 -114
  426. package/studio/server/agent/harness/claude/capabilities.ts +0 -27
  427. package/studio/server/agent/harness/claude/command.ts +0 -63
  428. package/studio/server/agent/harness/claude/events.ts +0 -215
  429. package/studio/server/agent/harness/claude/loadout.ts +0 -132
  430. package/studio/server/agent/harness/claude/mcp.test.ts +0 -36
  431. package/studio/server/agent/harness/claude/mcp.ts +0 -41
  432. package/studio/server/agent/harness/claude/skills.ts +0 -43
  433. package/studio/server/agent/harness/codex/adapter.test.ts +0 -269
  434. package/studio/server/agent/harness/codex/adapter.ts +0 -116
  435. package/studio/server/agent/harness/codex/ask.test.ts +0 -176
  436. package/studio/server/agent/harness/codex/ask.ts +0 -181
  437. package/studio/server/agent/harness/codex/command.test.ts +0 -69
  438. package/studio/server/agent/harness/codex/command.ts +0 -43
  439. package/studio/server/agent/harness/codex/events.test.ts +0 -94
  440. package/studio/server/agent/harness/codex/events.ts +0 -132
  441. package/studio/server/agent/harness/codex/exec.ts +0 -113
  442. package/studio/server/agent/harness/codex/loadout.ts +0 -60
  443. package/studio/server/agent/harness/codex/mcp.test.ts +0 -32
  444. package/studio/server/agent/harness/codex/mcp.ts +0 -27
  445. package/studio/server/agent/harness/codex/models.test.ts +0 -167
  446. package/studio/server/agent/harness/codex/models.ts +0 -211
  447. package/studio/server/agent/harness/codex/skills.ts +0 -33
  448. package/studio/server/agent/harness/gateway/config.test.ts +0 -98
  449. package/studio/server/agent/harness/gateway/config.ts +0 -214
  450. package/studio/server/agent/harness/gateway/token.test.ts +0 -133
  451. package/studio/server/agent/harness/gateway/token.ts +0 -166
  452. package/studio/server/agent/harness/mock/adapter.ts +0 -190
  453. package/studio/server/agent/harness/mock/domain-edit.ts +0 -41
  454. package/studio/server/agent/harness/process.test.ts +0 -46
  455. package/studio/server/agent/harness/process.ts +0 -104
  456. package/studio/server/agent/harness/registry.ts +0 -37
  457. package/studio/server/agent/harness/selection.test.ts +0 -75
  458. package/studio/server/agent/harness/selection.ts +0 -85
  459. package/studio/server/agent/harness/skills.test.ts +0 -95
  460. package/studio/server/agent/harness/skills.ts +0 -100
  461. package/studio/server/agent/layout.test.ts +0 -95
  462. package/studio/server/agent/notify.ts +0 -12
  463. package/studio/server/agent/prompts/anchors.test.ts +0 -70
  464. package/studio/server/agent/prompts/anchors.ts +0 -153
  465. package/studio/server/agent/prompts/ask.ts +0 -34
  466. package/studio/server/agent/prompts/system.test.ts +0 -13
  467. package/studio/server/agent/prompts/system.ts +0 -99
  468. package/studio/server/agent/prompts/turn.ts +0 -66
  469. package/studio/server/agent/routes.test.ts +0 -176
  470. package/studio/server/agent/routes.ts +0 -214
  471. package/studio/server/agent/run/completion.ts +0 -193
  472. package/studio/server/agent/run/coordinator.test.ts +0 -337
  473. package/studio/server/agent/run/coordinator.ts +0 -104
  474. package/studio/server/agent/run/live-state.ts +0 -73
  475. package/studio/server/agent/run/preparation.ts +0 -163
  476. package/studio/server/agent/run/transcript.test.ts +0 -81
  477. package/studio/server/agent/run/transcript.ts +0 -196
  478. package/studio/server/agent/run/usage.test.ts +0 -70
  479. package/studio/server/agent/run/usage.ts +0 -62
  480. package/studio/server/agent/stream.ts +0 -37
  481. package/studio/server/agent/telemetry.ts +0 -13
  482. package/studio/server/api/canvas.ts +0 -43
  483. package/studio/server/api/comments.ts +0 -85
  484. package/studio/server/api/context.ts +0 -61
  485. package/studio/server/api/deployment.ts +0 -39
  486. package/studio/server/api/documents.ts +0 -55
  487. package/studio/server/api/domain.ts +0 -59
  488. package/studio/server/api/http.ts +0 -45
  489. package/studio/server/api/project.ts +0 -57
  490. package/studio/server/api/schema.ts +0 -12
  491. package/studio/server/api/views.ts +0 -57
  492. package/studio/server/api/workspace.ts +0 -60
  493. package/studio/server/api-agent-loadout.test.ts +0 -69
  494. package/studio/server/api.test.ts +0 -147
  495. package/studio/server/api.ts +0 -34
  496. package/studio/server/cache.test.ts +0 -122
  497. package/studio/server/cache.ts +0 -303
  498. package/studio/server/cli-consumers.test.ts +0 -494
  499. package/studio/server/cli.test.ts +0 -88
  500. package/studio/server/cli.ts +0 -240
  501. package/studio/server/client-package.test.ts +0 -147
  502. package/studio/server/client-package.ts +0 -266
  503. package/studio/server/detect.ts +0 -81
  504. package/studio/server/domain.test.ts +0 -77
  505. package/studio/server/domain.ts +0 -124
  506. package/studio/server/environment/dotenv-preview.test.ts +0 -39
  507. package/studio/server/environment/dotenv-preview.ts +0 -27
  508. package/studio/server/environment/files.test.ts +0 -53
  509. package/studio/server/environment/files.ts +0 -120
  510. package/studio/server/handoff/copy.ts +0 -171
  511. package/studio/server/handoff/service.test.ts +0 -22
  512. package/studio/server/handoff/service.ts +0 -62
  513. package/studio/server/index.ts +0 -148
  514. package/studio/server/instances/active.ts +0 -72
  515. package/studio/server/instances/deploy-record.test.ts +0 -31
  516. package/studio/server/instances/deploy-record.ts +0 -37
  517. package/studio/server/instances/deploy.ts +0 -56
  518. package/studio/server/instances/probe.test.ts +0 -67
  519. package/studio/server/instances/probe.ts +0 -67
  520. package/studio/server/instances/status.test.ts +0 -12
  521. package/studio/server/instances/status.ts +0 -49
  522. package/studio/server/introspect/anatomy/client-tree.ts +0 -57
  523. package/studio/server/introspect/anatomy/env-fields.ts +0 -66
  524. package/studio/server/introspect/anatomy/schema-definition.ts +0 -53
  525. package/studio/server/introspect/anatomy/source.ts +0 -181
  526. package/studio/server/introspect/anatomy/views/routes.ts +0 -114
  527. package/studio/server/introspect/anatomy/views.ts +0 -53
  528. package/studio/server/introspect/anatomy-extras.test.ts +0 -265
  529. package/studio/server/introspect/anatomy-extras.ts +0 -10
  530. package/studio/server/introspect/anatomy.test.ts +0 -41
  531. package/studio/server/introspect/anatomy.ts +0 -147
  532. package/studio/server/introspect/bundle.ts +0 -69
  533. package/studio/server/introspect/canonical-schema.test.ts +0 -179
  534. package/studio/server/introspect/canonical-schema.ts +0 -583
  535. package/studio/server/introspect/config-preview.test.ts +0 -32
  536. package/studio/server/introspect/config-preview.ts +0 -119
  537. package/studio/server/introspect/core-extractor.ts +0 -30
  538. package/studio/server/introspect/core.ts +0 -45
  539. package/studio/server/introspect/diff.test.ts +0 -124
  540. package/studio/server/introspect/diff.ts +0 -316
  541. package/studio/server/introspect/extractor.ts +0 -41
  542. package/studio/server/introspect/hash.ts +0 -24
  543. package/studio/server/introspect/overlay-tsmorph.test.ts +0 -146
  544. package/studio/server/introspect/overlay-tsmorph.ts +0 -9
  545. package/studio/server/introspect/overlay.test.ts +0 -44
  546. package/studio/server/introspect/overlay.ts +0 -40
  547. package/studio/server/introspect/revision.test.ts +0 -54
  548. package/studio/server/introspect/revision.ts +0 -49
  549. package/studio/server/introspect/runtime.test.ts +0 -157
  550. package/studio/server/introspect/runtime.ts +0 -140
  551. package/studio/server/introspect/schema-ir-json.test.ts +0 -70
  552. package/studio/server/introspect/schema-ir-json.ts +0 -151
  553. package/studio/server/introspect/schema-refs.test.ts +0 -55
  554. package/studio/server/introspect/schema-refs.ts +0 -32
  555. package/studio/server/introspect/source-overlay/annotations.ts +0 -14
  556. package/studio/server/introspect/source-overlay/handlers.ts +0 -161
  557. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -46
  558. package/studio/server/introspect/source-overlay/project.ts +0 -248
  559. package/studio/server/introspect/source-overlay/spans.ts +0 -330
  560. package/studio/server/json.ts +0 -46
  561. package/studio/server/lifecycle.ts +0 -42
  562. package/studio/server/sse.test.ts +0 -26
  563. package/studio/server/sse.ts +0 -60
  564. package/studio/server/state/baseline.test.ts +0 -267
  565. package/studio/server/state/baseline.ts +0 -354
  566. package/studio/server/state/comments.test.ts +0 -94
  567. package/studio/server/state/comments.ts +0 -484
  568. package/studio/server/state/context.ts +0 -199
  569. package/studio/server/state/documents.ts +0 -111
  570. package/studio/server/state/integrations.ts +0 -81
  571. package/studio/server/state/layout.test.ts +0 -34
  572. package/studio/server/state/layout.ts +0 -82
  573. package/studio/server/state/settings.test.ts +0 -78
  574. package/studio/server/state/settings.ts +0 -73
  575. package/studio/server/state/store.test.ts +0 -122
  576. package/studio/server/state/store.ts +0 -146
  577. package/studio/server/state/visibility.ts +0 -48
  578. package/studio/server/views/model.test.ts +0 -57
  579. package/studio/server/views/model.ts +0 -66
  580. package/studio/server/views/runtime.ts +0 -40
  581. package/studio/server/views/selection-repository.test.ts +0 -31
  582. package/studio/server/views/selection-repository.ts +0 -60
  583. package/studio/server/views/session.test.ts +0 -73
  584. package/studio/server/views/session.ts +0 -166
  585. package/studio/server/views/target.test.ts +0 -78
  586. package/studio/server/views/target.ts +0 -222
  587. package/studio/server/watch.test.ts +0 -36
  588. package/studio/server/watch.ts +0 -93
  589. package/studio/server/workspace/catalog.test.ts +0 -17
  590. package/studio/server/workspace/catalog.ts +0 -43
  591. package/studio/server/workspace/create.test.ts +0 -37
  592. package/studio/server/workspace/create.ts +0 -162
  593. package/studio/server/workspace/git.ts +0 -75
  594. package/studio/server/workspace/updates.ts +0 -83
  595. package/studio/server/workspace-state.ts +0 -26
  596. package/studio/server/workspace-watch.ts +0 -106
  597. package/studio/shared/agent-effort.test.ts +0 -12
  598. package/studio/shared/agent-effort.ts +0 -15
  599. package/studio/shared/agent-models.test.ts +0 -9
  600. package/studio/shared/agent-models.ts +0 -14
  601. package/studio/shared/contracts/README.md +0 -16
  602. package/studio/shared/contracts/agent.ts +0 -270
  603. package/studio/shared/contracts/runtime.ts +0 -50
  604. package/studio/shared/contracts/schema.ts +0 -393
  605. package/studio/shared/contracts/surface.test.ts +0 -317
  606. package/studio/shared/contracts/workspace.ts +0 -265
  607. package/studio/shared/layout.test.ts +0 -116
  608. package/studio/shared/schema/identity.test.ts +0 -34
  609. package/studio/shared/schema/identity.ts +0 -68
  610. package/studio/shared/settings-values.test.ts +0 -18
  611. package/studio/shared/settings-values.ts +0 -20
  612. package/studio/shared/types.ts +0 -14
  613. package/studio/tsconfig.json +0 -23
  614. package/tsconfig.json +0 -14
  615. package/viewer/dist/index.html +0 -93
  616. package/viewer/dist/main.js +0 -76
  617. package/viewer/tsconfig.json +0 -13
@@ -1,133 +0,0 @@
1
- import type { IncomingHttpHeaders, request as httpRequest } from 'node:http'
2
-
3
- import { Buffer } from 'node:buffer'
4
- import { readFileSync } from 'node:fs'
5
- import { request as httpsRequest } from 'node:https'
6
- import { rootCertificates } from 'node:tls'
7
-
8
- /** Create a Fetch capability whose HTTPS requests trust one CLI-selected CA file. */
9
- export function fetchWithCaFile(
10
- caFile: string,
11
- fallback: (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> = globalThis.fetch,
12
- ): (input: RequestInfo | URL, init?: RequestInit) => Promise<Response> {
13
- const ca = readFileSync(caFile)
14
- const fallbackFetch = fallback.bind(globalThis)
15
-
16
- return async (input: RequestInfo | URL, init?: RequestInit): Promise<Response> => {
17
- const url = requestUrl(input)
18
- if (url.protocol !== 'https:') return fallbackFetch(input, init)
19
- return fetchWithNode(url, init, ca)
20
- }
21
- }
22
-
23
- function requestUrl(input: RequestInfo | URL): URL {
24
- if (input instanceof URL) return input
25
- if (typeof input === 'string') return new URL(input)
26
- return new URL(input.url)
27
- }
28
-
29
- function fetchWithNode(url: URL, init: RequestInit | undefined, ca: Buffer): Promise<Response> {
30
- return new Promise((resolve, reject) => {
31
- const request = httpsRequest(
32
- url,
33
- {
34
- method: init?.method ?? 'GET',
35
- headers: headersInitToRecord(init?.headers),
36
- // `ca` replaces Node's default trust set. Retain public roots because one
37
- // Client Session may reach both a private Kernel and a public Domain issuer.
38
- ca: [...rootCertificates, ca],
39
- },
40
- (response) => {
41
- const chunks: Buffer[] = []
42
- response.on('data', (chunk) =>
43
- chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)),
44
- )
45
- response.on('end', () => {
46
- const status = response.statusCode ?? 0
47
- const body =
48
- status === 204 || status === 205 || status === 304 ? null : Buffer.concat(chunks)
49
- const result = new Response(body, {
50
- status,
51
- statusText: response.statusMessage,
52
- headers: responseHeaders(response.headers),
53
- })
54
- // Synthetic Responses have no URL list. This transport does not follow
55
- // redirects, so the exact request URL is also the final response URL.
56
- Object.defineProperty(result, 'url', { value: url.toString() })
57
- resolve(result)
58
- })
59
- },
60
- )
61
-
62
- request.on('error', reject)
63
- if (init?.signal) {
64
- if (init.signal.aborted) {
65
- request.destroy(abortError(init.signal.reason))
66
- } else {
67
- init.signal.addEventListener(
68
- 'abort',
69
- () => request.destroy(abortError(init.signal?.reason)),
70
- {
71
- once: true,
72
- },
73
- )
74
- }
75
- }
76
-
77
- writeBody(request, init?.body)
78
- .then(() => request.end())
79
- .catch((error) => request.destroy(error))
80
- })
81
- }
82
-
83
- function abortError(reason: unknown): Error {
84
- return reason instanceof Error
85
- ? reason
86
- : new DOMException('The operation was aborted.', 'AbortError')
87
- }
88
-
89
- async function writeBody(
90
- request: ReturnType<typeof httpRequest>,
91
- body: BodyInit | null | undefined,
92
- ): Promise<void> {
93
- if (body === undefined || body === null) return
94
- if (typeof body === 'string' || body instanceof Uint8Array) {
95
- request.write(body)
96
- return
97
- }
98
- if (body instanceof ArrayBuffer) {
99
- request.write(Buffer.from(body))
100
- return
101
- }
102
- if (body instanceof Blob) {
103
- request.write(Buffer.from(await body.arrayBuffer()))
104
- return
105
- }
106
- throw new Error('Unsupported request body type for CA-backed fetch')
107
- }
108
-
109
- function headersInitToRecord(headers: HeadersInit | undefined): Record<string, string> {
110
- if (!headers) return {}
111
- if (headers instanceof Headers) {
112
- const out: Record<string, string> = {}
113
- headers.forEach((value, key) => {
114
- out[key] = value
115
- })
116
- return out
117
- }
118
- if (Array.isArray(headers)) return Object.fromEntries(headers)
119
- return Object.fromEntries(Object.entries(headers).map(([key, value]) => [key, String(value)]))
120
- }
121
-
122
- function responseHeaders(headers: IncomingHttpHeaders): Headers {
123
- const out = new Headers()
124
- for (const [key, value] of Object.entries(headers)) {
125
- if (value === undefined) continue
126
- if (Array.isArray(value)) {
127
- for (const entry of value) out.append(key, entry)
128
- } else {
129
- out.set(key, value)
130
- }
131
- }
132
- return out
133
- }
@@ -1,191 +0,0 @@
1
- import type { Command, CommanderError } from 'commander'
2
-
3
- import chalk from 'chalk'
4
-
5
- export type CommandCatalogEntry = {
6
- path: string[]
7
- usage: string
8
- }
9
-
10
- export function collectCommandCatalog(program: Command): CommandCatalogEntry[] {
11
- const out: CommandCatalogEntry[] = []
12
-
13
- function walk(command: Command, path: string[]): void {
14
- for (const child of command.commands) {
15
- const childPath = [...path, child.name()]
16
- if (child.commands.length === 0) {
17
- out.push({ path: childPath, usage: usageFor(childPath, child) })
18
- }
19
- walk(child, childPath)
20
- }
21
- }
22
-
23
- walk(program, [])
24
- return out
25
- }
26
-
27
- export function renderCommanderError(
28
- program: Command,
29
- error: CommanderError,
30
- argv = process.argv.slice(2),
31
- machine = argv.some((token) => token === '--ci' || token === '--json' || token === '--raw') ||
32
- !(process.stdout.isTTY ?? false),
33
- ): string {
34
- const tokens = stripOptions(argv)
35
- const catalog = collectCommandCatalog(program)
36
- const matched = matchRegisteredPrefix(program, tokens)
37
-
38
- if (matched.path.length === 0 && tokens.length > 0) {
39
- return maybeMachine(renderUnknownCommand(tokens, catalog), machine)
40
- }
41
-
42
- if (error.code === 'commander.missingArgument') {
43
- const usage = usageFor(matched.path, matched.command)
44
- return maybeMachine(
45
- [
46
- `Missing required argument for ${chalk.bold(`astrale ${matched.path.join(' ')}`)}`,
47
- '',
48
- 'Usage:',
49
- ` astrale ${usage}`,
50
- ].join('\n'),
51
- machine,
52
- )
53
- }
54
-
55
- if (error.code === 'commander.excessArguments') {
56
- const usage = usageFor(matched.path, matched.command)
57
- const extra = tokens.slice(matched.path.length).join(' ')
58
- return maybeMachine(
59
- [
60
- `Unexpected argument${extra.includes(' ') ? 's' : ''} for ${chalk.bold(
61
- `astrale ${matched.path.join(' ')}`,
62
- )}${extra ? `: ${extra}` : ''}`,
63
- '',
64
- 'Usage:',
65
- ` astrale ${usage}`,
66
- ].join('\n'),
67
- machine,
68
- )
69
- }
70
-
71
- const suggestions = nearestCommands(tokens.join(' '), catalog)
72
- return maybeMachine(
73
- [
74
- error.message,
75
- ...(suggestions.length > 0
76
- ? ['', 'Did you mean:', ...suggestions.map((s) => ` astrale ${s}`)]
77
- : []),
78
- ].join('\n'),
79
- machine,
80
- )
81
- }
82
-
83
- const RETIRED_COMMANDS: Record<string, string> = {
84
- ls: 'astrale query <source> --edge <class>',
85
- describe: 'astrale get <target>',
86
- }
87
-
88
- function renderUnknownCommand(tokens: string[], catalog: CommandCatalogEntry[]): string {
89
- const command = tokens.join(' ')
90
- const first = tokens[0]
91
- const retired = first === undefined ? undefined : RETIRED_COMMANDS[first]
92
- if (retired !== undefined) {
93
- return [
94
- `Unknown command: ${chalk.bold(`astrale ${command}`)}`,
95
- '',
96
- `\`astrale ${first}\` was removed. Use ${chalk.bold(retired)} instead.`,
97
- ].join('\n')
98
- }
99
- const namespaceMatches = catalog.filter((entry) => entry.path.at(-1) === first)
100
- if (namespaceMatches.length > 0) {
101
- return [
102
- `Unknown command: ${chalk.bold(`astrale ${command}`)}`,
103
- '',
104
- `"${first}" is available under:`,
105
- ...namespaceMatches.map((entry) => ` astrale ${entry.usage}`),
106
- ].join('\n')
107
- }
108
-
109
- const suggestions = nearestCommands(command, catalog)
110
- return [
111
- `Unknown command: ${chalk.bold(`astrale ${command}`)}`,
112
- ...(suggestions.length > 0
113
- ? ['', 'Did you mean:', ...suggestions.map((s) => ` astrale ${s}`)]
114
- : []),
115
- ].join('\n')
116
- }
117
-
118
- function matchRegisteredPrefix(
119
- program: Command,
120
- tokens: string[],
121
- ): { command: Command; path: string[] } {
122
- let current = program
123
- const path: string[] = []
124
- for (const token of tokens) {
125
- const next = current.commands.find(
126
- (cmd) => cmd.name() === token || cmd.aliases().includes(token),
127
- )
128
- if (!next) break
129
- current = next
130
- path.push(current.name())
131
- }
132
- return { command: current, path }
133
- }
134
-
135
- function usageFor(path: string[], command: Command): string {
136
- const suffix = command
137
- .usage()
138
- .replace(/\[options\]\s*/g, '')
139
- .replace(/\s+/g, ' ')
140
- .trim()
141
- return [path.join(' '), suffix].filter(Boolean).join(' ')
142
- }
143
-
144
- const ANSI_RE = new RegExp(String.fromCharCode(27) + '\\[[0-9;]*m', 'g')
145
-
146
- function maybeMachine(text: string, machine: boolean): string {
147
- if (!machine) return text
148
- const plain = text.replace(ANSI_RE, '')
149
- const first = plain.split('\n').find((line) => line.trim().length > 0) ?? plain
150
- return JSON.stringify({ error: 'USAGE_ERROR', message: first, detail: plain })
151
- }
152
-
153
- function stripOptions(argv: string[]): string[] {
154
- const out: string[] = []
155
- for (const token of argv) {
156
- if (token === '--') break
157
- if (token.startsWith('-')) continue
158
- out.push(token)
159
- }
160
- return out
161
- }
162
-
163
- function nearestCommands(input: string, catalog: CommandCatalogEntry[]): string[] {
164
- if (!input) return []
165
- return catalog
166
- .map((entry) => ({ usage: entry.usage, score: similarity(input, entry.path.join(' ')) }))
167
- .filter((entry) => entry.score >= 0.45)
168
- .sort((a, b) => b.score - a.score || a.usage.localeCompare(b.usage))
169
- .slice(0, 3)
170
- .map((entry) => entry.usage)
171
- }
172
-
173
- function similarity(a: string, b: string): number {
174
- const max = Math.max(a.length, b.length)
175
- if (max === 0) return 1
176
- return 1 - levenshtein(a, b) / max
177
- }
178
-
179
- function levenshtein(a: string, b: string): number {
180
- const prev = Array.from({ length: b.length + 1 }, (_, i) => i)
181
- const curr = Array.from({ length: b.length + 1 }, () => 0)
182
- for (let i = 1; i <= a.length; i += 1) {
183
- curr[0] = i
184
- for (let j = 1; j <= b.length; j += 1) {
185
- const cost = a[i - 1] === b[j - 1] ? 0 : 1
186
- curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost)
187
- }
188
- prev.splice(0, prev.length, ...curr)
189
- }
190
- return prev[b.length] ?? 0
191
- }
@@ -1,31 +0,0 @@
1
- /**
2
- * Minimal bounded-concurrency map. No external dependency (the repo
3
- * hand-rolls with `Promise.all`); a tiny worker pool is enough for the
4
- * `domain dev up` fan-out.
5
- */
6
-
7
- /**
8
- * Run `fn` over `items` with at most `limit` in flight at once. Results
9
- * are returned in input order regardless of completion order. The first
10
- * rejection rejects the returned promise (in-flight work still settles).
11
- */
12
- export async function mapBounded<T, R>(
13
- items: readonly T[],
14
- limit: number,
15
- fn: (item: T, index: number) => Promise<R>,
16
- ): Promise<R[]> {
17
- const results: R[] = []
18
- const bound = Math.max(1, Math.min(limit, items.length))
19
- let next = 0
20
-
21
- async function worker(): Promise<void> {
22
- while (true) {
23
- const i = next++
24
- if (i >= items.length) return
25
- results[i] = await fn(items[i] as T, i)
26
- }
27
- }
28
-
29
- await Promise.all(Array.from({ length: bound }, () => worker()))
30
- return results
31
- }
package/src/lib/config.ts DELETED
@@ -1,46 +0,0 @@
1
- import { readFile, writeFile, mkdir } from 'node:fs/promises'
2
- import { dirname } from 'node:path'
3
- import { z } from 'zod'
4
-
5
- import { CONFIG_PATH } from '../state/index'
6
- import { AdminTargetConfigSchema, DEFAULT_ADMIN_TARGET_CONFIG } from './admin-target'
7
- import { log } from './log'
8
-
9
- export const AstraleConfigSchema = z.object({
10
- issuer: z.string().url().default('https://unregistered.invalid'),
11
- admin: AdminTargetConfigSchema.default(DEFAULT_ADMIN_TARGET_CONFIG),
12
- telemetry: z.object({ enabled: z.boolean().default(true) }).default({ enabled: true }),
13
- })
14
-
15
- export type AstraleConfig = z.infer<typeof AstraleConfigSchema>
16
-
17
- export const DEFAULT_CONFIG: AstraleConfig = AstraleConfigSchema.parse({})
18
-
19
- export async function readConfig(): Promise<AstraleConfig> {
20
- try {
21
- const raw = await readFile(CONFIG_PATH, 'utf-8')
22
- return AstraleConfigSchema.parse(JSON.parse(raw))
23
- } catch (e) {
24
- // A present-but-broken config (invalid JSON or failed validation) should
25
- // surface; a missing file (readFile ENOENT) stays silent — that's the
26
- // normal first-run case and defaults are expected.
27
- if (e instanceof z.ZodError || e instanceof SyntaxError) {
28
- log.warn(`Invalid config at ${CONFIG_PATH} — using defaults`)
29
- }
30
- return DEFAULT_CONFIG
31
- }
32
- }
33
-
34
- export async function writeConfig(config: AstraleConfig): Promise<void> {
35
- await mkdir(dirname(CONFIG_PATH), { recursive: true })
36
- await writeFile(CONFIG_PATH, JSON.stringify(config, null, 2) + '\n')
37
- }
38
-
39
- export async function configExists(): Promise<boolean> {
40
- try {
41
- await readFile(CONFIG_PATH)
42
- return true
43
- } catch {
44
- return false
45
- }
46
- }
@@ -1,104 +0,0 @@
1
- import { publication } from '@astrale-os/sdk/publication'
2
-
3
- const MAXIMUM_PUBLICATION_BYTES = 1024 * 1024
4
- type FetchLike = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>
5
-
6
- /** Fetch and admit one canonical Domain Publication without following its bundle. */
7
- export async function fetchDomainPublication(
8
- input: string,
9
- signal?: AbortSignal,
10
- fetchImpl: FetchLike = globalThis.fetch,
11
- ): Promise<publication.Publication> {
12
- const url = domainPublicationUrl(input)
13
- const response = await fetchImpl(url, {
14
- redirect: 'error',
15
- ...(signal === undefined ? {} : { signal }),
16
- })
17
- if (!response.ok) {
18
- await cancel(response.body)
19
- throw new Error(`GET ${url.href} → ${response.status}`)
20
- }
21
- const bytes = await readBounded(response, url)
22
- try {
23
- const source = new TextDecoder('utf-8', { fatal: true }).decode(bytes)
24
- return publication.accept(JSON.parse(source) as unknown)
25
- } catch (cause) {
26
- throw new Error(`GET ${url.href} returned an invalid Domain Publication`, { cause })
27
- }
28
- }
29
-
30
- async function readBounded(response: Response, url: URL): Promise<Uint8Array> {
31
- const declared = response.headers.get('content-length')
32
- if (
33
- declared !== null &&
34
- (!/^\d+$/u.test(declared) ||
35
- !Number.isSafeInteger(Number(declared)) ||
36
- Number(declared) > MAXIMUM_PUBLICATION_BYTES)
37
- ) {
38
- await cancel(response.body)
39
- throw sizeError(url)
40
- }
41
- if (response.body === null) return new Uint8Array()
42
-
43
- const reader = response.body.getReader()
44
- const chunks: Uint8Array[] = []
45
- let size = 0
46
- let complete = false
47
- try {
48
- for (;;) {
49
- const next = await reader.read()
50
- if (next.done) {
51
- complete = true
52
- break
53
- }
54
- if (next.value.byteLength === 0) continue
55
- if (next.value.byteLength > MAXIMUM_PUBLICATION_BYTES - size) {
56
- throw sizeError(url)
57
- }
58
- chunks.push(next.value)
59
- size += next.value.byteLength
60
- }
61
- } finally {
62
- if (!complete) await reader.cancel().catch(() => undefined)
63
- reader.releaseLock()
64
- }
65
-
66
- const bytes = new Uint8Array(size)
67
- let offset = 0
68
- for (const chunk of chunks) {
69
- bytes.set(chunk, offset)
70
- offset += chunk.byteLength
71
- }
72
- return bytes
73
- }
74
-
75
- function sizeError(url: URL): Error {
76
- return new Error(`GET ${url.href} exceeded ${MAXIMUM_PUBLICATION_BYTES} bytes`)
77
- }
78
-
79
- async function cancel(body: ReadableStream<Uint8Array> | null): Promise<void> {
80
- if (body !== null) await body.cancel().catch(() => undefined)
81
- }
82
-
83
- /** Canonical discovery document for a Domain origin or exact Publication URL. */
84
- export function domainPublicationUrl(input: string): URL {
85
- let url: URL
86
- try {
87
- url = new URL(input)
88
- } catch {
89
- throw new TypeError(`Domain deployment URL is invalid: ${input}`)
90
- }
91
- if (
92
- !['http:', 'https:'].includes(url.protocol) ||
93
- url.username !== '' ||
94
- url.password !== '' ||
95
- url.search !== '' ||
96
- url.hash !== '' ||
97
- !['', '/', publication.PATH].includes(url.pathname)
98
- ) {
99
- throw new TypeError(
100
- `Domain deployment URL must be an HTTP(S) origin or canonical Publication URL: ${input}`,
101
- )
102
- }
103
- return new URL(publication.PATH, url.origin)
104
- }
@@ -1,26 +0,0 @@
1
- import chalk from 'chalk'
2
-
3
- const MAXIMUM_DEBUG_FAILURES = 32
4
-
5
- export function printFailureDebug(error: unknown, url: string): void {
6
- process.stderr.write(`\n${chalk.dim('── debug ─────────────────')}\n`)
7
- if (url) process.stderr.write(`${chalk.dim(`url: ${url}`)}\n`)
8
- const seen = new Set<unknown>()
9
- const pending: Array<{ value: unknown; relation: string }> = [{ value: error, relation: 'error' }]
10
- while (pending.length > 0 && seen.size < MAXIMUM_DEBUG_FAILURES) {
11
- const { value, relation } = pending.shift()!
12
- if (seen.has(value)) continue
13
- seen.add(value)
14
- if (!(value instanceof Error)) {
15
- process.stderr.write(`${chalk.dim(`${relation}: ${String(value)}`)}\n`)
16
- continue
17
- }
18
- process.stderr.write(
19
- `${chalk.dim(`${relation}: ${value.constructor.name}: ${value.message}`)}\n`,
20
- )
21
- if (value.stack) process.stderr.write(`${chalk.dim(value.stack)}\n`)
22
- if (value.cause !== undefined) pending.push({ value: value.cause, relation: 'caused by' })
23
- if (value instanceof AggregateError)
24
- for (const child of value.errors) pending.push({ value: child, relation: 'aggregate' })
25
- }
26
- }
package/src/lib/format.ts DELETED
@@ -1,4 +0,0 @@
1
- export function formatElapsed(ms: number): string {
2
- if (ms < 1000) return `${Math.round(ms)}ms`
3
- return `${(ms / 1000).toFixed(2)}s`
4
- }
@@ -1,134 +0,0 @@
1
- import { withFileLock } from '../state/index'
2
- import {
3
- accessTokenForAudience,
4
- classifyRefreshFailure,
5
- idpSessionPath,
6
- OAuthTokenError,
7
- readIdpSession,
8
- refreshSession,
9
- type IdpSession,
10
- } from './idp'
11
- import { orgIdForAudience } from './instance'
12
- import { fetchOrgHint } from './meta'
13
-
14
- /** No cached session file exists for the identity — only a login creates one. */
15
- export class IdpSessionMissingError extends Error {
16
- readonly identityName: string
17
-
18
- constructor(identityName: string) {
19
- super(`No cached IdP session for "${identityName}"`)
20
- this.name = 'IdpSessionMissingError'
21
- this.identityName = identityName
22
- }
23
- }
24
-
25
- /** The session needs a refresh but never received a refresh token. */
26
- export class IdpSessionNoRefreshTokenError extends Error {
27
- readonly identityName: string
28
-
29
- constructor(identityName: string) {
30
- super(`IdP session for "${identityName}" has no refresh token`)
31
- this.name = 'IdpSessionNoRefreshTokenError'
32
- this.identityName = identityName
33
- }
34
- }
35
-
36
- export type EnsureFreshSessionOptions = {
37
- audience?: string
38
- organizationId?: string
39
- /**
40
- * Org-hint resolver, consulted only when a refresh actually happens.
41
- * Defaults to `fetchOrgHint`; injectable for tests.
42
- */
43
- resolveOrganizationId?: (audience: string) => Promise<string | undefined>
44
- }
45
-
46
- export function idpSessionLockPath(identityName: string): string {
47
- // Lives next to the session file; listIdpSessions only picks up *.json.
48
- return `${idpSessionPath(identityName)}.lock`
49
- }
50
-
51
- /**
52
- * Return a session holding a fresh access token for `audience`, refreshing it
53
- * if needed. This is the ONLY correct way to refresh: WorkOS refresh tokens
54
- * are single-use, so two processes refreshing concurrently burn the same
55
- * token — the loser's `invalid_grant` can revoke the whole upstream session.
56
- * All refreshes therefore serialize on a per-identity file lock, and waiters
57
- * re-read the rotated session instead of re-exchanging.
58
- *
59
- * `IdpAudienceMismatchError` propagates verbatim (the session is healthy; the
60
- * IdP just won't mint that audience).
61
- */
62
- export async function ensureFreshSession(
63
- identityName: string,
64
- opts: EnsureFreshSessionOptions = {},
65
- ): Promise<IdpSession> {
66
- const session = await readIdpSession(identityName)
67
- if (!session) throw new IdpSessionMissingError(identityName)
68
- if (accessTokenForAudience(session, opts.audience)) return session
69
- if (!session.refresh_token) throw new IdpSessionNoRefreshTokenError(identityName)
70
-
71
- return withFileLock(idpSessionLockPath(identityName), async () => {
72
- // Re-read under the lock: a process that held the lock before us may have
73
- // already rotated the session — using its result is the whole point.
74
- const current = await readIdpSession(identityName)
75
- if (!current) throw new IdpSessionMissingError(identityName)
76
- if (accessTokenForAudience(current, opts.audience)) return current
77
-
78
- // Org resolution order: explicit > bookmarked-at-create > router lookup.
79
- const bookmarkOrg =
80
- opts.organizationId ?? (opts.audience ? await orgIdForAudience(opts.audience) : undefined)
81
- const organizationId =
82
- bookmarkOrg ??
83
- (opts.audience
84
- ? await (opts.resolveOrganizationId ?? fetchOrgHint)(opts.audience)
85
- : undefined)
86
- try {
87
- return await refreshSession(identityName, current, {
88
- audience: opts.audience,
89
- organizationId,
90
- })
91
- } catch (e) {
92
- // A bookmarked org can go stale (instance deleted/recreated elsewhere).
93
- // On an org rejection, retry once with the router's view and let the
94
- // bookmark heal on the next `instance create`.
95
- if (
96
- bookmarkOrg &&
97
- !opts.organizationId &&
98
- opts.audience &&
99
- classifyRefreshFailure(e) === 'org-rejected'
100
- ) {
101
- const routerOrg = await (opts.resolveOrganizationId ?? fetchOrgHint)(opts.audience)
102
- if (routerOrg && routerOrg !== bookmarkOrg) {
103
- return await refreshSession(identityName, current, {
104
- audience: opts.audience,
105
- organizationId: routerOrg,
106
- })
107
- }
108
- }
109
- const rescued = await rescueAfterInvalidGrant(identityName, current, opts.audience, e)
110
- if (rescued) return rescued
111
- throw e
112
- }
113
- })
114
- }
115
-
116
- /**
117
- * Last-resort race recovery: an `invalid_grant` ("refresh token already
118
- * exchanged") can mean a non-locking process — an older CLI build, or a
119
- * stale-lock takeover window — won the exchange and saved the rotated
120
- * session. If the file changed since we read it and now serves the audience,
121
- * use it instead of declaring the session dead.
122
- */
123
- async function rescueAfterInvalidGrant(
124
- identityName: string,
125
- seen: IdpSession,
126
- audience: string | undefined,
127
- error: unknown,
128
- ): Promise<IdpSession | undefined> {
129
- if (!(error instanceof OAuthTokenError) || error.code !== 'invalid_grant') return undefined
130
- const latest = await readIdpSession(identityName).catch(() => null)
131
- if (!latest || latest.updatedAt === seen.updatedAt) return undefined
132
- if (!accessTokenForAudience(latest, audience)) return undefined
133
- return latest
134
- }