@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,133 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
import type { KernelCommandOpts } from '../../connection'
|
|
4
|
-
import type { CommandDefinition } from '../../program/index'
|
|
5
|
-
|
|
6
|
-
import { publishAdminDomain } from '../../lib/admin-domain'
|
|
7
|
-
import { ADMIN_TARGET_OPTIONS, type AdminTargetCommandOpts } from '../../lib/admin-target'
|
|
8
|
-
import { fatal, withSpinner } from '../../lib/log'
|
|
9
|
-
import { isMachine, output } from '../../lib/output'
|
|
10
|
-
import { promptText } from '../../lib/prompt'
|
|
11
|
-
import { isHttpUrl, validateName, validateUrl } from '../../lib/validation'
|
|
12
|
-
|
|
13
|
-
type PublishOpts = KernelCommandOpts &
|
|
14
|
-
AdminTargetCommandOpts & {
|
|
15
|
-
origin?: string
|
|
16
|
-
name?: string
|
|
17
|
-
// `--public-url`, not `--url`: the global `--url` already means "target this
|
|
18
|
-
// kernel" (KERNEL_PASSTHROUGH_OPTIONS). This is the domain's own public
|
|
19
|
-
// address the kernel installs from — named for the role, not the substrate.
|
|
20
|
-
publicUrl?: string
|
|
21
|
-
description?: string
|
|
22
|
-
installByDefault?: boolean
|
|
23
|
-
// Global flags (program.ts) that force non-interactive — mirrors `instance use`.
|
|
24
|
-
ci?: boolean
|
|
25
|
-
noPrompt?: boolean
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/** Host of a URL (the natural `origin` default), or undefined if unparseable. */
|
|
29
|
-
function hostOf(url?: string): string | undefined {
|
|
30
|
-
if (!url) return undefined
|
|
31
|
-
try {
|
|
32
|
-
return new URL(url).host
|
|
33
|
-
} catch {
|
|
34
|
-
return undefined
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export default {
|
|
39
|
-
name: 'publish',
|
|
40
|
-
description: 'Register a deployed domain in the admin catalog (DomainEntry.publish)',
|
|
41
|
-
afterHelpText: `
|
|
42
|
-
Behavior:
|
|
43
|
-
Upserts a catalog entry on the configured admin kernel: a domain's addressing
|
|
44
|
-
\`origin\`, registry \`name\`, and published \`url\` (no bytes, no version — the
|
|
45
|
-
author deploys the worker independently; publish just points the registry at
|
|
46
|
-
it). Idempotent: re-publishing the same name updates its url — and a publish
|
|
47
|
-
that would change nothing is reported as "already up to date" (no write).
|
|
48
|
-
|
|
49
|
-
Publishing only makes the domain INSTALLABLE. Mount it on an instance with
|
|
50
|
-
\`astrale domain install <url>\` (or rely on the admin's install-by-default
|
|
51
|
-
policy). This is usually invoked for you by \`astrale-domain publish\` (which
|
|
52
|
-
registers the already-deployed URL — it does NOT deploy) or by
|
|
53
|
-
\`astrale-domain deploy --publish\` (deploy AND register in one step).
|
|
54
|
-
|
|
55
|
-
Run in a terminal with flags omitted and it PROMPTS for origin / name /
|
|
56
|
-
public-url (origin defaults to the URL host, name to the origin's first
|
|
57
|
-
label). With no TTY — or \`--ci\` / \`--no-prompt\` — those three are required
|
|
58
|
-
up front, so piped / CI / agent runs fail fast instead of waiting on input.
|
|
59
|
-
|
|
60
|
-
Examples:
|
|
61
|
-
$ astrale domain publish --origin crm.acme.dev --name crm --public-url https://crm.acme.dev
|
|
62
|
-
`,
|
|
63
|
-
options: [
|
|
64
|
-
...ADMIN_TARGET_OPTIONS,
|
|
65
|
-
{ flags: '--origin <origin>', description: 'Domain addressing origin (e.g. crm.acme.dev)' },
|
|
66
|
-
{ flags: '--name <name>', description: 'Registry name / catalog slug (e.g. crm)' },
|
|
67
|
-
{ flags: '--public-url <url>', description: 'Public URL the kernel installs the domain from' },
|
|
68
|
-
{ flags: '--description <text>', description: 'Optional human description for the catalog' },
|
|
69
|
-
{
|
|
70
|
-
flags: '--install-by-default',
|
|
71
|
-
description: 'Mark the domain for install on every new instance (alphaCreate)',
|
|
72
|
-
},
|
|
73
|
-
],
|
|
74
|
-
// No positional arguments → Commander passes (opts, command); `opts` is first.
|
|
75
|
-
action: async (opts: PublishOpts) => {
|
|
76
|
-
try {
|
|
77
|
-
// Interactive fill (TTY only): a human running this by hand is prompted for
|
|
78
|
-
// any missing field. The primary caller — `astrale-domain publish` — always
|
|
79
|
-
// passes every flag, so it never prompts. No TTY / --ci / --no-prompt / CI
|
|
80
|
-
// env → no prompt: fall straight through to the required-flag error below,
|
|
81
|
-
// so a piped / agent / LLM run fails fast instead of hanging on a read.
|
|
82
|
-
const interactive = !!process.stdin.isTTY && !(opts.ci || opts.noPrompt || process.env.CI)
|
|
83
|
-
let { origin, name, publicUrl } = opts
|
|
84
|
-
if (interactive) {
|
|
85
|
-
if (!publicUrl)
|
|
86
|
-
publicUrl = await promptText('Public URL (https://…)', {
|
|
87
|
-
validate: (v) => isHttpUrl(v) || 'Enter a valid http(s) URL',
|
|
88
|
-
})
|
|
89
|
-
if (!origin)
|
|
90
|
-
origin = await promptText('Domain origin (e.g. crm.acme.dev)', {
|
|
91
|
-
default: hostOf(publicUrl),
|
|
92
|
-
})
|
|
93
|
-
if (!name) name = await promptText('Registry name', { default: origin?.split('.')[0] })
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (!origin || !name || !publicUrl) {
|
|
97
|
-
throw new Error(
|
|
98
|
-
'domain publish requires --origin, --name and --public-url, e.g.\n' +
|
|
99
|
-
' astrale domain publish --origin crm.acme.dev --name crm --public-url https://crm.acme.dev',
|
|
100
|
-
)
|
|
101
|
-
}
|
|
102
|
-
validateName(origin, 'origin')
|
|
103
|
-
validateName(name, 'domain')
|
|
104
|
-
validateUrl(publicUrl)
|
|
105
|
-
|
|
106
|
-
const result = await withSpinner(
|
|
107
|
-
`Publishing ${name} → ${publicUrl}`,
|
|
108
|
-
!isMachine(opts),
|
|
109
|
-
() =>
|
|
110
|
-
publishAdminDomain(opts, {
|
|
111
|
-
origin,
|
|
112
|
-
name,
|
|
113
|
-
url: publicUrl,
|
|
114
|
-
...(opts.description ? { description: opts.description } : {}),
|
|
115
|
-
...(opts.installByDefault ? { installByDefault: true } : {}),
|
|
116
|
-
}),
|
|
117
|
-
{
|
|
118
|
-
success: ({ entry, changed, isNew }) =>
|
|
119
|
-
changed
|
|
120
|
-
? `${isNew ? 'Published' : 'Updated'}: ${entry.name} ${chalk.dim(`(${entry.origin} → ${entry.url})`)}`
|
|
121
|
-
: `Already up to date: ${entry.name} ${chalk.dim(`(${entry.origin} → ${entry.url} — no change, already latest)`)}`,
|
|
122
|
-
},
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
if (isMachine(opts)) {
|
|
126
|
-
output({ ...result.entry, changed: result.changed }, opts)
|
|
127
|
-
return
|
|
128
|
-
}
|
|
129
|
-
} catch (e) {
|
|
130
|
-
fatal(e)
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
} satisfies CommandDefinition
|
|
@@ -1,128 +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 { KernelCommandOpts } from '../../connection'
|
|
6
|
-
import type { CommandDefinition } from '../../program/index'
|
|
7
|
-
|
|
8
|
-
import { createPathCall, runKernelCommand } from '../../connection'
|
|
9
|
-
import { AstraleError } from '../../errors'
|
|
10
|
-
import { fatal, log } from '../../lib/log'
|
|
11
|
-
import { output } from '../../lib/output'
|
|
12
|
-
import { confirmWithInput } from '../../lib/prompt'
|
|
13
|
-
|
|
14
|
-
type UninstallOpts = KernelCommandOpts & {
|
|
15
|
-
readonly yes?: boolean
|
|
16
|
-
readonly ci?: boolean
|
|
17
|
-
readonly noPrompt?: boolean
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
type UninstallResult = {
|
|
21
|
-
readonly operation: string
|
|
22
|
-
readonly transition: {
|
|
23
|
-
readonly intent: {
|
|
24
|
-
readonly origin: string
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Public Kernel uninstall syscall input for one installed Domain origin. */
|
|
30
|
-
export function uninstallCallInput(
|
|
31
|
-
origin: string,
|
|
32
|
-
operation: string = crypto.randomUUID(),
|
|
33
|
-
): Readonly<{ operation: string; origin: string }> {
|
|
34
|
-
return Object.freeze({ operation, origin })
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export default {
|
|
38
|
-
name: 'uninstall',
|
|
39
|
-
description: 'Uninstall a domain from an instance through the public Kernel syscall',
|
|
40
|
-
afterHelpText: `
|
|
41
|
-
Behavior:
|
|
42
|
-
Removes one installed Domain origin from the target instance. The Kernel
|
|
43
|
-
refuses the operation while another installed Domain depends on it or while
|
|
44
|
-
business data still uses its schema. Uninstall never deletes business data.
|
|
45
|
-
Type the exact origin to confirm, or pass --yes in automation.
|
|
46
|
-
|
|
47
|
-
Use this before reinstalling only when an immutable Domain property (such as
|
|
48
|
-
its issuer) intentionally changed. Ordinary compatible upgrades should use
|
|
49
|
-
domain install directly and preserve the existing Domain identity.
|
|
50
|
-
|
|
51
|
-
Examples:
|
|
52
|
-
$ astrale domain uninstall grc.example -i staging
|
|
53
|
-
$ astrale domain uninstall grc.example -i staging --yes --json
|
|
54
|
-
`,
|
|
55
|
-
arguments: [
|
|
56
|
-
{
|
|
57
|
-
name: 'origin',
|
|
58
|
-
description: 'Installed Domain origin to remove',
|
|
59
|
-
required: true,
|
|
60
|
-
},
|
|
61
|
-
],
|
|
62
|
-
options: [
|
|
63
|
-
{
|
|
64
|
-
flags: '--yes',
|
|
65
|
-
description: 'Confirm Domain uninstall without prompting',
|
|
66
|
-
},
|
|
67
|
-
],
|
|
68
|
-
action: async (origin: string, opts: UninstallOpts) => {
|
|
69
|
-
try {
|
|
70
|
-
await confirmUninstall(origin, opts)
|
|
71
|
-
} catch (error) {
|
|
72
|
-
fatal(error, opts)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
await runKernelCommand<UninstallResult>({
|
|
76
|
-
opts,
|
|
77
|
-
label: `Uninstalling domain ${origin}`,
|
|
78
|
-
fn: async ({ session }) =>
|
|
79
|
-
(await session.call(
|
|
80
|
-
createPathCall(Path.project(K.functions.uninstall.ref).raw, uninstallCallInput(origin)),
|
|
81
|
-
)) as UninstallResult,
|
|
82
|
-
format: (result, formatOpts, machine) => {
|
|
83
|
-
if (machine) {
|
|
84
|
-
output(result, formatOpts)
|
|
85
|
-
return
|
|
86
|
-
}
|
|
87
|
-
log.success(`Domain uninstalled: ${result.transition.intent.origin}`)
|
|
88
|
-
log.dim(` operation: ${result.operation}`)
|
|
89
|
-
},
|
|
90
|
-
})
|
|
91
|
-
},
|
|
92
|
-
} satisfies CommandDefinition
|
|
93
|
-
|
|
94
|
-
async function confirmUninstall(origin: string, opts: UninstallOpts): Promise<void> {
|
|
95
|
-
if (opts.yes) return
|
|
96
|
-
|
|
97
|
-
const nonInteractive =
|
|
98
|
-
opts.ci ||
|
|
99
|
-
opts.noPrompt ||
|
|
100
|
-
process.env.CI ||
|
|
101
|
-
process.argv.includes('--ci') ||
|
|
102
|
-
process.argv.includes('--no-prompt') ||
|
|
103
|
-
!process.stdin.isTTY
|
|
104
|
-
if (nonInteractive) {
|
|
105
|
-
throw new AstraleError(
|
|
106
|
-
'CONFIRMATION_REQUIRED',
|
|
107
|
-
`Uninstalling Domain "${origin}" requires explicit confirmation.`,
|
|
108
|
-
`Re-run with --yes: astrale domain uninstall ${origin} --yes`,
|
|
109
|
-
)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
const warning =
|
|
113
|
-
chalk.red.bold('⚠ DANGER — DOMAIN UNINSTALL') +
|
|
114
|
-
'\n' +
|
|
115
|
-
chalk.dim('│') +
|
|
116
|
-
` origin ${chalk.bold(origin)}\n` +
|
|
117
|
-
chalk.dim('│') +
|
|
118
|
-
'\n' +
|
|
119
|
-
chalk.dim('│') +
|
|
120
|
-
' This removes the installed Domain from the target instance.\n' +
|
|
121
|
-
chalk.dim('│') +
|
|
122
|
-
' This command never deletes business data.\n' +
|
|
123
|
-
chalk.dim('│') +
|
|
124
|
-
' The Kernel refuses removal while dependents or business data remain.'
|
|
125
|
-
if (!(await confirmWithInput(warning, origin))) {
|
|
126
|
-
throw new AstraleError('UNINSTALL_CANCELLED', `Domain uninstall cancelled for "${origin}".`)
|
|
127
|
-
}
|
|
128
|
-
}
|
package/src/commands/get.ts
DELETED
|
@@ -1,69 +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 { expandSelfInPath, runKernelCommand, withSelfHint } from '../connection'
|
|
7
|
-
import { AstraleError } from '../errors'
|
|
8
|
-
import { failInput, fatal } from '../lib/log'
|
|
9
|
-
import { denoise, output } from '../lib/output'
|
|
10
|
-
|
|
11
|
-
type GetOpts = KernelCommandOpts & { schema?: boolean }
|
|
12
|
-
|
|
13
|
-
/** Read one exact canonical Node. The caller's Path is not fabricated into the Node value. */
|
|
14
|
-
export async function getCommand(target: string, opts: GetOpts): Promise<void> {
|
|
15
|
-
let parsed
|
|
16
|
-
try {
|
|
17
|
-
parsed = Path.parse(target)
|
|
18
|
-
} catch (error) {
|
|
19
|
-
failInput(error, opts)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
const last = parsed.ast.steps.at(-1)
|
|
23
|
-
if (last?.kind === 'method') {
|
|
24
|
-
const error = new AstraleError(
|
|
25
|
-
'NOT_A_NODE',
|
|
26
|
-
`${target} is a callable Path, not a Node.`,
|
|
27
|
-
`Use \`astrale call ${target}\` or \`astrale introspect ${target}\`.`,
|
|
28
|
-
)
|
|
29
|
-
fatal(error, opts)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
await runKernelCommand({
|
|
33
|
-
opts,
|
|
34
|
-
label: `Node ${target}`,
|
|
35
|
-
fn: async (context) => {
|
|
36
|
-
const { path, meta } = await expandSelfInPath(target, context)
|
|
37
|
-
const resolved = meta === undefined ? parsed : Path.parse(path)
|
|
38
|
-
return withSelfHint(() => context.graph.getOrThrow(resolved), meta)
|
|
39
|
-
},
|
|
40
|
-
format: (node, format) => output(opts.schema === true ? node : denoise(node), format),
|
|
41
|
-
})
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export default {
|
|
45
|
-
name: 'get',
|
|
46
|
-
description: 'Get one canonical node by Path or ID',
|
|
47
|
-
afterHelpText: `
|
|
48
|
-
Behavior:
|
|
49
|
-
Resolves one exact Kernel V2 Path and prints the canonical Node
|
|
50
|
-
{ id, class, props }. Missing and authorization-masked nodes remain
|
|
51
|
-
intentionally indistinguishable. @self is expanded before dispatch.
|
|
52
|
-
|
|
53
|
-
A Node does not contain a synthetic path, labels, or backend class ID.
|
|
54
|
-
Method Paths are not Nodes — use call / introspect. Schema-valued
|
|
55
|
-
properties are omitted unless --schema is passed. Use query for
|
|
56
|
-
graph-shaped reads.
|
|
57
|
-
|
|
58
|
-
Examples:
|
|
59
|
-
$ astrale get /:notes.example.dev:class.Note
|
|
60
|
-
$ astrale get @abc123 --json
|
|
61
|
-
$ astrale get @self
|
|
62
|
-
$ astrale get /:host.astrale.ai --schema
|
|
63
|
-
`,
|
|
64
|
-
arguments: [{ name: 'target', description: 'Canonical Node Path or @id' }],
|
|
65
|
-
options: [{ flags: '--schema', description: 'Include schema-valued properties' }],
|
|
66
|
-
action: async (target, opts) => {
|
|
67
|
-
await getCommand(target as string, opts as GetOpts)
|
|
68
|
-
},
|
|
69
|
-
} satisfies CommandDefinition
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { issuer, jwk, provision } from '@astrale-os/sdk/auth'
|
|
2
|
-
import { normalizeProperties } from '@astrale-os/sdk/graph/properties'
|
|
3
|
-
import { expect, mock, test } from 'bun:test'
|
|
4
|
-
import { exportJWK, generateKeyPair, jwtVerify } from 'jose'
|
|
5
|
-
|
|
6
|
-
import { classKey } from '../../../graph'
|
|
7
|
-
import { formatIdentityRegistration, prepareIdentityProvision } from '../register'
|
|
8
|
-
|
|
9
|
-
/** @evidence TEST-CLI-IDENTITY-REGISTER-JSON-EXACT */
|
|
10
|
-
test('emits exactly one structured value for machine registration output', () => {
|
|
11
|
-
const writes: string[] = []
|
|
12
|
-
const logs: string[] = []
|
|
13
|
-
const originalWrite = process.stdout.write
|
|
14
|
-
const originalLog = console.log
|
|
15
|
-
process.stdout.write = mock((chunk: string | Uint8Array) => {
|
|
16
|
-
writes.push(typeof chunk === 'string' ? chunk : new TextDecoder().decode(chunk))
|
|
17
|
-
return true
|
|
18
|
-
}) as typeof process.stdout.write
|
|
19
|
-
console.log = mock((...values: unknown[]) => logs.push(values.map(String).join(' ')))
|
|
20
|
-
|
|
21
|
-
try {
|
|
22
|
-
formatIdentityRegistration(
|
|
23
|
-
{ iss: 'https://identity.example', sub: 'self', nodeId: 'operator-node' },
|
|
24
|
-
{ json: true },
|
|
25
|
-
true,
|
|
26
|
-
)
|
|
27
|
-
} finally {
|
|
28
|
-
process.stdout.write = originalWrite
|
|
29
|
-
console.log = originalLog
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
expect(JSON.parse(writes.join(''))).toEqual({
|
|
33
|
-
iss: 'https://identity.example',
|
|
34
|
-
sub: 'self',
|
|
35
|
-
nodeId: 'operator-node',
|
|
36
|
-
})
|
|
37
|
-
expect(logs).toEqual([])
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
test('builds one exact Mutation V3 identity birth bound to a self proof', async () => {
|
|
41
|
-
const { privateKey, publicKey } = await generateKeyPair('ES256', { extractable: true })
|
|
42
|
-
const privateJwk = { ...(await exportJWK(privateKey)), alg: 'ES256', kid: 'alice-key' }
|
|
43
|
-
const publicJwk = jwk.acceptPublic({
|
|
44
|
-
...(await exportJWK(publicKey)),
|
|
45
|
-
alg: 'ES256',
|
|
46
|
-
kid: 'alice-key',
|
|
47
|
-
})
|
|
48
|
-
const kernelIssuer = issuer.accept('https://kernel.example')
|
|
49
|
-
const classPath = classKey('/:accounts.example:class.User', '--class')
|
|
50
|
-
const properties = normalizeProperties({
|
|
51
|
-
'accounts.example:class.User.property.name': 'Alice',
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
const prepared = await prepareIdentityProvision({
|
|
55
|
-
name: 'alice',
|
|
56
|
-
classPath,
|
|
57
|
-
properties,
|
|
58
|
-
privateKey: privateJwk,
|
|
59
|
-
publicKey: publicJwk,
|
|
60
|
-
kernelIssuer,
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
expect(String(prepared.binding)).toBe('identity')
|
|
64
|
-
expect(prepared.request.idempotencyKey).toBe('identity-register:alice')
|
|
65
|
-
expect(JSON.parse(JSON.stringify(prepared.request.mutation))).toEqual({
|
|
66
|
-
format: 'astrale.graph.mutation',
|
|
67
|
-
version: 'v3',
|
|
68
|
-
preconditions: [],
|
|
69
|
-
operations: [
|
|
70
|
-
{
|
|
71
|
-
op: 'node.create',
|
|
72
|
-
as: 'identity',
|
|
73
|
-
class: 'accounts.example:class.User',
|
|
74
|
-
props: { 'accounts.example:class.User.property.name': 'Alice' },
|
|
75
|
-
},
|
|
76
|
-
],
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
const credentials = prepared.request.identities[prepared.binding]?.credentials
|
|
80
|
-
expect(credentials?.publicKey).toEqual(publicJwk)
|
|
81
|
-
expect(typeof credentials?.proof).toBe('string')
|
|
82
|
-
if (typeof credentials?.proof !== 'string') throw new TypeError('Expected compact JWT proof')
|
|
83
|
-
|
|
84
|
-
const expectedFingerprint = await provision.fingerprint(prepared.request)
|
|
85
|
-
const expectedIssuer = await provision.selfIssuer(kernelIssuer, publicJwk)
|
|
86
|
-
const verified = await jwtVerify(credentials.proof, publicKey, {
|
|
87
|
-
algorithms: ['ES256'],
|
|
88
|
-
issuer: expectedIssuer,
|
|
89
|
-
subject: 'self',
|
|
90
|
-
audience: kernelIssuer,
|
|
91
|
-
})
|
|
92
|
-
expect(verified.payload.provision).toBe(expectedFingerprint)
|
|
93
|
-
})
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { CommandDefinition } from '../../program/index'
|
|
2
|
-
|
|
3
|
-
import { createIdentity } from '../../identity/index'
|
|
4
|
-
import { fatal, log } from '../../lib/log'
|
|
5
|
-
import { isMachine, output, RAW_OUTPUT_OPTIONS, type RawOutputOpts } from '../../lib/output'
|
|
6
|
-
|
|
7
|
-
export default {
|
|
8
|
-
name: 'create',
|
|
9
|
-
description: 'Create a new identity',
|
|
10
|
-
arguments: [{ name: 'name', description: 'Identity name', required: true }],
|
|
11
|
-
options: [
|
|
12
|
-
{ flags: '--subject <sub>', description: 'Custom subject (defaults to name)' },
|
|
13
|
-
{ flags: '--local', description: 'Local-only identity (default)' },
|
|
14
|
-
{ flags: '--remote', description: 'Remote (cloud-synced) identity — requires cloud login' },
|
|
15
|
-
...RAW_OUTPUT_OPTIONS,
|
|
16
|
-
],
|
|
17
|
-
action: async (
|
|
18
|
-
name: string,
|
|
19
|
-
opts: { subject?: string; local?: boolean; remote?: boolean } & RawOutputOpts,
|
|
20
|
-
) => {
|
|
21
|
-
try {
|
|
22
|
-
const mode = opts.remote ? 'remote' : 'local'
|
|
23
|
-
const identity = await createIdentity(name, { subject: opts.subject, mode })
|
|
24
|
-
if (isMachine(opts)) {
|
|
25
|
-
output({ name, ...identity }, opts)
|
|
26
|
-
return
|
|
27
|
-
}
|
|
28
|
-
log.success(
|
|
29
|
-
`Created identity "${name}" (subject: ${identity.subject}, mode: ${identity.mode})`,
|
|
30
|
-
)
|
|
31
|
-
} catch (e) {
|
|
32
|
-
fatal(e, opts)
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
} satisfies CommandDefinition
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { CommandDefinition } from '../../program/index'
|
|
2
|
-
|
|
3
|
-
import { deleteIdentity } from '../../identity/index'
|
|
4
|
-
import { fatal, log } from '../../lib/log'
|
|
5
|
-
import { isMachine, output, RAW_OUTPUT_OPTIONS, type RawOutputOpts } from '../../lib/output'
|
|
6
|
-
|
|
7
|
-
export default {
|
|
8
|
-
name: 'delete',
|
|
9
|
-
description: 'Delete an identity',
|
|
10
|
-
arguments: [{ name: 'name', description: 'Identity name', required: true }],
|
|
11
|
-
options: [...RAW_OUTPUT_OPTIONS],
|
|
12
|
-
action: async (name: string, opts: RawOutputOpts) => {
|
|
13
|
-
try {
|
|
14
|
-
await deleteIdentity(name)
|
|
15
|
-
if (isMachine(opts)) {
|
|
16
|
-
output({ deleted: name }, opts)
|
|
17
|
-
return
|
|
18
|
-
}
|
|
19
|
-
log.success(`Deleted identity "${name}"`)
|
|
20
|
-
} catch (e) {
|
|
21
|
-
fatal(e, opts)
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
} satisfies CommandDefinition
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { CommandDefinition } from '../../program/index'
|
|
2
|
-
|
|
3
|
-
import { encodeIdentityExport, exportIdentity, writeIdentityExport } from '../../identity/index'
|
|
4
|
-
import { fatal, log } from '../../lib/log'
|
|
5
|
-
import { isMachine, output, RAW_OUTPUT_OPTIONS, type RawOutputOpts } from '../../lib/output'
|
|
6
|
-
import { readPassphrase } from '../../lib/prompt'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Export the per-identity keypair as a plaintext JWK envelope by default.
|
|
10
|
-
* With `--encrypt`, wrap it in a JOSE JWE (PBES2-HS256+A128KW / A256GCM)
|
|
11
|
-
* using a passphrase prompted from the TTY.
|
|
12
|
-
*/
|
|
13
|
-
export default {
|
|
14
|
-
name: 'export',
|
|
15
|
-
description: 'Export an identity keypair to disk (optional --encrypt)',
|
|
16
|
-
arguments: [
|
|
17
|
-
{ name: 'name', description: 'Identity name', required: true },
|
|
18
|
-
{ name: 'path', description: 'Output file path', required: true },
|
|
19
|
-
],
|
|
20
|
-
options: [
|
|
21
|
-
{ flags: '--encrypt', description: 'Encrypt the envelope with a passphrase (JOSE JWE)' },
|
|
22
|
-
...RAW_OUTPUT_OPTIONS,
|
|
23
|
-
],
|
|
24
|
-
action: async (name: string, path: string, opts: { encrypt?: boolean } & RawOutputOpts) => {
|
|
25
|
-
try {
|
|
26
|
-
const envelope = await exportIdentity(name)
|
|
27
|
-
const passphrase = opts.encrypt
|
|
28
|
-
? await readPassphrase('Passphrase (min 8 chars): ', { minLength: 8 })
|
|
29
|
-
: undefined
|
|
30
|
-
await writeIdentityExport(path, await encodeIdentityExport(envelope, passphrase))
|
|
31
|
-
|
|
32
|
-
if (isMachine(opts)) {
|
|
33
|
-
output({ name, path, encrypted: Boolean(opts.encrypt) }, opts)
|
|
34
|
-
return
|
|
35
|
-
}
|
|
36
|
-
log.success(`Exported identity "${name}" → ${path}${opts.encrypt ? ' (encrypted)' : ''}`)
|
|
37
|
-
if (!opts.encrypt) {
|
|
38
|
-
log.warn(
|
|
39
|
-
' Plaintext private JWK — keep this file secure. Use --encrypt for passphrase wrapping.',
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
} catch (e) {
|
|
43
|
-
fatal(e, opts)
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
} satisfies CommandDefinition
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { readFile } from 'node:fs/promises'
|
|
2
|
-
|
|
3
|
-
import type { CommandDefinition } from '../../program/index'
|
|
4
|
-
|
|
5
|
-
import {
|
|
6
|
-
decodeIdentityExport,
|
|
7
|
-
importIdentity,
|
|
8
|
-
isEncryptedIdentityExport,
|
|
9
|
-
} from '../../identity/index'
|
|
10
|
-
import { fatal, log } from '../../lib/log'
|
|
11
|
-
import { isMachine, output, RAW_OUTPUT_OPTIONS, type RawOutputOpts } from '../../lib/output'
|
|
12
|
-
import { readPassphrase } from '../../lib/prompt'
|
|
13
|
-
|
|
14
|
-
export default {
|
|
15
|
-
name: 'import',
|
|
16
|
-
description: 'Import an identity keypair envelope (auto-detects JWE)',
|
|
17
|
-
arguments: [{ name: 'path', description: 'Envelope file path', required: true }],
|
|
18
|
-
options: [
|
|
19
|
-
{
|
|
20
|
-
flags: '--name <name>',
|
|
21
|
-
description: 'Override identity name (defaults to envelope subject)',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
flags: '--issuer <url>',
|
|
25
|
-
description: 'Default issuer for credentials signed with this imported key',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
flags: '--replace',
|
|
29
|
-
description: 'Replace an existing key-backed identity with the imported keypair',
|
|
30
|
-
},
|
|
31
|
-
...RAW_OUTPUT_OPTIONS,
|
|
32
|
-
],
|
|
33
|
-
action: async (
|
|
34
|
-
path: string,
|
|
35
|
-
opts: { name?: string; issuer?: string; replace?: boolean } & RawOutputOpts,
|
|
36
|
-
) => {
|
|
37
|
-
try {
|
|
38
|
-
const raw = await readFile(path, 'utf-8')
|
|
39
|
-
const passphrase = isEncryptedIdentityExport(raw)
|
|
40
|
-
? await readPassphrase('Passphrase: ')
|
|
41
|
-
: undefined
|
|
42
|
-
const envelope = await decodeIdentityExport(raw, passphrase)
|
|
43
|
-
const name = opts.name ?? envelope.subject
|
|
44
|
-
const identity = await importIdentity(envelope, {
|
|
45
|
-
name,
|
|
46
|
-
issuer: opts.issuer,
|
|
47
|
-
replace: opts.replace,
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
if (isMachine(opts)) {
|
|
51
|
-
output({ name, ...identity }, opts)
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
log.success(
|
|
55
|
-
`Imported identity "${name}" (subject=${identity.subject}, kid=${identity.kid ?? '?'})`,
|
|
56
|
-
)
|
|
57
|
-
} catch (e) {
|
|
58
|
-
fatal(e, opts)
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
} satisfies CommandDefinition
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
import type { ListOpts, ListProjection } from '../../lib/output'
|
|
4
|
-
import type { CommandDefinition } from '../../program/index'
|
|
5
|
-
|
|
6
|
-
import { readIdentities } from '../../identity/index'
|
|
7
|
-
import { log } from '../../lib/log'
|
|
8
|
-
import { isMachine, presentList, RAW_OUTPUT_OPTIONS } from '../../lib/output'
|
|
9
|
-
|
|
10
|
-
type IdentityRow = {
|
|
11
|
-
name: string
|
|
12
|
-
subject: string
|
|
13
|
-
source: string
|
|
14
|
-
idp?: string
|
|
15
|
-
default: boolean
|
|
16
|
-
createdAt?: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function projection(items: IdentityRow[]): ListProjection {
|
|
20
|
-
return {
|
|
21
|
-
columns: [
|
|
22
|
-
{ key: 'name', header: 'NAME', color: chalk.bold },
|
|
23
|
-
{ key: 'subject', header: 'SUBJECT', color: chalk.dim },
|
|
24
|
-
{ key: 'source', header: 'SOURCE', color: chalk.dim },
|
|
25
|
-
],
|
|
26
|
-
rows: items.map((i) => ({
|
|
27
|
-
name: i.default ? `${i.name} ${chalk.green('*')}` : i.name,
|
|
28
|
-
subject: i.subject !== i.name ? i.subject : '',
|
|
29
|
-
source: i.source === 'idp' ? `idp:${i.idp ?? '?'}` : 'key',
|
|
30
|
-
})),
|
|
31
|
-
paths: items.map((i) => i.name),
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export default {
|
|
36
|
-
name: 'list',
|
|
37
|
-
description: 'List all identities',
|
|
38
|
-
options: [...RAW_OUTPUT_OPTIONS],
|
|
39
|
-
action: async (opts: ListOpts) => {
|
|
40
|
-
const store = await readIdentities()
|
|
41
|
-
const items: IdentityRow[] = Object.entries(store.identities).map(([name, id]) => ({
|
|
42
|
-
name,
|
|
43
|
-
subject: id.subject,
|
|
44
|
-
source: id.source ?? 'key',
|
|
45
|
-
idp: id.idp,
|
|
46
|
-
default: name === store.default,
|
|
47
|
-
createdAt: id.createdAt,
|
|
48
|
-
}))
|
|
49
|
-
|
|
50
|
-
if (items.length === 0 && !isMachine(opts)) {
|
|
51
|
-
log.dim(' No identities. Run: astrale identity create <name>')
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
presentList(items, opts, projection)
|
|
55
|
-
},
|
|
56
|
-
} satisfies CommandDefinition
|