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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. package/README.md +14 -166
  2. package/package.json +10 -102
  3. package/.check-workspace.cjs +0 -40
  4. package/LICENSE +0 -202
  5. package/THIRD-PARTY-NOTICES.md +0 -27
  6. package/dist/astrale.js +0 -93172
  7. package/dist/public/connect-core.js +0 -29187
  8. package/dist/public/keys/index.js +0 -5651
  9. package/dist/public/paths/index.js +0 -4282
  10. package/dist/types/admin/instance/model.d.ts +0 -39
  11. package/dist/types/connect-core.d.ts +0 -22
  12. package/dist/types/connection/auth.d.ts +0 -36
  13. package/dist/types/errors.d.ts +0 -23
  14. package/dist/types/identity/registry.d.ts +0 -25
  15. package/dist/types/keys/algorithm.d.ts +0 -6
  16. package/dist/types/keys/credential.d.ts +0 -21
  17. package/dist/types/keys/index.d.ts +0 -4
  18. package/dist/types/keys/pair.d.ts +0 -34
  19. package/dist/types/lib/admin-target.d.ts +0 -78
  20. package/dist/types/lib/ca-fetch.d.ts +0 -2
  21. package/dist/types/lib/config.d.ts +0 -71
  22. package/dist/types/lib/failure-debug.d.ts +0 -1
  23. package/dist/types/lib/format.d.ts +0 -1
  24. package/dist/types/lib/idp-session.d.ts +0 -33
  25. package/dist/types/lib/idp.d.ts +0 -404
  26. package/dist/types/lib/instance-target.d.ts +0 -38
  27. package/dist/types/lib/instance.d.ts +0 -196
  28. package/dist/types/lib/invocation.d.ts +0 -3
  29. package/dist/types/lib/log.d.ts +0 -33
  30. package/dist/types/lib/login-flow.d.ts +0 -49
  31. package/dist/types/lib/meta.d.ts +0 -36
  32. package/dist/types/lib/output.d.ts +0 -87
  33. package/dist/types/lib/proc.d.ts +0 -43
  34. package/dist/types/lib/table.d.ts +0 -18
  35. package/dist/types/lib/update.d.ts +0 -131
  36. package/dist/types/lib/validation.d.ts +0 -11
  37. package/dist/types/paths/index.d.ts +0 -2
  38. package/dist/types/state/exchange-credentials.d.ts +0 -25
  39. package/dist/types/state/files.d.ts +0 -9
  40. package/dist/types/state/identities.d.ts +0 -42
  41. package/dist/types/state/index.d.ts +0 -8
  42. package/dist/types/state/paths.d.ts +0 -32
  43. package/src/__tests__/fixtures/publication.ts +0 -20
  44. package/src/admin/.spec/api.d.ts +0 -3
  45. package/src/admin/.spec/architecture.md +0 -15
  46. package/src/admin/.spec/icon.svg +0 -3
  47. package/src/admin/.spec/layout.ts +0 -6
  48. package/src/admin/__tests__/binding.test.ts +0 -31
  49. package/src/admin/__tests__/fixture.ts +0 -101
  50. package/src/admin/binding.ts +0 -98
  51. package/src/admin/catalog/.spec/api.d.ts +0 -65
  52. package/src/admin/catalog/.spec/architecture.md +0 -6
  53. package/src/admin/catalog/.spec/icon.svg +0 -3
  54. package/src/admin/catalog/.spec/layout.ts +0 -6
  55. package/src/admin/catalog/__tests__/client.test.ts +0 -142
  56. package/src/admin/catalog/client.ts +0 -218
  57. package/src/admin/catalog/index.ts +0 -13
  58. package/src/admin/catalog/model.ts +0 -41
  59. package/src/admin/catalog/tsconfig.json +0 -8
  60. package/src/admin/graph/.spec/api.d.ts +0 -22
  61. package/src/admin/graph/.spec/architecture.md +0 -5
  62. package/src/admin/graph/.spec/icon.svg +0 -3
  63. package/src/admin/graph/.spec/layout.ts +0 -3
  64. package/src/admin/graph/index.ts +0 -6
  65. package/src/admin/graph/nodes.ts +0 -56
  66. package/src/admin/index.ts +0 -2
  67. package/src/admin/instance/.spec/api.d.ts +0 -66
  68. package/src/admin/instance/.spec/architecture.md +0 -10
  69. package/src/admin/instance/.spec/icon.svg +0 -3
  70. package/src/admin/instance/.spec/layout.ts +0 -6
  71. package/src/admin/instance/__tests__/client.test.ts +0 -266
  72. package/src/admin/instance/client.ts +0 -290
  73. package/src/admin/instance/index.ts +0 -16
  74. package/src/admin/instance/model.ts +0 -66
  75. package/src/admin/instance/tsconfig.json +0 -8
  76. package/src/commands/__tests__/admin-instance.test.ts +0 -88
  77. package/src/commands/__tests__/auth-login.test.ts +0 -231
  78. package/src/commands/__tests__/auth-token.test.ts +0 -223
  79. package/src/commands/__tests__/call-describe.test.ts +0 -80
  80. package/src/commands/__tests__/call.test.ts +0 -29
  81. package/src/commands/__tests__/domain-install-operation.test.ts +0 -126
  82. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  83. package/src/commands/__tests__/domain-list.test.ts +0 -133
  84. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  85. package/src/commands/__tests__/install-direct.test.ts +0 -21
  86. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  87. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  88. package/src/commands/__tests__/instance-create-hosts.test.ts +0 -29
  89. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  90. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  91. package/src/commands/__tests__/instance-use.test.ts +0 -67
  92. package/src/commands/__tests__/introspect-parse.test.ts +0 -21
  93. package/src/commands/__tests__/logs.test.ts +0 -97
  94. package/src/commands/__tests__/read-commands.test.ts +0 -294
  95. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  96. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  97. package/src/commands/__tests__/token-ttl.test.ts +0 -21
  98. package/src/commands/__tests__/update.test.ts +0 -95
  99. package/src/commands/__tests__/view-build.test.ts +0 -58
  100. package/src/commands/__tests__/view.test.ts +0 -149
  101. package/src/commands/admin/status.ts +0 -61
  102. package/src/commands/admin/use.ts +0 -100
  103. package/src/commands/auth/login.ts +0 -82
  104. package/src/commands/auth/logout.ts +0 -52
  105. package/src/commands/auth/status.ts +0 -86
  106. package/src/commands/auth/token.ts +0 -174
  107. package/src/commands/browser.ts +0 -207
  108. package/src/commands/call-describe.ts +0 -123
  109. package/src/commands/call.ts +0 -205
  110. package/src/commands/domain/install.ts +0 -548
  111. package/src/commands/domain/list.ts +0 -155
  112. package/src/commands/domain/publish.ts +0 -133
  113. package/src/commands/domain/uninstall.ts +0 -128
  114. package/src/commands/get.ts +0 -69
  115. package/src/commands/identity/__tests__/register.test.ts +0 -93
  116. package/src/commands/identity/create.ts +0 -35
  117. package/src/commands/identity/delete.ts +0 -24
  118. package/src/commands/identity/export.ts +0 -46
  119. package/src/commands/identity/import.ts +0 -61
  120. package/src/commands/identity/list.ts +0 -56
  121. package/src/commands/identity/register.ts +0 -196
  122. package/src/commands/identity/sync.ts +0 -38
  123. package/src/commands/identity/unsync.ts +0 -34
  124. package/src/commands/identity/use.ts +0 -24
  125. package/src/commands/identity/whoami.ts +0 -34
  126. package/src/commands/idp/add.ts +0 -150
  127. package/src/commands/idp/list.ts +0 -57
  128. package/src/commands/idp/refresh.ts +0 -38
  129. package/src/commands/idp/remove.ts +0 -36
  130. package/src/commands/idp/show.ts +0 -29
  131. package/src/commands/instance/active.ts +0 -73
  132. package/src/commands/instance/bookmark.ts +0 -101
  133. package/src/commands/instance/create.ts +0 -69
  134. package/src/commands/instance/delete.ts +0 -68
  135. package/src/commands/instance/forget.ts +0 -26
  136. package/src/commands/instance/list.ts +0 -197
  137. package/src/commands/instance/status.ts +0 -38
  138. package/src/commands/instance/use.ts +0 -259
  139. package/src/commands/introspect.ts +0 -110
  140. package/src/commands/logs.ts +0 -283
  141. package/src/commands/mutate.ts +0 -122
  142. package/src/commands/query.ts +0 -136
  143. package/src/commands/session/analyze.ts +0 -50
  144. package/src/commands/session/list.ts +0 -36
  145. package/src/commands/setup.ts +0 -54
  146. package/src/commands/status.ts +0 -60
  147. package/src/commands/studio.ts +0 -434
  148. package/src/commands/token.ts +0 -107
  149. package/src/commands/update.ts +0 -334
  150. package/src/commands/use.ts +0 -86
  151. package/src/commands/view-serve.ts +0 -26
  152. package/src/commands/view.ts +0 -614
  153. package/src/connect-core.test.ts +0 -38
  154. package/src/connect-core.ts +0 -42
  155. package/src/connection/.spec/api.d.ts +0 -110
  156. package/src/connection/.spec/architecture.md +0 -47
  157. package/src/connection/.spec/capabilities/connection.ts +0 -13
  158. package/src/connection/.spec/examples/call.ts +0 -7
  159. package/src/connection/.spec/flows/command.ts +0 -20
  160. package/src/connection/.spec/flows/session.ts +0 -61
  161. package/src/connection/.spec/laws/connection.ts +0 -205
  162. package/src/connection/.spec/layout.ts +0 -21
  163. package/src/connection/__tests__/auth.test.ts +0 -128
  164. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  165. package/src/connection/__tests__/call.test.ts +0 -17
  166. package/src/connection/__tests__/credential.test.ts +0 -119
  167. package/src/connection/__tests__/errors.test.ts +0 -577
  168. package/src/connection/__tests__/exchange.test.ts +0 -295
  169. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  170. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  171. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  172. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  173. package/src/connection/__tests__/managed.test.ts +0 -39
  174. package/src/connection/__tests__/reasons.test.ts +0 -78
  175. package/src/connection/__tests__/self.test.ts +0 -71
  176. package/src/connection/__tests__/session.test.ts +0 -140
  177. package/src/connection/__tests__/target.test.ts +0 -93
  178. package/src/connection/auth.ts +0 -236
  179. package/src/connection/call.ts +0 -7
  180. package/src/connection/command.ts +0 -67
  181. package/src/connection/credential.ts +0 -117
  182. package/src/connection/errors.ts +0 -1
  183. package/src/connection/exchange.ts +0 -311
  184. package/src/connection/failure/classify.ts +0 -110
  185. package/src/connection/failure/index.ts +0 -18
  186. package/src/connection/failure/model.ts +0 -28
  187. package/src/connection/failure/render.ts +0 -116
  188. package/src/connection/index.ts +0 -8
  189. package/src/connection/reasons.ts +0 -209
  190. package/src/connection/self.ts +0 -138
  191. package/src/connection/session.ts +0 -185
  192. package/src/connection/target.ts +0 -112
  193. package/src/connection/tsconfig.json +0 -6
  194. package/src/errors.ts +0 -66
  195. package/src/graph/.spec/api.d.ts +0 -41
  196. package/src/graph/.spec/laws/documents.ts +0 -24
  197. package/src/graph/.spec/laws/projection.ts +0 -13
  198. package/src/graph/.spec/layout.ts +0 -14
  199. package/src/graph/__tests__/mutation.test.ts +0 -51
  200. package/src/graph/__tests__/projection.test.ts +0 -22
  201. package/src/graph/__tests__/query.test.ts +0 -173
  202. package/src/graph/class.ts +0 -30
  203. package/src/graph/index.ts +0 -4
  204. package/src/graph/mutation.ts +0 -46
  205. package/src/graph/projection.ts +0 -21
  206. package/src/graph/query.ts +0 -97
  207. package/src/graph/tsconfig.json +0 -6
  208. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  209. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  210. package/src/identity/.spec/api.d.ts +0 -124
  211. package/src/identity/.spec/architecture.md +0 -33
  212. package/src/identity/.spec/capabilities/identity.ts +0 -7
  213. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  214. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  215. package/src/identity/.spec/flows/import.ts +0 -29
  216. package/src/identity/.spec/laws/identity.ts +0 -56
  217. package/src/identity/.spec/layout.ts +0 -13
  218. package/src/identity/.spec/schemas/identity-export-v1.schema.json +0 -25
  219. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -53
  220. package/src/identity/__tests__/registration.test.ts +0 -64
  221. package/src/identity/__tests__/registry.test.ts +0 -70
  222. package/src/identity/__tests__/transfer.test.ts +0 -198
  223. package/src/identity/index.ts +0 -23
  224. package/src/identity/registration.ts +0 -72
  225. package/src/identity/registry.ts +0 -179
  226. package/src/identity/transfer.ts +0 -187
  227. package/src/identity/tsconfig.json +0 -6
  228. package/src/index.ts +0 -1
  229. package/src/keys/.spec/api.d.ts +0 -74
  230. package/src/keys/.spec/architecture.md +0 -13
  231. package/src/keys/.spec/laws/keys.ts +0 -43
  232. package/src/keys/.spec/layout.ts +0 -6
  233. package/src/keys/__tests__/algorithm.test.ts +0 -39
  234. package/src/keys/__tests__/keys.test.ts +0 -168
  235. package/src/keys/algorithm.ts +0 -33
  236. package/src/keys/credential.ts +0 -112
  237. package/src/keys/index.ts +0 -14
  238. package/src/keys/pair.ts +0 -219
  239. package/src/keys/tsconfig.json +0 -6
  240. package/src/lib/__tests__/admin-target.test.ts +0 -184
  241. package/src/lib/__tests__/binary.test.ts +0 -55
  242. package/src/lib/__tests__/command-dx.test.ts +0 -102
  243. package/src/lib/__tests__/concurrency.test.ts +0 -62
  244. package/src/lib/__tests__/config.test.ts +0 -54
  245. package/src/lib/__tests__/design.test.ts +0 -99
  246. package/src/lib/__tests__/domain-publication.test.ts +0 -133
  247. package/src/lib/__tests__/format.test.ts +0 -22
  248. package/src/lib/__tests__/idp-session.driver.ts +0 -53
  249. package/src/lib/__tests__/idp-session.test.ts +0 -379
  250. package/src/lib/__tests__/idp.test.ts +0 -415
  251. package/src/lib/__tests__/instance-candidates.test.ts +0 -148
  252. package/src/lib/__tests__/instance-target.test.ts +0 -212
  253. package/src/lib/__tests__/instance.test.ts +0 -192
  254. package/src/lib/__tests__/local-status.test.ts +0 -202
  255. package/src/lib/__tests__/log-errors.test.ts +0 -64
  256. package/src/lib/__tests__/log.test.ts +0 -31
  257. package/src/lib/__tests__/meta.test.ts +0 -55
  258. package/src/lib/__tests__/output.test.ts +0 -162
  259. package/src/lib/__tests__/panel.test.ts +0 -40
  260. package/src/lib/__tests__/port.test.ts +0 -44
  261. package/src/lib/__tests__/prompt.test.ts +0 -25
  262. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  263. package/src/lib/__tests__/self.test.ts +0 -50
  264. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  265. package/src/lib/__tests__/table.test.ts +0 -53
  266. package/src/lib/__tests__/update.test.ts +0 -351
  267. package/src/lib/__tests__/use-target.test.ts +0 -56
  268. package/src/lib/__tests__/validation.test.ts +0 -34
  269. package/src/lib/__tests__/view-assets.test.ts +0 -146
  270. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  271. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  272. package/src/lib/__tests__/view-server.test.ts +0 -68
  273. package/src/lib/__tests__/view-session.test.ts +0 -99
  274. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  275. package/src/lib/admin-domain.ts +0 -43
  276. package/src/lib/admin-instance.ts +0 -50
  277. package/src/lib/admin-target.ts +0 -290
  278. package/src/lib/binary.ts +0 -110
  279. package/src/lib/browser.ts +0 -150
  280. package/src/lib/ca-fetch.ts +0 -133
  281. package/src/lib/command-dx.ts +0 -188
  282. package/src/lib/concurrency.ts +0 -31
  283. package/src/lib/config.ts +0 -46
  284. package/src/lib/domain-publication.ts +0 -102
  285. package/src/lib/failure-debug.ts +0 -26
  286. package/src/lib/format.ts +0 -4
  287. package/src/lib/idp-session.ts +0 -134
  288. package/src/lib/idp.ts +0 -906
  289. package/src/lib/instance-candidates.ts +0 -49
  290. package/src/lib/instance-target.ts +0 -197
  291. package/src/lib/instance.ts +0 -463
  292. package/src/lib/invocation.ts +0 -11
  293. package/src/lib/local-status.ts +0 -152
  294. package/src/lib/log.ts +0 -143
  295. package/src/lib/login-flow.ts +0 -201
  296. package/src/lib/meta.ts +0 -90
  297. package/src/lib/output.ts +0 -238
  298. package/src/lib/panel.ts +0 -61
  299. package/src/lib/port.ts +0 -41
  300. package/src/lib/proc.ts +0 -82
  301. package/src/lib/prompt.ts +0 -136
  302. package/src/lib/provision-instance.ts +0 -162
  303. package/src/lib/sdk-deps.ts +0 -104
  304. package/src/lib/self.ts +0 -22
  305. package/src/lib/skills.ts +0 -171
  306. package/src/lib/table.ts +0 -62
  307. package/src/lib/update.ts +0 -409
  308. package/src/lib/use-target.ts +0 -24
  309. package/src/lib/validation.ts +0 -59
  310. package/src/lib/view/assets.ts +0 -78
  311. package/src/lib/view/open-intent.ts +0 -67
  312. package/src/lib/view/port-allocation.ts +0 -19
  313. package/src/lib/view/resolve.ts +0 -111
  314. package/src/lib/view/server.ts +0 -244
  315. package/src/lib/view/session.ts +0 -152
  316. package/src/lib/view/snapshot.ts +0 -101
  317. package/src/paths/.spec/api.d.ts +0 -13
  318. package/src/paths/.spec/architecture.md +0 -5
  319. package/src/paths/.spec/layout.ts +0 -3
  320. package/src/paths/index.ts +0 -13
  321. package/src/program/.spec/api.d.ts +0 -42
  322. package/src/program/.spec/architecture.md +0 -18
  323. package/src/program/.spec/laws/program.ts +0 -29
  324. package/src/program/.spec/layout.ts +0 -14
  325. package/src/program/__tests__/program.test.ts +0 -362
  326. package/src/program/build.ts +0 -183
  327. package/src/program/command.ts +0 -42
  328. package/src/program/index.ts +0 -2
  329. package/src/program/options.ts +0 -41
  330. package/src/program/registry.ts +0 -63
  331. package/src/program/tsconfig.json +0 -6
  332. package/src/setup/__tests__/instance-step.test.ts +0 -239
  333. package/src/setup/__tests__/util.test.ts +0 -29
  334. package/src/setup/engine.ts +0 -83
  335. package/src/setup/render.ts +0 -107
  336. package/src/setup/steps/admin.ts +0 -93
  337. package/src/setup/steps/agent-browser.ts +0 -81
  338. package/src/setup/steps/auth.ts +0 -54
  339. package/src/setup/steps/domain.ts +0 -68
  340. package/src/setup/steps/index.ts +0 -18
  341. package/src/setup/steps/instance.ts +0 -199
  342. package/src/setup/steps/skills-bridge.ts +0 -70
  343. package/src/setup/steps/skills.ts +0 -59
  344. package/src/setup/types.ts +0 -61
  345. package/src/setup/util.ts +0 -34
  346. package/src/state/.spec/api.d.ts +0 -133
  347. package/src/state/.spec/architecture.md +0 -31
  348. package/src/state/.spec/capabilities/state.ts +0 -7
  349. package/src/state/.spec/flows/identity-update.ts +0 -22
  350. package/src/state/.spec/laws/state.ts +0 -73
  351. package/src/state/.spec/layout.ts +0 -14
  352. package/src/state/__tests__/exchange-credentials.test.ts +0 -188
  353. package/src/state/__tests__/files.test.ts +0 -113
  354. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  355. package/src/state/__tests__/identities.test.ts +0 -142
  356. package/src/state/__tests__/paths.test.ts +0 -27
  357. package/src/state/exchange-credentials.ts +0 -219
  358. package/src/state/files.ts +0 -129
  359. package/src/state/identities.ts +0 -229
  360. package/src/state/index.ts +0 -29
  361. package/src/state/paths.ts +0 -61
  362. package/src/state/tsconfig.json +0 -6
  363. package/src/telemetry/__tests__/gate.test.ts +0 -63
  364. package/src/telemetry/__tests__/recorder.test.ts +0 -110
  365. package/src/telemetry/__tests__/redact.test.ts +0 -79
  366. package/src/telemetry/__tests__/session.test.ts +0 -166
  367. package/src/telemetry/__tests__/trigger.test.ts +0 -49
  368. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  369. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  370. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  371. package/src/telemetry/adapters/claude-code.ts +0 -90
  372. package/src/telemetry/adapters/codex.ts +0 -160
  373. package/src/telemetry/adapters/index.ts +0 -45
  374. package/src/telemetry/adapters/types.ts +0 -21
  375. package/src/telemetry/analyze.ts +0 -227
  376. package/src/telemetry/gate.ts +0 -79
  377. package/src/telemetry/recorder.ts +0 -57
  378. package/src/telemetry/redact.ts +0 -53
  379. package/src/telemetry/session.ts +0 -88
  380. package/src/telemetry/settings.ts +0 -26
  381. package/src/telemetry/store.ts +0 -91
  382. package/src/telemetry/trigger.ts +0 -119
  383. package/src/telemetry/types.ts +0 -64
  384. package/src/test-utils.ts +0 -18
  385. package/studio/client/dist/assets/elk-api-Di4OXGNH.js +0 -1
  386. package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
  387. package/studio/client/dist/assets/index-BLm6J11H.js +0 -81
  388. package/studio/client/dist/assets/index-BiGR8Oo9.css +0 -1
  389. package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
  390. package/studio/client/dist/assets/index-DTjvkOUX.js +0 -8
  391. package/studio/client/dist/index.html +0 -13
  392. package/studio/package.json +0 -65
  393. package/studio/server/agent/ask.test.ts +0 -74
  394. package/studio/server/agent/ask.ts +0 -71
  395. package/studio/server/agent/bridge/client.test.ts +0 -49
  396. package/studio/server/agent/bridge/client.ts +0 -37
  397. package/studio/server/agent/bridge/grant.test.ts +0 -62
  398. package/studio/server/agent/bridge/grant.ts +0 -84
  399. package/studio/server/agent/bridge/routes.test.ts +0 -151
  400. package/studio/server/agent/bridge/routes.ts +0 -148
  401. package/studio/server/agent/bridge/stdio.ts +0 -195
  402. package/studio/server/agent/conversation.test.ts +0 -89
  403. package/studio/server/agent/conversation.ts +0 -158
  404. package/studio/server/agent/harness/adapter.ts +0 -171
  405. package/studio/server/agent/harness/claude/adapter.test.ts +0 -348
  406. package/studio/server/agent/harness/claude/adapter.ts +0 -71
  407. package/studio/server/agent/harness/claude/ask.ts +0 -114
  408. package/studio/server/agent/harness/claude/capabilities.ts +0 -27
  409. package/studio/server/agent/harness/claude/command.ts +0 -63
  410. package/studio/server/agent/harness/claude/events.ts +0 -215
  411. package/studio/server/agent/harness/claude/loadout.ts +0 -132
  412. package/studio/server/agent/harness/claude/mcp.test.ts +0 -36
  413. package/studio/server/agent/harness/claude/mcp.ts +0 -41
  414. package/studio/server/agent/harness/claude/skills.ts +0 -43
  415. package/studio/server/agent/harness/codex/adapter.test.ts +0 -269
  416. package/studio/server/agent/harness/codex/adapter.ts +0 -116
  417. package/studio/server/agent/harness/codex/ask.test.ts +0 -176
  418. package/studio/server/agent/harness/codex/ask.ts +0 -181
  419. package/studio/server/agent/harness/codex/command.test.ts +0 -69
  420. package/studio/server/agent/harness/codex/command.ts +0 -43
  421. package/studio/server/agent/harness/codex/events.test.ts +0 -94
  422. package/studio/server/agent/harness/codex/events.ts +0 -132
  423. package/studio/server/agent/harness/codex/exec.ts +0 -113
  424. package/studio/server/agent/harness/codex/loadout.ts +0 -60
  425. package/studio/server/agent/harness/codex/mcp.test.ts +0 -32
  426. package/studio/server/agent/harness/codex/mcp.ts +0 -27
  427. package/studio/server/agent/harness/codex/models.test.ts +0 -167
  428. package/studio/server/agent/harness/codex/models.ts +0 -211
  429. package/studio/server/agent/harness/codex/skills.ts +0 -33
  430. package/studio/server/agent/harness/gateway/config.test.ts +0 -98
  431. package/studio/server/agent/harness/gateway/config.ts +0 -214
  432. package/studio/server/agent/harness/gateway/token.test.ts +0 -133
  433. package/studio/server/agent/harness/gateway/token.ts +0 -166
  434. package/studio/server/agent/harness/mock/adapter.ts +0 -190
  435. package/studio/server/agent/harness/mock/domain-edit.ts +0 -41
  436. package/studio/server/agent/harness/process.test.ts +0 -46
  437. package/studio/server/agent/harness/process.ts +0 -104
  438. package/studio/server/agent/harness/registry.ts +0 -37
  439. package/studio/server/agent/harness/selection.test.ts +0 -75
  440. package/studio/server/agent/harness/selection.ts +0 -85
  441. package/studio/server/agent/harness/skills.test.ts +0 -95
  442. package/studio/server/agent/harness/skills.ts +0 -100
  443. package/studio/server/agent/layout.test.ts +0 -95
  444. package/studio/server/agent/notify.ts +0 -12
  445. package/studio/server/agent/prompts/anchors.test.ts +0 -70
  446. package/studio/server/agent/prompts/anchors.ts +0 -153
  447. package/studio/server/agent/prompts/ask.ts +0 -34
  448. package/studio/server/agent/prompts/system.test.ts +0 -13
  449. package/studio/server/agent/prompts/system.ts +0 -99
  450. package/studio/server/agent/prompts/turn.ts +0 -66
  451. package/studio/server/agent/routes.test.ts +0 -176
  452. package/studio/server/agent/routes.ts +0 -214
  453. package/studio/server/agent/run/completion.ts +0 -193
  454. package/studio/server/agent/run/coordinator.test.ts +0 -337
  455. package/studio/server/agent/run/coordinator.ts +0 -104
  456. package/studio/server/agent/run/live-state.ts +0 -73
  457. package/studio/server/agent/run/preparation.ts +0 -163
  458. package/studio/server/agent/run/transcript.test.ts +0 -81
  459. package/studio/server/agent/run/transcript.ts +0 -196
  460. package/studio/server/agent/run/usage.test.ts +0 -70
  461. package/studio/server/agent/run/usage.ts +0 -62
  462. package/studio/server/agent/stream.ts +0 -37
  463. package/studio/server/agent/telemetry.ts +0 -13
  464. package/studio/server/api/canvas.ts +0 -43
  465. package/studio/server/api/comments.ts +0 -85
  466. package/studio/server/api/context.ts +0 -61
  467. package/studio/server/api/deployment.ts +0 -39
  468. package/studio/server/api/documents.ts +0 -55
  469. package/studio/server/api/domain.ts +0 -59
  470. package/studio/server/api/http.ts +0 -45
  471. package/studio/server/api/project.ts +0 -57
  472. package/studio/server/api/schema.ts +0 -12
  473. package/studio/server/api/views.ts +0 -57
  474. package/studio/server/api/workspace.ts +0 -60
  475. package/studio/server/api-agent-loadout.test.ts +0 -69
  476. package/studio/server/api.test.ts +0 -147
  477. package/studio/server/api.ts +0 -34
  478. package/studio/server/cache.test.ts +0 -122
  479. package/studio/server/cache.ts +0 -303
  480. package/studio/server/cli-consumers.test.ts +0 -494
  481. package/studio/server/cli.test.ts +0 -88
  482. package/studio/server/cli.ts +0 -240
  483. package/studio/server/client-package.test.ts +0 -147
  484. package/studio/server/client-package.ts +0 -266
  485. package/studio/server/detect.ts +0 -81
  486. package/studio/server/domain.test.ts +0 -77
  487. package/studio/server/domain.ts +0 -124
  488. package/studio/server/environment/dotenv-preview.test.ts +0 -39
  489. package/studio/server/environment/dotenv-preview.ts +0 -27
  490. package/studio/server/environment/files.test.ts +0 -53
  491. package/studio/server/environment/files.ts +0 -120
  492. package/studio/server/handoff/copy.ts +0 -171
  493. package/studio/server/handoff/service.test.ts +0 -22
  494. package/studio/server/handoff/service.ts +0 -62
  495. package/studio/server/index.ts +0 -148
  496. package/studio/server/instances/active.ts +0 -72
  497. package/studio/server/instances/deploy-record.test.ts +0 -31
  498. package/studio/server/instances/deploy-record.ts +0 -37
  499. package/studio/server/instances/deploy.ts +0 -56
  500. package/studio/server/instances/probe.test.ts +0 -67
  501. package/studio/server/instances/probe.ts +0 -67
  502. package/studio/server/instances/status.test.ts +0 -12
  503. package/studio/server/instances/status.ts +0 -49
  504. package/studio/server/introspect/anatomy/client-tree.ts +0 -57
  505. package/studio/server/introspect/anatomy/env-fields.ts +0 -66
  506. package/studio/server/introspect/anatomy/schema-definition.ts +0 -53
  507. package/studio/server/introspect/anatomy/source.ts +0 -181
  508. package/studio/server/introspect/anatomy/views/routes.ts +0 -114
  509. package/studio/server/introspect/anatomy/views.ts +0 -53
  510. package/studio/server/introspect/anatomy-extras.test.ts +0 -265
  511. package/studio/server/introspect/anatomy-extras.ts +0 -10
  512. package/studio/server/introspect/anatomy.test.ts +0 -41
  513. package/studio/server/introspect/anatomy.ts +0 -147
  514. package/studio/server/introspect/bundle.ts +0 -69
  515. package/studio/server/introspect/canonical-schema.test.ts +0 -179
  516. package/studio/server/introspect/canonical-schema.ts +0 -583
  517. package/studio/server/introspect/config-preview.test.ts +0 -32
  518. package/studio/server/introspect/config-preview.ts +0 -119
  519. package/studio/server/introspect/core-extractor.ts +0 -30
  520. package/studio/server/introspect/core.ts +0 -45
  521. package/studio/server/introspect/diff.test.ts +0 -124
  522. package/studio/server/introspect/diff.ts +0 -316
  523. package/studio/server/introspect/extractor.ts +0 -41
  524. package/studio/server/introspect/hash.ts +0 -24
  525. package/studio/server/introspect/overlay-tsmorph.test.ts +0 -146
  526. package/studio/server/introspect/overlay-tsmorph.ts +0 -9
  527. package/studio/server/introspect/overlay.test.ts +0 -44
  528. package/studio/server/introspect/overlay.ts +0 -40
  529. package/studio/server/introspect/revision.test.ts +0 -54
  530. package/studio/server/introspect/revision.ts +0 -49
  531. package/studio/server/introspect/runtime.test.ts +0 -157
  532. package/studio/server/introspect/runtime.ts +0 -140
  533. package/studio/server/introspect/schema-ir-json.test.ts +0 -70
  534. package/studio/server/introspect/schema-ir-json.ts +0 -151
  535. package/studio/server/introspect/schema-refs.test.ts +0 -55
  536. package/studio/server/introspect/schema-refs.ts +0 -32
  537. package/studio/server/introspect/source-overlay/annotations.ts +0 -14
  538. package/studio/server/introspect/source-overlay/handlers.ts +0 -161
  539. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -46
  540. package/studio/server/introspect/source-overlay/project.ts +0 -248
  541. package/studio/server/introspect/source-overlay/spans.ts +0 -330
  542. package/studio/server/json.ts +0 -46
  543. package/studio/server/lifecycle.ts +0 -42
  544. package/studio/server/sse.test.ts +0 -26
  545. package/studio/server/sse.ts +0 -60
  546. package/studio/server/state/baseline.test.ts +0 -267
  547. package/studio/server/state/baseline.ts +0 -354
  548. package/studio/server/state/comments.test.ts +0 -94
  549. package/studio/server/state/comments.ts +0 -484
  550. package/studio/server/state/context.ts +0 -199
  551. package/studio/server/state/documents.ts +0 -111
  552. package/studio/server/state/integrations.ts +0 -81
  553. package/studio/server/state/layout.test.ts +0 -34
  554. package/studio/server/state/layout.ts +0 -82
  555. package/studio/server/state/settings.test.ts +0 -78
  556. package/studio/server/state/settings.ts +0 -73
  557. package/studio/server/state/store.test.ts +0 -122
  558. package/studio/server/state/store.ts +0 -146
  559. package/studio/server/state/visibility.ts +0 -48
  560. package/studio/server/views/model.test.ts +0 -57
  561. package/studio/server/views/model.ts +0 -66
  562. package/studio/server/views/runtime.ts +0 -40
  563. package/studio/server/views/selection-repository.test.ts +0 -31
  564. package/studio/server/views/selection-repository.ts +0 -60
  565. package/studio/server/views/session.test.ts +0 -73
  566. package/studio/server/views/session.ts +0 -166
  567. package/studio/server/views/target.test.ts +0 -78
  568. package/studio/server/views/target.ts +0 -222
  569. package/studio/server/watch.test.ts +0 -36
  570. package/studio/server/watch.ts +0 -93
  571. package/studio/server/workspace/catalog.test.ts +0 -17
  572. package/studio/server/workspace/catalog.ts +0 -43
  573. package/studio/server/workspace/create.test.ts +0 -37
  574. package/studio/server/workspace/create.ts +0 -162
  575. package/studio/server/workspace/git.ts +0 -75
  576. package/studio/server/workspace/updates.ts +0 -83
  577. package/studio/server/workspace-state.ts +0 -26
  578. package/studio/server/workspace-watch.ts +0 -106
  579. package/studio/shared/agent-effort.test.ts +0 -12
  580. package/studio/shared/agent-effort.ts +0 -15
  581. package/studio/shared/agent-models.test.ts +0 -9
  582. package/studio/shared/agent-models.ts +0 -14
  583. package/studio/shared/contracts/README.md +0 -16
  584. package/studio/shared/contracts/agent.ts +0 -270
  585. package/studio/shared/contracts/runtime.ts +0 -50
  586. package/studio/shared/contracts/schema.ts +0 -393
  587. package/studio/shared/contracts/surface.test.ts +0 -317
  588. package/studio/shared/contracts/workspace.ts +0 -265
  589. package/studio/shared/layout.test.ts +0 -116
  590. package/studio/shared/schema/identity.test.ts +0 -34
  591. package/studio/shared/schema/identity.ts +0 -68
  592. package/studio/shared/settings-values.test.ts +0 -18
  593. package/studio/shared/settings-values.ts +0 -20
  594. package/studio/shared/types.ts +0 -14
  595. package/studio/tsconfig.json +0 -23
  596. package/tsconfig.json +0 -14
  597. package/viewer/dist/index.html +0 -93
  598. package/viewer/dist/main.js +0 -76
  599. package/viewer/tsconfig.json +0 -13
@@ -1,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,188 +0,0 @@
1
- import type { Command, CommanderError } from 'commander'
2
-
3
- import chalk from 'chalk'
4
-
5
- import { isMachine } from './output'
6
-
7
- export type CommandCatalogEntry = {
8
- path: string[]
9
- usage: string
10
- }
11
-
12
- export function collectCommandCatalog(program: Command): CommandCatalogEntry[] {
13
- const out: CommandCatalogEntry[] = []
14
-
15
- function walk(command: Command, path: string[]): void {
16
- for (const child of command.commands) {
17
- const childPath = [...path, child.name()]
18
- if (child.commands.length === 0) {
19
- out.push({ path: childPath, usage: usageFor(childPath, child) })
20
- }
21
- walk(child, childPath)
22
- }
23
- }
24
-
25
- walk(program, [])
26
- return out
27
- }
28
-
29
- export function renderCommanderError(
30
- program: Command,
31
- error: CommanderError,
32
- argv = process.argv.slice(2),
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))
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
- )
52
- }
53
-
54
- if (error.code === 'commander.excessArguments') {
55
- const usage = usageFor(matched.path, matched.command)
56
- const extra = tokens.slice(matched.path.length).join(' ')
57
- return maybeMachine(
58
- [
59
- `Unexpected argument${extra.includes(' ') ? 's' : ''} for ${chalk.bold(
60
- `astrale ${matched.path.join(' ')}`,
61
- )}${extra ? `: ${extra}` : ''}`,
62
- '',
63
- 'Usage:',
64
- ` astrale ${usage}`,
65
- ].join('\n'),
66
- )
67
- }
68
-
69
- const suggestions = nearestCommands(tokens.join(' '), catalog)
70
- return maybeMachine(
71
- [
72
- error.message,
73
- ...(suggestions.length > 0
74
- ? ['', 'Did you mean:', ...suggestions.map((s) => ` astrale ${s}`)]
75
- : []),
76
- ].join('\n'),
77
- )
78
- }
79
-
80
- const RETIRED_COMMANDS: Record<string, string> = {
81
- ls: 'astrale query <source> --edge <class>',
82
- describe: 'astrale get <target>',
83
- }
84
-
85
- function renderUnknownCommand(tokens: string[], catalog: CommandCatalogEntry[]): string {
86
- const command = tokens.join(' ')
87
- const first = tokens[0]
88
- const retired = first === undefined ? undefined : RETIRED_COMMANDS[first]
89
- if (retired !== undefined) {
90
- return [
91
- `Unknown command: ${chalk.bold(`astrale ${command}`)}`,
92
- '',
93
- `\`astrale ${first}\` was removed. Use ${chalk.bold(retired)} instead.`,
94
- ].join('\n')
95
- }
96
- const namespaceMatches = catalog.filter((entry) => entry.path.at(-1) === first)
97
- if (namespaceMatches.length > 0) {
98
- return [
99
- `Unknown command: ${chalk.bold(`astrale ${command}`)}`,
100
- '',
101
- `"${first}" is available under:`,
102
- ...namespaceMatches.map((entry) => ` astrale ${entry.usage}`),
103
- ].join('\n')
104
- }
105
-
106
- const suggestions = nearestCommands(command, catalog)
107
- return [
108
- `Unknown command: ${chalk.bold(`astrale ${command}`)}`,
109
- ...(suggestions.length > 0
110
- ? ['', 'Did you mean:', ...suggestions.map((s) => ` astrale ${s}`)]
111
- : []),
112
- ].join('\n')
113
- }
114
-
115
- function matchRegisteredPrefix(
116
- program: Command,
117
- tokens: string[],
118
- ): { command: Command; path: string[] } {
119
- let current = program
120
- const path: string[] = []
121
- for (const token of tokens) {
122
- const next = current.commands.find(
123
- (cmd) => cmd.name() === token || cmd.aliases().includes(token),
124
- )
125
- if (!next) break
126
- current = next
127
- path.push(current.name())
128
- }
129
- return { command: current, path }
130
- }
131
-
132
- function usageFor(path: string[], command: Command): string {
133
- const suffix = command
134
- .usage()
135
- .replace(/\[options\]\s*/g, '')
136
- .replace(/\s+/g, ' ')
137
- .trim()
138
- return [path.join(' '), suffix].filter(Boolean).join(' ')
139
- }
140
-
141
- const ANSI_RE = new RegExp(String.fromCharCode(27) + '\\[[0-9;]*m', 'g')
142
-
143
- function maybeMachine(text: string): string {
144
- if (!isMachine()) return text
145
- const plain = text.replace(ANSI_RE, '')
146
- const first = plain.split('\n').find((line) => line.trim().length > 0) ?? plain
147
- return JSON.stringify({ error: 'USAGE_ERROR', message: first, detail: plain })
148
- }
149
-
150
- function stripOptions(argv: string[]): string[] {
151
- const out: string[] = []
152
- for (const token of argv) {
153
- if (token === '--') break
154
- if (token.startsWith('-')) continue
155
- out.push(token)
156
- }
157
- return out
158
- }
159
-
160
- function nearestCommands(input: string, catalog: CommandCatalogEntry[]): string[] {
161
- if (!input) return []
162
- return catalog
163
- .map((entry) => ({ usage: entry.usage, score: similarity(input, entry.path.join(' ')) }))
164
- .filter((entry) => entry.score >= 0.45)
165
- .sort((a, b) => b.score - a.score || a.usage.localeCompare(b.usage))
166
- .slice(0, 3)
167
- .map((entry) => entry.usage)
168
- }
169
-
170
- function similarity(a: string, b: string): number {
171
- const max = Math.max(a.length, b.length)
172
- if (max === 0) return 1
173
- return 1 - levenshtein(a, b) / max
174
- }
175
-
176
- function levenshtein(a: string, b: string): number {
177
- const prev = Array.from({ length: b.length + 1 }, (_, i) => i)
178
- const curr = Array.from({ length: b.length + 1 }, () => 0)
179
- for (let i = 1; i <= a.length; i += 1) {
180
- curr[0] = i
181
- for (let j = 1; j <= b.length; j += 1) {
182
- const cost = a[i - 1] === b[j - 1] ? 0 : 1
183
- curr[j] = Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost)
184
- }
185
- prev.splice(0, prev.length, ...curr)
186
- }
187
- return prev[b.length] ?? 0
188
- }
@@ -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,102 +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 root = deploymentRoot(input)
13
- const url = new URL(publication.PATH, root)
14
- const response = await fetchImpl(url, {
15
- redirect: 'error',
16
- ...(signal === undefined ? {} : { signal }),
17
- })
18
- if (!response.ok) {
19
- await cancel(response.body)
20
- throw new Error(`GET ${url.href} → ${response.status}`)
21
- }
22
- const bytes = await readBounded(response, url)
23
- try {
24
- const source = new TextDecoder('utf-8', { fatal: true }).decode(bytes)
25
- return publication.accept(JSON.parse(source) as unknown)
26
- } catch (cause) {
27
- throw new Error(`GET ${url.href} returned an invalid Domain Publication`, { cause })
28
- }
29
- }
30
-
31
- async function readBounded(response: Response, url: URL): Promise<Uint8Array> {
32
- const declared = response.headers.get('content-length')
33
- if (
34
- declared !== null &&
35
- (!/^\d+$/u.test(declared) ||
36
- !Number.isSafeInteger(Number(declared)) ||
37
- Number(declared) > MAXIMUM_PUBLICATION_BYTES)
38
- ) {
39
- await cancel(response.body)
40
- throw sizeError(url)
41
- }
42
- if (response.body === null) return new Uint8Array()
43
-
44
- const reader = response.body.getReader()
45
- const chunks: Uint8Array[] = []
46
- let size = 0
47
- let complete = false
48
- try {
49
- for (;;) {
50
- const next = await reader.read()
51
- if (next.done) {
52
- complete = true
53
- break
54
- }
55
- if (next.value.byteLength === 0) continue
56
- if (next.value.byteLength > MAXIMUM_PUBLICATION_BYTES - size) {
57
- throw sizeError(url)
58
- }
59
- chunks.push(next.value)
60
- size += next.value.byteLength
61
- }
62
- } finally {
63
- if (!complete) await reader.cancel().catch(() => undefined)
64
- reader.releaseLock()
65
- }
66
-
67
- const bytes = new Uint8Array(size)
68
- let offset = 0
69
- for (const chunk of chunks) {
70
- bytes.set(chunk, offset)
71
- offset += chunk.byteLength
72
- }
73
- return bytes
74
- }
75
-
76
- function sizeError(url: URL): Error {
77
- return new Error(`GET ${url.href} exceeded ${MAXIMUM_PUBLICATION_BYTES} bytes`)
78
- }
79
-
80
- async function cancel(body: ReadableStream<Uint8Array> | null): Promise<void> {
81
- if (body !== null) await body.cancel().catch(() => undefined)
82
- }
83
-
84
- function deploymentRoot(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
- !['', '/'].includes(url.pathname)
98
- ) {
99
- throw new TypeError(`Domain deployment URL must be an HTTP(S) origin: ${input}`)
100
- }
101
- return new URL(url.origin)
102
- }
@@ -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
- }