@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
package/src/admin/contract.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { Input } from '@astrale-os/sdk/client'
|
|
2
|
-
import type { ClientSession, SessionRequestOptions } from '@astrale-os/sdk/client/session'
|
|
3
|
-
import type { ClassRef } from '@astrale-os/sdk/schema'
|
|
4
|
-
|
|
5
|
-
import { call } from '@astrale-os/sdk/client'
|
|
6
|
-
import { Path } from '@astrale-os/sdk/graph/path'
|
|
7
|
-
import { K, PropertyKey } from '@astrale-os/sdk/schema'
|
|
8
|
-
|
|
9
|
-
const origin = 'admin.astrale.ai'
|
|
10
|
-
|
|
11
|
-
function classRef(name: string): ClassRef {
|
|
12
|
-
return Object.freeze({ origin, kind: 'class', name }) as ClassRef
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const Domain = classRef('Domain')
|
|
16
|
-
|
|
17
|
-
export const AdminContract = Object.freeze({
|
|
18
|
-
origin,
|
|
19
|
-
fleet: Path.parse('/:admin.astrale.ai:core.fleet'),
|
|
20
|
-
classes: Object.freeze({
|
|
21
|
-
Domain,
|
|
22
|
-
}),
|
|
23
|
-
edges: Object.freeze({
|
|
24
|
-
fleetInstallsDomainByDefault: classRef('fleet_installs_domain_by_default'),
|
|
25
|
-
}),
|
|
26
|
-
properties: Object.freeze({
|
|
27
|
-
domain: Object.freeze({
|
|
28
|
-
origin: PropertyKey.of(Domain, 'origin'),
|
|
29
|
-
name: K.classes.Named.properties.name.key,
|
|
30
|
-
discoveryUrl: PropertyKey.of(Domain, 'discoveryUrl'),
|
|
31
|
-
description: K.classes.Descriptable.properties.description.key,
|
|
32
|
-
createdAt: K.classes.Timestamped.properties.createdAt.key,
|
|
33
|
-
updatedAt: K.classes.Timestamped.properties.updatedAt.key,
|
|
34
|
-
}),
|
|
35
|
-
}),
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
/** Invoke one stable Admin instance Method without schema discovery or reflection. */
|
|
39
|
-
export function callAdminMethod(
|
|
40
|
-
session: ClientSession,
|
|
41
|
-
receiver: Path,
|
|
42
|
-
method: string,
|
|
43
|
-
input: Input,
|
|
44
|
-
options?: SessionRequestOptions,
|
|
45
|
-
): Promise<unknown> {
|
|
46
|
-
return session.call(call(Path.instanceMethod(receiver, method), input), options)
|
|
47
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { GraphApi } from '@astrale-os/sdk/client'
|
|
2
|
-
import type { Node } from '@astrale-os/sdk/graph/node'
|
|
3
|
-
import type { QueryAST } from '@astrale-os/sdk/query'
|
|
4
|
-
|
|
5
|
-
/** Smallest Kernel graph capability needed by bounded Admin graph reads. */
|
|
6
|
-
export type AdminGraphQueryApi = Pick<GraphApi, 'query'>
|
|
7
|
-
|
|
8
|
-
/** Caller-scoped graph reads shared by the Admin catalog and Instance journeys. */
|
|
9
|
-
export type AdminGraphApi = Pick<GraphApi, 'query' | 'neighbors'>
|
|
10
|
-
|
|
11
|
-
export interface ReadAllNodesOptions {
|
|
12
|
-
readonly label: string
|
|
13
|
-
readonly maximum: number
|
|
14
|
-
readonly maximumPages: number
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** Collect one bounded Node selection and reject projection, cursor, or identity anomalies. */
|
|
18
|
-
export function readAllNodes(
|
|
19
|
-
graph: AdminGraphQueryApi,
|
|
20
|
-
ast: QueryAST,
|
|
21
|
-
options: ReadAllNodesOptions,
|
|
22
|
-
): Promise<readonly Node[]>
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
# Admin Graph inventory helper
|
|
2
|
-
|
|
3
|
-
This internal helper consumes only public `GraphApi.query` pages. It requires a Node selection,
|
|
4
|
-
enforces explicit Node and page bounds, rejects repeated cursors and Node identities, and returns a
|
|
5
|
-
frozen inventory. It owns no Admin schema meaning and performs no mutation or invocation.
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#0891b2" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<circle cx="5" cy="12" r="2"/><circle cx="12" cy="6" r="2"/><circle cx="19" cy="12" r="2"/><circle cx="12" cy="18" r="2"/><path d="m7 11 3.5-3.5M13.5 7.5 17 11M17 13l-3.5 3.5M10.5 16.5 7 13"/>
|
|
3
|
-
</svg>
|
package/src/admin/graph/index.ts
DELETED
package/src/admin/graph/nodes.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { GraphApi } from '@astrale-os/sdk/client'
|
|
2
|
-
import type { Node } from '@astrale-os/sdk/graph/node'
|
|
3
|
-
import type { QueryAST } from '@astrale-os/sdk/query'
|
|
4
|
-
|
|
5
|
-
export type AdminGraphQueryApi = Pick<GraphApi, 'query'>
|
|
6
|
-
export type AdminGraphApi = Pick<GraphApi, 'query' | 'neighbors'>
|
|
7
|
-
|
|
8
|
-
export interface ReadAllNodesOptions {
|
|
9
|
-
readonly label: string
|
|
10
|
-
readonly maximum: number
|
|
11
|
-
readonly maximumPages: number
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** Collect one explicitly bounded Node-value projection without hiding cursors. */
|
|
15
|
-
export async function readAllNodes(
|
|
16
|
-
graph: AdminGraphQueryApi,
|
|
17
|
-
ast: QueryAST,
|
|
18
|
-
options: ReadAllNodesOptions,
|
|
19
|
-
): Promise<readonly Node[]> {
|
|
20
|
-
const nodes: Node[] = []
|
|
21
|
-
const ids = new Set<string>()
|
|
22
|
-
const cursors = new Set<string>()
|
|
23
|
-
let cursor: string | undefined
|
|
24
|
-
let pages = 0
|
|
25
|
-
const pageSize = Math.min(options.maximum, 256)
|
|
26
|
-
do {
|
|
27
|
-
pages += 1
|
|
28
|
-
if (pages > options.maximumPages) {
|
|
29
|
-
throw new TypeError(`${options.label} exceeded its page bound.`)
|
|
30
|
-
}
|
|
31
|
-
const response = await graph.query(ast, {
|
|
32
|
-
page: { size: pageSize, ...(cursor === undefined ? {} : { after: cursor }) },
|
|
33
|
-
})
|
|
34
|
-
const result = response.result
|
|
35
|
-
if (result.kind !== 'nodes')
|
|
36
|
-
throw new TypeError(`${options.label} returned the wrong projection.`)
|
|
37
|
-
for (const projection of result.nodes) {
|
|
38
|
-
if (projection.kind !== 'value') {
|
|
39
|
-
throw new TypeError(`${options.label} omitted requested Node values.`)
|
|
40
|
-
}
|
|
41
|
-
const node = projection.value
|
|
42
|
-
if (ids.has(String(node.id))) throw new TypeError(`${options.label} repeated a Node.`)
|
|
43
|
-
ids.add(String(node.id))
|
|
44
|
-
nodes.push(node)
|
|
45
|
-
}
|
|
46
|
-
if (nodes.length > options.maximum) {
|
|
47
|
-
throw new TypeError(`${options.label} exceeded its Node bound.`)
|
|
48
|
-
}
|
|
49
|
-
cursor = response.page.next
|
|
50
|
-
if (cursor !== undefined && cursors.has(cursor)) {
|
|
51
|
-
throw new TypeError(`${options.label} repeated a cursor.`)
|
|
52
|
-
}
|
|
53
|
-
if (cursor !== undefined) cursors.add(cursor)
|
|
54
|
-
} while (cursor !== undefined)
|
|
55
|
-
return Object.freeze(nodes)
|
|
56
|
-
}
|
package/src/admin/index.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import type { ClientSession } from '@astrale-os/sdk/client/session'
|
|
2
|
-
|
|
3
|
-
export type InstanceState = 'provisioning' | 'ready' | 'deleting' | 'failed' | 'deleted'
|
|
4
|
-
|
|
5
|
-
export interface InstanceInfo {
|
|
6
|
-
readonly id: string
|
|
7
|
-
readonly slug: string
|
|
8
|
-
readonly url: string
|
|
9
|
-
readonly hostId?: string
|
|
10
|
-
readonly region?: string
|
|
11
|
-
readonly state: InstanceState
|
|
12
|
-
readonly phase?: string
|
|
13
|
-
readonly error?: string | null
|
|
14
|
-
readonly createdAt?: string
|
|
15
|
-
readonly updatedAt?: string
|
|
16
|
-
readonly organizationId?: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface OwnedInstanceInfo extends InstanceInfo {
|
|
20
|
-
readonly state: InstanceState
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface DomainInstallReceipt {
|
|
24
|
-
readonly domain: string
|
|
25
|
-
readonly instance: string
|
|
26
|
-
readonly origin: string
|
|
27
|
-
readonly ok: boolean
|
|
28
|
-
readonly installedRevision?: string
|
|
29
|
-
readonly error?: string
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface AdminInstanceContext {
|
|
33
|
-
readonly session: ClientSession
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export interface AdminInstanceApi {
|
|
37
|
-
list(): Promise<OwnedInstanceInfo[]>
|
|
38
|
-
create(slug: string): Promise<InstanceInfo>
|
|
39
|
-
status(identifier: string): Promise<InstanceInfo>
|
|
40
|
-
delete(identifier: string): Promise<InstanceInfo>
|
|
41
|
-
installDomain(identifier: string, domain: string): Promise<DomainInstallReceipt>
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export class AdminInstanceNotFoundError extends Error {
|
|
45
|
-
constructor(identifier: string)
|
|
46
|
-
readonly name: 'NotFoundError'
|
|
47
|
-
readonly identifier: string
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface AdminInstanceDependencies {
|
|
51
|
-
readonly operationId?: (kind: 'create' | 'status' | 'delete' | 'install-domain') => string
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function connectAdminInstances(
|
|
55
|
-
context: AdminInstanceContext,
|
|
56
|
-
dependencies?: AdminInstanceDependencies,
|
|
57
|
-
): Promise<AdminInstanceApi>
|
|
58
|
-
export function findOwnedInstance(
|
|
59
|
-
instances: readonly OwnedInstanceInfo[],
|
|
60
|
-
identifier: string,
|
|
61
|
-
): OwnedInstanceInfo | undefined
|
|
62
|
-
export function formatInstanceState(info: InstanceInfo): string
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
# CLI Admin Instance adapter
|
|
2
|
-
|
|
3
|
-
The adapter calls the stable singleton Fleet receiver directly. Listing and automatic creation are
|
|
4
|
-
one Admin Method call each; connection performs no schema discovery, introspection, or graph read.
|
|
5
|
-
Every returned summary is decoded locally before it reaches a command.
|
|
6
|
-
|
|
7
|
-
Automatic creation invokes `Fleet.createInstance`. Status, deletion, and Domain installation first
|
|
8
|
-
resolve a caller-visible Instance through Fleet and then invoke that exact Instance receiver. The
|
|
9
|
-
adapter creates internal operation IDs but preserves the existing CLI projection and
|
|
10
|
-
selection-required experience.
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="#2563eb" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
-
<rect x="4" y="4" width="16" height="16" rx="3"/><path d="M8 9h8M8 13h8M8 17h5"/><circle cx="17" cy="17" r="1" fill="#2563eb"/>
|
|
3
|
-
</svg>
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
import { adminSession } from '../../__tests__/fixture'
|
|
4
|
-
import { connectAdminInstances } from '../client'
|
|
5
|
-
|
|
6
|
-
function fixture(input: { invoke?: (target: string, input: unknown) => unknown }) {
|
|
7
|
-
const calls: Array<{
|
|
8
|
-
target: string
|
|
9
|
-
value: unknown
|
|
10
|
-
}> = []
|
|
11
|
-
const remote = adminSession((target, value) => {
|
|
12
|
-
calls.push({ target, value })
|
|
13
|
-
return input.invoke?.(target, value)
|
|
14
|
-
})
|
|
15
|
-
return {
|
|
16
|
-
call: remote.call,
|
|
17
|
-
reflection: remote.reflection,
|
|
18
|
-
calls,
|
|
19
|
-
connect: () =>
|
|
20
|
-
connectAdminInstances(
|
|
21
|
-
{ session: remote.session },
|
|
22
|
-
{
|
|
23
|
-
operationId: (kind) => `cli.instance.${kind}:test`,
|
|
24
|
-
},
|
|
25
|
-
),
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
describe('V2 Admin Instance adapter', () => {
|
|
30
|
-
test('lists caller-visible Instances through the Admin-owned Fleet operation', async () => {
|
|
31
|
-
const contract = fixture({
|
|
32
|
-
invoke: (target) =>
|
|
33
|
-
target.endsWith('::listInstances')
|
|
34
|
-
? [
|
|
35
|
-
{
|
|
36
|
-
id: '@instance-node',
|
|
37
|
-
slug: 'demo',
|
|
38
|
-
url: 'https://demo.eu.astrale.ai',
|
|
39
|
-
hostId: '@host-node',
|
|
40
|
-
region: 'fr-par',
|
|
41
|
-
state: 'ready',
|
|
42
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
43
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
44
|
-
},
|
|
45
|
-
]
|
|
46
|
-
: undefined,
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
await expect((await contract.connect()).list()).resolves.toEqual([
|
|
50
|
-
{
|
|
51
|
-
id: '@instance-node',
|
|
52
|
-
slug: 'demo',
|
|
53
|
-
url: 'https://demo.eu.astrale.ai',
|
|
54
|
-
hostId: '@host-node',
|
|
55
|
-
region: 'fr-par',
|
|
56
|
-
state: 'ready',
|
|
57
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
58
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
59
|
-
},
|
|
60
|
-
])
|
|
61
|
-
expect(contract.calls).toEqual([
|
|
62
|
-
{
|
|
63
|
-
target: '/:admin.astrale.ai:core.fleet::listInstances',
|
|
64
|
-
value: {},
|
|
65
|
-
},
|
|
66
|
-
])
|
|
67
|
-
expect(contract.reflection).not.toHaveBeenCalled()
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
test('delegates default placement to Fleet without reading Host inventory', async () => {
|
|
71
|
-
const created = {
|
|
72
|
-
id: '@instance-node',
|
|
73
|
-
slug: 'demo',
|
|
74
|
-
url: 'https://demo.eu.astrale.ai',
|
|
75
|
-
state: 'ready',
|
|
76
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
77
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
78
|
-
}
|
|
79
|
-
const contract = fixture({ invoke: () => created })
|
|
80
|
-
|
|
81
|
-
await expect((await contract.connect()).create('demo')).resolves.toMatchObject({
|
|
82
|
-
id: created.id,
|
|
83
|
-
slug: created.slug,
|
|
84
|
-
url: created.url,
|
|
85
|
-
state: created.state,
|
|
86
|
-
createdAt: created.createdAt,
|
|
87
|
-
})
|
|
88
|
-
expect(contract.calls).toEqual([
|
|
89
|
-
{
|
|
90
|
-
target: '/:admin.astrale.ai:core.fleet::createInstance',
|
|
91
|
-
value: { operationId: 'cli.instance.create:test', slug: 'demo' },
|
|
92
|
-
},
|
|
93
|
-
])
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
test('refreshes and deletes through the resolved Instance receiver', async () => {
|
|
97
|
-
const contract = fixture({
|
|
98
|
-
invoke: (target) =>
|
|
99
|
-
target.endsWith('::listInstances')
|
|
100
|
-
? [
|
|
101
|
-
{
|
|
102
|
-
id: '@instance-node',
|
|
103
|
-
slug: 'demo',
|
|
104
|
-
url: 'https://demo.eu.astrale.ai',
|
|
105
|
-
state: 'ready',
|
|
106
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
107
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
108
|
-
},
|
|
109
|
-
]
|
|
110
|
-
: {
|
|
111
|
-
id: '@instance-node',
|
|
112
|
-
slug: 'demo',
|
|
113
|
-
url: 'https://demo.eu.astrale.ai',
|
|
114
|
-
state: target.endsWith('::delete') ? 'deleted' : 'ready',
|
|
115
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
116
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
117
|
-
},
|
|
118
|
-
})
|
|
119
|
-
const api = await contract.connect()
|
|
120
|
-
|
|
121
|
-
await expect(api.status('demo')).resolves.toMatchObject({ state: 'ready' })
|
|
122
|
-
await expect(api.delete('@instance-node')).resolves.toMatchObject({ state: 'deleted' })
|
|
123
|
-
expect(contract.calls).toEqual([
|
|
124
|
-
{ target: '/:admin.astrale.ai:core.fleet::listInstances', value: {} },
|
|
125
|
-
{
|
|
126
|
-
target: '@instance-node::status',
|
|
127
|
-
value: { operationId: 'cli.instance.status:test' },
|
|
128
|
-
},
|
|
129
|
-
{ target: '/:admin.astrale.ai:core.fleet::listInstances', value: {} },
|
|
130
|
-
{
|
|
131
|
-
target: '@instance-node::delete',
|
|
132
|
-
value: { operationId: 'cli.instance.delete:test' },
|
|
133
|
-
},
|
|
134
|
-
])
|
|
135
|
-
expect(contract.reflection).not.toHaveBeenCalled()
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
test('installs a resolved catalog Domain through Instance.installDomain', async () => {
|
|
139
|
-
const contract = fixture({
|
|
140
|
-
invoke: (target) =>
|
|
141
|
-
target.endsWith('::listInstances')
|
|
142
|
-
? [
|
|
143
|
-
{
|
|
144
|
-
id: '@instance-node',
|
|
145
|
-
slug: 'demo',
|
|
146
|
-
url: 'https://demo.eu.astrale.ai',
|
|
147
|
-
state: 'ready',
|
|
148
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
149
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
150
|
-
},
|
|
151
|
-
]
|
|
152
|
-
: {
|
|
153
|
-
domain: '@crm-domain',
|
|
154
|
-
instance: '@instance-node',
|
|
155
|
-
origin: 'crm.acme.dev',
|
|
156
|
-
ok: true,
|
|
157
|
-
installedRevision: `sha256:${'a'.repeat(64)}`,
|
|
158
|
-
},
|
|
159
|
-
})
|
|
160
|
-
const api = await contract.connect()
|
|
161
|
-
|
|
162
|
-
await expect(api.installDomain('demo', '@crm-domain')).resolves.toMatchObject({
|
|
163
|
-
domain: '@crm-domain',
|
|
164
|
-
instance: '@instance-node',
|
|
165
|
-
origin: 'crm.acme.dev',
|
|
166
|
-
ok: true,
|
|
167
|
-
})
|
|
168
|
-
expect(contract.calls.at(-1)).toEqual({
|
|
169
|
-
target: '@instance-node::installDomain',
|
|
170
|
-
value: { operationId: 'cli.instance.install-domain:test', domain: '@crm-domain' },
|
|
171
|
-
})
|
|
172
|
-
expect(contract.reflection).not.toHaveBeenCalled()
|
|
173
|
-
})
|
|
174
|
-
|
|
175
|
-
test('connects without network I/O and list performs exactly one call', async () => {
|
|
176
|
-
const contract = fixture({ invoke: () => [] })
|
|
177
|
-
|
|
178
|
-
const api = await contract.connect()
|
|
179
|
-
expect(contract.call).not.toHaveBeenCalled()
|
|
180
|
-
expect(contract.reflection).not.toHaveBeenCalled()
|
|
181
|
-
|
|
182
|
-
await expect(api.list()).resolves.toEqual([])
|
|
183
|
-
expect(contract.call).toHaveBeenCalledTimes(1)
|
|
184
|
-
expect(contract.reflection).not.toHaveBeenCalled()
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
test('rejects malformed inventory, lifecycle, Method, and install outputs', async () => {
|
|
188
|
-
await expect((await fixture({ invoke: () => ({}) }).connect()).list()).rejects.toThrow(
|
|
189
|
-
'Admin Instance inventory is invalid.',
|
|
190
|
-
)
|
|
191
|
-
await expect(
|
|
192
|
-
(
|
|
193
|
-
await fixture({
|
|
194
|
-
invoke: () => [{ id: '@instance-node', slug: 'demo', state: 'mystery' }],
|
|
195
|
-
}).connect()
|
|
196
|
-
).list(),
|
|
197
|
-
).rejects.toThrow('Admin Instance state is invalid.')
|
|
198
|
-
await expect(
|
|
199
|
-
(
|
|
200
|
-
await fixture({
|
|
201
|
-
invoke: () => [{ id: 'not-a-path', slug: 'demo', state: 'ready' }],
|
|
202
|
-
}).connect()
|
|
203
|
-
).list(),
|
|
204
|
-
).rejects.toThrow('Admin Instance id is invalid.')
|
|
205
|
-
await expect(
|
|
206
|
-
(
|
|
207
|
-
await fixture({
|
|
208
|
-
invoke: () => [
|
|
209
|
-
{ id: '@instance-node', slug: 'demo', hostId: 'not-a-path', state: 'ready' },
|
|
210
|
-
],
|
|
211
|
-
}).connect()
|
|
212
|
-
).list(),
|
|
213
|
-
).rejects.toThrow('Admin Host id is invalid.')
|
|
214
|
-
|
|
215
|
-
const malformedStatus = fixture({
|
|
216
|
-
invoke: (target) =>
|
|
217
|
-
target.endsWith('::listInstances')
|
|
218
|
-
? [
|
|
219
|
-
{
|
|
220
|
-
id: '@instance-node',
|
|
221
|
-
slug: 'demo',
|
|
222
|
-
state: 'ready',
|
|
223
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
224
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
225
|
-
},
|
|
226
|
-
]
|
|
227
|
-
: {
|
|
228
|
-
id: '@instance-node',
|
|
229
|
-
slug: 'demo',
|
|
230
|
-
state: 'ready',
|
|
231
|
-
failure: {},
|
|
232
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
233
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
234
|
-
},
|
|
235
|
-
})
|
|
236
|
-
await expect((await malformedStatus.connect()).status('demo')).rejects.toThrow(
|
|
237
|
-
'Admin failure message is invalid.',
|
|
238
|
-
)
|
|
239
|
-
|
|
240
|
-
const malformedInstall = fixture({
|
|
241
|
-
invoke: (target) =>
|
|
242
|
-
target.endsWith('::listInstances')
|
|
243
|
-
? [
|
|
244
|
-
{
|
|
245
|
-
id: '@instance-node',
|
|
246
|
-
slug: 'demo',
|
|
247
|
-
state: 'ready',
|
|
248
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
249
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
250
|
-
},
|
|
251
|
-
]
|
|
252
|
-
: {
|
|
253
|
-
domain: '@crm-domain',
|
|
254
|
-
instance: '@instance-node',
|
|
255
|
-
origin: 'crm.acme.dev',
|
|
256
|
-
ok: 'yes',
|
|
257
|
-
},
|
|
258
|
-
})
|
|
259
|
-
await expect(
|
|
260
|
-
(await malformedInstall.connect()).installDomain('demo', '@crm-domain'),
|
|
261
|
-
).rejects.toThrow('Admin Domain install outcome is invalid.')
|
|
262
|
-
|
|
263
|
-
const malformedInstallPath = fixture({
|
|
264
|
-
invoke: (target) =>
|
|
265
|
-
target.endsWith('::listInstances')
|
|
266
|
-
? [{ id: '@instance-node', slug: 'demo', state: 'ready' }]
|
|
267
|
-
: { domain: 'not-a-path', instance: '@instance-node', origin: 'crm.acme.dev', ok: true },
|
|
268
|
-
})
|
|
269
|
-
await expect(
|
|
270
|
-
(await malformedInstallPath.connect()).installDomain('demo', '@crm-domain'),
|
|
271
|
-
).rejects.toThrow('Admin Domain reference is invalid.')
|
|
272
|
-
})
|
|
273
|
-
})
|