@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
|
@@ -1,100 +1,55 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { expect, test } from 'bun:test'
|
|
2
2
|
|
|
3
|
-
import type {
|
|
3
|
+
import type { StudioSchemaBundle } from '../../shared/types'
|
|
4
4
|
|
|
5
5
|
import { schemaRefs } from './schema-refs'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
type: 'interface',
|
|
15
|
-
name,
|
|
16
|
-
origin,
|
|
17
|
-
ref: { origin, kind: 'interface', name },
|
|
18
|
-
properties: Object.fromEntries(properties.map((property) => [property, { type: 'string' }])),
|
|
19
|
-
methods: Object.fromEntries(
|
|
20
|
-
methods.map((method) => [
|
|
21
|
-
method,
|
|
22
|
-
{
|
|
23
|
-
name: method,
|
|
24
|
-
params: {},
|
|
25
|
-
returns: {},
|
|
26
|
-
static: false,
|
|
27
|
-
inheritance: 'default',
|
|
28
|
-
},
|
|
29
|
-
]),
|
|
30
|
-
),
|
|
7
|
+
test('enumerates local and exact imported Class anchors without collapsing homonyms', () => {
|
|
8
|
+
const method = {
|
|
9
|
+
name: 'rename',
|
|
10
|
+
params: {},
|
|
11
|
+
returns: {},
|
|
12
|
+
static: false,
|
|
13
|
+
inheritance: 'default' as const,
|
|
31
14
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
function bundleWithImports(
|
|
35
|
-
exact: NonNullable<StudioSchemaBundle['ir']>['importedInterfacesByKey'],
|
|
36
|
-
legacy: Record<string, IrInterface>,
|
|
37
|
-
): StudioSchemaBundle {
|
|
38
|
-
return {
|
|
15
|
+
const bundle = {
|
|
39
16
|
ir: {
|
|
17
|
+
version: 'v1',
|
|
40
18
|
domain: 'root.example.dev',
|
|
41
|
-
|
|
42
|
-
|
|
19
|
+
classes: {
|
|
20
|
+
Document: {
|
|
21
|
+
type: 'node',
|
|
22
|
+
name: 'Document',
|
|
23
|
+
properties: { title: { type: 'string' } },
|
|
24
|
+
methods: { rename: method },
|
|
25
|
+
},
|
|
26
|
+
},
|
|
43
27
|
functions: {},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
test('enumerates every exact homonym without selecting a name-keyed winner', () => {
|
|
52
|
-
const refs = schemaRefs(
|
|
53
|
-
bundleWithImports(
|
|
54
|
-
{
|
|
55
|
-
'directory.example.dev:interface.Named': importedInterface(
|
|
56
|
-
'Named',
|
|
57
|
-
'directory.example.dev',
|
|
58
|
-
['directoryName'],
|
|
59
|
-
),
|
|
60
|
-
'people.example.dev:interface.Named': importedInterface(
|
|
61
|
-
'Named',
|
|
62
|
-
'people.example.dev',
|
|
63
|
-
[],
|
|
64
|
-
['rename'],
|
|
65
|
-
),
|
|
28
|
+
importsByKey: {},
|
|
29
|
+
importedClassesByKey: {
|
|
30
|
+
'directory.example.dev:class.Named': {
|
|
31
|
+
type: 'node',
|
|
32
|
+
name: 'Named',
|
|
33
|
+
properties: { directoryName: { type: 'string' } },
|
|
34
|
+
methods: {},
|
|
66
35
|
},
|
|
67
|
-
{
|
|
68
|
-
|
|
36
|
+
'people.example.dev:class.Named': {
|
|
37
|
+
type: 'node',
|
|
38
|
+
name: 'Named',
|
|
39
|
+
properties: {},
|
|
40
|
+
methods: { rename: method },
|
|
69
41
|
},
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
expect(refs).toContain('interface.directory.example.dev:interface.Named')
|
|
74
|
-
expect(refs).toContain('interface.directory.example.dev:interface.Named.property.directoryName')
|
|
75
|
-
expect(refs).toContain('interface.people.example.dev:interface.Named.method.rename')
|
|
76
|
-
expect(refs).not.toContain('interface.Named')
|
|
77
|
-
expect(refs).not.toContain('interface.Named.property.legacyOnly')
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
test('uses the name-keyed imported interface only when the exact index is absent', () => {
|
|
81
|
-
expect(
|
|
82
|
-
schemaRefs(
|
|
83
|
-
bundleWithImports(undefined, {
|
|
84
|
-
Named: importedInterface('Named', 'legacy.example.dev', ['name']),
|
|
85
|
-
}),
|
|
86
|
-
),
|
|
87
|
-
).toEqual(['interface.Named', 'interface.Named.property.name'])
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
} as unknown as StudioSchemaBundle
|
|
88
45
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
).toEqual([])
|
|
99
|
-
})
|
|
46
|
+
expect(schemaRefs(bundle)).toEqual([
|
|
47
|
+
'class.Document',
|
|
48
|
+
'class.Document.property.title',
|
|
49
|
+
'class.Document.method.rename',
|
|
50
|
+
'class.directory.example.dev:class.Named',
|
|
51
|
+
'class.directory.example.dev:class.Named.property.directoryName',
|
|
52
|
+
'class.people.example.dev:class.Named',
|
|
53
|
+
'class.people.example.dev:class.Named.method.rename',
|
|
54
|
+
])
|
|
100
55
|
})
|
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
import type { StudioSchemaBundle } from '../../shared/types'
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* schema-refs.ts — enumerate every SCHEMA anchor ref a bundle can target, derived
|
|
5
|
-
* from the IR (the authority), NOT from `overlay.sourceSpans`.
|
|
6
|
-
*
|
|
7
|
-
* Source spans are a best-effort ts-morph source-location index: they cover only
|
|
8
|
-
* locally-authored members and only the declaration helpers the parser recognises.
|
|
9
|
-
* Using their keys as the set of "valid" targets falsely orphans real, commentable
|
|
10
|
-
* targets — most notably INHERITED members surfaced in the detail pane's Inherited
|
|
11
|
-
* section (kernel mixins / cross-domain interfaces, e.g. `interface.Named.property.name`),
|
|
12
|
-
* which live in another package and so have no local span. This walks the IR
|
|
13
|
-
* instead, mirroring exactly the refs the detail pane stamps.
|
|
14
|
-
*/
|
|
3
|
+
/** Enumerate every schema anchor represented by the admitted render IR. */
|
|
15
4
|
export function schemaRefs(bundle: StudioSchemaBundle): string[] {
|
|
16
5
|
const ir = bundle.ir
|
|
17
6
|
if (!ir) return []
|
|
@@ -22,46 +11,22 @@ export function schemaRefs(bundle: StudioSchemaBundle): string[] {
|
|
|
22
11
|
methods: Record<string, unknown> | undefined,
|
|
23
12
|
) => {
|
|
24
13
|
refs.add(base)
|
|
25
|
-
for (const
|
|
26
|
-
for (const
|
|
14
|
+
for (const property of Object.keys(properties ?? {})) refs.add(`${base}.property.${property}`)
|
|
15
|
+
for (const method of Object.keys(methods ?? {})) refs.add(`${base}.method.${method}`)
|
|
27
16
|
}
|
|
28
17
|
|
|
29
|
-
for (const [name,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
for (const ep of cls.endpoints ?? [])
|
|
37
|
-
if (ep.name) refs.add(`edge.${name}.endpoint.${ep.name}`)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
for (const name of Object.keys(ir.functions ?? {})) refs.add(`function.${name}`)
|
|
41
|
-
|
|
42
|
-
// Imported interfaces (kernel mixins + cross-domain) are rendered — and so are
|
|
43
|
-
// commentable — in the Inherited section, keyed under the `interface.` namespace.
|
|
44
|
-
// Canonical bundles retain every exact `(origin, kind, name)` identity. Iterate
|
|
45
|
-
// all of them: a short-name map must never pick one homonym by traversal order.
|
|
46
|
-
// The name-keyed bundle field remains a legacy-only fallback.
|
|
47
|
-
if (ir.importedInterfacesByKey !== undefined) {
|
|
48
|
-
for (const [key, iface] of Object.entries(ir.importedInterfacesByKey)) {
|
|
49
|
-
const anchor = importedInterfaceAnchor(key)
|
|
50
|
-
if (anchor) addMember(anchor, iface.properties, iface.methods)
|
|
18
|
+
for (const [name, definition] of Object.entries(ir.classes)) {
|
|
19
|
+
const namespace = definition.type === 'edge' ? 'edge' : 'class'
|
|
20
|
+
addMember(`${namespace}.${name}`, definition.properties, definition.methods)
|
|
21
|
+
if (definition.type === 'edge') {
|
|
22
|
+
for (const endpoint of definition.endpoints ?? []) {
|
|
23
|
+
if (endpoint.name) refs.add(`edge.${name}.endpoint.${endpoint.name}`)
|
|
24
|
+
}
|
|
51
25
|
}
|
|
52
|
-
} else {
|
|
53
|
-
for (const [name, iface] of Object.entries(bundle.importedInterfaces ?? {}))
|
|
54
|
-
addMember(`interface.${name}`, iface.properties, iface.methods)
|
|
55
26
|
}
|
|
56
|
-
|
|
27
|
+
for (const name of Object.keys(ir.functions)) refs.add(`function.${name}`)
|
|
28
|
+
for (const [key, definition] of Object.entries(ir.importedClassesByKey)) {
|
|
29
|
+
addMember(`class.${key}`, definition.properties, definition.methods)
|
|
30
|
+
}
|
|
57
31
|
return [...refs]
|
|
58
32
|
}
|
|
59
|
-
|
|
60
|
-
function importedInterfaceAnchor(key: string): string | null {
|
|
61
|
-
const separator = key.lastIndexOf(':')
|
|
62
|
-
if (separator <= 0) return null
|
|
63
|
-
const ref = key.slice(separator + 1)
|
|
64
|
-
if (!ref.startsWith('interface.')) return null
|
|
65
|
-
const name = ref.slice('interface.'.length)
|
|
66
|
-
return /^[A-Za-z_$][\w$]*$/.test(name) ? `interface.${key}` : null
|
|
67
|
-
}
|