@astrale-os/cli 1.0.0-beta.32 → 1.0.0-beta.43
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/CHANGELOG.md +928 -0
- package/README.md +53 -43
- package/THIRD-PARTY-NOTICES.md +37 -1
- package/dist/astrale.js +349631 -83669
- package/dist/public/connect-core.js +16 -47
- package/dist/public/keys/index.js +1 -1
- package/dist/types/admin/contract.d.ts +11 -0
- package/dist/types/admin/graph/index.d.ts +1 -0
- package/dist/types/admin/graph/nodes.d.ts +12 -0
- package/dist/types/admin/instance/client.d.ts +2 -0
- package/dist/types/connection/lifetime.d.ts +1 -1
- package/dist/types/errors.d.ts +3 -0
- package/dist/types/lib/proc.d.ts +1 -0
- package/dist/types/lib/update.d.ts +15 -7
- package/package.json +8 -6
- package/studio/client/dist/assets/index-5C1uT6ML.css +2 -0
- package/studio/client/dist/assets/index-C4kNlvwF.js +80 -0
- package/studio/client/dist/assets/schema-studio-BR9d0faB.js +8 -0
- package/studio/client/dist/index.html +13 -2
- package/studio/package.json +2 -1
- package/studio/server/agent/ask.test.ts +7 -1
- package/studio/server/agent/bridge/grant.ts +15 -3
- package/studio/server/agent/prompts/system.test.ts +5 -0
- package/studio/server/agent/prompts/system.ts +19 -4
- package/studio/server/agent/routes.test.ts +39 -1
- package/studio/server/agent/routes.ts +3 -0
- package/studio/server/agent/run/coordinator.test.ts +7 -1
- package/studio/server/agent/run/preparation.ts +1 -0
- package/studio/server/agent/run/transcript.test.ts +47 -2
- package/studio/server/agent/run/transcript.ts +32 -3
- package/studio/server/api/documents.test.ts +31 -0
- package/studio/server/api/documents.ts +35 -1
- package/studio/server/api-agent-loadout.test.ts +7 -1
- package/studio/server/api.test.ts +7 -1
- package/studio/server/cache.ts +4 -4
- package/studio/server/detect.ts +9 -12
- package/studio/server/domain.test.ts +83 -3
- package/studio/server/domain.ts +205 -27
- package/studio/server/handoff/service.ts +1 -1
- package/studio/server/index.ts +5 -8
- package/studio/server/introspect/extractor.ts +111 -17
- package/studio/server/introspect/overlay-tsmorph.test.ts +9 -9
- package/studio/server/introspect/overlay.ts +1 -1
- package/studio/server/introspect/runtime.ts +9 -1
- package/studio/server/introspect/source-overlay/spans.ts +2 -5
- package/studio/server/lifecycle.ts +1 -1
- package/studio/server/state/baseline.test.ts +14 -0
- package/studio/server/state/baseline.ts +16 -2
- package/studio/server/watch.test.ts +2 -1
- package/studio/server/watch.ts +5 -2
- package/studio/server/workspace/create.ts +9 -8
- package/studio/server/workspace-state.ts +4 -6
- package/studio/server/workspace-watch.ts +33 -22
- package/studio/shared/contracts/agent.ts +3 -0
- package/viewer/dist/main.js +12 -12
- package/src/__tests__/fixtures/publication.ts +0 -20
- package/src/admin/.spec/api.d.ts +0 -3
- package/src/admin/.spec/architecture.md +0 -22
- package/src/admin/.spec/icon.svg +0 -3
- package/src/admin/.spec/layout.ts +0 -6
- package/src/admin/__tests__/fixture.ts +0 -25
- package/src/admin/catalog/.spec/api.d.ts +0 -63
- package/src/admin/catalog/.spec/architecture.md +0 -7
- package/src/admin/catalog/.spec/icon.svg +0 -3
- package/src/admin/catalog/.spec/layout.ts +0 -6
- package/src/admin/catalog/__tests__/client.test.ts +0 -245
- package/src/admin/catalog/client.ts +0 -195
- package/src/admin/catalog/index.ts +0 -13
- package/src/admin/catalog/model.ts +0 -41
- package/src/admin/catalog/tsconfig.json +0 -8
- package/src/admin/contract.ts +0 -47
- package/src/admin/graph/.spec/api.d.ts +0 -22
- package/src/admin/graph/.spec/architecture.md +0 -5
- package/src/admin/graph/.spec/icon.svg +0 -3
- package/src/admin/graph/.spec/layout.ts +0 -3
- package/src/admin/graph/index.ts +0 -6
- package/src/admin/graph/nodes.ts +0 -56
- package/src/admin/index.ts +0 -2
- package/src/admin/instance/.spec/api.d.ts +0 -62
- package/src/admin/instance/.spec/architecture.md +0 -10
- package/src/admin/instance/.spec/icon.svg +0 -3
- package/src/admin/instance/.spec/layout.ts +0 -6
- package/src/admin/instance/__tests__/client.test.ts +0 -273
- package/src/admin/instance/client.ts +0 -191
- package/src/admin/instance/index.ts +0 -15
- package/src/admin/instance/model.ts +0 -59
- package/src/admin/instance/tsconfig.json +0 -8
- package/src/commands/__tests__/admin-instance.test.ts +0 -91
- package/src/commands/__tests__/auth-login.test.ts +0 -231
- package/src/commands/__tests__/auth-token.test.ts +0 -223
- package/src/commands/__tests__/call-describe.test.ts +0 -80
- package/src/commands/__tests__/call.test.ts +0 -63
- package/src/commands/__tests__/domain-install-operation.test.ts +0 -145
- package/src/commands/__tests__/domain-install-owned.test.ts +0 -191
- package/src/commands/__tests__/domain-list.test.ts +0 -133
- package/src/commands/__tests__/domain-uninstall.test.ts +0 -53
- package/src/commands/__tests__/install-direct.test.ts +0 -128
- package/src/commands/__tests__/install-identity-override.test.ts +0 -76
- package/src/commands/__tests__/instance-bookmark.test.ts +0 -166
- package/src/commands/__tests__/instance-list-admin.test.ts +0 -26
- package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
- package/src/commands/__tests__/instance-status.test.ts +0 -139
- package/src/commands/__tests__/instance-use.test.ts +0 -67
- package/src/commands/__tests__/introspect-parse.test.ts +0 -100
- package/src/commands/__tests__/logs.test.ts +0 -345
- package/src/commands/__tests__/read-commands.test.ts +0 -377
- package/src/commands/__tests__/setup-plan.test.ts +0 -61
- package/src/commands/__tests__/studio-descriptor.test.ts +0 -22
- package/src/commands/__tests__/token-ttl.test.ts +0 -66
- package/src/commands/__tests__/update.test.ts +0 -95
- package/src/commands/__tests__/view-build.test.ts +0 -58
- package/src/commands/__tests__/view.test.ts +0 -197
- package/src/commands/admin/status.ts +0 -61
- package/src/commands/admin/use.ts +0 -100
- package/src/commands/auth/login.ts +0 -82
- package/src/commands/auth/logout.ts +0 -53
- package/src/commands/auth/status.ts +0 -86
- package/src/commands/auth/token.ts +0 -174
- package/src/commands/browser.ts +0 -236
- package/src/commands/call-describe.ts +0 -123
- package/src/commands/call.ts +0 -230
- package/src/commands/domain/install.ts +0 -575
- package/src/commands/domain/list.ts +0 -155
- package/src/commands/domain/publish.ts +0 -136
- package/src/commands/domain/uninstall.ts +0 -128
- package/src/commands/get.ts +0 -69
- package/src/commands/identity/__tests__/register.test.ts +0 -93
- package/src/commands/identity/create.ts +0 -35
- package/src/commands/identity/delete.ts +0 -24
- package/src/commands/identity/export.ts +0 -46
- package/src/commands/identity/import.ts +0 -61
- package/src/commands/identity/list.ts +0 -56
- package/src/commands/identity/register.ts +0 -195
- package/src/commands/identity/sync.ts +0 -38
- package/src/commands/identity/unsync.ts +0 -34
- package/src/commands/identity/use.ts +0 -24
- package/src/commands/identity/whoami.ts +0 -34
- package/src/commands/idp/add.ts +0 -150
- package/src/commands/idp/list.ts +0 -57
- package/src/commands/idp/refresh.ts +0 -38
- package/src/commands/idp/remove.ts +0 -36
- package/src/commands/idp/show.ts +0 -29
- package/src/commands/instance/active.ts +0 -73
- package/src/commands/instance/bookmark.ts +0 -101
- package/src/commands/instance/create.ts +0 -61
- package/src/commands/instance/delete.ts +0 -69
- package/src/commands/instance/forget.ts +0 -26
- package/src/commands/instance/list.ts +0 -197
- package/src/commands/instance/status.ts +0 -92
- package/src/commands/instance/use.ts +0 -263
- package/src/commands/introspect.ts +0 -129
- package/src/commands/logs.ts +0 -371
- package/src/commands/mutate.ts +0 -122
- package/src/commands/query.ts +0 -142
- package/src/commands/session/analyze.ts +0 -72
- package/src/commands/session/list.ts +0 -36
- package/src/commands/setup.ts +0 -54
- package/src/commands/status.ts +0 -60
- package/src/commands/studio.ts +0 -434
- package/src/commands/token.ts +0 -121
- package/src/commands/ui/__tests__/commands.test.ts +0 -152
- package/src/commands/ui/add.ts +0 -51
- package/src/commands/ui/doctor.ts +0 -21
- package/src/commands/ui/init.ts +0 -38
- package/src/commands/ui/list.ts +0 -26
- package/src/commands/ui/preset-apply.ts +0 -19
- package/src/commands/ui/preset-list.ts +0 -12
- package/src/commands/ui/shared.ts +0 -25
- package/src/commands/update.ts +0 -356
- package/src/commands/use.ts +0 -86
- package/src/commands/view-serve.ts +0 -26
- package/src/commands/view.ts +0 -658
- package/src/connect-core.test.ts +0 -38
- package/src/connect-core.ts +0 -42
- package/src/connection/.spec/api.d.ts +0 -110
- package/src/connection/.spec/architecture.md +0 -58
- package/src/connection/.spec/capabilities/connection.ts +0 -13
- package/src/connection/.spec/examples/call.ts +0 -7
- package/src/connection/.spec/flows/command.ts +0 -20
- package/src/connection/.spec/flows/session.ts +0 -62
- package/src/connection/.spec/laws/connection.ts +0 -213
- package/src/connection/.spec/layout.ts +0 -22
- package/src/connection/__tests__/auth.test.ts +0 -129
- package/src/connection/__tests__/ca-fetch.test.ts +0 -60
- package/src/connection/__tests__/call.test.ts +0 -17
- package/src/connection/__tests__/credential.test.ts +0 -254
- package/src/connection/__tests__/errors.test.ts +0 -577
- package/src/connection/__tests__/exchange.test.ts +0 -404
- package/src/connection/__tests__/failure-fixtures.ts +0 -39
- package/src/connection/__tests__/failure-safety.test.ts +0 -75
- package/src/connection/__tests__/fixtures/localhost-cert.pem +0 -19
- package/src/connection/__tests__/fixtures/localhost-key.base64 +0 -1
- package/src/connection/__tests__/managed.test.ts +0 -39
- package/src/connection/__tests__/reasons.test.ts +0 -78
- package/src/connection/__tests__/self.test.ts +0 -71
- package/src/connection/__tests__/session.test.ts +0 -144
- package/src/connection/__tests__/target.test.ts +0 -95
- package/src/connection/auth.ts +0 -265
- package/src/connection/call.ts +0 -7
- package/src/connection/command.ts +0 -67
- package/src/connection/credential.ts +0 -138
- package/src/connection/errors.ts +0 -1
- package/src/connection/exchange.ts +0 -394
- package/src/connection/failure/classify.ts +0 -110
- package/src/connection/failure/index.ts +0 -18
- package/src/connection/failure/model.ts +0 -28
- package/src/connection/failure/render.ts +0 -116
- package/src/connection/index.ts +0 -8
- package/src/connection/lifetime.ts +0 -25
- package/src/connection/reasons.ts +0 -209
- package/src/connection/self.ts +0 -138
- package/src/connection/session.ts +0 -203
- package/src/connection/target.ts +0 -112
- package/src/connection/tsconfig.json +0 -6
- package/src/errors.ts +0 -66
- package/src/graph/.spec/api.d.ts +0 -41
- package/src/graph/.spec/laws/documents.ts +0 -24
- package/src/graph/.spec/laws/projection.ts +0 -13
- package/src/graph/.spec/layout.ts +0 -14
- package/src/graph/__tests__/mutation.test.ts +0 -51
- package/src/graph/__tests__/projection.test.ts +0 -22
- package/src/graph/__tests__/query.test.ts +0 -180
- package/src/graph/class.ts +0 -30
- package/src/graph/index.ts +0 -4
- package/src/graph/mutation.ts +0 -46
- package/src/graph/projection.ts +0 -21
- package/src/graph/query.ts +0 -95
- package/src/graph/tsconfig.json +0 -6
- package/src/identity/.history/ard/bootstrap-root-transfer.md +0 -57
- package/src/identity/.history/ard/domain-mediated-registration.md +0 -36
- package/src/identity/.spec/api.d.ts +0 -124
- package/src/identity/.spec/architecture.md +0 -33
- package/src/identity/.spec/capabilities/identity.ts +0 -7
- package/src/identity/.spec/flows/bootstrap-root.ts +0 -79
- package/src/identity/.spec/flows/domain-mediated-registration.ts +0 -51
- package/src/identity/.spec/flows/import.ts +0 -29
- package/src/identity/.spec/laws/identity.ts +0 -56
- package/src/identity/.spec/layout.ts +0 -13
- package/src/identity/__tests__/fixtures/registry-journey.ts +0 -65
- package/src/identity/__tests__/registration.test.ts +0 -64
- package/src/identity/__tests__/registry.test.ts +0 -74
- package/src/identity/__tests__/transfer.test.ts +0 -198
- package/src/identity/index.ts +0 -23
- package/src/identity/registration.ts +0 -72
- package/src/identity/registry.ts +0 -181
- package/src/identity/transfer.ts +0 -187
- package/src/identity/tsconfig.json +0 -6
- package/src/index.ts +0 -1
- package/src/keys/.spec/api.d.ts +0 -74
- package/src/keys/.spec/architecture.md +0 -13
- package/src/keys/.spec/laws/keys.ts +0 -43
- package/src/keys/.spec/layout.ts +0 -6
- package/src/keys/__tests__/algorithm.test.ts +0 -39
- package/src/keys/__tests__/keys.test.ts +0 -172
- package/src/keys/algorithm.ts +0 -33
- package/src/keys/credential.ts +0 -113
- package/src/keys/index.ts +0 -14
- package/src/keys/pair.ts +0 -219
- package/src/keys/tsconfig.json +0 -6
- package/src/lib/__tests__/admin-target.test.ts +0 -184
- package/src/lib/__tests__/binary.test.ts +0 -70
- package/src/lib/__tests__/browser-retention.test.ts +0 -212
- package/src/lib/__tests__/command-dx.test.ts +0 -102
- package/src/lib/__tests__/concurrency.test.ts +0 -62
- package/src/lib/__tests__/config.test.ts +0 -81
- package/src/lib/__tests__/design.test.ts +0 -99
- package/src/lib/__tests__/domain-publication.test.ts +0 -138
- package/src/lib/__tests__/format.test.ts +0 -22
- package/src/lib/__tests__/idp-session.driver.ts +0 -60
- package/src/lib/__tests__/idp-session.test.ts +0 -404
- package/src/lib/__tests__/idp.test.ts +0 -415
- package/src/lib/__tests__/instance-candidates.test.ts +0 -146
- package/src/lib/__tests__/instance-target.test.ts +0 -213
- package/src/lib/__tests__/instance.test.ts +0 -192
- package/src/lib/__tests__/local-status.test.ts +0 -202
- package/src/lib/__tests__/log-errors.test.ts +0 -64
- package/src/lib/__tests__/log.test.ts +0 -31
- package/src/lib/__tests__/meta.test.ts +0 -55
- package/src/lib/__tests__/output.test.ts +0 -162
- package/src/lib/__tests__/panel.test.ts +0 -40
- package/src/lib/__tests__/port.test.ts +0 -44
- package/src/lib/__tests__/prompt.test.ts +0 -25
- package/src/lib/__tests__/sdk-deps.test.ts +0 -68
- package/src/lib/__tests__/self.test.ts +0 -50
- package/src/lib/__tests__/skills.test.ts +0 -834
- package/src/lib/__tests__/studio-server-deps.test.ts +0 -111
- package/src/lib/__tests__/table.test.ts +0 -53
- package/src/lib/__tests__/update.test.ts +0 -511
- package/src/lib/__tests__/use-target.test.ts +0 -56
- package/src/lib/__tests__/validation.test.ts +0 -34
- package/src/lib/__tests__/view-assets.test.ts +0 -171
- package/src/lib/__tests__/view-external-open-intent.test.ts +0 -150
- package/src/lib/__tests__/view-external-open-origins.test.ts +0 -27
- package/src/lib/__tests__/view-open-intent.test.ts +0 -280
- package/src/lib/__tests__/view-port-allocation.test.ts +0 -82
- package/src/lib/__tests__/view-server.test.ts +0 -91
- package/src/lib/__tests__/view-session.test.ts +0 -100
- package/src/lib/__tests__/view-snapshot.test.ts +0 -77
- package/src/lib/admin-domain.ts +0 -43
- package/src/lib/admin-instance.ts +0 -56
- package/src/lib/admin-target.ts +0 -290
- package/src/lib/binary.ts +0 -127
- package/src/lib/browser-retention.ts +0 -210
- package/src/lib/browser.ts +0 -150
- package/src/lib/ca-fetch.ts +0 -133
- package/src/lib/command-dx.ts +0 -191
- package/src/lib/concurrency.ts +0 -31
- package/src/lib/config.ts +0 -57
- package/src/lib/credential-lifetime.ts +0 -24
- package/src/lib/domain-publication.ts +0 -104
- package/src/lib/failure-debug.ts +0 -26
- package/src/lib/format.ts +0 -4
- package/src/lib/idp-session.ts +0 -156
- package/src/lib/idp.ts +0 -926
- package/src/lib/instance-candidates.ts +0 -49
- package/src/lib/instance-target.ts +0 -197
- package/src/lib/instance.ts +0 -468
- package/src/lib/invocation.ts +0 -11
- package/src/lib/local-status.ts +0 -152
- package/src/lib/log.ts +0 -143
- package/src/lib/login-flow.ts +0 -201
- package/src/lib/meta.ts +0 -90
- package/src/lib/output.ts +0 -238
- package/src/lib/panel.ts +0 -61
- package/src/lib/port.ts +0 -41
- package/src/lib/proc.ts +0 -87
- package/src/lib/prompt.ts +0 -136
- package/src/lib/provision-instance.ts +0 -139
- package/src/lib/sdk-deps.ts +0 -104
- package/src/lib/self.ts +0 -22
- package/src/lib/skills/lock.ts +0 -117
- package/src/lib/skills/sync.ts +0 -878
- package/src/lib/skills.ts +0 -120
- package/src/lib/table.ts +0 -62
- package/src/lib/update.ts +0 -568
- package/src/lib/use-target.ts +0 -24
- package/src/lib/validation.ts +0 -59
- package/src/lib/view/assets.ts +0 -87
- package/src/lib/view/external-open-intent.ts +0 -41
- package/src/lib/view/external-open-origins.ts +0 -37
- package/src/lib/view/host-capabilities.ts +0 -17
- package/src/lib/view/open-intent.ts +0 -67
- package/src/lib/view/port-allocation.ts +0 -19
- package/src/lib/view/resolve.ts +0 -111
- package/src/lib/view/server.ts +0 -259
- package/src/lib/view/session.ts +0 -154
- package/src/lib/view/snapshot.ts +0 -101
- package/src/paths/.spec/api.d.ts +0 -13
- package/src/paths/.spec/architecture.md +0 -5
- package/src/paths/.spec/layout.ts +0 -3
- package/src/paths/index.ts +0 -13
- package/src/program/.spec/api.d.ts +0 -43
- package/src/program/.spec/architecture.md +0 -18
- package/src/program/.spec/laws/program.ts +0 -29
- package/src/program/.spec/layout.ts +0 -14
- package/src/program/__tests__/program.test.ts +0 -556
- package/src/program/argv.ts +0 -14
- package/src/program/build.ts +0 -205
- package/src/program/command.ts +0 -43
- package/src/program/index.ts +0 -3
- package/src/program/options.ts +0 -41
- package/src/program/registry.ts +0 -64
- package/src/program/tsconfig.json +0 -6
- package/src/setup/__tests__/instance-step.test.ts +0 -256
- package/src/setup/__tests__/util.test.ts +0 -29
- package/src/setup/engine.ts +0 -83
- package/src/setup/render.ts +0 -107
- package/src/setup/steps/admin.ts +0 -93
- package/src/setup/steps/agent-browser.ts +0 -81
- package/src/setup/steps/auth.ts +0 -54
- package/src/setup/steps/domain.ts +0 -68
- package/src/setup/steps/index.ts +0 -18
- package/src/setup/steps/instance.ts +0 -206
- package/src/setup/steps/skills-bridge.ts +0 -70
- package/src/setup/steps/skills.ts +0 -61
- package/src/setup/types.ts +0 -61
- package/src/setup/util.ts +0 -34
- package/src/state/.spec/api.d.ts +0 -152
- package/src/state/.spec/architecture.md +0 -45
- package/src/state/.spec/capabilities/state.ts +0 -7
- package/src/state/.spec/flows/identity-update.ts +0 -22
- package/src/state/.spec/laws/state.ts +0 -73
- package/src/state/.spec/layout.ts +0 -15
- package/src/state/__tests__/exchange-credentials.test.ts +0 -341
- package/src/state/__tests__/files.test.ts +0 -136
- package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
- package/src/state/__tests__/fixtures/session-route-process.ts +0 -93
- package/src/state/__tests__/identities.test.ts +0 -142
- package/src/state/__tests__/paths.test.ts +0 -28
- package/src/state/__tests__/session-routes.test.ts +0 -138
- package/src/state/exchange-credentials.ts +0 -250
- package/src/state/files.ts +0 -170
- package/src/state/identities.ts +0 -229
- package/src/state/index.ts +0 -31
- package/src/state/paths.ts +0 -64
- package/src/state/session-routes.ts +0 -34
- package/src/state/tsconfig.json +0 -6
- package/src/telemetry/__tests__/analyze-log.test.ts +0 -38
- package/src/telemetry/__tests__/gate.test.ts +0 -63
- package/src/telemetry/__tests__/recorder.test.ts +0 -111
- package/src/telemetry/__tests__/redact.test.ts +0 -79
- package/src/telemetry/__tests__/retention.test.ts +0 -267
- package/src/telemetry/__tests__/session.test.ts +0 -166
- package/src/telemetry/__tests__/settings.test.ts +0 -102
- package/src/telemetry/__tests__/store-scan.test.ts +0 -128
- package/src/telemetry/__tests__/trigger.test.ts +0 -78
- package/src/telemetry/adapters/__tests__/claude-code.test.ts +0 -89
- package/src/telemetry/adapters/__tests__/codex.test.ts +0 -138
- package/src/telemetry/adapters/__tests__/index.test.ts +0 -88
- package/src/telemetry/adapters/claude-code.ts +0 -90
- package/src/telemetry/adapters/codex.ts +0 -160
- package/src/telemetry/adapters/index.ts +0 -45
- package/src/telemetry/adapters/types.ts +0 -21
- package/src/telemetry/analyze.ts +0 -249
- package/src/telemetry/gate.ts +0 -79
- package/src/telemetry/recorder.ts +0 -68
- package/src/telemetry/redact.ts +0 -53
- package/src/telemetry/retention.ts +0 -176
- package/src/telemetry/session.ts +0 -94
- package/src/telemetry/settings.ts +0 -79
- package/src/telemetry/store.ts +0 -174
- package/src/telemetry/trigger.ts +0 -107
- package/src/telemetry/types.ts +0 -64
- package/src/test-utils.ts +0 -18
- package/src/ui/.spec/api.d.ts +0 -14
- package/src/ui/.spec/architecture.md +0 -14
- package/src/ui/.spec/laws.ts +0 -50
- package/src/ui/.spec/layout.ts +0 -16
- package/src/ui/__tests__/ui.test.ts +0 -1742
- package/src/ui/index.ts +0 -13
- package/src/ui/lock.ts +0 -89
- package/src/ui/model.ts +0 -83
- package/src/ui/operations.ts +0 -1044
- package/src/ui/project.ts +0 -333
- package/src/ui/release.ts +0 -398
- package/src/ui/runner.ts +0 -18
- package/studio/client/dist/assets/index-BFVFs_8x.js +0 -81
- package/studio/client/dist/assets/index-DuB9iUdu.css +0 -2
- package/studio/client/dist/assets/schema-studio-DH6oEWME.js +0 -8
- package/studio/tsconfig.json +0 -24
- package/viewer/tsconfig.json +0 -13
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
import type { AuthApi } from '@astrale-os/sdk/auth'
|
|
2
|
-
import type { GraphApi } from '@astrale-os/sdk/client'
|
|
3
|
-
import type {
|
|
4
|
-
ClientSessionOptions,
|
|
5
|
-
SessionAuth,
|
|
6
|
-
SessionRouteStore,
|
|
7
|
-
} from '@astrale-os/sdk/client/session'
|
|
8
|
-
|
|
9
|
-
import { createAuth } from '@astrale-os/sdk/auth'
|
|
10
|
-
import { call } from '@astrale-os/sdk/client'
|
|
11
|
-
import { createGraph } from '@astrale-os/sdk/client'
|
|
12
|
-
import { ClientSession } from '@astrale-os/sdk/client/session'
|
|
13
|
-
|
|
14
|
-
import type { AstraleConfig } from '../lib/config'
|
|
15
|
-
import type { AdminConnectionOptions, ConnectionOptions, ConnectionTarget } from './target'
|
|
16
|
-
|
|
17
|
-
import {
|
|
18
|
-
AdminInstanceNotFoundError,
|
|
19
|
-
connectAdminInstances,
|
|
20
|
-
findOwnedInstance,
|
|
21
|
-
type InstanceInfo,
|
|
22
|
-
} from '../admin/instance'
|
|
23
|
-
import { AstraleError } from '../errors'
|
|
24
|
-
import { fetchWithCaFile } from '../lib/ca-fetch'
|
|
25
|
-
import { readConfig } from '../lib/config'
|
|
26
|
-
import { log } from '../lib/log'
|
|
27
|
-
import { isMachine } from '../lib/output'
|
|
28
|
-
import { SESSION_ROUTE_STORE } from '../state/session-routes'
|
|
29
|
-
import { bindCredentialIdentity } from './auth'
|
|
30
|
-
import { createCliCredential, validateCredentialSelection } from './credential'
|
|
31
|
-
import { resolveAdminConnectionTarget, resolveConnectionTarget } from './target'
|
|
32
|
-
|
|
33
|
-
const DEFAULT_TIMEOUT_MS = 30_000
|
|
34
|
-
const MAXIMUM_ROUTE_AGE_MS = 5 * 60_000
|
|
35
|
-
|
|
36
|
-
function warnMissingExplicitTarget(options: ConnectionOptions, target: ConnectionTarget): void {
|
|
37
|
-
if (options.instance !== undefined || options.url !== undefined) return
|
|
38
|
-
if (!isMachine(options)) return
|
|
39
|
-
log.warn(`No -i/--url; using ${target.slug ?? target.url}`)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export interface ConnectionContext {
|
|
43
|
-
readonly session: ClientSession
|
|
44
|
-
readonly graph: GraphApi
|
|
45
|
-
readonly auth: AuthApi
|
|
46
|
-
readonly target: ConnectionTarget
|
|
47
|
-
/** Local identity label selected for this session; absent for raw credentials or anonymous use. */
|
|
48
|
-
readonly identity?: string
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
interface OwnedConnection {
|
|
52
|
-
readonly context: ConnectionContext
|
|
53
|
-
close(): void
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export type ConnectionFactory = (
|
|
57
|
-
target: ConnectionTarget,
|
|
58
|
-
timeoutMs: number,
|
|
59
|
-
options: ConnectionOptions,
|
|
60
|
-
config: AstraleConfig,
|
|
61
|
-
) => OwnedConnection
|
|
62
|
-
|
|
63
|
-
/** Resolve one ordinary target, run a command action, then close terminally. */
|
|
64
|
-
export async function withClientSession<Value>(
|
|
65
|
-
options: ConnectionOptions,
|
|
66
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
67
|
-
): Promise<Value> {
|
|
68
|
-
validateCredentialSelection(options)
|
|
69
|
-
const timeoutMs = resolveTimeoutMs(options.timeout)
|
|
70
|
-
const config = await readConfig()
|
|
71
|
-
const target = await resolveConnectionTarget(options, config, {
|
|
72
|
-
managed: (slug) => lookupManagedInstance(slug, options),
|
|
73
|
-
})
|
|
74
|
-
options = await bindCredentialIdentity(options, target)
|
|
75
|
-
warnMissingExplicitTarget(options, target)
|
|
76
|
-
return runResolvedClientSession(target, timeoutMs, options, config, action, openConnection)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** Resolve the configured Admin Domain target under the same terminal lifecycle. */
|
|
80
|
-
export async function withAdminClientSession<Value>(
|
|
81
|
-
options: AdminConnectionOptions,
|
|
82
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
83
|
-
): Promise<Value> {
|
|
84
|
-
validateCredentialSelection(options)
|
|
85
|
-
const timeoutMs = resolveTimeoutMs(options.timeout)
|
|
86
|
-
const config = await readConfig()
|
|
87
|
-
const target = await resolveAdminConnectionTarget(options, config)
|
|
88
|
-
options = await bindCredentialIdentity(options, target)
|
|
89
|
-
return runResolvedClientSession(target, timeoutMs, options, config, action, openConnection)
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/** Owner-private seam used to prove validation order and cleanup without network I/O. */
|
|
93
|
-
export async function withResolvedClientSession<Value>(
|
|
94
|
-
target: ConnectionTarget,
|
|
95
|
-
options: ConnectionOptions,
|
|
96
|
-
config: AstraleConfig,
|
|
97
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
98
|
-
open: ConnectionFactory = openConnection,
|
|
99
|
-
): Promise<Value> {
|
|
100
|
-
validateCredentialSelection(options)
|
|
101
|
-
const timeoutMs = resolveTimeoutMs(options.timeout)
|
|
102
|
-
return runResolvedClientSession(target, timeoutMs, options, config, action, open)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
async function runResolvedClientSession<Value>(
|
|
106
|
-
target: ConnectionTarget,
|
|
107
|
-
timeoutMs: number,
|
|
108
|
-
options: ConnectionOptions,
|
|
109
|
-
config: AstraleConfig,
|
|
110
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
111
|
-
open: ConnectionFactory,
|
|
112
|
-
): Promise<Value> {
|
|
113
|
-
const connection = open(target, timeoutMs, options, config)
|
|
114
|
-
try {
|
|
115
|
-
return await action(connection.context)
|
|
116
|
-
} catch (error) {
|
|
117
|
-
if (error instanceof Error) (error as Error & { url?: string }).url = target.url
|
|
118
|
-
throw error
|
|
119
|
-
} finally {
|
|
120
|
-
connection.close()
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export function resolveTimeoutMs(raw: string | undefined): number {
|
|
125
|
-
if (raw === undefined) return DEFAULT_TIMEOUT_MS
|
|
126
|
-
if (!/^\d+$/.test(raw)) {
|
|
127
|
-
throw new AstraleError(
|
|
128
|
-
'INVALID_FLAG',
|
|
129
|
-
`Invalid --timeout value "${raw}" — expected a positive integer (milliseconds)`,
|
|
130
|
-
)
|
|
131
|
-
}
|
|
132
|
-
const value = Number.parseInt(raw, 10)
|
|
133
|
-
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
134
|
-
throw new AstraleError(
|
|
135
|
-
'INVALID_FLAG',
|
|
136
|
-
`Invalid --timeout value "${raw}" — must be a positive integer`,
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
return value
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function openConnection(
|
|
143
|
-
target: ConnectionTarget,
|
|
144
|
-
timeoutMs: number,
|
|
145
|
-
options: ConnectionOptions,
|
|
146
|
-
config: AstraleConfig,
|
|
147
|
-
): OwnedConnection {
|
|
148
|
-
const fetch = target.caFile === undefined ? globalThis.fetch : fetchWithCaFile(target.caFile)
|
|
149
|
-
const auth = createCliCredential(target, options, config, fetch, timeoutMs)
|
|
150
|
-
const session = new ClientSession(createClientSessionOptions(target, fetch, auth, timeoutMs))
|
|
151
|
-
const graph = createGraph((call, request) => session.call(call, request))
|
|
152
|
-
const authApi = createAuth((path, input, request) => session.call(call(path, input), request))
|
|
153
|
-
return {
|
|
154
|
-
context: Object.freeze({
|
|
155
|
-
session,
|
|
156
|
-
graph,
|
|
157
|
-
auth: authApi,
|
|
158
|
-
target,
|
|
159
|
-
...(options.as === undefined ? {} : { identity: options.as }),
|
|
160
|
-
}),
|
|
161
|
-
close() {
|
|
162
|
-
session.close()
|
|
163
|
-
},
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** Owner-private construction seam proving that transport and source identity stay distinct. */
|
|
168
|
-
export function createClientSessionOptions(
|
|
169
|
-
target: ConnectionTarget,
|
|
170
|
-
fetch: NonNullable<ClientSessionOptions['fetch']>,
|
|
171
|
-
auth: SessionAuth | undefined,
|
|
172
|
-
timeoutMs: number,
|
|
173
|
-
routeStore: SessionRouteStore = SESSION_ROUTE_STORE,
|
|
174
|
-
): ClientSessionOptions {
|
|
175
|
-
return {
|
|
176
|
-
kernel: target.kernelIssuer,
|
|
177
|
-
fetch,
|
|
178
|
-
...(auth === undefined ? {} : { auth }),
|
|
179
|
-
routeStore,
|
|
180
|
-
policy: {
|
|
181
|
-
maximumRouteAgeMs: MAXIMUM_ROUTE_AGE_MS,
|
|
182
|
-
...(new URL(target.url).protocol === 'http:' ? { allowInsecureHttp: true } : {}),
|
|
183
|
-
},
|
|
184
|
-
envelopeTransport: 'http',
|
|
185
|
-
timeoutMs,
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export async function lookupManagedInstance(
|
|
190
|
-
slug: string,
|
|
191
|
-
options: ConnectionOptions,
|
|
192
|
-
openAdmin: typeof withAdminClientSession = withAdminClientSession,
|
|
193
|
-
connect: typeof connectAdminInstances = connectAdminInstances,
|
|
194
|
-
): Promise<InstanceInfo> {
|
|
195
|
-
return openAdmin(
|
|
196
|
-
Object.freeze(options.timeout === undefined ? {} : { timeout: options.timeout }),
|
|
197
|
-
async (context) => {
|
|
198
|
-
const found = findOwnedInstance(await (await connect(context)).list(), slug)
|
|
199
|
-
if (found === undefined) throw new AdminInstanceNotFoundError(slug)
|
|
200
|
-
return found
|
|
201
|
-
},
|
|
202
|
-
)
|
|
203
|
-
}
|
package/src/connection/target.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import type { IssuerId } from '@astrale-os/sdk/auth'
|
|
2
|
-
|
|
3
|
-
import { issuer } from '@astrale-os/sdk/auth'
|
|
4
|
-
|
|
5
|
-
import type { InstanceInfo } from '../lib/admin-instance'
|
|
6
|
-
import type { AdminTargetCommandOpts } from '../lib/admin-target'
|
|
7
|
-
import type { AstraleConfig } from '../lib/config'
|
|
8
|
-
import type { InstanceStore } from '../lib/instance'
|
|
9
|
-
import type { ResolvedInstanceTarget } from '../lib/instance-target'
|
|
10
|
-
|
|
11
|
-
import { resolveInstanceTarget } from '../lib/instance-target'
|
|
12
|
-
|
|
13
|
-
export interface ConnectionOptions {
|
|
14
|
-
readonly url?: string
|
|
15
|
-
readonly instance?: string
|
|
16
|
-
readonly timeout?: string
|
|
17
|
-
readonly as?: string
|
|
18
|
-
readonly creds?: string
|
|
19
|
-
readonly anonymous?: boolean
|
|
20
|
-
readonly ci?: boolean
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface AdminConnectionOptions extends ConnectionOptions {
|
|
24
|
-
readonly admin?: string
|
|
25
|
-
readonly adminUrl?: string
|
|
26
|
-
readonly domainIssuer?: string
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ConnectionTarget {
|
|
30
|
-
readonly url: string
|
|
31
|
-
readonly kernelIssuer: IssuerId
|
|
32
|
-
readonly domainIssuer?: IssuerId
|
|
33
|
-
readonly slug?: string
|
|
34
|
-
readonly defaultIdentity?: string
|
|
35
|
-
readonly caFile?: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface TargetDependencies {
|
|
39
|
-
readonly instances?: InstanceStore
|
|
40
|
-
readonly managed?: (slug: string) => Promise<InstanceInfo>
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Stable local identity-registration key for the exact selected source Kernel. */
|
|
44
|
-
export function registrationKeyForTarget(target: ConnectionTarget): string {
|
|
45
|
-
return target.slug ?? target.url
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Resolve the existing URL / instance / active precedence into one exact source Kernel. */
|
|
49
|
-
export async function resolveConnectionTarget(
|
|
50
|
-
options: ConnectionOptions,
|
|
51
|
-
config: AstraleConfig,
|
|
52
|
-
dependencies: TargetDependencies = {},
|
|
53
|
-
): Promise<ConnectionTarget> {
|
|
54
|
-
const request =
|
|
55
|
-
options.url !== undefined && options.instance === undefined
|
|
56
|
-
? ({ source: 'url', url: options.url } as const)
|
|
57
|
-
: options.instance !== undefined
|
|
58
|
-
? ({ source: 'name', name: options.instance } as const)
|
|
59
|
-
: ({ source: 'active' } as const)
|
|
60
|
-
const resolved = await resolveInstanceTarget(request, {
|
|
61
|
-
config,
|
|
62
|
-
...(dependencies.instances === undefined ? {} : { instances: dependencies.instances }),
|
|
63
|
-
admin: {},
|
|
64
|
-
...(dependencies.managed === undefined ? {} : { managed: dependencies.managed }),
|
|
65
|
-
})
|
|
66
|
-
return connectionTarget(resolved, options.url)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/** Resolve the configured Admin Domain target without entering managed-instance discovery. */
|
|
70
|
-
export async function resolveAdminConnectionTarget(
|
|
71
|
-
options: AdminConnectionOptions,
|
|
72
|
-
config: AstraleConfig,
|
|
73
|
-
instances?: InstanceStore,
|
|
74
|
-
): Promise<ConnectionTarget> {
|
|
75
|
-
const resolved = await resolveInstanceTarget(
|
|
76
|
-
{ source: 'admin' },
|
|
77
|
-
{
|
|
78
|
-
config,
|
|
79
|
-
admin: adminLookupOptions(options),
|
|
80
|
-
...(instances === undefined ? {} : { instances }),
|
|
81
|
-
},
|
|
82
|
-
)
|
|
83
|
-
return connectionTarget(resolved)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export function adminLookupOptions(options: AdminConnectionOptions): AdminTargetCommandOpts {
|
|
87
|
-
return {
|
|
88
|
-
...(options.admin === undefined ? {} : { admin: options.admin }),
|
|
89
|
-
...(options.adminUrl === undefined ? {} : { adminUrl: options.adminUrl }),
|
|
90
|
-
...(options.domainIssuer === undefined ? {} : { domainIssuer: options.domainIssuer }),
|
|
91
|
-
...(options.instance === undefined ? {} : { instance: options.instance }),
|
|
92
|
-
...(options.url === undefined ? {} : { url: options.url }),
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function connectionTarget(
|
|
97
|
-
resolved: ResolvedInstanceTarget,
|
|
98
|
-
urlOverride?: string,
|
|
99
|
-
): ConnectionTarget {
|
|
100
|
-
return Object.freeze({
|
|
101
|
-
url: urlOverride ?? resolved.url,
|
|
102
|
-
kernelIssuer: issuer.accept(resolved.kernelIssuer),
|
|
103
|
-
...(resolved.domainIssuer === undefined
|
|
104
|
-
? {}
|
|
105
|
-
: { domainIssuer: issuer.accept(resolved.domainIssuer) }),
|
|
106
|
-
...(resolved.name === undefined ? {} : { slug: resolved.name }),
|
|
107
|
-
...(resolved.defaultIdentity === undefined
|
|
108
|
-
? {}
|
|
109
|
-
: { defaultIdentity: resolved.defaultIdentity }),
|
|
110
|
-
...(resolved.caFile === undefined ? {} : { caFile: resolved.caFile }),
|
|
111
|
-
})
|
|
112
|
-
}
|
package/src/errors.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
export class AstraleError extends Error {
|
|
2
|
-
code: string
|
|
3
|
-
hint?: string
|
|
4
|
-
|
|
5
|
-
constructor(code: string, message: string, hint?: string, options?: ErrorOptions) {
|
|
6
|
-
if (message.trim() === '') throw new TypeError('CLI error message must be non-blank.')
|
|
7
|
-
super(message, options)
|
|
8
|
-
this.name = 'AstraleError'
|
|
9
|
-
this.code = code
|
|
10
|
-
this.hint = hint
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class AuthError extends AstraleError {
|
|
15
|
-
constructor(message: string, hint?: string) {
|
|
16
|
-
super('AUTH_ERROR', message, hint ?? 'Run `astrale identity create <name>` to set up keys')
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// ── Typed errors (DESIGN.md §4.6, §4.7, §5.1, §10, §11, §12) ─────────
|
|
21
|
-
|
|
22
|
-
export class IssuerUnreachableError extends AstraleError {
|
|
23
|
-
constructor(url: string, hint?: string) {
|
|
24
|
-
super(
|
|
25
|
-
'ISSUER_UNREACHABLE',
|
|
26
|
-
`Issuer endpoint "${url}" not reachable`,
|
|
27
|
-
hint ?? 'Check the target URL and issuer configuration',
|
|
28
|
-
)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export class ReservedSlugError extends AstraleError {
|
|
33
|
-
constructor(slug: string) {
|
|
34
|
-
super('RESERVED_SLUG', `Slug "${slug}" is reserved`, 'Pick a different slug')
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export class IdentifierCollisionError extends AstraleError {
|
|
39
|
-
constructor(identifier: string, existingEntity: string) {
|
|
40
|
-
super(
|
|
41
|
-
'IDENTIFIER_COLLISION',
|
|
42
|
-
`Identifier "${identifier}" collides with existing ${existingEntity}`,
|
|
43
|
-
'Slug and name share the same CLI namespace (§4.7). Pick a unique value.',
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export class IdentityKeyMissingError extends AstraleError {
|
|
49
|
-
constructor(subject: string) {
|
|
50
|
-
super(
|
|
51
|
-
'IDENTITY_KEY_MISSING',
|
|
52
|
-
`No private key on disk for identity "${subject}"`,
|
|
53
|
-
`Run \`astrale identity create ${subject}\` to generate one.`,
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export class NotImplementedError extends AstraleError {
|
|
59
|
-
constructor(feature: string, hint?: string) {
|
|
60
|
-
super(
|
|
61
|
-
'NOT_IMPLEMENTED',
|
|
62
|
-
`"${feature}" is not implemented in v1`,
|
|
63
|
-
hint ?? 'Track the design implementation progress for updates',
|
|
64
|
-
)
|
|
65
|
-
}
|
|
66
|
-
}
|
package/src/graph/.spec/api.d.ts
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import type { ClassKey, ClassRef } from '@astrale-os/sdk/graph/class'
|
|
2
|
-
import type { MutationAST } from '@astrale-os/sdk/mutation'
|
|
3
|
-
import type { QueryAST, QueryDirection } from '@astrale-os/sdk/query'
|
|
4
|
-
|
|
5
|
-
/** Admit one canonical Domain-rooted Class Path into its DSL coordinate. */
|
|
6
|
-
export function classReference(input: string, label: string): ClassRef
|
|
7
|
-
|
|
8
|
-
/** Admit one canonical Domain-rooted Class Path into its exact string identity. */
|
|
9
|
-
export function classKey(input: string, label: string): ClassKey
|
|
10
|
-
|
|
11
|
-
/** Untrusted CLI fields used to author or admit one exact Query V6 request. */
|
|
12
|
-
export interface QueryCommandInput {
|
|
13
|
-
readonly sources: readonly string[]
|
|
14
|
-
readonly class?: string
|
|
15
|
-
readonly ast?: unknown
|
|
16
|
-
readonly edge?: string
|
|
17
|
-
readonly direction?: QueryDirection
|
|
18
|
-
readonly limit?: string
|
|
19
|
-
readonly cursor?: string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Canonical query plus caller-bound pagination kept outside the AST. */
|
|
23
|
-
export interface PreparedQuery {
|
|
24
|
-
readonly ast: QueryAST
|
|
25
|
-
readonly page: Readonly<{ readonly size: number; readonly after?: string }>
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/** Admit canonical Query V6 or author its supported Path/Class/one-edge CLI subset. */
|
|
29
|
-
export function prepareQuery(input: QueryCommandInput): PreparedQuery
|
|
30
|
-
|
|
31
|
-
/** Admit canonical Mutation V3 or its exact authoring input; legacy PatchData is rejected. */
|
|
32
|
-
export function prepareMutation(input: unknown): MutationAST
|
|
33
|
-
|
|
34
|
-
/** Return the user-facing leaf of one exact qualified Property key. */
|
|
35
|
-
export function unqualifyProperty(key: string): string
|
|
36
|
-
|
|
37
|
-
/** Read one property by exact key first, then by its qualified leaf name. */
|
|
38
|
-
export function nodeProperty(
|
|
39
|
-
node: { readonly props: Readonly<Record<string, unknown>> } | null | undefined,
|
|
40
|
-
name: string,
|
|
41
|
-
): unknown
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { defineLaw } from '@astrale-os/spec/authoring'
|
|
2
|
-
|
|
3
|
-
export const CLI_GRAPH_QUERY_V6 = defineLaw({
|
|
4
|
-
id: 'CLI-GRAPH-QUERY-V6',
|
|
5
|
-
statement:
|
|
6
|
-
'CLI query input becomes exactly one canonical Query V6 document with an explicit finite limit; --class authors one exact Class source, exact Property ordering and Node or Edge projection profiles are admitted through the canonical AST surface, and legacy versions or unsupported selector combinations fail before a Graph call.',
|
|
7
|
-
tests: [
|
|
8
|
-
{ file: '__tests__/query.test.ts', id: 'TEST-CLI-GRAPH-AUTHORS-QUERY-V6' },
|
|
9
|
-
{ file: '__tests__/query.test.ts', id: 'TEST-CLI-GRAPH-AUTHORS-CLASS-QUERY' },
|
|
10
|
-
{ file: '__tests__/query.test.ts', id: 'TEST-CLI-GRAPH-ADMITS-QUERY-V6-ORDERING' },
|
|
11
|
-
{ file: '__tests__/query.test.ts', id: 'TEST-CLI-GRAPH-ADMITS-QUERY-V6-PROJECTIONS' },
|
|
12
|
-
{ file: '__tests__/query.test.ts', id: 'TEST-CLI-GRAPH-REJECTS-LEGACY-QUERY' },
|
|
13
|
-
],
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
export const CLI_GRAPH_MUTATION_V2 = defineLaw({
|
|
17
|
-
id: 'CLI-GRAPH-MUTATION-V2',
|
|
18
|
-
statement:
|
|
19
|
-
'CLI mutation input is admitted as canonical Mutation V2 or its exact authoring input; PatchData and other historical shapes never reach GraphApi.mutate.',
|
|
20
|
-
tests: [
|
|
21
|
-
{ file: '__tests__/mutation.test.ts', id: 'TEST-CLI-GRAPH-ADMITS-MUTATION-V2' },
|
|
22
|
-
{ file: '__tests__/mutation.test.ts', id: 'TEST-CLI-GRAPH-REJECTS-PATCH-DATA' },
|
|
23
|
-
],
|
|
24
|
-
})
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { defineLaw } from '@astrale-os/spec/authoring'
|
|
2
|
-
|
|
3
|
-
export const CLI_GRAPH_PROPERTY_PROJECTION = defineLaw({
|
|
4
|
-
id: 'CLI-GRAPH-PROPERTY-PROJECTION',
|
|
5
|
-
statement:
|
|
6
|
-
'An exact property key wins over a qualified leaf-name match; otherwise the first canonical property with that leaf is presented without rewriting the Node.',
|
|
7
|
-
tests: [
|
|
8
|
-
{
|
|
9
|
-
file: '__tests__/projection.test.ts',
|
|
10
|
-
id: 'TEST-CLI-GRAPH-PROJECTS-QUALIFIED-PROPERTIES',
|
|
11
|
-
},
|
|
12
|
-
],
|
|
13
|
-
})
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
import { prepareMutation } from '../mutation'
|
|
4
|
-
|
|
5
|
-
describe('prepareMutation', () => {
|
|
6
|
-
/** @evidence TEST-CLI-GRAPH-ADMITS-MUTATION-V3 */
|
|
7
|
-
test('creates one canonical Mutation V3 document from exact authoring input', () => {
|
|
8
|
-
expect(
|
|
9
|
-
JSON.parse(
|
|
10
|
-
JSON.stringify(
|
|
11
|
-
prepareMutation({
|
|
12
|
-
preconditions: [],
|
|
13
|
-
operations: [
|
|
14
|
-
{
|
|
15
|
-
op: 'node.create',
|
|
16
|
-
as: 'note',
|
|
17
|
-
class: 'notes.example.dev:class.Note',
|
|
18
|
-
props: {},
|
|
19
|
-
},
|
|
20
|
-
],
|
|
21
|
-
}),
|
|
22
|
-
),
|
|
23
|
-
),
|
|
24
|
-
).toEqual({
|
|
25
|
-
format: 'astrale.graph.mutation',
|
|
26
|
-
version: 'v3',
|
|
27
|
-
preconditions: [],
|
|
28
|
-
operations: [
|
|
29
|
-
{
|
|
30
|
-
op: 'node.create',
|
|
31
|
-
as: 'note',
|
|
32
|
-
class: 'notes.example.dev:class.Note',
|
|
33
|
-
props: {},
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
})
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
/** @evidence TEST-CLI-GRAPH-REJECTS-PATCH-DATA */
|
|
40
|
-
test('rejects legacy PatchData instead of narrowing it', () => {
|
|
41
|
-
expect(() => prepareMutation({ nodes: { create: [] }, edges: { create: [] } })).toThrow(
|
|
42
|
-
/Legacy PatchData/,
|
|
43
|
-
)
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
test('rejects an empty operations list in CLI language', () => {
|
|
47
|
-
expect(() => prepareMutation({ preconditions: [], operations: [] })).toThrow(
|
|
48
|
-
'Mutation V3 requires at least one operation',
|
|
49
|
-
)
|
|
50
|
-
})
|
|
51
|
-
})
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
import { nodeProperty, unqualifyProperty } from '../projection'
|
|
4
|
-
|
|
5
|
-
describe('graph presentation properties', () => {
|
|
6
|
-
/** @evidence TEST-CLI-GRAPH-PROJECTS-QUALIFIED-PROPERTIES */
|
|
7
|
-
test('prefers exact keys and otherwise projects a qualified leaf', () => {
|
|
8
|
-
const node = {
|
|
9
|
-
props: {
|
|
10
|
-
name: 'exact',
|
|
11
|
-
'/:example.test:class.Widget.property.name': 'qualified',
|
|
12
|
-
'/:example.test:class.Widget.property.description': 'shown',
|
|
13
|
-
},
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
expect(nodeProperty(node, 'name')).toBe('exact')
|
|
17
|
-
expect(nodeProperty(node, 'description')).toBe('shown')
|
|
18
|
-
expect(unqualifyProperty('/:example.test:class.Widget.property.description')).toBe(
|
|
19
|
-
'description',
|
|
20
|
-
)
|
|
21
|
-
})
|
|
22
|
-
})
|