@astrale-os/cli 1.0.0-beta.9 → 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 -93344
- 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/binding.d.ts +0 -19
- package/dist/types/admin/instance/client.d.ts +0 -22
- package/dist/types/admin/instance/index.d.ts +0 -2
- package/dist/types/admin/instance/model.d.ts +0 -33
- package/dist/types/connect-core.d.ts +0 -22
- package/dist/types/connection/auth.d.ts +0 -39
- package/dist/types/connection/call.d.ts +0 -3
- package/dist/types/connection/command.d.ts +0 -27
- package/dist/types/connection/credential.d.ts +0 -14
- package/dist/types/connection/errors.d.ts +0 -1
- package/dist/types/connection/exchange.d.ts +0 -9
- package/dist/types/connection/failure/classify.d.ts +0 -2
- package/dist/types/connection/failure/index.d.ts +0 -5
- package/dist/types/connection/failure/model.d.ts +0 -25
- package/dist/types/connection/failure/render.d.ts +0 -3
- package/dist/types/connection/index.d.ts +0 -8
- package/dist/types/connection/reasons.d.ts +0 -37
- package/dist/types/connection/self.d.ts +0 -37
- package/dist/types/connection/session.d.ts +0 -31
- package/dist/types/connection/target.d.ts +0 -38
- 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-instance.d.ts +0 -17
- 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 -202
- 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/self.d.ts +0 -9
- 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 -166
- package/src/admin/instance/client.ts +0 -196
- package/src/admin/instance/index.ts +0 -15
- package/src/admin/instance/model.ts +0 -56
- package/src/admin/instance/tsconfig.json +0 -8
- package/src/commands/__tests__/admin-instance.test.ts +0 -91
- package/src/commands/__tests__/auth-login.test.ts +0 -231
- package/src/commands/__tests__/auth-token.test.ts +0 -223
- package/src/commands/__tests__/call-describe.test.ts +0 -80
- package/src/commands/__tests__/call.test.ts +0 -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-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 -136
- package/src/commands/domain/uninstall.ts +0 -128
- package/src/commands/get.ts +0 -69
- package/src/commands/identity/__tests__/register.test.ts +0 -93
- package/src/commands/identity/create.ts +0 -35
- package/src/commands/identity/delete.ts +0 -24
- package/src/commands/identity/export.ts +0 -46
- package/src/commands/identity/import.ts +0 -61
- package/src/commands/identity/list.ts +0 -56
- package/src/commands/identity/register.ts +0 -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 -61
- package/src/commands/instance/delete.ts +0 -69
- package/src/commands/instance/forget.ts +0 -26
- package/src/commands/instance/list.ts +0 -197
- package/src/commands/instance/status.ts +0 -38
- package/src/commands/instance/use.ts +0 -263
- 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 -138
- 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 -94
- package/src/connection/auth.ts +0 -249
- 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 -196
- 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 -138
- 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 -146
- package/src/lib/__tests__/instance-target.test.ts +0 -213
- package/src/lib/__tests__/instance.test.ts +0 -192
- package/src/lib/__tests__/local-status.test.ts +0 -202
- package/src/lib/__tests__/log-errors.test.ts +0 -64
- package/src/lib/__tests__/log.test.ts +0 -31
- package/src/lib/__tests__/meta.test.ts +0 -55
- package/src/lib/__tests__/output.test.ts +0 -162
- package/src/lib/__tests__/panel.test.ts +0 -40
- package/src/lib/__tests__/port.test.ts +0 -44
- package/src/lib/__tests__/prompt.test.ts +0 -25
- package/src/lib/__tests__/sdk-deps.test.ts +0 -68
- package/src/lib/__tests__/self.test.ts +0 -50
- package/src/lib/__tests__/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 -56
- 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 -191
- package/src/lib/concurrency.ts +0 -31
- package/src/lib/config.ts +0 -46
- package/src/lib/domain-publication.ts +0 -104
- package/src/lib/failure-debug.ts +0 -26
- package/src/lib/format.ts +0 -4
- package/src/lib/idp-session.ts +0 -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 -467
- 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 -139
- 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 -378
- 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 -256
- package/src/setup/__tests__/util.test.ts +0 -29
- package/src/setup/engine.ts +0 -83
- package/src/setup/render.ts +0 -107
- package/src/setup/steps/admin.ts +0 -93
- package/src/setup/steps/agent-browser.ts +0 -81
- package/src/setup/steps/auth.ts +0 -54
- package/src/setup/steps/domain.ts +0 -68
- package/src/setup/steps/index.ts +0 -18
- package/src/setup/steps/instance.ts +0 -206
- package/src/setup/steps/skills-bridge.ts +0 -70
- package/src/setup/steps/skills.ts +0 -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-ByzoDZWH.js +0 -1
- package/studio/client/dist/assets/elk-worker.min-C9JGDOE-.js +0 -6312
- package/studio/client/dist/assets/index-B0RCgUOT.js +0 -8
- 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-N8J8EKlB.js +0 -81
- 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,209 +0,0 @@
|
|
|
1
|
-
export type FunctionInputIssue = Readonly<{
|
|
2
|
-
code: string
|
|
3
|
-
path?: string
|
|
4
|
-
message: string
|
|
5
|
-
}>
|
|
6
|
-
|
|
7
|
-
export type QueryInputRepair =
|
|
8
|
-
| Readonly<{ phase: 'decode' | 'input'; path: string }>
|
|
9
|
-
| Readonly<{ phase: 'plan'; issue: string; path?: string }>
|
|
10
|
-
| Readonly<{
|
|
11
|
-
phase: 'limit'
|
|
12
|
-
limit: string
|
|
13
|
-
maximum: number
|
|
14
|
-
actual: number
|
|
15
|
-
path?: string
|
|
16
|
-
}>
|
|
17
|
-
|
|
18
|
-
export type SchemaUpgradeDetails =
|
|
19
|
-
| {
|
|
20
|
-
readonly origin?: string
|
|
21
|
-
readonly issue?: undefined
|
|
22
|
-
}
|
|
23
|
-
| {
|
|
24
|
-
readonly origin: string
|
|
25
|
-
readonly issue: 'issuer-changed'
|
|
26
|
-
readonly installedIssuer: string
|
|
27
|
-
readonly replacementIssuer: string
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const JSON_POINTER = /^(?:\/(?:[^~/]|~[01])*)*$/u
|
|
31
|
-
const MAXIMUM_FUNCTION_ISSUES = 32
|
|
32
|
-
const MAXIMUM_FUNCTION_ISSUE_MESSAGE_LENGTH = 512
|
|
33
|
-
|
|
34
|
-
export function reasonCode(reason: unknown): string | undefined {
|
|
35
|
-
if (!record(reason) || typeof reason.code !== 'string') return undefined
|
|
36
|
-
return stableCode(reason.code) ? reason.code : undefined
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** Admit only bounded caller-safe Function input issues established by the Kernel. */
|
|
40
|
-
export function functionInputIssues(reason: unknown): readonly FunctionInputIssue[] {
|
|
41
|
-
if (!reasonWithCode(reason, 'FUNCTION_INPUT_INVALID')) return Object.freeze([])
|
|
42
|
-
const issues = reason.details.issues
|
|
43
|
-
if (!Array.isArray(issues)) return Object.freeze([])
|
|
44
|
-
return Object.freeze(
|
|
45
|
-
issues.slice(0, MAXIMUM_FUNCTION_ISSUES).flatMap((candidate): FunctionInputIssue[] => {
|
|
46
|
-
if (
|
|
47
|
-
!record(candidate) ||
|
|
48
|
-
typeof candidate.code !== 'string' ||
|
|
49
|
-
!stableCode(candidate.code) ||
|
|
50
|
-
typeof candidate.message !== 'string' ||
|
|
51
|
-
candidate.message.length === 0 ||
|
|
52
|
-
candidate.message.length > MAXIMUM_FUNCTION_ISSUE_MESSAGE_LENGTH ||
|
|
53
|
-
candidate.message.normalize('NFC') !== candidate.message ||
|
|
54
|
-
containsControl(candidate.message) ||
|
|
55
|
-
(candidate.path !== undefined && !coordinate(candidate.path))
|
|
56
|
-
) {
|
|
57
|
-
return []
|
|
58
|
-
}
|
|
59
|
-
return [
|
|
60
|
-
Object.freeze({
|
|
61
|
-
code: candidate.code,
|
|
62
|
-
...(candidate.path === undefined ? {} : { path: candidate.path }),
|
|
63
|
-
message: candidate.message,
|
|
64
|
-
}),
|
|
65
|
-
]
|
|
66
|
-
}),
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/** Admit only public Query-input repair variants; unknown details remain machine-only. */
|
|
71
|
-
export function queryInputRepair(reason: unknown): QueryInputRepair | undefined {
|
|
72
|
-
if (!reasonWithCode(reason, 'QUERY_INPUT_INVALID')) return undefined
|
|
73
|
-
const details = reason.details
|
|
74
|
-
if (details.phase === 'decode' || details.phase === 'input') {
|
|
75
|
-
if (!exact(details, ['phase', 'path']) || !coordinate(details.path)) return undefined
|
|
76
|
-
return Object.freeze({ phase: details.phase, path: details.path })
|
|
77
|
-
}
|
|
78
|
-
if (details.phase === 'plan') {
|
|
79
|
-
const fields = details.path === undefined ? ['phase', 'issue'] : ['phase', 'issue', 'path']
|
|
80
|
-
if (
|
|
81
|
-
!exact(details, fields) ||
|
|
82
|
-
typeof details.issue !== 'string' ||
|
|
83
|
-
!stableCode(details.issue) ||
|
|
84
|
-
(details.path !== undefined && !coordinate(details.path))
|
|
85
|
-
) {
|
|
86
|
-
return undefined
|
|
87
|
-
}
|
|
88
|
-
return Object.freeze({
|
|
89
|
-
phase: 'plan',
|
|
90
|
-
issue: details.issue,
|
|
91
|
-
...(details.path === undefined ? {} : { path: details.path }),
|
|
92
|
-
})
|
|
93
|
-
}
|
|
94
|
-
if (details.phase !== 'limit') return undefined
|
|
95
|
-
const fields =
|
|
96
|
-
details.path === undefined
|
|
97
|
-
? ['phase', 'limit', 'maximum', 'actual']
|
|
98
|
-
: ['phase', 'limit', 'maximum', 'actual', 'path']
|
|
99
|
-
if (
|
|
100
|
-
!exact(details, fields) ||
|
|
101
|
-
typeof details.limit !== 'string' ||
|
|
102
|
-
!Number.isSafeInteger(details.maximum) ||
|
|
103
|
-
(details.maximum as number) < 0 ||
|
|
104
|
-
!Number.isSafeInteger(details.actual) ||
|
|
105
|
-
(details.actual as number) <= (details.maximum as number) ||
|
|
106
|
-
(details.path !== undefined && !coordinate(details.path))
|
|
107
|
-
) {
|
|
108
|
-
return undefined
|
|
109
|
-
}
|
|
110
|
-
return Object.freeze({
|
|
111
|
-
phase: 'limit',
|
|
112
|
-
limit: details.limit,
|
|
113
|
-
maximum: details.maximum as number,
|
|
114
|
-
actual: details.actual as number,
|
|
115
|
-
...(details.path === undefined ? {} : { path: details.path }),
|
|
116
|
-
})
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/** Decode bounded recovery guidance while preserving the admitted reason itself elsewhere. */
|
|
120
|
-
export function schemaUpgradeDetails(reason: unknown): SchemaUpgradeDetails | undefined {
|
|
121
|
-
if (!record(reason) || reason.code !== 'SCHEMA_UPGRADE_INCOMPATIBLE') return undefined
|
|
122
|
-
const details = record(reason.details) ? reason.details : {}
|
|
123
|
-
const origin = typeof details.origin === 'string' ? details.origin : undefined
|
|
124
|
-
if (
|
|
125
|
-
details.issue === 'issuer-changed' &&
|
|
126
|
-
origin !== undefined &&
|
|
127
|
-
typeof details.installedIssuer === 'string' &&
|
|
128
|
-
typeof details.replacementIssuer === 'string'
|
|
129
|
-
) {
|
|
130
|
-
return {
|
|
131
|
-
origin,
|
|
132
|
-
issue: details.issue,
|
|
133
|
-
installedIssuer: details.installedIssuer,
|
|
134
|
-
replacementIssuer: details.replacementIssuer,
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
return origin === undefined ? {} : { origin }
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export function schemaUpgradeHint(details: SchemaUpgradeDetails): string {
|
|
141
|
-
const target = details.origin ?? '<origin>'
|
|
142
|
-
const explanation =
|
|
143
|
-
details.issue === 'issuer-changed'
|
|
144
|
-
? 'A replacement cannot change an installed Domain issuer.'
|
|
145
|
-
: 'The replacement changes an immutable part of the installed Domain.'
|
|
146
|
-
return (
|
|
147
|
-
`${explanation} If this change is intentional, first run ` +
|
|
148
|
-
`\`astrale domain uninstall ${target}\`, then install it again. ` +
|
|
149
|
-
'The Kernel refuses uninstall while dependents or business data remain; uninstall never deletes business data.'
|
|
150
|
-
)
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
export function schemaDataRemovalHint(reason: unknown): string | undefined {
|
|
154
|
-
if (!reasonWithCode(reason, 'DATA_MIGRATION_REQUIRED')) return undefined
|
|
155
|
-
const requirements = reason.details.requirements
|
|
156
|
-
if (
|
|
157
|
-
!Array.isArray(requirements) ||
|
|
158
|
-
requirements.length === 0 ||
|
|
159
|
-
!requirements.every(
|
|
160
|
-
(item) =>
|
|
161
|
-
record(item) && item.operation === 'remove-facts' && item.reason === 'destructive-change',
|
|
162
|
-
)
|
|
163
|
-
) {
|
|
164
|
-
return undefined
|
|
165
|
-
}
|
|
166
|
-
return 'Delete this data explicitly, then retry. No data was deleted.'
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function reasonWithCode(
|
|
170
|
-
input: unknown,
|
|
171
|
-
code: string,
|
|
172
|
-
): input is Readonly<{ code: string; details: Readonly<Record<string, unknown>> }> {
|
|
173
|
-
return (
|
|
174
|
-
record(input) &&
|
|
175
|
-
exact(input, ['code', 'details']) &&
|
|
176
|
-
input.code === code &&
|
|
177
|
-
record(input.details)
|
|
178
|
-
)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
function coordinate(input: unknown): input is string {
|
|
182
|
-
return (
|
|
183
|
-
typeof input === 'string' &&
|
|
184
|
-
input.length <= 1_024 &&
|
|
185
|
-
input.normalize('NFC') === input &&
|
|
186
|
-
JSON_POINTER.test(input)
|
|
187
|
-
)
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
function stableCode(input: string): boolean {
|
|
191
|
-
return /^[A-Z][A-Z0-9_]{0,127}$/u.test(input) && input.normalize('NFC') === input
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
function containsControl(input: string): boolean {
|
|
195
|
-
for (const character of input) {
|
|
196
|
-
const point = character.codePointAt(0)!
|
|
197
|
-
if (point <= 0x1f || point === 0x7f) return true
|
|
198
|
-
}
|
|
199
|
-
return false
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
function record(input: unknown): input is Readonly<Record<string, unknown>> {
|
|
203
|
-
return input !== null && typeof input === 'object' && !Array.isArray(input)
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
function exact(input: Readonly<Record<string, unknown>>, fields: readonly string[]): boolean {
|
|
207
|
-
const actual = Object.keys(input)
|
|
208
|
-
return actual.length === fields.length && actual.every((field) => fields.includes(field))
|
|
209
|
-
}
|
package/src/connection/self.ts
DELETED
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
import { NodeUnavailableError } from '@astrale-os/sdk/client'
|
|
2
|
-
|
|
3
|
-
import type { ConnectionContext } from './session'
|
|
4
|
-
|
|
5
|
-
import { AstraleError } from '../errors'
|
|
6
|
-
import { containsSelfRef, expandSelfReferences } from '../lib/self'
|
|
7
|
-
|
|
8
|
-
/** Metadata attached to errors after an authenticated caller-authored @self expansion. */
|
|
9
|
-
export interface SelfExpansionMeta {
|
|
10
|
-
readonly original: string
|
|
11
|
-
readonly expanded: string
|
|
12
|
-
readonly selfId: string
|
|
13
|
-
readonly slug?: string
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Run `action`; if it throws NodeUnavailableError, retain the authenticated
|
|
18
|
-
* expansion for precise diagnostics. The error is re-thrown either way.
|
|
19
|
-
*/
|
|
20
|
-
export async function withSelfHint<T>(
|
|
21
|
-
action: () => Promise<T>,
|
|
22
|
-
meta: SelfExpansionMeta | undefined,
|
|
23
|
-
): Promise<T> {
|
|
24
|
-
if (!meta) return action()
|
|
25
|
-
try {
|
|
26
|
-
return await action()
|
|
27
|
-
} catch (err) {
|
|
28
|
-
if (err instanceof NodeUnavailableError) {
|
|
29
|
-
;(err as Error & { expandedFromSelf?: SelfExpansionMeta }).expandedFromSelf = meta
|
|
30
|
-
}
|
|
31
|
-
throw err
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
type AuthenticatedSelf = {
|
|
36
|
-
readonly id?: unknown
|
|
37
|
-
readonly slug?: string
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export type ResolveSelfIdDependencies = {
|
|
41
|
-
readonly whoami?: (context: ConnectionContext) => Promise<AuthenticatedSelf>
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** Resolve @self only from the effective principal authenticated by the selected Kernel. */
|
|
45
|
-
export async function resolveSelfIdAuthenticated(
|
|
46
|
-
context: ConnectionContext,
|
|
47
|
-
dependencies: ResolveSelfIdDependencies = {},
|
|
48
|
-
): Promise<{ readonly id: string; readonly slug?: string }> {
|
|
49
|
-
const resolved = await (dependencies.whoami ?? whoamiSelfId)(context)
|
|
50
|
-
if (typeof resolved.id !== 'string' || resolved.id.trim().length === 0) {
|
|
51
|
-
throw new AstraleError(
|
|
52
|
-
'SELF_RESOLUTION_FAILED',
|
|
53
|
-
'`@self` could not be resolved: authenticated Identity.whoami returned no NodeId.',
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
return resolved.slug === undefined
|
|
57
|
-
? { id: resolved.id }
|
|
58
|
-
: { id: resolved.id, slug: resolved.slug }
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async function whoamiSelfId({ auth, target }: ConnectionContext): Promise<AuthenticatedSelf> {
|
|
62
|
-
return {
|
|
63
|
-
...(await auth.whoami()),
|
|
64
|
-
...(target.slug === undefined ? {} : { slug: target.slug }),
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Expand @self in path-like commands and return metadata for NotFound diagnostics. */
|
|
69
|
-
export async function expandSelfInPath(
|
|
70
|
-
path: string,
|
|
71
|
-
context: ConnectionContext,
|
|
72
|
-
): Promise<{ readonly path: string; readonly meta?: SelfExpansionMeta }> {
|
|
73
|
-
const expanded = await expandSelfValues(path, [], context)
|
|
74
|
-
return expanded.meta === undefined
|
|
75
|
-
? { path: expanded.path }
|
|
76
|
-
: { path: expanded.path, meta: expanded.meta }
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** Expand @self once across one Call path and its CLI-authored string parameters. */
|
|
80
|
-
export async function expandSelfInCall(
|
|
81
|
-
path: string,
|
|
82
|
-
parameters: Readonly<Record<string, unknown>>,
|
|
83
|
-
context: ConnectionContext,
|
|
84
|
-
): Promise<{
|
|
85
|
-
readonly path: string
|
|
86
|
-
readonly parameters: Readonly<Record<string, unknown>>
|
|
87
|
-
readonly meta?: SelfExpansionMeta
|
|
88
|
-
}> {
|
|
89
|
-
const values = Object.values(parameters).filter(
|
|
90
|
-
(value): value is string => typeof value === 'string',
|
|
91
|
-
)
|
|
92
|
-
const expanded = await expandSelfValues(path, values, context)
|
|
93
|
-
if (expanded.parameters === values) {
|
|
94
|
-
return expanded.meta === undefined
|
|
95
|
-
? { path: expanded.path, parameters }
|
|
96
|
-
: { path: expanded.path, parameters, meta: expanded.meta }
|
|
97
|
-
}
|
|
98
|
-
let index = 0
|
|
99
|
-
const entries = Object.entries(parameters).map(([key, value]) => [
|
|
100
|
-
key,
|
|
101
|
-
typeof value === 'string' ? expanded.parameters[index++] : value,
|
|
102
|
-
])
|
|
103
|
-
const resolved = Object.freeze(Object.fromEntries(entries))
|
|
104
|
-
return expanded.meta === undefined
|
|
105
|
-
? { path: expanded.path, parameters: resolved }
|
|
106
|
-
: { path: expanded.path, parameters: resolved, meta: expanded.meta }
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
async function expandSelfValues(
|
|
110
|
-
path: string,
|
|
111
|
-
parameters: readonly string[],
|
|
112
|
-
context: ConnectionContext,
|
|
113
|
-
): Promise<{
|
|
114
|
-
readonly path: string
|
|
115
|
-
readonly parameters: readonly string[]
|
|
116
|
-
readonly meta?: SelfExpansionMeta
|
|
117
|
-
}> {
|
|
118
|
-
if (!containsSelfRef(path) && !parameters.some(containsSelfRef)) {
|
|
119
|
-
return { path, parameters }
|
|
120
|
-
}
|
|
121
|
-
const self = await resolveSelfIdAuthenticated(context)
|
|
122
|
-
const expandedPath = expandSelfReferences(path, self.id)
|
|
123
|
-
const expandedParameters = parameters.map((parameter) => expandSelfReferences(parameter, self.id))
|
|
124
|
-
const changed =
|
|
125
|
-
expandedPath !== path ||
|
|
126
|
-
expandedParameters.some((parameter, index) => parameter !== parameters[index])
|
|
127
|
-
if (!changed) return { path, parameters }
|
|
128
|
-
return {
|
|
129
|
-
path: expandedPath,
|
|
130
|
-
parameters: expandedParameters,
|
|
131
|
-
meta: {
|
|
132
|
-
original: path,
|
|
133
|
-
expanded: expandedPath,
|
|
134
|
-
selfId: self.id,
|
|
135
|
-
...(self.slug === undefined ? {} : { slug: self.slug }),
|
|
136
|
-
},
|
|
137
|
-
}
|
|
138
|
-
}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import type { AuthApi } from '@astrale-os/sdk/auth'
|
|
2
|
-
import type { GraphApi } from '@astrale-os/sdk/client'
|
|
3
|
-
import type { ClientSessionOptions, SessionAuth } from '@astrale-os/sdk/client/session'
|
|
4
|
-
|
|
5
|
-
import { createAuth } from '@astrale-os/sdk/auth'
|
|
6
|
-
import { call } from '@astrale-os/sdk/client'
|
|
7
|
-
import { createGraph } from '@astrale-os/sdk/client'
|
|
8
|
-
import { ClientSession } from '@astrale-os/sdk/client/session'
|
|
9
|
-
|
|
10
|
-
import type { AstraleConfig } from '../lib/config'
|
|
11
|
-
import type { AdminConnectionOptions, ConnectionOptions, ConnectionTarget } from './target'
|
|
12
|
-
|
|
13
|
-
import {
|
|
14
|
-
AdminInstanceNotFoundError,
|
|
15
|
-
connectAdminInstances,
|
|
16
|
-
findOwnedInstance,
|
|
17
|
-
type InstanceInfo,
|
|
18
|
-
} from '../admin/instance'
|
|
19
|
-
import { AstraleError } from '../errors'
|
|
20
|
-
import { fetchWithCaFile } from '../lib/ca-fetch'
|
|
21
|
-
import { readConfig } from '../lib/config'
|
|
22
|
-
import { log } from '../lib/log'
|
|
23
|
-
import { isMachine } from '../lib/output'
|
|
24
|
-
import { bindCredentialIdentity } from './auth'
|
|
25
|
-
import { createCliCredential, validateCredentialSelection } from './credential'
|
|
26
|
-
import { resolveAdminConnectionTarget, resolveConnectionTarget } from './target'
|
|
27
|
-
|
|
28
|
-
const DEFAULT_TIMEOUT_MS = 30_000
|
|
29
|
-
const MAXIMUM_ROUTE_AGE_MS = 5 * 60_000
|
|
30
|
-
|
|
31
|
-
function warnMissingExplicitTarget(options: ConnectionOptions, target: ConnectionTarget): void {
|
|
32
|
-
if (options.instance !== undefined || options.url !== undefined) return
|
|
33
|
-
if (!isMachine(options)) return
|
|
34
|
-
log.warn(`No -i/--url; using ${target.slug ?? target.url}`)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface ConnectionContext {
|
|
38
|
-
readonly session: ClientSession
|
|
39
|
-
readonly graph: GraphApi
|
|
40
|
-
readonly auth: AuthApi
|
|
41
|
-
readonly target: ConnectionTarget
|
|
42
|
-
/** Local identity label selected for this session; absent for raw credentials or anonymous use. */
|
|
43
|
-
readonly identity?: string
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
interface OwnedConnection {
|
|
47
|
-
readonly context: ConnectionContext
|
|
48
|
-
close(): void
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export type ConnectionFactory = (
|
|
52
|
-
target: ConnectionTarget,
|
|
53
|
-
timeoutMs: number,
|
|
54
|
-
options: ConnectionOptions,
|
|
55
|
-
config: AstraleConfig,
|
|
56
|
-
) => OwnedConnection
|
|
57
|
-
|
|
58
|
-
/** Resolve one ordinary target, run a command action, then close terminally. */
|
|
59
|
-
export async function withClientSession<Value>(
|
|
60
|
-
options: ConnectionOptions,
|
|
61
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
62
|
-
): Promise<Value> {
|
|
63
|
-
validateCredentialSelection(options)
|
|
64
|
-
const timeoutMs = resolveTimeoutMs(options.timeout)
|
|
65
|
-
const config = await readConfig()
|
|
66
|
-
const target = await resolveConnectionTarget(options, config, {
|
|
67
|
-
managed: (slug) => lookupManagedInstance(slug, options),
|
|
68
|
-
})
|
|
69
|
-
options = await bindCredentialIdentity(options, target)
|
|
70
|
-
warnMissingExplicitTarget(options, target)
|
|
71
|
-
return runResolvedClientSession(target, timeoutMs, options, config, action, openConnection)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/** Resolve the configured Admin Domain target under the same terminal lifecycle. */
|
|
75
|
-
export async function withAdminClientSession<Value>(
|
|
76
|
-
options: AdminConnectionOptions,
|
|
77
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
78
|
-
): Promise<Value> {
|
|
79
|
-
validateCredentialSelection(options)
|
|
80
|
-
const timeoutMs = resolveTimeoutMs(options.timeout)
|
|
81
|
-
const config = await readConfig()
|
|
82
|
-
const target = await resolveAdminConnectionTarget(options, config)
|
|
83
|
-
options = await bindCredentialIdentity(options, target)
|
|
84
|
-
return runResolvedClientSession(target, timeoutMs, options, config, action, openConnection)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** Owner-private seam used to prove validation order and cleanup without network I/O. */
|
|
88
|
-
export async function withResolvedClientSession<Value>(
|
|
89
|
-
target: ConnectionTarget,
|
|
90
|
-
options: ConnectionOptions,
|
|
91
|
-
config: AstraleConfig,
|
|
92
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
93
|
-
open: ConnectionFactory = openConnection,
|
|
94
|
-
): Promise<Value> {
|
|
95
|
-
validateCredentialSelection(options)
|
|
96
|
-
const timeoutMs = resolveTimeoutMs(options.timeout)
|
|
97
|
-
return runResolvedClientSession(target, timeoutMs, options, config, action, open)
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
async function runResolvedClientSession<Value>(
|
|
101
|
-
target: ConnectionTarget,
|
|
102
|
-
timeoutMs: number,
|
|
103
|
-
options: ConnectionOptions,
|
|
104
|
-
config: AstraleConfig,
|
|
105
|
-
action: (context: ConnectionContext) => Promise<Value>,
|
|
106
|
-
open: ConnectionFactory,
|
|
107
|
-
): Promise<Value> {
|
|
108
|
-
const connection = open(target, timeoutMs, options, config)
|
|
109
|
-
try {
|
|
110
|
-
return await action(connection.context)
|
|
111
|
-
} catch (error) {
|
|
112
|
-
if (error instanceof Error) (error as Error & { url?: string }).url = target.url
|
|
113
|
-
throw error
|
|
114
|
-
} finally {
|
|
115
|
-
connection.close()
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function resolveTimeoutMs(raw: string | undefined): number {
|
|
120
|
-
if (raw === undefined) return DEFAULT_TIMEOUT_MS
|
|
121
|
-
if (!/^\d+$/.test(raw)) {
|
|
122
|
-
throw new AstraleError(
|
|
123
|
-
'INVALID_FLAG',
|
|
124
|
-
`Invalid --timeout value "${raw}" — expected a positive integer (milliseconds)`,
|
|
125
|
-
)
|
|
126
|
-
}
|
|
127
|
-
const value = Number.parseInt(raw, 10)
|
|
128
|
-
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
129
|
-
throw new AstraleError(
|
|
130
|
-
'INVALID_FLAG',
|
|
131
|
-
`Invalid --timeout value "${raw}" — must be a positive integer`,
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
|
-
return value
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
function openConnection(
|
|
138
|
-
target: ConnectionTarget,
|
|
139
|
-
timeoutMs: number,
|
|
140
|
-
options: ConnectionOptions,
|
|
141
|
-
config: AstraleConfig,
|
|
142
|
-
): OwnedConnection {
|
|
143
|
-
const fetch = target.caFile === undefined ? globalThis.fetch : fetchWithCaFile(target.caFile)
|
|
144
|
-
const auth = createCliCredential(target, options, config, fetch, timeoutMs)
|
|
145
|
-
const session = new ClientSession(createClientSessionOptions(target, fetch, auth, timeoutMs))
|
|
146
|
-
const graph = createGraph((call, request) => session.call(call, request))
|
|
147
|
-
const authApi = createAuth((path, input, request) => session.call(call(path, input), request))
|
|
148
|
-
return {
|
|
149
|
-
context: Object.freeze({
|
|
150
|
-
session,
|
|
151
|
-
graph,
|
|
152
|
-
auth: authApi,
|
|
153
|
-
target,
|
|
154
|
-
...(options.as === undefined ? {} : { identity: options.as }),
|
|
155
|
-
}),
|
|
156
|
-
close() {
|
|
157
|
-
session.close()
|
|
158
|
-
},
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/** Owner-private construction seam proving that transport and source identity stay distinct. */
|
|
163
|
-
export function createClientSessionOptions(
|
|
164
|
-
target: ConnectionTarget,
|
|
165
|
-
fetch: NonNullable<ClientSessionOptions['fetch']>,
|
|
166
|
-
auth: SessionAuth | undefined,
|
|
167
|
-
timeoutMs: number,
|
|
168
|
-
): ClientSessionOptions {
|
|
169
|
-
return {
|
|
170
|
-
kernel: target.kernelIssuer,
|
|
171
|
-
fetch,
|
|
172
|
-
...(auth === undefined ? {} : { auth }),
|
|
173
|
-
policy: {
|
|
174
|
-
maximumRouteAgeMs: MAXIMUM_ROUTE_AGE_MS,
|
|
175
|
-
...(new URL(target.url).protocol === 'http:' ? { allowInsecureHttp: true } : {}),
|
|
176
|
-
},
|
|
177
|
-
envelopeTransport: 'http',
|
|
178
|
-
timeoutMs,
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
export async function lookupManagedInstance(
|
|
183
|
-
slug: string,
|
|
184
|
-
options: ConnectionOptions,
|
|
185
|
-
openAdmin: typeof withAdminClientSession = withAdminClientSession,
|
|
186
|
-
connect: typeof connectAdminInstances = connectAdminInstances,
|
|
187
|
-
): Promise<InstanceInfo> {
|
|
188
|
-
return openAdmin(
|
|
189
|
-
Object.freeze(options.timeout === undefined ? {} : { timeout: options.timeout }),
|
|
190
|
-
async (context) => {
|
|
191
|
-
const found = findOwnedInstance(await (await connect(context)).list(), slug)
|
|
192
|
-
if (found === undefined) throw new AdminInstanceNotFoundError(slug)
|
|
193
|
-
return found
|
|
194
|
-
},
|
|
195
|
-
)
|
|
196
|
-
}
|
package/src/connection/target.ts
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import type { IssuerId } from '@astrale-os/sdk/auth'
|
|
2
|
-
|
|
3
|
-
import { issuer } from '@astrale-os/sdk/auth'
|
|
4
|
-
|
|
5
|
-
import type { InstanceInfo } from '../lib/admin-instance'
|
|
6
|
-
import type { AdminTargetCommandOpts } from '../lib/admin-target'
|
|
7
|
-
import type { AstraleConfig } from '../lib/config'
|
|
8
|
-
import type { InstanceStore } from '../lib/instance'
|
|
9
|
-
import type { ResolvedInstanceTarget } from '../lib/instance-target'
|
|
10
|
-
|
|
11
|
-
import { resolveInstanceTarget } from '../lib/instance-target'
|
|
12
|
-
|
|
13
|
-
export interface ConnectionOptions {
|
|
14
|
-
readonly url?: string
|
|
15
|
-
readonly instance?: string
|
|
16
|
-
readonly timeout?: string
|
|
17
|
-
readonly as?: string
|
|
18
|
-
readonly creds?: string
|
|
19
|
-
readonly anonymous?: boolean
|
|
20
|
-
readonly ci?: boolean
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export interface AdminConnectionOptions extends ConnectionOptions {
|
|
24
|
-
readonly admin?: string
|
|
25
|
-
readonly adminUrl?: string
|
|
26
|
-
readonly domainIssuer?: string
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface ConnectionTarget {
|
|
30
|
-
readonly url: string
|
|
31
|
-
readonly kernelIssuer: IssuerId
|
|
32
|
-
readonly domainIssuer?: IssuerId
|
|
33
|
-
readonly slug?: string
|
|
34
|
-
readonly defaultIdentity?: string
|
|
35
|
-
readonly caFile?: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface TargetDependencies {
|
|
39
|
-
readonly instances?: InstanceStore
|
|
40
|
-
readonly managed?: (slug: string) => Promise<InstanceInfo>
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Stable local identity-registration key for the exact selected source Kernel. */
|
|
44
|
-
export function registrationKeyForTarget(target: ConnectionTarget): string {
|
|
45
|
-
return target.slug ?? target.url
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Resolve the existing URL / instance / active precedence into one exact source Kernel. */
|
|
49
|
-
export async function resolveConnectionTarget(
|
|
50
|
-
options: ConnectionOptions,
|
|
51
|
-
config: AstraleConfig,
|
|
52
|
-
dependencies: TargetDependencies = {},
|
|
53
|
-
): Promise<ConnectionTarget> {
|
|
54
|
-
const request =
|
|
55
|
-
options.url !== undefined && options.instance === undefined
|
|
56
|
-
? ({ source: 'url', url: options.url } as const)
|
|
57
|
-
: options.instance !== undefined
|
|
58
|
-
? ({ source: 'name', name: options.instance } as const)
|
|
59
|
-
: ({ source: 'active' } as const)
|
|
60
|
-
const resolved = await resolveInstanceTarget(request, {
|
|
61
|
-
config,
|
|
62
|
-
...(dependencies.instances === undefined ? {} : { instances: dependencies.instances }),
|
|
63
|
-
admin: {},
|
|
64
|
-
...(dependencies.managed === undefined ? {} : { managed: dependencies.managed }),
|
|
65
|
-
})
|
|
66
|
-
return connectionTarget(resolved, options.url)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/** Resolve the configured Admin Domain target without entering managed-instance discovery. */
|
|
70
|
-
export async function resolveAdminConnectionTarget(
|
|
71
|
-
options: AdminConnectionOptions,
|
|
72
|
-
config: AstraleConfig,
|
|
73
|
-
instances?: InstanceStore,
|
|
74
|
-
): Promise<ConnectionTarget> {
|
|
75
|
-
const resolved = await resolveInstanceTarget(
|
|
76
|
-
{ source: 'admin' },
|
|
77
|
-
{
|
|
78
|
-
config,
|
|
79
|
-
admin: adminLookupOptions(options),
|
|
80
|
-
...(instances === undefined ? {} : { instances }),
|
|
81
|
-
},
|
|
82
|
-
)
|
|
83
|
-
return connectionTarget(resolved)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export function adminLookupOptions(options: AdminConnectionOptions): AdminTargetCommandOpts {
|
|
87
|
-
return {
|
|
88
|
-
...(options.admin === undefined ? {} : { admin: options.admin }),
|
|
89
|
-
...(options.adminUrl === undefined ? {} : { adminUrl: options.adminUrl }),
|
|
90
|
-
...(options.domainIssuer === undefined ? {} : { domainIssuer: options.domainIssuer }),
|
|
91
|
-
...(options.instance === undefined ? {} : { instance: options.instance }),
|
|
92
|
-
...(options.url === undefined ? {} : { url: options.url }),
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function connectionTarget(
|
|
97
|
-
resolved: ResolvedInstanceTarget,
|
|
98
|
-
urlOverride?: string,
|
|
99
|
-
): ConnectionTarget {
|
|
100
|
-
return Object.freeze({
|
|
101
|
-
url: urlOverride ?? resolved.url,
|
|
102
|
-
kernelIssuer: issuer.accept(resolved.kernelIssuer),
|
|
103
|
-
...(resolved.domainIssuer === undefined
|
|
104
|
-
? {}
|
|
105
|
-
: { domainIssuer: issuer.accept(resolved.domainIssuer) }),
|
|
106
|
-
...(resolved.name === undefined ? {} : { slug: resolved.name }),
|
|
107
|
-
...(resolved.defaultIdentity === undefined
|
|
108
|
-
? {}
|
|
109
|
-
: { defaultIdentity: resolved.defaultIdentity }),
|
|
110
|
-
...(resolved.caFile === undefined ? {} : { caFile: resolved.caFile }),
|
|
111
|
-
})
|
|
112
|
-
}
|