@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.
- package/README.md +16 -1
- package/dist/astrale.js +51105 -58057
- package/dist/public/connect-core.js +2085 -30702
- package/dist/public/keys/index.js +884 -29476
- package/dist/public/paths/index.js +13101 -41452
- package/dist/types/admin/contract.d.ts +26 -0
- package/dist/types/admin/instance/client.d.ts +20 -0
- package/dist/types/admin/instance/index.d.ts +2 -0
- package/dist/types/admin/instance/model.d.ts +6 -10
- package/dist/types/connection/auth.d.ts +3 -0
- package/dist/types/connection/call.d.ts +3 -0
- package/dist/types/connection/command.d.ts +27 -0
- package/dist/types/connection/credential.d.ts +14 -0
- package/dist/types/connection/errors.d.ts +1 -0
- package/dist/types/connection/exchange.d.ts +9 -0
- package/dist/types/connection/failure/classify.d.ts +2 -0
- package/dist/types/connection/failure/index.d.ts +5 -0
- package/dist/types/connection/failure/model.d.ts +25 -0
- package/dist/types/connection/failure/render.d.ts +3 -0
- package/dist/types/connection/index.d.ts +8 -0
- package/dist/types/connection/reasons.d.ts +37 -0
- package/dist/types/connection/self.d.ts +37 -0
- package/dist/types/connection/session.d.ts +31 -0
- package/dist/types/connection/target.d.ts +38 -0
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/lib/admin-instance.d.ts +17 -0
- package/dist/types/lib/admin-target.d.ts +11 -36
- package/dist/types/lib/config.d.ts +7 -59
- package/dist/types/lib/failure-debug.d.ts +1 -0
- package/dist/types/lib/idp.d.ts +25 -173
- package/dist/types/lib/instance-target.d.ts +1 -1
- package/dist/types/lib/instance.d.ts +30 -88
- package/dist/types/lib/log.d.ts +5 -3
- package/dist/types/lib/output.d.ts +1 -1
- package/dist/types/lib/proc.d.ts +43 -0
- package/dist/types/lib/self.d.ts +9 -0
- package/dist/types/lib/update.d.ts +109 -0
- package/dist/types/lib/validation.d.ts +4 -1
- package/package.json +15 -20
- package/src/__tests__/fixtures/publication.ts +20 -0
- package/src/admin/.spec/architecture.md +12 -5
- package/src/admin/__tests__/fixture.ts +25 -0
- package/src/admin/catalog/.spec/api.d.ts +1 -3
- package/src/admin/catalog/.spec/architecture.md +5 -4
- package/src/admin/catalog/__tests__/client.test.ts +143 -69
- package/src/admin/catalog/client.ts +40 -54
- package/src/admin/catalog/model.ts +3 -4
- package/src/admin/contract.ts +46 -0
- package/src/admin/graph/.spec/api.d.ts +4 -10
- package/src/admin/graph/nodes.ts +1 -1
- package/src/admin/instance/.spec/api.d.ts +5 -9
- package/src/admin/instance/.spec/architecture.md +7 -7
- package/src/admin/instance/__tests__/client.test.ts +157 -175
- package/src/admin/instance/client.ts +39 -128
- package/src/admin/instance/index.ts +1 -2
- package/src/admin/instance/model.ts +12 -18
- package/src/commands/__tests__/admin-instance.test.ts +11 -8
- package/src/commands/__tests__/call-describe.test.ts +46 -33
- package/src/commands/__tests__/call.test.ts +34 -0
- package/src/commands/__tests__/domain-install-operation.test.ts +7 -22
- package/src/commands/__tests__/domain-install-owned.test.ts +1 -1
- package/src/commands/__tests__/domain-list.test.ts +5 -25
- package/src/commands/__tests__/install-direct.test.ts +115 -8
- package/src/commands/__tests__/install-identity-override.test.ts +3 -14
- package/src/commands/__tests__/instance-list-rows.test.ts +1 -1
- package/src/commands/__tests__/instance-status.test.ts +139 -0
- package/src/commands/__tests__/introspect-parse.test.ts +80 -1
- package/src/commands/__tests__/logs.test.ts +250 -2
- package/src/commands/__tests__/read-commands.test.ts +62 -10
- package/src/commands/__tests__/token-ttl.test.ts +49 -4
- package/src/commands/__tests__/update.test.ts +25 -3
- package/src/commands/__tests__/view.test.ts +49 -0
- package/src/commands/call-describe.ts +60 -68
- package/src/commands/call.ts +71 -59
- package/src/commands/domain/install.ts +54 -35
- package/src/commands/domain/list.ts +1 -1
- package/src/commands/domain/publish.ts +14 -11
- package/src/commands/domain/uninstall.ts +2 -2
- package/src/commands/get.ts +14 -15
- package/src/commands/identity/__tests__/register.test.ts +3 -3
- package/src/commands/identity/register.ts +5 -4
- package/src/commands/instance/create.ts +8 -16
- package/src/commands/instance/delete.ts +12 -9
- package/src/commands/instance/list.ts +2 -2
- package/src/commands/instance/status.ts +66 -20
- package/src/commands/instance/use.ts +16 -12
- package/src/commands/introspect.ts +48 -35
- package/src/commands/logs.ts +123 -33
- package/src/commands/mutate.ts +6 -5
- package/src/commands/query.ts +35 -32
- package/src/commands/token.ts +42 -27
- package/src/commands/ui/__tests__/commands.test.ts +152 -0
- package/src/commands/ui/add.ts +51 -0
- package/src/commands/ui/doctor.ts +13 -0
- package/src/commands/ui/init.ts +38 -0
- package/src/commands/ui/list.ts +26 -0
- package/src/commands/ui/preset-apply.ts +19 -0
- package/src/commands/ui/preset-list.ts +12 -0
- package/src/commands/ui/shared.ts +25 -0
- package/src/commands/update.ts +31 -11
- package/src/commands/view.ts +82 -37
- package/src/connection/.spec/api.d.ts +7 -8
- package/src/connection/.spec/architecture.md +5 -4
- package/src/connection/.spec/flows/session.ts +2 -2
- package/src/connection/.spec/laws/connection.ts +6 -2
- package/src/connection/.spec/layout.ts +1 -0
- package/src/connection/__tests__/credential.test.ts +20 -1
- package/src/connection/__tests__/errors.test.ts +27 -20
- package/src/connection/__tests__/exchange.test.ts +30 -1
- package/src/connection/__tests__/failure-fixtures.ts +39 -0
- package/src/connection/__tests__/failure-safety.test.ts +75 -0
- package/src/connection/__tests__/self.test.ts +31 -11
- package/src/connection/__tests__/session.test.ts +3 -3
- package/src/connection/__tests__/target.test.ts +1 -0
- package/src/connection/auth.ts +13 -0
- package/src/connection/call.ts +1 -1
- package/src/connection/credential.ts +2 -2
- package/src/connection/errors.ts +1 -355
- package/src/connection/exchange.ts +47 -23
- package/src/connection/failure/classify.ts +110 -0
- package/src/connection/failure/index.ts +18 -0
- package/src/connection/failure/model.ts +28 -0
- package/src/connection/failure/render.ts +116 -0
- package/src/connection/reasons.ts +16 -0
- package/src/connection/self.ts +39 -21
- package/src/connection/session.ts +19 -8
- package/src/errors.ts +3 -2
- package/src/graph/.spec/api.d.ts +12 -5
- package/src/graph/.spec/layout.ts +9 -1
- package/src/graph/__tests__/mutation.test.ts +2 -2
- package/src/graph/__tests__/query.test.ts +25 -6
- package/src/graph/class.ts +30 -0
- package/src/graph/index.ts +1 -0
- package/src/graph/query.ts +21 -32
- package/src/identity/.spec/api.d.ts +2 -2
- package/src/identity/__tests__/registration.test.ts +1 -1
- package/src/identity/registration.ts +3 -3
- package/src/keys/__tests__/keys.test.ts +4 -0
- package/src/keys/credential.ts +1 -0
- package/src/lib/__tests__/admin-target.test.ts +12 -0
- package/src/lib/__tests__/binary.test.ts +16 -1
- package/src/lib/__tests__/command-dx.test.ts +1 -1
- package/src/lib/__tests__/domain-publication.test.ts +10 -16
- package/src/lib/__tests__/idp.test.ts +34 -4
- package/src/lib/__tests__/instance-candidates.test.ts +1 -3
- package/src/lib/__tests__/instance-target.test.ts +7 -39
- package/src/lib/__tests__/log-errors.test.ts +64 -0
- package/src/lib/__tests__/studio-server-deps.test.ts +1 -1
- package/src/lib/__tests__/update.test.ts +264 -11
- package/src/lib/__tests__/view-assets.test.ts +14 -0
- package/src/lib/__tests__/view-external-open-intent.test.ts +150 -0
- package/src/lib/__tests__/view-external-open-origins.test.ts +27 -0
- package/src/lib/__tests__/view-open-intent.test.ts +0 -2
- package/src/lib/__tests__/view-server.test.ts +26 -3
- package/src/lib/__tests__/view-session.test.ts +2 -1
- package/src/lib/admin-instance.ts +14 -8
- package/src/lib/admin-target.ts +21 -2
- package/src/lib/binary.ts +22 -5
- package/src/lib/command-dx.ts +9 -9
- package/src/lib/domain-publication.ts +9 -7
- package/src/lib/failure-debug.ts +26 -0
- package/src/lib/idp.ts +34 -3
- package/src/lib/instance-candidates.ts +2 -2
- package/src/lib/instance-target.ts +3 -14
- package/src/lib/instance.ts +16 -11
- package/src/lib/log.ts +16 -9
- package/src/lib/output.ts +1 -1
- package/src/lib/proc.ts +7 -2
- package/src/lib/provision-instance.ts +34 -57
- package/src/lib/update.ts +298 -45
- package/src/lib/validation.ts +2 -2
- package/src/lib/view/assets.ts +11 -2
- package/src/lib/view/external-open-intent.ts +41 -0
- package/src/lib/view/external-open-origins.ts +37 -0
- package/src/lib/view/host-capabilities.ts +17 -0
- package/src/lib/view/resolve.ts +1 -1
- package/src/lib/view/server.ts +18 -3
- package/src/lib/view/session.ts +2 -0
- package/src/program/.spec/api.d.ts +1 -0
- package/src/program/__tests__/program.test.ts +163 -6
- package/src/program/argv.ts +14 -0
- package/src/program/build.ts +26 -4
- package/src/program/command.ts +1 -0
- package/src/program/index.ts +1 -0
- package/src/program/registry.ts +2 -1
- package/src/setup/__tests__/instance-step.test.ts +27 -10
- package/src/setup/steps/instance.ts +22 -15
- package/src/telemetry/__tests__/recorder.test.ts +1 -0
- package/src/telemetry/recorder.ts +9 -1
- package/src/ui/.spec/api.d.ts +14 -0
- package/src/ui/.spec/architecture.md +10 -0
- package/src/ui/.spec/laws.ts +36 -0
- package/src/ui/.spec/layout.ts +16 -0
- package/src/ui/__tests__/ui.test.ts +981 -0
- package/src/ui/index.ts +13 -0
- package/src/ui/lock.ts +87 -0
- package/src/ui/model.ts +83 -0
- package/src/ui/operations.ts +710 -0
- package/src/ui/project.ts +219 -0
- package/src/ui/release.ts +321 -0
- package/src/ui/runner.ts +18 -0
- package/studio/client/dist/assets/elk-api-DjmKsHXc.js +1 -0
- package/studio/client/dist/assets/index-7YHdeCxp.js +81 -0
- package/studio/client/dist/assets/index-C0FAnwNw.css +2 -0
- package/studio/client/dist/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
- package/studio/client/dist/assets/schema-studio-BilUNb6Z.css +1 -0
- package/studio/client/dist/assets/schema-studio-CABpTfvH.js +8 -0
- package/studio/client/dist/index.html +3 -2
- package/studio/package.json +7 -13
- package/studio/server/agent/ask.test.ts +1 -1
- package/studio/server/agent/bridge/grant.test.ts +1 -1
- package/studio/server/agent/bridge/routes.test.ts +1 -1
- package/studio/server/agent/harness/claude/adapter.test.ts +15 -5
- package/studio/server/agent/harness/gateway/token.test.ts +1 -1
- package/studio/server/agent/harness/gateway/token.ts +3 -3
- package/studio/server/agent/prompts/anchors.test.ts +32 -36
- package/studio/server/agent/prompts/anchors.ts +20 -49
- package/studio/server/agent/prompts/system.test.ts +3 -2
- package/studio/server/agent/prompts/system.ts +3 -3
- package/studio/server/agent/routes.test.ts +1 -1
- package/studio/server/agent/run/coordinator.test.ts +1 -1
- package/studio/server/api/canvas.ts +0 -1
- package/studio/server/api-agent-loadout.test.ts +1 -1
- package/studio/server/api.test.ts +1 -1
- package/studio/server/cache.test.ts +23 -12
- package/studio/server/cache.ts +12 -15
- package/studio/server/domain.test.ts +50 -68
- package/studio/server/domain.ts +82 -63
- package/studio/server/handoff/copy.ts +1 -1
- package/studio/server/index.ts +1 -1
- package/studio/server/instances/probe.test.ts +1 -1
- package/studio/server/introspect/anatomy/views/routes.ts +46 -37
- package/studio/server/introspect/anatomy/views.ts +9 -14
- package/studio/server/introspect/anatomy-extras.test.ts +26 -42
- package/studio/server/introspect/anatomy.test.ts +22 -14
- package/studio/server/introspect/anatomy.ts +6 -9
- package/studio/server/introspect/bundle.ts +0 -3
- package/studio/server/introspect/canonical-schema.test.ts +94 -389
- package/studio/server/introspect/canonical-schema.ts +227 -457
- package/studio/server/introspect/core-extractor.ts +18 -127
- package/studio/server/introspect/core.ts +1 -2
- package/studio/server/introspect/diff.test.ts +11 -7
- package/studio/server/introspect/diff.ts +18 -55
- package/studio/server/introspect/extractor.ts +22 -117
- package/studio/server/introspect/overlay-tsmorph.test.ts +119 -240
- package/studio/server/introspect/overlay.test.ts +26 -54
- package/studio/server/introspect/overlay.ts +10 -37
- package/studio/server/introspect/revision.test.ts +1 -1
- package/studio/server/introspect/revision.ts +1 -1
- package/studio/server/introspect/runtime.test.ts +65 -183
- package/studio/server/introspect/runtime.ts +8 -25
- package/studio/server/introspect/schema-ir-json.test.ts +70 -0
- package/studio/server/introspect/schema-ir-json.ts +38 -68
- package/studio/server/introspect/schema-refs.test.ts +43 -88
- package/studio/server/introspect/schema-refs.ts +14 -49
- package/studio/server/introspect/source-overlay/handlers.ts +116 -636
- package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -3
- package/studio/server/introspect/source-overlay/spans.ts +15 -45
- package/studio/server/state/baseline.test.ts +14 -9
- package/studio/server/state/baseline.ts +3 -5
- package/studio/server/state/visibility.ts +1 -5
- package/studio/server/views/model.ts +3 -3
- package/studio/server/views/target.test.ts +17 -74
- package/studio/server/views/target.ts +24 -50
- package/studio/server/watch.test.ts +11 -11
- package/studio/server/watch.ts +8 -4
- package/studio/server/workspace-watch.ts +2 -2
- package/studio/shared/contracts/schema.ts +38 -107
- package/studio/shared/contracts/surface.test.ts +13 -15
- package/studio/shared/contracts/workspace.ts +2 -11
- package/studio/shared/schema/identity.test.ts +20 -44
- package/studio/shared/schema/identity.ts +9 -23
- package/viewer/dist/main.js +30 -51
- package/.check-workspace.cjs +0 -40
- package/src/admin/binding.ts +0 -168
- package/src/commands/__tests__/instance-create-hosts.test.ts +0 -29
- package/studio/client/dist/assets/elk-api-lwhFo7vB.js +0 -1
- package/studio/client/dist/assets/index-B-c-smo9.js +0 -8
- package/studio/client/dist/assets/index-BckHuAWk.js +0 -81
- package/studio/client/dist/assets/index-C4aNQ6dz.css +0 -1
- package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
- 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 {
|
|
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
|
|
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
|
|
85
|
-
|
|
86
|
-
|
|
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`
|
|
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
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
143
|
-
|
|
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
|
-
|
|
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
|
|
176
|
-
policies
|
|
177
|
-
dependencies
|
|
178
|
-
|
|
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' | '
|
|
130
|
+
ownerKind: 'class' | 'function'
|
|
131
|
+
kind: 'action' | 'workflow'
|
|
185
132
|
method: string
|
|
186
133
|
static: boolean
|
|
187
|
-
/**
|
|
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
|
-
|
|
166
|
+
ref: IrClassRef
|
|
228
167
|
}
|
|
229
168
|
|
|
230
169
|
export interface SchemaOverlay {
|
|
231
170
|
origin: string
|
|
232
|
-
/**
|
|
171
|
+
/** Exact declared Domain dependencies. */
|
|
233
172
|
requires: string[]
|
|
234
|
-
/**
|
|
173
|
+
/** Non-Kernel imported Classes. */
|
|
235
174
|
crossDomainImports: CrossDomainImport[]
|
|
236
|
-
/**
|
|
175
|
+
/** Kernel base Classes rendered as inherited platform facts. */
|
|
237
176
|
mixins: CrossDomainImport[]
|
|
238
|
-
postInstall?: string
|
|
239
177
|
handlerLinks: HandlerLink[]
|
|
240
|
-
/**
|
|
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' | '
|
|
255
|
-
/** DSL-owned revision, present only after
|
|
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
|
|
263
|
-
* preview. Kept separate from the lossy render IR
|
|
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
|
|
281
|
-
|
|
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
|
|
361
|
+
/** source Core path or owning Domain path */
|
|
431
362
|
from: string
|
|
432
|
-
/** target Core path
|
|
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
|
-
//
|
|
10
|
-
//
|
|
11
|
-
|
|
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
|
-
'
|
|
68
|
-
'
|
|
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
|
-
|
|
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
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'isIrInterfaceRef',
|
|
115
|
+
'classRefKey',
|
|
116
|
+
'isIrClassRef',
|
|
120
117
|
'isIrSchemaRef',
|
|
121
118
|
'isSchemaRevision',
|
|
122
|
-
'
|
|
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
|
|
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 = [...
|
|
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
|
-
/**
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
isIrDefinitionRef,
|
|
7
|
-
isIrInterfaceRef,
|
|
4
|
+
classRefKey,
|
|
5
|
+
isIrClassRef,
|
|
8
6
|
isIrSchemaRef,
|
|
9
|
-
|
|
7
|
+
parseClassRefKey,
|
|
10
8
|
parseSchemaRefKey,
|
|
11
9
|
schemaRefKey,
|
|
12
|
-
type IrSchemaRef,
|
|
13
10
|
} from './identity'
|
|
14
11
|
|
|
15
|
-
describe('
|
|
16
|
-
test('round-trips
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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('
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
|
52
|
-
expect(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
expect(parseSchemaRefKey(
|
|
56
|
-
expect(
|
|
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
|
|
31
|
-
kind: 'class' | 'interface'
|
|
32
|
-
}
|
|
22
|
+
export type IrClassRef = Omit<IrSchemaRef, 'kind'> & { kind: 'class' }
|
|
33
23
|
|
|
34
|
-
export type
|
|
24
|
+
export type IrClassKey = `${string}:class.${string}`
|
|
35
25
|
|
|
36
26
|
const schemaKinds = new Set<string>(IR_SCHEMA_REF_KINDS)
|
|
37
|
-
const schemaKeyPattern = /^(.+):(
|
|
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
|
|
52
|
-
return isIrSchemaRef(value) &&
|
|
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
|
|
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
|
|
65
|
+
export function parseClassRefKey(value: unknown): IrClassRef | undefined {
|
|
80
66
|
const ref = parseSchemaRefKey(value)
|
|
81
|
-
return ref &&
|
|
67
|
+
return ref && isIrClassRef(ref) ? ref : undefined
|
|
82
68
|
}
|