@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,92 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
import type { KernelCommandOpts } from '../../connection'
|
|
4
|
-
import type { CommandDefinition } from '../../program/index'
|
|
5
|
-
|
|
6
|
-
import { formatKernelError } from '../../connection/errors'
|
|
7
|
-
import { AstraleError } from '../../errors'
|
|
8
|
-
import { statusOwnedInstance, type InstanceInfo } from '../../lib/admin-instance'
|
|
9
|
-
import { ADMIN_TARGET_OPTIONS, type AdminTargetCommandOpts } from '../../lib/admin-target'
|
|
10
|
-
import { resolveInstance } from '../../lib/instance'
|
|
11
|
-
import { log, withSpinner } from '../../lib/log'
|
|
12
|
-
import { isMachine, output, type RawOutputOpts } from '../../lib/output'
|
|
13
|
-
import { probeBookmark } from './use'
|
|
14
|
-
|
|
15
|
-
type StatusOpts = KernelCommandOpts &
|
|
16
|
-
AdminTargetCommandOpts &
|
|
17
|
-
RawOutputOpts & { bookmarked?: boolean }
|
|
18
|
-
|
|
19
|
-
interface BookmarkStatus {
|
|
20
|
-
readonly slug: string
|
|
21
|
-
readonly url: string
|
|
22
|
-
readonly issuer: string
|
|
23
|
-
readonly kind: 'bookmark'
|
|
24
|
-
readonly state: 'ready'
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default {
|
|
28
|
-
name: 'status',
|
|
29
|
-
description: 'Show managed instance status or probe a bookmark',
|
|
30
|
-
arguments: [{ name: 'id', description: 'Instance slug', required: true }],
|
|
31
|
-
options: [
|
|
32
|
-
...ADMIN_TARGET_OPTIONS,
|
|
33
|
-
{ flags: '--bookmarked', description: 'Probe a locally bookmarked kernel connection' },
|
|
34
|
-
],
|
|
35
|
-
action: async (id: string, opts: StatusOpts) => {
|
|
36
|
-
try {
|
|
37
|
-
const result = await withSpinner(`Fetching instance ${id}`, !isMachine(opts), () =>
|
|
38
|
-
resolveStatus(id, opts),
|
|
39
|
-
)
|
|
40
|
-
if (isMachine(opts)) {
|
|
41
|
-
output(result, opts)
|
|
42
|
-
return
|
|
43
|
-
}
|
|
44
|
-
console.log(`${chalk.bold(result.slug)} ${chalk.dim(result.url)}`)
|
|
45
|
-
const phase = 'phase' in result ? result.phase : undefined
|
|
46
|
-
log.dim(` state: ${result.state}${phase ? ` (${phase})` : ''}`)
|
|
47
|
-
if ('error' in result && result.error) log.dim(` error: ${result.error}`)
|
|
48
|
-
if ('organizationId' in result && result.organizationId)
|
|
49
|
-
log.dim(` organization: ${result.organizationId}`)
|
|
50
|
-
if ('createdAt' in result && result.createdAt) log.dim(` created: ${result.createdAt}`)
|
|
51
|
-
} catch (e) {
|
|
52
|
-
await formatKernelError(e, isMachine(opts), undefined, opts.debug)
|
|
53
|
-
process.exit(1)
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
} satisfies CommandDefinition
|
|
57
|
-
|
|
58
|
-
export interface StatusDependencies {
|
|
59
|
-
readonly statusOwnedInstance: typeof statusOwnedInstance
|
|
60
|
-
readonly resolveInstance: typeof resolveInstance
|
|
61
|
-
readonly probeBookmark: typeof probeBookmark
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const defaultStatusDependencies: StatusDependencies = Object.freeze({
|
|
65
|
-
statusOwnedInstance,
|
|
66
|
-
resolveInstance,
|
|
67
|
-
probeBookmark,
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
export async function resolveStatus(
|
|
71
|
-
id: string,
|
|
72
|
-
opts: StatusOpts,
|
|
73
|
-
dependencies: StatusDependencies = defaultStatusDependencies,
|
|
74
|
-
): Promise<InstanceInfo | BookmarkStatus> {
|
|
75
|
-
if (!opts.bookmarked) return dependencies.statusOwnedInstance(opts, id)
|
|
76
|
-
if (opts.admin !== undefined || opts.adminUrl !== undefined || opts.domainIssuer !== undefined) {
|
|
77
|
-
throw new AstraleError(
|
|
78
|
-
'INVALID_FLAG',
|
|
79
|
-
'--bookmarked cannot be combined with Admin target options.',
|
|
80
|
-
'Remove --bookmarked to inspect managed lifecycle, or remove the Admin options to probe a local bookmark.',
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
const bookmark = await dependencies.resolveInstance(id, undefined, { persist: false })
|
|
84
|
-
await dependencies.probeBookmark(bookmark)
|
|
85
|
-
return Object.freeze({
|
|
86
|
-
slug: bookmark.name,
|
|
87
|
-
url: bookmark.url,
|
|
88
|
-
issuer: bookmark.issuer ?? bookmark.url,
|
|
89
|
-
kind: 'bookmark',
|
|
90
|
-
state: 'ready',
|
|
91
|
-
})
|
|
92
|
-
}
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
import type { OwnedInstanceInfo } from '../../lib/admin-instance'
|
|
2
|
-
import type { CommandDefinition } from '../../program/index'
|
|
3
|
-
|
|
4
|
-
import { AstraleError } from '../../errors'
|
|
5
|
-
import { getDefault, setDefault } from '../../identity/index'
|
|
6
|
-
import { listOwnedInstancesWithIdentity } from '../../lib/admin-instance'
|
|
7
|
-
import { ADMIN_TARGET_OPTIONS } from '../../lib/admin-target'
|
|
8
|
-
import { fetchWithCaFile } from '../../lib/ca-fetch'
|
|
9
|
-
import {
|
|
10
|
-
findBookmarkTrustConflicts,
|
|
11
|
-
getActive,
|
|
12
|
-
readInstances,
|
|
13
|
-
resolveInstance,
|
|
14
|
-
resolveInstanceKey,
|
|
15
|
-
setActive,
|
|
16
|
-
upsertManagedBookmark,
|
|
17
|
-
type ResolvedInstance,
|
|
18
|
-
} from '../../lib/instance'
|
|
19
|
-
import {
|
|
20
|
-
collectInstanceCandidates,
|
|
21
|
-
describeInstanceCandidate,
|
|
22
|
-
type InstanceCandidate,
|
|
23
|
-
} from '../../lib/instance-candidates'
|
|
24
|
-
import { fatal, log } from '../../lib/log'
|
|
25
|
-
import { checkIssuerReachability } from '../../lib/meta'
|
|
26
|
-
import { confirmDefaultYes, selectFrom } from '../../lib/prompt'
|
|
27
|
-
import { validateSlug } from '../../lib/validation'
|
|
28
|
-
|
|
29
|
-
type UseOpts = {
|
|
30
|
-
admin?: string
|
|
31
|
-
adminUrl?: string
|
|
32
|
-
url?: string
|
|
33
|
-
timeout?: string
|
|
34
|
-
as?: string
|
|
35
|
-
creds?: string
|
|
36
|
-
debug?: boolean
|
|
37
|
-
ci?: boolean
|
|
38
|
-
noPrompt?: boolean
|
|
39
|
-
adoptDefault?: boolean
|
|
40
|
-
skipJwksCheck?: boolean
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async function useInstance(name?: string, opts: UseOpts = {}): Promise<void> {
|
|
44
|
-
try {
|
|
45
|
-
if (!name) {
|
|
46
|
-
const active = await getActive()
|
|
47
|
-
console.log(`${active.name} (${active.url})`)
|
|
48
|
-
return
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const resolved = await resolveUseTarget(name, opts)
|
|
52
|
-
|
|
53
|
-
if (!opts.skipJwksCheck) {
|
|
54
|
-
await probeBookmark(resolved)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
await setActive(resolved.name)
|
|
58
|
-
log.success(`Active instance: ${resolved.name} (${resolved.url})`)
|
|
59
|
-
|
|
60
|
-
// §7.1 identity-adoption prompt (DX). Orthogonality preserved — we
|
|
61
|
-
// only switch on explicit user consent (or --adopt-default in CI).
|
|
62
|
-
const store = await readInstances()
|
|
63
|
-
const key = resolveInstanceKey(store, resolved.name)
|
|
64
|
-
const identityCandidate =
|
|
65
|
-
resolved.defaultIdentity ?? (key ? store.instances[key]?.defaultIdentity : undefined)
|
|
66
|
-
if (!identityCandidate) return
|
|
67
|
-
const active = await getDefault().catch(() => null)
|
|
68
|
-
if (active?.name === identityCandidate) return
|
|
69
|
-
|
|
70
|
-
const inCi = opts.ci || opts.noPrompt || !!process.env.CI
|
|
71
|
-
if (inCi) {
|
|
72
|
-
if (opts.adoptDefault) {
|
|
73
|
-
await setDefault(identityCandidate)
|
|
74
|
-
log.success(`Identity switched to "${identityCandidate}" (--adopt-default)`)
|
|
75
|
-
} else {
|
|
76
|
-
log.dim(
|
|
77
|
-
` (instance default identity "${identityCandidate}" — keep active ${active?.name ?? 'none'})`,
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
return
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const msg = `Instance "${resolved.name}" has default identity "${identityCandidate}". Active: "${active?.name ?? 'none'}". Switch identity too?`
|
|
84
|
-
if (await confirmDefaultYes(msg)) {
|
|
85
|
-
await setDefault(identityCandidate)
|
|
86
|
-
log.success(`Identity switched to "${identityCandidate}"`)
|
|
87
|
-
} else {
|
|
88
|
-
log.dim(' kept active identity (orthogonal)')
|
|
89
|
-
}
|
|
90
|
-
} catch (e) {
|
|
91
|
-
fatal(e)
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** Probe with the exact TLS trust configuration stored on this bookmark. */
|
|
96
|
-
export async function probeBookmark(
|
|
97
|
-
resolved: ResolvedInstance,
|
|
98
|
-
dependencies: Partial<BookmarkProbeDependencies> = {},
|
|
99
|
-
): Promise<void> {
|
|
100
|
-
const probe = { ...defaultBookmarkProbeDependencies, ...dependencies }
|
|
101
|
-
const store = await probe.readInstances()
|
|
102
|
-
const conflicts = findBookmarkTrustConflicts(store, resolved.name, resolved.url, resolved.caFile)
|
|
103
|
-
try {
|
|
104
|
-
await probe.checkIssuerReachability(
|
|
105
|
-
resolved.url,
|
|
106
|
-
resolved.issuer,
|
|
107
|
-
resolved.caFile ? probe.fetchWithCaFile(resolved.caFile) : undefined,
|
|
108
|
-
)
|
|
109
|
-
} catch (cause) {
|
|
110
|
-
const original = cause instanceof AstraleError ? cause.hint : undefined
|
|
111
|
-
const trust = resolved.caFile
|
|
112
|
-
? `Bookmark "${resolved.name}" trusts CA ${resolved.caFile}.`
|
|
113
|
-
: `Bookmark "${resolved.name}" uses the system trust store.`
|
|
114
|
-
const collision =
|
|
115
|
-
conflicts.length === 0
|
|
116
|
-
? ''
|
|
117
|
-
: ` The same URL is bookmarked with different TLS trust as ${conflicts
|
|
118
|
-
.map((conflict) =>
|
|
119
|
-
conflict.caFile
|
|
120
|
-
? `"${conflict.name}" (CA ${conflict.caFile})`
|
|
121
|
-
: `"${conflict.name}" (system trust)`,
|
|
122
|
-
)
|
|
123
|
-
.join(', ')}.`
|
|
124
|
-
throw new AstraleError(
|
|
125
|
-
cause instanceof AstraleError ? cause.code : 'ISSUER_UNREACHABLE',
|
|
126
|
-
`Issuer/JWKS probe failed for bookmark "${resolved.name}" at ${resolved.url}.`,
|
|
127
|
-
`${trust}${collision}${original ? ` ${original}` : ''} Inspect with \`astrale instance list --bookmarked --json\`.`,
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
interface BookmarkProbeDependencies {
|
|
133
|
-
readonly readInstances: typeof readInstances
|
|
134
|
-
readonly checkIssuerReachability: typeof checkIssuerReachability
|
|
135
|
-
readonly fetchWithCaFile: typeof fetchWithCaFile
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const defaultBookmarkProbeDependencies: BookmarkProbeDependencies = Object.freeze({
|
|
139
|
-
readInstances,
|
|
140
|
-
checkIssuerReachability,
|
|
141
|
-
fetchWithCaFile,
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
async function resolveUseTarget(name: string, opts: UseOpts): Promise<ResolvedInstance> {
|
|
145
|
-
const [store, managed] = await Promise.all([readInstances(), fetchManagedInstances(name, opts)])
|
|
146
|
-
const candidates = collectInstanceCandidates(name, store, managed.instances)
|
|
147
|
-
|
|
148
|
-
if (candidates.length === 0) {
|
|
149
|
-
throw new AstraleError(
|
|
150
|
-
'INSTANCE_NOT_FOUND',
|
|
151
|
-
`Instance "${name}" is not bookmarked and not admin-managed.\n` +
|
|
152
|
-
` Bookmark: astrale instance bookmark ${name} --url <url>\n` +
|
|
153
|
-
` Or check: astrale instance list`,
|
|
154
|
-
)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const interactive = !(opts.ci || opts.noPrompt || process.env.CI)
|
|
158
|
-
const chosen =
|
|
159
|
-
candidates.length === 1
|
|
160
|
-
? candidates[0]
|
|
161
|
-
: interactive
|
|
162
|
-
? await pickCandidate(name, candidates)
|
|
163
|
-
: null
|
|
164
|
-
if (!chosen) throw ambiguousError(name, candidates)
|
|
165
|
-
|
|
166
|
-
if (chosen.source === 'bookmark') {
|
|
167
|
-
return await resolveInstance(chosen.key)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
assertManagedReady(chosen.info)
|
|
171
|
-
const { repointedFrom } = await upsertManagedBookmark({
|
|
172
|
-
key: chosen.key,
|
|
173
|
-
slug: chosen.info.slug,
|
|
174
|
-
url: chosen.url,
|
|
175
|
-
...(chosen.info.organizationId ? { organizationId: chosen.info.organizationId } : {}),
|
|
176
|
-
...(managed.identity ? { defaultIdentity: managed.identity } : {}),
|
|
177
|
-
})
|
|
178
|
-
if (repointedFrom) {
|
|
179
|
-
log.warn(`Bookmark "${chosen.key}" repointed: ${repointedFrom} → ${chosen.url}`)
|
|
180
|
-
}
|
|
181
|
-
return await resolveInstance(chosen.key)
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* All admin-managed instances (collectInstanceCandidates filters by name).
|
|
186
|
-
* Best-effort: an unreachable or unauthenticated admin kernel degrades to
|
|
187
|
-
* bookmark-only resolution.
|
|
188
|
-
*/
|
|
189
|
-
async function fetchManagedInstances(
|
|
190
|
-
name: string,
|
|
191
|
-
opts: UseOpts,
|
|
192
|
-
): Promise<{ readonly instances: OwnedInstanceInfo[]; readonly identity?: string }> {
|
|
193
|
-
try {
|
|
194
|
-
validateSlug(name)
|
|
195
|
-
} catch {
|
|
196
|
-
return { instances: [] }
|
|
197
|
-
}
|
|
198
|
-
try {
|
|
199
|
-
return await listOwnedInstancesWithIdentity(opts)
|
|
200
|
-
} catch {
|
|
201
|
-
return { instances: [] }
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function assertManagedReady(info: OwnedInstanceInfo): void {
|
|
206
|
-
if (info.state === 'ready') return
|
|
207
|
-
const detail = info.phase && info.phase !== info.state ? ` (${info.phase})` : ''
|
|
208
|
-
throw new AstraleError(
|
|
209
|
-
'INSTANCE_NOT_READY',
|
|
210
|
-
`Instance "${info.slug}" is ${info.state}${detail}; it cannot be selected yet.`,
|
|
211
|
-
info.error ?? `Run: astrale instance status ${info.slug}`,
|
|
212
|
-
)
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
async function pickCandidate(
|
|
216
|
-
name: string,
|
|
217
|
-
candidates: InstanceCandidate[],
|
|
218
|
-
): Promise<InstanceCandidate | null> {
|
|
219
|
-
return selectFrom(
|
|
220
|
-
`Multiple instances match "${name}":`,
|
|
221
|
-
candidates.map((candidate) => ({
|
|
222
|
-
label: describeInstanceCandidate(candidate),
|
|
223
|
-
value: candidate,
|
|
224
|
-
})),
|
|
225
|
-
)
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
function ambiguousError(name: string, candidates: InstanceCandidate[]): AstraleError {
|
|
229
|
-
const lines = candidates.map((candidate) => ` - ${describeInstanceCandidate(candidate)}`)
|
|
230
|
-
return new AstraleError(
|
|
231
|
-
'INSTANCE_AMBIGUOUS',
|
|
232
|
-
`Multiple instances match "${name}":\n${lines.join('\n')}`,
|
|
233
|
-
'Run interactively to pick one, or `astrale instance forget <name>` to drop the stale bookmark.',
|
|
234
|
-
)
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
export default {
|
|
238
|
-
name: 'use',
|
|
239
|
-
description: 'Set the active kernel instance (no args: show current)',
|
|
240
|
-
afterHelpText: `
|
|
241
|
-
Behavior:
|
|
242
|
-
The active instance lives in ~/.astrale/instances.json (a
|
|
243
|
-
process-global file). Concurrent instance:prepare or parallel test
|
|
244
|
-
runs can rewrite it under you — in scripted/parallel flows pass
|
|
245
|
-
-i <instance> on every command instead of relying on \`use\`.
|
|
246
|
-
|
|
247
|
-
Examples:
|
|
248
|
-
$ astrale instance use staging
|
|
249
|
-
$ astrale instance use staging --adopt-default
|
|
250
|
-
`,
|
|
251
|
-
arguments: [{ name: 'name', description: 'Registered instance name', required: false }],
|
|
252
|
-
options: [
|
|
253
|
-
...ADMIN_TARGET_OPTIONS,
|
|
254
|
-
{
|
|
255
|
-
flags: '--adopt-default',
|
|
256
|
-
description: 'Adopt instance default identity without prompt',
|
|
257
|
-
},
|
|
258
|
-
{ flags: '--skip-jwks-check', description: 'Skip the OIDC discovery + JWKS liveness probe' },
|
|
259
|
-
],
|
|
260
|
-
action: async (name: string | undefined, opts: UseOpts) => {
|
|
261
|
-
await useInstance(name, opts)
|
|
262
|
-
},
|
|
263
|
-
} satisfies CommandDefinition
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import type { DomainBundle, DomainInfo, SchemaApi } from '@astrale-os/sdk/client/schema'
|
|
2
|
-
|
|
3
|
-
import { Path } from '@astrale-os/sdk/graph/path'
|
|
4
|
-
|
|
5
|
-
import type { KernelCommandOpts } from '../connection'
|
|
6
|
-
import type { CommandDefinition } from '../program/index'
|
|
7
|
-
|
|
8
|
-
import { runKernelCommand } from '../connection'
|
|
9
|
-
import { AstraleError } from '../errors'
|
|
10
|
-
import { failInput } from '../lib/log'
|
|
11
|
-
import { output } from '../lib/output'
|
|
12
|
-
import { describeCallableFromBundle, missingCallableDescription } from './call-describe'
|
|
13
|
-
|
|
14
|
-
type IntrospectOpts = KernelCommandOpts & { bundle?: boolean }
|
|
15
|
-
|
|
16
|
-
interface IntrospectDependencies {
|
|
17
|
-
readonly runKernelCommand: typeof runKernelCommand
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const defaultIntrospectDependencies = Object.freeze({ runKernelCommand })
|
|
21
|
-
|
|
22
|
-
export async function introspectCommand(
|
|
23
|
-
target: string,
|
|
24
|
-
opts: IntrospectOpts,
|
|
25
|
-
dependencies: Partial<IntrospectDependencies> = {},
|
|
26
|
-
): Promise<void> {
|
|
27
|
-
const introspect = { ...defaultIntrospectDependencies, ...dependencies }
|
|
28
|
-
let origin: string
|
|
29
|
-
let path: Path
|
|
30
|
-
try {
|
|
31
|
-
;({ origin, path } = parseIntrospectTarget(target))
|
|
32
|
-
} catch (error) {
|
|
33
|
-
failInput(error, opts)
|
|
34
|
-
}
|
|
35
|
-
const wantsCallable = isCallablePath(path)
|
|
36
|
-
|
|
37
|
-
await introspect.runKernelCommand({
|
|
38
|
-
opts,
|
|
39
|
-
label: `Introspect ${origin}`,
|
|
40
|
-
fn: async ({ session }) => {
|
|
41
|
-
if (wantsCallable) {
|
|
42
|
-
const result = await readInstalledDomain(session.schema, origin, true)
|
|
43
|
-
const described = describeCallableFromBundle(path, result.bundle)
|
|
44
|
-
if (described === undefined) throw missingCallableDescription(path.raw)
|
|
45
|
-
return described
|
|
46
|
-
}
|
|
47
|
-
return readInstalledDomain(session.schema, origin, opts.bundle === true)
|
|
48
|
-
},
|
|
49
|
-
format: (value, format) => output(value, format),
|
|
50
|
-
})
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export function readInstalledDomain(
|
|
54
|
-
schema: Pick<SchemaApi, 'inspect' | 'bundle'>,
|
|
55
|
-
origin: string,
|
|
56
|
-
includeBundle: true,
|
|
57
|
-
): Promise<DomainBundle>
|
|
58
|
-
export function readInstalledDomain(
|
|
59
|
-
schema: Pick<SchemaApi, 'inspect' | 'bundle'>,
|
|
60
|
-
origin: string,
|
|
61
|
-
includeBundle: false,
|
|
62
|
-
): Promise<DomainInfo>
|
|
63
|
-
export function readInstalledDomain(
|
|
64
|
-
schema: Pick<SchemaApi, 'inspect' | 'bundle'>,
|
|
65
|
-
origin: string,
|
|
66
|
-
includeBundle: boolean,
|
|
67
|
-
): Promise<DomainInfo | DomainBundle>
|
|
68
|
-
export function readInstalledDomain(
|
|
69
|
-
schema: Pick<SchemaApi, 'inspect' | 'bundle'>,
|
|
70
|
-
origin: string,
|
|
71
|
-
includeBundle: boolean,
|
|
72
|
-
): Promise<DomainInfo | DomainBundle> {
|
|
73
|
-
return includeBundle ? schema.bundle(origin) : schema.inspect(origin)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export function parseIntrospectTarget(target: string): { origin: string; path: Path } {
|
|
77
|
-
if (target.startsWith('@')) {
|
|
78
|
-
throw new AstraleError(
|
|
79
|
-
'NOT_A_DOMAIN',
|
|
80
|
-
'introspect requires a Domain origin or Path, not an @id.',
|
|
81
|
-
'Example: astrale introspect kernel.astrale.ai or /:kernel.astrale.ai:class.Identity:whois',
|
|
82
|
-
)
|
|
83
|
-
}
|
|
84
|
-
const raw = target.startsWith('/') ? target : `/:${target}`
|
|
85
|
-
let path: Path
|
|
86
|
-
try {
|
|
87
|
-
path = Path.parse(raw)
|
|
88
|
-
} catch (error) {
|
|
89
|
-
throw new AstraleError(
|
|
90
|
-
'PATH_INVALID',
|
|
91
|
-
error instanceof Error ? error.message : 'Invalid introspect target',
|
|
92
|
-
)
|
|
93
|
-
}
|
|
94
|
-
if (path.ast.anchor.kind !== 'domain') {
|
|
95
|
-
throw new AstraleError('NOT_A_DOMAIN', 'introspect requires a Domain-rooted Path or origin.')
|
|
96
|
-
}
|
|
97
|
-
return { origin: path.ast.anchor.origin, path }
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
function isCallablePath(path: Path): boolean {
|
|
101
|
-
const last = path.ast.steps.at(-1)
|
|
102
|
-
if (last === undefined) return false
|
|
103
|
-
if (last.kind === 'method') return true
|
|
104
|
-
return last.kind === 'projection' && last.projection.kind === 'function'
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export default {
|
|
108
|
-
name: 'introspect',
|
|
109
|
-
description: 'Read installed Domain schema from the Kernel Schema syscall',
|
|
110
|
-
afterHelpText: `
|
|
111
|
-
Behavior:
|
|
112
|
-
Calls the public SDK Schema API for one installed Domain. A bare origin
|
|
113
|
-
(kernel.astrale.ai or /:kernel.astrale.ai) prints its exact revision,
|
|
114
|
-
generation, publication, readiness, capabilities, and bindings. --bundle
|
|
115
|
-
includes the schema bundle. A method or Function Path projects that
|
|
116
|
-
callable's input/output from the installed bundle.
|
|
117
|
-
|
|
118
|
-
Examples:
|
|
119
|
-
$ astrale introspect kernel.astrale.ai
|
|
120
|
-
$ astrale introspect /:kernel.astrale.ai --bundle
|
|
121
|
-
$ astrale introspect /:kernel.astrale.ai:class.Identity:whois
|
|
122
|
-
$ astrale introspect /:kernel.astrale.ai:function.journal
|
|
123
|
-
`,
|
|
124
|
-
arguments: [{ name: 'target', description: 'Domain origin or canonical Path' }],
|
|
125
|
-
options: [{ flags: '--bundle', description: 'Include the installed schema bundle' }],
|
|
126
|
-
action: async (target, opts) => {
|
|
127
|
-
await introspectCommand(target as string, opts as IntrospectOpts)
|
|
128
|
-
},
|
|
129
|
-
} satisfies CommandDefinition
|