@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.
Files changed (173) hide show
  1. package/dist/astrale.js +55649 -59388
  2. package/dist/public/connect-core.js +1972 -26831
  3. package/dist/public/keys/index.js +1754 -40686
  4. package/dist/public/paths/index.js +859 -39511
  5. package/dist/types/admin/instance/model.d.ts +3 -4
  6. package/dist/types/errors.d.ts +1 -1
  7. package/dist/types/lib/idp.d.ts +1 -0
  8. package/dist/types/lib/instance-target.d.ts +1 -1
  9. package/dist/types/lib/log.d.ts +2 -2
  10. package/dist/types/lib/update.d.ts +30 -0
  11. package/package.json +4 -6
  12. package/src/__tests__/fixtures/publication.ts +20 -0
  13. package/src/admin/__tests__/binding.test.ts +14 -21
  14. package/src/admin/__tests__/fixture.ts +101 -0
  15. package/src/admin/binding.ts +86 -6
  16. package/src/admin/catalog/.spec/api.d.ts +2 -2
  17. package/src/admin/catalog/__tests__/client.test.ts +20 -49
  18. package/src/admin/catalog/client.ts +35 -26
  19. package/src/admin/catalog/model.ts +3 -4
  20. package/src/admin/graph/.spec/api.d.ts +4 -10
  21. package/src/admin/graph/nodes.ts +1 -1
  22. package/src/admin/instance/.spec/api.d.ts +2 -2
  23. package/src/admin/instance/__tests__/client.test.ts +58 -83
  24. package/src/admin/instance/client.ts +49 -39
  25. package/src/admin/instance/model.ts +9 -8
  26. package/src/commands/__tests__/call-describe.test.ts +46 -33
  27. package/src/commands/__tests__/domain-install-operation.test.ts +3 -14
  28. package/src/commands/__tests__/domain-install-owned.test.ts +1 -1
  29. package/src/commands/__tests__/domain-list.test.ts +5 -25
  30. package/src/commands/__tests__/install-identity-override.test.ts +3 -14
  31. package/src/commands/__tests__/read-commands.test.ts +35 -10
  32. package/src/commands/__tests__/update.test.ts +25 -3
  33. package/src/commands/call-describe.ts +59 -67
  34. package/src/commands/call.ts +41 -54
  35. package/src/commands/domain/install.ts +2 -2
  36. package/src/commands/domain/uninstall.ts +2 -2
  37. package/src/commands/get.ts +13 -14
  38. package/src/commands/identity/__tests__/register.test.ts +3 -3
  39. package/src/commands/identity/register.ts +5 -4
  40. package/src/commands/instance/delete.ts +5 -3
  41. package/src/commands/instance/status.ts +1 -9
  42. package/src/commands/introspect.ts +4 -11
  43. package/src/commands/logs.ts +24 -25
  44. package/src/commands/mutate.ts +6 -5
  45. package/src/commands/query.ts +27 -30
  46. package/src/commands/token.ts +8 -7
  47. package/src/commands/update.ts +31 -11
  48. package/src/commands/view.ts +4 -3
  49. package/src/connection/.spec/api.d.ts +7 -8
  50. package/src/connection/.spec/architecture.md +5 -4
  51. package/src/connection/.spec/flows/session.ts +2 -2
  52. package/src/connection/.spec/laws/connection.ts +6 -2
  53. package/src/connection/.spec/layout.ts +1 -0
  54. package/src/connection/__tests__/credential.test.ts +1 -1
  55. package/src/connection/__tests__/errors.test.ts +27 -20
  56. package/src/connection/__tests__/exchange.test.ts +30 -1
  57. package/src/connection/__tests__/failure-fixtures.ts +39 -0
  58. package/src/connection/__tests__/failure-safety.test.ts +75 -0
  59. package/src/connection/__tests__/self.test.ts +31 -11
  60. package/src/connection/__tests__/session.test.ts +3 -3
  61. package/src/connection/call.ts +1 -1
  62. package/src/connection/credential.ts +2 -2
  63. package/src/connection/errors.ts +1 -355
  64. package/src/connection/exchange.ts +47 -23
  65. package/src/connection/failure/classify.ts +110 -0
  66. package/src/connection/failure/debug.ts +26 -0
  67. package/src/connection/failure/index.ts +18 -0
  68. package/src/connection/failure/model.ts +28 -0
  69. package/src/connection/failure/render.ts +116 -0
  70. package/src/connection/reasons.ts +16 -0
  71. package/src/connection/self.ts +39 -21
  72. package/src/connection/session.ts +8 -8
  73. package/src/errors.ts +3 -2
  74. package/src/graph/.spec/api.d.ts +12 -5
  75. package/src/graph/.spec/layout.ts +9 -1
  76. package/src/graph/__tests__/mutation.test.ts +2 -2
  77. package/src/graph/__tests__/query.test.ts +25 -6
  78. package/src/graph/class.ts +30 -0
  79. package/src/graph/index.ts +1 -0
  80. package/src/graph/query.ts +21 -32
  81. package/src/identity/.spec/api.d.ts +2 -2
  82. package/src/identity/__tests__/registration.test.ts +1 -1
  83. package/src/identity/registration.ts +3 -3
  84. package/src/lib/__tests__/domain-publication.test.ts +4 -15
  85. package/src/lib/__tests__/idp.test.ts +25 -0
  86. package/src/lib/__tests__/instance-target.test.ts +6 -39
  87. package/src/lib/__tests__/log-errors.test.ts +53 -0
  88. package/src/lib/__tests__/studio-server-deps.test.ts +1 -1
  89. package/src/lib/__tests__/update.test.ts +101 -8
  90. package/src/lib/__tests__/view-open-intent.test.ts +0 -2
  91. package/src/lib/__tests__/view-server.test.ts +1 -1
  92. package/src/lib/__tests__/view-session.test.ts +1 -1
  93. package/src/lib/command-dx.ts +1 -4
  94. package/src/lib/domain-publication.ts +1 -1
  95. package/src/lib/idp.ts +29 -1
  96. package/src/lib/instance-target.ts +3 -14
  97. package/src/lib/log.ts +11 -6
  98. package/src/lib/update.ts +120 -26
  99. package/src/lib/validation.ts +2 -2
  100. package/src/lib/view/resolve.ts +1 -1
  101. package/src/program/__tests__/program.test.ts +1 -1
  102. package/studio/client/dist/assets/{elk-api-lwhFo7vB.js → elk-api-Di4OXGNH.js} +1 -1
  103. package/studio/client/dist/assets/index-BLm6J11H.js +81 -0
  104. package/studio/client/dist/assets/index-BiGR8Oo9.css +1 -0
  105. package/studio/client/dist/assets/index-DTjvkOUX.js +8 -0
  106. package/studio/client/dist/index.html +2 -2
  107. package/studio/package.json +2 -9
  108. package/studio/server/agent/ask.test.ts +1 -1
  109. package/studio/server/agent/bridge/grant.test.ts +1 -1
  110. package/studio/server/agent/bridge/routes.test.ts +1 -1
  111. package/studio/server/agent/harness/claude/adapter.test.ts +15 -5
  112. package/studio/server/agent/prompts/anchors.test.ts +32 -36
  113. package/studio/server/agent/prompts/anchors.ts +20 -49
  114. package/studio/server/agent/prompts/system.test.ts +3 -2
  115. package/studio/server/agent/prompts/system.ts +3 -3
  116. package/studio/server/agent/routes.test.ts +1 -1
  117. package/studio/server/agent/run/coordinator.test.ts +1 -1
  118. package/studio/server/api/canvas.ts +0 -1
  119. package/studio/server/api-agent-loadout.test.ts +1 -1
  120. package/studio/server/api.test.ts +1 -1
  121. package/studio/server/cache.test.ts +23 -12
  122. package/studio/server/cache.ts +12 -15
  123. package/studio/server/domain.test.ts +50 -68
  124. package/studio/server/domain.ts +82 -63
  125. package/studio/server/handoff/copy.ts +1 -1
  126. package/studio/server/index.ts +1 -1
  127. package/studio/server/instances/probe.test.ts +1 -1
  128. package/studio/server/introspect/anatomy/views/routes.ts +46 -37
  129. package/studio/server/introspect/anatomy/views.ts +9 -14
  130. package/studio/server/introspect/anatomy-extras.test.ts +26 -42
  131. package/studio/server/introspect/anatomy.test.ts +22 -14
  132. package/studio/server/introspect/anatomy.ts +6 -9
  133. package/studio/server/introspect/bundle.ts +0 -3
  134. package/studio/server/introspect/canonical-schema.test.ts +94 -389
  135. package/studio/server/introspect/canonical-schema.ts +227 -457
  136. package/studio/server/introspect/core-extractor.ts +18 -127
  137. package/studio/server/introspect/core.ts +1 -2
  138. package/studio/server/introspect/diff.test.ts +11 -7
  139. package/studio/server/introspect/diff.ts +18 -55
  140. package/studio/server/introspect/extractor.ts +22 -117
  141. package/studio/server/introspect/overlay-tsmorph.test.ts +119 -240
  142. package/studio/server/introspect/overlay.test.ts +26 -54
  143. package/studio/server/introspect/overlay.ts +10 -37
  144. package/studio/server/introspect/revision.test.ts +1 -1
  145. package/studio/server/introspect/revision.ts +1 -1
  146. package/studio/server/introspect/runtime.test.ts +65 -183
  147. package/studio/server/introspect/runtime.ts +8 -25
  148. package/studio/server/introspect/schema-ir-json.test.ts +70 -0
  149. package/studio/server/introspect/schema-ir-json.ts +38 -68
  150. package/studio/server/introspect/schema-refs.test.ts +43 -88
  151. package/studio/server/introspect/schema-refs.ts +14 -49
  152. package/studio/server/introspect/source-overlay/handlers.ts +116 -636
  153. package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -3
  154. package/studio/server/introspect/source-overlay/spans.ts +15 -45
  155. package/studio/server/state/baseline.test.ts +14 -9
  156. package/studio/server/state/baseline.ts +3 -5
  157. package/studio/server/state/visibility.ts +1 -5
  158. package/studio/server/views/model.ts +3 -3
  159. package/studio/server/views/target.test.ts +17 -74
  160. package/studio/server/views/target.ts +24 -50
  161. package/studio/server/watch.test.ts +11 -11
  162. package/studio/server/watch.ts +8 -4
  163. package/studio/server/workspace-watch.ts +2 -2
  164. package/studio/shared/contracts/schema.ts +38 -107
  165. package/studio/shared/contracts/surface.test.ts +13 -15
  166. package/studio/shared/contracts/workspace.ts +2 -11
  167. package/studio/shared/schema/identity.test.ts +20 -44
  168. package/studio/shared/schema/identity.ts +9 -23
  169. package/viewer/dist/main.js +40 -61
  170. package/studio/client/dist/assets/index-B-c-smo9.js +0 -8
  171. package/studio/client/dist/assets/index-BckHuAWk.js +0 -81
  172. package/studio/client/dist/assets/index-C4aNQ6dz.css +0 -1
  173. package/studio/server/introspect/anatomy/views/legacy.ts +0 -232
@@ -1,100 +1,55 @@
1
- import { describe, expect, test } from 'bun:test'
1
+ import { expect, test } from 'bun:test'
2
2
 
3
- import type { IrInterface, StudioSchemaBundle } from '../../shared/types'
3
+ import type { StudioSchemaBundle } from '../../shared/types'
4
4
 
5
5
  import { schemaRefs } from './schema-refs'
6
6
 
7
- function importedInterface(
8
- name: string,
9
- origin: string,
10
- properties: string[] = [],
11
- methods: string[] = [],
12
- ): IrInterface {
13
- return {
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
- interfaces: {},
42
- classes: {},
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
- ...(exact === undefined ? {} : { importedInterfacesByKey: exact }),
45
- },
46
- importedInterfaces: legacy,
47
- } as unknown as StudioSchemaBundle
48
- }
49
-
50
- describe('schema refs for imported interfaces', () => {
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
- Named: importedInterface('Named', 'legacy.invalid', ['legacyOnly']),
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
- expect(
90
- schemaRefs(
91
- bundleWithImports(
92
- {},
93
- {
94
- Named: importedInterface('Named', 'legacy.example.dev', ['name']),
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 p of Object.keys(properties ?? {})) refs.add(`${base}.property.${p}`)
26
- for (const m of Object.keys(methods ?? {})) refs.add(`${base}.method.${m}`)
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, iface] of Object.entries(ir.interfaces))
30
- addMember(`interface.${name}`, iface.properties, iface.methods)
31
-
32
- for (const [name, cls] of Object.entries(ir.classes)) {
33
- const ns = cls.type === 'edge' ? 'edge' : 'class'
34
- addMember(`${ns}.${name}`, cls.properties, cls.methods)
35
- if (cls.type === 'edge')
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
- }