@astrale-os/cli 1.0.0-beta.32 → 1.0.0-beta.43
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/CHANGELOG.md +928 -0
- package/README.md +53 -43
- package/THIRD-PARTY-NOTICES.md +37 -1
- package/dist/astrale.js +349631 -83669
- package/dist/public/connect-core.js +16 -47
- package/dist/public/keys/index.js +1 -1
- package/dist/types/admin/contract.d.ts +11 -0
- package/dist/types/admin/graph/index.d.ts +1 -0
- package/dist/types/admin/graph/nodes.d.ts +12 -0
- package/dist/types/admin/instance/client.d.ts +2 -0
- package/dist/types/connection/lifetime.d.ts +1 -1
- package/dist/types/errors.d.ts +3 -0
- package/dist/types/lib/proc.d.ts +1 -0
- package/dist/types/lib/update.d.ts +15 -7
- package/package.json +8 -6
- package/studio/client/dist/assets/index-5C1uT6ML.css +2 -0
- package/studio/client/dist/assets/index-C4kNlvwF.js +80 -0
- package/studio/client/dist/assets/schema-studio-BR9d0faB.js +8 -0
- package/studio/client/dist/index.html +13 -2
- package/studio/package.json +2 -1
- package/studio/server/agent/ask.test.ts +7 -1
- package/studio/server/agent/bridge/grant.ts +15 -3
- package/studio/server/agent/prompts/system.test.ts +5 -0
- package/studio/server/agent/prompts/system.ts +19 -4
- package/studio/server/agent/routes.test.ts +39 -1
- package/studio/server/agent/routes.ts +3 -0
- package/studio/server/agent/run/coordinator.test.ts +7 -1
- package/studio/server/agent/run/preparation.ts +1 -0
- package/studio/server/agent/run/transcript.test.ts +47 -2
- package/studio/server/agent/run/transcript.ts +32 -3
- package/studio/server/api/documents.test.ts +31 -0
- package/studio/server/api/documents.ts +35 -1
- package/studio/server/api-agent-loadout.test.ts +7 -1
- package/studio/server/api.test.ts +7 -1
- package/studio/server/cache.ts +4 -4
- package/studio/server/detect.ts +9 -12
- package/studio/server/domain.test.ts +83 -3
- package/studio/server/domain.ts +205 -27
- package/studio/server/handoff/service.ts +1 -1
- package/studio/server/index.ts +5 -8
- package/studio/server/introspect/extractor.ts +111 -17
- package/studio/server/introspect/overlay-tsmorph.test.ts +9 -9
- package/studio/server/introspect/overlay.ts +1 -1
- package/studio/server/introspect/runtime.ts +9 -1
- package/studio/server/introspect/source-overlay/spans.ts +2 -5
- package/studio/server/lifecycle.ts +1 -1
- package/studio/server/state/baseline.test.ts +14 -0
- package/studio/server/state/baseline.ts +16 -2
- package/studio/server/watch.test.ts +2 -1
- package/studio/server/watch.ts +5 -2
- package/studio/server/workspace/create.ts +9 -8
- package/studio/server/workspace-state.ts +4 -6
- package/studio/server/workspace-watch.ts +33 -22
- package/studio/shared/contracts/agent.ts +3 -0
- package/viewer/dist/main.js +12 -12
- package/src/__tests__/fixtures/publication.ts +0 -20
- package/src/admin/.spec/api.d.ts +0 -3
- package/src/admin/.spec/architecture.md +0 -22
- package/src/admin/.spec/icon.svg +0 -3
- package/src/admin/.spec/layout.ts +0 -6
- package/src/admin/__tests__/fixture.ts +0 -25
- package/src/admin/catalog/.spec/api.d.ts +0 -63
- package/src/admin/catalog/.spec/architecture.md +0 -7
- 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 -245
- package/src/admin/catalog/client.ts +0 -195
- 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/contract.ts +0 -47
- 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 -62
- 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 -273
- package/src/admin/instance/client.ts +0 -191
- package/src/admin/instance/index.ts +0 -15
- package/src/admin/instance/model.ts +0 -59
- package/src/admin/instance/tsconfig.json +0 -8
- package/src/commands/__tests__/admin-instance.test.ts +0 -91
- 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 -63
- package/src/commands/__tests__/domain-install-operation.test.ts +0 -145
- 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 -128
- 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-list-admin.test.ts +0 -26
- package/src/commands/__tests__/instance-list-rows.test.ts +0 -64
- package/src/commands/__tests__/instance-status.test.ts +0 -139
- package/src/commands/__tests__/instance-use.test.ts +0 -67
- package/src/commands/__tests__/introspect-parse.test.ts +0 -100
- package/src/commands/__tests__/logs.test.ts +0 -345
- package/src/commands/__tests__/read-commands.test.ts +0 -377
- 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 -66
- 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 -197
- 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 -53
- package/src/commands/auth/status.ts +0 -86
- package/src/commands/auth/token.ts +0 -174
- package/src/commands/browser.ts +0 -236
- package/src/commands/call-describe.ts +0 -123
- package/src/commands/call.ts +0 -230
- package/src/commands/domain/install.ts +0 -575
- package/src/commands/domain/list.ts +0 -155
- package/src/commands/domain/publish.ts +0 -136
- 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 -195
- 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 -61
- package/src/commands/instance/delete.ts +0 -69
- package/src/commands/instance/forget.ts +0 -26
- package/src/commands/instance/list.ts +0 -197
- package/src/commands/instance/status.ts +0 -92
- package/src/commands/instance/use.ts +0 -263
- package/src/commands/introspect.ts +0 -129
- package/src/commands/logs.ts +0 -371
- package/src/commands/mutate.ts +0 -122
- package/src/commands/query.ts +0 -142
- package/src/commands/session/analyze.ts +0 -72
- 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 -121
- package/src/commands/ui/__tests__/commands.test.ts +0 -152
- package/src/commands/ui/add.ts +0 -51
- package/src/commands/ui/doctor.ts +0 -21
- package/src/commands/ui/init.ts +0 -38
- package/src/commands/ui/list.ts +0 -26
- package/src/commands/ui/preset-apply.ts +0 -19
- package/src/commands/ui/preset-list.ts +0 -12
- package/src/commands/ui/shared.ts +0 -25
- package/src/commands/update.ts +0 -356
- package/src/commands/use.ts +0 -86
- package/src/commands/view-serve.ts +0 -26
- package/src/commands/view.ts +0 -658
- 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 -58
- 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 -62
- package/src/connection/.spec/laws/connection.ts +0 -213
- package/src/connection/.spec/layout.ts +0 -22
- package/src/connection/__tests__/auth.test.ts +0 -129
- 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 -254
- package/src/connection/__tests__/errors.test.ts +0 -577
- package/src/connection/__tests__/exchange.test.ts +0 -404
- 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 -144
- package/src/connection/__tests__/target.test.ts +0 -95
- package/src/connection/auth.ts +0 -265
- package/src/connection/call.ts +0 -7
- package/src/connection/command.ts +0 -67
- package/src/connection/credential.ts +0 -138
- package/src/connection/errors.ts +0 -1
- package/src/connection/exchange.ts +0 -394
- 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/lifetime.ts +0 -25
- package/src/connection/reasons.ts +0 -209
- package/src/connection/self.ts +0 -138
- package/src/connection/session.ts +0 -203
- 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 -180
- 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 -95
- 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/__tests__/fixtures/registry-journey.ts +0 -65
- package/src/identity/__tests__/registration.test.ts +0 -64
- package/src/identity/__tests__/registry.test.ts +0 -74
- 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 -181
- 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 -172
- package/src/keys/algorithm.ts +0 -33
- package/src/keys/credential.ts +0 -113
- 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 -70
- package/src/lib/__tests__/browser-retention.test.ts +0 -212
- 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 -81
- package/src/lib/__tests__/design.test.ts +0 -99
- package/src/lib/__tests__/domain-publication.test.ts +0 -138
- package/src/lib/__tests__/format.test.ts +0 -22
- package/src/lib/__tests__/idp-session.driver.ts +0 -60
- package/src/lib/__tests__/idp-session.test.ts +0 -404
- package/src/lib/__tests__/idp.test.ts +0 -415
- package/src/lib/__tests__/instance-candidates.test.ts +0 -146
- package/src/lib/__tests__/instance-target.test.ts +0 -213
- 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__/skills.test.ts +0 -834
- 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 -511
- 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 -171
- package/src/lib/__tests__/view-external-open-intent.test.ts +0 -150
- package/src/lib/__tests__/view-external-open-origins.test.ts +0 -27
- 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 -91
- package/src/lib/__tests__/view-session.test.ts +0 -100
- 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 -56
- package/src/lib/admin-target.ts +0 -290
- package/src/lib/binary.ts +0 -127
- package/src/lib/browser-retention.ts +0 -210
- package/src/lib/browser.ts +0 -150
- package/src/lib/ca-fetch.ts +0 -133
- package/src/lib/command-dx.ts +0 -191
- package/src/lib/concurrency.ts +0 -31
- package/src/lib/config.ts +0 -57
- package/src/lib/credential-lifetime.ts +0 -24
- package/src/lib/domain-publication.ts +0 -104
- package/src/lib/failure-debug.ts +0 -26
- package/src/lib/format.ts +0 -4
- package/src/lib/idp-session.ts +0 -156
- package/src/lib/idp.ts +0 -926
- package/src/lib/instance-candidates.ts +0 -49
- package/src/lib/instance-target.ts +0 -197
- package/src/lib/instance.ts +0 -468
- 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 -87
- package/src/lib/prompt.ts +0 -136
- package/src/lib/provision-instance.ts +0 -139
- package/src/lib/sdk-deps.ts +0 -104
- package/src/lib/self.ts +0 -22
- package/src/lib/skills/lock.ts +0 -117
- package/src/lib/skills/sync.ts +0 -878
- package/src/lib/skills.ts +0 -120
- package/src/lib/table.ts +0 -62
- package/src/lib/update.ts +0 -568
- package/src/lib/use-target.ts +0 -24
- package/src/lib/validation.ts +0 -59
- package/src/lib/view/assets.ts +0 -87
- package/src/lib/view/external-open-intent.ts +0 -41
- package/src/lib/view/external-open-origins.ts +0 -37
- package/src/lib/view/host-capabilities.ts +0 -17
- 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 -259
- package/src/lib/view/session.ts +0 -154
- 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 -43
- 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 -556
- package/src/program/argv.ts +0 -14
- package/src/program/build.ts +0 -205
- package/src/program/command.ts +0 -43
- package/src/program/index.ts +0 -3
- package/src/program/options.ts +0 -41
- package/src/program/registry.ts +0 -64
- package/src/program/tsconfig.json +0 -6
- package/src/setup/__tests__/instance-step.test.ts +0 -256
- 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 -206
- package/src/setup/steps/skills-bridge.ts +0 -70
- package/src/setup/steps/skills.ts +0 -61
- package/src/setup/types.ts +0 -61
- package/src/setup/util.ts +0 -34
- package/src/state/.spec/api.d.ts +0 -152
- package/src/state/.spec/architecture.md +0 -45
- 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 -15
- package/src/state/__tests__/exchange-credentials.test.ts +0 -341
- package/src/state/__tests__/files.test.ts +0 -136
- package/src/state/__tests__/fixtures/identity-transition.ts +0 -37
- package/src/state/__tests__/fixtures/session-route-process.ts +0 -93
- package/src/state/__tests__/identities.test.ts +0 -142
- package/src/state/__tests__/paths.test.ts +0 -28
- package/src/state/__tests__/session-routes.test.ts +0 -138
- package/src/state/exchange-credentials.ts +0 -250
- package/src/state/files.ts +0 -170
- package/src/state/identities.ts +0 -229
- package/src/state/index.ts +0 -31
- package/src/state/paths.ts +0 -64
- package/src/state/session-routes.ts +0 -34
- package/src/state/tsconfig.json +0 -6
- package/src/telemetry/__tests__/analyze-log.test.ts +0 -38
- package/src/telemetry/__tests__/gate.test.ts +0 -63
- package/src/telemetry/__tests__/recorder.test.ts +0 -111
- package/src/telemetry/__tests__/redact.test.ts +0 -79
- package/src/telemetry/__tests__/retention.test.ts +0 -267
- package/src/telemetry/__tests__/session.test.ts +0 -166
- package/src/telemetry/__tests__/settings.test.ts +0 -102
- package/src/telemetry/__tests__/store-scan.test.ts +0 -128
- package/src/telemetry/__tests__/trigger.test.ts +0 -78
- 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 -249
- package/src/telemetry/gate.ts +0 -79
- package/src/telemetry/recorder.ts +0 -68
- package/src/telemetry/redact.ts +0 -53
- package/src/telemetry/retention.ts +0 -176
- package/src/telemetry/session.ts +0 -94
- package/src/telemetry/settings.ts +0 -79
- package/src/telemetry/store.ts +0 -174
- package/src/telemetry/trigger.ts +0 -107
- package/src/telemetry/types.ts +0 -64
- package/src/test-utils.ts +0 -18
- package/src/ui/.spec/api.d.ts +0 -14
- package/src/ui/.spec/architecture.md +0 -14
- package/src/ui/.spec/laws.ts +0 -50
- package/src/ui/.spec/layout.ts +0 -16
- package/src/ui/__tests__/ui.test.ts +0 -1742
- package/src/ui/index.ts +0 -13
- package/src/ui/lock.ts +0 -89
- package/src/ui/model.ts +0 -83
- package/src/ui/operations.ts +0 -1044
- package/src/ui/project.ts +0 -333
- package/src/ui/release.ts +0 -398
- package/src/ui/runner.ts +0 -18
- package/studio/client/dist/assets/index-BFVFs_8x.js +0 -81
- package/studio/client/dist/assets/index-DuB9iUdu.css +0 -2
- package/studio/client/dist/assets/schema-studio-DH6oEWME.js +0 -8
- package/studio/tsconfig.json +0 -24
- package/viewer/tsconfig.json +0 -13
|
@@ -1,139 +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 { validateSlug } from './validation'
|
|
13
|
-
|
|
14
|
-
export type ProvisionOpts = KernelCommandOpts &
|
|
15
|
-
AdminTargetCommandOpts & {
|
|
16
|
-
// Global flags (program.ts) that force non-interactive — mirrors `instance use`.
|
|
17
|
-
ci?: boolean
|
|
18
|
-
noPrompt?: boolean
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** The created instance plus the local-bookmark side effects of provisioning. */
|
|
22
|
-
export type ProvisionResult = {
|
|
23
|
-
/** The raw admin-kernel response — the stable machine surface for `--json`. */
|
|
24
|
-
created: { url: string; organizationId?: string }
|
|
25
|
-
slug: string
|
|
26
|
-
/** Set when an existing bookmark of the same name was repointed to a new kernel. */
|
|
27
|
-
repointedFrom?: string
|
|
28
|
-
/** Set when bookmarking/activating the new instance failed (non-fatal). */
|
|
29
|
-
selectionError?: unknown
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** Provisioning a child instance runs a multi-step saga (1-3 min). */
|
|
33
|
-
const SAGA_TIMEOUT_MS = '240000'
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Provision an instance through the admin kernel, then bookmark it and
|
|
37
|
-
* make it the active target. Extracted from `instance create` so `astrale
|
|
38
|
-
* setup` provisions through the exact same saga (auth assertion → create →
|
|
39
|
-
* bookmark → set-active).
|
|
40
|
-
*
|
|
41
|
-
* Presentation is deliberately minimal here (a spinner + a one-line success);
|
|
42
|
-
* the caller renders anything richer — `setup` follows this with a hero panel.
|
|
43
|
-
*/
|
|
44
|
-
export async function provisionInstance(
|
|
45
|
-
slug: string,
|
|
46
|
-
opts: ProvisionOpts,
|
|
47
|
-
): Promise<ProvisionResult> {
|
|
48
|
-
validateSlug(slug)
|
|
49
|
-
const authentication = await instanceCreateAuthentication(opts)
|
|
50
|
-
opts = authentication.opts
|
|
51
|
-
|
|
52
|
-
const machine = isMachine(opts)
|
|
53
|
-
let repointedFrom: string | undefined
|
|
54
|
-
let selectionError: unknown = null
|
|
55
|
-
// The global 30s default doesn't just fail the CLIENT: the disconnect kills
|
|
56
|
-
// the worker's request mid-saga and leaves TORN state (slug taken, routing
|
|
57
|
-
// live, no instance node — unrecoverable by retry). Default to a saga-sized
|
|
58
|
-
// timeout; an explicit --timeout still wins.
|
|
59
|
-
const createOpts = { ...opts, timeout: opts.timeout ?? SAGA_TIMEOUT_MS }
|
|
60
|
-
|
|
61
|
-
const runProvision = () =>
|
|
62
|
-
withSpinner(
|
|
63
|
-
`Provisioning instance ${slug}`,
|
|
64
|
-
!machine,
|
|
65
|
-
async () => {
|
|
66
|
-
const created = await createOwnedInstance(createOpts, slug)
|
|
67
|
-
try {
|
|
68
|
-
// Org id from the create response — authoritative for token scoping
|
|
69
|
-
// (the router's /auth/org is eventually consistent).
|
|
70
|
-
const bookmarked = await upsertManagedBookmark({
|
|
71
|
-
key: slug,
|
|
72
|
-
slug,
|
|
73
|
-
url: created.url,
|
|
74
|
-
...(created.organizationId ? { organizationId: created.organizationId } : {}),
|
|
75
|
-
...(authentication.defaultIdentity
|
|
76
|
-
? { defaultIdentity: authentication.defaultIdentity }
|
|
77
|
-
: {}),
|
|
78
|
-
})
|
|
79
|
-
repointedFrom = bookmarked.repointedFrom
|
|
80
|
-
await setActive(slug)
|
|
81
|
-
} catch (e) {
|
|
82
|
-
selectionError = e
|
|
83
|
-
}
|
|
84
|
-
return created
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
success: (created) =>
|
|
88
|
-
`Instance provisioned: ${slug} ${chalk.dim(`(${created.url})${selectionError ? '' : ' · active'}`)}`,
|
|
89
|
-
},
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
const created = await runProvision()
|
|
93
|
-
|
|
94
|
-
// Warnings go to stderr so machine-readable stdout stays clean.
|
|
95
|
-
const warn = (msg: string) => console.error(chalk.yellow('⚠'), msg)
|
|
96
|
-
if (selectionError) {
|
|
97
|
-
const message =
|
|
98
|
-
selectionError instanceof Error ? selectionError.message : String(selectionError)
|
|
99
|
-
warn(`Could not select the new instance: ${message}`)
|
|
100
|
-
} else if (repointedFrom) {
|
|
101
|
-
warn(`Bookmark "${slug}" repointed: ${repointedFrom} → ${created.url}`)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return { created, slug, repointedFrom, ...(selectionError ? { selectionError } : {}) }
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
async function instanceCreateAuthentication(opts: ProvisionOpts): Promise<{
|
|
108
|
-
readonly opts: ProvisionOpts
|
|
109
|
-
readonly defaultIdentity?: string
|
|
110
|
-
}> {
|
|
111
|
-
if (opts.creds) return { opts }
|
|
112
|
-
const store = await readIdentities()
|
|
113
|
-
const defaultIdentity = selectInstanceCreateIdentity(store, opts)
|
|
114
|
-
return {
|
|
115
|
-
opts: opts.as ? opts : { ...opts, as: defaultIdentity },
|
|
116
|
-
defaultIdentity,
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
export function selectInstanceCreateIdentity(
|
|
121
|
-
store: IdentityStore,
|
|
122
|
-
opts: Pick<ProvisionOpts, 'as'> = {},
|
|
123
|
-
): string {
|
|
124
|
-
assertInstanceCreateIdentity(store, opts)
|
|
125
|
-
return opts.as ?? store.default
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export function assertInstanceCreateIdentity(
|
|
129
|
-
store: IdentityStore,
|
|
130
|
-
opts: Pick<ProvisionOpts, 'as'> = {},
|
|
131
|
-
): void {
|
|
132
|
-
const name = opts.as ?? store.default
|
|
133
|
-
const identity = store.identities[name]
|
|
134
|
-
if (identity && identity.source === 'idp') return
|
|
135
|
-
throw new AuthError(
|
|
136
|
-
'WorkOS login required for `astrale instance create`',
|
|
137
|
-
'Run: astrale auth login',
|
|
138
|
-
)
|
|
139
|
-
}
|
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/lock.ts
DELETED
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto'
|
|
2
|
-
import { lstat, mkdir, readFile, readdir, rm, stat, unlink, writeFile } from 'node:fs/promises'
|
|
3
|
-
import { dirname, join } from 'node:path'
|
|
4
|
-
|
|
5
|
-
export type FileLockOptions = {
|
|
6
|
-
pollIntervalMs?: number
|
|
7
|
-
staleAfterMs?: number
|
|
8
|
-
timeoutMs?: number
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
type Claim = { directory: string; pid: number; ticket: number | null; choosing: boolean }
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Serialize a cross-process transition with a filesystem bakery lock.
|
|
15
|
-
*
|
|
16
|
-
* Every contender owns a UUID directory for its entire lifetime. Dead claims are
|
|
17
|
-
* removed only by that unrepeatable name, so recovery never deletes a pathname a
|
|
18
|
-
* new live owner could have replaced between an ownership check and an unlink.
|
|
19
|
-
*/
|
|
20
|
-
export async function withFileLock<T>(
|
|
21
|
-
lockPath: string,
|
|
22
|
-
fn: () => Promise<T>,
|
|
23
|
-
opts: FileLockOptions = {},
|
|
24
|
-
): Promise<T> {
|
|
25
|
-
const pollIntervalMs = opts.pollIntervalMs ?? 100
|
|
26
|
-
const staleAfterMs = opts.staleAfterMs ?? 30_000
|
|
27
|
-
const timeoutMs = opts.timeoutMs ?? 60_000
|
|
28
|
-
const deadline = Date.now() + timeoutMs
|
|
29
|
-
const claimsRoot = `${lockPath}.claims`
|
|
30
|
-
const token = randomUUID()
|
|
31
|
-
const claimDirectory = join(claimsRoot, token)
|
|
32
|
-
|
|
33
|
-
await mkdir(dirname(lockPath), { recursive: true })
|
|
34
|
-
await mkdir(claimsRoot, { recursive: true })
|
|
35
|
-
await mkdir(claimDirectory)
|
|
36
|
-
await writeFile(join(claimDirectory, 'owner.json'), JSON.stringify({ pid: process.pid }), {
|
|
37
|
-
mode: 0o600,
|
|
38
|
-
})
|
|
39
|
-
await writeFile(join(claimDirectory, 'choosing'), '', { mode: 0o600 })
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
const claims = await liveClaims(claimsRoot, staleAfterMs)
|
|
43
|
-
const ticket = Math.max(0, ...claims.flatMap((claim) => claim.ticket ?? [])) + 1
|
|
44
|
-
await writeFile(join(claimDirectory, 'ticket'), String(ticket), { mode: 0o600 })
|
|
45
|
-
await unlink(join(claimDirectory, 'choosing'))
|
|
46
|
-
|
|
47
|
-
for (;;) {
|
|
48
|
-
const contenders = await liveClaims(claimsRoot, staleAfterMs)
|
|
49
|
-
const blocked = contenders.some(
|
|
50
|
-
(claim) =>
|
|
51
|
-
claim.directory !== claimDirectory &&
|
|
52
|
-
(claim.choosing ||
|
|
53
|
-
claim.ticket === null ||
|
|
54
|
-
claim.ticket < ticket ||
|
|
55
|
-
(claim.ticket === ticket && claim.directory < claimDirectory)),
|
|
56
|
-
)
|
|
57
|
-
if (!blocked) return await fn()
|
|
58
|
-
if (Date.now() >= deadline) throw new Error('Timed out waiting for another skill update')
|
|
59
|
-
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs))
|
|
60
|
-
}
|
|
61
|
-
} finally {
|
|
62
|
-
await rm(claimDirectory, { recursive: true, force: true })
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async function liveClaims(root: string, staleAfterMs: number): Promise<Claim[]> {
|
|
67
|
-
const directories = (await readdir(root, { withFileTypes: true }).catch(() => []))
|
|
68
|
-
.filter((entry) => entry.isDirectory())
|
|
69
|
-
.map((entry) => join(root, entry.name))
|
|
70
|
-
const claims = await Promise.all(
|
|
71
|
-
directories.map(async (directory): Promise<Claim | null> => {
|
|
72
|
-
try {
|
|
73
|
-
const owner = JSON.parse(await readFile(join(directory, 'owner.json'), 'utf8')) as {
|
|
74
|
-
pid?: unknown
|
|
75
|
-
}
|
|
76
|
-
if (typeof owner.pid !== 'number') return await discardIfStale(directory, staleAfterMs)
|
|
77
|
-
if (!isPidAlive(owner.pid)) {
|
|
78
|
-
await rm(directory, { recursive: true, force: true })
|
|
79
|
-
return null
|
|
80
|
-
}
|
|
81
|
-
const choosing = await lstat(join(directory, 'choosing'))
|
|
82
|
-
.then(() => true)
|
|
83
|
-
.catch(() => false)
|
|
84
|
-
const ticket = await readFile(join(directory, 'ticket'), 'utf8')
|
|
85
|
-
.then((value) => {
|
|
86
|
-
const parsed = Number(value)
|
|
87
|
-
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null
|
|
88
|
-
})
|
|
89
|
-
.catch(() => null)
|
|
90
|
-
return { directory, pid: owner.pid, ticket, choosing }
|
|
91
|
-
} catch {
|
|
92
|
-
return await discardIfStale(directory, staleAfterMs)
|
|
93
|
-
}
|
|
94
|
-
}),
|
|
95
|
-
)
|
|
96
|
-
return claims.filter((claim): claim is Claim => claim !== null)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async function discardIfStale(directory: string, staleAfterMs: number): Promise<null> {
|
|
100
|
-
try {
|
|
101
|
-
if (Date.now() - (await stat(directory)).mtimeMs > staleAfterMs) {
|
|
102
|
-
await rm(directory, { recursive: true, force: true })
|
|
103
|
-
}
|
|
104
|
-
} catch {
|
|
105
|
-
// A concurrently released unique claim is already gone.
|
|
106
|
-
}
|
|
107
|
-
return null
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
function isPidAlive(pid: number): boolean {
|
|
111
|
-
try {
|
|
112
|
-
process.kill(pid, 0)
|
|
113
|
-
return true
|
|
114
|
-
} catch (error) {
|
|
115
|
-
return (error as { code?: string }).code === 'EPERM'
|
|
116
|
-
}
|
|
117
|
-
}
|