@astrale-os/cli 1.0.0-beta.0 → 1.0.0-beta.2

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 (180) hide show
  1. package/README.md +7 -11
  2. package/dist/astrale.js +3769 -3549
  3. package/dist/public/connect-core.js +396 -392
  4. package/dist/public/keys/index.js +371 -378
  5. package/dist/public/paths/index.js +371 -378
  6. package/dist/types/lib/idp.d.ts +6 -0
  7. package/dist/types/lib/meta.d.ts +2 -2
  8. package/package.json +6 -4
  9. package/src/admin/binding.ts +168 -0
  10. package/src/admin/catalog/__tests__/client.test.ts +2 -2
  11. package/src/admin/catalog/client.ts +4 -9
  12. package/src/admin/instance/__tests__/client.test.ts +5 -3
  13. package/src/admin/instance/client.ts +9 -27
  14. package/src/commands/__tests__/auth-login.test.ts +54 -1
  15. package/src/commands/__tests__/call.test.ts +5 -1
  16. package/src/commands/__tests__/domain-install-operation.test.ts +23 -7
  17. package/src/commands/__tests__/domain-install-owned.test.ts +5 -1
  18. package/src/commands/__tests__/domain-list.test.ts +83 -4
  19. package/src/commands/__tests__/install-identity-override.test.ts +30 -19
  20. package/src/commands/__tests__/studio-descriptor.test.ts +22 -0
  21. package/src/commands/__tests__/update.test.ts +73 -0
  22. package/src/commands/domain/install.ts +11 -15
  23. package/src/commands/domain/list.ts +17 -12
  24. package/src/commands/studio.ts +20 -0
  25. package/src/commands/update.ts +39 -13
  26. package/src/connection/__tests__/errors.test.ts +16 -12
  27. package/src/connection/__tests__/exchange.test.ts +6 -5
  28. package/src/connection/exchange.ts +5 -4
  29. package/src/lib/__tests__/domain-publication.test.ts +144 -0
  30. package/src/lib/__tests__/idp-session.test.ts +22 -0
  31. package/src/lib/__tests__/idp.test.ts +2 -0
  32. package/src/lib/__tests__/instance.test.ts +6 -0
  33. package/src/lib/__tests__/studio-server-deps.test.ts +53 -16
  34. package/src/lib/__tests__/update.test.ts +12 -0
  35. package/src/lib/domain-publication.ts +102 -0
  36. package/src/lib/idp.ts +5 -1
  37. package/src/lib/instance.ts +6 -1
  38. package/src/lib/login-flow.ts +13 -3
  39. package/src/lib/meta.ts +2 -2
  40. package/src/lib/update.ts +4 -4
  41. package/src/program/__tests__/program.test.ts +1 -1
  42. package/studio/client/dist/assets/{elk-api-D2xgMJvi.js → elk-api-lwhFo7vB.js} +1 -1
  43. package/studio/client/dist/assets/index-B-c-smo9.js +8 -0
  44. package/studio/client/dist/assets/index-BckHuAWk.js +81 -0
  45. package/studio/client/dist/assets/index-C4aNQ6dz.css +1 -0
  46. package/studio/client/dist/index.html +2 -2
  47. package/studio/package.json +3 -1
  48. package/studio/server/agent/bridge/stdio.ts +8 -1
  49. package/studio/server/agent/conversation.test.ts +10 -5
  50. package/studio/server/agent/conversation.ts +56 -8
  51. package/studio/server/agent/harness/codex/loadout.ts +18 -21
  52. package/studio/server/agent/harness/gateway/config.ts +20 -18
  53. package/studio/server/agent/harness/selection.ts +9 -1
  54. package/studio/server/agent/prompts/system.ts +3 -2
  55. package/studio/server/agent/prompts/turn.ts +13 -4
  56. package/studio/server/agent/run/completion.ts +2 -2
  57. package/studio/server/agent/run/preparation.ts +6 -5
  58. package/studio/server/agent/run/transcript.test.ts +35 -1
  59. package/studio/server/agent/run/transcript.ts +169 -3
  60. package/studio/server/agent/run/usage.test.ts +24 -0
  61. package/studio/server/agent/run/usage.ts +26 -1
  62. package/studio/server/api/canvas.ts +44 -0
  63. package/studio/server/api/comments.ts +85 -0
  64. package/studio/server/api/context.ts +61 -0
  65. package/studio/server/api/deployment.ts +39 -0
  66. package/studio/server/api/documents.ts +55 -0
  67. package/studio/server/api/domain.ts +59 -0
  68. package/studio/server/api/http.ts +45 -0
  69. package/studio/server/api/project.ts +57 -0
  70. package/studio/server/api/schema.ts +12 -0
  71. package/studio/server/api/views.ts +57 -0
  72. package/studio/server/api/workspace.ts +60 -0
  73. package/studio/server/api.test.ts +147 -0
  74. package/studio/server/api.ts +20 -422
  75. package/studio/server/cache.test.ts +111 -0
  76. package/studio/server/cache.ts +163 -9
  77. package/studio/server/cli-consumers.test.ts +494 -0
  78. package/studio/server/cli.test.ts +88 -0
  79. package/studio/server/cli.ts +240 -0
  80. package/studio/server/client-package.ts +25 -1
  81. package/studio/server/domain.test.ts +30 -2
  82. package/studio/server/domain.ts +14 -2
  83. package/studio/server/environment/dotenv-preview.test.ts +39 -0
  84. package/studio/server/environment/dotenv-preview.ts +27 -0
  85. package/studio/server/environment/files.test.ts +53 -0
  86. package/studio/server/{state/env.ts → environment/files.ts} +7 -48
  87. package/studio/server/{state → handoff}/copy.ts +21 -6
  88. package/studio/server/handoff/service.test.ts +22 -0
  89. package/studio/server/{state/handoff.ts → handoff/service.ts} +21 -14
  90. package/studio/server/instances/active.ts +72 -0
  91. package/studio/server/instances/deploy-record.test.ts +31 -0
  92. package/studio/server/instances/deploy-record.ts +37 -0
  93. package/studio/server/instances/deploy.ts +56 -0
  94. package/studio/server/{state/instance.test.ts → instances/probe.test.ts} +25 -21
  95. package/studio/server/instances/probe.ts +67 -0
  96. package/studio/server/instances/status.test.ts +12 -0
  97. package/studio/server/instances/status.ts +49 -0
  98. package/studio/server/introspect/anatomy/client-tree.ts +57 -0
  99. package/studio/server/introspect/anatomy/env-fields.ts +66 -0
  100. package/studio/server/introspect/anatomy/schema-definition.ts +53 -0
  101. package/studio/server/introspect/anatomy/source.ts +181 -0
  102. package/studio/server/introspect/anatomy/views/legacy.ts +232 -0
  103. package/studio/server/introspect/anatomy/views/routes.ts +105 -0
  104. package/studio/server/introspect/anatomy/views.ts +58 -0
  105. package/studio/server/introspect/anatomy-extras.test.ts +91 -4
  106. package/studio/server/introspect/anatomy-extras.ts +7 -726
  107. package/studio/server/introspect/anatomy.ts +46 -19
  108. package/studio/server/introspect/bundle.ts +15 -6
  109. package/studio/server/introspect/canonical-schema.test.ts +79 -0
  110. package/studio/server/introspect/canonical-schema.ts +80 -18
  111. package/studio/server/introspect/config-preview.test.ts +32 -0
  112. package/studio/server/introspect/config-preview.ts +119 -0
  113. package/studio/server/introspect/diff.test.ts +7 -11
  114. package/studio/server/introspect/diff.ts +28 -37
  115. package/studio/server/introspect/extractor.ts +8 -6
  116. package/studio/server/introspect/hash.ts +5 -2
  117. package/studio/server/introspect/overlay-tsmorph.ts +7 -1305
  118. package/studio/server/introspect/revision.test.ts +54 -0
  119. package/studio/server/introspect/revision.ts +49 -0
  120. package/studio/server/introspect/runtime.test.ts +63 -5
  121. package/studio/server/introspect/runtime.ts +49 -3
  122. package/studio/server/introspect/schema-ir-json.ts +181 -0
  123. package/studio/server/introspect/source-overlay/annotations.ts +14 -0
  124. package/studio/server/introspect/source-overlay/handlers.ts +681 -0
  125. package/studio/server/introspect/source-overlay/kernel-calls.ts +49 -0
  126. package/studio/server/introspect/source-overlay/project.ts +248 -0
  127. package/studio/server/introspect/source-overlay/spans.ts +360 -0
  128. package/studio/server/json.ts +46 -0
  129. package/studio/server/lifecycle.ts +5 -1
  130. package/studio/server/sse.test.ts +26 -0
  131. package/studio/server/sse.ts +4 -1
  132. package/studio/server/state/baseline.test.ts +212 -1
  133. package/studio/server/state/baseline.ts +145 -29
  134. package/studio/server/state/comments.test.ts +66 -1
  135. package/studio/server/state/comments.ts +173 -10
  136. package/studio/server/state/context.ts +34 -2
  137. package/studio/server/state/documents.ts +42 -1
  138. package/studio/server/state/integrations.ts +27 -1
  139. package/studio/server/state/layout.test.ts +34 -0
  140. package/studio/server/state/layout.ts +44 -17
  141. package/studio/server/state/settings.ts +29 -22
  142. package/studio/server/state/store.test.ts +122 -0
  143. package/studio/server/state/store.ts +66 -17
  144. package/studio/server/state/visibility.ts +22 -7
  145. package/studio/server/views/model.test.ts +57 -0
  146. package/studio/server/views/model.ts +66 -0
  147. package/studio/server/views/runtime.ts +40 -0
  148. package/studio/server/views/selection-repository.test.ts +31 -0
  149. package/studio/server/views/selection-repository.ts +60 -0
  150. package/studio/server/views/session.test.ts +73 -0
  151. package/studio/server/views/session.ts +166 -0
  152. package/studio/server/{state/views.test.ts → views/target.test.ts} +8 -159
  153. package/studio/server/views/target.ts +248 -0
  154. package/studio/server/watch.ts +1 -1
  155. package/studio/server/workspace/catalog.test.ts +17 -0
  156. package/studio/server/workspace/catalog.ts +43 -0
  157. package/studio/server/{state → workspace}/create.test.ts +1 -1
  158. package/studio/server/{state → workspace}/create.ts +1 -1
  159. package/studio/server/{state → workspace}/git.ts +1 -1
  160. package/studio/server/workspace/updates.ts +83 -0
  161. package/studio/server/workspace-state.ts +1 -1
  162. package/studio/shared/contracts/README.md +16 -0
  163. package/studio/shared/contracts/agent.ts +270 -0
  164. package/studio/shared/contracts/runtime.ts +50 -0
  165. package/studio/shared/contracts/schema.ts +462 -0
  166. package/studio/shared/contracts/surface.test.ts +319 -0
  167. package/studio/shared/contracts/workspace.ts +274 -0
  168. package/studio/shared/layout.test.ts +116 -0
  169. package/studio/shared/schema/identity.test.ts +58 -0
  170. package/studio/shared/schema/identity.ts +82 -0
  171. package/studio/shared/types.ts +11 -1099
  172. package/studio/tsconfig.json +1 -1
  173. package/viewer/dist/main.js +35 -35
  174. package/studio/client/dist/assets/index-BMdnsIJA.css +0 -1
  175. package/studio/client/dist/assets/index-D-vRV8w7.js +0 -8
  176. package/studio/client/dist/assets/index-LGSWRrk8.js +0 -81
  177. package/studio/server/state/catalog.ts +0 -117
  178. package/studio/server/state/instance.ts +0 -280
  179. package/studio/server/state/updates.ts +0 -63
  180. package/studio/server/state/views.ts +0 -535
@@ -0,0 +1,58 @@
1
+ import { describe, expect, test } from 'bun:test'
2
+
3
+ import {
4
+ IR_SCHEMA_REF_KINDS,
5
+ definitionRefKey,
6
+ isIrDefinitionRef,
7
+ isIrInterfaceRef,
8
+ isIrSchemaRef,
9
+ parseDefinitionRefKey,
10
+ parseSchemaRefKey,
11
+ schemaRefKey,
12
+ type IrSchemaRef,
13
+ } from './identity'
14
+
15
+ describe('canonical schema identity', () => {
16
+ test('round-trips every structural reference kind without short-name aliases', () => {
17
+ for (const kind of IR_SCHEMA_REF_KINDS) {
18
+ const ref = {
19
+ origin: 'directory.example.dev',
20
+ kind,
21
+ name: '$Named_member',
22
+ } satisfies IrSchemaRef
23
+ expect(parseSchemaRefKey(schemaRefKey(ref))).toEqual(ref)
24
+ }
25
+ })
26
+
27
+ test('keeps class and interface identities distinct', () => {
28
+ const classRef = { origin: 'contracts.example.dev', kind: 'class', name: 'Shared' } as const
29
+ const interfaceRef = {
30
+ origin: 'contracts.example.dev',
31
+ kind: 'interface',
32
+ name: 'Shared',
33
+ } as const
34
+
35
+ expect(definitionRefKey(classRef)).toBe('contracts.example.dev:class.Shared')
36
+ expect(definitionRefKey(interfaceRef)).toBe('contracts.example.dev:interface.Shared')
37
+ expect(parseDefinitionRefKey(definitionRefKey(classRef))).toEqual(classRef)
38
+ expect(parseDefinitionRefKey(definitionRefKey(interfaceRef))).toEqual(interfaceRef)
39
+ })
40
+
41
+ test('guards structural refs without claiming SDK admission', () => {
42
+ expect(isIrSchemaRef({ origin: 'a.dev', kind: 'policy', name: 'may_read' })).toBe(true)
43
+ expect(isIrDefinitionRef({ origin: 'a.dev', kind: 'class', name: 'Thing' })).toBe(true)
44
+ expect(isIrDefinitionRef({ origin: 'a.dev', kind: 'policy', name: 'may_read' })).toBe(false)
45
+ expect(isIrInterfaceRef({ origin: 'a.dev', kind: 'interface', name: 'Named' })).toBe(true)
46
+ expect(isIrInterfaceRef({ origin: 'a.dev', kind: 'class', name: 'Named' })).toBe(false)
47
+ expect(isIrSchemaRef({ origin: 'a.dev', kind: 'unknown', name: 'Thing' })).toBe(false)
48
+ expect(isIrSchemaRef({ origin: 'a.dev', kind: 'class' })).toBe(false)
49
+ })
50
+
51
+ test('rejects malformed and non-definition keys', () => {
52
+ expect(parseSchemaRefKey('a.dev:unknown.Thing')).toBeUndefined()
53
+ expect(parseSchemaRefKey('a.dev:class.')).toBeUndefined()
54
+ expect(parseSchemaRefKey(':class.Thing')).toBeUndefined()
55
+ expect(parseSchemaRefKey(null)).toBeUndefined()
56
+ expect(parseDefinitionRefKey('a.dev:type.Payload')).toBeUndefined()
57
+ })
58
+ })
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Canonical Studio identity for DomainSchema references.
3
+ *
4
+ * These helpers validate and encode only the structural wire coordinate. SDK
5
+ * admission remains the authority for whether a reference is semantically valid.
6
+ */
7
+
8
+ export const IR_SCHEMA_REF_KINDS = [
9
+ 'type',
10
+ 'interface',
11
+ 'class',
12
+ 'function',
13
+ 'policy',
14
+ 'view',
15
+ 'core',
16
+ ] as const
17
+
18
+ export type IrSchemaRefKind = (typeof IR_SCHEMA_REF_KINDS)[number]
19
+
20
+ /** Exact structural coordinate embedded in a canonical DomainSchema V1 root. */
21
+ export interface IrSchemaRef {
22
+ origin: string
23
+ kind: IrSchemaRefKind
24
+ name: string
25
+ }
26
+
27
+ /** Canonical DSL key for a schema member: `origin:kind.name`. */
28
+ export type IrSchemaKey = `${string}:${IrSchemaRefKind}.${string}`
29
+
30
+ export type IrDefinitionRef = Omit<IrSchemaRef, 'kind'> & {
31
+ kind: 'class' | 'interface'
32
+ }
33
+
34
+ export type IrDefinitionKey = `${string}:${IrDefinitionRef['kind']}.${string}`
35
+
36
+ const schemaKinds = new Set<string>(IR_SCHEMA_REF_KINDS)
37
+ const schemaKeyPattern = /^(.+):(type|interface|class|function|policy|view|core)\.(.+)$/
38
+
39
+ /** Structural guard only; it deliberately does not perform SDK admission. */
40
+ export function isIrSchemaRef(value: unknown): value is IrSchemaRef {
41
+ if (!value || typeof value !== 'object') return false
42
+ const ref = value as Partial<IrSchemaRef>
43
+ return (
44
+ typeof ref.origin === 'string' &&
45
+ typeof ref.name === 'string' &&
46
+ typeof ref.kind === 'string' &&
47
+ schemaKinds.has(ref.kind)
48
+ )
49
+ }
50
+
51
+ export function isIrDefinitionRef(value: unknown): value is IrDefinitionRef {
52
+ return isIrSchemaRef(value) && (value.kind === 'class' || value.kind === 'interface')
53
+ }
54
+
55
+ export function isIrInterfaceRef(value: unknown): value is IrDefinitionRef & { kind: 'interface' } {
56
+ return isIrSchemaRef(value) && value.kind === 'interface'
57
+ }
58
+
59
+ export function schemaRefKey(ref: IrSchemaRef): IrSchemaKey {
60
+ return `${ref.origin}:${ref.kind}.${ref.name}`
61
+ }
62
+
63
+ export function definitionRefKey(ref: IrDefinitionRef): IrDefinitionKey {
64
+ return `${ref.origin}:${ref.kind}.${ref.name}`
65
+ }
66
+
67
+ /** Parse a canonical key without asserting that the referenced member exists. */
68
+ export function parseSchemaRefKey(value: unknown): IrSchemaRef | undefined {
69
+ if (typeof value !== 'string') return undefined
70
+ const match = schemaKeyPattern.exec(value)
71
+ if (!match) return undefined
72
+ return {
73
+ origin: match[1],
74
+ kind: match[2] as IrSchemaRefKind,
75
+ name: match[3],
76
+ }
77
+ }
78
+
79
+ export function parseDefinitionRefKey(value: unknown): IrDefinitionRef | undefined {
80
+ const ref = parseSchemaRefKey(value)
81
+ return ref && isIrDefinitionRef(ref) ? ref : undefined
82
+ }