@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,81 +0,0 @@
|
|
|
1
|
-
import type { SetupStep } from '../types'
|
|
2
|
-
|
|
3
|
-
import { AGENT_BROWSER_REPO } from '../../lib/browser'
|
|
4
|
-
import { log } from '../../lib/log'
|
|
5
|
-
import { runInherit } from '../../lib/proc'
|
|
6
|
-
import { confirmDefaultYes } from '../../lib/prompt'
|
|
7
|
-
import { AGENT_BROWSER_SKILL, detectAgentBrowser, detectSkill } from '../../lib/skills'
|
|
8
|
-
|
|
9
|
-
const FIX = 'npm install -g agent-browser && agent-browser install'
|
|
10
|
-
const SKILL_FIX = `npx skills add ${AGENT_BROWSER_REPO} -g`
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Equip — agent-browser, the tool `astrale browser` drives. Two halves: the
|
|
14
|
-
* third-party binary (a global npm install + one-time engine download, so opt-in
|
|
15
|
-
* and confirmed) and its agent skill (so the harness knows the commands). We
|
|
16
|
-
* track BOTH: a skill that the harness can't load is as broken as a missing
|
|
17
|
-
* binary, so detection requires both, and `ensure` wires a missing skill even
|
|
18
|
-
* when the binary is already present (the "installed but not loaded" gap).
|
|
19
|
-
*/
|
|
20
|
-
export const agentBrowserStep: SetupStep = {
|
|
21
|
-
id: 'agent-browser',
|
|
22
|
-
title: 'agent-browser',
|
|
23
|
-
group: 'equip',
|
|
24
|
-
|
|
25
|
-
async detect() {
|
|
26
|
-
const haveBin = await detectAgentBrowser()
|
|
27
|
-
const haveSkill = detectSkill(AGENT_BROWSER_SKILL).installed
|
|
28
|
-
if (haveBin && haveSkill)
|
|
29
|
-
return { state: 'satisfied', summary: 'agent-browser + skill installed' }
|
|
30
|
-
if (haveBin && !haveSkill) {
|
|
31
|
-
return {
|
|
32
|
-
state: 'gap',
|
|
33
|
-
summary: 'agent-browser installed, but its skill is not loaded by the harness',
|
|
34
|
-
fixHint: SKILL_FIX,
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return { state: 'gap', summary: 'agent-browser not installed', fixHint: FIX }
|
|
38
|
-
},
|
|
39
|
-
|
|
40
|
-
async ensure() {
|
|
41
|
-
const haveSkill = () => detectSkill(AGENT_BROWSER_SKILL).installed
|
|
42
|
-
if ((await detectAgentBrowser()) && haveSkill()) {
|
|
43
|
-
log.success('agent-browser already installed')
|
|
44
|
-
return 'unchanged'
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// 1) The binary — third-party global npm + engine download, so confirm it.
|
|
48
|
-
if (!(await detectAgentBrowser())) {
|
|
49
|
-
log.warn(`agent-browser is a third-party global npm package (${AGENT_BROWSER_REPO}).`)
|
|
50
|
-
if (!(await confirmDefaultYes('Install agent-browser globally now?'))) {
|
|
51
|
-
log.dim(` Skipped — install later: ${FIX} && ${SKILL_FIX}`)
|
|
52
|
-
return 'skipped'
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
log.step('npm install -g agent-browser')
|
|
56
|
-
if ((await runInherit('npm', ['install', '-g', 'agent-browser'])) !== 0) {
|
|
57
|
-
log.warn('npm install failed — see the output above.')
|
|
58
|
-
return 'failed'
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
log.step('agent-browser install (downloading the browser engine)')
|
|
62
|
-
if ((await runInherit('agent-browser', ['install'])) !== 0) {
|
|
63
|
-
log.warn('`agent-browser install` failed — re-run it manually.')
|
|
64
|
-
return 'failed'
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// 2) The skill — wire it into the harness so the agent can load it. Runs even
|
|
69
|
-
// when the binary was already present (the installed-but-not-loaded gap).
|
|
70
|
-
if (!haveSkill()) {
|
|
71
|
-
log.step(`${SKILL_FIX} (teaches your agent its commands)`)
|
|
72
|
-
if ((await runInherit('npx', ['skills', 'add', AGENT_BROWSER_REPO, '-g', '-y'])) !== 0) {
|
|
73
|
-
log.warn(`Skill install did not complete — run it later: ${SKILL_FIX}`)
|
|
74
|
-
return 'failed'
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
log.success('agent-browser ready — drive the GUI with `astrale browser`')
|
|
79
|
-
return 'fixed'
|
|
80
|
-
},
|
|
81
|
-
}
|
package/src/setup/steps/auth.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import type { SetupContext, SetupStep } from '../types'
|
|
2
|
-
|
|
3
|
-
import { readLocalStatus } from '../../lib/local-status'
|
|
4
|
-
import { log } from '../../lib/log'
|
|
5
|
-
import { loginViaIdp } from '../../lib/login-flow'
|
|
6
|
-
|
|
7
|
-
const FIX = 'astrale auth login'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Step 1 — a WorkOS-backed identity with a cached session. Provisioning an
|
|
11
|
-
* instance requires an `idp` identity (not the local seed key), and stale
|
|
12
|
-
* access tokens refresh on the first command when a refresh token is cached.
|
|
13
|
-
*/
|
|
14
|
-
export const authStep: SetupStep = {
|
|
15
|
-
id: 'auth',
|
|
16
|
-
title: 'Sign in',
|
|
17
|
-
group: 'connect',
|
|
18
|
-
|
|
19
|
-
async detect() {
|
|
20
|
-
const { identity } = await readLocalStatus()
|
|
21
|
-
if (!identity || identity.source !== 'idp') {
|
|
22
|
-
return { state: 'gap', summary: 'Not signed in', fixHint: FIX }
|
|
23
|
-
}
|
|
24
|
-
const session = identity.session
|
|
25
|
-
if (!session || !session.cached) {
|
|
26
|
-
return { state: 'gap', summary: `No cached token for "${identity.name}"`, fixHint: FIX }
|
|
27
|
-
}
|
|
28
|
-
if (session.requiresLogin) {
|
|
29
|
-
return {
|
|
30
|
-
state: 'gap',
|
|
31
|
-
summary: `Session for "${identity.name}" requires login`,
|
|
32
|
-
fixHint: FIX,
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
state: 'satisfied',
|
|
37
|
-
summary: `Signed in as ${identity.name}`,
|
|
38
|
-
detail: identity.subject,
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
async ensure(ctx: SetupContext) {
|
|
43
|
-
const detection = await authStep.detect(ctx)
|
|
44
|
-
if (detection.state === 'satisfied') {
|
|
45
|
-
log.success(detection.summary)
|
|
46
|
-
return 'unchanged'
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
log.step('Sign in with your Astrale account (a URL + code will appear) …')
|
|
50
|
-
const { identityName } = await loginViaIdp({ use: true })
|
|
51
|
-
log.success(`Signed in as "${identityName}"`)
|
|
52
|
-
return 'fixed'
|
|
53
|
-
},
|
|
54
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs'
|
|
2
|
-
import { join } from 'node:path'
|
|
3
|
-
|
|
4
|
-
import type { SetupStep } from '../types'
|
|
5
|
-
|
|
6
|
-
import { readLocalStatus } from '../../lib/local-status'
|
|
7
|
-
import { log } from '../../lib/log'
|
|
8
|
-
import { runInherit } from '../../lib/proc'
|
|
9
|
-
import { confirmDefaultYes, promptText } from '../../lib/prompt'
|
|
10
|
-
|
|
11
|
-
/** A scaffolded domain project carries this config at its root. */
|
|
12
|
-
function hasDomainProject(): boolean {
|
|
13
|
-
return existsSync(join(process.cwd(), 'astrale.config.ts'))
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const FIX = 'npx create-astrale-domain <name> --instance <slug>'
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Equip — scaffold a first domain in the current directory via
|
|
20
|
-
* `create-astrale-domain`, pre-wired to the active instance. The scaffold also
|
|
21
|
-
* ships the astrale-domain authoring skill, so this covers that skill too.
|
|
22
|
-
*/
|
|
23
|
-
export const domainStep: SetupStep = {
|
|
24
|
-
id: 'domain',
|
|
25
|
-
title: 'Scaffold a domain',
|
|
26
|
-
group: 'equip',
|
|
27
|
-
|
|
28
|
-
async detect() {
|
|
29
|
-
if (hasDomainProject()) {
|
|
30
|
-
return { state: 'satisfied', summary: 'domain project detected in this directory' }
|
|
31
|
-
}
|
|
32
|
-
return { state: 'gap', summary: 'no domain project here', fixHint: FIX }
|
|
33
|
-
},
|
|
34
|
-
|
|
35
|
-
async ensure() {
|
|
36
|
-
if (hasDomainProject()) {
|
|
37
|
-
log.success('Domain project already in this directory')
|
|
38
|
-
return 'unchanged'
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!(await confirmDefaultYes('Scaffold a new domain project here?'))) {
|
|
42
|
-
log.dim(` Skipped — scaffold later: ${FIX}`)
|
|
43
|
-
return 'skipped'
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const name = await promptText('Domain project name', {
|
|
47
|
-
default: 'my-domain',
|
|
48
|
-
validate: (v) =>
|
|
49
|
-
/^[a-z0-9][a-z0-9-]*$/.test(v) ? true : 'Use a lowercase name like my-domain',
|
|
50
|
-
})
|
|
51
|
-
if (!name) {
|
|
52
|
-
log.dim(' Skipped — no name given.')
|
|
53
|
-
return 'skipped'
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const slug = (await readLocalStatus()).instance?.active
|
|
57
|
-
const args = ['create-astrale-domain', name, ...(slug ? ['--instance', slug] : [])]
|
|
58
|
-
log.step(`npx ${args.join(' ')}`)
|
|
59
|
-
if ((await runInherit('npx', args)) !== 0) {
|
|
60
|
-
log.warn('Scaffold failed — see the output above.')
|
|
61
|
-
return 'failed'
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
log.success(`Domain scaffolded → ./${name}`)
|
|
65
|
-
log.dim(` Next: cd ${name} && pnpm install && pnpm prod`)
|
|
66
|
-
return 'fixed'
|
|
67
|
-
},
|
|
68
|
-
}
|
package/src/setup/steps/index.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { SetupStep } from '../types'
|
|
2
|
-
|
|
3
|
-
import { adminStep } from './admin'
|
|
4
|
-
import { agentBrowserStep } from './agent-browser'
|
|
5
|
-
import { authStep } from './auth'
|
|
6
|
-
import { domainStep } from './domain'
|
|
7
|
-
import { instanceStep } from './instance'
|
|
8
|
-
import { skillsStep } from './skills'
|
|
9
|
-
import { skillsBridgeStep } from './skills-bridge'
|
|
10
|
-
|
|
11
|
-
/** Required prerequisites, walked in order — each is a precondition for the next. */
|
|
12
|
-
export const CONNECT_STEPS: SetupStep[] = [authStep, adminStep, instanceStep]
|
|
13
|
-
|
|
14
|
-
/** Optional extras, offered together as a pre-checked multi-select. The skills
|
|
15
|
-
* bridge runs first so the per-skill steps below detect against the bridged state. */
|
|
16
|
-
export const EQUIP_STEPS: SetupStep[] = [skillsBridgeStep, skillsStep, agentBrowserStep, domainStep]
|
|
17
|
-
|
|
18
|
-
export const ALL_STEPS: SetupStep[] = [...CONNECT_STEPS, ...EQUIP_STEPS]
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
import type { OwnedInstanceInfo } from '../../lib/admin-instance'
|
|
4
|
-
import type { SetupContext, SetupStep } from '../types'
|
|
5
|
-
|
|
6
|
-
import { AstraleError } from '../../errors'
|
|
7
|
-
import { listOwnedInstances } from '../../lib/admin-instance'
|
|
8
|
-
import { normalizeInstanceKernelUrl, setActive, upsertManagedBookmark } from '../../lib/instance'
|
|
9
|
-
import { readLocalStatus } from '../../lib/local-status'
|
|
10
|
-
import { log, withSpinner } from '../../lib/log'
|
|
11
|
-
import { renderInstanceHero } from '../../lib/panel'
|
|
12
|
-
import { confirmDefaultYes, promptText, selectFrom } from '../../lib/prompt'
|
|
13
|
-
import { provisionInstance, type ProvisionResult } from '../../lib/provision-instance'
|
|
14
|
-
import { guiOrigin, slugError } from '../util'
|
|
15
|
-
|
|
16
|
-
export type InstanceSetupDependencies = {
|
|
17
|
-
fetchOwned: (ctx: SetupContext) => Promise<OwnedInstanceInfo[]>
|
|
18
|
-
adopt: (info: OwnedInstanceInfo) => Promise<void>
|
|
19
|
-
selectReady: (instances: OwnedInstanceInfo[]) => Promise<OwnedInstanceInfo | null>
|
|
20
|
-
confirmCreate: () => Promise<boolean>
|
|
21
|
-
promptSlug: () => Promise<string | undefined>
|
|
22
|
-
provision: (slug: string) => Promise<ProvisionResult>
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export type OwnedInstanceAdoptionDependencies = {
|
|
26
|
-
upsert: (
|
|
27
|
-
key: string,
|
|
28
|
-
slug: string,
|
|
29
|
-
url: string,
|
|
30
|
-
organizationId?: string,
|
|
31
|
-
) => Promise<{ repointedFrom?: string }>
|
|
32
|
-
activate: (slug: string) => Promise<unknown>
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** Print the click-inviting hero for a freshly-active instance. */
|
|
36
|
-
function hero(slug: string, kernelUrl: string): void {
|
|
37
|
-
console.log('')
|
|
38
|
-
console.log(renderInstanceHero(slug, guiOrigin(kernelUrl)))
|
|
39
|
-
console.log('')
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export async function adoptOwnedInstance(
|
|
43
|
-
info: OwnedInstanceInfo,
|
|
44
|
-
deps: OwnedInstanceAdoptionDependencies = {
|
|
45
|
-
upsert: upsertManagedBookmark,
|
|
46
|
-
activate: setActive,
|
|
47
|
-
},
|
|
48
|
-
): Promise<void> {
|
|
49
|
-
const { repointedFrom } = await deps.upsert(info.slug, info.slug, info.url, info.organizationId)
|
|
50
|
-
await deps.activate(info.slug)
|
|
51
|
-
if (repointedFrom) {
|
|
52
|
-
log.warn(
|
|
53
|
-
`Bookmark "${info.slug}" repointed: ${repointedFrom} → ${normalizeInstanceKernelUrl(info.url)}`,
|
|
54
|
-
)
|
|
55
|
-
}
|
|
56
|
-
log.success(`Active instance: ${info.slug}`)
|
|
57
|
-
hero(info.slug, info.url)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
function defaultDependencies(ctx: SetupContext): InstanceSetupDependencies {
|
|
61
|
-
return {
|
|
62
|
-
fetchOwned: (setupCtx) =>
|
|
63
|
-
withSpinner('Checking for existing instances', !setupCtx.machine, () =>
|
|
64
|
-
listOwnedInstances(setupCtx.opts),
|
|
65
|
-
),
|
|
66
|
-
adopt: adoptOwnedInstance,
|
|
67
|
-
selectReady: (instances) =>
|
|
68
|
-
selectFrom(
|
|
69
|
-
'No active instance. Pick one:',
|
|
70
|
-
instances.map((info) => ({
|
|
71
|
-
label: `${info.slug} ${chalk.dim(guiOrigin(info.url))}`,
|
|
72
|
-
value: info,
|
|
73
|
-
})),
|
|
74
|
-
),
|
|
75
|
-
confirmCreate: () => confirmDefaultYes('No instances yet. Provision your first one now?'),
|
|
76
|
-
promptSlug: () =>
|
|
77
|
-
ctx.slug
|
|
78
|
-
? Promise.resolve(ctx.slug)
|
|
79
|
-
: promptText('Pick a slug for your instance', { validate: slugError }),
|
|
80
|
-
provision: (slug) => provisionInstance(slug, ctx.opts),
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Reconcile owner-scoped admin instances when no local active bookmark exists.
|
|
86
|
-
* A failed ownership lookup is never treated as an empty account: setup stops
|
|
87
|
-
* before creation so a transient auth/network failure cannot create a duplicate.
|
|
88
|
-
*/
|
|
89
|
-
export async function ensureOwnedInstance(
|
|
90
|
-
ctx: SetupContext,
|
|
91
|
-
deps: InstanceSetupDependencies = defaultDependencies(ctx),
|
|
92
|
-
): Promise<'fixed' | 'skipped'> {
|
|
93
|
-
let owned: OwnedInstanceInfo[]
|
|
94
|
-
try {
|
|
95
|
-
owned = await deps.fetchOwned(ctx)
|
|
96
|
-
} catch (cause) {
|
|
97
|
-
const detail = cause instanceof Error ? cause.message : String(cause)
|
|
98
|
-
throw new AstraleError(
|
|
99
|
-
'INSTANCE_DISCOVERY_FAILED',
|
|
100
|
-
`Could not check your Astrale instances: ${detail}`,
|
|
101
|
-
'No instance was created. Check `astrale admin status`, then rerun `astrale setup`.',
|
|
102
|
-
)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
const ready = owned.filter((info) => info.state === 'ready')
|
|
106
|
-
if (ready.length === 1) {
|
|
107
|
-
await deps.adopt(ready[0]!)
|
|
108
|
-
return 'fixed'
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (ready.length > 1) {
|
|
112
|
-
const choice = await deps.selectReady(ready)
|
|
113
|
-
if (choice === null) {
|
|
114
|
-
log.dim(' Skipped — no active instance set.')
|
|
115
|
-
return 'skipped'
|
|
116
|
-
}
|
|
117
|
-
await deps.adopt(choice)
|
|
118
|
-
return 'fixed'
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (owned.length > 0) {
|
|
122
|
-
reportNotReady(owned)
|
|
123
|
-
return 'skipped'
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (!(await deps.confirmCreate())) {
|
|
127
|
-
log.dim(' Skipped — create one later: astrale instance create <slug>')
|
|
128
|
-
return 'skipped'
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const slug = await deps.promptSlug()
|
|
132
|
-
if (!slug) {
|
|
133
|
-
log.dim(' Skipped — no slug given.')
|
|
134
|
-
return 'skipped'
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
const { created, selectionError } = await deps.provision(slug)
|
|
138
|
-
if (selectionError) {
|
|
139
|
-
const detail = selectionError instanceof Error ? selectionError.message : String(selectionError)
|
|
140
|
-
throw new AstraleError(
|
|
141
|
-
'INSTANCE_SELECTION_FAILED',
|
|
142
|
-
`Instance "${slug}" was provisioned, but the CLI could not select it: ${detail}`,
|
|
143
|
-
`Fix local CLI storage, then run \`astrale instance use ${slug}\`.`,
|
|
144
|
-
)
|
|
145
|
-
}
|
|
146
|
-
hero(slug, created.url)
|
|
147
|
-
return 'fixed'
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function reportNotReady(instances: OwnedInstanceInfo[]): void {
|
|
151
|
-
log.warn(
|
|
152
|
-
`${instances.length === 1 ? 'Your instance is' : 'Your instances are'} not ready; setup will not create another.`,
|
|
153
|
-
)
|
|
154
|
-
for (const info of instances) {
|
|
155
|
-
const phase = info.phase && info.phase !== info.state ? ` (${info.phase})` : ''
|
|
156
|
-
log.dim(` ${info.slug}: ${info.state}${phase} · astrale instance status ${info.slug}`)
|
|
157
|
-
if (info.error) log.dim(` ${info.error}`)
|
|
158
|
-
}
|
|
159
|
-
if (instances.some((info) => info.state === 'failed')) {
|
|
160
|
-
log.dim(
|
|
161
|
-
' Inspect the failure, then deliberately delete/recreate it with `astrale instance` commands.',
|
|
162
|
-
)
|
|
163
|
-
} else {
|
|
164
|
-
log.dim(' Wait for provisioning to finish, then rerun `astrale setup`.')
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Step 3 — an active instance, the heart of the flow. If the user already has
|
|
170
|
-
* owned instances, adopt the sole ready one or ask among several; only a
|
|
171
|
-
* confirmed empty owner list may fall through to first-instance provisioning.
|
|
172
|
-
*/
|
|
173
|
-
export const instanceStep: SetupStep = {
|
|
174
|
-
id: 'instance',
|
|
175
|
-
title: 'Active instance',
|
|
176
|
-
group: 'connect',
|
|
177
|
-
|
|
178
|
-
async detect(ctx: SetupContext) {
|
|
179
|
-
const { instance } = await readLocalStatus()
|
|
180
|
-
if (instance) {
|
|
181
|
-
return { state: 'satisfied', summary: `${instance.active} (${guiOrigin(instance.url)})` }
|
|
182
|
-
}
|
|
183
|
-
return {
|
|
184
|
-
state: 'gap',
|
|
185
|
-
summary: 'No active instance',
|
|
186
|
-
fixHint: ctx.slug ? `astrale instance create ${ctx.slug}` : 'astrale instance create <slug>',
|
|
187
|
-
}
|
|
188
|
-
},
|
|
189
|
-
|
|
190
|
-
async ensure(ctx: SetupContext) {
|
|
191
|
-
const { instance } = await readLocalStatus()
|
|
192
|
-
if (instance) {
|
|
193
|
-
log.success(`Active instance: ${instance.active} (${guiOrigin(instance.url)})`)
|
|
194
|
-
return 'unchanged'
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
return ensureOwnedInstance(ctx)
|
|
198
|
-
},
|
|
199
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync } from 'node:fs'
|
|
2
|
-
import { join } from 'node:path'
|
|
3
|
-
|
|
4
|
-
import type { SetupStep } from '../types'
|
|
5
|
-
|
|
6
|
-
import { log } from '../../lib/log'
|
|
7
|
-
import { ensureSkillsBridge, skillsBridgeStatus } from '../../lib/skills'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Equip — make a workspace's own staged skills loadable. Agent tooling stages
|
|
11
|
-
* skills under `.agents/skills`, but the harness (Claude Code et al.) only loads
|
|
12
|
-
* `.claude/skills` (walking up to the project root). A single
|
|
13
|
-
* `.claude/skills -> ../.agents/skills` symlink bridges every staged skill —
|
|
14
|
-
* present and future — for this workspace and every project nested under it.
|
|
15
|
-
* This is exactly how this monorepo wires its own skills; doing it in `setup`
|
|
16
|
-
* means a skill landing in `.agents/skills` is loaded, not silently invisible
|
|
17
|
-
* (the gap that let agent-browser report "installed" yet never load).
|
|
18
|
-
*
|
|
19
|
-
* Runs first in the equip group so the per-skill steps below detect against the
|
|
20
|
-
* already-bridged state. Idempotent and non-destructive.
|
|
21
|
-
*/
|
|
22
|
-
function countStaged(root: string): number {
|
|
23
|
-
try {
|
|
24
|
-
const dir = join(root, '.agents', 'skills')
|
|
25
|
-
return readdirSync(dir).filter((e) => existsSync(join(dir, e, 'SKILL.md'))).length
|
|
26
|
-
} catch {
|
|
27
|
-
return 0
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export const skillsBridgeStep: SetupStep = {
|
|
32
|
-
id: 'skills-bridge',
|
|
33
|
-
title: 'workspace skills bridge',
|
|
34
|
-
group: 'equip',
|
|
35
|
-
|
|
36
|
-
async detect() {
|
|
37
|
-
const s = skillsBridgeStatus()
|
|
38
|
-
if (s.kind === 'none') return { state: 'satisfied', summary: 'no workspace skills to bridge' }
|
|
39
|
-
if (s.kind === 'bridged')
|
|
40
|
-
return { state: 'satisfied', summary: '.agents/skills bridged → the harness loads them' }
|
|
41
|
-
if (s.kind === 'foreign')
|
|
42
|
-
return { state: 'satisfied', summary: '.claude/skills already present — left as-is' }
|
|
43
|
-
const n = countStaged(s.root)
|
|
44
|
-
return {
|
|
45
|
-
state: 'gap',
|
|
46
|
-
summary: `${n} skill${n === 1 ? '' : 's'} in .agents/skills not loaded by the harness`,
|
|
47
|
-
fixHint: `ln -s ../.agents/skills ${s.link}`,
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
|
|
51
|
-
async ensure() {
|
|
52
|
-
const before = skillsBridgeStatus()
|
|
53
|
-
if (before.kind === 'none' || before.kind === 'bridged') return 'unchanged'
|
|
54
|
-
if (before.kind === 'foreign') {
|
|
55
|
-
log.dim(' .claude/skills already exists — leaving it untouched.')
|
|
56
|
-
return 'unchanged'
|
|
57
|
-
}
|
|
58
|
-
const after = ensureSkillsBridge()
|
|
59
|
-
if (after.kind === 'bridged') {
|
|
60
|
-
log.success(
|
|
61
|
-
`Workspace skills bridged — ${join(after.root, '.agents/skills')} → .claude/skills`,
|
|
62
|
-
)
|
|
63
|
-
return 'fixed'
|
|
64
|
-
}
|
|
65
|
-
log.warn(
|
|
66
|
-
'Could not create the skills bridge — create it manually: ln -s ../.agents/skills .claude/skills',
|
|
67
|
-
)
|
|
68
|
-
return 'failed'
|
|
69
|
-
},
|
|
70
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import type { SetupStep } from '../types'
|
|
2
|
-
|
|
3
|
-
import { log } from '../../lib/log'
|
|
4
|
-
import {
|
|
5
|
-
ASTRALE_CLI_SKILL,
|
|
6
|
-
ASTRALE_DOMAIN_SKILL,
|
|
7
|
-
detectSkill,
|
|
8
|
-
installSkills,
|
|
9
|
-
SKILL_INSTALL_HINT,
|
|
10
|
-
} from '../../lib/skills'
|
|
11
|
-
|
|
12
|
-
const FIX = SKILL_INSTALL_HINT
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Equip — the astrale agent skills. Both the astrale-cli (ops) and astrale-domain
|
|
16
|
-
* (authoring) skills publish from the one public `astrale-os/cli` repo, so a
|
|
17
|
-
* single `npx skills add astrale-os/cli -g` installs both, globally. We don't
|
|
18
|
-
* reimplement skill installation; we detect presence and delegate to `npx skills
|
|
19
|
-
* add` (the skill package manager). A global (user-level) install equips every
|
|
20
|
-
* project on the machine, so a freshly scaffolded domain has the skills without
|
|
21
|
-
* shipping its own copy.
|
|
22
|
-
*/
|
|
23
|
-
const bothInstalled = (): boolean =>
|
|
24
|
-
detectSkill(ASTRALE_CLI_SKILL).installed && detectSkill(ASTRALE_DOMAIN_SKILL).installed
|
|
25
|
-
|
|
26
|
-
export const skillsStep: SetupStep = {
|
|
27
|
-
id: 'skills',
|
|
28
|
-
title: 'astrale agent skills (cli + domain)',
|
|
29
|
-
group: 'equip',
|
|
30
|
-
|
|
31
|
-
async detect() {
|
|
32
|
-
if (bothInstalled()) {
|
|
33
|
-
return { state: 'satisfied', summary: 'astrale-cli + astrale-domain skills installed' }
|
|
34
|
-
}
|
|
35
|
-
const have = detectSkill(ASTRALE_CLI_SKILL).installed
|
|
36
|
-
? 'astrale-domain'
|
|
37
|
-
: 'astrale agent skills'
|
|
38
|
-
return { state: 'gap', summary: `${have} not installed`, fixHint: FIX }
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
async ensure() {
|
|
42
|
-
if (bothInstalled()) {
|
|
43
|
-
log.success('astrale-cli + astrale-domain skills already installed')
|
|
44
|
-
return 'unchanged'
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
log.step(`Installing the astrale agent skills — ${FIX}`)
|
|
48
|
-
if (!(await installSkills())) {
|
|
49
|
-
log.warn(`Skill install did not complete — run it later: ${FIX}`)
|
|
50
|
-
return 'failed'
|
|
51
|
-
}
|
|
52
|
-
if (bothInstalled()) {
|
|
53
|
-
log.success('astrale-cli + astrale-domain skills installed')
|
|
54
|
-
} else {
|
|
55
|
-
log.success('astrale-cli skill installed')
|
|
56
|
-
}
|
|
57
|
-
return 'fixed'
|
|
58
|
-
},
|
|
59
|
-
}
|
package/src/setup/types.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { AdminTargetCommandOpts } from '../lib/admin-target'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The setup reconciler models onboarding as a list of small, independent steps,
|
|
5
|
-
* each able to (a) `detect` its state without side effects and (b) `ensure` its
|
|
6
|
-
* state interactively, taking the user by the hand. `detect` powers the
|
|
7
|
-
* read-only plan + checklist (and the agent-facing `--plan` JSON); `ensure` is
|
|
8
|
-
* the hand-held fix. Both are idempotent — re-running setup when everything is
|
|
9
|
-
* already satisfied just prints a row of ✔.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
export type StepState = 'satisfied' | 'gap' | 'broken'
|
|
13
|
-
|
|
14
|
-
export type StepDetection = {
|
|
15
|
-
state: StepState
|
|
16
|
-
/** One-line status for the checklist (no symbol — the renderer adds it). */
|
|
17
|
-
summary: string
|
|
18
|
-
/** Optional dim detail line. */
|
|
19
|
-
detail?: string
|
|
20
|
-
/** The granular command an agent (or a human) would run to close the gap. */
|
|
21
|
-
fixHint?: string
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export type StepOutcome = 'fixed' | 'unchanged' | 'skipped' | 'failed'
|
|
25
|
-
|
|
26
|
-
export type SetupOpts = AdminTargetCommandOpts & {
|
|
27
|
-
/** Read-only: print the plan and exit without mutating anything. */
|
|
28
|
-
plan?: boolean
|
|
29
|
-
json?: boolean
|
|
30
|
-
raw?: boolean
|
|
31
|
-
// Global flags (program.ts) that force non-interactive.
|
|
32
|
-
ci?: boolean
|
|
33
|
-
noPrompt?: boolean
|
|
34
|
-
// Threaded into admin-kernel calls (provisioning, instance listing).
|
|
35
|
-
as?: string
|
|
36
|
-
creds?: string
|
|
37
|
-
timeout?: string
|
|
38
|
-
debug?: boolean
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export type SetupContext = {
|
|
42
|
-
/** TTY and not --ci / --no-prompt / CI: ok to prompt and mutate. */
|
|
43
|
-
interactive: boolean
|
|
44
|
-
/** isMachine(opts): --json / --raw or piped — structured output, no spinners. */
|
|
45
|
-
machine: boolean
|
|
46
|
-
opts: SetupOpts
|
|
47
|
-
/** Instance slug hint from the positional arg, used when provisioning. */
|
|
48
|
-
slug?: string
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export type StepGroup = 'connect' | 'equip'
|
|
52
|
-
|
|
53
|
-
export type SetupStep = {
|
|
54
|
-
id: string
|
|
55
|
-
title: string
|
|
56
|
-
group: StepGroup
|
|
57
|
-
/** Read-only probe for the plan + checklist. Never prompts, never mutates. */
|
|
58
|
-
detect: (ctx: SetupContext) => Promise<StepDetection>
|
|
59
|
-
/** Interactive, idempotent hand-holding. May print rich output (e.g. a hero). */
|
|
60
|
-
ensure: (ctx: SetupContext) => Promise<StepOutcome>
|
|
61
|
-
}
|
package/src/setup/util.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { validateSlug, validateUrl } from '../lib/validation'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The clickable GUI origin for an instance — its kernel URL stripped of the
|
|
5
|
-
* `/api` path bookmarks carry (`https://app.eu.astrale.ai/api` →
|
|
6
|
-
* `https://app.eu.astrale.ai`). This is the URL we put in front of the user.
|
|
7
|
-
*/
|
|
8
|
-
export function guiOrigin(kernelUrl: string): string {
|
|
9
|
-
try {
|
|
10
|
-
return new URL(kernelUrl).origin
|
|
11
|
-
} catch {
|
|
12
|
-
return kernelUrl
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/** inquirer `validate`: true when the slug is valid, else the human message. */
|
|
17
|
-
export function slugError(value: string): true | string {
|
|
18
|
-
try {
|
|
19
|
-
validateSlug(value)
|
|
20
|
-
return true
|
|
21
|
-
} catch (e) {
|
|
22
|
-
return e instanceof Error ? e.message : 'Invalid slug'
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** inquirer `validate`: true when the value is an http(s) URL, else the message. */
|
|
27
|
-
export function urlError(value: string): true | string {
|
|
28
|
-
try {
|
|
29
|
-
validateUrl(value)
|
|
30
|
-
return true
|
|
31
|
-
} catch (e) {
|
|
32
|
-
return e instanceof Error ? e.message : 'Invalid URL'
|
|
33
|
-
}
|
|
34
|
-
}
|