@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,259 +0,0 @@
|
|
|
1
|
-
import type { OwnedInstanceInfo } from '../../lib/admin-instance'
|
|
2
|
-
import type { CommandDefinition } from '../../program/index'
|
|
3
|
-
|
|
4
|
-
import { AstraleError } from '../../errors'
|
|
5
|
-
import { getDefault, setDefault } from '../../identity/index'
|
|
6
|
-
import { listOwnedInstances } from '../../lib/admin-instance'
|
|
7
|
-
import { ADMIN_TARGET_OPTIONS } from '../../lib/admin-target'
|
|
8
|
-
import { fetchWithCaFile } from '../../lib/ca-fetch'
|
|
9
|
-
import {
|
|
10
|
-
findBookmarkTrustConflicts,
|
|
11
|
-
getActive,
|
|
12
|
-
readInstances,
|
|
13
|
-
resolveInstance,
|
|
14
|
-
resolveInstanceKey,
|
|
15
|
-
setActive,
|
|
16
|
-
upsertManagedBookmark,
|
|
17
|
-
type ResolvedInstance,
|
|
18
|
-
} from '../../lib/instance'
|
|
19
|
-
import {
|
|
20
|
-
collectInstanceCandidates,
|
|
21
|
-
describeInstanceCandidate,
|
|
22
|
-
type InstanceCandidate,
|
|
23
|
-
} from '../../lib/instance-candidates'
|
|
24
|
-
import { fatal, log } from '../../lib/log'
|
|
25
|
-
import { checkIssuerReachability } from '../../lib/meta'
|
|
26
|
-
import { confirmDefaultYes, selectFrom } from '../../lib/prompt'
|
|
27
|
-
import { validateSlug } from '../../lib/validation'
|
|
28
|
-
|
|
29
|
-
type UseOpts = {
|
|
30
|
-
admin?: string
|
|
31
|
-
adminUrl?: string
|
|
32
|
-
url?: string
|
|
33
|
-
timeout?: string
|
|
34
|
-
as?: string
|
|
35
|
-
creds?: string
|
|
36
|
-
debug?: boolean
|
|
37
|
-
ci?: boolean
|
|
38
|
-
noPrompt?: boolean
|
|
39
|
-
adoptDefault?: boolean
|
|
40
|
-
skipJwksCheck?: boolean
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async function useInstance(name?: string, opts: UseOpts = {}): Promise<void> {
|
|
44
|
-
try {
|
|
45
|
-
if (!name) {
|
|
46
|
-
const active = await getActive()
|
|
47
|
-
console.log(`${active.name} (${active.url})`)
|
|
48
|
-
return
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const resolved = await resolveUseTarget(name, opts)
|
|
52
|
-
|
|
53
|
-
if (!opts.skipJwksCheck) {
|
|
54
|
-
await probeBookmark(resolved)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
await setActive(resolved.name)
|
|
58
|
-
log.success(`Active instance: ${resolved.name} (${resolved.url})`)
|
|
59
|
-
|
|
60
|
-
// §7.1 identity-adoption prompt (DX). Orthogonality preserved — we
|
|
61
|
-
// only switch on explicit user consent (or --adopt-default in CI).
|
|
62
|
-
const store = await readInstances()
|
|
63
|
-
const key = resolveInstanceKey(store, resolved.name)
|
|
64
|
-
const identityCandidate =
|
|
65
|
-
resolved.defaultIdentity ?? (key ? store.instances[key]?.defaultIdentity : undefined)
|
|
66
|
-
if (!identityCandidate) return
|
|
67
|
-
const active = await getDefault().catch(() => null)
|
|
68
|
-
if (active?.name === identityCandidate) return
|
|
69
|
-
|
|
70
|
-
const inCi = opts.ci || opts.noPrompt || !!process.env.CI
|
|
71
|
-
if (inCi) {
|
|
72
|
-
if (opts.adoptDefault) {
|
|
73
|
-
await setDefault(identityCandidate)
|
|
74
|
-
log.success(`Identity switched to "${identityCandidate}" (--adopt-default)`)
|
|
75
|
-
} else {
|
|
76
|
-
log.dim(
|
|
77
|
-
` (instance default identity "${identityCandidate}" — keep active ${active?.name ?? 'none'})`,
|
|
78
|
-
)
|
|
79
|
-
}
|
|
80
|
-
return
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const msg = `Instance "${resolved.name}" has default identity "${identityCandidate}". Active: "${active?.name ?? 'none'}". Switch identity too?`
|
|
84
|
-
if (await confirmDefaultYes(msg)) {
|
|
85
|
-
await setDefault(identityCandidate)
|
|
86
|
-
log.success(`Identity switched to "${identityCandidate}"`)
|
|
87
|
-
} else {
|
|
88
|
-
log.dim(' kept active identity (orthogonal)')
|
|
89
|
-
}
|
|
90
|
-
} catch (e) {
|
|
91
|
-
fatal(e)
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** Probe with the exact TLS trust configuration stored on this bookmark. */
|
|
96
|
-
export async function probeBookmark(
|
|
97
|
-
resolved: ResolvedInstance,
|
|
98
|
-
dependencies: Partial<BookmarkProbeDependencies> = {},
|
|
99
|
-
): Promise<void> {
|
|
100
|
-
const probe = { ...defaultBookmarkProbeDependencies, ...dependencies }
|
|
101
|
-
const store = await probe.readInstances()
|
|
102
|
-
const conflicts = findBookmarkTrustConflicts(store, resolved.name, resolved.url, resolved.caFile)
|
|
103
|
-
try {
|
|
104
|
-
await probe.checkIssuerReachability(
|
|
105
|
-
resolved.url,
|
|
106
|
-
resolved.issuer,
|
|
107
|
-
resolved.caFile ? probe.fetchWithCaFile(resolved.caFile) : undefined,
|
|
108
|
-
)
|
|
109
|
-
} catch (cause) {
|
|
110
|
-
const original = cause instanceof AstraleError ? cause.hint : undefined
|
|
111
|
-
const trust = resolved.caFile
|
|
112
|
-
? `Bookmark "${resolved.name}" trusts CA ${resolved.caFile}.`
|
|
113
|
-
: `Bookmark "${resolved.name}" uses the system trust store.`
|
|
114
|
-
const collision =
|
|
115
|
-
conflicts.length === 0
|
|
116
|
-
? ''
|
|
117
|
-
: ` The same URL is bookmarked with different TLS trust as ${conflicts
|
|
118
|
-
.map((conflict) =>
|
|
119
|
-
conflict.caFile
|
|
120
|
-
? `"${conflict.name}" (CA ${conflict.caFile})`
|
|
121
|
-
: `"${conflict.name}" (system trust)`,
|
|
122
|
-
)
|
|
123
|
-
.join(', ')}.`
|
|
124
|
-
throw new AstraleError(
|
|
125
|
-
cause instanceof AstraleError ? cause.code : 'ISSUER_UNREACHABLE',
|
|
126
|
-
`Issuer/JWKS probe failed for bookmark "${resolved.name}" at ${resolved.url}.`,
|
|
127
|
-
`${trust}${collision}${original ? ` ${original}` : ''} Inspect with \`astrale instance list --bookmarked --json\`.`,
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
interface BookmarkProbeDependencies {
|
|
133
|
-
readonly readInstances: typeof readInstances
|
|
134
|
-
readonly checkIssuerReachability: typeof checkIssuerReachability
|
|
135
|
-
readonly fetchWithCaFile: typeof fetchWithCaFile
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const defaultBookmarkProbeDependencies: BookmarkProbeDependencies = Object.freeze({
|
|
139
|
-
readInstances,
|
|
140
|
-
checkIssuerReachability,
|
|
141
|
-
fetchWithCaFile,
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
async function resolveUseTarget(name: string, opts: UseOpts): Promise<ResolvedInstance> {
|
|
145
|
-
const [store, managed] = await Promise.all([readInstances(), fetchManagedInstances(name, opts)])
|
|
146
|
-
const candidates = collectInstanceCandidates(name, store, managed)
|
|
147
|
-
|
|
148
|
-
if (candidates.length === 0) {
|
|
149
|
-
throw new AstraleError(
|
|
150
|
-
'INSTANCE_NOT_FOUND',
|
|
151
|
-
`Instance "${name}" is not bookmarked and not admin-managed.\n` +
|
|
152
|
-
` Bookmark: astrale instance bookmark ${name} --url <url>\n` +
|
|
153
|
-
` Or check: astrale instance list`,
|
|
154
|
-
)
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const interactive = !(opts.ci || opts.noPrompt || process.env.CI)
|
|
158
|
-
const chosen =
|
|
159
|
-
candidates.length === 1
|
|
160
|
-
? candidates[0]
|
|
161
|
-
: interactive
|
|
162
|
-
? await pickCandidate(name, candidates)
|
|
163
|
-
: null
|
|
164
|
-
if (!chosen) throw ambiguousError(name, candidates)
|
|
165
|
-
|
|
166
|
-
if (chosen.source === 'bookmark') {
|
|
167
|
-
return await resolveInstance(chosen.key)
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
assertManagedReady(chosen.info)
|
|
171
|
-
const { repointedFrom } = await upsertManagedBookmark(
|
|
172
|
-
chosen.key,
|
|
173
|
-
chosen.info.slug,
|
|
174
|
-
chosen.url,
|
|
175
|
-
chosen.info.organizationId,
|
|
176
|
-
)
|
|
177
|
-
if (repointedFrom) {
|
|
178
|
-
log.warn(`Bookmark "${chosen.key}" repointed: ${repointedFrom} → ${chosen.url}`)
|
|
179
|
-
}
|
|
180
|
-
return await resolveInstance(chosen.key)
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* All admin-managed instances (collectInstanceCandidates filters by name).
|
|
185
|
-
* Best-effort: an unreachable or unauthenticated admin kernel degrades to
|
|
186
|
-
* bookmark-only resolution.
|
|
187
|
-
*/
|
|
188
|
-
async function fetchManagedInstances(name: string, opts: UseOpts): Promise<OwnedInstanceInfo[]> {
|
|
189
|
-
try {
|
|
190
|
-
validateSlug(name)
|
|
191
|
-
} catch {
|
|
192
|
-
return []
|
|
193
|
-
}
|
|
194
|
-
try {
|
|
195
|
-
return await listOwnedInstances(opts)
|
|
196
|
-
} catch {
|
|
197
|
-
return []
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
function assertManagedReady(info: OwnedInstanceInfo): void {
|
|
202
|
-
if (info.state === 'ready') return
|
|
203
|
-
const detail = info.phase && info.phase !== info.state ? ` (${info.phase})` : ''
|
|
204
|
-
throw new AstraleError(
|
|
205
|
-
'INSTANCE_NOT_READY',
|
|
206
|
-
`Instance "${info.slug}" is ${info.state}${detail}; it cannot be selected yet.`,
|
|
207
|
-
info.error ?? `Run: astrale instance status ${info.slug}`,
|
|
208
|
-
)
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
async function pickCandidate(
|
|
212
|
-
name: string,
|
|
213
|
-
candidates: InstanceCandidate[],
|
|
214
|
-
): Promise<InstanceCandidate | null> {
|
|
215
|
-
return selectFrom(
|
|
216
|
-
`Multiple instances match "${name}":`,
|
|
217
|
-
candidates.map((candidate) => ({
|
|
218
|
-
label: describeInstanceCandidate(candidate),
|
|
219
|
-
value: candidate,
|
|
220
|
-
})),
|
|
221
|
-
)
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
function ambiguousError(name: string, candidates: InstanceCandidate[]): AstraleError {
|
|
225
|
-
const lines = candidates.map((candidate) => ` - ${describeInstanceCandidate(candidate)}`)
|
|
226
|
-
return new AstraleError(
|
|
227
|
-
'INSTANCE_AMBIGUOUS',
|
|
228
|
-
`Multiple instances match "${name}":\n${lines.join('\n')}`,
|
|
229
|
-
'Run interactively to pick one, or `astrale instance forget <name>` to drop the stale bookmark.',
|
|
230
|
-
)
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
export default {
|
|
234
|
-
name: 'use',
|
|
235
|
-
description: 'Set the active kernel instance (no args: show current)',
|
|
236
|
-
afterHelpText: `
|
|
237
|
-
Behavior:
|
|
238
|
-
The active instance lives in ~/.astrale/instances.json (a
|
|
239
|
-
process-global file). Concurrent instance:prepare or parallel test
|
|
240
|
-
runs can rewrite it under you — in scripted/parallel flows pass
|
|
241
|
-
-i <instance> on every command instead of relying on \`use\`.
|
|
242
|
-
|
|
243
|
-
Examples:
|
|
244
|
-
$ astrale instance use staging
|
|
245
|
-
$ astrale instance use staging --adopt-default
|
|
246
|
-
`,
|
|
247
|
-
arguments: [{ name: 'name', description: 'Registered instance name', required: false }],
|
|
248
|
-
options: [
|
|
249
|
-
...ADMIN_TARGET_OPTIONS,
|
|
250
|
-
{
|
|
251
|
-
flags: '--adopt-default',
|
|
252
|
-
description: 'Adopt instance default identity without prompt',
|
|
253
|
-
},
|
|
254
|
-
{ flags: '--skip-jwks-check', description: 'Skip the OIDC discovery + JWKS liveness probe' },
|
|
255
|
-
],
|
|
256
|
-
action: async (name: string | undefined, opts: UseOpts) => {
|
|
257
|
-
await useInstance(name, opts)
|
|
258
|
-
},
|
|
259
|
-
} satisfies CommandDefinition
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { Path } from '@astrale-os/sdk/graph/path'
|
|
2
|
-
|
|
3
|
-
import type { KernelCommandOpts } from '../connection'
|
|
4
|
-
import type { CommandDefinition } from '../program/index'
|
|
5
|
-
|
|
6
|
-
import { runKernelCommand } from '../connection'
|
|
7
|
-
import { AstraleError } from '../errors'
|
|
8
|
-
import { failInput } from '../lib/log'
|
|
9
|
-
import { output } from '../lib/output'
|
|
10
|
-
import { describeCallableFromBundle, missingCallableDescription } from './call-describe'
|
|
11
|
-
|
|
12
|
-
type IntrospectOpts = KernelCommandOpts & { bundle?: boolean }
|
|
13
|
-
|
|
14
|
-
export async function introspectCommand(target: string, opts: IntrospectOpts): Promise<void> {
|
|
15
|
-
let origin: string
|
|
16
|
-
let path: Path
|
|
17
|
-
try {
|
|
18
|
-
;({ origin, path } = parseIntrospectTarget(target))
|
|
19
|
-
} catch (error) {
|
|
20
|
-
failInput(error, opts)
|
|
21
|
-
}
|
|
22
|
-
const wantsCallable = isCallablePath(path)
|
|
23
|
-
|
|
24
|
-
await runKernelCommand({
|
|
25
|
-
opts,
|
|
26
|
-
label: `Introspect ${origin}`,
|
|
27
|
-
fn: async ({ session }) => {
|
|
28
|
-
const includeBundle = wantsCallable || opts.bundle === true
|
|
29
|
-
const result = await session.schema.introspect({
|
|
30
|
-
from: { kind: 'installation', origin },
|
|
31
|
-
select: {
|
|
32
|
-
state: true,
|
|
33
|
-
target: true,
|
|
34
|
-
source: true,
|
|
35
|
-
readiness: true,
|
|
36
|
-
capabilities: true,
|
|
37
|
-
...(includeBundle ? { bundle: true as const } : {}),
|
|
38
|
-
},
|
|
39
|
-
})
|
|
40
|
-
if (result === null) {
|
|
41
|
-
throw new AstraleError(
|
|
42
|
-
'DOMAIN_NOT_INSTALLED',
|
|
43
|
-
`Domain ${origin} is not installed on this Kernel.`,
|
|
44
|
-
)
|
|
45
|
-
}
|
|
46
|
-
if (wantsCallable) {
|
|
47
|
-
const described = describeCallableFromBundle(path, result.bundle)
|
|
48
|
-
if (described === undefined) throw missingCallableDescription(path.raw)
|
|
49
|
-
return described
|
|
50
|
-
}
|
|
51
|
-
return result
|
|
52
|
-
},
|
|
53
|
-
format: (value, format) => output(value, format),
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function parseIntrospectTarget(target: string): { origin: string; path: Path } {
|
|
58
|
-
if (target.startsWith('@')) {
|
|
59
|
-
throw new AstraleError(
|
|
60
|
-
'NOT_A_DOMAIN',
|
|
61
|
-
'introspect requires a Domain origin or Path, not an @id.',
|
|
62
|
-
'Example: astrale introspect host.astrale.ai or /:host.astrale.ai:class.Manager:createInstance',
|
|
63
|
-
)
|
|
64
|
-
}
|
|
65
|
-
const raw = target.startsWith('/') ? target : `/:${target}`
|
|
66
|
-
let path: Path
|
|
67
|
-
try {
|
|
68
|
-
path = Path.parse(raw)
|
|
69
|
-
} catch (error) {
|
|
70
|
-
throw new AstraleError(
|
|
71
|
-
'PATH_INVALID',
|
|
72
|
-
error instanceof Error ? error.message : 'Invalid introspect target',
|
|
73
|
-
)
|
|
74
|
-
}
|
|
75
|
-
if (path.ast.anchor.kind !== 'domain') {
|
|
76
|
-
throw new AstraleError('NOT_A_DOMAIN', 'introspect requires a Domain-rooted Path or origin.')
|
|
77
|
-
}
|
|
78
|
-
return { origin: path.ast.anchor.origin, path }
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function isCallablePath(path: Path): boolean {
|
|
82
|
-
const last = path.ast.steps.at(-1)
|
|
83
|
-
if (last === undefined) return false
|
|
84
|
-
if (last.kind === 'method') return true
|
|
85
|
-
return last.kind === 'projection' && last.projection.kind === 'function'
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export default {
|
|
89
|
-
name: 'introspect',
|
|
90
|
-
description: 'Read installed Domain schema from the Kernel Schema syscall',
|
|
91
|
-
afterHelpText: `
|
|
92
|
-
Behavior:
|
|
93
|
-
Calls the public Kernel introspect syscall for one installed Domain.
|
|
94
|
-
A bare origin (host.astrale.ai or /:host.astrale.ai) prints installation
|
|
95
|
-
state, target, source, readiness, and capabilities. --bundle includes the
|
|
96
|
-
schema bundle. A method or Function Path projects that callable's
|
|
97
|
-
input/output from the installed bundle.
|
|
98
|
-
|
|
99
|
-
Examples:
|
|
100
|
-
$ astrale introspect host.astrale.ai
|
|
101
|
-
$ astrale introspect /:host.astrale.ai --bundle
|
|
102
|
-
$ astrale introspect /:host.astrale.ai:class.Manager:createInstance
|
|
103
|
-
$ astrale introspect /:kernel.astrale.ai:function.journal
|
|
104
|
-
`,
|
|
105
|
-
arguments: [{ name: 'target', description: 'Domain origin or canonical Path' }],
|
|
106
|
-
options: [{ flags: '--bundle', description: 'Include the installed schema bundle' }],
|
|
107
|
-
action: async (target, opts) => {
|
|
108
|
-
await introspectCommand(target as string, opts as IntrospectOpts)
|
|
109
|
-
},
|
|
110
|
-
} satisfies CommandDefinition
|
package/src/commands/logs.ts
DELETED
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
import { Path } from '@astrale-os/sdk/graph/path'
|
|
2
|
-
import { K } from '@astrale-os/sdk/schema'
|
|
3
|
-
import chalk from 'chalk'
|
|
4
|
-
|
|
5
|
-
import type { ConnectionContext, KernelCommandOpts } from '../connection'
|
|
6
|
-
import type { Column, ListProjection } from '../lib/output'
|
|
7
|
-
import type { CommandDefinition } from '../program/index'
|
|
8
|
-
|
|
9
|
-
import { createPathCall, expandSelfInPath, runKernelCommand } from '../connection'
|
|
10
|
-
import { failInput } from '../lib/log'
|
|
11
|
-
import { isMachine, output, presentList } from '../lib/output'
|
|
12
|
-
|
|
13
|
-
const JOURNAL_PATH = Path.project(K.functions.journal.ref).raw
|
|
14
|
-
const DEFAULT_LIMIT = 200
|
|
15
|
-
const FOLLOW_INTERVAL_MS = 2_000
|
|
16
|
-
|
|
17
|
-
type LogsOpts = KernelCommandOpts & {
|
|
18
|
-
since?: string
|
|
19
|
-
until?: string
|
|
20
|
-
topic?: string
|
|
21
|
-
topicPrefix?: string
|
|
22
|
-
principal?: string
|
|
23
|
-
limit?: string
|
|
24
|
-
cursor?: string
|
|
25
|
-
follow?: boolean
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface JournalRecord {
|
|
29
|
-
readonly sequence: number
|
|
30
|
-
readonly timestamp: string
|
|
31
|
-
readonly topic: string
|
|
32
|
-
readonly payload: unknown
|
|
33
|
-
readonly occurredAt?: string
|
|
34
|
-
readonly committedAt?: string
|
|
35
|
-
readonly principal?: string
|
|
36
|
-
readonly correlationId?: string
|
|
37
|
-
readonly causationId?: string
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface JournalPage {
|
|
41
|
-
readonly records: readonly JournalRecord[]
|
|
42
|
-
readonly cursor?: string
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export interface JournalInput {
|
|
46
|
-
readonly topics?: { readonly exact?: readonly string[]; readonly prefixes?: readonly string[] }
|
|
47
|
-
readonly principal?: string
|
|
48
|
-
readonly since?: string
|
|
49
|
-
readonly until?: string
|
|
50
|
-
readonly cursor?: string
|
|
51
|
-
readonly limit: number
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const ISO_TIMESTAMP = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/
|
|
55
|
-
const CURSOR_TOKEN = /^[A-Za-z0-9._:+=/-]{8,}$/
|
|
56
|
-
|
|
57
|
-
/** Map flags to the exact public journal syscall input without legacy glob/sequence lowering. */
|
|
58
|
-
export function buildJournalInput(opts: LogsOpts): JournalInput {
|
|
59
|
-
const exact = nonEmpty(opts.topic)
|
|
60
|
-
const prefix = nonEmpty(opts.topicPrefix)
|
|
61
|
-
const since = timestampFlag('--since', opts.since)
|
|
62
|
-
const until = timestampFlag('--until', opts.until)
|
|
63
|
-
if (since !== undefined && until !== undefined && Date.parse(since) > Date.parse(until)) {
|
|
64
|
-
throw new TypeError('--since must be earlier than or equal to --until')
|
|
65
|
-
}
|
|
66
|
-
return {
|
|
67
|
-
...(exact === undefined && prefix === undefined
|
|
68
|
-
? {}
|
|
69
|
-
: {
|
|
70
|
-
topics: {
|
|
71
|
-
...(exact === undefined ? {} : { exact: [exact] }),
|
|
72
|
-
...(prefix === undefined ? {} : { prefixes: [prefix] }),
|
|
73
|
-
},
|
|
74
|
-
}),
|
|
75
|
-
...(nonEmpty(opts.principal) === undefined ? {} : { principal: opts.principal }),
|
|
76
|
-
...(since === undefined ? {} : { since }),
|
|
77
|
-
...(until === undefined ? {} : { until }),
|
|
78
|
-
...(opts.cursor === undefined ? {} : { cursor: cursorFlag(opts.cursor) }),
|
|
79
|
-
limit: opts.limit === undefined ? DEFAULT_LIMIT : positiveInteger('--limit', opts.limit),
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function timestampFlag(name: string, raw: string | undefined): string | undefined {
|
|
84
|
-
const value = nonEmpty(raw)
|
|
85
|
-
if (value === undefined) return undefined
|
|
86
|
-
if (!ISO_TIMESTAMP.test(value) || Number.isNaN(Date.parse(value))) {
|
|
87
|
-
throw new TypeError(`${name} must be an ISO-8601 timestamp (e.g. 2026-08-19T16:51:10.049Z)`)
|
|
88
|
-
}
|
|
89
|
-
return value
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function cursorFlag(raw: string): string {
|
|
93
|
-
const value = raw.trim()
|
|
94
|
-
if (!CURSOR_TOKEN.test(value)) {
|
|
95
|
-
throw new TypeError('--cursor must be an opaque journal resume token (at least 8 characters)')
|
|
96
|
-
}
|
|
97
|
-
return value
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/** Validate the record fields the CLI presentation consumes and retain the opaque cursor. */
|
|
101
|
-
export function acceptJournalPage(input: unknown): JournalPage {
|
|
102
|
-
if (!isRecord(input) || !Array.isArray(input.records)) {
|
|
103
|
-
throw new TypeError('Kernel journal response must contain a records array')
|
|
104
|
-
}
|
|
105
|
-
const records = input.records.map((record, index) => acceptRecord(record, index))
|
|
106
|
-
if (input.cursor !== undefined && typeof input.cursor !== 'string') {
|
|
107
|
-
throw new TypeError('Kernel journal cursor must be text')
|
|
108
|
-
}
|
|
109
|
-
return Object.freeze({
|
|
110
|
-
records: Object.freeze(records),
|
|
111
|
-
...(input.cursor === undefined ? {} : { cursor: input.cursor }),
|
|
112
|
-
})
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
async function fetchPage(context: ConnectionContext, opts: LogsOpts): Promise<JournalPage> {
|
|
116
|
-
return acceptJournalPage(
|
|
117
|
-
await context.session.call(createPathCall(JOURNAL_PATH, buildJournalInput(opts))),
|
|
118
|
-
)
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
async function runOnce(opts: LogsOpts): Promise<void> {
|
|
122
|
-
await runKernelCommand({
|
|
123
|
-
opts,
|
|
124
|
-
label: 'Kernel journal',
|
|
125
|
-
fn: async (context) => fetchPage(context, await resolveLogsOpts(opts, context)),
|
|
126
|
-
format: (page, format) => {
|
|
127
|
-
if (isMachine(format) || format.format !== undefined) output(page, format)
|
|
128
|
-
else {
|
|
129
|
-
presentList([...page.records], format, journalProjection)
|
|
130
|
-
if (page.cursor) process.stderr.write(` cursor: ${page.cursor}\n`)
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
})
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
async function follow(opts: LogsOpts): Promise<void> {
|
|
137
|
-
await runKernelCommand({
|
|
138
|
-
opts,
|
|
139
|
-
label: 'Kernel journal',
|
|
140
|
-
fn: async (context): Promise<never> => {
|
|
141
|
-
const resolved = await resolveLogsOpts(opts, context)
|
|
142
|
-
let cursor = resolved.cursor
|
|
143
|
-
for (;;) {
|
|
144
|
-
const page = await fetchPage(context, { ...resolved, cursor })
|
|
145
|
-
for (const record of page.records) printRecord(record)
|
|
146
|
-
cursor = page.cursor ?? cursor
|
|
147
|
-
await new Promise((resolve) => setTimeout(resolve, FOLLOW_INTERVAL_MS))
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
})
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
function journalProjection(records: JournalRecord[]): ListProjection {
|
|
154
|
-
const columns: Column[] = [
|
|
155
|
-
{ key: 'sequence', header: 'SEQ', color: chalk.dim },
|
|
156
|
-
{ key: 'timestamp', header: 'TIME', color: chalk.dim },
|
|
157
|
-
{ key: 'topic', header: 'TOPIC', color: chalk.cyan },
|
|
158
|
-
{ key: 'principal', header: 'PRINCIPAL', color: chalk.dim },
|
|
159
|
-
]
|
|
160
|
-
return {
|
|
161
|
-
columns,
|
|
162
|
-
rows: records.map((record) => ({
|
|
163
|
-
sequence: String(record.sequence),
|
|
164
|
-
timestamp: record.timestamp,
|
|
165
|
-
topic: record.topic,
|
|
166
|
-
principal: record.principal ?? '',
|
|
167
|
-
})),
|
|
168
|
-
paths: records.map((record) => String(record.sequence)),
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
function printRecord(record: JournalRecord): void {
|
|
173
|
-
process.stdout.write(
|
|
174
|
-
`${chalk.dim(String(record.sequence).padStart(6))} ${chalk.dim(record.timestamp)} ${chalk.cyan(record.topic)} ${chalk.dim(record.principal ?? '')}\n`,
|
|
175
|
-
)
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
function acceptRecord(input: unknown, index: number): JournalRecord {
|
|
179
|
-
if (
|
|
180
|
-
!isRecord(input) ||
|
|
181
|
-
!Number.isSafeInteger(input.sequence) ||
|
|
182
|
-
typeof input.topic !== 'string'
|
|
183
|
-
) {
|
|
184
|
-
throw new TypeError(`Kernel journal record ${index} is invalid`)
|
|
185
|
-
}
|
|
186
|
-
const occurredAt = optionalText(input.occurredAt, index, 'occurredAt')
|
|
187
|
-
const timestamp = optionalText(input.timestamp, index, 'timestamp') ?? occurredAt
|
|
188
|
-
if (timestamp === undefined) {
|
|
189
|
-
throw new TypeError(`Kernel journal record ${index} is missing occurredAt/timestamp`)
|
|
190
|
-
}
|
|
191
|
-
const correlation = isRecord(input.correlation) ? input.correlation : undefined
|
|
192
|
-
const correlationId =
|
|
193
|
-
optionalText(input.correlationId, index, 'correlationId') ??
|
|
194
|
-
optionalText(correlation?.invocationId, index, 'correlation.invocationId')
|
|
195
|
-
const principal = optionalText(input.principal, index, 'principal')
|
|
196
|
-
return Object.freeze({
|
|
197
|
-
sequence: input.sequence as number,
|
|
198
|
-
timestamp,
|
|
199
|
-
topic: input.topic,
|
|
200
|
-
payload: input.payload,
|
|
201
|
-
...(occurredAt === undefined ? {} : { occurredAt }),
|
|
202
|
-
...(optionalText(input.committedAt, index, 'committedAt') === undefined
|
|
203
|
-
? {}
|
|
204
|
-
: { committedAt: input.committedAt as string }),
|
|
205
|
-
...(principal === undefined ? {} : { principal }),
|
|
206
|
-
...(correlationId === undefined ? {} : { correlationId }),
|
|
207
|
-
...(optionalText(input.causationId, index, 'causationId') === undefined
|
|
208
|
-
? {}
|
|
209
|
-
: { causationId: input.causationId as string }),
|
|
210
|
-
})
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function optionalText(input: unknown, index: number, field: string): string | undefined {
|
|
214
|
-
if (input === undefined) return undefined
|
|
215
|
-
if (typeof input !== 'string') {
|
|
216
|
-
throw new TypeError(`Kernel journal record ${index}.${field} must be text`)
|
|
217
|
-
}
|
|
218
|
-
return input
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
function positiveInteger(flag: string, raw: string): number {
|
|
222
|
-
if (!/^\d+$/.test(raw)) throw new TypeError(`${flag} must be a positive integer`)
|
|
223
|
-
const value = Number.parseInt(raw, 10)
|
|
224
|
-
if (!Number.isSafeInteger(value) || value <= 0) {
|
|
225
|
-
throw new TypeError(`${flag} must be a positive integer`)
|
|
226
|
-
}
|
|
227
|
-
return value
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
async function resolveLogsOpts(opts: LogsOpts, context: ConnectionContext): Promise<LogsOpts> {
|
|
231
|
-
const principal = nonEmpty(opts.principal)
|
|
232
|
-
if (principal !== '@self') return opts
|
|
233
|
-
const { path } = await expandSelfInPath('@self', context)
|
|
234
|
-
return { ...opts, principal: path.startsWith('@') ? path.slice(1) : path }
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
function nonEmpty(input: string | undefined): string | undefined {
|
|
238
|
-
const value = input?.trim()
|
|
239
|
-
return value ? value : undefined
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function isRecord(input: unknown): input is Record<string, unknown> {
|
|
243
|
-
return input !== null && typeof input === 'object' && !Array.isArray(input)
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
export default {
|
|
247
|
-
name: 'logs',
|
|
248
|
-
description: 'Read or follow the authorized Kernel journal',
|
|
249
|
-
afterHelpText: `
|
|
250
|
-
Behavior:
|
|
251
|
-
Calls the public Kernel journal syscall and emits its { records, cursor }
|
|
252
|
-
page. Topic selection is exact or prefix-based; cursors and timestamps are
|
|
253
|
-
opaque strings owned by the journal backend. --follow reuses one Client Session
|
|
254
|
-
and advances only with the returned cursor.
|
|
255
|
-
|
|
256
|
-
Historical event-glob lowering and the application-specific services-domain
|
|
257
|
-
log buffer are not part of the Kernel V2 journal contract.
|
|
258
|
-
|
|
259
|
-
Examples:
|
|
260
|
-
$ astrale logs -i staging --limit 50
|
|
261
|
-
$ astrale logs --topic op:function.failed
|
|
262
|
-
$ astrale logs --topic-prefix op:function. --follow
|
|
263
|
-
`,
|
|
264
|
-
options: [
|
|
265
|
-
{ flags: '--since <timestamp>', description: 'Inclusive journal timestamp lower bound' },
|
|
266
|
-
{ flags: '--until <timestamp>', description: 'Inclusive journal timestamp upper bound' },
|
|
267
|
-
{ flags: '--topic <topic>', description: 'Match one exact topic' },
|
|
268
|
-
{ flags: '--topic-prefix <prefix>', description: 'Match one topic prefix' },
|
|
269
|
-
{ flags: '--principal <id>', description: 'Filter by triggering identity ID' },
|
|
270
|
-
{ flags: '--limit <n>', description: `Maximum records (default: ${DEFAULT_LIMIT})` },
|
|
271
|
-
{ flags: '--cursor <token>', description: 'Resume from an opaque journal cursor' },
|
|
272
|
-
{ flags: '--follow', description: 'Poll using returned cursors until interrupted' },
|
|
273
|
-
],
|
|
274
|
-
action: async (opts: LogsOpts) => {
|
|
275
|
-
try {
|
|
276
|
-
buildJournalInput(opts)
|
|
277
|
-
} catch (error) {
|
|
278
|
-
failInput(error, opts)
|
|
279
|
-
}
|
|
280
|
-
if (opts.follow) await follow(opts)
|
|
281
|
-
else await runOnce(opts)
|
|
282
|
-
},
|
|
283
|
-
} satisfies CommandDefinition
|