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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) hide show
  1. package/README.md +14 -166
  2. package/package.json +10 -102
  3. package/.check-workspace.cjs +0 -40
  4. package/LICENSE +0 -202
  5. package/THIRD-PARTY-NOTICES.md +0 -27
  6. package/dist/astrale.js +0 -93344
  7. package/dist/public/connect-core.js +0 -29187
  8. package/dist/public/keys/index.js +0 -5651
  9. package/dist/public/paths/index.js +0 -4282
  10. package/dist/types/admin/binding.d.ts +0 -19
  11. package/dist/types/admin/instance/client.d.ts +0 -22
  12. package/dist/types/admin/instance/index.d.ts +0 -2
  13. package/dist/types/admin/instance/model.d.ts +0 -33
  14. package/dist/types/connect-core.d.ts +0 -22
  15. package/dist/types/connection/auth.d.ts +0 -39
  16. package/dist/types/connection/call.d.ts +0 -3
  17. package/dist/types/connection/command.d.ts +0 -27
  18. package/dist/types/connection/credential.d.ts +0 -14
  19. package/dist/types/connection/errors.d.ts +0 -1
  20. package/dist/types/connection/exchange.d.ts +0 -9
  21. package/dist/types/connection/failure/classify.d.ts +0 -2
  22. package/dist/types/connection/failure/index.d.ts +0 -5
  23. package/dist/types/connection/failure/model.d.ts +0 -25
  24. package/dist/types/connection/failure/render.d.ts +0 -3
  25. package/dist/types/connection/index.d.ts +0 -8
  26. package/dist/types/connection/reasons.d.ts +0 -37
  27. package/dist/types/connection/self.d.ts +0 -37
  28. package/dist/types/connection/session.d.ts +0 -31
  29. package/dist/types/connection/target.d.ts +0 -38
  30. package/dist/types/errors.d.ts +0 -23
  31. package/dist/types/identity/registry.d.ts +0 -25
  32. package/dist/types/keys/algorithm.d.ts +0 -6
  33. package/dist/types/keys/credential.d.ts +0 -21
  34. package/dist/types/keys/index.d.ts +0 -4
  35. package/dist/types/keys/pair.d.ts +0 -34
  36. package/dist/types/lib/admin-instance.d.ts +0 -17
  37. package/dist/types/lib/admin-target.d.ts +0 -78
  38. package/dist/types/lib/ca-fetch.d.ts +0 -2
  39. package/dist/types/lib/config.d.ts +0 -71
  40. package/dist/types/lib/failure-debug.d.ts +0 -1
  41. package/dist/types/lib/format.d.ts +0 -1
  42. package/dist/types/lib/idp-session.d.ts +0 -33
  43. package/dist/types/lib/idp.d.ts +0 -404
  44. package/dist/types/lib/instance-target.d.ts +0 -38
  45. package/dist/types/lib/instance.d.ts +0 -202
  46. package/dist/types/lib/invocation.d.ts +0 -3
  47. package/dist/types/lib/log.d.ts +0 -33
  48. package/dist/types/lib/login-flow.d.ts +0 -49
  49. package/dist/types/lib/meta.d.ts +0 -36
  50. package/dist/types/lib/output.d.ts +0 -87
  51. package/dist/types/lib/proc.d.ts +0 -43
  52. package/dist/types/lib/self.d.ts +0 -9
  53. package/dist/types/lib/table.d.ts +0 -18
  54. package/dist/types/lib/update.d.ts +0 -131
  55. package/dist/types/lib/validation.d.ts +0 -11
  56. package/dist/types/paths/index.d.ts +0 -2
  57. package/dist/types/state/exchange-credentials.d.ts +0 -25
  58. package/dist/types/state/files.d.ts +0 -9
  59. package/dist/types/state/identities.d.ts +0 -42
  60. package/dist/types/state/index.d.ts +0 -8
  61. package/dist/types/state/paths.d.ts +0 -32
  62. package/src/__tests__/fixtures/publication.ts +0 -20
  63. package/src/admin/.spec/api.d.ts +0 -3
  64. package/src/admin/.spec/architecture.md +0 -15
  65. package/src/admin/.spec/icon.svg +0 -3
  66. package/src/admin/.spec/layout.ts +0 -6
  67. package/src/admin/__tests__/binding.test.ts +0 -31
  68. package/src/admin/__tests__/fixture.ts +0 -101
  69. package/src/admin/binding.ts +0 -98
  70. package/src/admin/catalog/.spec/api.d.ts +0 -65
  71. package/src/admin/catalog/.spec/architecture.md +0 -6
  72. package/src/admin/catalog/.spec/icon.svg +0 -3
  73. package/src/admin/catalog/.spec/layout.ts +0 -6
  74. package/src/admin/catalog/__tests__/client.test.ts +0 -142
  75. package/src/admin/catalog/client.ts +0 -218
  76. package/src/admin/catalog/index.ts +0 -13
  77. package/src/admin/catalog/model.ts +0 -41
  78. package/src/admin/catalog/tsconfig.json +0 -8
  79. package/src/admin/graph/.spec/api.d.ts +0 -22
  80. package/src/admin/graph/.spec/architecture.md +0 -5
  81. package/src/admin/graph/.spec/icon.svg +0 -3
  82. package/src/admin/graph/.spec/layout.ts +0 -3
  83. package/src/admin/graph/index.ts +0 -6
  84. package/src/admin/graph/nodes.ts +0 -56
  85. package/src/admin/index.ts +0 -2
  86. package/src/admin/instance/.spec/api.d.ts +0 -66
  87. package/src/admin/instance/.spec/architecture.md +0 -10
  88. package/src/admin/instance/.spec/icon.svg +0 -3
  89. package/src/admin/instance/.spec/layout.ts +0 -6
  90. package/src/admin/instance/__tests__/client.test.ts +0 -166
  91. package/src/admin/instance/client.ts +0 -196
  92. package/src/admin/instance/index.ts +0 -15
  93. package/src/admin/instance/model.ts +0 -56
  94. package/src/admin/instance/tsconfig.json +0 -8
  95. package/src/commands/__tests__/admin-instance.test.ts +0 -91
  96. package/src/commands/__tests__/auth-login.test.ts +0 -231
  97. package/src/commands/__tests__/auth-token.test.ts +0 -223
  98. package/src/commands/__tests__/call-describe.test.ts +0 -80
  99. package/src/commands/__tests__/call.test.ts +0 -29
  100. package/src/commands/__tests__/domain-install-operation.test.ts +0 -126
  101. package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
  102. package/src/commands/__tests__/domain-list.test.ts +0 -133
  103. package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
  104. package/src/commands/__tests__/install-direct.test.ts +0 -21
  105. package/src/commands/__tests__/install-identity-override.test.ts +0 -76
  106. package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
  107. package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
  108. package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
  109. package/src/commands/__tests__/instance-use.test.ts +0 -67
  110. package/src/commands/__tests__/introspect-parse.test.ts +0 -21
  111. package/src/commands/__tests__/logs.test.ts +0 -97
  112. package/src/commands/__tests__/read-commands.test.ts +0 -294
  113. package/src/commands/__tests__/setup-plan.test.ts +0 -61
  114. package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
  115. package/src/commands/__tests__/token-ttl.test.ts +0 -21
  116. package/src/commands/__tests__/update.test.ts +0 -95
  117. package/src/commands/__tests__/view-build.test.ts +0 -58
  118. package/src/commands/__tests__/view.test.ts +0 -149
  119. package/src/commands/admin/status.ts +0 -61
  120. package/src/commands/admin/use.ts +0 -100
  121. package/src/commands/auth/login.ts +0 -82
  122. package/src/commands/auth/logout.ts +0 -52
  123. package/src/commands/auth/status.ts +0 -86
  124. package/src/commands/auth/token.ts +0 -174
  125. package/src/commands/browser.ts +0 -207
  126. package/src/commands/call-describe.ts +0 -123
  127. package/src/commands/call.ts +0 -205
  128. package/src/commands/domain/install.ts +0 -548
  129. package/src/commands/domain/list.ts +0 -155
  130. package/src/commands/domain/publish.ts +0 -136
  131. package/src/commands/domain/uninstall.ts +0 -128
  132. package/src/commands/get.ts +0 -69
  133. package/src/commands/identity/__tests__/register.test.ts +0 -93
  134. package/src/commands/identity/create.ts +0 -35
  135. package/src/commands/identity/delete.ts +0 -24
  136. package/src/commands/identity/export.ts +0 -46
  137. package/src/commands/identity/import.ts +0 -61
  138. package/src/commands/identity/list.ts +0 -56
  139. package/src/commands/identity/register.ts +0 -196
  140. package/src/commands/identity/sync.ts +0 -38
  141. package/src/commands/identity/unsync.ts +0 -34
  142. package/src/commands/identity/use.ts +0 -24
  143. package/src/commands/identity/whoami.ts +0 -34
  144. package/src/commands/idp/add.ts +0 -150
  145. package/src/commands/idp/list.ts +0 -57
  146. package/src/commands/idp/refresh.ts +0 -38
  147. package/src/commands/idp/remove.ts +0 -36
  148. package/src/commands/idp/show.ts +0 -29
  149. package/src/commands/instance/active.ts +0 -73
  150. package/src/commands/instance/bookmark.ts +0 -101
  151. package/src/commands/instance/create.ts +0 -61
  152. package/src/commands/instance/delete.ts +0 -69
  153. package/src/commands/instance/forget.ts +0 -26
  154. package/src/commands/instance/list.ts +0 -197
  155. package/src/commands/instance/status.ts +0 -38
  156. package/src/commands/instance/use.ts +0 -263
  157. package/src/commands/introspect.ts +0 -110
  158. package/src/commands/logs.ts +0 -283
  159. package/src/commands/mutate.ts +0 -122
  160. package/src/commands/query.ts +0 -136
  161. package/src/commands/session/analyze.ts +0 -50
  162. package/src/commands/session/list.ts +0 -36
  163. package/src/commands/setup.ts +0 -54
  164. package/src/commands/status.ts +0 -60
  165. package/src/commands/studio.ts +0 -434
  166. package/src/commands/token.ts +0 -107
  167. package/src/commands/update.ts +0 -334
  168. package/src/commands/use.ts +0 -86
  169. package/src/commands/view-serve.ts +0 -26
  170. package/src/commands/view.ts +0 -614
  171. package/src/connect-core.test.ts +0 -38
  172. package/src/connect-core.ts +0 -42
  173. package/src/connection/.spec/api.d.ts +0 -110
  174. package/src/connection/.spec/architecture.md +0 -47
  175. package/src/connection/.spec/capabilities/connection.ts +0 -13
  176. package/src/connection/.spec/examples/call.ts +0 -7
  177. package/src/connection/.spec/flows/command.ts +0 -20
  178. package/src/connection/.spec/flows/session.ts +0 -61
  179. package/src/connection/.spec/laws/connection.ts +0 -205
  180. package/src/connection/.spec/layout.ts +0 -21
  181. package/src/connection/__tests__/auth.test.ts +0 -128
  182. package/src/connection/__tests__/ca-fetch.test.ts +0 -60
  183. package/src/connection/__tests__/call.test.ts +0 -17
  184. package/src/connection/__tests__/credential.test.ts +0 -138
  185. package/src/connection/__tests__/errors.test.ts +0 -577
  186. package/src/connection/__tests__/exchange.test.ts +0 -295
  187. package/src/connection/__tests__/failure-fixtures.ts +0 -39
  188. package/src/connection/__tests__/failure-safety.test.ts +0 -75
  189. package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
  190. package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
  191. package/src/connection/__tests__/managed.test.ts +0 -39
  192. package/src/connection/__tests__/reasons.test.ts +0 -78
  193. package/src/connection/__tests__/self.test.ts +0 -71
  194. package/src/connection/__tests__/session.test.ts +0 -140
  195. package/src/connection/__tests__/target.test.ts +0 -94
  196. package/src/connection/auth.ts +0 -249
  197. package/src/connection/call.ts +0 -7
  198. package/src/connection/command.ts +0 -67
  199. package/src/connection/credential.ts +0 -117
  200. package/src/connection/errors.ts +0 -1
  201. package/src/connection/exchange.ts +0 -311
  202. package/src/connection/failure/classify.ts +0 -110
  203. package/src/connection/failure/index.ts +0 -18
  204. package/src/connection/failure/model.ts +0 -28
  205. package/src/connection/failure/render.ts +0 -116
  206. package/src/connection/index.ts +0 -8
  207. package/src/connection/reasons.ts +0 -209
  208. package/src/connection/self.ts +0 -138
  209. package/src/connection/session.ts +0 -196
  210. package/src/connection/target.ts +0 -112
  211. package/src/connection/tsconfig.json +0 -6
  212. package/src/errors.ts +0 -66
  213. package/src/graph/.spec/api.d.ts +0 -41
  214. package/src/graph/.spec/laws/documents.ts +0 -24
  215. package/src/graph/.spec/laws/projection.ts +0 -13
  216. package/src/graph/.spec/layout.ts +0 -14
  217. package/src/graph/__tests__/mutation.test.ts +0 -51
  218. package/src/graph/__tests__/projection.test.ts +0 -22
  219. package/src/graph/__tests__/query.test.ts +0 -173
  220. package/src/graph/class.ts +0 -30
  221. package/src/graph/index.ts +0 -4
  222. package/src/graph/mutation.ts +0 -46
  223. package/src/graph/projection.ts +0 -21
  224. package/src/graph/query.ts +0 -97
  225. package/src/graph/tsconfig.json +0 -6
  226. package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
  227. package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
  228. package/src/identity/.spec/api.d.ts +0 -124
  229. package/src/identity/.spec/architecture.md +0 -33
  230. package/src/identity/.spec/capabilities/identity.ts +0 -7
  231. package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
  232. package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
  233. package/src/identity/.spec/flows/import.ts +0 -29
  234. package/src/identity/.spec/laws/identity.ts +0 -56
  235. package/src/identity/.spec/layout.ts +0 -13
  236. package/src/identity/.spec/schemas/identity-export-v1.schema.json +0 -25
  237. package/src/identity/__tests__/fixtures/registry-journey.ts +0 -53
  238. package/src/identity/__tests__/registration.test.ts +0 -64
  239. package/src/identity/__tests__/registry.test.ts +0 -70
  240. package/src/identity/__tests__/transfer.test.ts +0 -198
  241. package/src/identity/index.ts +0 -23
  242. package/src/identity/registration.ts +0 -72
  243. package/src/identity/registry.ts +0 -179
  244. package/src/identity/transfer.ts +0 -187
  245. package/src/identity/tsconfig.json +0 -6
  246. package/src/index.ts +0 -1
  247. package/src/keys/.spec/api.d.ts +0 -74
  248. package/src/keys/.spec/architecture.md +0 -13
  249. package/src/keys/.spec/laws/keys.ts +0 -43
  250. package/src/keys/.spec/layout.ts +0 -6
  251. package/src/keys/__tests__/algorithm.test.ts +0 -39
  252. package/src/keys/__tests__/keys.test.ts +0 -168
  253. package/src/keys/algorithm.ts +0 -33
  254. package/src/keys/credential.ts +0 -112
  255. package/src/keys/index.ts +0 -14
  256. package/src/keys/pair.ts +0 -219
  257. package/src/keys/tsconfig.json +0 -6
  258. package/src/lib/__tests__/admin-target.test.ts +0 -184
  259. package/src/lib/__tests__/binary.test.ts +0 -55
  260. package/src/lib/__tests__/command-dx.test.ts +0 -102
  261. package/src/lib/__tests__/concurrency.test.ts +0 -62
  262. package/src/lib/__tests__/config.test.ts +0 -54
  263. package/src/lib/__tests__/design.test.ts +0 -99
  264. package/src/lib/__tests__/domain-publication.test.ts +0 -138
  265. package/src/lib/__tests__/format.test.ts +0 -22
  266. package/src/lib/__tests__/idp-session.driver.ts +0 -53
  267. package/src/lib/__tests__/idp-session.test.ts +0 -379
  268. package/src/lib/__tests__/idp.test.ts +0 -415
  269. package/src/lib/__tests__/instance-candidates.test.ts +0 -146
  270. package/src/lib/__tests__/instance-target.test.ts +0 -213
  271. package/src/lib/__tests__/instance.test.ts +0 -192
  272. package/src/lib/__tests__/local-status.test.ts +0 -202
  273. package/src/lib/__tests__/log-errors.test.ts +0 -64
  274. package/src/lib/__tests__/log.test.ts +0 -31
  275. package/src/lib/__tests__/meta.test.ts +0 -55
  276. package/src/lib/__tests__/output.test.ts +0 -162
  277. package/src/lib/__tests__/panel.test.ts +0 -40
  278. package/src/lib/__tests__/port.test.ts +0 -44
  279. package/src/lib/__tests__/prompt.test.ts +0 -25
  280. package/src/lib/__tests__/sdk-deps.test.ts +0 -68
  281. package/src/lib/__tests__/self.test.ts +0 -50
  282. package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
  283. package/src/lib/__tests__/table.test.ts +0 -53
  284. package/src/lib/__tests__/update.test.ts +0 -351
  285. package/src/lib/__tests__/use-target.test.ts +0 -56
  286. package/src/lib/__tests__/validation.test.ts +0 -34
  287. package/src/lib/__tests__/view-assets.test.ts +0 -146
  288. package/src/lib/__tests__/view-open-intent.test.ts +0 -280
  289. package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
  290. package/src/lib/__tests__/view-server.test.ts +0 -68
  291. package/src/lib/__tests__/view-session.test.ts +0 -99
  292. package/src/lib/__tests__/view-snapshot.test.ts +0 -77
  293. package/src/lib/admin-domain.ts +0 -43
  294. package/src/lib/admin-instance.ts +0 -56
  295. package/src/lib/admin-target.ts +0 -290
  296. package/src/lib/binary.ts +0 -110
  297. package/src/lib/browser.ts +0 -150
  298. package/src/lib/ca-fetch.ts +0 -133
  299. package/src/lib/command-dx.ts +0 -191
  300. package/src/lib/concurrency.ts +0 -31
  301. package/src/lib/config.ts +0 -46
  302. package/src/lib/domain-publication.ts +0 -104
  303. package/src/lib/failure-debug.ts +0 -26
  304. package/src/lib/format.ts +0 -4
  305. package/src/lib/idp-session.ts +0 -134
  306. package/src/lib/idp.ts +0 -906
  307. package/src/lib/instance-candidates.ts +0 -49
  308. package/src/lib/instance-target.ts +0 -197
  309. package/src/lib/instance.ts +0 -467
  310. package/src/lib/invocation.ts +0 -11
  311. package/src/lib/local-status.ts +0 -152
  312. package/src/lib/log.ts +0 -143
  313. package/src/lib/login-flow.ts +0 -201
  314. package/src/lib/meta.ts +0 -90
  315. package/src/lib/output.ts +0 -238
  316. package/src/lib/panel.ts +0 -61
  317. package/src/lib/port.ts +0 -41
  318. package/src/lib/proc.ts +0 -82
  319. package/src/lib/prompt.ts +0 -136
  320. package/src/lib/provision-instance.ts +0 -139
  321. package/src/lib/sdk-deps.ts +0 -104
  322. package/src/lib/self.ts +0 -22
  323. package/src/lib/skills.ts +0 -171
  324. package/src/lib/table.ts +0 -62
  325. package/src/lib/update.ts +0 -409
  326. package/src/lib/use-target.ts +0 -24
  327. package/src/lib/validation.ts +0 -59
  328. package/src/lib/view/assets.ts +0 -78
  329. package/src/lib/view/open-intent.ts +0 -67
  330. package/src/lib/view/port-allocation.ts +0 -19
  331. package/src/lib/view/resolve.ts +0 -111
  332. package/src/lib/view/server.ts +0 -244
  333. package/src/lib/view/session.ts +0 -152
  334. package/src/lib/view/snapshot.ts +0 -101
  335. package/src/paths/.spec/api.d.ts +0 -13
  336. package/src/paths/.spec/architecture.md +0 -5
  337. package/src/paths/.spec/layout.ts +0 -3
  338. package/src/paths/index.ts +0 -13
  339. package/src/program/.spec/api.d.ts +0 -42
  340. package/src/program/.spec/architecture.md +0 -18
  341. package/src/program/.spec/laws/program.ts +0 -29
  342. package/src/program/.spec/layout.ts +0 -14
  343. package/src/program/__tests__/program.test.ts +0 -378
  344. package/src/program/build.ts +0 -183
  345. package/src/program/command.ts +0 -42
  346. package/src/program/index.ts +0 -2
  347. package/src/program/options.ts +0 -41
  348. package/src/program/registry.ts +0 -63
  349. package/src/program/tsconfig.json +0 -6
  350. package/src/setup/__tests__/instance-step.test.ts +0 -256
  351. package/src/setup/__tests__/util.test.ts +0 -29
  352. package/src/setup/engine.ts +0 -83
  353. package/src/setup/render.ts +0 -107
  354. package/src/setup/steps/admin.ts +0 -93
  355. package/src/setup/steps/agent-browser.ts +0 -81
  356. package/src/setup/steps/auth.ts +0 -54
  357. package/src/setup/steps/domain.ts +0 -68
  358. package/src/setup/steps/index.ts +0 -18
  359. package/src/setup/steps/instance.ts +0 -206
  360. package/src/setup/steps/skills-bridge.ts +0 -70
  361. package/src/setup/steps/skills.ts +0 -59
  362. package/src/setup/types.ts +0 -61
  363. package/src/setup/util.ts +0 -34
  364. package/src/state/.spec/api.d.ts +0 -133
  365. package/src/state/.spec/architecture.md +0 -31
  366. package/src/state/.spec/capabilities/state.ts +0 -7
  367. package/src/state/.spec/flows/identity-update.ts +0 -22
  368. package/src/state/.spec/laws/state.ts +0 -73
  369. package/src/state/.spec/layout.ts +0 -14
  370. package/src/state/__tests__/exchange-credentials.test.ts +0 -188
  371. package/src/state/__tests__/files.test.ts +0 -113
  372. package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
  373. package/src/state/__tests__/identities.test.ts +0 -142
  374. package/src/state/__tests__/paths.test.ts +0 -27
  375. package/src/state/exchange-credentials.ts +0 -219
  376. package/src/state/files.ts +0 -129
  377. package/src/state/identities.ts +0 -229
  378. package/src/state/index.ts +0 -29
  379. package/src/state/paths.ts +0 -61
  380. package/src/state/tsconfig.json +0 -6
  381. package/src/telemetry/__tests__/gate.test.ts +0 -63
  382. package/src/telemetry/__tests__/recorder.test.ts +0 -110
  383. package/src/telemetry/__tests__/redact.test.ts +0 -79
  384. package/src/telemetry/__tests__/session.test.ts +0 -166
  385. package/src/telemetry/__tests__/trigger.test.ts +0 -49
  386. package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
  387. package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
  388. package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
  389. package/src/telemetry/adapters/claude-code.ts +0 -90
  390. package/src/telemetry/adapters/codex.ts +0 -160
  391. package/src/telemetry/adapters/index.ts +0 -45
  392. package/src/telemetry/adapters/types.ts +0 -21
  393. package/src/telemetry/analyze.ts +0 -227
  394. package/src/telemetry/gate.ts +0 -79
  395. package/src/telemetry/recorder.ts +0 -57
  396. package/src/telemetry/redact.ts +0 -53
  397. package/src/telemetry/session.ts +0 -88
  398. package/src/telemetry/settings.ts +0 -26
  399. package/src/telemetry/store.ts +0 -91
  400. package/src/telemetry/trigger.ts +0 -119
  401. package/src/telemetry/types.ts +0 -64
  402. package/src/test-utils.ts +0 -18
  403. package/studio/client/dist/assets/elk-api-ByzoDZWH.js +0 -1
  404. package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
  405. package/studio/client/dist/assets/index-B0RCgUOT.js +0 -8
  406. package/studio/client/dist/assets/index-BiGR8Oo9.css +0 -1
  407. package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
  408. package/studio/client/dist/assets/index-N8J8EKlB.js +0 -81
  409. package/studio/client/dist/index.html +0 -13
  410. package/studio/package.json +0 -65
  411. package/studio/server/agent/ask.test.ts +0 -74
  412. package/studio/server/agent/ask.ts +0 -71
  413. package/studio/server/agent/bridge/client.test.ts +0 -49
  414. package/studio/server/agent/bridge/client.ts +0 -37
  415. package/studio/server/agent/bridge/grant.test.ts +0 -62
  416. package/studio/server/agent/bridge/grant.ts +0 -84
  417. package/studio/server/agent/bridge/routes.test.ts +0 -151
  418. package/studio/server/agent/bridge/routes.ts +0 -148
  419. package/studio/server/agent/bridge/stdio.ts +0 -195
  420. package/studio/server/agent/conversation.test.ts +0 -89
  421. package/studio/server/agent/conversation.ts +0 -158
  422. package/studio/server/agent/harness/adapter.ts +0 -171
  423. package/studio/server/agent/harness/claude/adapter.test.ts +0 -348
  424. package/studio/server/agent/harness/claude/adapter.ts +0 -71
  425. package/studio/server/agent/harness/claude/ask.ts +0 -114
  426. package/studio/server/agent/harness/claude/capabilities.ts +0 -27
  427. package/studio/server/agent/harness/claude/command.ts +0 -63
  428. package/studio/server/agent/harness/claude/events.ts +0 -215
  429. package/studio/server/agent/harness/claude/loadout.ts +0 -132
  430. package/studio/server/agent/harness/claude/mcp.test.ts +0 -36
  431. package/studio/server/agent/harness/claude/mcp.ts +0 -41
  432. package/studio/server/agent/harness/claude/skills.ts +0 -43
  433. package/studio/server/agent/harness/codex/adapter.test.ts +0 -269
  434. package/studio/server/agent/harness/codex/adapter.ts +0 -116
  435. package/studio/server/agent/harness/codex/ask.test.ts +0 -176
  436. package/studio/server/agent/harness/codex/ask.ts +0 -181
  437. package/studio/server/agent/harness/codex/command.test.ts +0 -69
  438. package/studio/server/agent/harness/codex/command.ts +0 -43
  439. package/studio/server/agent/harness/codex/events.test.ts +0 -94
  440. package/studio/server/agent/harness/codex/events.ts +0 -132
  441. package/studio/server/agent/harness/codex/exec.ts +0 -113
  442. package/studio/server/agent/harness/codex/loadout.ts +0 -60
  443. package/studio/server/agent/harness/codex/mcp.test.ts +0 -32
  444. package/studio/server/agent/harness/codex/mcp.ts +0 -27
  445. package/studio/server/agent/harness/codex/models.test.ts +0 -167
  446. package/studio/server/agent/harness/codex/models.ts +0 -211
  447. package/studio/server/agent/harness/codex/skills.ts +0 -33
  448. package/studio/server/agent/harness/gateway/config.test.ts +0 -98
  449. package/studio/server/agent/harness/gateway/config.ts +0 -214
  450. package/studio/server/agent/harness/gateway/token.test.ts +0 -133
  451. package/studio/server/agent/harness/gateway/token.ts +0 -166
  452. package/studio/server/agent/harness/mock/adapter.ts +0 -190
  453. package/studio/server/agent/harness/mock/domain-edit.ts +0 -41
  454. package/studio/server/agent/harness/process.test.ts +0 -46
  455. package/studio/server/agent/harness/process.ts +0 -104
  456. package/studio/server/agent/harness/registry.ts +0 -37
  457. package/studio/server/agent/harness/selection.test.ts +0 -75
  458. package/studio/server/agent/harness/selection.ts +0 -85
  459. package/studio/server/agent/harness/skills.test.ts +0 -95
  460. package/studio/server/agent/harness/skills.ts +0 -100
  461. package/studio/server/agent/layout.test.ts +0 -95
  462. package/studio/server/agent/notify.ts +0 -12
  463. package/studio/server/agent/prompts/anchors.test.ts +0 -70
  464. package/studio/server/agent/prompts/anchors.ts +0 -153
  465. package/studio/server/agent/prompts/ask.ts +0 -34
  466. package/studio/server/agent/prompts/system.test.ts +0 -13
  467. package/studio/server/agent/prompts/system.ts +0 -99
  468. package/studio/server/agent/prompts/turn.ts +0 -66
  469. package/studio/server/agent/routes.test.ts +0 -176
  470. package/studio/server/agent/routes.ts +0 -214
  471. package/studio/server/agent/run/completion.ts +0 -193
  472. package/studio/server/agent/run/coordinator.test.ts +0 -337
  473. package/studio/server/agent/run/coordinator.ts +0 -104
  474. package/studio/server/agent/run/live-state.ts +0 -73
  475. package/studio/server/agent/run/preparation.ts +0 -163
  476. package/studio/server/agent/run/transcript.test.ts +0 -81
  477. package/studio/server/agent/run/transcript.ts +0 -196
  478. package/studio/server/agent/run/usage.test.ts +0 -70
  479. package/studio/server/agent/run/usage.ts +0 -62
  480. package/studio/server/agent/stream.ts +0 -37
  481. package/studio/server/agent/telemetry.ts +0 -13
  482. package/studio/server/api/canvas.ts +0 -43
  483. package/studio/server/api/comments.ts +0 -85
  484. package/studio/server/api/context.ts +0 -61
  485. package/studio/server/api/deployment.ts +0 -39
  486. package/studio/server/api/documents.ts +0 -55
  487. package/studio/server/api/domain.ts +0 -59
  488. package/studio/server/api/http.ts +0 -45
  489. package/studio/server/api/project.ts +0 -57
  490. package/studio/server/api/schema.ts +0 -12
  491. package/studio/server/api/views.ts +0 -57
  492. package/studio/server/api/workspace.ts +0 -60
  493. package/studio/server/api-agent-loadout.test.ts +0 -69
  494. package/studio/server/api.test.ts +0 -147
  495. package/studio/server/api.ts +0 -34
  496. package/studio/server/cache.test.ts +0 -122
  497. package/studio/server/cache.ts +0 -303
  498. package/studio/server/cli-consumers.test.ts +0 -494
  499. package/studio/server/cli.test.ts +0 -88
  500. package/studio/server/cli.ts +0 -240
  501. package/studio/server/client-package.test.ts +0 -147
  502. package/studio/server/client-package.ts +0 -266
  503. package/studio/server/detect.ts +0 -81
  504. package/studio/server/domain.test.ts +0 -77
  505. package/studio/server/domain.ts +0 -124
  506. package/studio/server/environment/dotenv-preview.test.ts +0 -39
  507. package/studio/server/environment/dotenv-preview.ts +0 -27
  508. package/studio/server/environment/files.test.ts +0 -53
  509. package/studio/server/environment/files.ts +0 -120
  510. package/studio/server/handoff/copy.ts +0 -171
  511. package/studio/server/handoff/service.test.ts +0 -22
  512. package/studio/server/handoff/service.ts +0 -62
  513. package/studio/server/index.ts +0 -148
  514. package/studio/server/instances/active.ts +0 -72
  515. package/studio/server/instances/deploy-record.test.ts +0 -31
  516. package/studio/server/instances/deploy-record.ts +0 -37
  517. package/studio/server/instances/deploy.ts +0 -56
  518. package/studio/server/instances/probe.test.ts +0 -67
  519. package/studio/server/instances/probe.ts +0 -67
  520. package/studio/server/instances/status.test.ts +0 -12
  521. package/studio/server/instances/status.ts +0 -49
  522. package/studio/server/introspect/anatomy/client-tree.ts +0 -57
  523. package/studio/server/introspect/anatomy/env-fields.ts +0 -66
  524. package/studio/server/introspect/anatomy/schema-definition.ts +0 -53
  525. package/studio/server/introspect/anatomy/source.ts +0 -181
  526. package/studio/server/introspect/anatomy/views/routes.ts +0 -114
  527. package/studio/server/introspect/anatomy/views.ts +0 -53
  528. package/studio/server/introspect/anatomy-extras.test.ts +0 -265
  529. package/studio/server/introspect/anatomy-extras.ts +0 -10
  530. package/studio/server/introspect/anatomy.test.ts +0 -41
  531. package/studio/server/introspect/anatomy.ts +0 -147
  532. package/studio/server/introspect/bundle.ts +0 -69
  533. package/studio/server/introspect/canonical-schema.test.ts +0 -179
  534. package/studio/server/introspect/canonical-schema.ts +0 -583
  535. package/studio/server/introspect/config-preview.test.ts +0 -32
  536. package/studio/server/introspect/config-preview.ts +0 -119
  537. package/studio/server/introspect/core-extractor.ts +0 -30
  538. package/studio/server/introspect/core.ts +0 -45
  539. package/studio/server/introspect/diff.test.ts +0 -124
  540. package/studio/server/introspect/diff.ts +0 -316
  541. package/studio/server/introspect/extractor.ts +0 -41
  542. package/studio/server/introspect/hash.ts +0 -24
  543. package/studio/server/introspect/overlay-tsmorph.test.ts +0 -146
  544. package/studio/server/introspect/overlay-tsmorph.ts +0 -9
  545. package/studio/server/introspect/overlay.test.ts +0 -44
  546. package/studio/server/introspect/overlay.ts +0 -40
  547. package/studio/server/introspect/revision.test.ts +0 -54
  548. package/studio/server/introspect/revision.ts +0 -49
  549. package/studio/server/introspect/runtime.test.ts +0 -157
  550. package/studio/server/introspect/runtime.ts +0 -140
  551. package/studio/server/introspect/schema-ir-json.test.ts +0 -70
  552. package/studio/server/introspect/schema-ir-json.ts +0 -151
  553. package/studio/server/introspect/schema-refs.test.ts +0 -55
  554. package/studio/server/introspect/schema-refs.ts +0 -32
  555. package/studio/server/introspect/source-overlay/annotations.ts +0 -14
  556. package/studio/server/introspect/source-overlay/handlers.ts +0 -161
  557. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -46
  558. package/studio/server/introspect/source-overlay/project.ts +0 -248
  559. package/studio/server/introspect/source-overlay/spans.ts +0 -330
  560. package/studio/server/json.ts +0 -46
  561. package/studio/server/lifecycle.ts +0 -42
  562. package/studio/server/sse.test.ts +0 -26
  563. package/studio/server/sse.ts +0 -60
  564. package/studio/server/state/baseline.test.ts +0 -267
  565. package/studio/server/state/baseline.ts +0 -354
  566. package/studio/server/state/comments.test.ts +0 -94
  567. package/studio/server/state/comments.ts +0 -484
  568. package/studio/server/state/context.ts +0 -199
  569. package/studio/server/state/documents.ts +0 -111
  570. package/studio/server/state/integrations.ts +0 -81
  571. package/studio/server/state/layout.test.ts +0 -34
  572. package/studio/server/state/layout.ts +0 -82
  573. package/studio/server/state/settings.test.ts +0 -78
  574. package/studio/server/state/settings.ts +0 -73
  575. package/studio/server/state/store.test.ts +0 -122
  576. package/studio/server/state/store.ts +0 -146
  577. package/studio/server/state/visibility.ts +0 -48
  578. package/studio/server/views/model.test.ts +0 -57
  579. package/studio/server/views/model.ts +0 -66
  580. package/studio/server/views/runtime.ts +0 -40
  581. package/studio/server/views/selection-repository.test.ts +0 -31
  582. package/studio/server/views/selection-repository.ts +0 -60
  583. package/studio/server/views/session.test.ts +0 -73
  584. package/studio/server/views/session.ts +0 -166
  585. package/studio/server/views/target.test.ts +0 -78
  586. package/studio/server/views/target.ts +0 -222
  587. package/studio/server/watch.test.ts +0 -36
  588. package/studio/server/watch.ts +0 -93
  589. package/studio/server/workspace/catalog.test.ts +0 -17
  590. package/studio/server/workspace/catalog.ts +0 -43
  591. package/studio/server/workspace/create.test.ts +0 -37
  592. package/studio/server/workspace/create.ts +0 -162
  593. package/studio/server/workspace/git.ts +0 -75
  594. package/studio/server/workspace/updates.ts +0 -83
  595. package/studio/server/workspace-state.ts +0 -26
  596. package/studio/server/workspace-watch.ts +0 -106
  597. package/studio/shared/agent-effort.test.ts +0 -12
  598. package/studio/shared/agent-effort.ts +0 -15
  599. package/studio/shared/agent-models.test.ts +0 -9
  600. package/studio/shared/agent-models.ts +0 -14
  601. package/studio/shared/contracts/README.md +0 -16
  602. package/studio/shared/contracts/agent.ts +0 -270
  603. package/studio/shared/contracts/runtime.ts +0 -50
  604. package/studio/shared/contracts/schema.ts +0 -393
  605. package/studio/shared/contracts/surface.test.ts +0 -317
  606. package/studio/shared/contracts/workspace.ts +0 -265
  607. package/studio/shared/layout.test.ts +0 -116
  608. package/studio/shared/schema/identity.test.ts +0 -34
  609. package/studio/shared/schema/identity.ts +0 -68
  610. package/studio/shared/settings-values.test.ts +0 -18
  611. package/studio/shared/settings-values.ts +0 -20
  612. package/studio/shared/types.ts +0 -14
  613. package/studio/tsconfig.json +0 -23
  614. package/tsconfig.json +0 -14
  615. package/viewer/dist/index.html +0 -93
  616. package/viewer/dist/main.js +0 -76
  617. package/viewer/tsconfig.json +0 -13
@@ -1,337 +0,0 @@
1
- import { afterEach, describe, expect, test } from 'bun:test'
2
- import { randomUUID } from 'node:crypto'
3
- import {
4
- existsSync,
5
- mkdirSync,
6
- mkdtempSync,
7
- readFileSync,
8
- readdirSync,
9
- rmSync,
10
- writeFileSync,
11
- } from 'node:fs'
12
- import { tmpdir } from 'node:os'
13
- import { join } from 'node:path'
14
-
15
- import type { AgentRun } from '../../../shared/types'
16
-
17
- import { registerDomain, unregisterDomain, type DomainHandle } from '../../domain'
18
- import { readComments, upsertComment } from '../../state/comments'
19
- import { updateSettings } from '../../state/settings'
20
- import { handleBridge } from '../bridge/routes'
21
- import { readConversation, saveConversation } from '../conversation'
22
- import { setHarnessGateway } from '../harness/gateway/config'
23
- import {
24
- cancelRun,
25
- getSnapshot,
26
- isRunning,
27
- resetConversation,
28
- setSessionId,
29
- submitRun,
30
- } from './coordinator'
31
-
32
- const roots: string[] = []
33
- const domainIds: string[] = []
34
- const envBefore = {
35
- harness: process.env.DOMAIN_STUDIO_HARNESS,
36
- mode: process.env.DOMAIN_STUDIO_MOCK_MODE,
37
- delay: process.env.DOMAIN_STUDIO_MOCK_DELAY_MS,
38
- model: process.env.DOMAIN_STUDIO_MOCK_EXPECT_MODEL,
39
- }
40
-
41
- function restoreEnv(name: keyof typeof envBefore, variable: string): void {
42
- const value = envBefore[name]
43
- if (value === undefined) delete process.env[variable]
44
- else process.env[variable] = value
45
- }
46
-
47
- afterEach(() => {
48
- restoreEnv('harness', 'DOMAIN_STUDIO_HARNESS')
49
- restoreEnv('mode', 'DOMAIN_STUDIO_MOCK_MODE')
50
- restoreEnv('delay', 'DOMAIN_STUDIO_MOCK_DELAY_MS')
51
- restoreEnv('model', 'DOMAIN_STUDIO_MOCK_EXPECT_MODEL')
52
- while (domainIds.length) unregisterDomain(domainIds.pop()!)
53
- while (roots.length) rmSync(roots.pop()!, { recursive: true, force: true })
54
- })
55
-
56
- function fixture(): DomainHandle {
57
- const root = mkdtempSync(join(tmpdir(), `studio-runner-${randomUUID()}-`))
58
- roots.push(root)
59
- mkdirSync(join(root, 'schema'))
60
- writeFileSync(join(root, 'astrale.config.ts'), 'export default {}\n')
61
- writeFileSync(join(root, 'application.ts'), 'export default {}\n')
62
- writeFileSync(join(root, 'schema/index.ts'), 'export const Test = {}\n')
63
- const handle = registerDomain(root)!
64
- domainIds.push(handle.id)
65
- return handle
66
- }
67
-
68
- function bridgeFiles(root: string): string[] {
69
- const dir = join(root, '.domain-studio', '.cache', 'agent')
70
- if (!existsSync(dir)) return []
71
- return readdirSync(dir).filter((file) => file.startsWith('bridge-'))
72
- }
73
-
74
- async function waitForTerminal(domainId: string): Promise<AgentRun> {
75
- for (let i = 0; i < 200; i++) {
76
- const run = (await getSnapshot(domainId)).run
77
- if (run && !['queued', 'running'].includes(run.status)) return run
78
- await Bun.sleep(25)
79
- }
80
- throw new Error(`timed out waiting for ${domainId}`)
81
- }
82
-
83
- function useMock(mode = 'normal', delay = '0'): void {
84
- process.env.DOMAIN_STUDIO_HARNESS = 'mock'
85
- process.env.DOMAIN_STUDIO_MOCK_MODE = mode
86
- process.env.DOMAIN_STUDIO_MOCK_DELAY_MS = delay
87
- }
88
-
89
- describe.serial('agent runner invariants', () => {
90
- test('passes the selected harness model into the turn and its persisted prompt snapshot', async () => {
91
- useMock()
92
- const handle = fixture()
93
- process.env.DOMAIN_STUDIO_MOCK_EXPECT_MODEL = 'mock-domain-model'
94
- updateSettings(handle.root, { agentModels: { mock: 'mock-domain-model' } })
95
-
96
- await submitRun(handle, () => {}, { message: 'use the selected model' })
97
- const run = await waitForTerminal(handle.id)
98
-
99
- expect(run.status).toBe('succeeded')
100
- expect(run.prompt?.model).toBe('mock-domain-model')
101
- })
102
-
103
- test('reserves setup synchronously and starts exactly one turn', async () => {
104
- useMock()
105
- const handle = fixture()
106
-
107
- const first = submitRun(handle, () => {}, { message: 'first' })
108
- expect(isRunning(handle.id)).toBe(true)
109
- expect(setSessionId(handle.id, 'hijack')).toBe(false)
110
- expect(resetConversation(handle.id)).toBe(false)
111
-
112
- const second = await submitRun(handle, () => {}, { message: 'second' })
113
- expect(second).toEqual({ error: 'an agent run is already in progress for this domain' })
114
- expect((await first).run?.status).toBe('running')
115
- const completed = await waitForTerminal(handle.id)
116
- expect(completed.status).toBe('succeeded')
117
- expect(readConversation(handle.root, 'mock')).toMatchObject({
118
- sessionId: 'mock-session',
119
- turns: 1,
120
- })
121
- expect(isRunning(handle.id)).toBe(false)
122
- expect(bridgeFiles(handle.root)).toEqual([])
123
- })
124
-
125
- test('can cancel a reserved turn before the harness launches', async () => {
126
- useMock()
127
- const handle = fixture()
128
-
129
- const pending = submitRun(handle, () => {}, { message: 'cancel setup' })
130
- expect(isRunning(handle.id)).toBe(true)
131
- expect(cancelRun(handle.id)).toBe(true)
132
- expect(await pending).toEqual({ error: 'agent run canceled during setup' })
133
- expect(isRunning(handle.id)).toBe(false)
134
- expect(readConversation(handle.root, 'mock').sessionId).toBeUndefined()
135
- expect(bridgeFiles(handle.root)).toEqual([])
136
- })
137
-
138
- test('notification failures cannot strand a running domain lock', async () => {
139
- useMock()
140
- const handle = fixture()
141
- const started = await submitRun(
142
- handle,
143
- () => {
144
- throw new Error('listener failed')
145
- },
146
- { message: 'keep running' },
147
- )
148
-
149
- expect(started.run?.status).toBe('running')
150
- expect((await waitForTerminal(handle.id)).status).toBe('succeeded')
151
- expect(isRunning(handle.id)).toBe(false)
152
- })
153
-
154
- test('recovers a stale selected-harness session as one fresh first turn', async () => {
155
- useMock('resumefail')
156
- const handle = fixture()
157
- process.env.DOMAIN_STUDIO_MOCK_EXPECT_MODEL = 'mock-recovery-model'
158
- updateSettings(handle.root, { agentModels: { mock: 'mock-recovery-model' } })
159
- setHarnessGateway(handle.root, {
160
- scope: 'domain',
161
- config: {
162
- enabled: true,
163
- baseUrl: 'https://gateway.invalid/v1/models/test',
164
- auth: { mode: 'host' },
165
- },
166
- })
167
- saveConversation(handle.root, 'mock', {
168
- sessionId: 'stale-session',
169
- turns: 7,
170
- updatedAt: 'before',
171
- })
172
-
173
- const started = await submitRun(handle, () => {}, { message: 'continue safely' })
174
- expect(started.run?.harness).toBe('mock')
175
- const run = await waitForTerminal(handle.id)
176
-
177
- expect(run).toMatchObject({
178
- status: 'succeeded',
179
- sessionId: 'mock-session',
180
- resumed: false,
181
- })
182
- expect(run.prompt).toMatchObject({
183
- firstTurn: true,
184
- resumed: false,
185
- sessionId: undefined,
186
- model: 'mock-recovery-model',
187
- })
188
- expect(run.events.map((event) => event.text)).toContain(
189
- 'previous conversation was no longer available — started a new one',
190
- )
191
- expect(readConversation(handle.root, 'mock')).toMatchObject({
192
- sessionId: 'mock-session',
193
- turns: 1,
194
- })
195
- expect(bridgeFiles(handle.root)).toEqual([])
196
- })
197
-
198
- test('does not replay a rejected resume after observable activity', async () => {
199
- useMock('resumefailafterevent')
200
- const handle = fixture()
201
- saveConversation(handle.root, 'mock', {
202
- sessionId: 'stale-session',
203
- turns: 2,
204
- updatedAt: 'before',
205
- })
206
-
207
- await submitRun(handle, () => {}, { message: 'continue once' })
208
- const run = await waitForTerminal(handle.id)
209
-
210
- expect(run).toMatchObject({
211
- status: 'failed',
212
- sessionId: undefined,
213
- resumed: false,
214
- error:
215
- 'the previous conversation was rejected after observable activity — Studio did not retry automatically to avoid duplicating work',
216
- })
217
- expect(run.events.filter((event) => event.kind === 'tool')).toHaveLength(1)
218
- expect(readConversation(handle.root, 'mock').sessionId).toBeUndefined()
219
- })
220
-
221
- test('cancellation skips partial replies, preserves the session, cleans up, and permits retry', async () => {
222
- useMock('normal', '5000')
223
- const handle = fixture()
224
- const comment = upsertComment(handle.root, {
225
- anchors: ['Test'],
226
- anchorRefs: [{ ref: 'class.Test', kind: 'schema' }],
227
- text: 'keep this open if canceled',
228
- })
229
- saveConversation(handle.root, 'mock', {
230
- sessionId: 'stable-session',
231
- turns: 2,
232
- updatedAt: 'before',
233
- })
234
-
235
- const started = await submitRun(handle, () => {})
236
- expect(started.run?.status).toBe('running')
237
- const bridgeFile = bridgeFiles(handle.root)[0]!
238
- const { token } = JSON.parse(
239
- readFileSync(join(handle.root, '.domain-studio', '.cache', 'agent', bridgeFile), 'utf8'),
240
- ) as { token: string }
241
- expect(cancelRun(handle.id)).toBe(true)
242
- expect(
243
- (await handleBridge(handle, 'threads', new Request('http://studio.test'), { token })).status,
244
- ).toBe(401)
245
- const canceled = await waitForTerminal(handle.id)
246
-
247
- expect(canceled.status).toBe('canceled')
248
- expect(readConversation(handle.root, 'mock')).toMatchObject({
249
- sessionId: 'stable-session',
250
- turns: 2,
251
- })
252
- expect(readComments(handle.root).comments.find((item) => item.id === comment.id)).toMatchObject(
253
- {
254
- status: 'open',
255
- thread: [{ role: 'user', text: 'keep this open if canceled' }],
256
- },
257
- )
258
- expect(bridgeFiles(handle.root)).toEqual([])
259
- expect(isRunning(handle.id)).toBe(false)
260
-
261
- process.env.DOMAIN_STUDIO_MOCK_DELAY_MS = '0'
262
- const retry = await submitRun(handle, () => {}, { message: 'retry' })
263
- expect(retry.run?.status).toBe('running')
264
- expect((await waitForTerminal(handle.id)).status).toBe('succeeded')
265
- })
266
-
267
- test('harness throws and malformed final replies fail without changing the prior session', async () => {
268
- useMock('error')
269
- const handle = fixture()
270
- const comment = upsertComment(handle.root, {
271
- anchors: ['Test'],
272
- anchorRefs: [{ ref: 'class.Test', kind: 'schema' }],
273
- text: 'do not merge failed output',
274
- })
275
- saveConversation(handle.root, 'mock', {
276
- sessionId: 'stable-session',
277
- turns: 4,
278
- updatedAt: 'before',
279
- })
280
-
281
- await submitRun(handle, () => {})
282
- const thrown = await waitForTerminal(handle.id)
283
- expect(thrown).toMatchObject({
284
- status: 'failed',
285
- error: 'mock harness failure (test)',
286
- })
287
- expect(readConversation(handle.root, 'mock')).toMatchObject({
288
- sessionId: 'stable-session',
289
- turns: 4,
290
- })
291
- expect(
292
- readComments(handle.root).comments.find((item) => item.id === comment.id)?.thread,
293
- ).toHaveLength(1)
294
- expect(bridgeFiles(handle.root)).toEqual([])
295
-
296
- process.env.DOMAIN_STUDIO_MOCK_MODE = 'badblock'
297
- await submitRun(handle, () => {})
298
- const malformed = await waitForTerminal(handle.id)
299
- expect(malformed.status).toBe('failed')
300
- expect(malformed.error).toContain('malformed JSON')
301
- expect(readConversation(handle.root, 'mock')).toMatchObject({
302
- sessionId: 'stable-session',
303
- turns: 4,
304
- })
305
- expect(
306
- readComments(handle.root).comments.find((item) => item.id === comment.id)?.thread,
307
- ).toHaveLength(1)
308
- expect(bridgeFiles(handle.root)).toEqual([])
309
- })
310
-
311
- test('dedupes an echoed live reply while still merging distinct final detail', async () => {
312
- useMock('liveandblockdifferent')
313
- const handle = fixture()
314
- const comment = upsertComment(handle.root, {
315
- anchors: ['Test'],
316
- anchorRefs: [{ ref: 'class.Test', kind: 'schema' }],
317
- text: 'answer live and in the final block',
318
- })
319
- expect(readComments(handle.root).comments.map((item) => item.id)).toEqual([comment.id])
320
-
321
- await submitRun(handle, () => {})
322
- const run = await waitForTerminal(handle.id)
323
- expect(run).toMatchObject({
324
- status: 'succeeded',
325
- liveReplies: 1,
326
- merge: { merged: 1, closed: 0 },
327
- })
328
- const saved = readComments(handle.root).comments.find((item) => item.id === comment.id)!
329
- expect(saved.status).toBe('closed')
330
- expect(saved.thread.map((entry) => `${entry.role}:${entry.text}`)).toEqual([
331
- 'user:answer live and in the final block',
332
- 'author:Acknowledged. (mock agent)',
333
- 'author:Additional final detail. (mock agent)',
334
- ])
335
- expect(bridgeFiles(handle.root)).toEqual([])
336
- })
337
- })
@@ -1,104 +0,0 @@
1
- import type {
2
- AgentRun,
3
- AgentRunSnapshot,
4
- ConversationInfo,
5
- StudioEvent,
6
- } from '../../../shared/types'
7
- import type { DomainHandle } from '../../domain'
8
-
9
- import { getDomain } from '../../domain'
10
- import {
11
- clearConversation,
12
- conversationInfo,
13
- sessionInfo,
14
- setConversationSession,
15
- } from '../conversation'
16
- import { getHarness } from '../harness/selection'
17
- import { emitStudioEvent } from '../notify'
18
- import { completeRun } from './completion'
19
- import {
20
- attachCancellation,
21
- cancelActiveRun,
22
- currentRun,
23
- hydrateRun,
24
- isRunActive,
25
- releasePreparation,
26
- reserveRun,
27
- setCurrentRun,
28
- } from './live-state'
29
- import { prepareRun, type SubmitOpts } from './preparation'
30
- import { persistRun } from './transcript'
31
-
32
- function conversationOf(root: string): ConversationInfo {
33
- const harness = getHarness(root)
34
- return conversationInfo(root, harness.id)
35
- }
36
-
37
- export function isRunning(domainId: string): boolean {
38
- return isRunActive(domainId)
39
- }
40
-
41
- export async function getSnapshot(domainId: string): Promise<AgentRunSnapshot> {
42
- const handle = getDomain(domainId)
43
- const harness = getHarness(handle?.root ?? process.cwd())
44
- if (handle) hydrateRun(domainId, handle.root)
45
- return {
46
- harness: harness.id,
47
- available: await harness.isAvailable(),
48
- run: currentRun(domainId) ?? null,
49
- conversation: handle ? conversationOf(handle.root) : { active: false, turns: 0 },
50
- }
51
- }
52
-
53
- export function cancelRun(domainId: string): boolean {
54
- return cancelActiveRun(domainId)
55
- }
56
-
57
- export function resetConversation(domainId: string): boolean {
58
- const handle = getDomain(domainId)
59
- if (!handle || isRunActive(domainId)) return false
60
- clearConversation(handle.root, getHarness(handle.root).id)
61
- return true
62
- }
63
-
64
- export function getSessionId(domainId: string): {
65
- sessionId: string | null
66
- turns: number
67
- harness?: string
68
- } {
69
- const handle = getDomain(domainId)
70
- if (!handle) return { sessionId: null, turns: 0 }
71
- return sessionInfo(handle.root, getHarness(handle.root).id)
72
- }
73
-
74
- export function setSessionId(domainId: string, sessionId: string): boolean {
75
- const handle = getDomain(domainId)
76
- if (!handle || isRunActive(domainId)) return false
77
- const harness = getHarness(handle.root)
78
- const trimmed = sessionId.trim()
79
- if (!trimmed) clearConversation(handle.root, harness.id)
80
- else setConversationSession(handle.root, harness.id, trimmed)
81
- return true
82
- }
83
-
84
- export async function submitRun(
85
- handle: DomainHandle,
86
- notify: (event: StudioEvent) => void,
87
- options?: SubmitOpts,
88
- ): Promise<{ run?: AgentRun; error?: string }> {
89
- const controller = reserveRun(handle.id)
90
- if (!controller) return { error: 'an agent run is already in progress for this domain' }
91
- try {
92
- const result = await prepareRun(handle, notify, controller, options)
93
- if ('error' in result) return result
94
- const { prepared } = result
95
- attachCancellation(handle.id, controller, prepared.bridge.dispose)
96
- setCurrentRun(prepared.run)
97
- persistRun(prepared.root, prepared.run)
98
- emitStudioEvent(notify, { type: 'agent-run', domainId: handle.id, run: prepared.run })
99
- void completeRun(prepared, controller, notify)
100
- return { run: prepared.run }
101
- } finally {
102
- releasePreparation(handle.id, controller)
103
- }
104
- }
@@ -1,73 +0,0 @@
1
- import type { AgentRun } from '../../../shared/types'
2
-
3
- import { readLastRun } from './transcript'
4
-
5
- const runs = new Map<string, AgentRun>()
6
- const controllers = new Map<string, AbortController>()
7
- const cancellation = new Map<string, () => void>()
8
- const starting = new Set<string>()
9
- const hydrated = new Set<string>()
10
-
11
- export function currentRun(domainId: string): AgentRun | undefined {
12
- return runs.get(domainId)
13
- }
14
-
15
- export function setCurrentRun(run: AgentRun): void {
16
- runs.set(run.domainId, run)
17
- }
18
-
19
- export function isRunActive(domainId: string): boolean {
20
- const status = runs.get(domainId)?.status
21
- return starting.has(domainId) || status === 'running' || status === 'queued'
22
- }
23
-
24
- /** Reserve a domain synchronously before asynchronous run preparation begins. */
25
- export function reserveRun(domainId: string): AbortController | null {
26
- if (isRunActive(domainId)) return null
27
- const controller = new AbortController()
28
- starting.add(domainId)
29
- controllers.set(domainId, controller)
30
- return controller
31
- }
32
-
33
- export function releasePreparation(domainId: string, controller: AbortController): void {
34
- starting.delete(domainId)
35
- if (controllers.get(domainId) === controller && !isRunActive(domainId)) {
36
- controllers.delete(domainId)
37
- cancellation.delete(domainId)
38
- }
39
- }
40
-
41
- export function attachCancellation(
42
- domainId: string,
43
- controller: AbortController,
44
- cancel: () => void,
45
- ): void {
46
- if (controllers.get(domainId) === controller) cancellation.set(domainId, cancel)
47
- }
48
-
49
- export function releaseController(domainId: string, controller: AbortController): void {
50
- if (controllers.get(domainId) === controller) {
51
- controllers.delete(domainId)
52
- cancellation.delete(domainId)
53
- }
54
- }
55
-
56
- export function cancelActiveRun(domainId: string): boolean {
57
- const controller = controllers.get(domainId)
58
- if (!controller) return false
59
- controller.abort()
60
- try {
61
- cancellation.get(domainId)?.()
62
- } catch {
63
- /* cancellation must still succeed */
64
- }
65
- return true
66
- }
67
-
68
- export function hydrateRun(domainId: string, root: string): void {
69
- if (hydrated.has(domainId) || runs.has(domainId)) return
70
- hydrated.add(domainId)
71
- const last = readLastRun(domainId, root)
72
- if (last) runs.set(domainId, last)
73
- }
@@ -1,163 +0,0 @@
1
- import { randomUUID } from 'node:crypto'
2
-
3
- import type {
4
- AgentPromptSnapshot,
5
- AgentRun,
6
- AgentEffort,
7
- Comment,
8
- StudioEvent,
9
- StudioSettings,
10
- } from '../../../shared/types'
11
- import type { DomainHandle } from '../../domain'
12
- import type { Bridge } from '../bridge/grant'
13
- import type { AgentHarness } from '../harness/adapter'
14
-
15
- import { getBundle } from '../../cache'
16
- import { refreshAuto } from '../../handoff/service'
17
- import { readComments } from '../../state/comments'
18
- import { readContext } from '../../state/context'
19
- import { listDocuments } from '../../state/documents'
20
- import { startBridge } from '../bridge/grant'
21
- import { readConversation } from '../conversation'
22
- import { getHarness, resolveHarnessConfiguration } from '../harness/selection'
23
- import { buildSystemPrompt } from '../prompts/system'
24
- import { buildResumePrompt, buildTurnPrompt } from '../prompts/turn'
25
- import { studioSessionId } from '../telemetry'
26
-
27
- export interface SubmitOpts {
28
- message?: string
29
- resume?: boolean
30
- }
31
-
32
- export interface PreparedRun {
33
- domainId: string
34
- root: string
35
- harness: AgentHarness
36
- settings: StudioSettings
37
- session: ReturnType<typeof readConversation>
38
- resume?: string
39
- renderFingerprint: string
40
- model?: string
41
- effort?: AgentEffort
42
- harnessEnv: Record<string, string>
43
- bridge: Bridge
44
- run: AgentRun
45
- promptSnapshot(sessionId: string | undefined, firstTurn: boolean): AgentPromptSnapshot
46
- }
47
-
48
- export type PreparationResult = { prepared: PreparedRun } | { error: string }
49
-
50
- function awaitingThreads(root: string): Comment[] {
51
- return readComments(root).comments.filter(
52
- (comment) => comment.status === 'open' && comment.thread.at(-1)?.role !== 'author',
53
- )
54
- }
55
-
56
- /** Gather and freeze every input required to start one agent run. */
57
- export async function prepareRun(
58
- handle: DomainHandle,
59
- notify: (event: StudioEvent) => void,
60
- controller: AbortController,
61
- options?: SubmitOpts,
62
- ): Promise<PreparationResult> {
63
- const domainId = handle.id
64
- const root = handle.root
65
- const harness = getHarness(root)
66
- const available = await harness.isAvailable(controller.signal)
67
- if (controller.signal.aborted) return { error: 'agent run canceled during setup' }
68
- if (!available) return { error: `${harness.label} is not available on this machine` }
69
-
70
- const session = readConversation(root, harness.id)
71
- const resume = session.sessionId
72
- const bareResume = options?.resume === true && !!resume
73
- const awaiting = awaitingThreads(root)
74
- const message = (options?.message ?? '').trim()
75
- if (!bareResume && awaiting.length === 0 && !message)
76
- return { error: 'nothing to send — type an instruction or open a thread' }
77
-
78
- await refreshAuto(handle).catch(() => {})
79
- if (controller.signal.aborted) return { error: 'agent run canceled during setup' }
80
- const bundle = await getBundle(domainId)
81
- if (controller.signal.aborted) return { error: 'agent run canceled during setup' }
82
-
83
- const renderFingerprint = bundle?.renderFingerprint ?? ''
84
- const context = readContext(root)
85
- const documents = listDocuments(root)
86
- const configuration = await resolveHarnessConfiguration(root, harness)
87
- if (!configuration.ok) return { error: `model gateway auth failed — ${configuration.error}` }
88
- const { settings, model, effort, env } = configuration.configuration
89
- if (controller.signal.aborted) return { error: 'agent run canceled during setup' }
90
-
91
- const harnessEnv = { ...env, ASTRALE_SESSION: studioSessionId(domainId) }
92
- const bridge = startBridge(handle, notify)
93
- const makeTurn = (firstTurn: boolean) =>
94
- bareResume && !firstTurn
95
- ? buildResumePrompt()
96
- : buildTurnPrompt({
97
- origin: bundle?.overlay.origin ?? domainId,
98
- root,
99
- renderFingerprint,
100
- schemaRevision: bundle?.schemaRevision,
101
- awaitingThreads: awaiting,
102
- userContext: context.user,
103
- autoContext: context.auto.filter((item) => item.includeInHandoff),
104
- documents,
105
- firstTurn,
106
- message,
107
- ir: bundle?.ir ?? null,
108
- overlay: bundle?.overlay,
109
- })
110
- const systemPrompt = buildSystemPrompt({ bridge: bridge.enabled })
111
- const promptSnapshot = (
112
- sessionId: string | undefined,
113
- firstTurn: boolean,
114
- ): AgentPromptSnapshot => ({
115
- createdAt: new Date().toISOString(),
116
- systemPrompt,
117
- turnPrompt: makeTurn(firstTurn),
118
- firstTurn,
119
- resumed: !!sessionId,
120
- sessionId,
121
- model,
122
- effort,
123
- access: settings.agentAccess,
124
- mcpTools: bridge.mcpServers.flatMap((server) => server.enabledTools ?? []),
125
- })
126
- const run: AgentRun = {
127
- id: randomUUID(),
128
- domainId,
129
- harness: harness.id,
130
- status: 'running',
131
- createdAt: new Date().toISOString(),
132
- summary: bareResume
133
- ? 'continuing after interruption'
134
- : message
135
- ? message.slice(0, 60) + (message.length > 60 ? '…' : '')
136
- : awaiting.length === 1
137
- ? '1 open thread'
138
- : `${awaiting.length} open threads`,
139
- targetCommentIds: awaiting.map((comment) => comment.id),
140
- events: [],
141
- sessionId: resume,
142
- resumed: !!resume,
143
- prompt: promptSnapshot(resume, !resume),
144
- }
145
-
146
- return {
147
- prepared: {
148
- domainId,
149
- root,
150
- harness,
151
- settings,
152
- session,
153
- resume,
154
- renderFingerprint,
155
- model,
156
- effort,
157
- harnessEnv,
158
- bridge,
159
- run,
160
- promptSnapshot,
161
- },
162
- }
163
- }