@astrale-os/cli 1.0.0-beta.2 → 1.0.0-beta.20

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 (282) hide show
  1. package/README.md +16 -1
  2. package/dist/astrale.js +51105 -58057
  3. package/dist/public/connect-core.js +2085 -30702
  4. package/dist/public/keys/index.js +884 -29476
  5. package/dist/public/paths/index.js +13101 -41452
  6. package/dist/types/admin/contract.d.ts +26 -0
  7. package/dist/types/admin/instance/client.d.ts +20 -0
  8. package/dist/types/admin/instance/index.d.ts +2 -0
  9. package/dist/types/admin/instance/model.d.ts +6 -10
  10. package/dist/types/connection/auth.d.ts +3 -0
  11. package/dist/types/connection/call.d.ts +3 -0
  12. package/dist/types/connection/command.d.ts +27 -0
  13. package/dist/types/connection/credential.d.ts +14 -0
  14. package/dist/types/connection/errors.d.ts +1 -0
  15. package/dist/types/connection/exchange.d.ts +9 -0
  16. package/dist/types/connection/failure/classify.d.ts +2 -0
  17. package/dist/types/connection/failure/index.d.ts +5 -0
  18. package/dist/types/connection/failure/model.d.ts +25 -0
  19. package/dist/types/connection/failure/render.d.ts +3 -0
  20. package/dist/types/connection/index.d.ts +8 -0
  21. package/dist/types/connection/reasons.d.ts +37 -0
  22. package/dist/types/connection/self.d.ts +37 -0
  23. package/dist/types/connection/session.d.ts +31 -0
  24. package/dist/types/connection/target.d.ts +38 -0
  25. package/dist/types/errors.d.ts +1 -1
  26. package/dist/types/lib/admin-instance.d.ts +17 -0
  27. package/dist/types/lib/admin-target.d.ts +11 -36
  28. package/dist/types/lib/config.d.ts +7 -59
  29. package/dist/types/lib/failure-debug.d.ts +1 -0
  30. package/dist/types/lib/idp.d.ts +25 -173
  31. package/dist/types/lib/instance-target.d.ts +1 -1
  32. package/dist/types/lib/instance.d.ts +30 -88
  33. package/dist/types/lib/log.d.ts +5 -3
  34. package/dist/types/lib/output.d.ts +1 -1
  35. package/dist/types/lib/proc.d.ts +43 -0
  36. package/dist/types/lib/self.d.ts +9 -0
  37. package/dist/types/lib/update.d.ts +109 -0
  38. package/dist/types/lib/validation.d.ts +4 -1
  39. package/package.json +15 -20
  40. package/src/__tests__/fixtures/publication.ts +20 -0
  41. package/src/admin/.spec/architecture.md +12 -5
  42. package/src/admin/__tests__/fixture.ts +25 -0
  43. package/src/admin/catalog/.spec/api.d.ts +1 -3
  44. package/src/admin/catalog/.spec/architecture.md +5 -4
  45. package/src/admin/catalog/__tests__/client.test.ts +143 -69
  46. package/src/admin/catalog/client.ts +40 -54
  47. package/src/admin/catalog/model.ts +3 -4
  48. package/src/admin/contract.ts +46 -0
  49. package/src/admin/graph/.spec/api.d.ts +4 -10
  50. package/src/admin/graph/nodes.ts +1 -1
  51. package/src/admin/instance/.spec/api.d.ts +5 -9
  52. package/src/admin/instance/.spec/architecture.md +7 -7
  53. package/src/admin/instance/__tests__/client.test.ts +157 -175
  54. package/src/admin/instance/client.ts +39 -128
  55. package/src/admin/instance/index.ts +1 -2
  56. package/src/admin/instance/model.ts +12 -18
  57. package/src/commands/__tests__/admin-instance.test.ts +11 -8
  58. package/src/commands/__tests__/call-describe.test.ts +46 -33
  59. package/src/commands/__tests__/call.test.ts +34 -0
  60. package/src/commands/__tests__/domain-install-operation.test.ts +7 -22
  61. package/src/commands/__tests__/domain-install-owned.test.ts +1 -1
  62. package/src/commands/__tests__/domain-list.test.ts +5 -25
  63. package/src/commands/__tests__/install-direct.test.ts +115 -8
  64. package/src/commands/__tests__/install-identity-override.test.ts +3 -14
  65. package/src/commands/__tests__/instance-list-rows.test.ts +1 -1
  66. package/src/commands/__tests__/instance-status.test.ts +139 -0
  67. package/src/commands/__tests__/introspect-parse.test.ts +80 -1
  68. package/src/commands/__tests__/logs.test.ts +250 -2
  69. package/src/commands/__tests__/read-commands.test.ts +62 -10
  70. package/src/commands/__tests__/token-ttl.test.ts +49 -4
  71. package/src/commands/__tests__/update.test.ts +25 -3
  72. package/src/commands/__tests__/view.test.ts +49 -0
  73. package/src/commands/call-describe.ts +60 -68
  74. package/src/commands/call.ts +71 -59
  75. package/src/commands/domain/install.ts +54 -35
  76. package/src/commands/domain/list.ts +1 -1
  77. package/src/commands/domain/publish.ts +14 -11
  78. package/src/commands/domain/uninstall.ts +2 -2
  79. package/src/commands/get.ts +14 -15
  80. package/src/commands/identity/__tests__/register.test.ts +3 -3
  81. package/src/commands/identity/register.ts +5 -4
  82. package/src/commands/instance/create.ts +8 -16
  83. package/src/commands/instance/delete.ts +12 -9
  84. package/src/commands/instance/list.ts +2 -2
  85. package/src/commands/instance/status.ts +66 -20
  86. package/src/commands/instance/use.ts +16 -12
  87. package/src/commands/introspect.ts +48 -35
  88. package/src/commands/logs.ts +123 -33
  89. package/src/commands/mutate.ts +6 -5
  90. package/src/commands/query.ts +35 -32
  91. package/src/commands/token.ts +42 -27
  92. package/src/commands/ui/__tests__/commands.test.ts +152 -0
  93. package/src/commands/ui/add.ts +51 -0
  94. package/src/commands/ui/doctor.ts +13 -0
  95. package/src/commands/ui/init.ts +38 -0
  96. package/src/commands/ui/list.ts +26 -0
  97. package/src/commands/ui/preset-apply.ts +19 -0
  98. package/src/commands/ui/preset-list.ts +12 -0
  99. package/src/commands/ui/shared.ts +25 -0
  100. package/src/commands/update.ts +31 -11
  101. package/src/commands/view.ts +82 -37
  102. package/src/connection/.spec/api.d.ts +7 -8
  103. package/src/connection/.spec/architecture.md +5 -4
  104. package/src/connection/.spec/flows/session.ts +2 -2
  105. package/src/connection/.spec/laws/connection.ts +6 -2
  106. package/src/connection/.spec/layout.ts +1 -0
  107. package/src/connection/__tests__/credential.test.ts +20 -1
  108. package/src/connection/__tests__/errors.test.ts +27 -20
  109. package/src/connection/__tests__/exchange.test.ts +30 -1
  110. package/src/connection/__tests__/failure-fixtures.ts +39 -0
  111. package/src/connection/__tests__/failure-safety.test.ts +75 -0
  112. package/src/connection/__tests__/self.test.ts +31 -11
  113. package/src/connection/__tests__/session.test.ts +3 -3
  114. package/src/connection/__tests__/target.test.ts +1 -0
  115. package/src/connection/auth.ts +13 -0
  116. package/src/connection/call.ts +1 -1
  117. package/src/connection/credential.ts +2 -2
  118. package/src/connection/errors.ts +1 -355
  119. package/src/connection/exchange.ts +47 -23
  120. package/src/connection/failure/classify.ts +110 -0
  121. package/src/connection/failure/index.ts +18 -0
  122. package/src/connection/failure/model.ts +28 -0
  123. package/src/connection/failure/render.ts +116 -0
  124. package/src/connection/reasons.ts +16 -0
  125. package/src/connection/self.ts +39 -21
  126. package/src/connection/session.ts +19 -8
  127. package/src/errors.ts +3 -2
  128. package/src/graph/.spec/api.d.ts +12 -5
  129. package/src/graph/.spec/layout.ts +9 -1
  130. package/src/graph/__tests__/mutation.test.ts +2 -2
  131. package/src/graph/__tests__/query.test.ts +25 -6
  132. package/src/graph/class.ts +30 -0
  133. package/src/graph/index.ts +1 -0
  134. package/src/graph/query.ts +21 -32
  135. package/src/identity/.spec/api.d.ts +2 -2
  136. package/src/identity/__tests__/registration.test.ts +1 -1
  137. package/src/identity/registration.ts +3 -3
  138. package/src/keys/__tests__/keys.test.ts +4 -0
  139. package/src/keys/credential.ts +1 -0
  140. package/src/lib/__tests__/admin-target.test.ts +12 -0
  141. package/src/lib/__tests__/binary.test.ts +16 -1
  142. package/src/lib/__tests__/command-dx.test.ts +1 -1
  143. package/src/lib/__tests__/domain-publication.test.ts +10 -16
  144. package/src/lib/__tests__/idp.test.ts +34 -4
  145. package/src/lib/__tests__/instance-candidates.test.ts +1 -3
  146. package/src/lib/__tests__/instance-target.test.ts +7 -39
  147. package/src/lib/__tests__/log-errors.test.ts +64 -0
  148. package/src/lib/__tests__/studio-server-deps.test.ts +1 -1
  149. package/src/lib/__tests__/update.test.ts +264 -11
  150. package/src/lib/__tests__/view-assets.test.ts +14 -0
  151. package/src/lib/__tests__/view-external-open-intent.test.ts +150 -0
  152. package/src/lib/__tests__/view-external-open-origins.test.ts +27 -0
  153. package/src/lib/__tests__/view-open-intent.test.ts +0 -2
  154. package/src/lib/__tests__/view-server.test.ts +26 -3
  155. package/src/lib/__tests__/view-session.test.ts +2 -1
  156. package/src/lib/admin-instance.ts +14 -8
  157. package/src/lib/admin-target.ts +21 -2
  158. package/src/lib/binary.ts +22 -5
  159. package/src/lib/command-dx.ts +9 -9
  160. package/src/lib/domain-publication.ts +9 -7
  161. package/src/lib/failure-debug.ts +26 -0
  162. package/src/lib/idp.ts +34 -3
  163. package/src/lib/instance-candidates.ts +2 -2
  164. package/src/lib/instance-target.ts +3 -14
  165. package/src/lib/instance.ts +16 -11
  166. package/src/lib/log.ts +16 -9
  167. package/src/lib/output.ts +1 -1
  168. package/src/lib/proc.ts +7 -2
  169. package/src/lib/provision-instance.ts +34 -57
  170. package/src/lib/update.ts +298 -45
  171. package/src/lib/validation.ts +2 -2
  172. package/src/lib/view/assets.ts +11 -2
  173. package/src/lib/view/external-open-intent.ts +41 -0
  174. package/src/lib/view/external-open-origins.ts +37 -0
  175. package/src/lib/view/host-capabilities.ts +17 -0
  176. package/src/lib/view/resolve.ts +1 -1
  177. package/src/lib/view/server.ts +18 -3
  178. package/src/lib/view/session.ts +2 -0
  179. package/src/program/.spec/api.d.ts +1 -0
  180. package/src/program/__tests__/program.test.ts +163 -6
  181. package/src/program/argv.ts +14 -0
  182. package/src/program/build.ts +26 -4
  183. package/src/program/command.ts +1 -0
  184. package/src/program/index.ts +1 -0
  185. package/src/program/registry.ts +2 -1
  186. package/src/setup/__tests__/instance-step.test.ts +27 -10
  187. package/src/setup/steps/instance.ts +22 -15
  188. package/src/telemetry/__tests__/recorder.test.ts +1 -0
  189. package/src/telemetry/recorder.ts +9 -1
  190. package/src/ui/.spec/api.d.ts +14 -0
  191. package/src/ui/.spec/architecture.md +10 -0
  192. package/src/ui/.spec/laws.ts +36 -0
  193. package/src/ui/.spec/layout.ts +16 -0
  194. package/src/ui/__tests__/ui.test.ts +981 -0
  195. package/src/ui/index.ts +13 -0
  196. package/src/ui/lock.ts +87 -0
  197. package/src/ui/model.ts +83 -0
  198. package/src/ui/operations.ts +710 -0
  199. package/src/ui/project.ts +219 -0
  200. package/src/ui/release.ts +321 -0
  201. package/src/ui/runner.ts +18 -0
  202. package/studio/client/dist/assets/elk-api-DjmKsHXc.js +1 -0
  203. package/studio/client/dist/assets/index-7YHdeCxp.js +81 -0
  204. package/studio/client/dist/assets/index-C0FAnwNw.css +2 -0
  205. package/studio/client/dist/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
  206. package/studio/client/dist/assets/schema-studio-BilUNb6Z.css +1 -0
  207. package/studio/client/dist/assets/schema-studio-CABpTfvH.js +8 -0
  208. package/studio/client/dist/index.html +3 -2
  209. package/studio/package.json +7 -13
  210. package/studio/server/agent/ask.test.ts +1 -1
  211. package/studio/server/agent/bridge/grant.test.ts +1 -1
  212. package/studio/server/agent/bridge/routes.test.ts +1 -1
  213. package/studio/server/agent/harness/claude/adapter.test.ts +15 -5
  214. package/studio/server/agent/harness/gateway/token.test.ts +1 -1
  215. package/studio/server/agent/harness/gateway/token.ts +3 -3
  216. package/studio/server/agent/prompts/anchors.test.ts +32 -36
  217. package/studio/server/agent/prompts/anchors.ts +20 -49
  218. package/studio/server/agent/prompts/system.test.ts +3 -2
  219. package/studio/server/agent/prompts/system.ts +3 -3
  220. package/studio/server/agent/routes.test.ts +1 -1
  221. package/studio/server/agent/run/coordinator.test.ts +1 -1
  222. package/studio/server/api/canvas.ts +0 -1
  223. package/studio/server/api-agent-loadout.test.ts +1 -1
  224. package/studio/server/api.test.ts +1 -1
  225. package/studio/server/cache.test.ts +23 -12
  226. package/studio/server/cache.ts +12 -15
  227. package/studio/server/domain.test.ts +50 -68
  228. package/studio/server/domain.ts +82 -63
  229. package/studio/server/handoff/copy.ts +1 -1
  230. package/studio/server/index.ts +1 -1
  231. package/studio/server/instances/probe.test.ts +1 -1
  232. package/studio/server/introspect/anatomy/views/routes.ts +46 -37
  233. package/studio/server/introspect/anatomy/views.ts +9 -14
  234. package/studio/server/introspect/anatomy-extras.test.ts +26 -42
  235. package/studio/server/introspect/anatomy.test.ts +22 -14
  236. package/studio/server/introspect/anatomy.ts +6 -9
  237. package/studio/server/introspect/bundle.ts +0 -3
  238. package/studio/server/introspect/canonical-schema.test.ts +94 -389
  239. package/studio/server/introspect/canonical-schema.ts +227 -457
  240. package/studio/server/introspect/core-extractor.ts +18 -127
  241. package/studio/server/introspect/core.ts +1 -2
  242. package/studio/server/introspect/diff.test.ts +11 -7
  243. package/studio/server/introspect/diff.ts +18 -55
  244. package/studio/server/introspect/extractor.ts +22 -117
  245. package/studio/server/introspect/overlay-tsmorph.test.ts +119 -240
  246. package/studio/server/introspect/overlay.test.ts +26 -54
  247. package/studio/server/introspect/overlay.ts +10 -37
  248. package/studio/server/introspect/revision.test.ts +1 -1
  249. package/studio/server/introspect/revision.ts +1 -1
  250. package/studio/server/introspect/runtime.test.ts +65 -183
  251. package/studio/server/introspect/runtime.ts +8 -25
  252. package/studio/server/introspect/schema-ir-json.test.ts +70 -0
  253. package/studio/server/introspect/schema-ir-json.ts +38 -68
  254. package/studio/server/introspect/schema-refs.test.ts +43 -88
  255. package/studio/server/introspect/schema-refs.ts +14 -49
  256. package/studio/server/introspect/source-overlay/handlers.ts +116 -636
  257. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -3
  258. package/studio/server/introspect/source-overlay/spans.ts +15 -45
  259. package/studio/server/state/baseline.test.ts +14 -9
  260. package/studio/server/state/baseline.ts +3 -5
  261. package/studio/server/state/visibility.ts +1 -5
  262. package/studio/server/views/model.ts +3 -3
  263. package/studio/server/views/target.test.ts +17 -74
  264. package/studio/server/views/target.ts +24 -50
  265. package/studio/server/watch.test.ts +11 -11
  266. package/studio/server/watch.ts +8 -4
  267. package/studio/server/workspace-watch.ts +2 -2
  268. package/studio/shared/contracts/schema.ts +38 -107
  269. package/studio/shared/contracts/surface.test.ts +13 -15
  270. package/studio/shared/contracts/workspace.ts +2 -11
  271. package/studio/shared/schema/identity.test.ts +20 -44
  272. package/studio/shared/schema/identity.ts +9 -23
  273. package/viewer/dist/main.js +30 -51
  274. package/.check-workspace.cjs +0 -40
  275. package/src/admin/binding.ts +0 -168
  276. package/src/commands/__tests__/instance-create-hosts.test.ts +0 -29
  277. package/studio/client/dist/assets/elk-api-lwhFo7vB.js +0 -1
  278. package/studio/client/dist/assets/index-B-c-smo9.js +0 -8
  279. package/studio/client/dist/assets/index-BckHuAWk.js +0 -81
  280. package/studio/client/dist/assets/index-C4aNQ6dz.css +0 -1
  281. package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
  282. package/studio/server/introspect/anatomy/views/legacy.ts +0 -232
@@ -46,7 +46,7 @@ test('reads the discovered client directory', () => {
46
46
  })
47
47
  })
48
48
 
49
- test('resolves views declared in the registry file itself', () => {
49
+ test('does not treat a removed view registry as Schema authority', () => {
50
50
  const root = mkdtempSync(join(tmpdir(), 'studio-inline-view-registry-'))
51
51
  roots.push(root)
52
52
  const viewsDir = join(root, 'views')
@@ -68,29 +68,10 @@ export const views = { services, service }
68
68
  `,
69
69
  )
70
70
 
71
- expect(buildViews(root)).toEqual([
72
- {
73
- slug: 'services',
74
- kind: 'spa',
75
- url: undefined,
76
- file: 'views/index.ts',
77
- auth: 'required',
78
- mount: '/ui/services',
79
- description: 'Browse services.',
80
- },
81
- {
82
- slug: 'service',
83
- kind: 'spa',
84
- url: undefined,
85
- file: 'views/index.ts',
86
- auth: 'required',
87
- mount: '/ui/service',
88
- viewFor: 'CloudflareWorker',
89
- },
90
- ])
71
+ expect(buildViews(root)).toEqual([])
91
72
  })
92
73
 
93
- test('joins canonical Bundle Views with reactFrontend route metadata', () => {
74
+ test('joins canonical Bundle Views with defineFrontend route metadata', () => {
94
75
  const root = mkdtempSync(join(tmpdir(), 'studio-current-react-view-'))
95
76
  roots.push(root)
96
77
  mkdirSync(join(root, 'schema', 'application'), { recursive: true })
@@ -118,11 +99,13 @@ export const schema = defineSchema(ORIGIN, schemaInput)
118
99
  )
119
100
  writeFileSync(
120
101
  join(root, 'views', 'routes.ts'),
121
- `import { reactFrontend, reactRoute } from '@astrale-os/sdk/react'
122
- const routes = {
123
- issue: reactRoute({ path: '/ui/issues/:id', component: { module: './views/issue.tsx' } }),
124
- }
125
- export const frontend = reactFrontend({ schema, routes, entrypoint: 'issue' })
102
+ `import { defineFrontend, vite } from '@astrale-os/sdk/application'
103
+ export const frontend = defineFrontend({
104
+ schema,
105
+ source: vite(),
106
+ routes: { issue: '/ui/issues/:id' },
107
+ entrypoint: 'issue',
108
+ })
126
109
  `,
127
110
  )
128
111
 
@@ -137,7 +120,7 @@ export const frontend = reactFrontend({ schema, routes, entrypoint: 'issue' })
137
120
  kind: 'definition',
138
121
  definitions: [
139
122
  { origin: 'issues.example.dev', kind: 'class', name: 'Issue' },
140
- { origin: 'accounts.example.dev', kind: 'interface', name: 'Group' },
123
+ { origin: 'accounts.example.dev', kind: 'class', name: 'Group' },
141
124
  ],
142
125
  },
143
126
  },
@@ -156,7 +139,7 @@ export const frontend = reactFrontend({ schema, routes, entrypoint: 'issue' })
156
139
  ])
157
140
  })
158
141
 
159
- test('discovers generated frontend routes without deriving canonical View defaults', () => {
142
+ test('discovers Vite frontend default routes from canonical View names', () => {
160
143
  const root = mkdtempSync(join(tmpdir(), 'studio-current-generated-view-'))
161
144
  roots.push(root)
162
145
  mkdirSync(join(root, 'schema'), { recursive: true })
@@ -170,11 +153,10 @@ test('discovers generated frontend routes without deriving canonical View defaul
170
153
  )
171
154
  writeFileSync(
172
155
  join(root, 'views', 'summary', 'index.ts'),
173
- `const source = generatedFrontend({ files: [{ path: 'index.html', content: '<h1>Hi</h1>' }] })
174
- export const frontend = frontendArtifact({
156
+ `const source = vite()
157
+ export const frontend = defineFrontend({
175
158
  schema,
176
159
  source,
177
- routes: { summary: frontendRoute({}) },
178
160
  entrypoint: 'summary',
179
161
  })
180
162
  `,
@@ -191,9 +173,9 @@ export const frontend = frontendArtifact({
191
173
  ).toEqual([
192
174
  {
193
175
  slug: 'summary',
194
- kind: 'inline-html',
176
+ kind: 'spa',
195
177
  auth: 'required',
196
- mount: '/ui/summary',
178
+ mount: '/summary',
197
179
  url: undefined,
198
180
  file: 'views/summary/index.ts',
199
181
  },
@@ -215,12 +197,13 @@ test('canonical Bundle views reject static schema and route-only identities', ()
215
197
  })`,
216
198
  )
217
199
  writeFileSync(
218
- join(root, 'implementation.ts'),
219
- `export const frontend = frontendArtifact({
220
- source: externalFrontend({ href: 'https://shell.example.dev' }),
200
+ join(root, 'application.ts'),
201
+ `export const frontend = defineFrontend({
202
+ schema,
203
+ source: external('https://shell.example.dev'),
221
204
  routes: {
222
- account: frontendRoute({ href: 'https://shell.example.dev/account' }),
223
- routeOnly: frontendRoute({ href: 'https://shell.example.dev/route-only' }),
205
+ account: '/account',
206
+ routeOnly: '/route-only',
224
207
  },
225
208
  })`,
226
209
  )
@@ -251,14 +234,15 @@ test('canonical Bundle views reject static schema and route-only identities', ()
251
234
  description: 'Admitted account view.',
252
235
  viewFor: 'Account',
253
236
  url: 'https://shell.example.dev/account',
254
- file: 'implementation.ts',
237
+ file: 'application.ts',
255
238
  },
256
239
  {
257
240
  slug: 'sourceOnly',
258
- kind: 'unknown',
241
+ kind: 'spa',
259
242
  auth: 'optional',
260
243
  description: 'Admitted source-only view.',
261
- file: 'schema/index.ts',
244
+ url: 'https://shell.example.dev/source-only',
245
+ file: 'application.ts',
262
246
  },
263
247
  ])
264
248
  expect(buildViews(root, 'schema', {})).toEqual([])
@@ -6,28 +6,36 @@ import { join } from 'node:path'
6
6
  import { buildAnatomy } from './anatomy'
7
7
 
8
8
  const roots: string[] = []
9
-
10
9
  afterEach(() => {
11
10
  for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true })
12
11
  })
13
12
 
14
- function project(entry: 'implementation.ts' | 'domain.ts') {
15
- const root = mkdtempSync(join(tmpdir(), 'studio-anatomy-entry-'))
13
+ function project(nested: boolean) {
14
+ const root = mkdtempSync(join(tmpdir(), 'studio-anatomy-application-'))
16
15
  roots.push(root)
17
- mkdirSync(join(root, 'schema'), { recursive: true })
16
+ const owner = nested ? join(root, 'domain') : root
17
+ mkdirSync(join(owner, 'schema'), { recursive: true })
18
18
  writeFileSync(join(root, 'package.json'), '{}\n')
19
- writeFileSync(join(root, 'astrale.config.ts'), 'export default {}\n')
20
- writeFileSync(join(root, entry), 'export const domain = {}\n')
21
- writeFileSync(join(root, 'schema/index.ts'), "defineSchema('example.astrale.ai', {})\n")
22
- return root
19
+ writeFileSync(
20
+ join(root, 'astrale.config.ts'),
21
+ nested
22
+ ? "import application from './domain/application.js'\nexport default { application }\n"
23
+ : 'export default {}\n',
24
+ )
25
+ writeFileSync(join(owner, 'application.ts'), 'export const application = {}\n')
26
+ writeFileSync(
27
+ join(owner, 'schema/index.ts'),
28
+ "defineSchema('example.astrale.ai', { classes: {} })\n",
29
+ )
30
+ return { root, schemaDirName: nested ? 'domain/schema' : 'schema' }
23
31
  }
24
32
 
25
- test('overview anchors current projects to implementation.ts', () => {
26
- const anatomy = buildAnatomy({ root: project('implementation.ts'), schemaDirName: 'schema' })
27
- expect(anatomy.overview.compositionFile).toBe('implementation.ts')
33
+ test('overview anchors a root Application', () => {
34
+ const input = project(false)
35
+ expect(buildAnatomy(input).overview.applicationFile).toBe('application.ts')
28
36
  })
29
37
 
30
- test('overview preserves domain.ts as the legacy composition entry', () => {
31
- const anatomy = buildAnatomy({ root: project('domain.ts'), schemaDirName: 'schema' })
32
- expect(anatomy.overview.compositionFile).toBe('domain.ts')
38
+ test('overview preserves the config-imported nested Application path', () => {
39
+ const input = project(true)
40
+ expect(buildAnatomy(input).overview.applicationFile).toBe('domain/application.ts')
33
41
  })
@@ -12,6 +12,7 @@ import { join, relative } from 'node:path'
12
12
 
13
13
  import type { DomainAnatomy, DomainOverview, SchemaIR } from '../../shared/types'
14
14
 
15
+ import { resolveApplicationEntry } from '../domain'
15
16
  import { asJsonRecord, asString, parseJson } from '../json'
16
17
  import { readSettings } from '../state/settings'
17
18
  import { buildClientTree, buildEnvFields, buildViews, findSchemaDefinition } from './anatomy-extras'
@@ -59,15 +60,11 @@ function buildOverview(
59
60
 
60
61
  const config = readConfigPreview(root)
61
62
 
62
- const compositionFile = existsSync(join(root, 'implementation.ts'))
63
- ? 'implementation.ts'
64
- : existsSync(join(root, 'domain.ts'))
65
- ? 'domain.ts'
66
- : undefined
67
- const domainSrc = compositionFile ? readTextSafe(join(root, compositionFile)) : ''
63
+ const application = resolveApplicationEntry(root)
64
+ const applicationSrc = application === null ? '' : readTextSafe(application)
68
65
  const origin =
69
66
  schemaOrigin ??
70
- domainSrc.match(/defineSchema\(\s*['"]([^'"]+)['"]/)?.[1] ??
67
+ applicationSrc.match(/defineSchema\(\s*['"]([^'"]+)['"]/)?.[1] ??
71
68
  readTextSafe(join(root, schemaDirName, 'index.ts')).match(
72
69
  /defineSchema\(\s*['"]([^'"]+)['"]/,
73
70
  )?.[1] ??
@@ -75,11 +72,11 @@ function buildOverview(
75
72
 
76
73
  return {
77
74
  origin,
78
- compositionFile,
75
+ applicationFile:
76
+ application === null ? undefined : relative(root, application).replaceAll('\\', '/'),
79
77
  adapter: config.adapter,
80
78
  prodTarget: config.prodTarget,
81
79
  devSecrets: config.devSecrets,
82
- postInstall: undefined,
83
80
  requires: [],
84
81
  packageName: pkg?.name,
85
82
  packageVersion: pkg?.version,
@@ -18,7 +18,6 @@ export async function buildBundle(handle: DomainHandle): Promise<StudioSchemaBun
18
18
  let schemaRoot: unknown | undefined
19
19
  let schemaMode: StudioSchemaBundle['schemaMode'] = 'unavailable'
20
20
  let schemaRevision: StudioSchemaBundle['schemaRevision']
21
- let importedInterfaces: StudioSchemaBundle['importedInterfaces']
22
21
  let error: StudioSchemaBundle['error'] = null
23
22
  let extractedBy: StudioSchemaBundle['extractedBy'] = 'runtime-bun'
24
23
 
@@ -33,7 +32,6 @@ export async function buildBundle(handle: DomainHandle): Promise<StudioSchemaBun
33
32
  if (r.root !== null) schemaRoot = r.root
34
33
  schemaMode = r.schemaMode
35
34
  if (r.revision !== null) schemaRevision = r.revision
36
- importedInterfaces = r.importedInterfaces
37
35
  } else {
38
36
  error = { message: r.error?.message ?? 'schema failed to compile' }
39
37
  extractedBy = 'static-tsmorph-fallback'
@@ -65,7 +63,6 @@ export async function buildBundle(handle: DomainHandle): Promise<StudioSchemaBun
65
63
  ir,
66
64
  ...(schemaRoot === undefined ? {} : { schemaRoot }),
67
65
  overlay,
68
- importedInterfaces,
69
66
  error,
70
67
  extractedAt: new Date().toISOString(),
71
68
  }