@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
|
-
/**
|
|
2
|
-
* Scaffold a brand-new domain into the workspace and bring it
|
|
3
|
-
* online. This is the studio's ONE write that ADDS a domain (every other state
|
|
4
|
-
* module operates on an existing one).
|
|
5
|
-
*
|
|
6
|
-
* Flow: validate the slug → `create-astrale-domain <slug> --yes` in the
|
|
7
|
-
* workspace root (the managed `astrale` adapter is its default; we stamp the
|
|
8
|
-
* active instance so prod targets it) → `pnpm install` in the new dir so the
|
|
9
|
-
* domain is fully introspectable + deployable → register + (re)boot it (the live
|
|
10
|
-
* watcher may have already booted a deps-less static fallback while we were
|
|
11
|
-
* installing; we stop that and boot fresh) → warm its bundle. The caller
|
|
12
|
-
* broadcasts the `workspace` event so every client refetches the domain list.
|
|
13
|
-
*/
|
|
14
|
-
import { existsSync, readFileSync, writeFileSync } from 'node:fs'
|
|
15
|
-
import { join } from 'node:path'
|
|
16
|
-
|
|
17
|
-
import { getBundle } from '../cache'
|
|
18
|
-
import { isDomainDir, registerDomain } from '../domain'
|
|
19
|
-
import { findSchemaDefinition } from '../introspect/anatomy-extras'
|
|
20
|
-
import { bootDomain } from '../lifecycle'
|
|
21
|
-
import { stoppers, workspaceRoot, workspaceSchemaDirName } from '../workspace-state'
|
|
22
|
-
|
|
23
|
-
/** Mirrors create-astrale-domain's `isValidSlug`: lowercase letters, digits, dots, dashes;
|
|
24
|
-
* must start/end alphanumeric. Also guards the filesystem target (no `/`, no `..`, no leading dot). */
|
|
25
|
-
const SLUG = /^[a-z0-9](?:[a-z0-9.-]*[a-z0-9])?$/
|
|
26
|
-
|
|
27
|
-
export interface CreateDomainResult {
|
|
28
|
-
ok: boolean
|
|
29
|
-
id?: string
|
|
30
|
-
origin?: string
|
|
31
|
-
error?: string
|
|
32
|
-
output: string
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function run(
|
|
36
|
-
cmd: string,
|
|
37
|
-
args: string[],
|
|
38
|
-
cwd: string,
|
|
39
|
-
): Promise<{ code: number; output: string }> {
|
|
40
|
-
try {
|
|
41
|
-
const proc = Bun.spawn([cmd, ...args], {
|
|
42
|
-
cwd,
|
|
43
|
-
stdout: 'pipe',
|
|
44
|
-
stderr: 'pipe',
|
|
45
|
-
env: process.env,
|
|
46
|
-
})
|
|
47
|
-
const [out, err] = await Promise.all([
|
|
48
|
-
new Response(proc.stdout).text(),
|
|
49
|
-
new Response(proc.stderr).text(),
|
|
50
|
-
])
|
|
51
|
-
const code = await proc.exited
|
|
52
|
-
return { code, output: `${out}\n${err}`.trim() }
|
|
53
|
-
} catch (e) {
|
|
54
|
-
return { code: 1, output: `failed to spawn ${cmd}: ${(e as Error)?.message ?? e}` }
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export async function createDomain(
|
|
59
|
-
rawName: string,
|
|
60
|
-
instance: string | null,
|
|
61
|
-
): Promise<CreateDomainResult> {
|
|
62
|
-
const name = rawName.trim().toLowerCase()
|
|
63
|
-
if (!name || name.length > 64 || !SLUG.test(name)) {
|
|
64
|
-
return {
|
|
65
|
-
ok: false,
|
|
66
|
-
error: 'Use lowercase letters, digits, dots and dashes (e.g. “crm” or “crm.acme.dev”).',
|
|
67
|
-
output: '',
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const root = workspaceRoot()
|
|
71
|
-
if (!root) return { ok: false, error: 'No workspace root is configured.', output: '' }
|
|
72
|
-
const dir = join(root, name)
|
|
73
|
-
if (existsSync(dir)) {
|
|
74
|
-
return {
|
|
75
|
-
ok: false,
|
|
76
|
-
error: `A folder named “${name}” already exists in the workspace.`,
|
|
77
|
-
output: '',
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// 1. Scaffold (non-interactive). `--yes` accepts defaults (astrale adapter, template);
|
|
82
|
-
// `--instance` stamps the active instance into the managed prod target.
|
|
83
|
-
const scaffoldArgs = [
|
|
84
|
-
'--yes',
|
|
85
|
-
'create-astrale-domain@latest',
|
|
86
|
-
name,
|
|
87
|
-
'--yes',
|
|
88
|
-
...(instance ? ['--instance', instance] : []),
|
|
89
|
-
]
|
|
90
|
-
const scaffold = await run('npx', scaffoldArgs, root)
|
|
91
|
-
const schemaDirName = workspaceSchemaDirName()
|
|
92
|
-
if (!isDomainDir(dir, schemaDirName)) {
|
|
93
|
-
return {
|
|
94
|
-
ok: false,
|
|
95
|
-
error: 'Scaffolding did not produce a domain. See the log.',
|
|
96
|
-
output: scaffold.output.slice(-6000),
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// 1b. Flag the placeholder origin for the agent (we ask for the name only, so the
|
|
101
|
-
// origin is `<name>.example.dev` until someone — or the agent — sets the real one).
|
|
102
|
-
annotateOrigin(dir, schemaDirName)
|
|
103
|
-
|
|
104
|
-
// 2. Install deps so the domain is fully introspectable + deployable. Best-effort:
|
|
105
|
-
// a scaffolded-but-uninstalled domain still loads (static fallback), so a failed
|
|
106
|
-
// install is a soft warning, not a hard failure.
|
|
107
|
-
const install = await run('pnpm', ['install'], dir)
|
|
108
|
-
|
|
109
|
-
// 3. Register + boot with deps present. The live watcher may have already booted a
|
|
110
|
-
// deps-less fallback for this dir mid-install — stop it and boot fresh.
|
|
111
|
-
const handle = registerDomain(dir, schemaDirName)
|
|
112
|
-
if (!handle) {
|
|
113
|
-
return {
|
|
114
|
-
ok: false,
|
|
115
|
-
error: 'Scaffold incomplete — config, composition entry, or schema index is missing.',
|
|
116
|
-
output: combine(scaffold, install),
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
stoppers.get(handle.id)?.()
|
|
120
|
-
const { origin } = await bootDomain(handle).then((b) => {
|
|
121
|
-
stoppers.set(handle.id, b.stop)
|
|
122
|
-
return b
|
|
123
|
-
})
|
|
124
|
-
await getBundle(handle.id, true) // refresh the cache now that deps are installed
|
|
125
|
-
|
|
126
|
-
return { ok: true, id: handle.id, origin, output: combine(scaffold, install) }
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function combine(a: { output: string }, b: { output: string }): string {
|
|
130
|
-
return `$ create-astrale-domain\n${a.output}\n\n$ pnpm install\n${b.output}`.trim().slice(-6000)
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Drop an agent-actionable marker on the origin line of the scaffolded schema.
|
|
135
|
-
* The public schema/index.ts is now commonly a barrel, so the definition is
|
|
136
|
-
* located statically below it. We only ask for the NAME, so the origin starts as the
|
|
137
|
-
* `<name>.example.dev` placeholder — this comment tells a human (or the studio's
|
|
138
|
-
* agent) it's a placeholder to change, and that the studio re-parses the literal
|
|
139
|
-
* as the source of truth so the rename takes effect on save. Best-effort: the
|
|
140
|
-
* template already explains the origin, so a parse miss is harmless.
|
|
141
|
-
*/
|
|
142
|
-
export function annotateOrigin(dir: string, schemaDirName = 'schema'): void {
|
|
143
|
-
const definition = findSchemaDefinition(dir, schemaDirName)
|
|
144
|
-
if (!definition) return
|
|
145
|
-
const file = definition.file
|
|
146
|
-
try {
|
|
147
|
-
const src = readFileSync(file, 'utf8')
|
|
148
|
-
if (src.includes('ORIGIN —')) return // already annotated (idempotent)
|
|
149
|
-
const lines = src.split('\n')
|
|
150
|
-
const index = Math.max(0, definition.line - 1)
|
|
151
|
-
const pad = lines[index]?.match(/^[ \t]*/)?.[0] ?? ''
|
|
152
|
-
const note =
|
|
153
|
-
`${pad}// ORIGIN — the domain's permanent identity in the graph. It was set from the name as a\n` +
|
|
154
|
-
`${pad}// PLACEHOLDER; change the literal or constant used here (e.g. to "crm.acme.dev"), ideally BEFORE\n` +
|
|
155
|
-
`${pad}// the first deploy (the origin is hard to change once installed). The studio parses this\n` +
|
|
156
|
-
`${pad}// schema statically as the source of truth, so the rename refreshes on save.\n`
|
|
157
|
-
lines.splice(index, 0, note.trimEnd())
|
|
158
|
-
writeFileSync(file, lines.join('\n'))
|
|
159
|
-
} catch {
|
|
160
|
-
/* best-effort */
|
|
161
|
-
}
|
|
162
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Best-effort workspace Git enrichment for change tracking. The fixtures are not
|
|
3
|
-
* git repos, so EVERY function here degrades gracefully and NEVER throws. The
|
|
4
|
-
* baseline (baseline.ts) is the primary tracker; git only enriches when present.
|
|
5
|
-
*/
|
|
6
|
-
import { execFileSync } from 'node:child_process'
|
|
7
|
-
import { existsSync } from 'node:fs'
|
|
8
|
-
import { dirname, relative, resolve } from 'node:path'
|
|
9
|
-
|
|
10
|
-
import type { FileChange } from '../../shared/types'
|
|
11
|
-
|
|
12
|
-
/** Walk parent dirs looking for a `.git` entry (dir or file, to support worktrees/submodules). */
|
|
13
|
-
export function detectGit(root: string): { hasGit: boolean; gitRoot?: string } {
|
|
14
|
-
let dir = resolve(root)
|
|
15
|
-
while (true) {
|
|
16
|
-
if (existsSync(resolve(dir, '.git'))) return { hasGit: true, gitRoot: dir }
|
|
17
|
-
const parent = dirname(dir)
|
|
18
|
-
if (parent === dir) return { hasGit: false }
|
|
19
|
-
dir = parent
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function git(gitRoot: string, args: string[]): string | null {
|
|
24
|
-
try {
|
|
25
|
-
return execFileSync('git', ['-C', gitRoot, ...args], {
|
|
26
|
-
encoding: 'utf8',
|
|
27
|
-
stdio: ['ignore', 'pipe', 'ignore'],
|
|
28
|
-
maxBuffer: 64 * 1024 * 1024,
|
|
29
|
-
})
|
|
30
|
-
} catch {
|
|
31
|
-
return null
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/** `git diff` scoped to the schema dir. Returns stdout (possibly '') or null when there is no git. */
|
|
36
|
-
export function gitDiff(root: string, schemaDirName: string): string | null {
|
|
37
|
-
const { hasGit, gitRoot } = detectGit(root)
|
|
38
|
-
if (!hasGit || !gitRoot) return null
|
|
39
|
-
// Path to the schema dir relative to the git root (forward-slashed for git).
|
|
40
|
-
const rel = relative(gitRoot, resolve(root, schemaDirName)).split('\\').join('/')
|
|
41
|
-
const out = git(gitRoot, ['diff', '--', rel || '.'])
|
|
42
|
-
return out
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** XY porcelain code → our FileChange status. Returns null for codes we don't surface. */
|
|
46
|
-
function mapStatus(xy: string): FileChange['status'] | null {
|
|
47
|
-
const x = xy[0] ?? ' '
|
|
48
|
-
const y = xy[1] ?? ' '
|
|
49
|
-
if (x === '?' || y === '?') return 'added' // untracked
|
|
50
|
-
if (x === 'A' || y === 'A') return 'added'
|
|
51
|
-
if (x === 'D' || y === 'D') return 'removed'
|
|
52
|
-
if (x === 'R' || y === 'R') return 'modified' // rename → surface destination as modified
|
|
53
|
-
if (x === 'M' || y === 'M' || x === 'C' || y === 'C' || x === 'U' || y === 'U') return 'modified'
|
|
54
|
-
return null
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/** Parse `git status --porcelain` into FileChange[]. Empty array when there is no git. */
|
|
58
|
-
export function gitStatus(root: string): FileChange[] {
|
|
59
|
-
const { hasGit, gitRoot } = detectGit(root)
|
|
60
|
-
if (!hasGit || !gitRoot) return []
|
|
61
|
-
const out = git(gitRoot, ['status', '--porcelain'])
|
|
62
|
-
if (out == null) return []
|
|
63
|
-
const changes: FileChange[] = []
|
|
64
|
-
for (const line of out.split('\n')) {
|
|
65
|
-
if (!line.trim()) continue
|
|
66
|
-
const xy = line.slice(0, 2)
|
|
67
|
-
let path = line.slice(3)
|
|
68
|
-
// Renames/copies render as "old -> new"; keep the destination path.
|
|
69
|
-
const arrow = path.indexOf(' -> ')
|
|
70
|
-
if (arrow !== -1) path = path.slice(arrow + 4)
|
|
71
|
-
const status = mapStatus(xy)
|
|
72
|
-
if (status) changes.push({ file: path, status })
|
|
73
|
-
}
|
|
74
|
-
return changes
|
|
75
|
-
}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workspace update bridge for the header Update badge.
|
|
3
|
-
*
|
|
4
|
-
* We don't reimplement staleness: the `astrale` CLI owns it. `astrale update
|
|
5
|
-
* --check --json`, run in the DOMAIN ROOT (so its @astrale-os/* SDK-dep axis sees
|
|
6
|
-
* THIS project), emits a unified `{ stale, cli, sdk }` report. We run it with
|
|
7
|
-
* stdout piped and read it regardless of exit code — a stale result exits 10 by
|
|
8
|
-
* design, which is not an error here. Best-effort: anything unexpected (no
|
|
9
|
-
* bad output) collapses to "nothing stale" so the badge stays
|
|
10
|
-
* hidden rather than nagging on a hiccup.
|
|
11
|
-
*/
|
|
12
|
-
import type { StaleReport } from '../../shared/types'
|
|
13
|
-
|
|
14
|
-
import { decodeJsonObject, runStudioCliJson, runStudioCliText } from '../cli'
|
|
15
|
-
|
|
16
|
-
const NOT_STALE: StaleReport = {
|
|
17
|
-
stale: false,
|
|
18
|
-
cli: { stale: false, managed: true },
|
|
19
|
-
sdk: { stale: false, inProject: false, outdated: [] },
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function getUpdates(root: string): Promise<StaleReport> {
|
|
23
|
-
const result = await runStudioCliJson(['update', '--check', '--json'], decodeStaleReport, {
|
|
24
|
-
cwd: root,
|
|
25
|
-
acceptedExitCodes: [0, 10],
|
|
26
|
-
})
|
|
27
|
-
return result.ok && result.data ? result.data : NOT_STALE
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function decodeStaleReport(value: unknown): StaleReport | null {
|
|
31
|
-
const report = decodeJsonObject(value)
|
|
32
|
-
const cli = decodeJsonObject(report?.cli)
|
|
33
|
-
const sdk = decodeJsonObject(report?.sdk)
|
|
34
|
-
if (
|
|
35
|
-
typeof report?.stale !== 'boolean' ||
|
|
36
|
-
typeof cli?.stale !== 'boolean' ||
|
|
37
|
-
typeof cli.managed !== 'boolean' ||
|
|
38
|
-
typeof sdk?.stale !== 'boolean' ||
|
|
39
|
-
typeof sdk.inProject !== 'boolean' ||
|
|
40
|
-
!Array.isArray(sdk.outdated)
|
|
41
|
-
) {
|
|
42
|
-
return null
|
|
43
|
-
}
|
|
44
|
-
const outdated = sdk.outdated.flatMap((value) => {
|
|
45
|
-
const item = decodeJsonObject(value)
|
|
46
|
-
return typeof item?.pkg === 'string' &&
|
|
47
|
-
typeof item.current === 'string' &&
|
|
48
|
-
typeof item.latest === 'string'
|
|
49
|
-
? [{ pkg: item.pkg, current: item.current, latest: item.latest }]
|
|
50
|
-
: []
|
|
51
|
-
})
|
|
52
|
-
if (outdated.length !== sdk.outdated.length) return null
|
|
53
|
-
return {
|
|
54
|
-
stale: report.stale,
|
|
55
|
-
cli: {
|
|
56
|
-
stale: cli.stale,
|
|
57
|
-
managed: cli.managed,
|
|
58
|
-
...(typeof cli.current === 'string' ? { current: cli.current } : {}),
|
|
59
|
-
...(typeof cli.latest === 'string' ? { latest: cli.latest } : {}),
|
|
60
|
-
...(typeof cli.channel === 'string' ? { channel: cli.channel } : {}),
|
|
61
|
-
},
|
|
62
|
-
sdk: { stale: sdk.stale, inProject: sdk.inProject, outdated },
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export interface UpdateApplyResult {
|
|
67
|
-
ok: boolean
|
|
68
|
-
output: string
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Apply the update for the header "Update now" button — `astrale update --yes`,
|
|
73
|
-
* run in the domain root. The CLI does the work non-interactively and resiliently
|
|
74
|
-
* (binary + skills + SDK deps; a binary that can't self-update warns but doesn't
|
|
75
|
-
* block the others), so we just spawn it and capture the combined output to show.
|
|
76
|
-
*/
|
|
77
|
-
export async function applyUpdates(root: string): Promise<UpdateApplyResult> {
|
|
78
|
-
const result = await runStudioCliText(['update', '--yes'], { cwd: root })
|
|
79
|
-
return {
|
|
80
|
-
ok: result.ok,
|
|
81
|
-
output: `${result.stdout}${result.stderr}`.trim() || result.detail,
|
|
82
|
-
}
|
|
83
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* workspace-state.ts — process-global workspace context shared by the entrypoint
|
|
3
|
-
* (index.ts), the live watcher (workspace-watch.ts), and the create-domain
|
|
4
|
-
* endpoint (workspace/create.ts): the scanned ROOT (where new domains are
|
|
5
|
-
* scaffolded), the schema-dir name, and the `domainId → file-watcher stop` map.
|
|
6
|
-
*
|
|
7
|
-
* It exists so the create endpoint can scaffold into the same root the studio
|
|
8
|
-
* watches — and re-boot the freshly-created domain — without index.ts having to
|
|
9
|
-
* thread those values through the API signature.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const state = { root: '', schemaDirName: 'schema' }
|
|
13
|
-
|
|
14
|
-
/** domainId → stop its file watcher. The startup scan + the live watcher + the
|
|
15
|
-
* create endpoint all share this one map so "what domains are live" stays single-sourced. */
|
|
16
|
-
export const stoppers = new Map<string, () => void>()
|
|
17
|
-
|
|
18
|
-
/** Called once at boot with the resolved workspace root + schema-dir name. */
|
|
19
|
-
export function initWorkspaceState(root: string, schemaDirName: string): void {
|
|
20
|
-
state.root = root
|
|
21
|
-
state.schemaDirName = schemaDirName
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** The directory the studio scans for domains — where `create new` scaffolds a sibling. */
|
|
25
|
-
export const workspaceRoot = (): string => state.root
|
|
26
|
-
export const workspaceSchemaDirName = (): string => state.schemaDirName
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* workspace-watch.ts — keeps the domain registry in sync with the workspace while
|
|
3
|
-
* the studio is running. A domain dropped in (or one whose astrale.config.ts +
|
|
4
|
-
* composition entry + schema/index.ts triple just completed) is registered, booted, and
|
|
5
|
-
* announced over SSE; one whose triple vanished is unregistered. It reuses
|
|
6
|
-
* `scanWorkspace` (detection) + `bootDomain` (lifecycle), so there is no second
|
|
7
|
-
* source of truth for "what is a domain" or "how a domain comes online".
|
|
8
|
-
*/
|
|
9
|
-
import chokidar from 'chokidar'
|
|
10
|
-
import { basename } from 'node:path'
|
|
11
|
-
|
|
12
|
-
import { scanWorkspace } from './detect'
|
|
13
|
-
import { allDomains, isDomainDir, unregisterDomain } from './domain'
|
|
14
|
-
import { bootDomain } from './lifecycle'
|
|
15
|
-
import { broadcast } from './sse'
|
|
16
|
-
|
|
17
|
-
const IGNORED =
|
|
18
|
-
/(^|[/\\])(node_modules|\.git|\.astrale|\.domain-studio|dist|\.dist|\.next|\.cache|\.turbo|\.vercel|coverage)([/\\]|$)/
|
|
19
|
-
// only these file changes can change the domain SET (vs. ordinary in-domain edits)
|
|
20
|
-
export const DOMAIN_SET_TRIGGER_FILES = new Set([
|
|
21
|
-
'astrale.config.ts',
|
|
22
|
-
'application.ts',
|
|
23
|
-
'schema.ts',
|
|
24
|
-
'index.ts',
|
|
25
|
-
])
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Watch `root` for domains appearing/disappearing.
|
|
29
|
-
* @param stoppers shared `domainId → file-watcher stop` map. The startup scan seeds
|
|
30
|
-
* it (via bootDomain); this watcher keeps it in sync as domains come and go.
|
|
31
|
-
*/
|
|
32
|
-
export function watchWorkspace(
|
|
33
|
-
root: string,
|
|
34
|
-
schemaDirName: string,
|
|
35
|
-
stoppers: Map<string, () => void>,
|
|
36
|
-
): () => void {
|
|
37
|
-
let timer: ReturnType<typeof setTimeout> | undefined
|
|
38
|
-
let running = false
|
|
39
|
-
let queued = false
|
|
40
|
-
|
|
41
|
-
const reconcile = async () => {
|
|
42
|
-
const before = new Set(allDomains().map((d) => d.id))
|
|
43
|
-
|
|
44
|
-
// 1. drop domains whose triple vanished (dir deleted, or a trigger file removed)
|
|
45
|
-
for (const h of allDomains()) {
|
|
46
|
-
if (isDomainDir(h.root, h.schemaDirName)) continue
|
|
47
|
-
stoppers.get(h.id)?.()
|
|
48
|
-
stoppers.delete(h.id)
|
|
49
|
-
unregisterDomain(h.id)
|
|
50
|
-
console.log(` Domain Studio — domain removed: ${h.id}`)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// 2. register + boot any new ones (scanWorkspace registers; bootDomain initializes + watches)
|
|
54
|
-
for (const h of scanWorkspace(root, schemaDirName)) {
|
|
55
|
-
if (stoppers.has(h.id)) continue
|
|
56
|
-
const { origin, stop } = await bootDomain(h)
|
|
57
|
-
stoppers.set(h.id, stop)
|
|
58
|
-
console.log(` Domain Studio — domain added: ${origin} (${h.id})`)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// 3. announce if the set changed → clients refetch /api/workspace
|
|
62
|
-
const after = new Set(allDomains().map((d) => d.id))
|
|
63
|
-
if (before.size !== after.size || [...after].some((id) => !before.has(id))) {
|
|
64
|
-
broadcast({ type: 'workspace', domains: [...after] })
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// serialize reconciles — bootDomain is async; coalesce event bursts
|
|
69
|
-
const run = async () => {
|
|
70
|
-
if (running) {
|
|
71
|
-
queued = true
|
|
72
|
-
return
|
|
73
|
-
}
|
|
74
|
-
running = true
|
|
75
|
-
try {
|
|
76
|
-
await reconcile()
|
|
77
|
-
} catch (e) {
|
|
78
|
-
console.error(' Domain Studio — workspace reconcile failed:', e)
|
|
79
|
-
} finally {
|
|
80
|
-
running = false
|
|
81
|
-
if (queued) {
|
|
82
|
-
queued = false
|
|
83
|
-
void run()
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
const schedule = () => {
|
|
88
|
-
clearTimeout(timer)
|
|
89
|
-
timer = setTimeout(() => void run(), 400)
|
|
90
|
-
}
|
|
91
|
-
const onFile = (p: string) => {
|
|
92
|
-
if (DOMAIN_SET_TRIGGER_FILES.has(basename(p))) schedule()
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const watcher = chokidar.watch(root, {
|
|
96
|
-
ignoreInitial: true,
|
|
97
|
-
depth: 4,
|
|
98
|
-
ignored: (p: string) => IGNORED.test(p),
|
|
99
|
-
})
|
|
100
|
-
watcher.on('addDir', schedule).on('unlinkDir', schedule).on('add', onFile).on('unlink', onFile)
|
|
101
|
-
|
|
102
|
-
return () => {
|
|
103
|
-
clearTimeout(timer)
|
|
104
|
-
void watcher.close()
|
|
105
|
-
}
|
|
106
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
import { effectiveAgentEffort } from './agent-effort'
|
|
4
|
-
|
|
5
|
-
test('normalizes persisted effort when switching harness vocabularies', () => {
|
|
6
|
-
expect(effectiveAgentEffort(['low', 'medium', 'high', 'xhigh'], 'max')).toBe('xhigh')
|
|
7
|
-
expect(effectiveAgentEffort(['low', 'medium', 'high', 'xhigh'], 'ultracode')).toBe('xhigh')
|
|
8
|
-
expect(effectiveAgentEffort(['low', 'medium', 'high'], 'minimal')).toBe('low')
|
|
9
|
-
expect(effectiveAgentEffort(['medium', 'high'], 'xhigh')).toBe('high')
|
|
10
|
-
expect(effectiveAgentEffort(['medium'], 'low')).toBe('medium')
|
|
11
|
-
expect(effectiveAgentEffort(['low'], undefined)).toBeUndefined()
|
|
12
|
-
})
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { AgentEffort } from './types'
|
|
2
|
-
|
|
3
|
-
/** Map a persisted cross-harness effort onto the selected harness's vocabulary. */
|
|
4
|
-
export function effectiveAgentEffort(
|
|
5
|
-
levels: readonly AgentEffort[],
|
|
6
|
-
requested?: string,
|
|
7
|
-
): AgentEffort | undefined {
|
|
8
|
-
if (!requested) return undefined
|
|
9
|
-
if (levels.includes(requested as AgentEffort)) return requested as AgentEffort
|
|
10
|
-
if (requested === 'max' && levels.includes('xhigh')) return 'xhigh'
|
|
11
|
-
if (requested === 'ultracode' && levels.includes('xhigh')) return 'xhigh'
|
|
12
|
-
if (requested === 'minimal' && levels.includes('low')) return 'low'
|
|
13
|
-
if (levels.includes('high')) return 'high'
|
|
14
|
-
return levels[0]
|
|
15
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { expect, test } from 'bun:test'
|
|
2
|
-
|
|
3
|
-
import { updateAgentModel } from './agent-models'
|
|
4
|
-
|
|
5
|
-
test('switching model overrides preserves independent harness selections', () => {
|
|
6
|
-
const selected = updateAgentModel({ claude: 'opus' }, 'Codex', ' gpt-5.4-mini ')
|
|
7
|
-
expect(selected).toEqual({ claude: 'opus', codex: 'gpt-5.4-mini' })
|
|
8
|
-
expect(updateAgentModel(selected, 'claude', '')).toEqual({ codex: 'gpt-5.4-mini' })
|
|
9
|
-
})
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/** Update one harness-specific model override without disturbing sibling harnesses. */
|
|
2
|
-
export function updateAgentModel(
|
|
3
|
-
current: Record<string, string>,
|
|
4
|
-
harness: string,
|
|
5
|
-
model: string,
|
|
6
|
-
): Record<string, string> {
|
|
7
|
-
const key = harness.trim().toLowerCase()
|
|
8
|
-
if (!key) return current
|
|
9
|
-
const next = { ...current }
|
|
10
|
-
const normalized = model.trim()
|
|
11
|
-
if (normalized) next[key] = normalized
|
|
12
|
-
else delete next[key]
|
|
13
|
-
return next
|
|
14
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Studio shared contract boundaries
|
|
2
|
-
|
|
3
|
-
`../types.ts` is the compatibility facade used by existing server and client
|
|
4
|
-
imports. Definitions live under one semantic owner:
|
|
5
|
-
|
|
6
|
-
- `schema.ts` owns the render IR and all schema/anatomy introspection results.
|
|
7
|
-
- `workspace.ts` owns persisted and workspace-facing state, including the sole
|
|
8
|
-
`LayoutState` and `VisibilityState` definitions.
|
|
9
|
-
- `agent.ts` owns the harness-neutral agent protocol and harness configuration.
|
|
10
|
-
- `runtime.ts` owns Studio runtime configuration, SSE events, and CLI staleness.
|
|
11
|
-
- `../schema/identity.ts` owns pure canonical reference/key identity helpers.
|
|
12
|
-
|
|
13
|
-
Allowed dependency direction is identity → schema → workspace → agent → runtime.
|
|
14
|
-
Shared contracts never import server or client implementations. New consumers
|
|
15
|
-
may import an owning module directly; `@shared/types` remains supported for
|
|
16
|
-
compatibility.
|