@astrale-os/cli 1.0.0-beta.4 → 1.0.0-beta.6
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/dist/astrale.js +55649 -59388
- package/dist/public/connect-core.js +1972 -26831
- package/dist/public/keys/index.js +1754 -40686
- package/dist/public/paths/index.js +859 -39511
- package/dist/types/admin/instance/model.d.ts +3 -4
- package/dist/types/errors.d.ts +1 -1
- package/dist/types/lib/idp.d.ts +1 -0
- package/dist/types/lib/instance-target.d.ts +1 -1
- package/dist/types/lib/log.d.ts +2 -2
- package/dist/types/lib/update.d.ts +30 -0
- package/package.json +4 -6
- package/src/__tests__/fixtures/publication.ts +20 -0
- package/src/admin/__tests__/binding.test.ts +14 -21
- package/src/admin/__tests__/fixture.ts +101 -0
- package/src/admin/binding.ts +86 -6
- package/src/admin/catalog/.spec/api.d.ts +2 -2
- package/src/admin/catalog/__tests__/client.test.ts +20 -49
- package/src/admin/catalog/client.ts +35 -26
- package/src/admin/catalog/model.ts +3 -4
- 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 +2 -2
- package/src/admin/instance/__tests__/client.test.ts +58 -83
- package/src/admin/instance/client.ts +49 -39
- package/src/admin/instance/model.ts +9 -8
- package/src/commands/__tests__/call-describe.test.ts +46 -33
- package/src/commands/__tests__/domain-install-operation.test.ts +3 -14
- 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-identity-override.test.ts +3 -14
- package/src/commands/__tests__/read-commands.test.ts +35 -10
- package/src/commands/__tests__/update.test.ts +25 -3
- package/src/commands/call-describe.ts +59 -67
- package/src/commands/call.ts +41 -54
- package/src/commands/domain/install.ts +2 -2
- package/src/commands/domain/uninstall.ts +2 -2
- package/src/commands/get.ts +13 -14
- package/src/commands/identity/__tests__/register.test.ts +3 -3
- package/src/commands/identity/register.ts +5 -4
- package/src/commands/instance/delete.ts +5 -3
- package/src/commands/instance/status.ts +1 -9
- package/src/commands/introspect.ts +4 -11
- package/src/commands/logs.ts +24 -25
- package/src/commands/mutate.ts +6 -5
- package/src/commands/query.ts +27 -30
- package/src/commands/token.ts +8 -7
- package/src/commands/update.ts +31 -11
- package/src/commands/view.ts +4 -3
- 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 +1 -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/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/debug.ts +26 -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 +8 -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/lib/__tests__/domain-publication.test.ts +4 -15
- package/src/lib/__tests__/idp.test.ts +25 -0
- package/src/lib/__tests__/instance-target.test.ts +6 -39
- package/src/lib/__tests__/log-errors.test.ts +53 -0
- package/src/lib/__tests__/studio-server-deps.test.ts +1 -1
- package/src/lib/__tests__/update.test.ts +101 -8
- package/src/lib/__tests__/view-open-intent.test.ts +0 -2
- package/src/lib/__tests__/view-server.test.ts +1 -1
- package/src/lib/__tests__/view-session.test.ts +1 -1
- package/src/lib/command-dx.ts +1 -4
- package/src/lib/domain-publication.ts +1 -1
- package/src/lib/idp.ts +29 -1
- package/src/lib/instance-target.ts +3 -14
- package/src/lib/log.ts +11 -6
- package/src/lib/update.ts +120 -26
- package/src/lib/validation.ts +2 -2
- package/src/lib/view/resolve.ts +1 -1
- package/src/program/__tests__/program.test.ts +1 -1
- package/studio/client/dist/assets/{elk-api-lwhFo7vB.js → elk-api-Di4OXGNH.js} +1 -1
- package/studio/client/dist/assets/index-BLm6J11H.js +81 -0
- package/studio/client/dist/assets/index-BiGR8Oo9.css +1 -0
- package/studio/client/dist/assets/index-DTjvkOUX.js +8 -0
- package/studio/client/dist/index.html +2 -2
- package/studio/package.json +2 -9
- 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/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 +40 -61
- 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/server/introspect/anatomy/views/legacy.ts +0 -232
|
@@ -46,7 +46,7 @@ test('reads the discovered client directory', () => {
|
|
|
46
46
|
})
|
|
47
47
|
})
|
|
48
48
|
|
|
49
|
-
test('
|
|
49
|
+
test('does not treat a removed view registry as Schema authority', () => {
|
|
50
50
|
const root = mkdtempSync(join(tmpdir(), 'studio-inline-view-registry-'))
|
|
51
51
|
roots.push(root)
|
|
52
52
|
const viewsDir = join(root, 'views')
|
|
@@ -68,29 +68,10 @@ export const views = { services, service }
|
|
|
68
68
|
`,
|
|
69
69
|
)
|
|
70
70
|
|
|
71
|
-
expect(buildViews(root)).toEqual([
|
|
72
|
-
{
|
|
73
|
-
slug: 'services',
|
|
74
|
-
kind: 'spa',
|
|
75
|
-
url: undefined,
|
|
76
|
-
file: 'views/index.ts',
|
|
77
|
-
auth: 'required',
|
|
78
|
-
mount: '/ui/services',
|
|
79
|
-
description: 'Browse services.',
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
slug: 'service',
|
|
83
|
-
kind: 'spa',
|
|
84
|
-
url: undefined,
|
|
85
|
-
file: 'views/index.ts',
|
|
86
|
-
auth: 'required',
|
|
87
|
-
mount: '/ui/service',
|
|
88
|
-
viewFor: 'CloudflareWorker',
|
|
89
|
-
},
|
|
90
|
-
])
|
|
71
|
+
expect(buildViews(root)).toEqual([])
|
|
91
72
|
})
|
|
92
73
|
|
|
93
|
-
test('joins canonical Bundle Views with
|
|
74
|
+
test('joins canonical Bundle Views with defineFrontend route metadata', () => {
|
|
94
75
|
const root = mkdtempSync(join(tmpdir(), 'studio-current-react-view-'))
|
|
95
76
|
roots.push(root)
|
|
96
77
|
mkdirSync(join(root, 'schema', 'application'), { recursive: true })
|
|
@@ -118,11 +99,13 @@ export const schema = defineSchema(ORIGIN, schemaInput)
|
|
|
118
99
|
)
|
|
119
100
|
writeFileSync(
|
|
120
101
|
join(root, 'views', 'routes.ts'),
|
|
121
|
-
`import {
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
102
|
+
`import { defineFrontend, vite } from '@astrale-os/sdk/application'
|
|
103
|
+
export const frontend = defineFrontend({
|
|
104
|
+
schema,
|
|
105
|
+
source: vite(),
|
|
106
|
+
routes: { issue: '/ui/issues/:id' },
|
|
107
|
+
entrypoint: 'issue',
|
|
108
|
+
})
|
|
126
109
|
`,
|
|
127
110
|
)
|
|
128
111
|
|
|
@@ -137,7 +120,7 @@ export const frontend = reactFrontend({ schema, routes, entrypoint: 'issue' })
|
|
|
137
120
|
kind: 'definition',
|
|
138
121
|
definitions: [
|
|
139
122
|
{ origin: 'issues.example.dev', kind: 'class', name: 'Issue' },
|
|
140
|
-
{ origin: 'accounts.example.dev', kind: '
|
|
123
|
+
{ origin: 'accounts.example.dev', kind: 'class', name: 'Group' },
|
|
141
124
|
],
|
|
142
125
|
},
|
|
143
126
|
},
|
|
@@ -156,7 +139,7 @@ export const frontend = reactFrontend({ schema, routes, entrypoint: 'issue' })
|
|
|
156
139
|
])
|
|
157
140
|
})
|
|
158
141
|
|
|
159
|
-
test('discovers
|
|
142
|
+
test('discovers Vite frontend default routes from canonical View names', () => {
|
|
160
143
|
const root = mkdtempSync(join(tmpdir(), 'studio-current-generated-view-'))
|
|
161
144
|
roots.push(root)
|
|
162
145
|
mkdirSync(join(root, 'schema'), { recursive: true })
|
|
@@ -170,11 +153,10 @@ test('discovers generated frontend routes without deriving canonical View defaul
|
|
|
170
153
|
)
|
|
171
154
|
writeFileSync(
|
|
172
155
|
join(root, 'views', 'summary', 'index.ts'),
|
|
173
|
-
`const source =
|
|
174
|
-
export const frontend =
|
|
156
|
+
`const source = vite()
|
|
157
|
+
export const frontend = defineFrontend({
|
|
175
158
|
schema,
|
|
176
159
|
source,
|
|
177
|
-
routes: { summary: frontendRoute({}) },
|
|
178
160
|
entrypoint: 'summary',
|
|
179
161
|
})
|
|
180
162
|
`,
|
|
@@ -191,9 +173,9 @@ export const frontend = frontendArtifact({
|
|
|
191
173
|
).toEqual([
|
|
192
174
|
{
|
|
193
175
|
slug: 'summary',
|
|
194
|
-
kind: '
|
|
176
|
+
kind: 'spa',
|
|
195
177
|
auth: 'required',
|
|
196
|
-
mount: '/
|
|
178
|
+
mount: '/summary',
|
|
197
179
|
url: undefined,
|
|
198
180
|
file: 'views/summary/index.ts',
|
|
199
181
|
},
|
|
@@ -215,12 +197,13 @@ test('canonical Bundle views reject static schema and route-only identities', ()
|
|
|
215
197
|
})`,
|
|
216
198
|
)
|
|
217
199
|
writeFileSync(
|
|
218
|
-
join(root, '
|
|
219
|
-
`export const frontend =
|
|
220
|
-
|
|
200
|
+
join(root, 'application.ts'),
|
|
201
|
+
`export const frontend = defineFrontend({
|
|
202
|
+
schema,
|
|
203
|
+
source: external('https://shell.example.dev'),
|
|
221
204
|
routes: {
|
|
222
|
-
account:
|
|
223
|
-
routeOnly:
|
|
205
|
+
account: '/account',
|
|
206
|
+
routeOnly: '/route-only',
|
|
224
207
|
},
|
|
225
208
|
})`,
|
|
226
209
|
)
|
|
@@ -251,14 +234,15 @@ test('canonical Bundle views reject static schema and route-only identities', ()
|
|
|
251
234
|
description: 'Admitted account view.',
|
|
252
235
|
viewFor: 'Account',
|
|
253
236
|
url: 'https://shell.example.dev/account',
|
|
254
|
-
file: '
|
|
237
|
+
file: 'application.ts',
|
|
255
238
|
},
|
|
256
239
|
{
|
|
257
240
|
slug: 'sourceOnly',
|
|
258
|
-
kind: '
|
|
241
|
+
kind: 'spa',
|
|
259
242
|
auth: 'optional',
|
|
260
243
|
description: 'Admitted source-only view.',
|
|
261
|
-
|
|
244
|
+
url: 'https://shell.example.dev/source-only',
|
|
245
|
+
file: 'application.ts',
|
|
262
246
|
},
|
|
263
247
|
])
|
|
264
248
|
expect(buildViews(root, 'schema', {})).toEqual([])
|
|
@@ -6,28 +6,36 @@ import { join } from 'node:path'
|
|
|
6
6
|
import { buildAnatomy } from './anatomy'
|
|
7
7
|
|
|
8
8
|
const roots: string[] = []
|
|
9
|
-
|
|
10
9
|
afterEach(() => {
|
|
11
10
|
for (const root of roots.splice(0)) rmSync(root, { recursive: true, force: true })
|
|
12
11
|
})
|
|
13
12
|
|
|
14
|
-
function project(
|
|
15
|
-
const root = mkdtempSync(join(tmpdir(), 'studio-anatomy-
|
|
13
|
+
function project(nested: boolean) {
|
|
14
|
+
const root = mkdtempSync(join(tmpdir(), 'studio-anatomy-application-'))
|
|
16
15
|
roots.push(root)
|
|
17
|
-
|
|
16
|
+
const owner = nested ? join(root, 'domain') : root
|
|
17
|
+
mkdirSync(join(owner, 'schema'), { recursive: true })
|
|
18
18
|
writeFileSync(join(root, 'package.json'), '{}\n')
|
|
19
|
-
writeFileSync(
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
writeFileSync(
|
|
20
|
+
join(root, 'astrale.config.ts'),
|
|
21
|
+
nested
|
|
22
|
+
? "import application from './domain/application.js'\nexport default { application }\n"
|
|
23
|
+
: 'export default {}\n',
|
|
24
|
+
)
|
|
25
|
+
writeFileSync(join(owner, 'application.ts'), 'export const application = {}\n')
|
|
26
|
+
writeFileSync(
|
|
27
|
+
join(owner, 'schema/index.ts'),
|
|
28
|
+
"defineSchema('example.astrale.ai', { classes: {} })\n",
|
|
29
|
+
)
|
|
30
|
+
return { root, schemaDirName: nested ? 'domain/schema' : 'schema' }
|
|
23
31
|
}
|
|
24
32
|
|
|
25
|
-
test('overview anchors
|
|
26
|
-
const
|
|
27
|
-
expect(
|
|
33
|
+
test('overview anchors a root Application', () => {
|
|
34
|
+
const input = project(false)
|
|
35
|
+
expect(buildAnatomy(input).overview.applicationFile).toBe('application.ts')
|
|
28
36
|
})
|
|
29
37
|
|
|
30
|
-
test('overview preserves
|
|
31
|
-
const
|
|
32
|
-
expect(
|
|
38
|
+
test('overview preserves the config-imported nested Application path', () => {
|
|
39
|
+
const input = project(true)
|
|
40
|
+
expect(buildAnatomy(input).overview.applicationFile).toBe('domain/application.ts')
|
|
33
41
|
})
|
|
@@ -12,6 +12,7 @@ import { join, relative } from 'node:path'
|
|
|
12
12
|
|
|
13
13
|
import type { DomainAnatomy, DomainOverview, SchemaIR } from '../../shared/types'
|
|
14
14
|
|
|
15
|
+
import { resolveApplicationEntry } from '../domain'
|
|
15
16
|
import { asJsonRecord, asString, parseJson } from '../json'
|
|
16
17
|
import { readSettings } from '../state/settings'
|
|
17
18
|
import { buildClientTree, buildEnvFields, buildViews, findSchemaDefinition } from './anatomy-extras'
|
|
@@ -59,15 +60,11 @@ function buildOverview(
|
|
|
59
60
|
|
|
60
61
|
const config = readConfigPreview(root)
|
|
61
62
|
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
: existsSync(join(root, 'domain.ts'))
|
|
65
|
-
? 'domain.ts'
|
|
66
|
-
: undefined
|
|
67
|
-
const domainSrc = compositionFile ? readTextSafe(join(root, compositionFile)) : ''
|
|
63
|
+
const application = resolveApplicationEntry(root)
|
|
64
|
+
const applicationSrc = application === null ? '' : readTextSafe(application)
|
|
68
65
|
const origin =
|
|
69
66
|
schemaOrigin ??
|
|
70
|
-
|
|
67
|
+
applicationSrc.match(/defineSchema\(\s*['"]([^'"]+)['"]/)?.[1] ??
|
|
71
68
|
readTextSafe(join(root, schemaDirName, 'index.ts')).match(
|
|
72
69
|
/defineSchema\(\s*['"]([^'"]+)['"]/,
|
|
73
70
|
)?.[1] ??
|
|
@@ -75,11 +72,11 @@ function buildOverview(
|
|
|
75
72
|
|
|
76
73
|
return {
|
|
77
74
|
origin,
|
|
78
|
-
|
|
75
|
+
applicationFile:
|
|
76
|
+
application === null ? undefined : relative(root, application).replaceAll('\\', '/'),
|
|
79
77
|
adapter: config.adapter,
|
|
80
78
|
prodTarget: config.prodTarget,
|
|
81
79
|
devSecrets: config.devSecrets,
|
|
82
|
-
postInstall: undefined,
|
|
83
80
|
requires: [],
|
|
84
81
|
packageName: pkg?.name,
|
|
85
82
|
packageVersion: pkg?.version,
|
|
@@ -18,7 +18,6 @@ export async function buildBundle(handle: DomainHandle): Promise<StudioSchemaBun
|
|
|
18
18
|
let schemaRoot: unknown | undefined
|
|
19
19
|
let schemaMode: StudioSchemaBundle['schemaMode'] = 'unavailable'
|
|
20
20
|
let schemaRevision: StudioSchemaBundle['schemaRevision']
|
|
21
|
-
let importedInterfaces: StudioSchemaBundle['importedInterfaces']
|
|
22
21
|
let error: StudioSchemaBundle['error'] = null
|
|
23
22
|
let extractedBy: StudioSchemaBundle['extractedBy'] = 'runtime-bun'
|
|
24
23
|
|
|
@@ -33,7 +32,6 @@ export async function buildBundle(handle: DomainHandle): Promise<StudioSchemaBun
|
|
|
33
32
|
if (r.root !== null) schemaRoot = r.root
|
|
34
33
|
schemaMode = r.schemaMode
|
|
35
34
|
if (r.revision !== null) schemaRevision = r.revision
|
|
36
|
-
importedInterfaces = r.importedInterfaces
|
|
37
35
|
} else {
|
|
38
36
|
error = { message: r.error?.message ?? 'schema failed to compile' }
|
|
39
37
|
extractedBy = 'static-tsmorph-fallback'
|
|
@@ -65,7 +63,6 @@ export async function buildBundle(handle: DomainHandle): Promise<StudioSchemaBun
|
|
|
65
63
|
ir,
|
|
66
64
|
...(schemaRoot === undefined ? {} : { schemaRoot }),
|
|
67
65
|
overlay,
|
|
68
|
-
importedInterfaces,
|
|
69
66
|
error,
|
|
70
67
|
extractedAt: new Date().toISOString(),
|
|
71
68
|
}
|