@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,311 +0,0 @@
|
|
|
1
|
-
import type { IssuerId } from '@astrale-os/sdk/auth'
|
|
2
|
-
import type { Fetch } from '@astrale-os/sdk/client'
|
|
3
|
-
|
|
4
|
-
import { createAuth } from '@astrale-os/sdk/auth'
|
|
5
|
-
import { credential, exchange as exchangeProtocol } from '@astrale-os/sdk/auth'
|
|
6
|
-
import { call, Client } from '@astrale-os/sdk/client'
|
|
7
|
-
|
|
8
|
-
import type { SourceCredentialResolver } from './credential'
|
|
9
|
-
import type { ConnectionTarget } from './target'
|
|
10
|
-
|
|
11
|
-
import { AstraleError } from '../errors'
|
|
12
|
-
import { ExchangeCredentialCache } from '../state/exchange-credentials'
|
|
13
|
-
|
|
14
|
-
const EXCHANGE_TTL_SECONDS = 120
|
|
15
|
-
const MAXIMUM_RESPONSE_BYTES = 256 * 1024
|
|
16
|
-
|
|
17
|
-
/** Exchange exact authenticated User authority for a Domain bearer bound to this Kernel. */
|
|
18
|
-
export function createExchangeCredentialResolver(
|
|
19
|
-
target: ConnectionTarget & { readonly domainIssuer: IssuerId },
|
|
20
|
-
source: SourceCredentialResolver,
|
|
21
|
-
fetch: Fetch,
|
|
22
|
-
timeoutMs: number,
|
|
23
|
-
cache = new ExchangeCredentialCache(),
|
|
24
|
-
): SourceCredentialResolver {
|
|
25
|
-
requireExchangeTransport(target)
|
|
26
|
-
return Object.freeze({
|
|
27
|
-
async resolve(kernelIssuer: IssuerId, signal: AbortSignal): Promise<string> {
|
|
28
|
-
requireLive(signal)
|
|
29
|
-
const sourceToken = await source.resolve(kernelIssuer, signal)
|
|
30
|
-
const delegationTtlSeconds = delegationLifetime(sourceToken)
|
|
31
|
-
requireLive(signal)
|
|
32
|
-
|
|
33
|
-
const client = new Client({ url: `${kernelIssuer}/invoke`, fetch, timeoutMs })
|
|
34
|
-
try {
|
|
35
|
-
const authenticated = client.as(sourceToken)
|
|
36
|
-
const auth = createAuth(async (path, input, options) => {
|
|
37
|
-
const result = await authenticated.call(call(path, input), {
|
|
38
|
-
...options,
|
|
39
|
-
delegate: { ttlSeconds: delegationTtlSeconds },
|
|
40
|
-
})
|
|
41
|
-
return result.value
|
|
42
|
-
})
|
|
43
|
-
const user = await auth.whoami({ signal })
|
|
44
|
-
const key = Object.freeze({
|
|
45
|
-
kernelIssuer,
|
|
46
|
-
domainIssuer: target.domainIssuer,
|
|
47
|
-
user: user.id,
|
|
48
|
-
})
|
|
49
|
-
return await cache.getOrRefresh(key, async () => {
|
|
50
|
-
let envelope: string | undefined
|
|
51
|
-
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
52
|
-
try {
|
|
53
|
-
envelope = await auth.delegate(
|
|
54
|
-
user.id,
|
|
55
|
-
{
|
|
56
|
-
audience: target.domainIssuer,
|
|
57
|
-
ttlSeconds: delegationTtlSeconds,
|
|
58
|
-
attenuation: { kind: 'identity', self: true },
|
|
59
|
-
},
|
|
60
|
-
{ signal },
|
|
61
|
-
)
|
|
62
|
-
break
|
|
63
|
-
} catch (cause) {
|
|
64
|
-
if (attempt === 2 || !unknownFunctionOutcome(cause)) throw cause
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
if (envelope === undefined) throw new Error('Token delegation returned no credential.')
|
|
68
|
-
return exchange(target.domainIssuer, kernelIssuer, envelope, fetch, signal)
|
|
69
|
-
})
|
|
70
|
-
} finally {
|
|
71
|
-
client.close()
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function unknownFunctionOutcome(cause: unknown): boolean {
|
|
78
|
-
if (cause === null || typeof cause !== 'object') return false
|
|
79
|
-
const error = cause as { readonly code?: unknown; readonly reason?: unknown }
|
|
80
|
-
if (error.code === 5002) return true
|
|
81
|
-
if (error.reason === null || typeof error.reason !== 'object') return false
|
|
82
|
-
return (error.reason as { readonly code?: unknown }).code === 'FUNCTION_OUTCOME_UNKNOWN'
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function delegationLifetime(sourceToken: string): number {
|
|
86
|
-
const expiresAt = credential.inspect(sourceToken).claims.exp
|
|
87
|
-
if (typeof expiresAt !== 'number' || !Number.isSafeInteger(expiresAt)) {
|
|
88
|
-
throw new AstraleError(
|
|
89
|
-
'TOKEN_EXCHANGE_SOURCE_INVALID',
|
|
90
|
-
'The source identity credential has no valid expiration.',
|
|
91
|
-
)
|
|
92
|
-
}
|
|
93
|
-
const remaining = expiresAt - Math.ceil(Date.now() / 1_000) - 1
|
|
94
|
-
if (!Number.isSafeInteger(remaining) || remaining < 1) {
|
|
95
|
-
throw new AstraleError(
|
|
96
|
-
'TOKEN_EXCHANGE_SOURCE_EXPIRED',
|
|
97
|
-
'The source identity credential has no lifetime available for token exchange.',
|
|
98
|
-
)
|
|
99
|
-
}
|
|
100
|
-
return Math.min(EXCHANGE_TTL_SECONDS, remaining)
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
async function exchange(
|
|
104
|
-
domainIssuer: IssuerId,
|
|
105
|
-
kernelIssuer: IssuerId,
|
|
106
|
-
envelope: string,
|
|
107
|
-
fetch: Fetch,
|
|
108
|
-
signal: AbortSignal,
|
|
109
|
-
): Promise<{ readonly credential: string; readonly expiresAt: number }> {
|
|
110
|
-
const configurationUrl = new URL(
|
|
111
|
-
exchangeProtocol.paths(domainIssuer).configuration,
|
|
112
|
-
domainIssuer,
|
|
113
|
-
).toString()
|
|
114
|
-
const configurationResponse = await fetchExchange(
|
|
115
|
-
fetch,
|
|
116
|
-
configurationUrl,
|
|
117
|
-
{
|
|
118
|
-
method: 'GET',
|
|
119
|
-
redirect: 'error',
|
|
120
|
-
credentials: 'omit',
|
|
121
|
-
cache: 'no-store',
|
|
122
|
-
referrerPolicy: 'no-referrer',
|
|
123
|
-
headers: { accept: 'application/json' },
|
|
124
|
-
signal,
|
|
125
|
-
},
|
|
126
|
-
'Domain issuer discovery could not be reached.',
|
|
127
|
-
)
|
|
128
|
-
if (!configurationResponse.ok) {
|
|
129
|
-
throw new AstraleError(
|
|
130
|
-
'TOKEN_EXCHANGE_DISCOVERY_FAILED',
|
|
131
|
-
`Domain issuer discovery failed with HTTP ${configurationResponse.status}.`,
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
|
-
const configuration = exchangeProtocol.acceptConfiguration(
|
|
135
|
-
await boundedJson(configurationResponse, signal),
|
|
136
|
-
domainIssuer,
|
|
137
|
-
)
|
|
138
|
-
const endpoint = configuration.token_exchange_endpoint
|
|
139
|
-
if (endpoint === undefined) {
|
|
140
|
-
throw new AstraleError(
|
|
141
|
-
'TOKEN_EXCHANGE_UNSUPPORTED',
|
|
142
|
-
`Domain issuer ${domainIssuer} does not advertise token exchange.`,
|
|
143
|
-
'This command has no legacy token fallback.',
|
|
144
|
-
)
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const response = await fetchExchange(
|
|
148
|
-
fetch,
|
|
149
|
-
endpoint,
|
|
150
|
-
{
|
|
151
|
-
method: 'POST',
|
|
152
|
-
redirect: 'error',
|
|
153
|
-
credentials: 'omit',
|
|
154
|
-
cache: 'no-store',
|
|
155
|
-
referrerPolicy: 'no-referrer',
|
|
156
|
-
headers: {
|
|
157
|
-
authorization: `Bearer ${envelope}`,
|
|
158
|
-
accept: exchangeProtocol.MEDIA_TYPE,
|
|
159
|
-
},
|
|
160
|
-
signal,
|
|
161
|
-
},
|
|
162
|
-
'Domain token exchange could not be reached.',
|
|
163
|
-
)
|
|
164
|
-
const body = await boundedJson(response, signal)
|
|
165
|
-
if (!response.ok) {
|
|
166
|
-
let admitted: exchangeProtocol.ErrorResponse
|
|
167
|
-
try {
|
|
168
|
-
admitted = exchangeProtocol.acceptErrorResponse(body)
|
|
169
|
-
} catch (cause) {
|
|
170
|
-
if (!(cause instanceof TypeError)) throw cause
|
|
171
|
-
throw new AstraleError(
|
|
172
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
173
|
-
`Token exchange failed with HTTP ${response.status} and an invalid error response.`,
|
|
174
|
-
cause instanceof Error ? cause.message : undefined,
|
|
175
|
-
)
|
|
176
|
-
}
|
|
177
|
-
throw new AstraleError(String(admitted.error.code), admitted.error.message)
|
|
178
|
-
}
|
|
179
|
-
requireExchangeResponseHeaders(response)
|
|
180
|
-
let exchanged: exchangeProtocol.Response
|
|
181
|
-
let inspected: ReturnType<typeof credential.inspect>
|
|
182
|
-
try {
|
|
183
|
-
exchanged = exchangeProtocol.acceptResponse(body)
|
|
184
|
-
inspected = credential.inspect(exchanged.token)
|
|
185
|
-
} catch (cause) {
|
|
186
|
-
if (!(cause instanceof TypeError)) throw cause
|
|
187
|
-
throw new AstraleError(
|
|
188
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
189
|
-
'Token exchange returned an invalid success response.',
|
|
190
|
-
cause.message,
|
|
191
|
-
)
|
|
192
|
-
}
|
|
193
|
-
if (
|
|
194
|
-
inspected.iss !== domainIssuer ||
|
|
195
|
-
inspected.aud !== kernelIssuer ||
|
|
196
|
-
inspected.claims.exp !== exchanged.expiresAt
|
|
197
|
-
) {
|
|
198
|
-
throw new AstraleError(
|
|
199
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
200
|
-
'Token exchange returned a credential inconsistent with the requested Domain and Kernel.',
|
|
201
|
-
)
|
|
202
|
-
}
|
|
203
|
-
return Object.freeze({ credential: exchanged.token, expiresAt: exchanged.expiresAt })
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
async function fetchExchange(
|
|
207
|
-
fetch: Fetch,
|
|
208
|
-
input: string,
|
|
209
|
-
init: RequestInit,
|
|
210
|
-
message: string,
|
|
211
|
-
): Promise<Response> {
|
|
212
|
-
try {
|
|
213
|
-
return await fetch(input, init)
|
|
214
|
-
} catch (cause) {
|
|
215
|
-
if (init.signal?.aborted) throw cause
|
|
216
|
-
throw new AstraleError('TOKEN_EXCHANGE_UNAVAILABLE', message, undefined, { cause })
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
function requireExchangeTransport(
|
|
221
|
-
target: ConnectionTarget & { readonly domainIssuer: IssuerId },
|
|
222
|
-
): void {
|
|
223
|
-
const kernel = new URL(target.kernelIssuer)
|
|
224
|
-
const domain = new URL(target.domainIssuer)
|
|
225
|
-
if (domain.protocol === 'https:') return
|
|
226
|
-
if (domain.protocol === 'http:' && kernel.protocol === 'http:') return
|
|
227
|
-
throw new AstraleError(
|
|
228
|
-
'TOKEN_EXCHANGE_INSECURE',
|
|
229
|
-
'An HTTP Domain issuer is allowed only with an explicitly configured HTTP Kernel target.',
|
|
230
|
-
)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function requireExchangeResponseHeaders(response: Response): void {
|
|
234
|
-
const contentType = response.headers.get('content-type')?.split(';', 1)[0]?.trim().toLowerCase()
|
|
235
|
-
if (contentType !== exchangeProtocol.MEDIA_TYPE) {
|
|
236
|
-
throw new AstraleError(
|
|
237
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
238
|
-
'Token exchange returned an unsupported Content-Type.',
|
|
239
|
-
)
|
|
240
|
-
}
|
|
241
|
-
if (
|
|
242
|
-
!response.headers
|
|
243
|
-
.get('cache-control')
|
|
244
|
-
?.toLowerCase()
|
|
245
|
-
.split(',')
|
|
246
|
-
.some((v) => v.trim() === 'no-store')
|
|
247
|
-
) {
|
|
248
|
-
throw new AstraleError(
|
|
249
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
250
|
-
'Token exchange response is missing Cache-Control: no-store.',
|
|
251
|
-
)
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
async function boundedJson(response: Response, signal: AbortSignal): Promise<unknown> {
|
|
256
|
-
const declared = response.headers.get('content-length')
|
|
257
|
-
if (
|
|
258
|
-
declared !== null &&
|
|
259
|
-
(!/^\d+$/u.test(declared) || Number(declared) > MAXIMUM_RESPONSE_BYTES)
|
|
260
|
-
) {
|
|
261
|
-
throw new AstraleError(
|
|
262
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
263
|
-
'Issuer response exceeds the size limit.',
|
|
264
|
-
)
|
|
265
|
-
}
|
|
266
|
-
if (response.body === null) {
|
|
267
|
-
throw new AstraleError('TOKEN_EXCHANGE_PROTOCOL_ERROR', 'Issuer response body is missing.')
|
|
268
|
-
}
|
|
269
|
-
const reader = response.body.getReader()
|
|
270
|
-
const chunks: Uint8Array[] = []
|
|
271
|
-
let size = 0
|
|
272
|
-
try {
|
|
273
|
-
for (;;) {
|
|
274
|
-
requireLive(signal)
|
|
275
|
-
const next = await reader.read()
|
|
276
|
-
if (next.done) break
|
|
277
|
-
size += next.value.byteLength
|
|
278
|
-
if (size > MAXIMUM_RESPONSE_BYTES) {
|
|
279
|
-
throw new AstraleError(
|
|
280
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
281
|
-
'Issuer response exceeds the size limit.',
|
|
282
|
-
)
|
|
283
|
-
}
|
|
284
|
-
chunks.push(next.value)
|
|
285
|
-
}
|
|
286
|
-
} finally {
|
|
287
|
-
reader.releaseLock()
|
|
288
|
-
}
|
|
289
|
-
const bytes = new Uint8Array(size)
|
|
290
|
-
let offset = 0
|
|
291
|
-
for (const chunk of chunks) {
|
|
292
|
-
bytes.set(chunk, offset)
|
|
293
|
-
offset += chunk.byteLength
|
|
294
|
-
}
|
|
295
|
-
try {
|
|
296
|
-
return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)) as unknown
|
|
297
|
-
} catch (cause) {
|
|
298
|
-
throw new AstraleError(
|
|
299
|
-
'TOKEN_EXCHANGE_PROTOCOL_ERROR',
|
|
300
|
-
'Issuer response is not valid UTF-8 JSON.',
|
|
301
|
-
cause instanceof Error ? cause.message : undefined,
|
|
302
|
-
)
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
function requireLive(signal: AbortSignal): void {
|
|
307
|
-
if (!signal.aborted) return
|
|
308
|
-
throw signal.reason instanceof Error
|
|
309
|
-
? signal.reason
|
|
310
|
-
: new DOMException('The operation was aborted.', 'AbortError')
|
|
311
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { AuthValueError } from '@astrale-os/sdk/auth'
|
|
2
|
-
import { ClientError, ProtocolError, ResponseError, TransportError } from '@astrale-os/sdk/client'
|
|
3
|
-
import { NodeUnavailableError } from '@astrale-os/sdk/client'
|
|
4
|
-
import { PathError } from '@astrale-os/sdk/graph/path'
|
|
5
|
-
|
|
6
|
-
import type { FailureDiagnostic, TransportDiagnosticContext } from './model'
|
|
7
|
-
|
|
8
|
-
import { AstraleError } from '../../errors'
|
|
9
|
-
|
|
10
|
-
export function classifyFailure(error: unknown): FailureDiagnostic {
|
|
11
|
-
if (error instanceof AstraleError) return simple(error.code, error.message, error.hint)
|
|
12
|
-
if (error instanceof TransportError) {
|
|
13
|
-
const context = transportContext(error)
|
|
14
|
-
if (context === undefined) return simple('TRANSPORT_ERROR', error.message)
|
|
15
|
-
return {
|
|
16
|
-
kind: 'transport',
|
|
17
|
-
code: lifecycleCode(error.phase),
|
|
18
|
-
message: error.message,
|
|
19
|
-
phase: error.phase,
|
|
20
|
-
context,
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
if (error instanceof ResponseError) {
|
|
24
|
-
return {
|
|
25
|
-
kind: 'response',
|
|
26
|
-
code: error.code,
|
|
27
|
-
message: error.message,
|
|
28
|
-
...(error.reason === undefined ? {} : { reason: error.reason }),
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (error instanceof ClientError) {
|
|
32
|
-
const failure = sessionFailure(error)
|
|
33
|
-
if (failure !== undefined) return simple(lifecycleCode(failure), error.message)
|
|
34
|
-
}
|
|
35
|
-
if (error instanceof ProtocolError) return simple('PROTOCOL_ERROR', error.message)
|
|
36
|
-
if (error instanceof NodeUnavailableError)
|
|
37
|
-
return simple(
|
|
38
|
-
'NODE_UNAVAILABLE',
|
|
39
|
-
error.message,
|
|
40
|
-
'If this is a callable Path, use `astrale call` or `astrale introspect`.',
|
|
41
|
-
)
|
|
42
|
-
if (error instanceof PathError) return simple('PATH_INVALID', error.message)
|
|
43
|
-
if (error instanceof AuthValueError) return simple('AUTH_VALUE_INVALID', error.message)
|
|
44
|
-
if (error instanceof ClientError) return simple('CLIENT_ERROR', error.message)
|
|
45
|
-
return simple('UNEXPECTED_ERROR', 'The CLI encountered an unexpected internal failure.')
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
type TransportCode = Extract<FailureDiagnostic, { kind: 'transport' }>['code']
|
|
49
|
-
type SessionFailure = 'cancelled' | 'closed' | 'timeout'
|
|
50
|
-
|
|
51
|
-
function lifecycleCode(value: TransportError['phase']): TransportCode
|
|
52
|
-
function lifecycleCode(value: SessionFailure): string
|
|
53
|
-
function lifecycleCode(value: TransportError['phase'] | SessionFailure): string {
|
|
54
|
-
if (value === 'connect') return 'CONNECTION_ERROR'
|
|
55
|
-
if (value === 'timeout') return 'TIMEOUT'
|
|
56
|
-
if (value === 'closed') return 'DISCONNECTED'
|
|
57
|
-
return value === 'cancelled' ? 'CANCELLED' : 'TRANSPORT_ERROR'
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function transportContext(error: TransportError): TransportDiagnosticContext | undefined {
|
|
61
|
-
const evidence = error as TransportError & {
|
|
62
|
-
readonly context?: unknown
|
|
63
|
-
readonly delivery?: unknown
|
|
64
|
-
readonly invocation?: unknown
|
|
65
|
-
}
|
|
66
|
-
if (record(evidence.context)) {
|
|
67
|
-
if (
|
|
68
|
-
evidence.context.kind === 'acquisition' &&
|
|
69
|
-
(evidence.context.resource === 'publication' || evidence.context.resource === 'bundle')
|
|
70
|
-
) {
|
|
71
|
-
return { kind: 'acquisition', resource: evidence.context.resource }
|
|
72
|
-
}
|
|
73
|
-
if (
|
|
74
|
-
evidence.context.kind === 'invocation' &&
|
|
75
|
-
(evidence.context.delivery === 'not-sent' || evidence.context.delivery === 'unknown')
|
|
76
|
-
) {
|
|
77
|
-
return {
|
|
78
|
-
kind: 'invocation',
|
|
79
|
-
delivery: evidence.context.delivery,
|
|
80
|
-
...(evidence.context.invocation === undefined
|
|
81
|
-
? {}
|
|
82
|
-
: { invocation: evidence.context.invocation }),
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (evidence.delivery !== 'not-sent' && evidence.delivery !== 'unknown') return undefined
|
|
87
|
-
return {
|
|
88
|
-
kind: 'invocation',
|
|
89
|
-
delivery: evidence.delivery,
|
|
90
|
-
...(evidence.invocation === undefined ? {} : { invocation: evidence.invocation }),
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
function sessionFailure(error: ClientError): SessionFailure | undefined {
|
|
95
|
-
const failure = (error as ClientError & { readonly failure?: unknown }).failure
|
|
96
|
-
return failure === 'cancelled' || failure === 'closed' || failure === 'timeout'
|
|
97
|
-
? failure
|
|
98
|
-
: undefined
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function record(input: unknown): input is Readonly<Record<string, unknown>> {
|
|
102
|
-
return input !== null && typeof input === 'object' && !Array.isArray(input)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const simple = (code: string, message: string, hint?: string): FailureDiagnostic => ({
|
|
106
|
-
kind: 'simple',
|
|
107
|
-
code,
|
|
108
|
-
message,
|
|
109
|
-
...(hint === undefined ? {} : { hint }),
|
|
110
|
-
})
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { OperationRecovery } from '../command'
|
|
2
|
-
|
|
3
|
-
import { printFailureDebug } from '../../lib/failure-debug'
|
|
4
|
-
import { classifyFailure } from './classify'
|
|
5
|
-
import { renderFailure } from './render'
|
|
6
|
-
|
|
7
|
-
export { functionInputIssues, schemaUpgradeHint } from '../reasons'
|
|
8
|
-
|
|
9
|
-
export async function formatKernelError(
|
|
10
|
-
error: unknown,
|
|
11
|
-
machine: boolean,
|
|
12
|
-
urlArg = '',
|
|
13
|
-
debug = false,
|
|
14
|
-
options: { recovery?: OperationRecovery } = {},
|
|
15
|
-
): Promise<void> {
|
|
16
|
-
renderFailure(classifyFailure(error), machine, urlArg, options.recovery)
|
|
17
|
-
if (debug) printFailureDebug(error, urlArg)
|
|
18
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
export type TransportDiagnosticContext =
|
|
2
|
-
| { readonly kind: 'acquisition'; readonly resource: 'publication' | 'bundle' }
|
|
3
|
-
| {
|
|
4
|
-
readonly kind: 'invocation'
|
|
5
|
-
readonly delivery: 'not-sent' | 'unknown'
|
|
6
|
-
readonly invocation?: unknown
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export type FailureDiagnostic =
|
|
10
|
-
| {
|
|
11
|
-
readonly kind: 'simple'
|
|
12
|
-
readonly code: string
|
|
13
|
-
readonly message: string
|
|
14
|
-
readonly hint?: string
|
|
15
|
-
}
|
|
16
|
-
| {
|
|
17
|
-
readonly kind: 'response'
|
|
18
|
-
readonly code: number
|
|
19
|
-
readonly message: string
|
|
20
|
-
readonly reason?: unknown
|
|
21
|
-
}
|
|
22
|
-
| {
|
|
23
|
-
readonly kind: 'transport'
|
|
24
|
-
readonly code: 'CONNECTION_ERROR' | 'DISCONNECTED' | 'TIMEOUT' | 'TRANSPORT_ERROR'
|
|
25
|
-
readonly message: string
|
|
26
|
-
readonly phase: string
|
|
27
|
-
readonly context: TransportDiagnosticContext
|
|
28
|
-
}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
import type { OperationRecovery } from '../command'
|
|
4
|
-
import type { FailureDiagnostic } from './model'
|
|
5
|
-
|
|
6
|
-
import { log } from '../../lib/log'
|
|
7
|
-
import {
|
|
8
|
-
functionInputIssues,
|
|
9
|
-
queryInputRepair,
|
|
10
|
-
reasonCode,
|
|
11
|
-
schemaDataRemovalHint,
|
|
12
|
-
schemaUpgradeDetails,
|
|
13
|
-
schemaUpgradeHint,
|
|
14
|
-
} from '../reasons'
|
|
15
|
-
|
|
16
|
-
export function renderFailure(
|
|
17
|
-
failure: FailureDiagnostic,
|
|
18
|
-
machine: boolean,
|
|
19
|
-
url: string,
|
|
20
|
-
recovery: OperationRecovery | undefined,
|
|
21
|
-
): void {
|
|
22
|
-
if (failure.kind === 'transport') return renderTransport(failure, machine, url, recovery)
|
|
23
|
-
if (failure.kind === 'response') return renderResponse(failure, machine)
|
|
24
|
-
if (machine)
|
|
25
|
-
return writeRaw({ error: failure.code, message: failure.message, hint: failure.hint })
|
|
26
|
-
log.error(`${chalk.bold(failure.code)}: ${failure.message}`)
|
|
27
|
-
if (failure.hint) log.dim(` ${failure.hint}`)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function renderTransport(
|
|
31
|
-
failure: Extract<FailureDiagnostic, { kind: 'transport' }>,
|
|
32
|
-
machine: boolean,
|
|
33
|
-
url: string,
|
|
34
|
-
recovery: OperationRecovery | undefined,
|
|
35
|
-
): void {
|
|
36
|
-
const invocation = failure.context.kind === 'invocation' ? failure.context : undefined
|
|
37
|
-
if (machine) {
|
|
38
|
-
writeRaw({
|
|
39
|
-
error: failure.code,
|
|
40
|
-
message: failure.message,
|
|
41
|
-
phase: failure.phase,
|
|
42
|
-
transport: failure.context,
|
|
43
|
-
...(url === '' ? {} : { url }),
|
|
44
|
-
...(invocation?.delivery === 'unknown' && recovery !== undefined ? recovery : {}),
|
|
45
|
-
})
|
|
46
|
-
return
|
|
47
|
-
}
|
|
48
|
-
log.error(`${chalk.bold(failure.code)}: ${failure.message}`)
|
|
49
|
-
if (url) log.dim(` target: ${url}`)
|
|
50
|
-
log.dim(` phase: ${failure.phase}`)
|
|
51
|
-
if (failure.phase === 'connect') log.dim(' Check the target and run `astrale status`.')
|
|
52
|
-
else if (failure.phase === 'timeout') log.dim(' Try increasing `--timeout`.')
|
|
53
|
-
else if (invocation?.delivery === 'unknown') renderRecovery(recovery)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function renderResponse(
|
|
57
|
-
failure: Extract<FailureDiagnostic, { kind: 'response' }>,
|
|
58
|
-
machine: boolean,
|
|
59
|
-
): void {
|
|
60
|
-
const code = reasonCode(failure.reason)
|
|
61
|
-
const issues = functionInputIssues(failure.reason)
|
|
62
|
-
const removalHint = schemaDataRemovalHint(failure.reason)
|
|
63
|
-
const addressNotPublic = code === 'SCHEMA_DOMAIN_ADDRESS_NOT_PUBLIC'
|
|
64
|
-
const upgrade = schemaUpgradeDetails(failure.reason)
|
|
65
|
-
const message = addressNotPublic
|
|
66
|
-
? 'Expose the Domain through a public HTTPS URL or public tunnel, then retry.'
|
|
67
|
-
: removalHint && !machine
|
|
68
|
-
? 'Existing business data still uses schema definitions being removed.'
|
|
69
|
-
: failure.message
|
|
70
|
-
const hint =
|
|
71
|
-
code === 'FUNCTION_INPUT_INVALID' && (machine || issues.length === 0)
|
|
72
|
-
? 'Use `astrale introspect <path>` to see the callable input.'
|
|
73
|
-
: (removalHint ?? (upgrade ? schemaUpgradeHint(upgrade) : undefined))
|
|
74
|
-
if (machine) {
|
|
75
|
-
writeRaw({
|
|
76
|
-
error: 'RESPONSE_ERROR',
|
|
77
|
-
code: failure.code,
|
|
78
|
-
message,
|
|
79
|
-
...(failure.reason === undefined ? {} : { reason: failure.reason }),
|
|
80
|
-
...(hint === undefined ? {} : { hint }),
|
|
81
|
-
})
|
|
82
|
-
return
|
|
83
|
-
}
|
|
84
|
-
const label = addressNotPublic
|
|
85
|
-
? 'SCHEMA_DOMAIN_ADDRESS_NOT_PUBLIC'
|
|
86
|
-
: removalHint
|
|
87
|
-
? 'DATA_MIGRATION_REQUIRED'
|
|
88
|
-
: `RESPONSE_ERROR(${failure.code})`
|
|
89
|
-
log.error(`${chalk.bold(label)}: ${message}`)
|
|
90
|
-
if (code && !addressNotPublic && !removalHint) log.dim(` reason: ${code}`)
|
|
91
|
-
for (const issue of issues)
|
|
92
|
-
console.log(
|
|
93
|
-
chalk.red(` ${issue.path || '<input>'}: ${issue.message} (${chalk.dim(issue.code)})`),
|
|
94
|
-
)
|
|
95
|
-
const repair = queryInputRepair(failure.reason)
|
|
96
|
-
if (repair?.phase === 'plan') log.dim(` ${repair.path ?? '/'} ${repair.issue}`)
|
|
97
|
-
else if (repair?.phase === 'limit')
|
|
98
|
-
log.dim(` ${repair.path ?? '/'} ${repair.limit} limit ${repair.actual}/${repair.maximum}`)
|
|
99
|
-
else if (repair) log.dim(` ${repair.path} ${repair.phase} input`)
|
|
100
|
-
if (upgrade?.issue === 'issuer-changed') {
|
|
101
|
-
log.dim(` installed issuer: ${upgrade.installedIssuer}`)
|
|
102
|
-
log.dim(` replacement issuer: ${upgrade.replacementIssuer}`)
|
|
103
|
-
}
|
|
104
|
-
if (hint) log.dim(` ${hint}`)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
function renderRecovery(recovery: OperationRecovery | undefined): void {
|
|
108
|
-
if (!recovery)
|
|
109
|
-
return log.dim(' Delivery is unknown; do not automatically retry a mutating call.')
|
|
110
|
-
log.dim(' Delivery is unknown; retry with the same operation id:')
|
|
111
|
-
log.dim(` operation: ${recovery.operation}`)
|
|
112
|
-
log.dim(` ${recovery.retry}`)
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const writeRaw = (payload: Record<string, unknown>): void =>
|
|
116
|
-
void process.stderr.write(`${JSON.stringify(payload)}\n`)
|
package/src/connection/index.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { createPathCall } from './call'
|
|
2
|
-
export { runKernelCommand } from './command'
|
|
3
|
-
export type { KernelCommandOpts, OperationRecovery } from './command'
|
|
4
|
-
export { expandSelfInCall, expandSelfInPath, withSelfHint } from './self'
|
|
5
|
-
export type { SelfExpansionMeta } from './self'
|
|
6
|
-
export { withAdminClientSession, withClientSession, type ConnectionContext } from './session'
|
|
7
|
-
export { registrationKeyForTarget } from './target'
|
|
8
|
-
export type { AdminConnectionOptions, ConnectionOptions, ConnectionTarget } from './target'
|