@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,614 +0,0 @@
1
- import type { ResolvedView } from '@astrale-os/shell'
2
-
3
- import chalk from 'chalk'
4
- import { randomBytes } from 'node:crypto'
5
- import { closeSync, existsSync, statSync } from 'node:fs'
6
- import { readdir, readFile } from 'node:fs/promises'
7
- import { dirname, join } from 'node:path'
8
-
9
- import type { KernelCommandOpts } from '../connection'
10
- import type { ViewServeConfig, ViewSessionRecord } from '../lib/view/session'
11
- import type { CommandDefinition } from '../program/index'
12
-
13
- import { expandSelfInPath, withClientSession } from '../connection'
14
- import { AstraleError } from '../errors'
15
- import { readIdentities } from '../identity/index'
16
- import { ab, AGENT_BROWSER_REPO, BROWSER_DIR, findAgentBrowser } from '../lib/browser'
17
- import { readInstances } from '../lib/instance'
18
- import { fatal, log } from '../lib/log'
19
- import { isMachine, output, type RawOutputOpts } from '../lib/output'
20
- import { findFreePort } from '../lib/port'
21
- import { run, spawnHandle } from '../lib/proc'
22
- import { withViewPortAllocationLock } from '../lib/view/port-allocation'
23
- import {
24
- candidateSlug,
25
- parseViewSpec,
26
- pickCandidate,
27
- resolveViewCandidates,
28
- selectedView,
29
- type ViewCandidate,
30
- viewOwnerTarget,
31
- } from '../lib/view/resolve'
32
- import { ensureViewerAssets } from '../lib/view/server'
33
- import {
34
- closeSession,
35
- configPath,
36
- listSessions,
37
- logPath,
38
- openSessionLog,
39
- saveRecord,
40
- saveServeConfig,
41
- } from '../lib/view/session'
42
- import { snapshotText, waitForSettledSnapshot } from '../lib/view/snapshot'
43
-
44
- /**
45
- * `astrale view` — open ONE view in an emulated host shell, authenticated as
46
- * the CLI identity, driveable by agent-browser (default) or a real browser.
47
- * Design + protocol details: VIEW_CLI_SPEC.md at the workspace root.
48
- */
49
-
50
- type ViewOpts = KernelCommandOpts &
51
- RawOutputOpts & {
52
- target?: string
53
- view?: string
54
- list?: boolean
55
- viewUrl?: string
56
- handshake?: 'shell' | 'none'
57
- headed?: boolean
58
- browser?: boolean
59
- open?: boolean
60
- snapshot?: boolean
61
- screenshot?: string
62
- sessions?: boolean
63
- close?: string | boolean
64
- all?: boolean
65
- }
66
-
67
- const VIEW_PORT_BASE = 4419
68
- const VIEW_PORT_SPAN = 20
69
- const IDLE_MS = 30 * 60_000
70
- const READY_TIMEOUT_MS = 8000
71
- const STATE_TIMEOUT_MS = 25_000
72
- const POLL_MS = 250
73
- /** Dedicated agent-browser profile for view sessions (no cookies involved). */
74
- const VIEW_PROFILE = `${BROWSER_DIR}/_view`
75
-
76
- const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
77
-
78
- export async function resolveSession(
79
- spec: string,
80
- opts: ViewOpts,
81
- ): Promise<{ view?: ResolvedView; candidates: ViewCandidate[] }> {
82
- rejectUnrepresentableOverrides(opts)
83
- const parsed = parseViewSpec(spec)
84
- if (parsed.kind === 'target' && opts.target) {
85
- fatal(new Error('Pass the target either as the positional or as --target, not both'))
86
- }
87
- if (parsed.kind === 'view' && opts.view) {
88
- fatal(new Error('An explicit ViewPath cannot be combined with --view <slug>'))
89
- }
90
- const targetInput =
91
- parsed.kind === 'target' ? parsed.path : (opts.target ?? viewOwnerTarget(parsed.path))
92
- const { target, candidates } = await withClientSession(opts, async (context) => {
93
- const { path: target } = await expandSelfInPath(targetInput, context)
94
- return { target, candidates: await resolveViewCandidates(context, target) }
95
- })
96
-
97
- if (opts.list) {
98
- return { candidates }
99
- }
100
- const selector = parsed.kind === 'view' ? parsed.path : opts.view
101
- const picked = await chooseCandidate(candidates, target, selector, opts)
102
- return {
103
- view: selectedView(picked),
104
- candidates,
105
- }
106
- }
107
-
108
- /**
109
- * Retain the frozen command flags while failing closed: neither legacy flag
110
- * has a truthful representation in V2's verified View placement contract.
111
- */
112
- export function rejectUnrepresentableOverrides(
113
- opts: Pick<ViewOpts, 'handshake' | 'viewUrl'>,
114
- ): void {
115
- if (opts.viewUrl === undefined && opts.handshake === undefined) return
116
- throw new AstraleError(
117
- 'UNSUPPORTED_VIEW_OVERRIDE',
118
- '--view-url and --handshake cannot override a V2 View: the Shell mounts one verified View placement with complete provenance.',
119
- 'Pass a ViewPath or target and use the placement published by its Domain.',
120
- )
121
- }
122
-
123
- async function chooseCandidate(
124
- candidates: ViewCandidate[],
125
- anchor: string,
126
- selector: string | undefined,
127
- opts: ViewOpts,
128
- ): Promise<ViewCandidate> {
129
- const picked = pickCandidate(candidates, anchor, selector)
130
- if (picked !== 'ambiguous') return picked
131
- if (process.stdin.isTTY && !isMachine(opts)) {
132
- const { select } = await import('@inquirer/prompts')
133
- return select({
134
- message: `${anchor} has ${candidates.length} views — open which?`,
135
- choices: candidates.map((c) => ({
136
- name: `${candidateSlug(c)} ${chalk.dim(c.url)}`,
137
- value: c,
138
- })),
139
- })
140
- }
141
- throw new AstraleError(
142
- 'AMBIGUOUS_VIEW',
143
- `${anchor} resolves ${candidates.length} views — pick one with --view <slug>: ${candidates.map(candidateSlug).join(', ')}`,
144
- )
145
- }
146
-
147
- /**
148
- * The session server must run under NODE when possible: an orphaned Bun
149
- * process on macOS cannot open TLS sockets at all (its TLS init needs the
150
- * user session's trust services), so token mints and the kernel proxy would
151
- * die once the CLI exits. The published CLI entry is node-runnable; a dev
152
- * checkout builds `dist/astrale.js` on demand (Bun is present there).
153
- */
154
- async function resolveServeRuntime(): Promise<{ file: string; args: string[] }> {
155
- const entry = process.argv[1]
156
- const node = await findOnPath('node')
157
- if (node && entry?.endsWith('.js') && existsSync(entry)) return { file: node, args: [entry] }
158
- if (node && entry?.endsWith('.ts')) {
159
- const dist = join(dirname(entry), '..', 'dist', 'astrale.js')
160
- await ensureDevDist(entry, dist)
161
- if (existsSync(dist)) return { file: node, args: [dist] }
162
- }
163
- return { file: process.execPath, args: entry && existsSync(entry) ? [entry] : [] }
164
- }
165
-
166
- async function findOnPath(name: string): Promise<string | null> {
167
- const lookup =
168
- process.platform === 'win32' ? run('where', [name]) : run('sh', ['-c', `command -v ${name}`])
169
- const res = await lookup.catch(() => null)
170
- if (!res || res.code !== 0) return null
171
- return res.stdout.split(/\r?\n/)[0]?.trim() || null
172
- }
173
-
174
- /** Dev checkout: (re)build the node-runnable CLI bundle when missing or stale. */
175
- async function ensureDevDist(entry: string, dist: string): Promise<void> {
176
- if (!(await devDistIsStale(entry, dist))) return
177
- const projectDir = join(dirname(entry), '..')
178
- const buildScript = join(projectDir, 'scripts', 'build.ts')
179
- const bun = await findOnPath('bun')
180
- if (!bun || !existsSync(buildScript)) return
181
-
182
- // Build output goes to stderr so --json stdout remains valid.
183
- console.error('(dev) dist/astrale.js is stale — running the official CLI build…')
184
- const built = await run(bun, [buildScript], { cwd: projectDir })
185
- if (built.stdout) process.stderr.write(built.stdout)
186
- if (built.stderr) process.stderr.write(built.stderr)
187
- if (built.code !== 0) throw new Error(`Official CLI build failed with exit code ${built.code}.`)
188
- }
189
-
190
- export async function devDistIsStale(entry: string, dist: string): Promise<boolean> {
191
- if (!existsSync(dist)) return true
192
- const projectDir = join(dirname(entry), '..')
193
- const builtAt = statSync(dist).mtimeMs
194
- const directories = [join(projectDir, 'src'), join(projectDir, 'bin'), join(projectDir, 'vendor')]
195
- const files = [
196
- join(projectDir, 'scripts', 'build.ts'),
197
- join(projectDir, 'package.json'),
198
- join(projectDir, 'pnpm-lock.yaml'),
199
- ]
200
- for (const directory of directories) {
201
- if (existsSync(directory) && (await newerThan(directory, builtAt))) return true
202
- }
203
- return files.some((file) => existsSync(file) && statSync(file).mtimeMs > builtAt)
204
- }
205
-
206
- async function newerThan(dir: string, mtimeMs: number): Promise<boolean> {
207
- const entries = await readdir(dir, { withFileTypes: true, recursive: true })
208
- for (const item of entries) {
209
- if (!item.isFile()) continue
210
- if (statSync(join(item.parentPath, item.name)).mtimeMs > mtimeMs) return true
211
- }
212
- return false
213
- }
214
-
215
- /** Spawn the detached session server (the CLI re-invoking itself) and wait for it. */
216
- async function startSession(view: ResolvedView, opts: ViewOpts): Promise<ViewSessionRecord> {
217
- await ensureViewerAssets()
218
- const kernelTarget = await withClientSession(
219
- opts,
220
- async ({ target: connectionTarget }) => connectionTarget,
221
- )
222
- const [instances, identities, runtime] = await Promise.all([
223
- readInstances(),
224
- readIdentities(),
225
- resolveServeRuntime(),
226
- ])
227
- return withViewPortAllocationLock(() =>
228
- startSessionLocked(view, opts, kernelTarget, instances.active, identities.default, runtime),
229
- )
230
- }
231
-
232
- /**
233
- * Called under the cross-process port-allocation lock. Keep the lock until the
234
- * detached child answers its readiness probe: only then is the selected port
235
- * durably owned and safe for the next CLI process to scan.
236
- */
237
- async function startSessionLocked(
238
- view: ResolvedView,
239
- opts: ViewOpts,
240
- kernelTarget: { url: string; kernelIssuer: string; caFile?: string },
241
- activeInstance: string | undefined,
242
- defaultIdentity: string | undefined,
243
- runtime: { file: string; args: string[] },
244
- ): Promise<ViewSessionRecord> {
245
- const port = await findFreePort(VIEW_PORT_BASE, VIEW_PORT_SPAN)
246
- if (port === null) {
247
- throw new Error(
248
- `No free port in ${VIEW_PORT_BASE}-${VIEW_PORT_BASE + VIEW_PORT_SPAN - 1} — close sessions with \`astrale view --close --all\``,
249
- )
250
- }
251
-
252
- const id = `v-${randomBytes(3).toString('hex')}`
253
- const nonce = randomBytes(12).toString('hex')
254
- const record: ViewSessionRecord = {
255
- id,
256
- pid: 0,
257
- port,
258
- nonce,
259
- pageUrl: `http://127.0.0.1:${port}/s/${nonce}/`,
260
- view,
261
- instance: opts.instance ?? (opts.url ? opts.url : activeInstance),
262
- identity: opts.creds ? '(pre-signed creds)' : (opts.as ?? defaultIdentity),
263
- createdAt: new Date().toISOString(),
264
- }
265
- const serveConfig: ViewServeConfig = {
266
- session: record,
267
- kernel: {
268
- url: opts.url,
269
- instance: opts.instance,
270
- as: opts.as,
271
- creds: opts.creds,
272
- timeout: opts.timeout,
273
- },
274
- proxy: {
275
- kernelUrl: kernelTarget.url,
276
- issuer: kernelTarget.kernelIssuer,
277
- caFile: kernelTarget.caFile,
278
- direct: isPublicHttps(kernelTarget.url) && !kernelTarget.caFile,
279
- },
280
- idleMs: IDLE_MS,
281
- }
282
-
283
- await saveServeConfig(serveConfig)
284
- const logFd = await openSessionLog(id)
285
- const child = spawnHandle(
286
- runtime.file,
287
- [...runtime.args, '__view-serve', '--config', configPath(id)],
288
- {
289
- detached: true,
290
- stdio: ['ignore', logFd, logFd],
291
- },
292
- )
293
- child.unref()
294
- closeSync(logFd)
295
- if (!child.pid) throw new Error('Failed to spawn the view session server')
296
- const live = { ...record, pid: child.pid }
297
- await saveRecord(live)
298
-
299
- const deadline = Date.now() + READY_TIMEOUT_MS
300
- while (Date.now() < deadline) {
301
- try {
302
- const res = await fetch(`${live.pageUrl}state`)
303
- if (res.ok) return live
304
- } catch {
305
- // not up yet
306
- }
307
- if (child.exitCode !== null) break
308
- await sleep(POLL_MS)
309
- }
310
- const tail = await readFile(logPath(id), 'utf8').catch(() => '')
311
- await closeSession(live)
312
- throw new Error(
313
- `View session server did not come up.${tail ? `\n--- server log ---\n${tail.slice(-2000)}` : ''}`,
314
- )
315
- }
316
-
317
- type PageState = { state: string; error?: string }
318
-
319
- async function waitForPageState(record: ViewSessionRecord): Promise<PageState> {
320
- const deadline = Date.now() + STATE_TIMEOUT_MS
321
- let last: PageState = { state: 'waiting' }
322
- while (Date.now() < deadline) {
323
- try {
324
- last = (await (await fetch(`${record.pageUrl}state`)).json()) as PageState
325
- if (last.state === 'connected' || last.state === 'plain' || last.state === 'failed') {
326
- return last
327
- }
328
- } catch {
329
- // transient
330
- }
331
- await sleep(POLL_MS)
332
- }
333
- return last
334
- }
335
-
336
- /**
337
- * Public https kernels are dialed directly by the view iframe (the router
338
- * serves CORS; Chrome's local-network-access rules forbid a public view
339
- * origin fetching our loopback proxy). Local/self-signed kernels go through
340
- * the proxy.
341
- */
342
- function isPublicHttps(url: string): boolean {
343
- try {
344
- const parsed = new URL(url)
345
- return (
346
- parsed.protocol === 'https:' &&
347
- !['localhost', '127.0.0.1', '::1', 'host.docker.internal'].includes(parsed.hostname)
348
- )
349
- } catch {
350
- return false
351
- }
352
- }
353
-
354
- function openSystemBrowser(url: string): void {
355
- const argv =
356
- process.platform === 'darwin'
357
- ? ['open', url]
358
- : process.platform === 'win32'
359
- ? ['cmd', '/c', 'start', '', url]
360
- : ['xdg-open', url]
361
- void run(argv[0], argv.slice(1)).catch(() => {})
362
- }
363
-
364
- function driveHint(headed: boolean): string {
365
- return `agent-browser --profile ${VIEW_PROFILE}${headed ? ' --headed' : ''}`
366
- }
367
-
368
- function describeState(state: PageState): string {
369
- switch (state.state) {
370
- case 'connected':
371
- return 'connected (shell handshake, kernel calls live)'
372
- case 'plain':
373
- return 'mounted (plain iframe, no shell handshake)'
374
- case 'failed':
375
- return `failed — ${state.error ?? 'unknown error'}`
376
- case 'mounting':
377
- return 'still mounting (check again with a snapshot)'
378
- default:
379
- return 'page not loaded yet'
380
- }
381
- }
382
-
383
- async function reportOpened(
384
- record: ViewSessionRecord,
385
- state: PageState | null,
386
- mode: 'agent' | 'system' | 'none',
387
- opts: ViewOpts,
388
- ): Promise<void> {
389
- if (isMachine(opts)) {
390
- output(
391
- {
392
- session: record,
393
- state: state?.state ?? 'unopened',
394
- error: state?.error,
395
- driver: mode === 'agent' ? { profile: VIEW_PROFILE, headed: !!opts.headed } : mode,
396
- },
397
- opts,
398
- )
399
- return
400
- }
401
- const label = `/:${record.view.route.key}`
402
- log.success(`View session ${chalk.bold(record.id)} — ${chalk.bold(label)}`)
403
- log.dim(` target ${record.view.target}`)
404
- log.dim(
405
- ` identity ${record.identity ?? '(default)'} instance ${record.instance ?? '(active)'}`,
406
- )
407
- log.dim(` page ${record.pageUrl}`)
408
- if (state) log.dim(` state ${describeState(state)}`)
409
- console.log('')
410
- if (mode === 'agent') {
411
- console.log(chalk.bold('Drive it:'))
412
- console.log(` ${driveHint(!!opts.headed)} snapshot`)
413
- console.log(` ${driveHint(!!opts.headed)} click @e3`)
414
- } else if (mode === 'none') {
415
- console.log(chalk.bold('Open it:'))
416
- console.log(` ${record.pageUrl}`)
417
- }
418
- console.log(`${chalk.bold('Close:')} astrale view --close ${record.id}`)
419
- }
420
-
421
- export async function runSnapshotExtras(
422
- opts: Pick<ViewOpts, 'headed' | 'screenshot' | 'snapshot'>,
423
- ): Promise<void> {
424
- const target = { profile: VIEW_PROFILE, headed: !!opts.headed }
425
- const settled =
426
- opts.screenshot || opts.snapshot
427
- ? await waitForSettledSnapshot(() => ab(['snapshot'], target))
428
- : null
429
-
430
- if (opts.screenshot) {
431
- const shot = await ab(['screenshot', opts.screenshot], target)
432
- if (!shot.ok) log.warn(`screenshot failed: ${shot.error ?? 'unknown error'}`)
433
- else log.dim(` screenshot → ${opts.screenshot}`)
434
- }
435
- if (opts.snapshot && settled) {
436
- if (!settled.ok) {
437
- log.warn(`snapshot failed: ${settled.error ?? 'unknown error'}`)
438
- return
439
- }
440
- console.log(snapshotText(settled) ?? JSON.stringify(settled.data, null, 2))
441
- }
442
- }
443
-
444
- async function closeCommand(opts: ViewOpts): Promise<void> {
445
- const sessions = await listSessions()
446
- let targets: ViewSessionRecord[]
447
- if (opts.all) targets = sessions
448
- else if (typeof opts.close === 'string') {
449
- const match = sessions.find((s) => s.id === opts.close)
450
- if (!match)
451
- return fatal(new Error(`No view session "${opts.close}" — see \`astrale view --sessions\``))
452
- targets = [match]
453
- } else if (sessions.length <= 1) targets = sessions
454
- else {
455
- return fatal(
456
- new Error(
457
- `${sessions.length} sessions open — pass --close <id> or --close --all:\n${sessions
458
- .map((s) => ` ${s.id} /:${s.view.route.key}`)
459
- .join('\n')}`,
460
- ),
461
- )
462
- }
463
- for (const session of targets) await closeSession(session)
464
- if (isMachine(opts)) output({ closed: targets.map((s) => s.id) }, opts)
465
- else if (targets.length === 0) log.dim('No view sessions.')
466
- else log.success(`Closed ${targets.map((s) => s.id).join(', ')}`)
467
- }
468
-
469
- async function sessionsCommand(opts: ViewOpts): Promise<void> {
470
- const sessions = await listSessions()
471
- if (isMachine(opts)) {
472
- output(sessions, opts)
473
- return
474
- }
475
- if (sessions.length === 0) {
476
- log.dim('No view sessions.')
477
- return
478
- }
479
- for (const s of sessions) {
480
- console.log(
481
- `${chalk.bold(s.id)} /:${s.view.route.key} target ${s.view.target} ${chalk.dim(s.pageUrl)}`,
482
- )
483
- }
484
- }
485
-
486
- export default {
487
- name: 'view',
488
- description: 'Open one view in an emulated host shell your agent can drive',
489
- arguments: [
490
- {
491
- name: 'spec',
492
- description: 'ViewPath (/:origin:view.slug) or target node (/path or @id)',
493
- required: false,
494
- },
495
- ],
496
- options: [
497
- {
498
- flags: '--target <path>',
499
- description:
500
- 'Target node to open the view on (optional — some views are standalone); @self works',
501
- },
502
- { flags: '--view <slug>', description: 'Pick a view when the target resolves several' },
503
- { flags: '--list', description: 'Resolve and print the candidate views; do not open' },
504
- {
505
- flags: '--view-url <url>',
506
- description: 'Override the view frontend URL (origin swaps origin; full URL replaces)',
507
- },
508
- {
509
- flags: '--handshake <mode>',
510
- description: 'Override the mount mode (needed with a bare --view-url)',
511
- choices: ['shell', 'none'],
512
- },
513
- { flags: '--headed', description: 'Visible agent-browser window' },
514
- { flags: '--browser', description: 'Open in the system default browser instead' },
515
- { flags: '--no-open', description: 'Start the session and print the URL only' },
516
- { flags: '--snapshot', description: 'Print an accessibility snapshot once the view is up' },
517
- { flags: '--screenshot <file>', description: 'Save a screenshot once the view is up' },
518
- { flags: '--sessions', description: 'List active view sessions' },
519
- {
520
- flags: '--close [id]',
521
- description: 'Close a view session (bare: the only open one; with --all: every session)',
522
- },
523
- { flags: '--all', description: 'With --close: close every session' },
524
- ],
525
- afterHelpText: `
526
- What it does:
527
- Renders ONE view — no GUI, no cookies, no WorkOS. It resolves the view on the
528
- kernel, starts a loopback session server that emulates the shell host (real
529
- handshake via @astrale-os/shell, token minted from YOUR CLI identity, kernel
530
- calls proxied), and opens the page headless in agent-browser. Driving stays
531
- agent-browser's job; auth follows --as/--creds/-i like any kernel command.
532
-
533
- A session stays up ~30 min idle (heartbeat while the page is open). The view
534
- gets exactly what the GUI would hand it: one target-bound resolved placement,
535
- an audience-bound credential for shell mounts, and the kernel endpoint.
536
-
537
- Examples:
538
- $ astrale view @customer
539
- $ astrale view /:crm.example.dev:view.dashboard
540
- $ astrale view /:agents.astrale.ai:view.agent --target @f00d1234 --as alice
541
- $ astrale view @customer --snapshot
542
- $ astrale view --list
543
- $ astrale view --sessions ; astrale view --close --all
544
- `,
545
- action: async (spec: string | undefined, opts: ViewOpts) => {
546
- if (opts.close !== undefined) return closeCommand(opts)
547
- if (opts.sessions) return sessionsCommand(opts)
548
- if (opts.list && !spec) return sessionsCommand(opts)
549
-
550
- rejectUnrepresentableOverrides(opts)
551
- if (!spec) return fatal(new Error('Nothing to open — pass a ViewPath or target node.'))
552
- const wantsAgentBrowser = !opts.browser && opts.open !== false
553
- if ((opts.snapshot || opts.screenshot) && !wantsAgentBrowser) {
554
- return fatal(
555
- new Error('--snapshot/--screenshot need the agent-browser page (drop --browser/--no-open)'),
556
- )
557
- }
558
- if (wantsAgentBrowser && !(await findAgentBrowser())) {
559
- log.error('agent-browser is not installed — it is the engine `astrale view` drives.')
560
- log.dim(' npm install -g agent-browser && agent-browser install')
561
- log.dim(` npx skills add ${AGENT_BROWSER_REPO}`)
562
- log.dim(' (or use --browser / --no-open)')
563
- process.exit(1)
564
- }
565
-
566
- const { view, candidates } = await resolveSession(spec, opts)
567
- if (opts.list) {
568
- if (isMachine(opts)) output(candidates, opts)
569
- else if (candidates.length === 0) log.dim('No views resolve here.')
570
- else {
571
- for (const c of candidates) {
572
- console.log(
573
- `${chalk.bold(candidateSlug(c))} ${c.handshake} ${c.origin} ${chalk.dim(c.url)} ${c.path}`,
574
- )
575
- }
576
- }
577
- return
578
- }
579
- if (!view) throw new Error('View resolution completed without a selected view')
580
-
581
- const record = await startSession(view, opts)
582
-
583
- let mode: 'agent' | 'system' | 'none' = 'none'
584
- if (wantsAgentBrowser) {
585
- mode = 'agent'
586
- const opened = await ab(['open', record.pageUrl], {
587
- profile: VIEW_PROFILE,
588
- headed: !!opts.headed,
589
- })
590
- if (!opened.ok) {
591
- await closeSession(record)
592
- return fatal(
593
- new Error(`agent-browser could not open the page: ${opened.error ?? 'unknown error'}`),
594
- )
595
- }
596
- } else if (opts.browser) {
597
- mode = 'system'
598
- openSystemBrowser(record.pageUrl)
599
- }
600
-
601
- const state = mode === 'none' ? null : await waitForPageState(record)
602
- if (state?.state === 'failed') {
603
- await reportOpened(record, state, mode, opts)
604
- if (opts.debug) {
605
- const tail = await readFile(logPath(record.id), 'utf8').catch(() => '')
606
- if (tail) console.error(`--- server log ---\n${tail.slice(-3000)}`)
607
- }
608
- await closeSession(record)
609
- process.exit(1)
610
- }
611
- await reportOpened(record, state, mode, opts)
612
- if (mode === 'agent') await runSnapshotExtras(opts)
613
- },
614
- } satisfies CommandDefinition
@@ -1,38 +0,0 @@
1
- import { describe, expect, test } from 'bun:test'
2
-
3
- import * as compatibility from './connect-core'
4
-
5
- describe('connect-core compatibility barrel', () => {
6
- test('retains the functions borrowed by connect-host', () => {
7
- for (const value of [
8
- compatibility.readIdentities,
9
- compatibility.getDefault,
10
- compatibility.getIdentity,
11
- compatibility.signAs,
12
- compatibility.listIdentityKeys,
13
- compatibility.readInstances,
14
- compatibility.resetInstancesMemo,
15
- compatibility.resolveInstance,
16
- compatibility.normalizeInstanceKernelUrl,
17
- compatibility.orgIdForAudience,
18
- compatibility.resolveInstanceTarget,
19
- compatibility.readConfig,
20
- compatibility.resolveCredential,
21
- compatibility.fetchWithCaFile,
22
- compatibility.createPaths,
23
- compatibility.loginViaIdp,
24
- compatibility.resolveIdpName,
25
- compatibility.readIdpSession,
26
- compatibility.isSessionExpired,
27
- ]) {
28
- expect(value).toBeTypeOf('function')
29
- }
30
- })
31
-
32
- test('retains typed errors and the captured paths singleton', () => {
33
- expect(compatibility.AuthError).toBeTypeOf('function')
34
- expect(compatibility.IdpRefreshTransientError).toBeTypeOf('function')
35
- expect(compatibility.IdpOrgMembershipError).toBeTypeOf('function')
36
- expect(compatibility.paths.home).toBeTypeOf('string')
37
- })
38
- })
@@ -1,42 +0,0 @@
1
- /**
2
- * Temporary compatibility surface for the observed `@astrale-os/connect-host`
3
- * consumer. Keep this file as re-exports only: CLI state and connection owners
4
- * remain authoritative, and no Kernel Client implementation type is exposed.
5
- */
6
-
7
- export { getDefault, getIdentity, readIdentities } from './identity/registry'
8
- export type { Identity, IdentityStore } from './identity/registry'
9
-
10
- export { listIdentityKeys, signAs } from './keys/index'
11
-
12
- export {
13
- normalizeInstanceKernelUrl,
14
- orgIdForAudience,
15
- readInstances,
16
- resetInstancesMemo,
17
- resolveInstance,
18
- } from './lib/instance'
19
- export type { InstanceEntry, InstanceStore, ResolvedInstance } from './lib/instance'
20
-
21
- export { resolveInstanceTarget } from './lib/instance-target'
22
- export type { ResolvedInstanceTarget } from './lib/instance-target'
23
-
24
- export { readConfig } from './lib/config'
25
- export type { AstraleConfig } from './lib/config'
26
-
27
- export {
28
- IdpOrgMembershipError,
29
- IdpRefreshTransientError,
30
- resolveCredential,
31
- } from './connection/auth'
32
-
33
- export { loginViaIdp, resolveIdpName } from './lib/login-flow'
34
- export type { DeviceVerification, LoginFlowOpts, LoginResult } from './lib/login-flow'
35
-
36
- export { isSessionExpired, readIdpSession } from './lib/idp'
37
- export type { IdpSession } from './lib/idp'
38
-
39
- export { AuthError } from './errors'
40
- export { fetchWithCaFile } from './lib/ca-fetch'
41
-
42
- export { createPaths, paths } from './state/index'