@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
|
@@ -34,7 +34,7 @@ export async function bootDomain(handle: DomainHandle): Promise<BootedDomain> {
|
|
|
34
34
|
root: bundle?.schemaMode === 'canonical-admitted' ? (bundle.schemaRoot ?? null) : null,
|
|
35
35
|
revision: bundle?.schemaRevision ?? null,
|
|
36
36
|
},
|
|
37
|
-
hashAnatomyFiles(handle.root, handle.schemaDirName),
|
|
37
|
+
hashAnatomyFiles(handle.root, handle.schemaDirName, handle.applicationFile),
|
|
38
38
|
)
|
|
39
39
|
const stop = watchDomain(handle)
|
|
40
40
|
return {
|
|
@@ -62,6 +62,20 @@ test('hashes current Application and vertical authoring files', () => {
|
|
|
62
62
|
])
|
|
63
63
|
})
|
|
64
64
|
|
|
65
|
+
test('hashes a config-selected nested Application explicitly', () => {
|
|
66
|
+
const root = mkdtempSync(join(tmpdir(), 'studio-nested-application-baseline-'))
|
|
67
|
+
roots.push(root)
|
|
68
|
+
mkdirSync(join(root, 'domain/schema'), { recursive: true })
|
|
69
|
+
const application = join(root, 'domain/application.ts')
|
|
70
|
+
writeFileSync(application, 'nested Application\n')
|
|
71
|
+
writeFileSync(join(root, 'domain/schema/index.ts'), 'selected Schema\n')
|
|
72
|
+
|
|
73
|
+
expect(hashAnatomyFiles(root, 'domain/schema', application)).toMatchObject({
|
|
74
|
+
'domain/application.ts': expect.any(String),
|
|
75
|
+
'domain/schema/index.ts': expect.any(String),
|
|
76
|
+
})
|
|
77
|
+
})
|
|
78
|
+
|
|
65
79
|
const schema = (domain: string): SchemaIR => ({
|
|
66
80
|
format: 'astrale.dsl',
|
|
67
81
|
version: 'v1',
|
|
@@ -104,7 +104,11 @@ function walkFiles(dir: string, out: string[]): void {
|
|
|
104
104
|
* Hash (sha256) every file in the anatomy + schema fileset. Keys are paths
|
|
105
105
|
* relative to `root`, forward-slashed. Missing dirs/files are silently skipped.
|
|
106
106
|
*/
|
|
107
|
-
export function hashAnatomyFiles(
|
|
107
|
+
export function hashAnatomyFiles(
|
|
108
|
+
root: string,
|
|
109
|
+
schemaDirName: string,
|
|
110
|
+
applicationFile?: string,
|
|
111
|
+
): Record<string, string> {
|
|
108
112
|
const r = resolve(root)
|
|
109
113
|
const absFiles: string[] = []
|
|
110
114
|
|
|
@@ -135,8 +139,18 @@ export function hashAnatomyFiles(root: string, schemaDirName: string): Record<st
|
|
|
135
139
|
}
|
|
136
140
|
}
|
|
137
141
|
|
|
142
|
+
// A config-selected Application may live below the domain root. It is the
|
|
143
|
+
// composition source of truth and must participate in cache/change identity.
|
|
144
|
+
if (applicationFile && existsSync(applicationFile)) {
|
|
145
|
+
try {
|
|
146
|
+
if (statSync(applicationFile).isFile()) absFiles.push(applicationFile)
|
|
147
|
+
} catch {
|
|
148
|
+
/* skip */
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
138
152
|
const hashes: Record<string, string> = {}
|
|
139
|
-
for (const abs of absFiles) {
|
|
153
|
+
for (const abs of new Set(absFiles)) {
|
|
140
154
|
let buf: Buffer
|
|
141
155
|
try {
|
|
142
156
|
buf = readFileSync(abs)
|
|
@@ -24,7 +24,8 @@ test('watches current Application, Runtime, and vertical authoring roots', () =>
|
|
|
24
24
|
expect(ANATOMY_PATHS).toContain('queries')
|
|
25
25
|
expect(ANATOMY_PATHS).toContain('workflows')
|
|
26
26
|
expect(DOMAIN_SET_TRIGGER_FILES.has('application.ts')).toBe(true)
|
|
27
|
-
expect(DOMAIN_SET_TRIGGER_FILES.has('
|
|
27
|
+
expect(DOMAIN_SET_TRIGGER_FILES.has('astrale.config.ts')).toBe(true)
|
|
28
|
+
expect(DOMAIN_SET_TRIGGER_FILES.has('schema.ts')).toBe(false)
|
|
28
29
|
})
|
|
29
30
|
|
|
30
31
|
test('Application, Runtime, Action, and Workflow changes invalidate the schema bundle', () => {
|
package/studio/server/watch.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* watch.ts — two debounced watch channels per domain:
|
|
3
|
-
*
|
|
3
|
+
* Application + selected Schema sources → re-introspect → schema-diff (+ compile-error)
|
|
4
4
|
* anatomy fileset → anatomy-diff
|
|
5
5
|
* The studio is read-only, so this only ever pushes; the client refetches.
|
|
6
6
|
*/
|
|
@@ -50,7 +50,10 @@ export function affectsBundle(handle: DomainHandle, path: string): boolean {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
export function watchDomain(handle: DomainHandle): () => void {
|
|
53
|
-
const schemaW = chokidar.watch(handle.schemaDir, {
|
|
53
|
+
const schemaW = chokidar.watch([handle.applicationFile, handle.schemaDir], {
|
|
54
|
+
ignoreInitial: true,
|
|
55
|
+
ignored,
|
|
56
|
+
})
|
|
54
57
|
const anatomyW = chokidar.watch(
|
|
55
58
|
ANATOMY_PATHS.map((p) => join(handle.root, p)),
|
|
56
59
|
{ ignoreInitial: true, ignored },
|
|
@@ -15,10 +15,10 @@ import { existsSync, readFileSync, writeFileSync } from 'node:fs'
|
|
|
15
15
|
import { join } from 'node:path'
|
|
16
16
|
|
|
17
17
|
import { getBundle } from '../cache'
|
|
18
|
-
import {
|
|
18
|
+
import { registerDomain } from '../domain'
|
|
19
19
|
import { findSchemaDefinition } from '../introspect/anatomy-extras'
|
|
20
20
|
import { bootDomain } from '../lifecycle'
|
|
21
|
-
import { stoppers, workspaceRoot
|
|
21
|
+
import { stoppers, workspaceRoot } from '../workspace-state'
|
|
22
22
|
|
|
23
23
|
/** Mirrors create-astrale-domain's `isValidSlug`: lowercase letters, digits, dots, dashes;
|
|
24
24
|
* must start/end alphanumeric. Also guards the filesystem target (no `/`, no `..`, no leading dot). */
|
|
@@ -88,18 +88,19 @@ export async function createDomain(
|
|
|
88
88
|
...(instance ? ['--instance', instance] : []),
|
|
89
89
|
]
|
|
90
90
|
const scaffold = await run('npx', scaffoldArgs, root)
|
|
91
|
-
const
|
|
92
|
-
if (!
|
|
91
|
+
const scaffolded = registerDomain(dir)
|
|
92
|
+
if (!scaffolded) {
|
|
93
93
|
return {
|
|
94
94
|
ok: false,
|
|
95
|
-
error:
|
|
95
|
+
error:
|
|
96
|
+
'Scaffolding did not produce a domain with an Application schema binding. See the log.',
|
|
96
97
|
output: scaffold.output.slice(-6000),
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
// 1b. Flag the placeholder origin for the agent (we ask for the name only, so the
|
|
101
102
|
// origin is `<name>.example.dev` until someone — or the agent — sets the real one).
|
|
102
|
-
annotateOrigin(dir, schemaDirName)
|
|
103
|
+
annotateOrigin(dir, scaffolded.schemaDirName)
|
|
103
104
|
|
|
104
105
|
// 2. Install deps so the domain is fully introspectable + deployable. Best-effort:
|
|
105
106
|
// a scaffolded-but-uninstalled domain still loads (static fallback), so a failed
|
|
@@ -108,11 +109,11 @@ export async function createDomain(
|
|
|
108
109
|
|
|
109
110
|
// 3. Register + boot with deps present. The live watcher may have already booted a
|
|
110
111
|
// deps-less fallback for this dir mid-install — stop it and boot fresh.
|
|
111
|
-
const handle = registerDomain(dir
|
|
112
|
+
const handle = registerDomain(dir)
|
|
112
113
|
if (!handle) {
|
|
113
114
|
return {
|
|
114
115
|
ok: false,
|
|
115
|
-
error: 'Scaffold incomplete — config
|
|
116
|
+
error: 'Scaffold incomplete — config or Application schema binding is missing.',
|
|
116
117
|
output: combine(scaffold, install),
|
|
117
118
|
}
|
|
118
119
|
}
|
|
@@ -2,25 +2,23 @@
|
|
|
2
2
|
* workspace-state.ts — process-global workspace context shared by the entrypoint
|
|
3
3
|
* (index.ts), the live watcher (workspace-watch.ts), and the create-domain
|
|
4
4
|
* endpoint (workspace/create.ts): the scanned ROOT (where new domains are
|
|
5
|
-
* scaffolded)
|
|
5
|
+
* scaffolded) and the `domainId → file-watcher stop` map.
|
|
6
6
|
*
|
|
7
7
|
* It exists so the create endpoint can scaffold into the same root the studio
|
|
8
8
|
* watches — and re-boot the freshly-created domain — without index.ts having to
|
|
9
9
|
* thread those values through the API signature.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
const state = { root: ''
|
|
12
|
+
const state = { root: '' }
|
|
13
13
|
|
|
14
14
|
/** domainId → stop its file watcher. The startup scan + the live watcher + the
|
|
15
15
|
* create endpoint all share this one map so "what domains are live" stays single-sourced. */
|
|
16
16
|
export const stoppers = new Map<string, () => void>()
|
|
17
17
|
|
|
18
|
-
/** Called once at boot with the resolved workspace root
|
|
19
|
-
export function initWorkspaceState(root: string
|
|
18
|
+
/** Called once at boot with the resolved workspace root. */
|
|
19
|
+
export function initWorkspaceState(root: string): void {
|
|
20
20
|
state.root = root
|
|
21
|
-
state.schemaDirName = schemaDirName
|
|
22
21
|
}
|
|
23
22
|
|
|
24
23
|
/** The directory the studio scans for domains — where `create new` scaffolds a sibling. */
|
|
25
24
|
export const workspaceRoot = (): string => state.root
|
|
26
|
-
export const workspaceSchemaDirName = (): string => state.schemaDirName
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
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
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* the studio is running. A domain dropped in (or one whose config + Application
|
|
4
|
+
* schema binding just became complete) is registered, booted, and announced over
|
|
5
|
+
* SSE; one whose composition vanished is unregistered. It reuses
|
|
6
6
|
* `scanWorkspace` (detection) + `bootDomain` (lifecycle), so there is no second
|
|
7
7
|
* source of truth for "what is a domain" or "how a domain comes online".
|
|
8
8
|
*/
|
|
9
9
|
import chokidar from 'chokidar'
|
|
10
10
|
import { basename } from 'node:path'
|
|
11
11
|
|
|
12
|
+
import { invalidate } from './cache'
|
|
12
13
|
import { scanWorkspace } from './detect'
|
|
13
14
|
import { allDomains, isDomainDir, unregisterDomain } from './domain'
|
|
14
15
|
import { bootDomain } from './lifecycle'
|
|
@@ -17,41 +18,43 @@ import { broadcast } from './sse'
|
|
|
17
18
|
const IGNORED =
|
|
18
19
|
/(^|[/\\])(node_modules|\.git|\.astrale|\.domain-studio|dist|\.dist|\.next|\.cache|\.turbo|\.vercel|coverage)([/\\]|$)/
|
|
19
20
|
// only these file changes can change the domain SET (vs. ordinary in-domain edits)
|
|
20
|
-
export const DOMAIN_SET_TRIGGER_FILES = new Set([
|
|
21
|
-
|
|
22
|
-
'application.ts',
|
|
23
|
-
'schema.ts',
|
|
24
|
-
'index.ts',
|
|
25
|
-
])
|
|
21
|
+
export const DOMAIN_SET_TRIGGER_FILES = new Set(['astrale.config.ts', 'application.ts'])
|
|
22
|
+
const AUTHORED_SOURCE = /\.[cm]?[jt]sx?$/u
|
|
26
23
|
|
|
27
24
|
/**
|
|
28
25
|
* Watch `root` for domains appearing/disappearing.
|
|
29
26
|
* @param stoppers shared `domainId → file-watcher stop` map. The startup scan seeds
|
|
30
27
|
* it (via bootDomain); this watcher keeps it in sync as domains come and go.
|
|
31
28
|
*/
|
|
32
|
-
export function watchWorkspace(
|
|
33
|
-
root: string,
|
|
34
|
-
schemaDirName: string,
|
|
35
|
-
stoppers: Map<string, () => void>,
|
|
36
|
-
): () => void {
|
|
29
|
+
export function watchWorkspace(root: string, stoppers: Map<string, () => void>): () => void {
|
|
37
30
|
let timer: ReturnType<typeof setTimeout> | undefined
|
|
38
31
|
let running = false
|
|
39
32
|
let queued = false
|
|
40
33
|
|
|
41
34
|
const reconcile = async () => {
|
|
42
|
-
const
|
|
35
|
+
const previous = new Map(allDomains().map((domain) => [domain.id, domain]))
|
|
36
|
+
const before = new Set(previous.keys())
|
|
37
|
+
let refreshed = false
|
|
43
38
|
|
|
44
|
-
// 1. drop domains whose
|
|
39
|
+
// 1. drop domains whose Application composition vanished.
|
|
45
40
|
for (const h of allDomains()) {
|
|
46
|
-
if (isDomainDir(h.root
|
|
41
|
+
if (isDomainDir(h.root)) continue
|
|
47
42
|
stoppers.get(h.id)?.()
|
|
48
43
|
stoppers.delete(h.id)
|
|
49
44
|
unregisterDomain(h.id)
|
|
50
45
|
console.log(` Domain Studio — domain removed: ${h.id}`)
|
|
51
46
|
}
|
|
52
47
|
|
|
53
|
-
// 2.
|
|
54
|
-
|
|
48
|
+
// 2. Register + boot new domains. If Application now selects another Schema
|
|
49
|
+
// module, replace the old per-domain watcher and invalidate its cached bundle.
|
|
50
|
+
for (const h of scanWorkspace(root)) {
|
|
51
|
+
const prior = previous.get(h.id)
|
|
52
|
+
if (prior && prior !== h) {
|
|
53
|
+
stoppers.get(h.id)?.()
|
|
54
|
+
stoppers.delete(h.id)
|
|
55
|
+
invalidate(h.id, 'all')
|
|
56
|
+
refreshed = true
|
|
57
|
+
}
|
|
55
58
|
if (stoppers.has(h.id)) continue
|
|
56
59
|
const { origin, stop } = await bootDomain(h)
|
|
57
60
|
stoppers.set(h.id, stop)
|
|
@@ -60,7 +63,7 @@ export function watchWorkspace(
|
|
|
60
63
|
|
|
61
64
|
// 3. announce if the set changed → clients refetch /api/workspace
|
|
62
65
|
const after = new Set(allDomains().map((d) => d.id))
|
|
63
|
-
if (before.size !== after.size || [...after].some((id) => !before.has(id))) {
|
|
66
|
+
if (refreshed || before.size !== after.size || [...after].some((id) => !before.has(id))) {
|
|
64
67
|
broadcast({ type: 'workspace', domains: [...after] })
|
|
65
68
|
}
|
|
66
69
|
}
|
|
@@ -88,16 +91,24 @@ export function watchWorkspace(
|
|
|
88
91
|
clearTimeout(timer)
|
|
89
92
|
timer = setTimeout(() => void run(), 400)
|
|
90
93
|
}
|
|
91
|
-
const
|
|
94
|
+
const onCompositionChange = (p: string) => {
|
|
92
95
|
if (DOMAIN_SET_TRIGGER_FILES.has(basename(p))) schedule()
|
|
93
96
|
}
|
|
97
|
+
const onSourceAddedOrRemoved = (p: string) => {
|
|
98
|
+
if (DOMAIN_SET_TRIGGER_FILES.has(basename(p)) || AUTHORED_SOURCE.test(p)) schedule()
|
|
99
|
+
}
|
|
94
100
|
|
|
95
101
|
const watcher = chokidar.watch(root, {
|
|
96
102
|
ignoreInitial: true,
|
|
97
103
|
depth: 4,
|
|
98
104
|
ignored: (p: string) => IGNORED.test(p),
|
|
99
105
|
})
|
|
100
|
-
watcher
|
|
106
|
+
watcher
|
|
107
|
+
.on('addDir', schedule)
|
|
108
|
+
.on('unlinkDir', schedule)
|
|
109
|
+
.on('add', onSourceAddedOrRemoved)
|
|
110
|
+
.on('unlink', onSourceAddedOrRemoved)
|
|
111
|
+
.on('change', onCompositionChange)
|
|
101
112
|
|
|
102
113
|
return () => {
|
|
103
114
|
clearTimeout(timer)
|
|
@@ -86,6 +86,9 @@ export interface AgentRun {
|
|
|
86
86
|
resumed?: boolean
|
|
87
87
|
/** short human label of what this turn was asked to do */
|
|
88
88
|
summary: string
|
|
89
|
+
/** the instruction as typed, verbatim — what the chat shows as your message.
|
|
90
|
+
* Absent when the turn was started from open threads rather than a message. */
|
|
91
|
+
instruction?: string
|
|
89
92
|
/** comment ids this turn was started to answer */
|
|
90
93
|
targetCommentIds: string[]
|
|
91
94
|
events: AgentEvent[]
|