@astrale-os/cli 1.0.0-beta.8 → 1.0.0-npm-deprecated.0
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/README.md +14 -166
- package/package.json +10 -102
- package/.check-workspace.cjs +0 -40
- package/LICENSE +0 -202
- package/THIRD-PARTY-NOTICES.md +0 -27
- package/dist/astrale.js +0 -93172
- package/dist/public/connect-core.js +0 -29187
- package/dist/public/keys/index.js +0 -5651
- package/dist/public/paths/index.js +0 -4282
- package/dist/types/admin/instance/model.d.ts +0 -39
- package/dist/types/connect-core.d.ts +0 -22
- package/dist/types/connection/auth.d.ts +0 -36
- package/dist/types/errors.d.ts +0 -23
- package/dist/types/identity/registry.d.ts +0 -25
- package/dist/types/keys/algorithm.d.ts +0 -6
- package/dist/types/keys/credential.d.ts +0 -21
- package/dist/types/keys/index.d.ts +0 -4
- package/dist/types/keys/pair.d.ts +0 -34
- package/dist/types/lib/admin-target.d.ts +0 -78
- package/dist/types/lib/ca-fetch.d.ts +0 -2
- package/dist/types/lib/config.d.ts +0 -71
- package/dist/types/lib/failure-debug.d.ts +0 -1
- package/dist/types/lib/format.d.ts +0 -1
- package/dist/types/lib/idp-session.d.ts +0 -33
- package/dist/types/lib/idp.d.ts +0 -404
- package/dist/types/lib/instance-target.d.ts +0 -38
- package/dist/types/lib/instance.d.ts +0 -196
- package/dist/types/lib/invocation.d.ts +0 -3
- package/dist/types/lib/log.d.ts +0 -33
- package/dist/types/lib/login-flow.d.ts +0 -49
- package/dist/types/lib/meta.d.ts +0 -36
- package/dist/types/lib/output.d.ts +0 -87
- package/dist/types/lib/proc.d.ts +0 -43
- package/dist/types/lib/table.d.ts +0 -18
- package/dist/types/lib/update.d.ts +0 -131
- package/dist/types/lib/validation.d.ts +0 -11
- package/dist/types/paths/index.d.ts +0 -2
- package/dist/types/state/exchange-credentials.d.ts +0 -25
- package/dist/types/state/files.d.ts +0 -9
- package/dist/types/state/identities.d.ts +0 -42
- package/dist/types/state/index.d.ts +0 -8
- package/dist/types/state/paths.d.ts +0 -32
- package/src/__tests__/fixtures/publication.ts +0 -20
- package/src/admin/.spec/api.d.ts +0 -3
- package/src/admin/.spec/architecture.md +0 -15
- package/src/admin/.spec/icon.svg +0 -3
- package/src/admin/.spec/layout.ts +0 -6
- package/src/admin/__tests__/binding.test.ts +0 -31
- package/src/admin/__tests__/fixture.ts +0 -101
- package/src/admin/binding.ts +0 -98
- package/src/admin/catalog/.spec/api.d.ts +0 -65
- package/src/admin/catalog/.spec/architecture.md +0 -6
- 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 -142
- package/src/admin/catalog/client.ts +0 -218
- 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/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 -66
- 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 -266
- package/src/admin/instance/client.ts +0 -290
- package/src/admin/instance/index.ts +0 -16
- package/src/admin/instance/model.ts +0 -66
- package/src/admin/instance/tsconfig.json +0 -8
- package/src/commands/__tests__/admin-instance.test.ts +0 -88
- 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 -29
- package/src/commands/__tests__/domain-install-operation.test.ts +0 -126
- 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 -21
- 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-create-hosts.test.ts +0 -29
- 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-use.test.ts +0 -67
- package/src/commands/__tests__/introspect-parse.test.ts +0 -21
- package/src/commands/__tests__/logs.test.ts +0 -97
- package/src/commands/__tests__/read-commands.test.ts +0 -294
- 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 -21
- 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 -149
- 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 -52
- package/src/commands/auth/status.ts +0 -86
- package/src/commands/auth/token.ts +0 -174
- package/src/commands/browser.ts +0 -207
- package/src/commands/call-describe.ts +0 -123
- package/src/commands/call.ts +0 -205
- package/src/commands/domain/install.ts +0 -548
- package/src/commands/domain/list.ts +0 -155
- package/src/commands/domain/publish.ts +0 -133
- 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 -196
- 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 -69
- package/src/commands/instance/delete.ts +0 -68
- package/src/commands/instance/forget.ts +0 -26
- package/src/commands/instance/list.ts +0 -197
- package/src/commands/instance/status.ts +0 -38
- package/src/commands/instance/use.ts +0 -259
- package/src/commands/introspect.ts +0 -110
- package/src/commands/logs.ts +0 -283
- package/src/commands/mutate.ts +0 -122
- package/src/commands/query.ts +0 -136
- package/src/commands/session/analyze.ts +0 -50
- 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 -107
- package/src/commands/update.ts +0 -334
- package/src/commands/use.ts +0 -86
- package/src/commands/view-serve.ts +0 -26
- package/src/commands/view.ts +0 -614
- 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 -47
- 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 -61
- package/src/connection/.spec/laws/connection.ts +0 -205
- package/src/connection/.spec/layout.ts +0 -21
- package/src/connection/__tests__/auth.test.ts +0 -128
- 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 -119
- package/src/connection/__tests__/errors.test.ts +0 -577
- package/src/connection/__tests__/exchange.test.ts +0 -295
- 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 -140
- package/src/connection/__tests__/target.test.ts +0 -93
- package/src/connection/auth.ts +0 -236
- package/src/connection/call.ts +0 -7
- package/src/connection/command.ts +0 -67
- package/src/connection/credential.ts +0 -117
- package/src/connection/errors.ts +0 -1
- package/src/connection/exchange.ts +0 -311
- 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/reasons.ts +0 -209
- package/src/connection/self.ts +0 -138
- package/src/connection/session.ts +0 -185
- 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 -173
- 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 -97
- 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/.spec/schemas/identity-export-v1.schema.json +0 -25
- package/src/identity/__tests__/fixtures/registry-journey.ts +0 -53
- package/src/identity/__tests__/registration.test.ts +0 -64
- package/src/identity/__tests__/registry.test.ts +0 -70
- 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 -179
- 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 -168
- package/src/keys/algorithm.ts +0 -33
- package/src/keys/credential.ts +0 -112
- 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 -55
- 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 -54
- package/src/lib/__tests__/design.test.ts +0 -99
- package/src/lib/__tests__/domain-publication.test.ts +0 -133
- package/src/lib/__tests__/format.test.ts +0 -22
- package/src/lib/__tests__/idp-session.driver.ts +0 -53
- package/src/lib/__tests__/idp-session.test.ts +0 -379
- package/src/lib/__tests__/idp.test.ts +0 -415
- package/src/lib/__tests__/instance-candidates.test.ts +0 -148
- package/src/lib/__tests__/instance-target.test.ts +0 -212
- 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__/studio-server-deps.test.ts +0 -111
- package/src/lib/__tests__/table.test.ts +0 -53
- package/src/lib/__tests__/update.test.ts +0 -351
- 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 -146
- 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 -68
- package/src/lib/__tests__/view-session.test.ts +0 -99
- 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 -50
- package/src/lib/admin-target.ts +0 -290
- package/src/lib/binary.ts +0 -110
- package/src/lib/browser.ts +0 -150
- package/src/lib/ca-fetch.ts +0 -133
- package/src/lib/command-dx.ts +0 -188
- package/src/lib/concurrency.ts +0 -31
- package/src/lib/config.ts +0 -46
- package/src/lib/domain-publication.ts +0 -102
- package/src/lib/failure-debug.ts +0 -26
- package/src/lib/format.ts +0 -4
- package/src/lib/idp-session.ts +0 -134
- package/src/lib/idp.ts +0 -906
- package/src/lib/instance-candidates.ts +0 -49
- package/src/lib/instance-target.ts +0 -197
- package/src/lib/instance.ts +0 -463
- 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 -82
- package/src/lib/prompt.ts +0 -136
- package/src/lib/provision-instance.ts +0 -162
- package/src/lib/sdk-deps.ts +0 -104
- package/src/lib/self.ts +0 -22
- package/src/lib/skills.ts +0 -171
- package/src/lib/table.ts +0 -62
- package/src/lib/update.ts +0 -409
- package/src/lib/use-target.ts +0 -24
- package/src/lib/validation.ts +0 -59
- package/src/lib/view/assets.ts +0 -78
- 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 -244
- package/src/lib/view/session.ts +0 -152
- 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 -42
- 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 -362
- package/src/program/build.ts +0 -183
- package/src/program/command.ts +0 -42
- package/src/program/index.ts +0 -2
- package/src/program/options.ts +0 -41
- package/src/program/registry.ts +0 -63
- package/src/program/tsconfig.json +0 -6
- package/src/setup/__tests__/instance-step.test.ts +0 -239
- 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 -199
- package/src/setup/steps/skills-bridge.ts +0 -70
- package/src/setup/steps/skills.ts +0 -59
- package/src/setup/types.ts +0 -61
- package/src/setup/util.ts +0 -34
- package/src/state/.spec/api.d.ts +0 -133
- package/src/state/.spec/architecture.md +0 -31
- 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 -14
- package/src/state/__tests__/exchange-credentials.test.ts +0 -188
- package/src/state/__tests__/files.test.ts +0 -113
- package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
- package/src/state/__tests__/identities.test.ts +0 -142
- package/src/state/__tests__/paths.test.ts +0 -27
- package/src/state/exchange-credentials.ts +0 -219
- package/src/state/files.ts +0 -129
- package/src/state/identities.ts +0 -229
- package/src/state/index.ts +0 -29
- package/src/state/paths.ts +0 -61
- package/src/state/tsconfig.json +0 -6
- package/src/telemetry/__tests__/gate.test.ts +0 -63
- package/src/telemetry/__tests__/recorder.test.ts +0 -110
- package/src/telemetry/__tests__/redact.test.ts +0 -79
- package/src/telemetry/__tests__/session.test.ts +0 -166
- package/src/telemetry/__tests__/trigger.test.ts +0 -49
- 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 -227
- package/src/telemetry/gate.ts +0 -79
- package/src/telemetry/recorder.ts +0 -57
- package/src/telemetry/redact.ts +0 -53
- package/src/telemetry/session.ts +0 -88
- package/src/telemetry/settings.ts +0 -26
- package/src/telemetry/store.ts +0 -91
- package/src/telemetry/trigger.ts +0 -119
- package/src/telemetry/types.ts +0 -64
- package/src/test-utils.ts +0 -18
- package/studio/client/dist/assets/elk-api-Di4OXGNH.js +0 -1
- package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
- package/studio/client/dist/assets/index-BLm6J11H.js +0 -81
- package/studio/client/dist/assets/index-BiGR8Oo9.css +0 -1
- package/studio/client/dist/assets/index-ChOr3yP0.css +0 -1
- package/studio/client/dist/assets/index-DTjvkOUX.js +0 -8
- package/studio/client/dist/index.html +0 -13
- package/studio/package.json +0 -65
- package/studio/server/agent/ask.test.ts +0 -74
- package/studio/server/agent/ask.ts +0 -71
- package/studio/server/agent/bridge/client.test.ts +0 -49
- package/studio/server/agent/bridge/client.ts +0 -37
- package/studio/server/agent/bridge/grant.test.ts +0 -62
- package/studio/server/agent/bridge/grant.ts +0 -84
- package/studio/server/agent/bridge/routes.test.ts +0 -151
- package/studio/server/agent/bridge/routes.ts +0 -148
- package/studio/server/agent/bridge/stdio.ts +0 -195
- package/studio/server/agent/conversation.test.ts +0 -89
- package/studio/server/agent/conversation.ts +0 -158
- package/studio/server/agent/harness/adapter.ts +0 -171
- package/studio/server/agent/harness/claude/adapter.test.ts +0 -348
- package/studio/server/agent/harness/claude/adapter.ts +0 -71
- package/studio/server/agent/harness/claude/ask.ts +0 -114
- package/studio/server/agent/harness/claude/capabilities.ts +0 -27
- package/studio/server/agent/harness/claude/command.ts +0 -63
- package/studio/server/agent/harness/claude/events.ts +0 -215
- package/studio/server/agent/harness/claude/loadout.ts +0 -132
- package/studio/server/agent/harness/claude/mcp.test.ts +0 -36
- package/studio/server/agent/harness/claude/mcp.ts +0 -41
- package/studio/server/agent/harness/claude/skills.ts +0 -43
- package/studio/server/agent/harness/codex/adapter.test.ts +0 -269
- package/studio/server/agent/harness/codex/adapter.ts +0 -116
- package/studio/server/agent/harness/codex/ask.test.ts +0 -176
- package/studio/server/agent/harness/codex/ask.ts +0 -181
- package/studio/server/agent/harness/codex/command.test.ts +0 -69
- package/studio/server/agent/harness/codex/command.ts +0 -43
- package/studio/server/agent/harness/codex/events.test.ts +0 -94
- package/studio/server/agent/harness/codex/events.ts +0 -132
- package/studio/server/agent/harness/codex/exec.ts +0 -113
- package/studio/server/agent/harness/codex/loadout.ts +0 -60
- package/studio/server/agent/harness/codex/mcp.test.ts +0 -32
- package/studio/server/agent/harness/codex/mcp.ts +0 -27
- package/studio/server/agent/harness/codex/models.test.ts +0 -167
- package/studio/server/agent/harness/codex/models.ts +0 -211
- package/studio/server/agent/harness/codex/skills.ts +0 -33
- package/studio/server/agent/harness/gateway/config.test.ts +0 -98
- package/studio/server/agent/harness/gateway/config.ts +0 -214
- package/studio/server/agent/harness/gateway/token.test.ts +0 -133
- package/studio/server/agent/harness/gateway/token.ts +0 -166
- package/studio/server/agent/harness/mock/adapter.ts +0 -190
- package/studio/server/agent/harness/mock/domain-edit.ts +0 -41
- package/studio/server/agent/harness/process.test.ts +0 -46
- package/studio/server/agent/harness/process.ts +0 -104
- package/studio/server/agent/harness/registry.ts +0 -37
- package/studio/server/agent/harness/selection.test.ts +0 -75
- package/studio/server/agent/harness/selection.ts +0 -85
- package/studio/server/agent/harness/skills.test.ts +0 -95
- package/studio/server/agent/harness/skills.ts +0 -100
- package/studio/server/agent/layout.test.ts +0 -95
- package/studio/server/agent/notify.ts +0 -12
- package/studio/server/agent/prompts/anchors.test.ts +0 -70
- package/studio/server/agent/prompts/anchors.ts +0 -153
- package/studio/server/agent/prompts/ask.ts +0 -34
- package/studio/server/agent/prompts/system.test.ts +0 -13
- package/studio/server/agent/prompts/system.ts +0 -99
- package/studio/server/agent/prompts/turn.ts +0 -66
- package/studio/server/agent/routes.test.ts +0 -176
- package/studio/server/agent/routes.ts +0 -214
- package/studio/server/agent/run/completion.ts +0 -193
- package/studio/server/agent/run/coordinator.test.ts +0 -337
- package/studio/server/agent/run/coordinator.ts +0 -104
- package/studio/server/agent/run/live-state.ts +0 -73
- package/studio/server/agent/run/preparation.ts +0 -163
- package/studio/server/agent/run/transcript.test.ts +0 -81
- package/studio/server/agent/run/transcript.ts +0 -196
- package/studio/server/agent/run/usage.test.ts +0 -70
- package/studio/server/agent/run/usage.ts +0 -62
- package/studio/server/agent/stream.ts +0 -37
- package/studio/server/agent/telemetry.ts +0 -13
- package/studio/server/api/canvas.ts +0 -43
- package/studio/server/api/comments.ts +0 -85
- package/studio/server/api/context.ts +0 -61
- package/studio/server/api/deployment.ts +0 -39
- package/studio/server/api/documents.ts +0 -55
- package/studio/server/api/domain.ts +0 -59
- package/studio/server/api/http.ts +0 -45
- package/studio/server/api/project.ts +0 -57
- package/studio/server/api/schema.ts +0 -12
- package/studio/server/api/views.ts +0 -57
- package/studio/server/api/workspace.ts +0 -60
- package/studio/server/api-agent-loadout.test.ts +0 -69
- package/studio/server/api.test.ts +0 -147
- package/studio/server/api.ts +0 -34
- package/studio/server/cache.test.ts +0 -122
- package/studio/server/cache.ts +0 -303
- package/studio/server/cli-consumers.test.ts +0 -494
- package/studio/server/cli.test.ts +0 -88
- package/studio/server/cli.ts +0 -240
- package/studio/server/client-package.test.ts +0 -147
- package/studio/server/client-package.ts +0 -266
- package/studio/server/detect.ts +0 -81
- package/studio/server/domain.test.ts +0 -77
- package/studio/server/domain.ts +0 -124
- package/studio/server/environment/dotenv-preview.test.ts +0 -39
- package/studio/server/environment/dotenv-preview.ts +0 -27
- package/studio/server/environment/files.test.ts +0 -53
- package/studio/server/environment/files.ts +0 -120
- package/studio/server/handoff/copy.ts +0 -171
- package/studio/server/handoff/service.test.ts +0 -22
- package/studio/server/handoff/service.ts +0 -62
- package/studio/server/index.ts +0 -148
- package/studio/server/instances/active.ts +0 -72
- package/studio/server/instances/deploy-record.test.ts +0 -31
- package/studio/server/instances/deploy-record.ts +0 -37
- package/studio/server/instances/deploy.ts +0 -56
- package/studio/server/instances/probe.test.ts +0 -67
- package/studio/server/instances/probe.ts +0 -67
- package/studio/server/instances/status.test.ts +0 -12
- package/studio/server/instances/status.ts +0 -49
- package/studio/server/introspect/anatomy/client-tree.ts +0 -57
- package/studio/server/introspect/anatomy/env-fields.ts +0 -66
- package/studio/server/introspect/anatomy/schema-definition.ts +0 -53
- package/studio/server/introspect/anatomy/source.ts +0 -181
- package/studio/server/introspect/anatomy/views/routes.ts +0 -114
- package/studio/server/introspect/anatomy/views.ts +0 -53
- package/studio/server/introspect/anatomy-extras.test.ts +0 -265
- package/studio/server/introspect/anatomy-extras.ts +0 -10
- package/studio/server/introspect/anatomy.test.ts +0 -41
- package/studio/server/introspect/anatomy.ts +0 -147
- package/studio/server/introspect/bundle.ts +0 -69
- package/studio/server/introspect/canonical-schema.test.ts +0 -179
- package/studio/server/introspect/canonical-schema.ts +0 -583
- package/studio/server/introspect/config-preview.test.ts +0 -32
- package/studio/server/introspect/config-preview.ts +0 -119
- package/studio/server/introspect/core-extractor.ts +0 -30
- package/studio/server/introspect/core.ts +0 -45
- package/studio/server/introspect/diff.test.ts +0 -124
- package/studio/server/introspect/diff.ts +0 -316
- package/studio/server/introspect/extractor.ts +0 -41
- package/studio/server/introspect/hash.ts +0 -24
- package/studio/server/introspect/overlay-tsmorph.test.ts +0 -146
- package/studio/server/introspect/overlay-tsmorph.ts +0 -9
- package/studio/server/introspect/overlay.test.ts +0 -44
- package/studio/server/introspect/overlay.ts +0 -40
- package/studio/server/introspect/revision.test.ts +0 -54
- package/studio/server/introspect/revision.ts +0 -49
- package/studio/server/introspect/runtime.test.ts +0 -157
- package/studio/server/introspect/runtime.ts +0 -140
- package/studio/server/introspect/schema-ir-json.test.ts +0 -70
- package/studio/server/introspect/schema-ir-json.ts +0 -151
- package/studio/server/introspect/schema-refs.test.ts +0 -55
- package/studio/server/introspect/schema-refs.ts +0 -32
- package/studio/server/introspect/source-overlay/annotations.ts +0 -14
- package/studio/server/introspect/source-overlay/handlers.ts +0 -161
- package/studio/server/introspect/source-overlay/kernel-calls.ts +0 -46
- package/studio/server/introspect/source-overlay/project.ts +0 -248
- package/studio/server/introspect/source-overlay/spans.ts +0 -330
- package/studio/server/json.ts +0 -46
- package/studio/server/lifecycle.ts +0 -42
- package/studio/server/sse.test.ts +0 -26
- package/studio/server/sse.ts +0 -60
- package/studio/server/state/baseline.test.ts +0 -267
- package/studio/server/state/baseline.ts +0 -354
- package/studio/server/state/comments.test.ts +0 -94
- package/studio/server/state/comments.ts +0 -484
- package/studio/server/state/context.ts +0 -199
- package/studio/server/state/documents.ts +0 -111
- package/studio/server/state/integrations.ts +0 -81
- package/studio/server/state/layout.test.ts +0 -34
- package/studio/server/state/layout.ts +0 -82
- package/studio/server/state/settings.test.ts +0 -78
- package/studio/server/state/settings.ts +0 -73
- package/studio/server/state/store.test.ts +0 -122
- package/studio/server/state/store.ts +0 -146
- package/studio/server/state/visibility.ts +0 -48
- package/studio/server/views/model.test.ts +0 -57
- package/studio/server/views/model.ts +0 -66
- package/studio/server/views/runtime.ts +0 -40
- package/studio/server/views/selection-repository.test.ts +0 -31
- package/studio/server/views/selection-repository.ts +0 -60
- package/studio/server/views/session.test.ts +0 -73
- package/studio/server/views/session.ts +0 -166
- package/studio/server/views/target.test.ts +0 -78
- package/studio/server/views/target.ts +0 -222
- package/studio/server/watch.test.ts +0 -36
- package/studio/server/watch.ts +0 -93
- package/studio/server/workspace/catalog.test.ts +0 -17
- package/studio/server/workspace/catalog.ts +0 -43
- package/studio/server/workspace/create.test.ts +0 -37
- package/studio/server/workspace/create.ts +0 -162
- package/studio/server/workspace/git.ts +0 -75
- package/studio/server/workspace/updates.ts +0 -83
- package/studio/server/workspace-state.ts +0 -26
- package/studio/server/workspace-watch.ts +0 -106
- package/studio/shared/agent-effort.test.ts +0 -12
- package/studio/shared/agent-effort.ts +0 -15
- package/studio/shared/agent-models.test.ts +0 -9
- package/studio/shared/agent-models.ts +0 -14
- package/studio/shared/contracts/README.md +0 -16
- package/studio/shared/contracts/agent.ts +0 -270
- package/studio/shared/contracts/runtime.ts +0 -50
- package/studio/shared/contracts/schema.ts +0 -393
- package/studio/shared/contracts/surface.test.ts +0 -317
- package/studio/shared/contracts/workspace.ts +0 -265
- package/studio/shared/layout.test.ts +0 -116
- package/studio/shared/schema/identity.test.ts +0 -34
- package/studio/shared/schema/identity.ts +0 -68
- package/studio/shared/settings-values.test.ts +0 -18
- package/studio/shared/settings-values.ts +0 -20
- package/studio/shared/types.ts +0 -14
- package/studio/tsconfig.json +0 -23
- package/tsconfig.json +0 -14
- package/viewer/dist/index.html +0 -93
- package/viewer/dist/main.js +0 -76
- package/viewer/tsconfig.json +0 -13
|
@@ -1,290 +0,0 @@
|
|
|
1
|
-
import type { ClientSession } from '@astrale-os/sdk/client/session'
|
|
2
|
-
import type { Node } from '@astrale-os/sdk/graph/node'
|
|
3
|
-
import type { ResolvedClass } from '@astrale-os/sdk/schema'
|
|
4
|
-
|
|
5
|
-
import { Path } from '@astrale-os/sdk/graph/path'
|
|
6
|
-
import { Query } from '@astrale-os/sdk/query'
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
bindAdmin,
|
|
10
|
-
invokeAdminMethod,
|
|
11
|
-
requireAdminBinding,
|
|
12
|
-
requireAdminClass,
|
|
13
|
-
requireAdminCore,
|
|
14
|
-
requireAdminProperty,
|
|
15
|
-
type AdminBinding,
|
|
16
|
-
} from '../binding'
|
|
17
|
-
import { readAllNodes, type AdminGraphApi } from '../graph'
|
|
18
|
-
import {
|
|
19
|
-
AdminHostNotFoundError,
|
|
20
|
-
AdminInstanceNotFoundError,
|
|
21
|
-
findOwnedInstance,
|
|
22
|
-
type DomainInstallReceipt,
|
|
23
|
-
type InstanceInfo,
|
|
24
|
-
type InstanceState,
|
|
25
|
-
type OwnedInstanceInfo,
|
|
26
|
-
} from './model'
|
|
27
|
-
|
|
28
|
-
const PAGE_SIZE = 256
|
|
29
|
-
const MAXIMUM_INSTANCES = 10_000
|
|
30
|
-
const MAXIMUM_PAGES = Math.ceil(MAXIMUM_INSTANCES / PAGE_SIZE) + 1
|
|
31
|
-
|
|
32
|
-
export interface AdminInstanceContext {
|
|
33
|
-
readonly session: ClientSession
|
|
34
|
-
readonly graph: AdminGraphApi
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface AdminInstanceApi {
|
|
38
|
-
list(): Promise<OwnedInstanceInfo[]>
|
|
39
|
-
create(slug: string, hostId?: string): Promise<InstanceInfo>
|
|
40
|
-
status(identifier: string): Promise<InstanceInfo>
|
|
41
|
-
delete(identifier: string): Promise<InstanceInfo>
|
|
42
|
-
installDomain(identifier: string, domain: string): Promise<DomainInstallReceipt>
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface AdminInstanceDependencies {
|
|
46
|
-
readonly bind?: (session: ClientSession) => Promise<AdminBinding>
|
|
47
|
-
readonly operationId?: (kind: 'create' | 'status' | 'delete' | 'install-domain') => string
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Bind one discovered Admin root revision and expose only the public Instance
|
|
52
|
-
* product journey. No Host lifecycle method is present on this capability.
|
|
53
|
-
*/
|
|
54
|
-
export async function connectAdminInstances(
|
|
55
|
-
context: AdminInstanceContext,
|
|
56
|
-
dependencies: AdminInstanceDependencies = {},
|
|
57
|
-
): Promise<AdminInstanceApi> {
|
|
58
|
-
const binding = requireAdminBinding(await (dependencies.bind ?? bindAdmin)(context.session))
|
|
59
|
-
|
|
60
|
-
const Instance = requireAdminClass(binding, 'Instance', 'node')
|
|
61
|
-
const Host = requireAdminClass(binding, 'Host', 'node')
|
|
62
|
-
const Fleet = requireAdminClass(binding, 'Fleet', 'node')
|
|
63
|
-
const fleetReservesAdminHost = requireAdminClass(binding, 'fleet_reserves_admin_host', 'edge')
|
|
64
|
-
const fleet = requireAdminCore(binding, 'fleet')
|
|
65
|
-
|
|
66
|
-
const operationId = dependencies.operationId ?? defaultOperationId
|
|
67
|
-
|
|
68
|
-
const list = async (): Promise<OwnedInstanceInfo[]> => {
|
|
69
|
-
const result: unknown = await invokeAdminMethod(
|
|
70
|
-
context.session,
|
|
71
|
-
binding,
|
|
72
|
-
Fleet,
|
|
73
|
-
'listInstances',
|
|
74
|
-
fleet,
|
|
75
|
-
{},
|
|
76
|
-
)
|
|
77
|
-
if (!Array.isArray(result)) throw new TypeError('Admin Instance inventory is invalid.')
|
|
78
|
-
return result.map((value) => instanceFromSummary(value) as OwnedInstanceInfo)
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const requireInstance = async (identifier: string): Promise<OwnedInstanceInfo> => {
|
|
82
|
-
const found = findOwnedInstance(await list(), identifier)
|
|
83
|
-
if (found === undefined) throw new AdminInstanceNotFoundError(identifier)
|
|
84
|
-
return found
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const invokeInstance = async (
|
|
88
|
-
method: 'status' | 'delete',
|
|
89
|
-
identifier: string,
|
|
90
|
-
): Promise<InstanceInfo> => {
|
|
91
|
-
const instance = await requireInstance(identifier)
|
|
92
|
-
const output = await invokeAdminMethod(
|
|
93
|
-
context.session,
|
|
94
|
-
binding,
|
|
95
|
-
Instance,
|
|
96
|
-
method,
|
|
97
|
-
Path.parse(instance.id),
|
|
98
|
-
{ operationId: operationId(method) },
|
|
99
|
-
)
|
|
100
|
-
return instanceFromSummary(output)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
return Object.freeze({
|
|
104
|
-
list,
|
|
105
|
-
async create(slug: string, hostId?: string) {
|
|
106
|
-
const input = Object.freeze({
|
|
107
|
-
operationId: operationId('create'),
|
|
108
|
-
slug,
|
|
109
|
-
})
|
|
110
|
-
if (hostId !== undefined) {
|
|
111
|
-
const selected = await hostInventory(context.graph, Host, fleetReservesAdminHost, fleet)
|
|
112
|
-
const host = selected.hosts.find(
|
|
113
|
-
(item) => item.id === hostId && item.state === 'ready' && item.path !== selected.reserved,
|
|
114
|
-
)
|
|
115
|
-
if (host === undefined) throw new AdminHostNotFoundError(hostId)
|
|
116
|
-
return instanceFromSummary(
|
|
117
|
-
await invokeAdminMethod(
|
|
118
|
-
context.session,
|
|
119
|
-
binding,
|
|
120
|
-
Host,
|
|
121
|
-
'createInstance',
|
|
122
|
-
Path.parse(host.path),
|
|
123
|
-
input,
|
|
124
|
-
),
|
|
125
|
-
)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// Default placement belongs to Admin. Avoid a redundant Host graph read:
|
|
129
|
-
// it requires broader graph authority than this Fleet operation and can
|
|
130
|
-
// deny an otherwise authorized caller before the server selects a Host.
|
|
131
|
-
return instanceFromSummary(
|
|
132
|
-
await invokeAdminMethod(context.session, binding, Fleet, 'createInstance', fleet, input),
|
|
133
|
-
)
|
|
134
|
-
},
|
|
135
|
-
status: (identifier: string) => invokeInstance('status', identifier),
|
|
136
|
-
delete: (identifier: string) => invokeInstance('delete', identifier),
|
|
137
|
-
async installDomain(identifier: string, domain: string): Promise<DomainInstallReceipt> {
|
|
138
|
-
const instance = await requireInstance(identifier)
|
|
139
|
-
const output = await invokeAdminMethod(
|
|
140
|
-
context.session,
|
|
141
|
-
binding,
|
|
142
|
-
Instance,
|
|
143
|
-
'installDomain',
|
|
144
|
-
Path.parse(instance.id),
|
|
145
|
-
{
|
|
146
|
-
operationId: operationId('install-domain'),
|
|
147
|
-
domain: Path.parse(domain).raw,
|
|
148
|
-
},
|
|
149
|
-
)
|
|
150
|
-
return domainInstallReceipt(output)
|
|
151
|
-
},
|
|
152
|
-
})
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
interface HostInventoryItem {
|
|
156
|
-
readonly id: string
|
|
157
|
-
readonly nodeId: string
|
|
158
|
-
readonly path: string
|
|
159
|
-
readonly state: string
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
async function hostInventory(
|
|
163
|
-
graph: AdminGraphApi,
|
|
164
|
-
Host: ResolvedClass<'node'>,
|
|
165
|
-
fleetReservesAdminHost: ResolvedClass<'edge'>,
|
|
166
|
-
fleet: Path,
|
|
167
|
-
): Promise<{ readonly hosts: readonly HostInventoryItem[]; readonly reserved?: string }> {
|
|
168
|
-
const [nodes, reservedPage] = await Promise.all([
|
|
169
|
-
readAllNodes(
|
|
170
|
-
graph,
|
|
171
|
-
Query.from({ nodes: [Host] }).select({
|
|
172
|
-
kind: 'nodes',
|
|
173
|
-
projection: { kind: 'value' },
|
|
174
|
-
}),
|
|
175
|
-
{
|
|
176
|
-
label: 'Admin Host inventory',
|
|
177
|
-
maximum: MAXIMUM_INSTANCES,
|
|
178
|
-
maximumPages: MAXIMUM_PAGES,
|
|
179
|
-
},
|
|
180
|
-
),
|
|
181
|
-
graph.neighbors(fleet, fleetReservesAdminHost, {
|
|
182
|
-
direction: 'outgoing',
|
|
183
|
-
page: { size: 1 },
|
|
184
|
-
}),
|
|
185
|
-
])
|
|
186
|
-
const reserved = reservedPage.first === null ? undefined : Path.id(reservedPage.first.id).raw
|
|
187
|
-
return Object.freeze({
|
|
188
|
-
hosts: Object.freeze(
|
|
189
|
-
nodes.map((node) =>
|
|
190
|
-
Object.freeze({
|
|
191
|
-
id: requiredStringProperty(Host, node, 'id'),
|
|
192
|
-
nodeId: String(node.id),
|
|
193
|
-
path: Path.id(node.id).raw,
|
|
194
|
-
state: requiredStringProperty(Host, node, 'state'),
|
|
195
|
-
}),
|
|
196
|
-
),
|
|
197
|
-
),
|
|
198
|
-
...(reserved === undefined ? {} : { reserved }),
|
|
199
|
-
})
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
type DynamicDefinition = ResolvedClass<'node'>
|
|
203
|
-
|
|
204
|
-
function instanceFromSummary(input: unknown): InstanceInfo {
|
|
205
|
-
const value = record(input, 'Admin Instance summary')
|
|
206
|
-
const failure = value.failure === undefined ? undefined : record(value.failure, 'Admin failure')
|
|
207
|
-
return Object.freeze({
|
|
208
|
-
id: requiredString(value.id, 'Admin Instance id'),
|
|
209
|
-
slug: requiredString(value.slug, 'Admin Instance slug'),
|
|
210
|
-
url: optionalStringValue(value.url) ?? '',
|
|
211
|
-
state: instanceState(value.state),
|
|
212
|
-
...(value.hostId === undefined
|
|
213
|
-
? {}
|
|
214
|
-
: { hostId: requiredString(value.hostId, 'Admin Host id') }),
|
|
215
|
-
...(value.region === undefined ? {} : { region: requiredString(value.region, 'Admin region') }),
|
|
216
|
-
...(value.phase === undefined
|
|
217
|
-
? {}
|
|
218
|
-
: { phase: requiredString(value.phase, 'Admin Instance phase') }),
|
|
219
|
-
...(failure === undefined
|
|
220
|
-
? {}
|
|
221
|
-
: { error: requiredString(failure.message, 'Admin failure message') }),
|
|
222
|
-
...(value.createdAt === undefined
|
|
223
|
-
? {}
|
|
224
|
-
: { createdAt: requiredString(value.createdAt, 'Admin Instance creation time') }),
|
|
225
|
-
...(value.organizationId === undefined
|
|
226
|
-
? {}
|
|
227
|
-
: { organizationId: requiredString(value.organizationId, 'Admin organization id') }),
|
|
228
|
-
})
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
function domainInstallReceipt(input: unknown): DomainInstallReceipt {
|
|
232
|
-
const value = record(input, 'Admin Domain install receipt')
|
|
233
|
-
const failure = value.failure === undefined ? undefined : record(value.failure, 'Admin failure')
|
|
234
|
-
if (typeof value.ok !== 'boolean') throw new TypeError('Admin Domain install outcome is invalid.')
|
|
235
|
-
return Object.freeze({
|
|
236
|
-
domain: requiredString(value.domain, 'Admin Domain reference'),
|
|
237
|
-
instance: requiredString(value.instance, 'Admin Instance reference'),
|
|
238
|
-
origin: requiredString(value.origin, 'Installed Domain origin'),
|
|
239
|
-
ok: value.ok,
|
|
240
|
-
...(value.installedRevision === undefined
|
|
241
|
-
? {}
|
|
242
|
-
: {
|
|
243
|
-
installedRevision: requiredString(value.installedRevision, 'Installed Domain revision'),
|
|
244
|
-
}),
|
|
245
|
-
...(failure === undefined
|
|
246
|
-
? {}
|
|
247
|
-
: { error: requiredString(failure.message, 'Admin Domain install failure') }),
|
|
248
|
-
})
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function requiredStringProperty(definition: DynamicDefinition, node: Node, name: string): string {
|
|
252
|
-
return requiredString(
|
|
253
|
-
node.props[requireAdminProperty(definition, name).key],
|
|
254
|
-
`Admin ${definition.ref.name}.${name}`,
|
|
255
|
-
)
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
function instanceState(input: unknown): InstanceState {
|
|
259
|
-
if (
|
|
260
|
-
input === 'provisioning' ||
|
|
261
|
-
input === 'ready' ||
|
|
262
|
-
input === 'deleting' ||
|
|
263
|
-
input === 'failed' ||
|
|
264
|
-
input === 'deleted'
|
|
265
|
-
) {
|
|
266
|
-
return input
|
|
267
|
-
}
|
|
268
|
-
throw new TypeError('Admin Instance state is invalid.')
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
function requiredString(input: unknown, label: string): string {
|
|
272
|
-
if (typeof input !== 'string' || input.length === 0) throw new TypeError(`${label} is invalid.`)
|
|
273
|
-
return input
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
function optionalStringValue(input: unknown): string | undefined {
|
|
277
|
-
if (input === undefined) return undefined
|
|
278
|
-
return requiredString(input, 'Admin string value')
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
function record(input: unknown, label: string): Readonly<Record<string, unknown>> {
|
|
282
|
-
if (typeof input !== 'object' || input === null || Array.isArray(input)) {
|
|
283
|
-
throw new TypeError(`${label} is invalid.`)
|
|
284
|
-
}
|
|
285
|
-
return input as Readonly<Record<string, unknown>>
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
function defaultOperationId(kind: 'create' | 'status' | 'delete' | 'install-domain'): string {
|
|
289
|
-
return `cli.instance.${kind}:${globalThis.crypto.randomUUID()}`
|
|
290
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
connectAdminInstances,
|
|
3
|
-
type AdminInstanceApi,
|
|
4
|
-
type AdminInstanceContext,
|
|
5
|
-
type AdminInstanceDependencies,
|
|
6
|
-
} from './client'
|
|
7
|
-
export {
|
|
8
|
-
AdminHostNotFoundError,
|
|
9
|
-
AdminInstanceNotFoundError,
|
|
10
|
-
findOwnedInstance,
|
|
11
|
-
formatInstanceLocation,
|
|
12
|
-
type DomainInstallReceipt,
|
|
13
|
-
type InstanceInfo,
|
|
14
|
-
type InstanceState,
|
|
15
|
-
type OwnedInstanceInfo,
|
|
16
|
-
} from './model'
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/** CLI-stable projection of one caller-visible Admin Instance. */
|
|
2
|
-
export type InstanceState = 'provisioning' | 'ready' | 'deleting' | 'failed' | 'deleted'
|
|
3
|
-
|
|
4
|
-
export interface InstanceInfo {
|
|
5
|
-
readonly id: string
|
|
6
|
-
readonly slug: string
|
|
7
|
-
readonly url: string
|
|
8
|
-
readonly hostId?: string
|
|
9
|
-
readonly region?: string
|
|
10
|
-
readonly state?: InstanceState
|
|
11
|
-
readonly phase?: string
|
|
12
|
-
readonly error?: string | null
|
|
13
|
-
readonly createdAt?: string
|
|
14
|
-
readonly organizationId?: string
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** An Instance returned through the caller-scoped Admin graph inventory. */
|
|
18
|
-
export interface OwnedInstanceInfo extends InstanceInfo {
|
|
19
|
-
readonly state: InstanceState
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export interface DomainInstallReceipt {
|
|
23
|
-
readonly domain: string
|
|
24
|
-
readonly instance: string
|
|
25
|
-
readonly origin: string
|
|
26
|
-
readonly ok: boolean
|
|
27
|
-
readonly installedRevision?: string
|
|
28
|
-
readonly error?: string
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export class AdminInstanceNotFoundError extends AstraleError {
|
|
32
|
-
constructor(readonly identifier: string) {
|
|
33
|
-
super(
|
|
34
|
-
'INSTANCE_NOT_FOUND',
|
|
35
|
-
`No owned Admin Instance matches ${JSON.stringify(identifier)}.`,
|
|
36
|
-
'Run `astrale instance list` to see your instances.',
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export class AdminHostNotFoundError extends AstraleError {
|
|
42
|
-
constructor(readonly identifier: string) {
|
|
43
|
-
super('HOST_NOT_FOUND', `No caller-usable Admin Host matches ${JSON.stringify(identifier)}.`)
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** Match an owner-scoped Instance by slug, canonical Node Path, or bare Node id. */
|
|
48
|
-
export function findOwnedInstance(
|
|
49
|
-
instances: readonly OwnedInstanceInfo[],
|
|
50
|
-
identifier: string,
|
|
51
|
-
): OwnedInstanceInfo | undefined {
|
|
52
|
-
return instances.find(
|
|
53
|
-
(instance) =>
|
|
54
|
-
instance.slug === identifier ||
|
|
55
|
-
instance.id === identifier ||
|
|
56
|
-
(instance.id.startsWith('@') && instance.id.slice(1) === identifier),
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** Human-readable location of an Instance (state, region, and Host Path). */
|
|
61
|
-
export function formatInstanceLocation(info: InstanceInfo): string {
|
|
62
|
-
return [info.state && info.state !== 'ready' ? info.state : undefined, info.region, info.hostId]
|
|
63
|
-
.filter(Boolean)
|
|
64
|
-
.join(' · ')
|
|
65
|
-
}
|
|
66
|
-
import { AstraleError } from '../../errors'
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
import type { IdentityStore } from '../../identity/index'
|
|
4
|
-
|
|
5
|
-
import { AuthError } from '../../errors'
|
|
6
|
-
import { findOwnedInstance, type OwnedInstanceInfo } from '../../lib/admin-instance'
|
|
7
|
-
import { assertAlphaCreateIdentity } from '../instance/create'
|
|
8
|
-
|
|
9
|
-
describe('admin-backed instance commands', () => {
|
|
10
|
-
test('findOwnedInstance matches owner inventory by slug or stable node id', () => {
|
|
11
|
-
const owned = {
|
|
12
|
-
id: 'instance-node',
|
|
13
|
-
slug: 'demo',
|
|
14
|
-
url: 'https://demo.eu.astrale.ai',
|
|
15
|
-
state: 'failed',
|
|
16
|
-
organizationId: 'org_123',
|
|
17
|
-
hostId: 'host-1',
|
|
18
|
-
region: 'eu',
|
|
19
|
-
phase: 'installing:default-domains',
|
|
20
|
-
error: 'postInstall failed',
|
|
21
|
-
createdAt: '2026-07-16T00:00:00.000Z',
|
|
22
|
-
} satisfies OwnedInstanceInfo
|
|
23
|
-
|
|
24
|
-
expect(findOwnedInstance([owned], 'demo')).toBe(owned)
|
|
25
|
-
expect(findOwnedInstance([owned], 'instance-node')).toBe(owned)
|
|
26
|
-
expect(findOwnedInstance([owned], 'other')).toBeUndefined()
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
test('instance create preflight points fresh installs at WorkOS login', () => {
|
|
30
|
-
const store: IdentityStore = {
|
|
31
|
-
default: 'manager',
|
|
32
|
-
identities: {
|
|
33
|
-
manager: {
|
|
34
|
-
subject: 'manager',
|
|
35
|
-
createdAt: '2026-06-08T00:00:00.000Z',
|
|
36
|
-
source: 'key',
|
|
37
|
-
mode: 'local',
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
expect(() => assertAlphaCreateIdentity(store)).toThrow(AuthError)
|
|
43
|
-
expect(() => assertAlphaCreateIdentity(store)).toThrow('WorkOS login required')
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
test('instance create preflight accepts IdP-backed identities', () => {
|
|
47
|
-
const store: IdentityStore = {
|
|
48
|
-
default: 'bryan',
|
|
49
|
-
identities: {
|
|
50
|
-
bryan: {
|
|
51
|
-
subject: 'user_123',
|
|
52
|
-
createdAt: '2026-06-08T00:00:00.000Z',
|
|
53
|
-
source: 'idp',
|
|
54
|
-
mode: 'remote',
|
|
55
|
-
idp: 'workos',
|
|
56
|
-
issuer: 'https://auth.example.com',
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
expect(() => assertAlphaCreateIdentity(store)).not.toThrow()
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
test('--as selection must also be IdP-backed', () => {
|
|
65
|
-
const store: IdentityStore = {
|
|
66
|
-
default: 'local',
|
|
67
|
-
identities: {
|
|
68
|
-
local: {
|
|
69
|
-
subject: 'local',
|
|
70
|
-
createdAt: '2026-06-08T00:00:00.000Z',
|
|
71
|
-
source: 'key',
|
|
72
|
-
mode: 'local',
|
|
73
|
-
},
|
|
74
|
-
workos: {
|
|
75
|
-
subject: 'user_123',
|
|
76
|
-
createdAt: '2026-06-08T00:00:00.000Z',
|
|
77
|
-
source: 'idp',
|
|
78
|
-
mode: 'remote',
|
|
79
|
-
idp: 'workos',
|
|
80
|
-
issuer: 'https://auth.example.com',
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
expect(() => assertAlphaCreateIdentity(store, { as: 'local' })).toThrow(AuthError)
|
|
86
|
-
expect(() => assertAlphaCreateIdentity(store, { as: 'workos' })).not.toThrow()
|
|
87
|
-
})
|
|
88
|
-
})
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, test } from 'bun:test'
|
|
2
|
-
import { mkdir, mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'
|
|
3
|
-
import { tmpdir } from 'node:os'
|
|
4
|
-
import { join } from 'node:path'
|
|
5
|
-
|
|
6
|
-
const cliRoot = join(import.meta.dir, '../../..')
|
|
7
|
-
|
|
8
|
-
let tmp: string
|
|
9
|
-
|
|
10
|
-
beforeEach(async () => {
|
|
11
|
-
tmp = await mkdtemp(join(tmpdir(), 'astrale-auth-login-'))
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
afterEach(async () => {
|
|
15
|
-
await rm(tmp, { recursive: true, force: true })
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
describe('auth login command', () => {
|
|
19
|
-
test('rejects requested audience when provider mints a different access-token aud', async () => {
|
|
20
|
-
const server = oauthServer({
|
|
21
|
-
accessToken: unsignedJwt({
|
|
22
|
-
iss: 'http://127.0.0.1',
|
|
23
|
-
sub: 'user_123',
|
|
24
|
-
aud: 'unknown/api',
|
|
25
|
-
exp: 1893456000,
|
|
26
|
-
}),
|
|
27
|
-
})
|
|
28
|
-
try {
|
|
29
|
-
await writeIdpConfig(server.url)
|
|
30
|
-
|
|
31
|
-
const result = await runAuthLogin(
|
|
32
|
-
'--idp',
|
|
33
|
-
'test',
|
|
34
|
-
'--name',
|
|
35
|
-
'alice',
|
|
36
|
-
'--client-credentials',
|
|
37
|
-
'--client-secret-env',
|
|
38
|
-
'TEST_CLIENT_SECRET',
|
|
39
|
-
'--audience',
|
|
40
|
-
'https://kernel.example.com',
|
|
41
|
-
'--raw',
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
expect(result.exitCode).toBe(1)
|
|
45
|
-
expect(result.stderr).toContain(
|
|
46
|
-
'IdP response access_token was not minted for requested audience https://kernel.example.com',
|
|
47
|
-
)
|
|
48
|
-
expect(
|
|
49
|
-
await readFile(join(tmp, 'idp-sessions', 'alice.json'), 'utf-8').catch(() => null),
|
|
50
|
-
).toBeNull()
|
|
51
|
-
} finally {
|
|
52
|
-
await server.stop()
|
|
53
|
-
}
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
test('stores the session when provider mints the requested access-token aud', async () => {
|
|
57
|
-
const server = oauthServer({
|
|
58
|
-
accessToken: unsignedJwt({
|
|
59
|
-
iss: 'http://127.0.0.1',
|
|
60
|
-
sub: 'user_123',
|
|
61
|
-
aud: 'https://kernel.example.com',
|
|
62
|
-
exp: 1893456000,
|
|
63
|
-
}),
|
|
64
|
-
})
|
|
65
|
-
try {
|
|
66
|
-
await writeIdpConfig(server.url)
|
|
67
|
-
|
|
68
|
-
const result = await runAuthLogin(
|
|
69
|
-
'--idp',
|
|
70
|
-
'test',
|
|
71
|
-
'--name',
|
|
72
|
-
'alice',
|
|
73
|
-
'--client-credentials',
|
|
74
|
-
'--client-secret-env',
|
|
75
|
-
'TEST_CLIENT_SECRET',
|
|
76
|
-
'--audience',
|
|
77
|
-
'https://kernel.example.com',
|
|
78
|
-
'--raw',
|
|
79
|
-
)
|
|
80
|
-
|
|
81
|
-
expect(result.exitCode).toBe(0)
|
|
82
|
-
const session = JSON.parse(await readFile(join(tmp, 'idp-sessions', 'alice.json'), 'utf-8'))
|
|
83
|
-
expect(session.audience).toBe('https://kernel.example.com')
|
|
84
|
-
expect(session.clientId).toBe('client_123')
|
|
85
|
-
expect(session.subject).toBe('user_123')
|
|
86
|
-
} finally {
|
|
87
|
-
await server.stop()
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
|
|
91
|
-
test('persists an explicit client id and reuses it for a named login', async () => {
|
|
92
|
-
const server = oauthServer({
|
|
93
|
-
accessToken: unsignedJwt({
|
|
94
|
-
iss: 'http://127.0.0.1',
|
|
95
|
-
sub: 'user_123',
|
|
96
|
-
exp: 1893456000,
|
|
97
|
-
}),
|
|
98
|
-
})
|
|
99
|
-
try {
|
|
100
|
-
await writeIdpConfig(server.url)
|
|
101
|
-
|
|
102
|
-
const explicit = await runAuthLogin(
|
|
103
|
-
'--idp',
|
|
104
|
-
'test',
|
|
105
|
-
'--name',
|
|
106
|
-
'alice',
|
|
107
|
-
'--client-id',
|
|
108
|
-
'client_override',
|
|
109
|
-
'--client-credentials',
|
|
110
|
-
'--client-secret-env',
|
|
111
|
-
'TEST_CLIENT_SECRET',
|
|
112
|
-
'--raw',
|
|
113
|
-
)
|
|
114
|
-
const reused = await runAuthLogin(
|
|
115
|
-
'--idp',
|
|
116
|
-
'test',
|
|
117
|
-
'--name',
|
|
118
|
-
'alice',
|
|
119
|
-
'--client-credentials',
|
|
120
|
-
'--client-secret-env',
|
|
121
|
-
'TEST_CLIENT_SECRET',
|
|
122
|
-
'--raw',
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
expect(explicit.exitCode).toBe(0)
|
|
126
|
-
expect(reused.exitCode).toBe(0)
|
|
127
|
-
expect(server.clientIds()).toEqual(['client_override', 'client_override'])
|
|
128
|
-
const session = JSON.parse(await readFile(join(tmp, 'idp-sessions', 'alice.json'), 'utf-8'))
|
|
129
|
-
expect(session.clientId).toBe('client_override')
|
|
130
|
-
} finally {
|
|
131
|
-
await server.stop()
|
|
132
|
-
}
|
|
133
|
-
})
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
async function writeIdpConfig(baseUrl: string): Promise<void> {
|
|
137
|
-
await mkdir(join(tmp, 'idps', 'test'), { recursive: true })
|
|
138
|
-
await writeFile(
|
|
139
|
-
join(tmp, 'idps', 'index.json'),
|
|
140
|
-
JSON.stringify(
|
|
141
|
-
{
|
|
142
|
-
idps: {
|
|
143
|
-
test: {
|
|
144
|
-
issuer: baseUrl,
|
|
145
|
-
createdAt: '2026-01-01T00:00:00.000Z',
|
|
146
|
-
updatedAt: '2026-01-01T00:00:00.000Z',
|
|
147
|
-
},
|
|
148
|
-
},
|
|
149
|
-
},
|
|
150
|
-
null,
|
|
151
|
-
2,
|
|
152
|
-
) + '\n',
|
|
153
|
-
)
|
|
154
|
-
await writeFile(
|
|
155
|
-
join(tmp, 'idps', 'test', 'metadata.json'),
|
|
156
|
-
JSON.stringify(
|
|
157
|
-
{
|
|
158
|
-
issuer: baseUrl,
|
|
159
|
-
token_endpoint: `${baseUrl}/token`,
|
|
160
|
-
jwks_uri: `${baseUrl}/jwks`,
|
|
161
|
-
},
|
|
162
|
-
null,
|
|
163
|
-
2,
|
|
164
|
-
) + '\n',
|
|
165
|
-
)
|
|
166
|
-
await writeFile(
|
|
167
|
-
join(tmp, 'idps', 'test', 'client.json'),
|
|
168
|
-
JSON.stringify(
|
|
169
|
-
{
|
|
170
|
-
client_id: 'client_123',
|
|
171
|
-
client_secret_env: 'TEST_CLIENT_SECRET',
|
|
172
|
-
},
|
|
173
|
-
null,
|
|
174
|
-
2,
|
|
175
|
-
) + '\n',
|
|
176
|
-
)
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
function oauthServer(args: { accessToken: string }): {
|
|
180
|
-
url: string
|
|
181
|
-
clientIds: () => Array<string | null>
|
|
182
|
-
stop: () => Promise<void>
|
|
183
|
-
} {
|
|
184
|
-
const clientIds: Array<string | null> = []
|
|
185
|
-
const server = Bun.serve({
|
|
186
|
-
port: 0,
|
|
187
|
-
fetch: async (request) => {
|
|
188
|
-
const url = new URL(request.url)
|
|
189
|
-
if (url.pathname !== '/token') return new Response('not found', { status: 404 })
|
|
190
|
-
const form = new URLSearchParams(await request.text())
|
|
191
|
-
clientIds.push(form.get('client_id'))
|
|
192
|
-
return Response.json({
|
|
193
|
-
access_token: args.accessToken,
|
|
194
|
-
token_type: 'Bearer',
|
|
195
|
-
expires_in: 3600,
|
|
196
|
-
})
|
|
197
|
-
},
|
|
198
|
-
})
|
|
199
|
-
return {
|
|
200
|
-
url: `http://${server.hostname}:${server.port}`,
|
|
201
|
-
clientIds: () => clientIds,
|
|
202
|
-
stop: () => server.stop(true),
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
async function runAuthLogin(...args: string[]): Promise<{
|
|
207
|
-
exitCode: number
|
|
208
|
-
stdout: string
|
|
209
|
-
stderr: string
|
|
210
|
-
}> {
|
|
211
|
-
const proc = Bun.spawn({
|
|
212
|
-
cmd: ['bun', join(cliRoot, 'bin/astrale.ts'), 'auth', 'login', ...args],
|
|
213
|
-
env: { ...process.env, ASTRALE_HOME: tmp, TEST_CLIENT_SECRET: 'secret_123' },
|
|
214
|
-
stdout: 'pipe',
|
|
215
|
-
stderr: 'pipe',
|
|
216
|
-
})
|
|
217
|
-
const [stdout, stderr, exitCode] = await Promise.all([
|
|
218
|
-
new Response(proc.stdout).text(),
|
|
219
|
-
new Response(proc.stderr).text(),
|
|
220
|
-
proc.exited,
|
|
221
|
-
])
|
|
222
|
-
return { exitCode, stdout, stderr }
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
function unsignedJwt(payload: Record<string, unknown>): string {
|
|
226
|
-
return [base64url({ alg: 'none', typ: 'JWT' }), base64url(payload), ''].join('.')
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
function base64url(value: Record<string, unknown>): string {
|
|
230
|
-
return Buffer.from(JSON.stringify(value)).toString('base64url')
|
|
231
|
-
}
|