@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,101 +0,0 @@
|
|
|
1
|
-
import type { ClientSession } from '@astrale-os/sdk/client/session'
|
|
2
|
-
import type { CallableReference } from '@astrale-os/sdk/client/session'
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
callableAddress,
|
|
6
|
-
core,
|
|
7
|
-
defineSchema,
|
|
8
|
-
edgeClass,
|
|
9
|
-
method,
|
|
10
|
-
nodeClass,
|
|
11
|
-
property,
|
|
12
|
-
schema,
|
|
13
|
-
} from '@astrale-os/sdk/schema'
|
|
14
|
-
import { mock } from 'bun:test'
|
|
15
|
-
|
|
16
|
-
import type { AdminBinding } from '../binding'
|
|
17
|
-
|
|
18
|
-
const operation = () =>
|
|
19
|
-
method({
|
|
20
|
-
auth: 'authenticated',
|
|
21
|
-
input: { type: 'object', additionalProperties: true },
|
|
22
|
-
output: { type: 'object', additionalProperties: true },
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
const Domain = nodeClass({
|
|
26
|
-
properties: {
|
|
27
|
-
origin: property({ type: 'string' }, { required: true }),
|
|
28
|
-
name: property({ type: 'string' }, { required: true }),
|
|
29
|
-
discoveryUrl: property({ type: 'string' }, { required: true }),
|
|
30
|
-
description: property({ type: 'string' }),
|
|
31
|
-
createdAt: property({ type: 'string' }, { required: true }),
|
|
32
|
-
updatedAt: property({ type: 'string' }, { required: true }),
|
|
33
|
-
},
|
|
34
|
-
methods: { configureDefault: operation() },
|
|
35
|
-
})
|
|
36
|
-
const Fleet = nodeClass({
|
|
37
|
-
methods: {
|
|
38
|
-
publishDomain: operation(),
|
|
39
|
-
listInstances: operation(),
|
|
40
|
-
createInstance: operation(),
|
|
41
|
-
},
|
|
42
|
-
})
|
|
43
|
-
const Host = nodeClass({
|
|
44
|
-
properties: {
|
|
45
|
-
id: property({ type: 'string' }, { required: true }),
|
|
46
|
-
state: property({ type: 'string' }, { required: true }),
|
|
47
|
-
},
|
|
48
|
-
methods: { createInstance: operation() },
|
|
49
|
-
})
|
|
50
|
-
const Instance = nodeClass({
|
|
51
|
-
methods: {
|
|
52
|
-
status: operation(),
|
|
53
|
-
delete: operation(),
|
|
54
|
-
installDomain: operation(),
|
|
55
|
-
},
|
|
56
|
-
})
|
|
57
|
-
const fleet_installs_domain_by_default = edgeClass.directed({
|
|
58
|
-
source: { as: 'fleet', accepts: [Fleet], outgoing: '0..*' },
|
|
59
|
-
target: { as: 'domain', accepts: [Domain], incoming: '0..*' },
|
|
60
|
-
})
|
|
61
|
-
const fleet_reserves_admin_host = edgeClass.directed({
|
|
62
|
-
source: { as: 'fleet', accepts: [Fleet], outgoing: '0..1' },
|
|
63
|
-
target: { as: 'host', accepts: [Host], incoming: '0..1' },
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
export const AdminTestSchema = defineSchema('admin.astrale.ai', {
|
|
67
|
-
classes: {
|
|
68
|
-
Domain,
|
|
69
|
-
Fleet,
|
|
70
|
-
Host,
|
|
71
|
-
Instance,
|
|
72
|
-
fleet_installs_domain_by_default,
|
|
73
|
-
fleet_reserves_admin_host,
|
|
74
|
-
},
|
|
75
|
-
core: { nodes: { fleet: core.node(() => Fleet, {}) }, edges: [] },
|
|
76
|
-
})
|
|
77
|
-
|
|
78
|
-
export const AdminTestDomain = schema.resolve(AdminTestSchema)
|
|
79
|
-
|
|
80
|
-
export function adminBinding(): AdminBinding {
|
|
81
|
-
return { domain: AdminTestDomain, graph: {} } as unknown as AdminBinding
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function adminSession(
|
|
85
|
-
implementation?: (
|
|
86
|
-
method: { readonly owner: string; readonly name: string },
|
|
87
|
-
receiver: unknown,
|
|
88
|
-
input: unknown,
|
|
89
|
-
) => unknown,
|
|
90
|
-
) {
|
|
91
|
-
const invoke = mock(async (reference: CallableReference, input: unknown) => {
|
|
92
|
-
const address = callableAddress(reference.callable)
|
|
93
|
-
if (address.kind !== 'method') throw new Error('Expected an Admin Method.')
|
|
94
|
-
return implementation?.(
|
|
95
|
-
{ owner: address.owner.name, name: address.name },
|
|
96
|
-
reference.target,
|
|
97
|
-
input,
|
|
98
|
-
)
|
|
99
|
-
})
|
|
100
|
-
return { invoke, session: { invoke } as unknown as ClientSession }
|
|
101
|
-
}
|
package/src/admin/binding.ts
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import type { Input } from '@astrale-os/sdk/client'
|
|
2
|
-
import type { ClientSession } from '@astrale-os/sdk/client/session'
|
|
3
|
-
import type {
|
|
4
|
-
ResolvedClass,
|
|
5
|
-
ResolvedCoreDefinition,
|
|
6
|
-
ResolvedMethod,
|
|
7
|
-
ResolvedProperty,
|
|
8
|
-
} from '@astrale-os/sdk/schema'
|
|
9
|
-
import type { DomainBinding } from '@astrale-os/shell'
|
|
10
|
-
|
|
11
|
-
import { reference } from '@astrale-os/sdk/client/session'
|
|
12
|
-
import { Path } from '@astrale-os/sdk/graph/path'
|
|
13
|
-
import { bindDomain } from '@astrale-os/shell'
|
|
14
|
-
|
|
15
|
-
const ADMIN_ORIGIN = 'admin.astrale.ai'
|
|
16
|
-
|
|
17
|
-
export type AdminBinding = DomainBinding
|
|
18
|
-
|
|
19
|
-
/** Bind the exact Admin revision installed on this source Kernel. */
|
|
20
|
-
export async function bindAdmin(session: ClientSession): Promise<AdminBinding> {
|
|
21
|
-
const installed = await session.installation(ADMIN_ORIGIN)
|
|
22
|
-
return requireAdminBinding(await bindDomain(session, installed.bundle.root))
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** Admit an injected dynamic binding as the Admin Domain. */
|
|
26
|
-
export function requireAdminBinding(binding: AdminBinding): AdminBinding {
|
|
27
|
-
if (binding.domain.origin !== ADMIN_ORIGIN) {
|
|
28
|
-
throw new TypeError('Configured Admin target does not serve the Admin Domain.')
|
|
29
|
-
}
|
|
30
|
-
return binding
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/** Resolve one required Admin Class without rebuilding its schema contract. */
|
|
34
|
-
export function requireAdminClass(
|
|
35
|
-
binding: AdminBinding,
|
|
36
|
-
name: string,
|
|
37
|
-
kind: 'node',
|
|
38
|
-
): ResolvedClass<'node'>
|
|
39
|
-
export function requireAdminClass(
|
|
40
|
-
binding: AdminBinding,
|
|
41
|
-
name: string,
|
|
42
|
-
kind: 'edge',
|
|
43
|
-
): ResolvedClass<'edge'>
|
|
44
|
-
export function requireAdminClass(
|
|
45
|
-
binding: AdminBinding,
|
|
46
|
-
name: string,
|
|
47
|
-
kind: 'node' | 'edge',
|
|
48
|
-
): ResolvedClass<'node'> | ResolvedClass<'edge'> {
|
|
49
|
-
const selected = binding.domain.classes[name]
|
|
50
|
-
if (selected?.kind !== kind) throw new TypeError(`Admin ${name} is not a ${kind} Class.`)
|
|
51
|
-
return selected
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** Resolve one required Admin Core Node as its canonical projection Path. */
|
|
55
|
-
export function requireAdminCore(binding: AdminBinding, name: string): Path {
|
|
56
|
-
const selected = binding.domain.core.nodes[name] as ResolvedCoreDefinition | undefined
|
|
57
|
-
if (selected === undefined) throw new TypeError(`Admin has no Core Node ${name}.`)
|
|
58
|
-
return Path.project(selected.ref)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Resolve one effective Property by unambiguous member name. */
|
|
62
|
-
export function requireAdminProperty(
|
|
63
|
-
owner: ResolvedClass,
|
|
64
|
-
name: string,
|
|
65
|
-
): ResolvedProperty<unknown> {
|
|
66
|
-
const selected = [...owner.properties].find((property) => property.name === name)
|
|
67
|
-
if (selected === undefined) {
|
|
68
|
-
throw new TypeError(`Admin ${owner.ref.name}.${name} Property is absent.`)
|
|
69
|
-
}
|
|
70
|
-
return selected
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/** Invoke one resolved executable instance Method through Kernel Client. */
|
|
74
|
-
export async function invokeAdminMethod(
|
|
75
|
-
session: ClientSession,
|
|
76
|
-
binding: AdminBinding,
|
|
77
|
-
owner: ResolvedClass<'node'>,
|
|
78
|
-
name: string,
|
|
79
|
-
receiver: Path,
|
|
80
|
-
input: Input,
|
|
81
|
-
): Promise<unknown> {
|
|
82
|
-
const method = [...owner.methods].find((candidate) => candidate.name === name)
|
|
83
|
-
if (method === undefined || !isExecutableInstanceMethod(method)) {
|
|
84
|
-
throw new TypeError(`Admin ${owner.ref.name}.${name} is not an executable instance Method.`)
|
|
85
|
-
}
|
|
86
|
-
return session.invoke(reference(binding.domain, method)(receiver), input)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
type ExecutableInstanceMethod = ResolvedMethod<
|
|
90
|
-
unknown,
|
|
91
|
-
unknown,
|
|
92
|
-
false,
|
|
93
|
-
Exclude<ResolvedMethod['inheritance'], 'abstract'>
|
|
94
|
-
>
|
|
95
|
-
|
|
96
|
-
function isExecutableInstanceMethod(method: ResolvedMethod): method is ExecutableInstanceMethod {
|
|
97
|
-
return method.static === false && method.inheritance !== 'abstract'
|
|
98
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { ClientSession } from '@astrale-os/sdk/client/session'
|
|
2
|
-
import type { DomainBinding } from '@astrale-os/shell'
|
|
3
|
-
|
|
4
|
-
import type { AdminGraphApi } from '../../graph/.spec/api.js'
|
|
5
|
-
|
|
6
|
-
export interface DomainInfo {
|
|
7
|
-
readonly id: string
|
|
8
|
-
readonly origin: string
|
|
9
|
-
readonly name: string
|
|
10
|
-
readonly url?: string
|
|
11
|
-
readonly description?: string
|
|
12
|
-
readonly installByDefault?: boolean
|
|
13
|
-
readonly createdAt: string
|
|
14
|
-
readonly updatedAt: string
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface PublishDomainInput {
|
|
18
|
-
readonly origin: string
|
|
19
|
-
readonly name: string
|
|
20
|
-
readonly url: string
|
|
21
|
-
readonly description?: string
|
|
22
|
-
readonly installByDefault?: boolean
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface PublishDomainResult {
|
|
26
|
-
readonly entry: DomainInfo
|
|
27
|
-
readonly changed: boolean
|
|
28
|
-
readonly isNew: boolean
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export interface InstallDomainResult {
|
|
32
|
-
readonly name: string
|
|
33
|
-
readonly origin: string
|
|
34
|
-
readonly instanceId: string
|
|
35
|
-
readonly url: string
|
|
36
|
-
readonly ok: boolean
|
|
37
|
-
readonly error?: string | null
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface AdminCatalogContext {
|
|
41
|
-
readonly session: ClientSession
|
|
42
|
-
readonly graph: AdminGraphApi
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface AdminCatalogApi {
|
|
46
|
-
list(): Promise<DomainInfo[]>
|
|
47
|
-
require(identifier: string): Promise<DomainInfo>
|
|
48
|
-
publish(input: PublishDomainInput): Promise<PublishDomainResult>
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export class AdminDomainNotFoundError extends Error {
|
|
52
|
-
constructor(identifier: string)
|
|
53
|
-
readonly name: 'NotFoundError'
|
|
54
|
-
readonly identifier: string
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export interface AdminCatalogDependencies {
|
|
58
|
-
readonly bind?: (session: ClientSession) => Promise<DomainBinding>
|
|
59
|
-
readonly operationId?: (kind: 'publish' | 'configure-default') => string
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
export function connectAdminCatalog(
|
|
63
|
-
context: AdminCatalogContext,
|
|
64
|
-
dependencies?: AdminCatalogDependencies,
|
|
65
|
-
): Promise<AdminCatalogApi>
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
# CLI Admin catalog adapter
|
|
2
|
-
|
|
3
|
-
The adapter reads policy-visible `Domain` Nodes through bounded Graph pages and derives default
|
|
4
|
-
membership from the Fleet relation. Publication invokes `Fleet.publishDomain`; a requested default
|
|
5
|
-
change is a separate explicit `Domain.configureDefault` call. Unchanged publication input is a
|
|
6
|
-
no-op, and an omitted description preserves the current value.
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import type { Node } from '@astrale-os/sdk/graph/node'
|
|
2
|
-
import type { QueryAST } from '@astrale-os/sdk/query'
|
|
3
|
-
|
|
4
|
-
import { NodeId } from '@astrale-os/sdk/graph/node'
|
|
5
|
-
import { describe, expect, mock, test } from 'bun:test'
|
|
6
|
-
|
|
7
|
-
import type { AdminGraphApi } from '../../graph'
|
|
8
|
-
|
|
9
|
-
import { AdminTestDomain, adminBinding, adminSession } from '../../__tests__/fixture'
|
|
10
|
-
import { connectAdminCatalog } from '../client'
|
|
11
|
-
|
|
12
|
-
function domainNode(id: string, origin: string): Node {
|
|
13
|
-
return {
|
|
14
|
-
id: NodeId(id),
|
|
15
|
-
class: AdminTestDomain.classes.Domain.key,
|
|
16
|
-
props: AdminTestDomain.classes.Domain.properties.from({
|
|
17
|
-
origin,
|
|
18
|
-
name: origin.split('.')[0]!,
|
|
19
|
-
discoveryUrl: `https://${origin}`,
|
|
20
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
21
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
22
|
-
}),
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function fixture(input: {
|
|
27
|
-
domains?: readonly Node[]
|
|
28
|
-
defaults?: readonly Node[]
|
|
29
|
-
invoke?: (method: { owner: string; name: string }, receiver: unknown, value: unknown) => unknown
|
|
30
|
-
}) {
|
|
31
|
-
const calls: Array<{
|
|
32
|
-
method: { owner: string; name: string }
|
|
33
|
-
receiver: string
|
|
34
|
-
value: unknown
|
|
35
|
-
}> = []
|
|
36
|
-
const remote = adminSession((method, receiver, value) => {
|
|
37
|
-
calls.push({ method, receiver: String(receiver), value })
|
|
38
|
-
return input.invoke?.(method, receiver, value)
|
|
39
|
-
})
|
|
40
|
-
const binding = adminBinding()
|
|
41
|
-
const query = mock(async (_ast: QueryAST) => ({
|
|
42
|
-
result: {
|
|
43
|
-
kind: 'nodes' as const,
|
|
44
|
-
nodes: (input.domains ?? []).map((value) => ({ kind: 'value' as const, value })),
|
|
45
|
-
},
|
|
46
|
-
page: {},
|
|
47
|
-
}))
|
|
48
|
-
const defaultNodes = input.defaults ?? []
|
|
49
|
-
const neighbors = mock(async () => ({
|
|
50
|
-
nodes: defaultNodes,
|
|
51
|
-
first: defaultNodes[0] ?? null,
|
|
52
|
-
graph: { nodes: defaultNodes, edges: [] },
|
|
53
|
-
cursor: null,
|
|
54
|
-
collect: async () => ({ nodes: defaultNodes, cursor: null }),
|
|
55
|
-
}))
|
|
56
|
-
const graph = { query, neighbors } as unknown as AdminGraphApi
|
|
57
|
-
return {
|
|
58
|
-
invoke: remote.invoke,
|
|
59
|
-
calls,
|
|
60
|
-
connect: () =>
|
|
61
|
-
connectAdminCatalog(
|
|
62
|
-
{ session: remote.session, graph },
|
|
63
|
-
{
|
|
64
|
-
bind: async () => binding,
|
|
65
|
-
operationId: (kind) => `cli.domain.${kind}:test`,
|
|
66
|
-
},
|
|
67
|
-
),
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function summary(origin: string) {
|
|
72
|
-
return {
|
|
73
|
-
id: '@crm-domain',
|
|
74
|
-
origin,
|
|
75
|
-
name: 'crm',
|
|
76
|
-
discoveryUrl: `https://${origin}`,
|
|
77
|
-
createdAt: '2026-08-12T00:00:00.000Z',
|
|
78
|
-
updatedAt: '2026-08-12T00:00:00.000Z',
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
describe('V2 Admin Domain catalog adapter', () => {
|
|
83
|
-
test('lists Domain nodes through GraphApi and joins the Fleet default relation', async () => {
|
|
84
|
-
const crm = domainNode('crm-domain', 'crm.acme.dev')
|
|
85
|
-
const notes = domainNode('notes-domain', 'notes.acme.dev')
|
|
86
|
-
const api = await fixture({ domains: [crm, notes], defaults: [crm] }).connect()
|
|
87
|
-
|
|
88
|
-
await expect(api.list()).resolves.toEqual([
|
|
89
|
-
expect.objectContaining({
|
|
90
|
-
id: '@crm-domain',
|
|
91
|
-
origin: 'crm.acme.dev',
|
|
92
|
-
installByDefault: true,
|
|
93
|
-
}),
|
|
94
|
-
expect.objectContaining({ id: '@notes-domain', origin: 'notes.acme.dev' }),
|
|
95
|
-
])
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
test('publishes through Fleet then configures the Domain default explicitly', async () => {
|
|
99
|
-
const contract = fixture({ invoke: () => summary('crm.acme.dev') })
|
|
100
|
-
const api = await contract.connect()
|
|
101
|
-
|
|
102
|
-
await expect(
|
|
103
|
-
api.publish({
|
|
104
|
-
origin: 'crm.acme.dev',
|
|
105
|
-
name: 'crm',
|
|
106
|
-
url: 'https://crm.acme.dev',
|
|
107
|
-
installByDefault: true,
|
|
108
|
-
}),
|
|
109
|
-
).resolves.toMatchObject({ changed: true, isNew: true, entry: { installByDefault: true } })
|
|
110
|
-
expect(contract.calls).toEqual([
|
|
111
|
-
{
|
|
112
|
-
method: { owner: 'Fleet', name: 'publishDomain' },
|
|
113
|
-
receiver: '/:admin.astrale.ai:core.fleet::publishDomain',
|
|
114
|
-
value: {
|
|
115
|
-
operationId: 'cli.domain.publish:test',
|
|
116
|
-
origin: 'crm.acme.dev',
|
|
117
|
-
name: 'crm',
|
|
118
|
-
discoveryUrl: 'https://crm.acme.dev',
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
{
|
|
122
|
-
method: { owner: 'Domain', name: 'configureDefault' },
|
|
123
|
-
receiver: '@crm-domain::configureDefault',
|
|
124
|
-
value: {
|
|
125
|
-
operationId: 'cli.domain.configure-default:test',
|
|
126
|
-
enabled: true,
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
|
-
])
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
test('does not invoke a receiver when the catalog record is already current', async () => {
|
|
133
|
-
const crm = domainNode('crm-domain', 'crm.acme.dev')
|
|
134
|
-
const contract = fixture({ domains: [crm] })
|
|
135
|
-
const api = await contract.connect()
|
|
136
|
-
|
|
137
|
-
await expect(
|
|
138
|
-
api.publish({ origin: 'crm.acme.dev', name: 'crm', url: 'https://crm.acme.dev' }),
|
|
139
|
-
).resolves.toMatchObject({ changed: false, isNew: false })
|
|
140
|
-
expect(contract.invoke).not.toHaveBeenCalled()
|
|
141
|
-
})
|
|
142
|
-
})
|
|
@@ -1,218 +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
|
-
AdminDomainNotFoundError,
|
|
20
|
-
type DomainInfo,
|
|
21
|
-
type PublishDomainInput,
|
|
22
|
-
type PublishDomainResult,
|
|
23
|
-
} from './model'
|
|
24
|
-
|
|
25
|
-
const PAGE_SIZE = 256
|
|
26
|
-
const MAXIMUM_DOMAINS = 10_000
|
|
27
|
-
const MAXIMUM_PAGES = Math.ceil(MAXIMUM_DOMAINS / PAGE_SIZE) + 1
|
|
28
|
-
|
|
29
|
-
export interface AdminCatalogContext {
|
|
30
|
-
readonly session: ClientSession
|
|
31
|
-
readonly graph: AdminGraphApi
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export interface AdminCatalogApi {
|
|
35
|
-
list(): Promise<DomainInfo[]>
|
|
36
|
-
require(identifier: string): Promise<DomainInfo>
|
|
37
|
-
publish(input: PublishDomainInput): Promise<PublishDomainResult>
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface AdminCatalogDependencies {
|
|
41
|
-
readonly bind?: (session: ClientSession) => Promise<AdminBinding>
|
|
42
|
-
readonly operationId?: (kind: 'publish' | 'configure-default') => string
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** Bind the discovered Admin revision and expose its Domain catalog journey. */
|
|
46
|
-
export async function connectAdminCatalog(
|
|
47
|
-
context: AdminCatalogContext,
|
|
48
|
-
dependencies: AdminCatalogDependencies = {},
|
|
49
|
-
): Promise<AdminCatalogApi> {
|
|
50
|
-
const binding = requireAdminBinding(await (dependencies.bind ?? bindAdmin)(context.session))
|
|
51
|
-
const Domain = requireAdminClass(binding, 'Domain', 'node')
|
|
52
|
-
const Fleet = requireAdminClass(binding, 'Fleet', 'node')
|
|
53
|
-
const fleetInstallsByDefault = requireAdminClass(
|
|
54
|
-
binding,
|
|
55
|
-
'fleet_installs_domain_by_default',
|
|
56
|
-
'edge',
|
|
57
|
-
)
|
|
58
|
-
const fleet = requireAdminCore(binding, 'fleet')
|
|
59
|
-
const operationId = dependencies.operationId ?? defaultOperationId
|
|
60
|
-
|
|
61
|
-
const list = async (): Promise<DomainInfo[]> => {
|
|
62
|
-
const [nodes, defaultsPage] = await Promise.all([
|
|
63
|
-
readAllNodes(
|
|
64
|
-
context.graph,
|
|
65
|
-
Query.from({ nodes: [Domain] }).select({
|
|
66
|
-
kind: 'nodes',
|
|
67
|
-
projection: { kind: 'value' },
|
|
68
|
-
}),
|
|
69
|
-
{
|
|
70
|
-
label: 'Admin Domain catalog',
|
|
71
|
-
maximum: MAXIMUM_DOMAINS,
|
|
72
|
-
maximumPages: MAXIMUM_PAGES,
|
|
73
|
-
},
|
|
74
|
-
),
|
|
75
|
-
context.graph.neighbors(fleet, fleetInstallsByDefault, {
|
|
76
|
-
direction: 'outgoing',
|
|
77
|
-
page: { size: PAGE_SIZE },
|
|
78
|
-
}),
|
|
79
|
-
])
|
|
80
|
-
const defaults = await defaultsPage.collect({ maximumPages: MAXIMUM_PAGES })
|
|
81
|
-
if (defaults.cursor !== null)
|
|
82
|
-
throw new TypeError('Admin default Domain catalog exceeded its bound.')
|
|
83
|
-
const defaultIds = new Set(defaults.nodes.map((node) => String(node.id)))
|
|
84
|
-
return nodes.map((node) => domainFromNode(Domain, node, defaultIds.has(String(node.id))))
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const requireDomain = async (identifier: string): Promise<DomainInfo> => {
|
|
88
|
-
const found = (await list()).find(
|
|
89
|
-
(domain) =>
|
|
90
|
-
domain.origin === identifier ||
|
|
91
|
-
domain.url === identifier ||
|
|
92
|
-
domain.id === identifier ||
|
|
93
|
-
(domain.id.startsWith('@') && domain.id.slice(1) === identifier),
|
|
94
|
-
)
|
|
95
|
-
if (found === undefined) throw new AdminDomainNotFoundError(identifier)
|
|
96
|
-
return found
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
return Object.freeze({
|
|
100
|
-
list,
|
|
101
|
-
require: requireDomain,
|
|
102
|
-
async publish(input: PublishDomainInput): Promise<PublishDomainResult> {
|
|
103
|
-
const existing = (await list()).find((domain) => domain.origin === input.origin)
|
|
104
|
-
const description = input.description ?? existing?.description
|
|
105
|
-
const registryChanged =
|
|
106
|
-
existing === undefined ||
|
|
107
|
-
existing.name !== input.name ||
|
|
108
|
-
existing.url !== input.url ||
|
|
109
|
-
existing.description !== description
|
|
110
|
-
let entry = existing
|
|
111
|
-
if (registryChanged) {
|
|
112
|
-
entry = domainFromSummary(
|
|
113
|
-
await invokeAdminMethod(context.session, binding, Fleet, 'publishDomain', fleet, {
|
|
114
|
-
operationId: operationId('publish'),
|
|
115
|
-
origin: input.origin,
|
|
116
|
-
name: input.name,
|
|
117
|
-
discoveryUrl: input.url,
|
|
118
|
-
...(description === undefined ? {} : { description }),
|
|
119
|
-
}),
|
|
120
|
-
existing?.installByDefault === true,
|
|
121
|
-
)
|
|
122
|
-
}
|
|
123
|
-
if (entry === undefined) throw new TypeError('Admin Domain publication returned no entry.')
|
|
124
|
-
|
|
125
|
-
const defaultChanged =
|
|
126
|
-
input.installByDefault !== undefined &&
|
|
127
|
-
(entry.installByDefault ?? false) !== input.installByDefault
|
|
128
|
-
if (defaultChanged) {
|
|
129
|
-
entry = domainFromSummary(
|
|
130
|
-
await invokeAdminMethod(
|
|
131
|
-
context.session,
|
|
132
|
-
binding,
|
|
133
|
-
Domain,
|
|
134
|
-
'configureDefault',
|
|
135
|
-
Path.parse(entry.id),
|
|
136
|
-
{
|
|
137
|
-
operationId: operationId('configure-default'),
|
|
138
|
-
enabled: input.installByDefault,
|
|
139
|
-
},
|
|
140
|
-
),
|
|
141
|
-
input.installByDefault === true,
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
return Object.freeze({
|
|
145
|
-
entry,
|
|
146
|
-
changed: registryChanged || defaultChanged,
|
|
147
|
-
isNew: existing === undefined,
|
|
148
|
-
})
|
|
149
|
-
},
|
|
150
|
-
})
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
type DynamicDefinition = ResolvedClass<'node'>
|
|
154
|
-
|
|
155
|
-
function domainFromNode(
|
|
156
|
-
definition: DynamicDefinition,
|
|
157
|
-
node: Node,
|
|
158
|
-
installByDefault: boolean,
|
|
159
|
-
): DomainInfo {
|
|
160
|
-
return Object.freeze({
|
|
161
|
-
id: Path.id(node.id).raw,
|
|
162
|
-
origin: requiredProperty(definition, node, 'origin'),
|
|
163
|
-
name: requiredProperty(definition, node, 'name'),
|
|
164
|
-
url: requiredProperty(definition, node, 'discoveryUrl'),
|
|
165
|
-
...optionalProperty(definition, node, 'description'),
|
|
166
|
-
...(installByDefault ? { installByDefault: true } : {}),
|
|
167
|
-
createdAt: requiredProperty(definition, node, 'createdAt'),
|
|
168
|
-
updatedAt: requiredProperty(definition, node, 'updatedAt'),
|
|
169
|
-
})
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function domainFromSummary(input: unknown, installByDefault: boolean): DomainInfo {
|
|
173
|
-
const value = record(input, 'Admin Domain summary')
|
|
174
|
-
return Object.freeze({
|
|
175
|
-
id: requiredString(value.id, 'Admin Domain id'),
|
|
176
|
-
origin: requiredString(value.origin, 'Admin Domain origin'),
|
|
177
|
-
name: requiredString(value.name, 'Admin Domain name'),
|
|
178
|
-
url: requiredString(value.discoveryUrl, 'Admin Domain discovery URL'),
|
|
179
|
-
...(value.description === undefined
|
|
180
|
-
? {}
|
|
181
|
-
: { description: requiredString(value.description, 'Admin Domain description') }),
|
|
182
|
-
...(installByDefault ? { installByDefault: true } : {}),
|
|
183
|
-
createdAt: requiredString(value.createdAt, 'Admin Domain creation time'),
|
|
184
|
-
updatedAt: requiredString(value.updatedAt, 'Admin Domain update time'),
|
|
185
|
-
})
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
function requiredProperty(definition: DynamicDefinition, node: Node, name: string): string {
|
|
189
|
-
return requiredString(
|
|
190
|
-
node.props[requireAdminProperty(definition, name).key],
|
|
191
|
-
`Admin Domain.${name}`,
|
|
192
|
-
)
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
function optionalProperty(
|
|
196
|
-
definition: DynamicDefinition,
|
|
197
|
-
node: Node,
|
|
198
|
-
name: string,
|
|
199
|
-
): Readonly<Record<string, string>> {
|
|
200
|
-
const value = node.props[requireAdminProperty(definition, name).key]
|
|
201
|
-
return value === undefined ? {} : { [name]: requiredString(value, `Admin Domain.${name}`) }
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
function requiredString(input: unknown, label: string): string {
|
|
205
|
-
if (typeof input !== 'string' || input.length === 0) throw new TypeError(`${label} is invalid.`)
|
|
206
|
-
return input
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
function record(input: unknown, label: string): Readonly<Record<string, unknown>> {
|
|
210
|
-
if (typeof input !== 'object' || input === null || Array.isArray(input)) {
|
|
211
|
-
throw new TypeError(`${label} is invalid.`)
|
|
212
|
-
}
|
|
213
|
-
return input as Readonly<Record<string, unknown>>
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
function defaultOperationId(kind: 'publish' | 'configure-default'): string {
|
|
217
|
-
return `cli.domain.${kind}:${globalThis.crypto.randomUUID()}`
|
|
218
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export {
|
|
2
|
-
connectAdminCatalog,
|
|
3
|
-
type AdminCatalogApi,
|
|
4
|
-
type AdminCatalogContext,
|
|
5
|
-
type AdminCatalogDependencies,
|
|
6
|
-
} from './client'
|
|
7
|
-
export {
|
|
8
|
-
AdminDomainNotFoundError,
|
|
9
|
-
type DomainInfo,
|
|
10
|
-
type InstallDomainResult,
|
|
11
|
-
type PublishDomainInput,
|
|
12
|
-
type PublishDomainResult,
|
|
13
|
-
} from './model'
|