@astrale-os/cli 1.0.0-beta.3 → 1.0.0-beta.30
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 +80 -6
- package/dist/astrale.js +55471 -58674
- package/dist/public/connect-core.js +2158 -30706
- package/dist/public/keys/index.js +1016 -29541
- package/dist/public/paths/index.js +370 -28654
- 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 +13 -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/dist/types/state/exchange-credentials.d.ts +6 -2
- package/dist/types/state/files.d.ts +2 -0
- package/dist/types/state/index.d.ts +3 -2
- package/dist/types/state/paths.d.ts +2 -0
- package/dist/types/state/session-routes.d.ts +10 -0
- package/package.json +16 -19
- 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 +47 -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 +30 -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 +6 -17
- 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 +118 -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 +50 -2
- package/src/commands/auth/logout.ts +2 -1
- package/src/commands/browser.ts +29 -0
- package/src/commands/call-describe.ts +60 -68
- package/src/commands/call.ts +71 -59
- package/src/commands/domain/install.ts +73 -46
- 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 +15 -16
- package/src/commands/identity/__tests__/register.test.ts +3 -3
- package/src/commands/identity/register.ts +8 -8
- 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 +53 -41
- package/src/commands/logs.ts +123 -36
- package/src/commands/mutate.ts +6 -5
- package/src/commands/query.ts +35 -32
- package/src/commands/session/analyze.ts +26 -4
- 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 +21 -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 +89 -48
- package/src/commands/view.ts +82 -37
- package/src/connection/.spec/api.d.ts +7 -8
- package/src/connection/.spec/architecture.md +14 -5
- 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__/auth.test.ts +1 -0
- package/src/connection/__tests__/credential.test.ts +21 -1
- package/src/connection/__tests__/errors.test.ts +27 -20
- package/src/connection/__tests__/exchange.test.ts +64 -11
- 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 +8 -4
- package/src/connection/__tests__/target.test.ts +2 -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 +110 -61
- 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 +27 -9
- 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__/fixtures/registry-journey.ts +13 -1
- package/src/identity/__tests__/registration.test.ts +1 -1
- package/src/identity/__tests__/registry.test.ts +4 -0
- package/src/identity/registration.ts +3 -3
- package/src/identity/registry.ts +2 -0
- 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__/browser-retention.test.ts +212 -0
- package/src/lib/__tests__/command-dx.test.ts +1 -1
- package/src/lib/__tests__/config.test.ts +27 -0
- 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__/skills.test.ts +809 -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 +25 -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/browser-retention.ts +210 -0
- package/src/lib/command-dx.ts +9 -9
- package/src/lib/config.ts +12 -1
- 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/skills/lock.ts +117 -0
- package/src/lib/skills/sync.ts +814 -0
- package/src/lib/skills.ts +1 -52
- 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/setup/steps/skills.ts +40 -38
- package/src/state/.spec/api.d.ts +21 -2
- package/src/state/.spec/architecture.md +18 -4
- package/src/state/.spec/layout.ts +1 -0
- package/src/state/__tests__/exchange-credentials.test.ts +88 -42
- package/src/state/__tests__/files.test.ts +24 -1
- package/src/state/__tests__/fixtures/session-route-process.ts +93 -0
- package/src/state/__tests__/paths.test.ts +1 -0
- package/src/state/__tests__/session-routes.test.ts +138 -0
- package/src/state/exchange-credentials.ts +22 -9
- package/src/state/files.ts +41 -0
- package/src/state/index.ts +3 -1
- package/src/state/paths.ts +3 -0
- package/src/state/session-routes.ts +34 -0
- package/src/telemetry/__tests__/analyze-log.test.ts +38 -0
- package/src/telemetry/__tests__/recorder.test.ts +1 -0
- package/src/telemetry/__tests__/retention.test.ts +267 -0
- package/src/telemetry/__tests__/settings.test.ts +102 -0
- package/src/telemetry/__tests__/store-scan.test.ts +128 -0
- package/src/telemetry/__tests__/trigger.test.ts +33 -4
- package/src/telemetry/analyze.ts +24 -2
- package/src/telemetry/recorder.ts +15 -4
- package/src/telemetry/retention.ts +176 -0
- package/src/telemetry/session.ts +18 -12
- package/src/telemetry/settings.ts +64 -11
- package/src/telemetry/store.ts +92 -9
- package/src/telemetry/trigger.ts +16 -28
- package/src/ui/.spec/api.d.ts +14 -0
- package/src/ui/.spec/architecture.md +14 -0
- package/src/ui/.spec/laws.ts +50 -0
- package/src/ui/.spec/layout.ts +16 -0
- package/src/ui/__tests__/ui.test.ts +1742 -0
- package/src/ui/index.ts +13 -0
- package/src/ui/lock.ts +89 -0
- package/src/ui/model.ts +83 -0
- package/src/ui/operations.ts +1044 -0
- package/src/ui/project.ts +333 -0
- package/src/ui/release.ts +398 -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-BFVFs_8x.js +81 -0
- package/studio/client/dist/assets/index-DuB9iUdu.css +2 -0
- package/studio/client/dist/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
- package/studio/client/dist/assets/schema-studio--a0kX3QU.css +1 -0
- package/studio/client/dist/assets/schema-studio-DH6oEWME.js +8 -0
- package/studio/client/dist/index.html +4 -3
- package/studio/package.json +8 -14
- 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 +41 -32
- package/studio/server/agent/prompts/anchors.ts +23 -51
- package/studio/server/agent/prompts/system.test.ts +4 -4
- package/studio/server/agent/prompts/system.ts +5 -5
- package/studio/server/agent/routes.test.ts +1 -1
- package/studio/server/agent/run/coordinator.test.ts +1 -1
- package/studio/server/agent/run/preparation.ts +1 -1
- package/studio/server/api/canvas.ts +0 -1
- package/studio/server/api/context.ts +1 -1
- package/studio/server/api/deployment.ts +1 -1
- package/studio/server/api/views.ts +2 -2
- package/studio/server/api/workspace.ts +1 -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 +24 -18
- package/studio/server/cache.ts +10 -54
- package/studio/server/cli-consumers.test.ts +31 -3
- package/studio/server/domain.test.ts +50 -68
- package/studio/server/domain.ts +82 -63
- package/studio/server/handoff/copy.ts +2 -2
- 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 +10 -16
- package/studio/server/introspect/anatomy-extras.test.ts +29 -56
- 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 +155 -424
- package/studio/server/introspect/canonical-schema.ts +248 -601
- package/studio/server/introspect/core.ts +14 -22
- package/studio/server/introspect/diff.test.ts +21 -9
- package/studio/server/introspect/diff.ts +19 -64
- package/studio/server/introspect/extractor.ts +23 -122
- package/studio/server/introspect/overlay-tsmorph.test.ts +116 -241
- package/studio/server/introspect/overlay-tsmorph.ts +0 -1
- package/studio/server/introspect/overlay.ts +3 -51
- package/studio/server/introspect/revision.test.ts +24 -28
- package/studio/server/introspect/revision.ts +11 -22
- package/studio/server/introspect/runtime.test.ts +77 -195
- package/studio/server/introspect/runtime.ts +5 -67
- package/studio/server/introspect/schema-ir-json.test.ts +81 -0
- package/studio/server/introspect/schema-ir-json.ts +39 -69
- 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/lifecycle.ts +4 -1
- package/studio/server/state/baseline.test.ts +14 -9
- package/studio/server/state/baseline.ts +3 -5
- package/studio/server/state/documents.test.ts +69 -0
- package/studio/server/state/documents.ts +57 -10
- package/studio/server/state/visibility.ts +1 -5
- package/studio/server/views/model.ts +3 -3
- package/studio/server/views/target.test.ts +18 -76
- 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/updates.ts +23 -1
- package/studio/server/workspace-watch.ts +2 -2
- package/studio/shared/contracts/runtime.ts +4 -0
- package/studio/shared/contracts/schema.ts +44 -131
- package/studio/shared/contracts/surface.test.ts +15 -17
- package/studio/shared/contracts/workspace.ts +5 -11
- package/studio/shared/schema/identity.test.ts +20 -44
- package/studio/shared/schema/identity.ts +9 -24
- package/studio/tsconfig.json +2 -1
- package/tsconfig.json +1 -1
- package/viewer/dist/index.html +21 -0
- package/viewer/dist/main.js +41 -62
- 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
- package/studio/server/introspect/core-extractor.ts +0 -139
- package/studio/server/introspect/overlay.test.ts +0 -72
- package/studio/server/introspect/source-overlay/annotations.ts +0 -14
|
@@ -61,7 +61,7 @@ export async function listViewTargets(
|
|
|
61
61
|
|
|
62
62
|
const queried = await Promise.all(
|
|
63
63
|
bindings.map(async (binding) => {
|
|
64
|
-
const definition = targetDefinition(binding.className, binding.classOrigin
|
|
64
|
+
const definition = targetDefinition(binding.className, binding.classOrigin)
|
|
65
65
|
const result = await runAstraleJson<RawQueryResult>(
|
|
66
66
|
[
|
|
67
67
|
'query',
|
|
@@ -116,21 +116,17 @@ export async function listViewTargets(
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
|
|
119
|
-
export function targetDefinition(
|
|
120
|
-
className
|
|
121
|
-
classOrigin: string,
|
|
122
|
-
kind: 'class' | 'interface' = 'class',
|
|
123
|
-
): string {
|
|
124
|
-
return `/:${assertOrigin(classOrigin)}:${kind}.${assertSchemaName(className)}`
|
|
119
|
+
export function targetDefinition(className: string, classOrigin: string): string {
|
|
120
|
+
return `/:${assertOrigin(classOrigin)}:class.${assertSchemaName(className)}`
|
|
125
121
|
}
|
|
126
122
|
|
|
127
123
|
export interface ViewDefinitionBinding {
|
|
128
124
|
className: string
|
|
129
125
|
classOrigin: string
|
|
130
|
-
kind: 'class'
|
|
126
|
+
kind: 'class'
|
|
131
127
|
}
|
|
132
128
|
|
|
133
|
-
/** Preserve exact canonical View target coordinates
|
|
129
|
+
/** Preserve exact canonical View target coordinates. */
|
|
134
130
|
export function viewDefinitionBindings(
|
|
135
131
|
origin: string,
|
|
136
132
|
view: ViewInfo,
|
|
@@ -140,16 +136,17 @@ export function viewDefinitionBindings(
|
|
|
140
136
|
if (target) {
|
|
141
137
|
if (target.kind === 'domain') return []
|
|
142
138
|
return uniqueViewBindings(
|
|
143
|
-
target.definitions
|
|
144
|
-
.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
139
|
+
target.definitions.flatMap((definition) =>
|
|
140
|
+
definition.kind === 'class'
|
|
141
|
+
? [
|
|
142
|
+
{
|
|
143
|
+
className: definition.name,
|
|
144
|
+
classOrigin: definition.origin,
|
|
145
|
+
kind: 'class' as const,
|
|
146
|
+
},
|
|
147
|
+
]
|
|
148
|
+
: [],
|
|
149
|
+
),
|
|
153
150
|
)
|
|
154
151
|
}
|
|
155
152
|
|
|
@@ -165,7 +162,6 @@ export function viewDefinitionBindings(
|
|
|
165
162
|
names.flatMap((className) => {
|
|
166
163
|
const local: ViewDefinitionBinding[] = []
|
|
167
164
|
const localClass = ir.classes[className]
|
|
168
|
-
const localInterface = ir.interfaces[className]
|
|
169
165
|
if (localClass) {
|
|
170
166
|
local.push({
|
|
171
167
|
className,
|
|
@@ -173,33 +169,11 @@ export function viewDefinitionBindings(
|
|
|
173
169
|
kind: 'class',
|
|
174
170
|
})
|
|
175
171
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
})
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (ir.importsByKey !== undefined) {
|
|
185
|
-
const imported = Object.keys(ir.importsByKey).flatMap((key) => {
|
|
186
|
-
const binding = viewBindingFromDefinitionKey(key)
|
|
187
|
-
return binding?.className === className ? [binding] : []
|
|
188
|
-
})
|
|
189
|
-
return [...local, ...imported]
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const legacy = ir.imports[className]
|
|
193
|
-
if (legacy) {
|
|
194
|
-
return [
|
|
195
|
-
...local,
|
|
196
|
-
{
|
|
197
|
-
className,
|
|
198
|
-
classOrigin: legacy.origin,
|
|
199
|
-
kind: legacy.definition,
|
|
200
|
-
} satisfies ViewDefinitionBinding,
|
|
201
|
-
]
|
|
202
|
-
}
|
|
172
|
+
const imported = Object.keys(ir.importsByKey).flatMap((key) => {
|
|
173
|
+
const binding = viewBindingFromDefinitionKey(key)
|
|
174
|
+
return binding?.className === className ? [binding] : []
|
|
175
|
+
})
|
|
176
|
+
if (imported.length > 0) return [...local, ...imported]
|
|
203
177
|
|
|
204
178
|
return local.length > 0 ? local : [{ className, classOrigin: origin, kind: 'class' }]
|
|
205
179
|
}),
|
|
@@ -211,12 +185,12 @@ function viewBindingFromDefinitionKey(key: string): ViewDefinitionBinding | null
|
|
|
211
185
|
if (separator <= 0) return null
|
|
212
186
|
const classOrigin = key.slice(0, separator)
|
|
213
187
|
const ref = key.slice(separator + 1)
|
|
214
|
-
const match = /^
|
|
188
|
+
const match = /^class\.([A-Za-z_$][\w$]*)$/.exec(ref)
|
|
215
189
|
if (!match) return null
|
|
216
190
|
return {
|
|
217
|
-
className: match[
|
|
191
|
+
className: match[1]!,
|
|
218
192
|
classOrigin,
|
|
219
|
-
kind:
|
|
193
|
+
kind: 'class',
|
|
220
194
|
}
|
|
221
195
|
}
|
|
222
196
|
|
|
@@ -10,27 +10,27 @@ const handle: DomainHandle = {
|
|
|
10
10
|
id: 'current',
|
|
11
11
|
root: '/workspace/current',
|
|
12
12
|
configFile: '/workspace/current/astrale.config.ts',
|
|
13
|
-
|
|
13
|
+
applicationFile: '/workspace/current/application.ts',
|
|
14
14
|
schemaDirName: 'schema',
|
|
15
15
|
schemaDir: '/workspace/current/schema',
|
|
16
16
|
schemaIndex: '/workspace/current/schema/index.ts',
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
test('watches current
|
|
20
|
-
expect(ANATOMY_PATHS).toContain('
|
|
19
|
+
test('watches current Application, Runtime, and vertical authoring roots', () => {
|
|
20
|
+
expect(ANATOMY_PATHS).toContain('application.ts')
|
|
21
|
+
expect(ANATOMY_PATHS).toContain('runtime.ts')
|
|
21
22
|
expect(ANATOMY_PATHS).toContain('ui')
|
|
22
|
-
expect(ANATOMY_PATHS).toContain('
|
|
23
|
+
expect(ANATOMY_PATHS).toContain('providers')
|
|
23
24
|
expect(ANATOMY_PATHS).toContain('queries')
|
|
24
25
|
expect(ANATOMY_PATHS).toContain('workflows')
|
|
25
|
-
expect(DOMAIN_SET_TRIGGER_FILES.has('
|
|
26
|
-
expect(DOMAIN_SET_TRIGGER_FILES.has('
|
|
26
|
+
expect(DOMAIN_SET_TRIGGER_FILES.has('application.ts')).toBe(true)
|
|
27
|
+
expect(DOMAIN_SET_TRIGGER_FILES.has('schema.ts')).toBe(true)
|
|
27
28
|
})
|
|
28
29
|
|
|
29
|
-
test('
|
|
30
|
-
expect(affectsBundle(handle, join(handle.root, '
|
|
31
|
-
expect(affectsBundle(handle, join(handle.root, '
|
|
30
|
+
test('Application, Runtime, Action, and Workflow changes invalidate the schema bundle', () => {
|
|
31
|
+
expect(affectsBundle(handle, join(handle.root, 'application.ts'))).toBe(true)
|
|
32
|
+
expect(affectsBundle(handle, join(handle.root, 'runtime.ts'))).toBe(true)
|
|
32
33
|
expect(affectsBundle(handle, join(handle.root, 'actions', 'risk', 'create.ts'))).toBe(true)
|
|
33
|
-
expect(affectsBundle(handle, join(handle.root, '
|
|
34
|
-
expect(affectsBundle(handle, join(handle.root, 'handlers', 'create.ts'))).toBe(true)
|
|
34
|
+
expect(affectsBundle(handle, join(handle.root, 'workflows', 'user', 'ensure.ts'))).toBe(true)
|
|
35
35
|
expect(affectsBundle(handle, join(handle.root, 'views', 'routes.ts'))).toBe(false)
|
|
36
36
|
})
|
package/studio/server/watch.ts
CHANGED
|
@@ -19,10 +19,9 @@ export const ANATOMY_PATHS = [...ANATOMY_GLOBS.files, ...ANATOMY_GLOBS.dirs]
|
|
|
19
19
|
// part of the schema bundle cache even though they are outside schema/ itself.
|
|
20
20
|
const BUNDLE_SOURCE_DIRS = new Set([
|
|
21
21
|
'actions',
|
|
22
|
-
'
|
|
23
|
-
'functions',
|
|
24
|
-
'handlers',
|
|
22
|
+
'integrations',
|
|
25
23
|
'mutations',
|
|
24
|
+
'providers',
|
|
26
25
|
'queries',
|
|
27
26
|
'rules',
|
|
28
27
|
'runtime',
|
|
@@ -42,7 +41,12 @@ function ignored(p: string): boolean {
|
|
|
42
41
|
export function affectsBundle(handle: DomainHandle, path: string): boolean {
|
|
43
42
|
const rel = relative(handle.root, path).split('\\').join('/')
|
|
44
43
|
const topLevel = rel.split('/')[0]
|
|
45
|
-
return
|
|
44
|
+
return (
|
|
45
|
+
path === handle.applicationFile ||
|
|
46
|
+
rel === 'runtime.ts' ||
|
|
47
|
+
rel.endsWith('/runtime.ts') ||
|
|
48
|
+
BUNDLE_SOURCE_DIRS.has(topLevel)
|
|
49
|
+
)
|
|
46
50
|
}
|
|
47
51
|
|
|
48
52
|
export function watchDomain(handle: DomainHandle): () => void {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* We don't reimplement staleness: the `astrale` CLI owns it. `astrale update
|
|
5
5
|
* --check --json`, run in the DOMAIN ROOT (so its @astrale-os/* SDK-dep axis sees
|
|
6
|
-
* THIS project), emits a unified `{ stale, cli, sdk }` report. We run it with
|
|
6
|
+
* THIS project), emits a unified `{ stale, cli, skills, sdk }` report. We run it with
|
|
7
7
|
* stdout piped and read it regardless of exit code — a stale result exits 10 by
|
|
8
8
|
* design, which is not an error here. Best-effort: anything unexpected (no
|
|
9
9
|
* bad output) collapses to "nothing stale" so the badge stays
|
|
@@ -16,6 +16,7 @@ import { decodeJsonObject, runStudioCliJson, runStudioCliText } from '../cli'
|
|
|
16
16
|
const NOT_STALE: StaleReport = {
|
|
17
17
|
stale: false,
|
|
18
18
|
cli: { stale: false, managed: true },
|
|
19
|
+
skills: { status: 'current' },
|
|
19
20
|
sdk: { stale: false, inProject: false, outdated: [] },
|
|
20
21
|
}
|
|
21
22
|
|
|
@@ -30,6 +31,7 @@ export async function getUpdates(root: string): Promise<StaleReport> {
|
|
|
30
31
|
function decodeStaleReport(value: unknown): StaleReport | null {
|
|
31
32
|
const report = decodeJsonObject(value)
|
|
32
33
|
const cli = decodeJsonObject(report?.cli)
|
|
34
|
+
const skills = decodeJsonObject(report?.skills)
|
|
33
35
|
const sdk = decodeJsonObject(report?.sdk)
|
|
34
36
|
if (
|
|
35
37
|
typeof report?.stale !== 'boolean' ||
|
|
@@ -50,6 +52,22 @@ function decodeStaleReport(value: unknown): StaleReport | null {
|
|
|
50
52
|
: []
|
|
51
53
|
})
|
|
52
54
|
if (outdated.length !== sdk.outdated.length) return null
|
|
55
|
+
const skillStatuses = new Set([
|
|
56
|
+
'current',
|
|
57
|
+
'update-available',
|
|
58
|
+
'repair-needed',
|
|
59
|
+
'unavailable',
|
|
60
|
+
'skipped',
|
|
61
|
+
])
|
|
62
|
+
// Additive compatibility: Studio can briefly run a newer server against an
|
|
63
|
+
// older CLI report while a binary update is being applied.
|
|
64
|
+
const skillStatus =
|
|
65
|
+
skills === null || skills === undefined
|
|
66
|
+
? 'current'
|
|
67
|
+
: typeof skills.status === 'string' && skillStatuses.has(skills.status)
|
|
68
|
+
? (skills.status as StaleReport['skills']['status'])
|
|
69
|
+
: null
|
|
70
|
+
if (skillStatus === null) return null
|
|
53
71
|
return {
|
|
54
72
|
stale: report.stale,
|
|
55
73
|
cli: {
|
|
@@ -59,6 +77,10 @@ function decodeStaleReport(value: unknown): StaleReport | null {
|
|
|
59
77
|
...(typeof cli.latest === 'string' ? { latest: cli.latest } : {}),
|
|
60
78
|
...(typeof cli.channel === 'string' ? { channel: cli.channel } : {}),
|
|
61
79
|
},
|
|
80
|
+
skills: {
|
|
81
|
+
status: skillStatus,
|
|
82
|
+
...(typeof skills?.error === 'string' ? { error: skills.error } : {}),
|
|
83
|
+
},
|
|
62
84
|
sdk: { stale: sdk.stale, inProject: sdk.inProject, outdated },
|
|
63
85
|
}
|
|
64
86
|
}
|
|
@@ -19,8 +19,8 @@ const IGNORED =
|
|
|
19
19
|
// only these file changes can change the domain SET (vs. ordinary in-domain edits)
|
|
20
20
|
export const DOMAIN_SET_TRIGGER_FILES = new Set([
|
|
21
21
|
'astrale.config.ts',
|
|
22
|
-
'
|
|
23
|
-
'
|
|
22
|
+
'application.ts',
|
|
23
|
+
'schema.ts',
|
|
24
24
|
'index.ts',
|
|
25
25
|
])
|
|
26
26
|
|
|
@@ -42,6 +42,10 @@ export interface StudioSettings {
|
|
|
42
42
|
export interface StaleReport {
|
|
43
43
|
stale: boolean
|
|
44
44
|
cli: { stale: boolean; managed: boolean; current?: string; latest?: string; channel?: string }
|
|
45
|
+
skills: {
|
|
46
|
+
status: 'current' | 'update-available' | 'repair-needed' | 'unavailable' | 'skipped'
|
|
47
|
+
error?: string
|
|
48
|
+
}
|
|
45
49
|
sdk: {
|
|
46
50
|
stale: boolean
|
|
47
51
|
inProject: boolean
|
|
@@ -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[]
|
|
@@ -18,11 +18,17 @@ export interface JsonSchema {
|
|
|
18
18
|
maximum?: number
|
|
19
19
|
format?: string
|
|
20
20
|
description?: string
|
|
21
|
-
$
|
|
22
|
-
$dataRef?: unknown
|
|
21
|
+
$ref?: string
|
|
23
22
|
[k: string]: unknown
|
|
24
23
|
}
|
|
25
24
|
|
|
25
|
+
const NODE_PATH_SCHEMA_ID = 'https://schemas.astrale.ai/graph/1/node-path'
|
|
26
|
+
|
|
27
|
+
/** Structural form emitted by the V1 DSL for a graph Node path. */
|
|
28
|
+
export function isNodePathSchema(schema: JsonSchema): boolean {
|
|
29
|
+
return schema.$ref === NODE_PATH_SCHEMA_ID && Object.hasOwn(schema, 'x-astrale-path')
|
|
30
|
+
}
|
|
31
|
+
|
|
26
32
|
export type MethodInheritance = 'default' | 'abstract' | 'sealed'
|
|
27
33
|
|
|
28
34
|
/** Portable form of the DSL-owned canonical schema revision. */
|
|
@@ -37,7 +43,7 @@ export function isSchemaRevision(value: unknown): value is SchemaRevision {
|
|
|
37
43
|
* Version of Studio's lossy canonical-schema -> render-IR projection. Persisted
|
|
38
44
|
* baselines must match this value before their IR can be compared.
|
|
39
45
|
*/
|
|
40
|
-
export const STUDIO_SCHEMA_PROJECTION_VERSION =
|
|
46
|
+
export const STUDIO_SCHEMA_PROJECTION_VERSION = 3
|
|
41
47
|
|
|
42
48
|
export type IrCallableAuth = 'anonymous' | 'authenticated' | 'authorized'
|
|
43
49
|
|
|
@@ -46,67 +52,27 @@ export type IrCallableOutput =
|
|
|
46
52
|
| { mode: 'stream'; item: JsonSchema }
|
|
47
53
|
| { mode: 'binary' }
|
|
48
54
|
|
|
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 {
|
|
55
|
+
export interface IrCallable {
|
|
68
56
|
name: string
|
|
69
57
|
input: JsonSchema
|
|
70
|
-
params: Record<string, JsonSchema>
|
|
71
|
-
/** Names required by canonical `input.required`. */
|
|
72
|
-
requiredParams?: string[]
|
|
73
58
|
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
59
|
description?: string
|
|
80
60
|
auth?: IrCallableAuth
|
|
81
61
|
policy?: unknown
|
|
82
62
|
}
|
|
83
63
|
|
|
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 }
|
|
64
|
+
export interface IrMethod extends IrCallable {
|
|
65
|
+
static: boolean
|
|
66
|
+
inheritance: MethodInheritance
|
|
104
67
|
}
|
|
105
68
|
|
|
69
|
+
/** Standalone DSL callable projected without inventing a receiver. */
|
|
70
|
+
export interface IrFunction extends IrCallable {}
|
|
71
|
+
|
|
106
72
|
export interface IrEndpoint {
|
|
107
73
|
name: string
|
|
108
74
|
types: string[]
|
|
109
|
-
/** Exact accepted Definition coordinates. `types`
|
|
75
|
+
/** Exact accepted Definition coordinates. `types` is the local display projection. */
|
|
110
76
|
refs?: IrSchemaRef[]
|
|
111
77
|
/** declared multiplicity for this end; max:null = unbounded ("many"). Absent ⇒ unconstrained. */
|
|
112
78
|
cardinality?: { min: number; max: number | null }
|
|
@@ -115,11 +81,10 @@ export interface IrEndpoint {
|
|
|
115
81
|
export interface IrClass {
|
|
116
82
|
type: 'node' | 'edge'
|
|
117
83
|
name: string
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
implementsRefs?: IrSchemaRef[]
|
|
84
|
+
origin: string
|
|
85
|
+
ref: IrClassRef
|
|
86
|
+
extends?: string[]
|
|
87
|
+
extendsRefs?: IrClassRef[]
|
|
123
88
|
/** edges only: the two (source,target) endpoints with role names + allowed types */
|
|
124
89
|
endpoints?: IrEndpoint[]
|
|
125
90
|
orientation?: 'directed' | 'undirected'
|
|
@@ -139,10 +104,8 @@ export interface IrClass {
|
|
|
139
104
|
|
|
140
105
|
export interface IrImportDescriptor {
|
|
141
106
|
origin: string
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
/** Canonical qualified identity; absent on legacy import descriptors. */
|
|
145
|
-
key?: IrDefinitionKey
|
|
107
|
+
ref: IrClassRef
|
|
108
|
+
key: IrClassKey
|
|
146
109
|
}
|
|
147
110
|
|
|
148
111
|
export type IrViewTarget = { kind: 'domain' } | { kind: 'definition'; definitions: IrSchemaRef[] }
|
|
@@ -150,41 +113,30 @@ export type IrViewTarget = { kind: 'domain' } | { kind: 'definition'; definition
|
|
|
150
113
|
export interface IrView {
|
|
151
114
|
name: string
|
|
152
115
|
target: IrViewTarget
|
|
153
|
-
auth: 'required' | 'optional' | 'public'
|
|
154
116
|
description?: string
|
|
155
117
|
}
|
|
156
118
|
|
|
157
119
|
export interface SchemaIR {
|
|
120
|
+
format: 'astrale.dsl'
|
|
158
121
|
version: string
|
|
159
122
|
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
123
|
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. */
|
|
124
|
+
importsByKey: Record<IrClassKey, IrImportDescriptor>
|
|
125
|
+
importedClassesByKey: Record<IrClassKey, IrClass>
|
|
174
126
|
functions: Record<string, IrFunction>
|
|
175
|
-
views
|
|
176
|
-
policies
|
|
177
|
-
dependencies
|
|
178
|
-
|
|
179
|
-
core?: unknown
|
|
127
|
+
views: Record<string, IrView>
|
|
128
|
+
policies: Record<string, unknown>
|
|
129
|
+
dependencies: Array<{ origin: string; revision: string }>
|
|
130
|
+
core: unknown
|
|
180
131
|
}
|
|
181
132
|
|
|
182
133
|
export interface HandlerLink {
|
|
183
134
|
owner: string
|
|
184
|
-
ownerKind: 'class' | '
|
|
135
|
+
ownerKind: 'class' | 'function'
|
|
136
|
+
kind: 'action' | 'workflow'
|
|
185
137
|
method: string
|
|
186
138
|
static: boolean
|
|
187
|
-
/**
|
|
139
|
+
/** The Runtime registry or one modular Action/Workflow file. */
|
|
188
140
|
wiringFile?: string
|
|
189
141
|
wiringLine?: number
|
|
190
142
|
/** the resolved handler file (followed from the `execute` import) */
|
|
@@ -192,14 +144,6 @@ export interface HandlerLink {
|
|
|
192
144
|
handlerLine?: number
|
|
193
145
|
/** kernel ops detected in the handler (::update, ::link, createNode, …) */
|
|
194
146
|
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
147
|
/** false ⇒ a todo()/NotImplemented stub → "contract-only" badge */
|
|
204
148
|
implemented: boolean
|
|
205
149
|
/** true ⇒ resolver could not link a file → "unlinked" badge */
|
|
@@ -213,33 +157,10 @@ export interface SourceSpan {
|
|
|
213
157
|
doc?: string
|
|
214
158
|
}
|
|
215
159
|
|
|
216
|
-
export interface SchemaAnnotation {
|
|
217
|
-
/** anchor ref key, e.g. 'class.Monitor.property.status' */
|
|
218
|
-
target: string
|
|
219
|
-
severity: 'warn' | 'info'
|
|
220
|
-
code: 'COMPILE_ERROR' | 'EDGE_PROP_TYPE_MISSING'
|
|
221
|
-
message: string
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
export interface CrossDomainImport {
|
|
225
|
-
name: string
|
|
226
|
-
origin: string
|
|
227
|
-
definition: 'interface' | 'class'
|
|
228
|
-
}
|
|
229
|
-
|
|
230
160
|
export interface SchemaOverlay {
|
|
231
|
-
origin: string
|
|
232
|
-
/** defineDomain({ requires }) — runtime domain dependencies */
|
|
233
|
-
requires: string[]
|
|
234
|
-
/** non-kernel ir.imports → true cross-domain imports */
|
|
235
|
-
crossDomainImports: CrossDomainImport[]
|
|
236
|
-
/** kernel-origin ir.imports → mixin interfaces (collapsed chip) */
|
|
237
|
-
mixins: CrossDomainImport[]
|
|
238
|
-
postInstall?: string
|
|
239
161
|
handlerLinks: HandlerLink[]
|
|
240
|
-
/**
|
|
162
|
+
/** Keyed by Class, Property, Method, Function, Policy, View, or Core anchor. */
|
|
241
163
|
sourceSpans: Record<string, SourceSpan>
|
|
242
|
-
annotations: SchemaAnnotation[]
|
|
243
164
|
}
|
|
244
165
|
|
|
245
166
|
export interface BundleError {
|
|
@@ -251,25 +172,19 @@ export interface StudioSchemaBundle {
|
|
|
251
172
|
domainId: string
|
|
252
173
|
/** UI/cache identity only. This is not the DSL schema revision. */
|
|
253
174
|
renderFingerprint: string
|
|
254
|
-
schemaMode: 'canonical-admitted' | 'canonical-preview' | '
|
|
255
|
-
/** DSL-owned revision, present only after
|
|
175
|
+
schemaMode: 'canonical-admitted' | 'canonical-preview' | 'unavailable'
|
|
176
|
+
/** DSL-owned revision, present only after installed SDK admission. */
|
|
256
177
|
schemaRevision?: SchemaRevision
|
|
257
178
|
extractedBy: 'runtime-bun' | 'static-tsmorph-fallback'
|
|
258
179
|
depsInstalled: boolean
|
|
259
180
|
ir: SchemaIR | null
|
|
260
181
|
/**
|
|
261
182
|
* Portable canonical V1 document emitted by the domain. `schemaMode` records
|
|
262
|
-
* whether the
|
|
263
|
-
* preview. Kept separate from the lossy render IR
|
|
183
|
+
* whether the installed SDK admitted it or Studio is rendering it as a structural
|
|
184
|
+
* preview. Kept separate from the lossy render IR.
|
|
264
185
|
*/
|
|
265
186
|
schemaRoot?: unknown
|
|
266
187
|
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
188
|
/** present when the runtime import failed to compile (render state, not a crash) */
|
|
274
189
|
error?: BundleError | null
|
|
275
190
|
extractedAt: string
|
|
@@ -277,12 +192,11 @@ export interface StudioSchemaBundle {
|
|
|
277
192
|
|
|
278
193
|
export interface DomainOverview {
|
|
279
194
|
origin: string
|
|
280
|
-
/** Active SDK
|
|
281
|
-
|
|
195
|
+
/** Active SDK Application entry relative to the project root. */
|
|
196
|
+
applicationFile?: string
|
|
282
197
|
adapter: 'astrale' | 'cloudflare' | 'unknown'
|
|
283
198
|
prodTarget?: string
|
|
284
199
|
devSecrets?: string
|
|
285
|
-
postInstall?: string
|
|
286
200
|
requires: string[]
|
|
287
201
|
packageName?: string
|
|
288
202
|
packageVersion?: string
|
|
@@ -294,7 +208,6 @@ export interface DomainOverview {
|
|
|
294
208
|
export interface ViewInfo {
|
|
295
209
|
slug: string
|
|
296
210
|
kind: 'inline-html' | 'spa' | 'unknown'
|
|
297
|
-
auth?: string
|
|
298
211
|
mount?: string
|
|
299
212
|
url?: string
|
|
300
213
|
/** the class(es) this view binds to via `viewFor: selfOf(Class)` (DSL allows an array);
|
|
@@ -427,9 +340,9 @@ export interface StudioCoreNode {
|
|
|
427
340
|
|
|
428
341
|
/** One materialized edge instance wiring two core nodes. */
|
|
429
342
|
export interface StudioCoreEdge {
|
|
430
|
-
/** source Core path
|
|
343
|
+
/** source Core path or owning Domain path */
|
|
431
344
|
from: string
|
|
432
|
-
/** target Core path
|
|
345
|
+
/** target Core path or owning Domain path */
|
|
433
346
|
to: string
|
|
434
347
|
/** the IR edge class name (keys into StudioSchemaBundle.ir.classes, type:'edge') */
|
|
435
348
|
edgeName: string
|
|
@@ -459,4 +372,4 @@ export type TypeDescriptor =
|
|
|
459
372
|
required: string[]
|
|
460
373
|
optional: boolean
|
|
461
374
|
}
|
|
462
|
-
| { kind: 'ref'; target:
|
|
375
|
+
| { kind: 'ref'; target: 'node'; optional: boolean }
|