@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,162 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
import type { KernelCommandOpts } from '../connection'
|
|
4
|
-
import type { AdminTargetCommandOpts } from './admin-target'
|
|
5
|
-
|
|
6
|
-
import { AuthError } from '../errors'
|
|
7
|
-
import { readIdentities, type IdentityStore } from '../identity/index'
|
|
8
|
-
import { createOwnedInstance } from './admin-instance'
|
|
9
|
-
import { setActive, upsertManagedBookmark } from './instance'
|
|
10
|
-
import { withSpinner } from './log'
|
|
11
|
-
import { isMachine } from './output'
|
|
12
|
-
import { promptSelect } from './prompt'
|
|
13
|
-
import { validateSlug } from './validation'
|
|
14
|
-
|
|
15
|
-
export type ProvisionOpts = KernelCommandOpts &
|
|
16
|
-
AdminTargetCommandOpts & {
|
|
17
|
-
hostId?: string
|
|
18
|
-
// Global flags (program.ts) that force non-interactive — mirrors `instance use`.
|
|
19
|
-
ci?: boolean
|
|
20
|
-
noPrompt?: boolean
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** The created instance plus the local-bookmark side effects of provisioning. */
|
|
24
|
-
export type ProvisionResult = {
|
|
25
|
-
/** The raw admin-kernel response — the stable machine surface for `--json`. */
|
|
26
|
-
created: { url: string; organizationId?: string }
|
|
27
|
-
slug: string
|
|
28
|
-
/** Set when an existing bookmark of the same name was repointed to a new kernel. */
|
|
29
|
-
repointedFrom?: string
|
|
30
|
-
/** Set when bookmarking/activating the new instance failed (non-fatal). */
|
|
31
|
-
selectionError?: unknown
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/** Provisioning a child instance runs a multi-step saga (1-3 min). */
|
|
35
|
-
const SAGA_TIMEOUT_MS = '240000'
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Provision an alpha instance through the admin kernel, then bookmark it and
|
|
39
|
-
* make it the active target. Extracted from `instance create` so `astrale
|
|
40
|
-
* setup` provisions through the exact same saga (auth assertion → alphaCreate →
|
|
41
|
-
* bookmark → set-active), including the interactive multi-host picker.
|
|
42
|
-
*
|
|
43
|
-
* Presentation is deliberately minimal here (a spinner + a one-line success);
|
|
44
|
-
* the caller renders anything richer — `setup` follows this with a hero panel.
|
|
45
|
-
*/
|
|
46
|
-
export async function provisionInstance(
|
|
47
|
-
slug: string,
|
|
48
|
-
opts: ProvisionOpts,
|
|
49
|
-
): Promise<ProvisionResult> {
|
|
50
|
-
validateSlug(slug)
|
|
51
|
-
await assertAlphaCreateAuth(opts)
|
|
52
|
-
// The created instance must belong to the LOGGED-IN identity — never to an
|
|
53
|
-
// identity pinned on the admin bookmark (that mismatch silently made a fresh
|
|
54
|
-
// user's instance unusable). `--as` still wins.
|
|
55
|
-
if (!opts.as) opts = { ...opts, as: (await readIdentities()).default }
|
|
56
|
-
|
|
57
|
-
const machine = isMachine(opts)
|
|
58
|
-
const interactive = !!process.stdin.isTTY && !(opts.ci || opts.noPrompt || process.env.CI)
|
|
59
|
-
|
|
60
|
-
let repointedFrom: string | undefined
|
|
61
|
-
let selectionError: unknown = null
|
|
62
|
-
// The global 30s default doesn't just fail the CLIENT: the disconnect kills
|
|
63
|
-
// the worker's request mid-saga and leaves TORN state (slug taken, routing
|
|
64
|
-
// live, no instance node — unrecoverable by retry). Default to a saga-sized
|
|
65
|
-
// timeout; an explicit --timeout still wins.
|
|
66
|
-
const createOpts = { ...opts, timeout: opts.timeout ?? SAGA_TIMEOUT_MS }
|
|
67
|
-
|
|
68
|
-
const runProvision = (hostId: string | undefined) =>
|
|
69
|
-
withSpinner(
|
|
70
|
-
`Provisioning instance ${slug}`,
|
|
71
|
-
!machine,
|
|
72
|
-
async () => {
|
|
73
|
-
const created = await createOwnedInstance(createOpts, slug, hostId)
|
|
74
|
-
try {
|
|
75
|
-
// Org id from the create response — authoritative for token scoping
|
|
76
|
-
// (the router's /auth/org is eventually consistent).
|
|
77
|
-
const bookmarked = await upsertManagedBookmark(
|
|
78
|
-
slug,
|
|
79
|
-
slug,
|
|
80
|
-
created.url,
|
|
81
|
-
created.organizationId,
|
|
82
|
-
)
|
|
83
|
-
repointedFrom = bookmarked.repointedFrom
|
|
84
|
-
await setActive(slug)
|
|
85
|
-
} catch (e) {
|
|
86
|
-
selectionError = e
|
|
87
|
-
}
|
|
88
|
-
return created
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
success: (created) =>
|
|
92
|
-
`Instance provisioned: ${slug} ${chalk.dim(`(${created.url})${selectionError ? '' : ' · active'}`)}`,
|
|
93
|
-
},
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
// Host placement is chosen SERVER-side (the caller's ready + USE-granted
|
|
97
|
-
// hosts). We recover ONLY from its multi-host ambiguity: pop a picker and
|
|
98
|
-
// retry with the chosen host_id — the ambiguity error throws before any
|
|
99
|
-
// provisioning side effect, so the retry is clean. No host / permission /
|
|
100
|
-
// capacity / a non-interactive run all reject through to the caller's `fatal`,
|
|
101
|
-
// surfacing the server's own message plus the listed ids. An explicit
|
|
102
|
-
// `--host-id` skips all of this.
|
|
103
|
-
const created = await runProvision(opts.hostId).catch(async (e: unknown) => {
|
|
104
|
-
const hostIds = !opts.hostId && interactive ? parseEligibleHostIds(e) : null
|
|
105
|
-
if (!hostIds) throw e
|
|
106
|
-
const chosen = await promptSelect(
|
|
107
|
-
`${hostIds.length} hosts available — pick one to provision on`,
|
|
108
|
-
hostIds.map((hid) => ({ name: hid, value: hid })),
|
|
109
|
-
)
|
|
110
|
-
if (!chosen) throw e
|
|
111
|
-
return runProvision(chosen)
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
// Warnings go to stderr so machine-readable stdout stays clean.
|
|
115
|
-
const warn = (msg: string) => console.error(chalk.yellow('⚠'), msg)
|
|
116
|
-
if (selectionError) {
|
|
117
|
-
const message =
|
|
118
|
-
selectionError instanceof Error ? selectionError.message : String(selectionError)
|
|
119
|
-
warn(`Could not select the new instance: ${message}`)
|
|
120
|
-
} else if (repointedFrom) {
|
|
121
|
-
warn(`Bookmark "${slug}" repointed: ${repointedFrom} → ${created.url}`)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return { created, slug, repointedFrom, ...(selectionError ? { selectionError } : {}) }
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Recover the eligible host ids from alphaCreate's multi-host error
|
|
129
|
-
* ("N ready hosts are assigned (id1, id2). Specify host_id…") — only when
|
|
130
|
-
* there's a real choice (>1). Returns null for any other error (no host,
|
|
131
|
-
* permission, capacity). Deliberately coupled to that message wording (Option
|
|
132
|
-
* B: no admin-side change); if it ever drifts we simply stop offering the
|
|
133
|
-
* picker and the raw error is shown instead — no worse than before.
|
|
134
|
-
*/
|
|
135
|
-
export function parseEligibleHostIds(error: unknown): string[] | null {
|
|
136
|
-
const text = error instanceof Error ? error.message : String(error)
|
|
137
|
-
const match = /ready hosts are assigned \(([^)]+)\)/.exec(text)
|
|
138
|
-
if (!match) return null
|
|
139
|
-
const ids = match[1]!
|
|
140
|
-
.split(',')
|
|
141
|
-
.map((s) => s.trim())
|
|
142
|
-
.filter(Boolean)
|
|
143
|
-
return ids.length > 1 ? ids : null
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
async function assertAlphaCreateAuth(opts: Pick<ProvisionOpts, 'as' | 'creds'>): Promise<void> {
|
|
147
|
-
if (opts.creds) return
|
|
148
|
-
assertAlphaCreateIdentity(await readIdentities(), opts)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
export function assertAlphaCreateIdentity(
|
|
152
|
-
store: IdentityStore,
|
|
153
|
-
opts: Pick<ProvisionOpts, 'as'> = {},
|
|
154
|
-
): void {
|
|
155
|
-
const name = opts.as ?? store.default
|
|
156
|
-
const identity = store.identities[name]
|
|
157
|
-
if (identity && identity.source === 'idp') return
|
|
158
|
-
throw new AuthError(
|
|
159
|
-
'WorkOS login required for `astrale instance create`',
|
|
160
|
-
'Run: astrale auth login',
|
|
161
|
-
)
|
|
162
|
-
}
|
package/src/lib/sdk-deps.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs'
|
|
2
|
-
import { join } from 'node:path'
|
|
3
|
-
|
|
4
|
-
import { run } from './proc'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* `astrale update`, Axis C — keep a domain project's first-party `@astrale-os/*`
|
|
8
|
-
* dependencies current. We DELEGATE to pnpm rather than reimplement a package
|
|
9
|
-
* manager: `pnpm outdated` to detect, `pnpm update --latest` to apply. pnpm owns
|
|
10
|
-
* the hard, easy-to-get-wrong parts — registry/`.npmrc`/auth resolution, the
|
|
11
|
-
* `minimumReleaseAge` supply-chain gate, workspace members, semver, and the
|
|
12
|
-
* lockfile — so this stays a thin, robust shim (mirrors how the CLI delegates
|
|
13
|
-
* skills to `npx skills`). Every call is best-effort: pnpm missing or any error
|
|
14
|
-
* means "nothing to do", never a failed update.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/** The dependency pattern pnpm matches both subcommands against. */
|
|
18
|
-
const ASTRALE_DEP_PATTERN = '@astrale-os/*'
|
|
19
|
-
|
|
20
|
-
export type SdkOutdated = { pkg: string; current: string; latest: string }
|
|
21
|
-
|
|
22
|
-
/** Is the CLI running at the root of a scaffolded domain project? */
|
|
23
|
-
export function inDomainProject(cwd: string = process.cwd()): boolean {
|
|
24
|
-
return existsSync(join(cwd, 'astrale.config.ts'))
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* A non-pnpm lockfile means another package manager owns this project; we won't
|
|
29
|
-
* run pnpm against it (that would write a stray `pnpm-lock.yaml`). Returns the
|
|
30
|
-
* foreign PM name, or null when it's pnpm / fresh (Astrale projects are pnpm-first).
|
|
31
|
-
*/
|
|
32
|
-
export function foreignPackageManager(cwd: string = process.cwd()): 'npm' | 'yarn' | 'bun' | null {
|
|
33
|
-
if (existsSync(join(cwd, 'pnpm-lock.yaml'))) return null
|
|
34
|
-
if (existsSync(join(cwd, 'package-lock.json'))) return 'npm'
|
|
35
|
-
if (existsSync(join(cwd, 'yarn.lock'))) return 'yarn'
|
|
36
|
-
if (existsSync(join(cwd, 'bun.lockb')) || existsSync(join(cwd, 'bun.lock'))) return 'bun'
|
|
37
|
-
return null
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
type PnpmOutdatedEntry = { current?: string; wanted?: string; latest?: string }
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Parse `pnpm outdated --format json` into the deps that actually have a newer
|
|
44
|
-
* release. pnpm only lists outdated packages and never proposes a downgrade, so
|
|
45
|
-
* we just drop entries with no `latest` or where `latest` equals the current
|
|
46
|
-
* version (it lists `wanted` when nothing is installed yet — use that as the
|
|
47
|
-
* "current" we display). Pure (no I/O) so it's unit-testable without spawning.
|
|
48
|
-
*/
|
|
49
|
-
export function parseSdkOutdated(stdout: string): SdkOutdated[] {
|
|
50
|
-
let parsed: Record<string, PnpmOutdatedEntry>
|
|
51
|
-
try {
|
|
52
|
-
parsed = JSON.parse(stdout || '{}') as Record<string, PnpmOutdatedEntry>
|
|
53
|
-
} catch {
|
|
54
|
-
return []
|
|
55
|
-
}
|
|
56
|
-
const out: SdkOutdated[] = []
|
|
57
|
-
for (const [pkg, entry] of Object.entries(parsed)) {
|
|
58
|
-
const current = entry.current ?? entry.wanted
|
|
59
|
-
if (entry.latest && current && entry.latest !== current) {
|
|
60
|
-
out.push({ pkg, current, latest: entry.latest })
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return out
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Ask pnpm which `@astrale-os/*` deps have a newer release. `pnpm outdated`
|
|
68
|
-
* exits 1 when outdated deps exist — that's not an error, so we parse stdout
|
|
69
|
-
* regardless of exit code. Returns [] when none, pnpm is absent, or anything fails.
|
|
70
|
-
*/
|
|
71
|
-
export async function findSdkOutdated(cwd: string = process.cwd()): Promise<SdkOutdated[]> {
|
|
72
|
-
try {
|
|
73
|
-
const { stdout } = await run('pnpm', ['outdated', '--format', 'json', ASTRALE_DEP_PATTERN], {
|
|
74
|
-
cwd,
|
|
75
|
-
})
|
|
76
|
-
return parseSdkOutdated(stdout)
|
|
77
|
-
} catch {
|
|
78
|
-
return [] // pnpm not on PATH, etc.
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Apply via `pnpm update --latest --lockfile-only` — pnpm rewrites package.json
|
|
84
|
-
* (preserving exact pins, the scaffold style) and the lockfile, honoring the
|
|
85
|
-
* registry + supply-chain age policy. `--lockfile-only` is deliberate: it updates
|
|
86
|
-
* the manifest + lockfile WITHOUT running install/build scripts, so an `astrale
|
|
87
|
-
* update` never executes a dependency's postinstall (pnpm would otherwise exit
|
|
88
|
-
* non-zero on `ERR_PNPM_IGNORED_BUILDS`) or churns node_modules — the user runs
|
|
89
|
-
* `pnpm install` to materialize, honoring their own build approvals. Surfaces
|
|
90
|
-
* pnpm's output only on failure. Returns true on success.
|
|
91
|
-
*/
|
|
92
|
-
export async function applySdkUpdate(cwd: string = process.cwd()): Promise<boolean> {
|
|
93
|
-
try {
|
|
94
|
-
const { code, stdout, stderr } = await run(
|
|
95
|
-
'pnpm',
|
|
96
|
-
['update', '--latest', '--lockfile-only', ASTRALE_DEP_PATTERN],
|
|
97
|
-
{ cwd },
|
|
98
|
-
)
|
|
99
|
-
if (code !== 0) process.stderr.write(stdout + stderr)
|
|
100
|
-
return code === 0
|
|
101
|
-
} catch {
|
|
102
|
-
return false
|
|
103
|
-
}
|
|
104
|
-
}
|
package/src/lib/self.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Lexical `@self` helpers. Effective-principal resolution is deliberately not
|
|
3
|
-
* local: connection/self.ts asks the authenticated target Kernel through
|
|
4
|
-
* Identity.whoami before replacing any reference.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
// Anchors:
|
|
8
|
-
// left: start-of-string OR right after `=` (param-value head)
|
|
9
|
-
// right: end-of-string OR `::` (instance method) OR `/` (path navigation)
|
|
10
|
-
const SELF_RE = /(?:^|(?<=[=]))@self(?=$|::|\/)/g
|
|
11
|
-
|
|
12
|
-
/** Cheap pre-check before invoking authenticated principal resolution. */
|
|
13
|
-
export function containsSelfRef(input: string): boolean {
|
|
14
|
-
SELF_RE.lastIndex = 0
|
|
15
|
-
return SELF_RE.test(input)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/** Replace every admitted `@self` token with one authenticated NodeId. */
|
|
19
|
-
export function expandSelfReferences(input: string, selfId: string): string {
|
|
20
|
-
const replacement = `@${selfId}`
|
|
21
|
-
return input.replace(SELF_RE, () => replacement)
|
|
22
|
-
}
|
package/src/lib/skills.ts
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import { existsSync, lstatSync, mkdirSync, readlinkSync, symlinkSync } from 'node:fs'
|
|
2
|
-
import { homedir } from 'node:os'
|
|
3
|
-
import { dirname, join } from 'node:path'
|
|
4
|
-
|
|
5
|
-
import { findAgentBrowser } from './browser'
|
|
6
|
-
import { run } from './proc'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Agent skills and the agent-browser tool are owned by the coding-agent harness
|
|
10
|
-
* (Claude Code et al.) and by npm — not by this CLI. `astrale setup` and
|
|
11
|
-
* `astrale update` only *detect* them and delegate installation to their real
|
|
12
|
-
* installers (`npx skills add`, `npm i -g agent-browser`). This module is that
|
|
13
|
-
* detection + delegation layer.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/** The skill name the agent harness looks up under `<dir>/<name>/SKILL.md`. */
|
|
17
|
-
export const ASTRALE_CLI_SKILL = 'astrale-cli'
|
|
18
|
-
export const ASTRALE_DOMAIN_SKILL = 'astrale-domain'
|
|
19
|
-
export const AGENT_BROWSER_SKILL = 'agent-browser'
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Published skill source consumed by `npx skills add`. The public `astrale-os/cli`
|
|
23
|
-
* repo hosts BOTH the astrale-cli and astrale-domain skills (under `skills/`), so
|
|
24
|
-
* one `npx skills add astrale-os/cli` installs both; address one with
|
|
25
|
-
* `astrale-os/cli@astrale-cli` or `astrale-os/cli@astrale-domain`.
|
|
26
|
-
*/
|
|
27
|
-
export const ASTRALE_CLI_SKILL_SOURCE = 'astrale-os/cli'
|
|
28
|
-
|
|
29
|
-
/** Human-facing command that installs (or refreshes) both astrale skills, globally. */
|
|
30
|
-
export const SKILL_INSTALL_HINT = `npx skills add ${ASTRALE_CLI_SKILL_SOURCE} -g`
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Install or refresh the astrale agent skills by delegating to the skill package
|
|
34
|
-
* manager (`npx skills add`). We install GLOBALLY (`-g`, user-level): one run
|
|
35
|
-
* equips every project on the machine — the harness resolves the skills from the
|
|
36
|
-
* user Claude dir (see {@link detectSkill}) regardless of cwd, and installs land
|
|
37
|
-
* in `~/.agents/skills` rather than clobbering any project's own `.agents/skills`
|
|
38
|
-
* (notably this repo's symlinked source). We don't reimplement skill installation
|
|
39
|
-
* — re-running the real installer is also how an existing install updates to the
|
|
40
|
-
* latest published SKILL.md, so this doubles as the update path.
|
|
41
|
-
*
|
|
42
|
-
* We CAPTURE the installer's output rather than stream it, and surface it only on
|
|
43
|
-
* failure. A global install reports a benign per-agent note for any agent format
|
|
44
|
-
* that can't go user-level (e.g. PromptScript: "does not support global skill
|
|
45
|
-
* installation") as a "Failed to install N" banner — even though `npx skills`
|
|
46
|
-
* still exits 0 and the skills land for every other agent. Streaming that made a
|
|
47
|
-
* successful refresh look broken; suppressing it on success lets the caller print
|
|
48
|
-
* a clean line. Resolves true on exit 0. Requires Node/`npx` on PATH + network.
|
|
49
|
-
*/
|
|
50
|
-
export async function installSkills(): Promise<boolean> {
|
|
51
|
-
const { code, stdout, stderr } = await run('npx', [
|
|
52
|
-
'skills',
|
|
53
|
-
'add',
|
|
54
|
-
ASTRALE_CLI_SKILL_SOURCE,
|
|
55
|
-
'-g',
|
|
56
|
-
'-y',
|
|
57
|
-
])
|
|
58
|
-
if (code !== 0) process.stderr.write(stdout + stderr)
|
|
59
|
-
return code === 0
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* The directories the agent harness ACTUALLY loads skills from, in resolution
|
|
64
|
-
* order: a project `.claude/skills` found by walking UP from cwd (the harness
|
|
65
|
-
* walks up to the project root), then the user-global Claude dir.
|
|
66
|
-
*
|
|
67
|
-
* Deliberately NOT `.agents/skills`: the harness never reads it, so a skill
|
|
68
|
-
* present only there is on disk but NOT loaded — the false "installed" this
|
|
69
|
-
* used to report, which let `astrale setup` mark a skill satisfied while the
|
|
70
|
-
* agent couldn't see it. `.agents/skills` is a SOURCE convention; it only loads
|
|
71
|
-
* once bridged into `.claude/skills` (e.g. `.claude/skills` symlinked to
|
|
72
|
-
* `.agents/skills`, as this monorepo wires itself — see {@link ensureSkillsBridge}).
|
|
73
|
-
* We probe for `SKILL.md` (not the directory) so a symlinked skill still resolves.
|
|
74
|
-
*/
|
|
75
|
-
function skillSearchDirs(): string[] {
|
|
76
|
-
const dirs: string[] = []
|
|
77
|
-
let cur = process.cwd()
|
|
78
|
-
for (;;) {
|
|
79
|
-
dirs.push(join(cur, '.claude', 'skills'))
|
|
80
|
-
const parent = dirname(cur)
|
|
81
|
-
if (parent === cur) break
|
|
82
|
-
cur = parent
|
|
83
|
-
}
|
|
84
|
-
dirs.push(join(homedir(), '.claude', 'skills'))
|
|
85
|
-
return dirs
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export type SkillPresence = { installed: boolean; location: string | null }
|
|
89
|
-
|
|
90
|
-
/** Is `<name>/SKILL.md` present in a directory the harness actually loads from? */
|
|
91
|
-
export function detectSkill(name: string): SkillPresence {
|
|
92
|
-
for (const dir of skillSearchDirs()) {
|
|
93
|
-
const file = join(dir, name, 'SKILL.md')
|
|
94
|
-
if (existsSync(file)) return { installed: true, location: file }
|
|
95
|
-
}
|
|
96
|
-
return { installed: false, location: null }
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Is the `agent-browser` binary resolvable on PATH? */
|
|
100
|
-
export async function detectAgentBrowser(): Promise<boolean> {
|
|
101
|
-
return (await findAgentBrowser()) !== null
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/* ───────────────────────────── skills bridge ─────────────────────────────
|
|
105
|
-
* Agent tooling stages skills under `.agents/skills`, but the harness only loads
|
|
106
|
-
* `.claude/skills` (walking up). A single `.claude/skills -> ../.agents/skills`
|
|
107
|
-
* symlink bridges EVERY staged skill — present and future — for a workspace and
|
|
108
|
-
* every project nested under it. This is exactly how this monorepo wires itself.
|
|
109
|
-
* It complements the global `-g` installs above: those equip machine-wide skills
|
|
110
|
-
* the CLI owns; this makes a workspace's own staged skills loadable. */
|
|
111
|
-
|
|
112
|
-
/** The relative target every bridge points at, from `<root>/.claude/skills`. */
|
|
113
|
-
const BRIDGE_TARGET = join('..', '.agents', 'skills')
|
|
114
|
-
|
|
115
|
-
function isSymlink(p: string): boolean {
|
|
116
|
-
try {
|
|
117
|
-
return lstatSync(p).isSymbolicLink()
|
|
118
|
-
} catch {
|
|
119
|
-
return false
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/** Nearest ancestor of `fromDir` (inclusive) that stages skills under
|
|
124
|
-
* `.agents/skills` — the "skills workspace root". null if none up the tree. */
|
|
125
|
-
function findAgentsSkillsRoot(fromDir: string): string | null {
|
|
126
|
-
let cur = fromDir
|
|
127
|
-
for (;;) {
|
|
128
|
-
if (existsSync(join(cur, '.agents', 'skills'))) return cur
|
|
129
|
-
const parent = dirname(cur)
|
|
130
|
-
if (parent === cur) return null
|
|
131
|
-
cur = parent
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export type BridgeStatus =
|
|
136
|
-
/** no `.agents/skills` up the tree → nothing to bridge */
|
|
137
|
-
| { kind: 'none' }
|
|
138
|
-
/** `.claude/skills` already symlinks to `.agents/skills` → harness loads them */
|
|
139
|
-
| { kind: 'bridged'; root: string }
|
|
140
|
-
/** `.claude/skills` exists but isn't our bridge (a real dir / foreign link) → leave it */
|
|
141
|
-
| { kind: 'foreign'; root: string }
|
|
142
|
-
/** `.agents/skills` present, no `.claude/skills` → we can create the bridge */
|
|
143
|
-
| { kind: 'unbridged'; root: string; link: string }
|
|
144
|
-
|
|
145
|
-
/** Read-only: is the workspace's `.agents/skills` visible to the harness? */
|
|
146
|
-
export function skillsBridgeStatus(fromDir: string = process.cwd()): BridgeStatus {
|
|
147
|
-
const root = findAgentsSkillsRoot(fromDir)
|
|
148
|
-
if (!root) return { kind: 'none' }
|
|
149
|
-
const link = join(root, '.claude', 'skills')
|
|
150
|
-
if (isSymlink(link)) {
|
|
151
|
-
try {
|
|
152
|
-
if (readlinkSync(link) === BRIDGE_TARGET) return { kind: 'bridged', root }
|
|
153
|
-
} catch {
|
|
154
|
-
/* unreadable link → treat as foreign, don't touch it */
|
|
155
|
-
}
|
|
156
|
-
return { kind: 'foreign', root }
|
|
157
|
-
}
|
|
158
|
-
if (existsSync(link)) return { kind: 'foreign', root }
|
|
159
|
-
return { kind: 'unbridged', root, link }
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/** Create the `.claude/skills -> ../.agents/skills` bridge if it's missing.
|
|
163
|
-
* Idempotent and NON-destructive: a correct bridge is left as-is; a pre-existing
|
|
164
|
-
* real `.claude/skills` (or a foreign symlink) is never clobbered. */
|
|
165
|
-
export function ensureSkillsBridge(fromDir: string = process.cwd()): BridgeStatus {
|
|
166
|
-
const status = skillsBridgeStatus(fromDir)
|
|
167
|
-
if (status.kind !== 'unbridged') return status
|
|
168
|
-
mkdirSync(dirname(status.link), { recursive: true })
|
|
169
|
-
symlinkSync(BRIDGE_TARGET, status.link)
|
|
170
|
-
return { kind: 'bridged', root: status.root }
|
|
171
|
-
}
|
package/src/lib/table.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk'
|
|
2
|
-
|
|
3
|
-
/** A display column: which row key to read, its header, and an optional cell color. */
|
|
4
|
-
export type Column = { key: string; header: string; color?: (s: string) => string }
|
|
5
|
-
|
|
6
|
-
const GUTTER = ' '
|
|
7
|
-
// ESC[…m — built without a control char in the source so no lint disable is needed.
|
|
8
|
-
const ANSI = new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`, 'g')
|
|
9
|
-
|
|
10
|
-
/** Printable width of a string, ignoring ANSI color codes. */
|
|
11
|
-
function visibleWidth(s: string): number {
|
|
12
|
-
return s.replace(ANSI, '').length
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/** Pad to a target *visible* width (color codes don't count toward length). */
|
|
16
|
-
function pad(s: string, width: number): string {
|
|
17
|
-
const diff = width - visibleWidth(s)
|
|
18
|
-
return diff > 0 ? s + ' '.repeat(diff) : s
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Render an aligned, optionally-colored table.
|
|
23
|
-
*
|
|
24
|
-
* Cells may carry ANSI (e.g. a per-row status color) — widths are computed on
|
|
25
|
-
* visible length so alignment stays correct. `Column.color` colors a whole
|
|
26
|
-
* column of otherwise-plain cells. Columns empty across every row are dropped;
|
|
27
|
-
* the last column is left unpadded so there's no trailing whitespace.
|
|
28
|
-
*/
|
|
29
|
-
export function renderTable(
|
|
30
|
-
rows: Array<Record<string, string>>,
|
|
31
|
-
opts: { columns: Column[]; showHeader?: boolean },
|
|
32
|
-
): string {
|
|
33
|
-
if (rows.length === 0) return chalk.dim(' (empty)')
|
|
34
|
-
|
|
35
|
-
const cols = opts.columns.filter((c) => rows.some((r) => (r[c.key] ?? '') !== ''))
|
|
36
|
-
if (cols.length === 0) return chalk.dim(' (empty)')
|
|
37
|
-
|
|
38
|
-
const widths = cols.map((c) =>
|
|
39
|
-
Math.max(
|
|
40
|
-
opts.showHeader ? c.header.length : 0,
|
|
41
|
-
...rows.map((r) => visibleWidth(r[c.key] ?? '')),
|
|
42
|
-
),
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
const line = (cell: (col: Column, i: number) => string): string =>
|
|
46
|
-
' ' + cols.map(cell).join(GUTTER).replace(/\s+$/, '')
|
|
47
|
-
|
|
48
|
-
const lines: string[] = []
|
|
49
|
-
if (opts.showHeader) {
|
|
50
|
-
lines.push(line((c, i) => chalk.dim(pad(c.header, widths[i]))))
|
|
51
|
-
}
|
|
52
|
-
for (const r of rows) {
|
|
53
|
-
lines.push(
|
|
54
|
-
line((c, i) => {
|
|
55
|
-
const raw = r[c.key] ?? ''
|
|
56
|
-
const text = i === cols.length - 1 ? raw : pad(raw, widths[i])
|
|
57
|
-
return c.color ? c.color(text) : text
|
|
58
|
-
}),
|
|
59
|
-
)
|
|
60
|
-
}
|
|
61
|
-
return lines.join('\n')
|
|
62
|
-
}
|