@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
@@ -5,7 +5,7 @@
5
5
  * is owned by `../schema/identity`; SDK admission owns schema semantics.
6
6
  */
7
7
 
8
- import type { IrDefinitionKey, IrDefinitionRef, IrSchemaRef } from '../schema/identity'
8
+ import type { IrClassKey, IrClassRef, IrSchemaRef } from '../schema/identity'
9
9
 
10
10
  export interface JsonSchema {
11
11
  type?: string | string[]
@@ -46,67 +46,27 @@ export type IrCallableOutput =
46
46
  | { mode: 'stream'; item: JsonSchema }
47
47
  | { mode: 'binary' }
48
48
 
49
- export interface IrMethod {
50
- name: string
51
- /** Canonical callable input. Legacy projections expose only `params`. */
52
- input?: JsonSchema
53
- params: Record<string, JsonSchema>
54
- /** Names required by canonical `input.required`; absent on legacy Methods. */
55
- requiredParams?: string[]
56
- /** Canonical discriminated output. Legacy projections expose only `returns`. */
57
- output?: IrCallableOutput
58
- returns: JsonSchema
59
- static: boolean
60
- inheritance: MethodInheritance
61
- description?: string
62
- auth?: IrCallableAuth
63
- policy?: unknown
64
- }
65
-
66
- /** Standalone Domain Function projected into the Studio's callable vocabulary. */
67
- export interface IrFunction {
49
+ export interface IrCallable {
68
50
  name: string
69
51
  input: JsonSchema
70
- params: Record<string, JsonSchema>
71
- /** Names required by canonical `input.required`. */
72
- requiredParams?: string[]
73
52
  output: IrCallableOutput
74
- returns: JsonSchema
75
- /** Standalone Functions have no receiver; these legacy-compatible fields let
76
- * existing callable renderers consume them alongside static Methods. */
77
- static: true
78
- inheritance: 'default'
79
53
  description?: string
80
54
  auth?: IrCallableAuth
81
55
  policy?: unknown
82
56
  }
83
57
 
84
- export interface IrInterface {
85
- type: 'interface'
86
- name: string
87
- /** Canonical declaration owner/family; absent on legacy projections. */
88
- origin?: string
89
- family?: 'node' | 'edge' | 'both'
90
- ref?: IrSchemaRef
91
- extends?: string[]
92
- extendsRefs?: IrSchemaRef[]
93
- properties: Record<string, JsonSchema>
94
- /** Canonical `properties.required`; absence, unlike null, encodes optionality. */
95
- required?: string[]
96
- methods: Record<string, IrMethod>
97
- endpoints?: IrEndpoint[]
98
- orientation?: 'directed' | 'undirected'
99
- constraints?: { noSelf?: true; acyclic?: true }
100
- description?: string
101
- propertyMetadata?: Record<string, unknown>
102
- /** Canonical data declaration; `mediaType` is required and extensions stay lossless. */
103
- data?: { mediaType: string; [key: string]: unknown }
58
+ export interface IrMethod extends IrCallable {
59
+ static: boolean
60
+ inheritance: MethodInheritance
104
61
  }
105
62
 
63
+ /** Standalone DSL callable projected without inventing a receiver. */
64
+ export interface IrFunction extends IrCallable {}
65
+
106
66
  export interface IrEndpoint {
107
67
  name: string
108
68
  types: string[]
109
- /** Exact accepted Definition coordinates. `types` remains for existing UI consumers. */
69
+ /** Exact accepted Definition coordinates. `types` is the local display projection. */
110
70
  refs?: IrSchemaRef[]
111
71
  /** declared multiplicity for this end; max:null = unbounded ("many"). Absent ⇒ unconstrained. */
112
72
  cardinality?: { min: number; max: number | null }
@@ -115,11 +75,10 @@ export interface IrEndpoint {
115
75
  export interface IrClass {
116
76
  type: 'node' | 'edge'
117
77
  name: string
118
- /** Canonical declaration owner/ref; absent on legacy projections. */
119
- origin?: string
120
- ref?: IrSchemaRef
121
- implements?: string[]
122
- implementsRefs?: IrSchemaRef[]
78
+ origin: string
79
+ ref: IrClassRef
80
+ extends?: string[]
81
+ extendsRefs?: IrClassRef[]
123
82
  /** edges only: the two (source,target) endpoints with role names + allowed types */
124
83
  endpoints?: IrEndpoint[]
125
84
  orientation?: 'directed' | 'undirected'
@@ -139,10 +98,8 @@ export interface IrClass {
139
98
 
140
99
  export interface IrImportDescriptor {
141
100
  origin: string
142
- definition: 'interface' | 'class'
143
- ref?: IrDefinitionRef
144
- /** Canonical qualified identity; absent on legacy import descriptors. */
145
- key?: IrDefinitionKey
101
+ ref: IrClassRef
102
+ key: IrClassKey
146
103
  }
147
104
 
148
105
  export type IrViewTarget = { kind: 'domain' } | { kind: 'definition'; definitions: IrSchemaRef[] }
@@ -155,36 +112,26 @@ export interface IrView {
155
112
  }
156
113
 
157
114
  export interface SchemaIR {
115
+ format: 'astrale.dsl'
158
116
  version: string
159
117
  domain: string
160
- /** Canonical document format; absent on legacy projections. */
161
- format?: 'astrale.dsl'
162
- types: Record<string, JsonSchema>
163
- interfaces: Record<string, IrInterface>
164
118
  classes: Record<string, IrClass>
165
- imports: Record<string, IrImportDescriptor>
166
- /**
167
- * Canonical authoritative import index, keyed by `origin:kind.name`.
168
- * `imports` remains the unambiguous short-name compatibility index.
169
- */
170
- importsByKey?: Record<IrDefinitionKey, IrImportDescriptor>
171
- /** Exact imported Interface bodies under the same collision-free identity. */
172
- importedInterfacesByKey?: Record<IrDefinitionKey, IrInterface>
173
- /** Canonical V1 members absent from the legacy serializer projection. */
119
+ importsByKey: Record<IrClassKey, IrImportDescriptor>
120
+ importedClassesByKey: Record<IrClassKey, IrClass>
174
121
  functions: Record<string, IrFunction>
175
- views?: Record<string, IrView>
176
- policies?: Record<string, unknown>
177
- dependencies?: Array<{ origin: string; revision: string }>
178
- /** Exact canonical genesis declaration; absent on legacy projections. */
179
- core?: unknown
122
+ views: Record<string, IrView>
123
+ policies: Record<string, unknown>
124
+ dependencies: Array<{ origin: string; revision: string }>
125
+ core: unknown
180
126
  }
181
127
 
182
128
  export interface HandlerLink {
183
129
  owner: string
184
- ownerKind: 'class' | 'interface' | 'function'
130
+ ownerKind: 'class' | 'function'
131
+ kind: 'action' | 'workflow'
185
132
  method: string
186
133
  static: boolean
187
- /** the legacy runtime registry or current implementation.ts wiring site */
134
+ /** The Runtime registry or one modular Action/Workflow file. */
188
135
  wiringFile?: string
189
136
  wiringLine?: number
190
137
  /** the resolved handler file (followed from the `execute` import) */
@@ -192,14 +139,6 @@ export interface HandlerLink {
192
139
  handlerLine?: number
193
140
  /** kernel ops detected in the handler (::update, ::link, createNode, …) */
194
141
  kernelCalls?: string[]
195
- /** declared auth policy on the runtime config; absent ⇒ defaults to 'required'. */
196
- auth?: 'public' | 'optional' | 'required'
197
- /** Canonical V1 callable auth, when the handler comes from implementation.ts. */
198
- callableAuth?: IrCallableAuth
199
- /** authorize hook shape: 'absent' (none), 'noop' (allow-all), 'custom' (real check). */
200
- authorize?: 'absent' | 'noop' | 'custom'
201
- /** raw source of the authorize hook (for the hover preview). */
202
- authorizeSnippet?: string
203
142
  /** false ⇒ a todo()/NotImplemented stub → "contract-only" badge */
204
143
  implemented: boolean
205
144
  /** true ⇒ resolver could not link a file → "unlinked" badge */
@@ -224,20 +163,19 @@ export interface SchemaAnnotation {
224
163
  export interface CrossDomainImport {
225
164
  name: string
226
165
  origin: string
227
- definition: 'interface' | 'class'
166
+ ref: IrClassRef
228
167
  }
229
168
 
230
169
  export interface SchemaOverlay {
231
170
  origin: string
232
- /** defineDomain({ requires }) — runtime domain dependencies */
171
+ /** Exact declared Domain dependencies. */
233
172
  requires: string[]
234
- /** non-kernel ir.imports → true cross-domain imports */
173
+ /** Non-Kernel imported Classes. */
235
174
  crossDomainImports: CrossDomainImport[]
236
- /** kernel-origin ir.imports mixin interfaces (collapsed chip) */
175
+ /** Kernel base Classes rendered as inherited platform facts. */
237
176
  mixins: CrossDomainImport[]
238
- postInstall?: string
239
177
  handlerLinks: HandlerLink[]
240
- /** keyed by anchor ref (class.X / class.X.property.y / class.X.method.m / edge.e / interface.I…) */
178
+ /** Keyed by Class, Property, Method, Function, Policy, View, or Core anchor. */
241
179
  sourceSpans: Record<string, SourceSpan>
242
180
  annotations: SchemaAnnotation[]
243
181
  }
@@ -251,25 +189,19 @@ export interface StudioSchemaBundle {
251
189
  domainId: string
252
190
  /** UI/cache identity only. This is not the DSL schema revision. */
253
191
  renderFingerprint: string
254
- schemaMode: 'canonical-admitted' | 'canonical-preview' | 'legacy' | 'unavailable'
255
- /** DSL-owned revision, present only after cohort SDK admission. */
192
+ schemaMode: 'canonical-admitted' | 'canonical-preview' | 'unavailable'
193
+ /** DSL-owned revision, present only after installed SDK admission. */
256
194
  schemaRevision?: SchemaRevision
257
195
  extractedBy: 'runtime-bun' | 'static-tsmorph-fallback'
258
196
  depsInstalled: boolean
259
197
  ir: SchemaIR | null
260
198
  /**
261
199
  * Portable canonical V1 document emitted by the domain. `schemaMode` records
262
- * whether the cohort SDK admitted it or Studio is rendering it as a structural
263
- * preview. Kept separate from the lossy render IR; absent for legacy domains.
200
+ * whether the installed SDK admitted it or Studio is rendering it as a structural
201
+ * preview. Kept separate from the lossy render IR.
264
202
  */
265
203
  schemaRoot?: unknown
266
204
  overlay: SchemaOverlay
267
- /**
268
- * Unambiguous short-name aliases for imported Interface bodies, retained for
269
- * legacy renderers. Canonical consumers use `ir.importedInterfacesByKey`, whose
270
- * `origin:interface.Name` keys cannot collide. Empty when deps aren't installed.
271
- */
272
- importedInterfaces?: Record<string, IrInterface>
273
205
  /** present when the runtime import failed to compile (render state, not a crash) */
274
206
  error?: BundleError | null
275
207
  extractedAt: string
@@ -277,12 +209,11 @@ export interface StudioSchemaBundle {
277
209
 
278
210
  export interface DomainOverview {
279
211
  origin: string
280
- /** Active SDK composition entry; `domain.ts` is retained for legacy projects. */
281
- compositionFile?: 'implementation.ts' | 'domain.ts'
212
+ /** Active SDK Application entry relative to the project root. */
213
+ applicationFile?: string
282
214
  adapter: 'astrale' | 'cloudflare' | 'unknown'
283
215
  prodTarget?: string
284
216
  devSecrets?: string
285
- postInstall?: string
286
217
  requires: string[]
287
218
  packageName?: string
288
219
  packageVersion?: string
@@ -427,9 +358,9 @@ export interface StudioCoreNode {
427
358
 
428
359
  /** One materialized edge instance wiring two core nodes. */
429
360
  export interface StudioCoreEdge {
430
- /** source Core path, owning Domain path, or a legacy meta-node endpoint */
361
+ /** source Core path or owning Domain path */
431
362
  from: string
432
- /** target Core path, owning Domain path, or a legacy meta-node endpoint */
363
+ /** target Core path or owning Domain path */
433
364
  to: string
434
365
  /** the IR edge class name (keys into StudioSchemaBundle.ir.classes, type:'edge') */
435
366
  edgeName: string
@@ -6,10 +6,9 @@ import ts from 'typescript'
6
6
  const SHARED_ROOT = resolve(import.meta.dir, '..')
7
7
  const STUDIO_ROOT = resolve(SHARED_ROOT, '..')
8
8
 
9
- // Frozen from HEAD's former monolithic shared/types.ts before it was split.
10
- // Keeping this manifest in the test makes the compatibility proof independent
11
- // of Git and catches any historical symbol silently dropped by a future move.
12
- const HISTORICAL_BARREL_EXPORTS = [
9
+ // Closed Studio V1 shared surface. Keeping this manifest independent of Git
10
+ // catches accidental aliases and shadow contracts.
11
+ const TARGET_BARREL_EXPORTS = [
13
12
  'AGENT_ACCESS_LEVELS',
14
13
  'AGENT_EFFORT_LEVELS',
15
14
  'AgentAccess',
@@ -61,15 +60,15 @@ const HISTORICAL_BARREL_EXPORTS = [
61
60
  'InstancesState',
62
61
  'Integration',
63
62
  'IntegrationsState',
63
+ 'IrCallable',
64
64
  'IrCallableAuth',
65
65
  'IrCallableOutput',
66
66
  'IrClass',
67
- 'IrDefinitionKey',
68
- 'IrDefinitionRef',
67
+ 'IrClassKey',
68
+ 'IrClassRef',
69
69
  'IrEndpoint',
70
70
  'IrFunction',
71
71
  'IrImportDescriptor',
72
- 'IrInterface',
73
72
  'IrMethod',
74
73
  'IrSchemaKey',
75
74
  'IrSchemaRef',
@@ -108,24 +107,23 @@ const HISTORICAL_BARREL_EXPORTS = [
108
107
  'VisibilityState',
109
108
  ] as const
110
109
 
111
- // Deliberate canonical identity/revision helpers added alongside the split.
112
- const INTENTIONAL_BARREL_ADDITIONS = [
110
+ const TARGET_BARREL_HELPERS = [
113
111
  'IR_SCHEMA_REF_KINDS',
114
112
  'IrSchemaRefKind',
115
113
  'STUDIO_SCHEMA_PROJECTION_VERSION',
116
114
  'SchemaRevision',
117
- 'definitionRefKey',
118
- 'isIrDefinitionRef',
119
- 'isIrInterfaceRef',
115
+ 'classRefKey',
116
+ 'isIrClassRef',
120
117
  'isIrSchemaRef',
121
118
  'isSchemaRevision',
122
- 'parseDefinitionRefKey',
119
+ 'parseClassRefKey',
123
120
  'parseSchemaRefKey',
124
121
  'schemaRefKey',
125
122
  ] as const
126
123
 
127
124
  function productionFiles(dir: string): string[] {
128
125
  return readdirSync(dir).flatMap((entry) => {
126
+ if (entry === 'node_modules') return []
129
127
  const path = join(dir, entry)
130
128
  if (statSync(path).isDirectory()) return productionFiles(path)
131
129
  return /\.(?:ts|tsx)$/.test(path) && !/\.test\.(?:ts|tsx)$/.test(path) ? [path] : []
@@ -277,10 +275,10 @@ test('types.ts remains a re-export-only compatibility facade', () => {
277
275
  expect(source.statements.every(ts.isExportDeclaration)).toBe(true)
278
276
  })
279
277
 
280
- test('types.ts exhaustively preserves its historical named export surface', () => {
278
+ test('types.ts exposes exactly the Studio V1 shared surface', () => {
281
279
  const exports = namedExports(join(SHARED_ROOT, 'types.ts'))
282
280
  const duplicates = exports.filter((name, index) => exports.indexOf(name) !== index)
283
- const expected = [...HISTORICAL_BARREL_EXPORTS, ...INTENTIONAL_BARREL_ADDITIONS].sort()
281
+ const expected = [...TARGET_BARREL_EXPORTS, ...TARGET_BARREL_HELPERS].sort()
284
282
 
285
283
  expect(duplicates).toEqual([])
286
284
  expect(exports.sort()).toEqual(expected)
@@ -113,18 +113,12 @@ export interface MergeResult {
113
113
 
114
114
  export type SchemaChangeKind =
115
115
  | 'schema-metadata-changed'
116
- | 'type-added'
117
- | 'type-removed'
118
- | 'type-changed'
119
116
  | 'import-added'
120
117
  | 'import-removed'
121
118
  | 'import-changed'
122
119
  | 'class-added'
123
120
  | 'class-removed'
124
121
  | 'class-contract-changed'
125
- | 'interface-added'
126
- | 'interface-removed'
127
- | 'interface-contract-changed'
128
122
  | 'edge-added'
129
123
  | 'edge-removed'
130
124
  | 'edge-contract-changed'
@@ -264,11 +258,8 @@ export interface LayoutState {
264
258
 
265
259
  /** Persisted per-domain canvas visibility. This is the sole authority for its JSON shape. */
266
260
  export interface VisibilityState {
267
- /** refs hidden on the canvas: `class.X` | `edge.X` | `domain.<origin>` (interfaces use
268
- * `materializedInterfaces`, not this set — see below) */
261
+ /** Refs hidden on the canvas: `class.X` | `edge.X` | `domain.<origin>`. */
269
262
  hidden: Record<string, true>
263
+ /** Whether local Class inheritance edges are rendered. */
270
264
  showInheritedEdges: boolean
271
- /** Local interfaces MATERIALIZED as canvas NODES (default = badge). Keyed by BARE interface
272
- * name (e.g. `Fulfillable`) — a set distinct from `hidden`, so no ref namespace collision. */
273
- materializedInterfaces: Record<string, true>
274
265
  }
@@ -1,58 +1,34 @@
1
1
  import { describe, expect, test } from 'bun:test'
2
2
 
3
3
  import {
4
- IR_SCHEMA_REF_KINDS,
5
- definitionRefKey,
6
- isIrDefinitionRef,
7
- isIrInterfaceRef,
4
+ classRefKey,
5
+ isIrClassRef,
8
6
  isIrSchemaRef,
9
- parseDefinitionRefKey,
7
+ parseClassRefKey,
10
8
  parseSchemaRefKey,
11
9
  schemaRefKey,
12
- type IrSchemaRef,
13
10
  } from './identity'
14
11
 
15
- describe('canonical schema identity', () => {
16
- test('round-trips every structural reference kind without short-name aliases', () => {
17
- for (const kind of IR_SCHEMA_REF_KINDS) {
18
- const ref = {
19
- origin: 'directory.example.dev',
20
- kind,
21
- name: '$Named_member',
22
- } satisfies IrSchemaRef
23
- expect(parseSchemaRefKey(schemaRefKey(ref))).toEqual(ref)
24
- }
12
+ describe('schema identity', () => {
13
+ test('round-trips exact Class identity', () => {
14
+ const ref = { origin: 'docs.example.dev', kind: 'class' as const, name: 'Document' }
15
+ expect(classRefKey(ref)).toBe('docs.example.dev:class.Document')
16
+ expect(parseClassRefKey(classRefKey(ref))).toEqual(ref)
17
+ expect(isIrClassRef(ref)).toBe(true)
25
18
  })
26
19
 
27
- test('keeps class and interface identities distinct', () => {
28
- const classRef = { origin: 'contracts.example.dev', kind: 'class', name: 'Shared' } as const
29
- const interfaceRef = {
30
- origin: 'contracts.example.dev',
31
- kind: 'interface',
32
- name: 'Shared',
33
- } as const
34
-
35
- expect(definitionRefKey(classRef)).toBe('contracts.example.dev:class.Shared')
36
- expect(definitionRefKey(interfaceRef)).toBe('contracts.example.dev:interface.Shared')
37
- expect(parseDefinitionRefKey(definitionRefKey(classRef))).toEqual(classRef)
38
- expect(parseDefinitionRefKey(definitionRefKey(interfaceRef))).toEqual(interfaceRef)
39
- })
40
-
41
- test('guards structural refs without claiming SDK admission', () => {
42
- expect(isIrSchemaRef({ origin: 'a.dev', kind: 'policy', name: 'may_read' })).toBe(true)
43
- expect(isIrDefinitionRef({ origin: 'a.dev', kind: 'class', name: 'Thing' })).toBe(true)
44
- expect(isIrDefinitionRef({ origin: 'a.dev', kind: 'policy', name: 'may_read' })).toBe(false)
45
- expect(isIrInterfaceRef({ origin: 'a.dev', kind: 'interface', name: 'Named' })).toBe(true)
46
- expect(isIrInterfaceRef({ origin: 'a.dev', kind: 'class', name: 'Named' })).toBe(false)
47
- expect(isIrSchemaRef({ origin: 'a.dev', kind: 'unknown', name: 'Thing' })).toBe(false)
48
- expect(isIrSchemaRef({ origin: 'a.dev', kind: 'class' })).toBe(false)
20
+ test('preserves all supported schema reference kinds', () => {
21
+ const ref = { origin: 'docs.example.dev', kind: 'function' as const, name: 'search' }
22
+ expect(schemaRefKey(ref)).toBe('docs.example.dev:function.search')
23
+ expect(parseSchemaRefKey(schemaRefKey(ref))).toEqual(ref)
24
+ expect(isIrSchemaRef(ref)).toBe(true)
49
25
  })
50
26
 
51
- test('rejects malformed and non-definition keys', () => {
52
- expect(parseSchemaRefKey('a.dev:unknown.Thing')).toBeUndefined()
53
- expect(parseSchemaRefKey('a.dev:class.')).toBeUndefined()
54
- expect(parseSchemaRefKey(':class.Thing')).toBeUndefined()
55
- expect(parseSchemaRefKey(null)).toBeUndefined()
56
- expect(parseDefinitionRefKey('a.dev:type.Payload')).toBeUndefined()
27
+ test('rejects removed Interface coordinates and malformed keys', () => {
28
+ expect(isIrSchemaRef({ origin: 'docs.example.dev', kind: 'interface', name: 'Named' })).toBe(
29
+ false,
30
+ )
31
+ expect(parseSchemaRefKey('docs.example.dev:interface.Named')).toBeUndefined()
32
+ expect(parseClassRefKey('docs.example.dev:function.search')).toBeUndefined()
57
33
  })
58
34
  })
@@ -5,15 +5,7 @@
5
5
  * admission remains the authority for whether a reference is semantically valid.
6
6
  */
7
7
 
8
- export const IR_SCHEMA_REF_KINDS = [
9
- 'type',
10
- 'interface',
11
- 'class',
12
- 'function',
13
- 'policy',
14
- 'view',
15
- 'core',
16
- ] as const
8
+ export const IR_SCHEMA_REF_KINDS = ['class', 'function', 'policy', 'view', 'core'] as const
17
9
 
18
10
  export type IrSchemaRefKind = (typeof IR_SCHEMA_REF_KINDS)[number]
19
11
 
@@ -27,14 +19,12 @@ export interface IrSchemaRef {
27
19
  /** Canonical DSL key for a schema member: `origin:kind.name`. */
28
20
  export type IrSchemaKey = `${string}:${IrSchemaRefKind}.${string}`
29
21
 
30
- export type IrDefinitionRef = Omit<IrSchemaRef, 'kind'> & {
31
- kind: 'class' | 'interface'
32
- }
22
+ export type IrClassRef = Omit<IrSchemaRef, 'kind'> & { kind: 'class' }
33
23
 
34
- export type IrDefinitionKey = `${string}:${IrDefinitionRef['kind']}.${string}`
24
+ export type IrClassKey = `${string}:class.${string}`
35
25
 
36
26
  const schemaKinds = new Set<string>(IR_SCHEMA_REF_KINDS)
37
- const schemaKeyPattern = /^(.+):(type|interface|class|function|policy|view|core)\.(.+)$/
27
+ const schemaKeyPattern = /^(.+):(class|function|policy|view|core)\.(.+)$/
38
28
 
39
29
  /** Structural guard only; it deliberately does not perform SDK admission. */
40
30
  export function isIrSchemaRef(value: unknown): value is IrSchemaRef {
@@ -48,19 +38,15 @@ export function isIrSchemaRef(value: unknown): value is IrSchemaRef {
48
38
  )
49
39
  }
50
40
 
51
- export function isIrDefinitionRef(value: unknown): value is IrDefinitionRef {
52
- return isIrSchemaRef(value) && (value.kind === 'class' || value.kind === 'interface')
53
- }
54
-
55
- export function isIrInterfaceRef(value: unknown): value is IrDefinitionRef & { kind: 'interface' } {
56
- return isIrSchemaRef(value) && value.kind === 'interface'
41
+ export function isIrClassRef(value: unknown): value is IrClassRef {
42
+ return isIrSchemaRef(value) && value.kind === 'class'
57
43
  }
58
44
 
59
45
  export function schemaRefKey(ref: IrSchemaRef): IrSchemaKey {
60
46
  return `${ref.origin}:${ref.kind}.${ref.name}`
61
47
  }
62
48
 
63
- export function definitionRefKey(ref: IrDefinitionRef): IrDefinitionKey {
49
+ export function classRefKey(ref: IrClassRef): IrClassKey {
64
50
  return `${ref.origin}:${ref.kind}.${ref.name}`
65
51
  }
66
52
 
@@ -76,7 +62,7 @@ export function parseSchemaRefKey(value: unknown): IrSchemaRef | undefined {
76
62
  }
77
63
  }
78
64
 
79
- export function parseDefinitionRefKey(value: unknown): IrDefinitionRef | undefined {
65
+ export function parseClassRefKey(value: unknown): IrClassRef | undefined {
80
66
  const ref = parseSchemaRefKey(value)
81
- return ref && isIrDefinitionRef(ref) ? ref : undefined
67
+ return ref && isIrClassRef(ref) ? ref : undefined
82
68
  }