@north-light/crouter 0.3.353 → 0.3.354
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/dist/api/client.d.ts +35 -25
- package/dist/api/client.js +2 -2
- package/dist/api/dto/broker-ops.d.ts +2 -36
- package/dist/api/dto/canvas.d.ts +8 -13
- package/dist/api/dto/config.d.ts +4 -0
- package/dist/api/dto/delivery.d.ts +61 -0
- package/dist/api/dto/docs.d.ts +133 -0
- package/dist/api/dto/docs.js +1 -0
- package/dist/api/dto/health.d.ts +26 -79
- package/dist/api/dto/node-outcomes.d.ts +1 -3
- package/dist/api/dto/nodes.d.ts +5 -26
- package/dist/api/dto/objects.d.ts +167 -0
- package/dist/api/dto/objects.js +1 -0
- package/dist/api/dto/profiles.d.ts +14 -8
- package/dist/api/dto/reports.d.ts +9 -7
- package/dist/api/dto/reviews.d.ts +9 -3
- package/dist/api/dto/worktree.d.ts +1 -1
- package/dist/api/index.d.ts +0 -1
- package/dist/api/index.js +1 -1
- package/dist/api/routes.d.ts +14 -12
- package/dist/api/routes.js +1 -1
- package/dist/build-root.js +1 -1
- package/dist/builtin-memory/00-runtime-base/00-authoring.md +10 -5
- package/dist/builtin-memory/04-orchestration-kernel.md +7 -7
- package/dist/builtin-memory/05-kinds/advisor/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/explore/00-base.md +2 -2
- package/dist/builtin-memory/05-kinds/explore/01-orchestrator.md +2 -2
- package/dist/builtin-memory/crouter-concepts/INDEX.md +2 -2
- package/dist/builtin-memory/crouter-concepts/lifecycle-and-wakes.md +1 -1
- package/dist/builtin-memory/crouter-concepts/memory.md +15 -15
- package/dist/builtin-memory/crouter-concepts/nodes-and-the-canvas.md +1 -1
- package/dist/builtin-memory/crouter-concepts/profiles-kinds-and-modes.md +5 -5
- package/dist/builtin-memory/crouter-concepts/scopes-and-trust.md +1 -1
- package/dist/builtin-memory/crouter-concepts/why-a-daemon.md +1 -1
- package/dist/builtin-memory/crouter-sdk/INDEX.md +2 -2
- package/dist/builtin-memory/crouter-sdk/README.md +5 -6
- package/dist/builtin-memory/crouter-sdk/errors.md +0 -13
- package/dist/builtin-memory/crouter-sdk/guides/README.md +0 -1
- package/dist/builtin-memory/crouter-sdk/guides/event-driven-assistant.md +2 -2
- package/dist/builtin-memory/crouter-sdk/nodes.md +0 -2
- package/dist/builtin-memory/crouter-sdk/resources.md +0 -1
- package/dist/builtin-memory/explore/exploration-doc.md +4 -4
- package/dist/builtin-memory/insights/capture.md +6 -6
- package/dist/builtin-memory/insights/init.md +14 -14
- package/dist/builtin-memory/internal/INDEX.md +4 -4
- package/dist/builtin-memory/internal/agent-shaping.md +20 -20
- package/dist/builtin-memory/internal/examples/imessage-assistant.md +2 -2
- package/dist/builtin-memory/internal/marketplaces.md +2 -2
- package/dist/builtin-memory/internal/memory-loading.md +31 -30
- package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
- package/dist/builtin-memory/internal/plugins.md +16 -14
- package/dist/builtin-memory/internal/storage-tiers.md +4 -4
- package/dist/builtin-memory/memory-read-orientation.md +1 -1
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/memory-slash-commands.ts +32 -40
- package/dist/clients/attach/input/controller.js +1 -1
- package/dist/clients/attach/input/ref-autocomplete.js +1 -1
- package/dist/clients/attach/input/titled-editor.js +1 -1
- package/dist/clients/attach/render/chat-view.js +1 -1
- package/dist/clients/attach/render/crtr-output.d.ts +1 -2
- package/dist/clients/attach/render/crtr-output.js +17 -17
- package/dist/clients/attach/render/group-activity.d.ts +8 -8
- package/dist/clients/attach/render/group-activity.js +2 -2
- package/dist/clients/attach/render/group-recap.js +1 -1
- package/dist/clients/attach/render/tool-calls.d.ts +1 -1
- package/dist/clients/attach/session/profile-files.js +1 -1
- package/dist/clients/attach/slash/dispatch.js +1 -1
- package/dist/clients/attach/viewer.js +806 -1553
- package/dist/commands/api-client.d.ts +2 -0
- package/dist/commands/api-client.js +3 -3
- package/dist/commands/canvas/edges.d.ts +2 -0
- package/dist/commands/canvas/edges.js +2 -0
- package/dist/commands/canvas/list.d.ts +4 -0
- package/dist/commands/canvas/list.js +3 -0
- package/dist/commands/canvas/read.d.ts +8 -0
- package/dist/commands/canvas/read.js +5 -0
- package/dist/commands/canvas/search.d.ts +2 -0
- package/dist/commands/canvas/search.js +3 -0
- package/dist/commands/canvas/unwatch.d.ts +2 -0
- package/dist/commands/canvas/unwatch.js +1 -0
- package/dist/commands/canvas/watch.d.ts +3 -0
- package/dist/commands/canvas/watch.js +1 -0
- package/dist/commands/canvas-analytics.js +1 -1
- package/dist/commands/canvas-history/grep.js +4 -4
- package/dist/commands/canvas-history/read.js +2 -2
- package/dist/commands/canvas-history/search.js +7 -7
- package/dist/commands/canvas-history/shared.d.ts +0 -1
- package/dist/commands/canvas-history/shared.js +1 -1
- package/dist/commands/canvas-history/stats.js +2 -2
- package/dist/commands/canvas-history.js +1 -1
- package/dist/commands/canvas.js +1 -1
- package/dist/commands/doc/delete.d.ts +2 -0
- package/dist/commands/doc/delete.js +1 -0
- package/dist/commands/doc/edit.d.ts +2 -0
- package/dist/commands/doc/edit.js +1 -0
- package/dist/commands/doc/history.d.ts +2 -0
- package/dist/commands/doc/history.js +2 -0
- package/dist/commands/doc/lint.d.ts +2 -0
- package/dist/commands/doc/lint.js +2 -0
- package/dist/commands/doc/list.d.ts +2 -0
- package/dist/commands/doc/list.js +1 -0
- package/dist/commands/doc/move.d.ts +2 -0
- package/dist/commands/doc/move.js +1 -0
- package/dist/commands/doc/read.d.ts +2 -0
- package/dist/commands/doc/read.js +1 -0
- package/dist/commands/doc/shared.d.ts +25 -0
- package/dist/commands/doc/shared.js +2 -0
- package/dist/commands/doc/write.d.ts +2 -0
- package/dist/commands/doc/write.js +1 -0
- package/dist/commands/{memory.d.ts → doc.d.ts} +1 -1
- package/dist/commands/doc.js +1 -0
- package/dist/commands/human/review.js +1 -1
- package/dist/commands/node/bash.js +2 -2
- package/dist/commands/node/create.js +1 -1
- package/dist/commands/node/inspect.js +10 -10
- package/dist/commands/node/lifecycle.js +2 -2
- package/dist/commands/node/outcome.js +1 -1
- package/dist/commands/node/subscription.js +1 -1
- package/dist/commands/node-context.js +2 -2
- package/dist/commands/pkg/browse/catalog.js +1 -1
- package/dist/commands/pkg/browse/doc-view.js +1 -1
- package/dist/commands/pkg/browse/model.d.ts +9 -17
- package/dist/commands/pkg/plugin-inspect.js +1 -1
- package/dist/commands/pkg/plugin-manage.d.ts +4 -8
- package/dist/commands/pkg/plugin-manage.js +15 -17
- package/dist/commands/profile/list.js +1 -1
- package/dist/commands/profile/new.js +1 -1
- package/dist/commands/profile/project.js +1 -1
- package/dist/commands/profile/show.js +1 -1
- package/dist/commands/push.js +3 -3
- package/dist/commands/sys/config.js +1 -1
- package/dist/commands/sys/context/admin/actions.d.ts +18 -43
- package/dist/commands/sys/context/admin/actions.js +1 -2
- package/dist/commands/sys/context/admin/detail-panel.d.ts +17 -25
- package/dist/commands/sys/context/admin/detail-panel.js +2 -1
- package/dist/commands/sys/context/admin/docs-panel.d.ts +7 -6
- package/dist/commands/sys/context/admin/docs-panel.js +1 -1
- package/dist/commands/sys/context/admin/list-view.d.ts +12 -12
- package/dist/commands/sys/context/admin/list-view.js +1 -1
- package/dist/commands/sys/context/admin/model.d.ts +96 -69
- package/dist/commands/sys/context/admin/model.js +1 -1
- package/dist/commands/sys/context/admin/rail-panel.d.ts +7 -5
- package/dist/commands/sys/context/admin/rail-panel.js +1 -1
- package/dist/commands/sys/context/admin/read-view.d.ts +10 -14
- package/dist/commands/sys/context/admin/read-view.js +1 -2
- package/dist/commands/sys/context/admin/shell.d.ts +26 -31
- package/dist/commands/sys/context/admin/shell.js +1 -1
- package/dist/commands/sys/context/admin.js +2 -2
- package/dist/commands/sys/context/doc.js +2 -3
- package/dist/commands/sys/context/expose.js +2 -2
- package/dist/commands/sys/context/prompt-review.js +4 -4
- package/dist/commands/sys/context/resolve.d.ts +92 -65
- package/dist/commands/sys/context/resolve.js +7 -9
- package/dist/commands/sys/context.js +1 -1
- package/dist/commands/sys/doctor.js +1 -1
- package/dist/commands/sys/migrate.js +1 -1
- package/dist/commands/sys/panels/profiles-panel.d.ts +3 -1
- package/dist/commands/sys/panels/profiles-panel.js +1 -1
- package/dist/commands/sys/sync-deps.d.ts +6 -11
- package/dist/commands/sys/sync-deps.js +7 -8
- package/dist/commands/sys/sync-project-guidance.js +5 -4
- package/dist/commands/sys/sync-shared.d.ts +41 -4
- package/dist/commands/sys/sync-shared.js +1 -1
- package/dist/commands/sys/sync-skills.js +2 -2
- package/dist/commands/sys/sync.js +1 -1
- package/dist/core/bash-job-supervisor.d.ts +2 -3
- package/dist/core/bash-job-supervisor.js +3 -3
- package/dist/core/bash-jobs.d.ts +0 -5
- package/dist/core/bash-jobs.js +7 -7
- package/dist/core/bootstrap.js +2 -2
- package/dist/core/canvas/canvas.d.ts +6 -50
- package/dist/core/canvas/canvas.js +16 -21
- package/dist/core/canvas/db.d.ts +4 -1
- package/dist/core/canvas/db.js +2 -2
- package/dist/core/canvas/history.d.ts +11 -39
- package/dist/core/canvas/history.js +9 -20
- package/dist/core/canvas/install-id.d.ts +2 -2
- package/dist/core/canvas/install-id.js +1 -1
- package/dist/core/canvas/memory-reads.d.ts +5 -0
- package/dist/core/canvas/memory-reads.js +1 -1
- package/dist/core/canvas/migrations.js +215 -41
- package/dist/core/canvas/node-agent-paths.js +1 -1
- package/dist/core/canvas/node-tokens.js +1 -1
- package/dist/core/canvas/paths.d.ts +0 -4
- package/dist/core/canvas/paths.js +1 -1
- package/dist/core/canvas/remote-canvas-source.d.ts +0 -1
- package/dist/core/canvas/remote-canvas-source.js +1 -1
- package/dist/core/canvas/render-source.d.ts +9 -6
- package/dist/core/canvas/render-source.js +6 -6
- package/dist/core/canvas/sessions.js +2 -2
- package/dist/core/canvas/source.d.ts +6 -0
- package/dist/core/canvas/tree.d.ts +29 -0
- package/dist/core/canvas/tree.js +12 -0
- package/dist/core/canvas/types.d.ts +0 -20
- package/dist/core/command-plugins/bundle.js +1 -1
- package/dist/core/config.d.ts +1 -1
- package/dist/core/conversation-store/listener.js +4 -2
- package/dist/core/feed/feed.d.ts +9 -7
- package/dist/core/feed/feed.js +3 -7
- package/dist/core/feed/inbox.d.ts +3 -5
- package/dist/core/feed/inbox.js +1 -10
- package/dist/core/feed/messages.d.ts +33 -6
- package/dist/core/feed/messages.js +10 -7
- package/dist/core/feed/reports.d.ts +10 -0
- package/dist/core/feed/reports.js +2 -0
- package/dist/core/grants/remove.js +1 -1
- package/dist/core/graph/access.d.ts +24 -0
- package/dist/core/graph/access.js +8 -0
- package/dist/core/graph/bodies.d.ts +6 -0
- package/dist/core/graph/bodies.js +1 -0
- package/dist/core/graph/deletion.d.ts +9 -0
- package/dist/core/graph/deletion.js +5 -0
- package/dist/core/graph/diff.d.ts +4 -0
- package/dist/core/graph/diff.js +4 -0
- package/dist/core/graph/documents.d.ts +160 -0
- package/dist/core/graph/documents.js +7 -0
- package/dist/core/graph/edges.d.ts +24 -0
- package/dist/core/graph/edges.js +1 -0
- package/dist/core/graph/events.d.ts +26 -0
- package/dist/core/graph/events.js +6 -0
- package/dist/core/graph/exposures.d.ts +53 -0
- package/dist/core/graph/exposures.js +4 -0
- package/dist/core/graph/jobs.d.ts +31 -0
- package/dist/core/graph/jobs.js +2 -0
- package/dist/core/graph/names.d.ts +28 -0
- package/dist/core/graph/names.js +3 -0
- package/dist/core/graph/objects.d.ts +55 -0
- package/dist/core/graph/objects.js +9 -0
- package/dist/core/graph/package-docs.d.ts +31 -0
- package/dist/core/graph/package-docs.js +5 -0
- package/dist/core/graph/package-files.d.ts +20 -0
- package/dist/core/graph/package-files.js +2 -0
- package/dist/core/graph/reader.d.ts +21 -0
- package/dist/core/graph/reader.js +3 -0
- package/dist/core/graph/repo-sync/exchange.d.ts +34 -0
- package/dist/core/graph/repo-sync/exchange.js +2 -0
- package/dist/core/graph/repo-sync/identity.d.ts +30 -0
- package/dist/core/graph/repo-sync/identity.js +1 -0
- package/dist/core/graph/repo-sync/index.d.ts +4 -0
- package/dist/core/graph/repo-sync/index.js +1 -0
- package/dist/core/graph/repo-sync/mirror.d.ts +30 -0
- package/dist/core/graph/repo-sync/mirror.js +6 -0
- package/dist/core/graph/repo-sync/ref-format.d.ts +76 -0
- package/dist/core/graph/repo-sync/ref-format.js +2 -0
- package/dist/core/graph/repo-sync/repos.d.ts +17 -0
- package/dist/core/graph/repo-sync/repos.js +3 -0
- package/dist/core/graph/repo-sync/sync.d.ts +42 -0
- package/dist/core/graph/repo-sync/sync.js +2 -0
- package/dist/core/graph/rules.d.ts +26 -0
- package/dist/core/graph/rules.js +3 -0
- package/dist/core/graph/spaces/app.d.ts +3 -0
- package/dist/core/graph/spaces/app.js +1 -0
- package/dist/core/graph/spaces/index.d.ts +19 -0
- package/dist/core/graph/spaces/index.js +1 -0
- package/dist/core/graph/spaces/person.d.ts +5 -0
- package/dist/core/graph/spaces/person.js +2 -0
- package/dist/core/graph/spaces/repo.d.ts +4 -0
- package/dist/core/graph/spaces/repo.js +1 -0
- package/dist/core/graph/types.d.ts +75 -0
- package/dist/core/graph/types.js +1 -0
- package/dist/core/graph/watches.d.ts +62 -0
- package/dist/core/graph/watches.js +18 -0
- package/dist/core/human/feedback-companion.js +1 -1
- package/dist/core/human/requests.d.ts +3 -1
- package/dist/core/human/requests.js +6 -6
- package/dist/core/inspector/model.js +2 -2
- package/dist/core/io.js +5 -5
- package/dist/core/layout-migrate/index.d.ts +24 -1
- package/dist/core/layout-migrate/index.js +4 -4
- package/dist/core/layout-migrate/paths.d.ts +4 -0
- package/dist/core/layout-migrate/paths.js +1 -1
- package/dist/core/layout-migrate/stored-paths.d.ts +7 -0
- package/dist/core/layout-migrate/stored-paths.js +11 -11
- package/dist/core/layout-migrate/stores.d.ts +19 -6
- package/dist/core/layout-migrate/stores.js +3 -4
- package/dist/core/manifest.d.ts +0 -2
- package/dist/core/manifest.js +1 -1
- package/dist/core/{memory/extensions.d.ts → plugin-extensions.d.ts} +9 -10
- package/dist/core/plugin-extensions.js +1 -0
- package/dist/core/preview-registry.d.ts +1 -1
- package/dist/core/preview-registry.js +3 -2
- package/dist/core/profiles/manifest.d.ts +7 -7
- package/dist/core/profiles/manifest.js +1 -1
- package/dist/core/profiles/select.js +3 -3
- package/dist/core/review/birth.js +1 -1
- package/dist/core/review/companion.js +1 -1
- package/dist/core/review/stage.d.ts +12 -1
- package/dist/core/review/stage.js +1 -1
- package/dist/core/review/store.d.ts +2 -0
- package/dist/core/review/store.js +1 -1
- package/dist/core/review/types.d.ts +7 -1
- package/dist/core/runs/events.js +1 -1
- package/dist/core/runs/operations.js +5 -5
- package/dist/core/runs/questions.js +2 -2
- package/dist/core/runtime/bearings-render.d.ts +13 -7
- package/dist/core/runtime/bearings-render.js +12 -12
- package/dist/core/runtime/bearings.d.ts +8 -18
- package/dist/core/runtime/bearings.js +7 -7
- package/dist/core/runtime/broker/daemon-ops.d.ts +7 -12
- package/dist/core/runtime/broker/daemon-ops.js +1 -1
- package/dist/core/runtime/broker/fault-retry.d.ts +2 -0
- package/dist/core/runtime/broker/fault-retry.js +1 -1
- package/dist/core/runtime/broker/frame-dispatch.d.ts +1 -1
- package/dist/core/runtime/broker/frame-memory-refs.d.ts +7 -2
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -1
- package/dist/core/runtime/broker/inbox.d.ts +1 -4
- package/dist/core/runtime/broker/inbox.js +1 -10
- package/dist/core/runtime/broker/rebind.js +1 -1
- package/dist/core/runtime/broker/retry-card-elision.d.ts +7 -0
- package/dist/core/runtime/broker/retry-card-elision.js +1 -0
- package/dist/core/runtime/broker-extension-render.d.ts +0 -13
- package/dist/core/runtime/broker-extension-render.js +2 -4
- package/dist/core/runtime/broker-persona-guidance.js +3 -3
- package/dist/core/runtime/broker-protocol.d.ts +1 -1
- package/dist/core/runtime/broker.js +1 -1
- package/dist/core/runtime/close.d.ts +9 -4
- package/dist/core/runtime/close.js +1 -1
- package/dist/core/runtime/deliver-live.js +1 -1
- package/dist/core/runtime/kickoff.js +17 -19
- package/dist/core/runtime/launch-target.d.ts +7 -0
- package/dist/core/runtime/launch-target.js +1 -1
- package/dist/core/runtime/ledger.d.ts +10 -0
- package/dist/core/runtime/ledger.js +3 -0
- package/dist/core/runtime/lifecycle.js +2 -2
- package/dist/core/runtime/nodes.d.ts +10 -2
- package/dist/core/runtime/nodes.js +1 -1
- package/dist/core/runtime/outcome-document.d.ts +2 -2
- package/dist/core/runtime/outcome-document.js +1 -1
- package/dist/core/runtime/persona.js +2 -2
- package/dist/core/runtime/placement.js +1 -1
- package/dist/core/runtime/promote.d.ts +2 -2
- package/dist/core/runtime/promote.js +1 -1
- package/dist/core/runtime/prospective-inventory-cli.js +2 -2
- package/dist/core/runtime/recycle.js +1 -1
- package/dist/core/runtime/reopen.js +1 -1
- package/dist/core/runtime/revive.js +2 -2
- package/dist/core/runtime/roadmap.d.ts +17 -9
- package/dist/core/runtime/roadmap.js +4 -4
- package/dist/core/runtime/spawn-env.js +1 -1
- package/dist/core/runtime/spawn.d.ts +5 -3
- package/dist/core/runtime/spawn.js +2 -2
- package/dist/core/runtime/structured-output.d.ts +3 -1
- package/dist/core/runtime/structured-output.js +4 -4
- package/dist/core/scope.d.ts +1 -32
- package/dist/core/scope.js +1 -1
- package/dist/core/scoped-state/db.js +2 -1
- package/dist/core/scoped-state/migrate.js +2 -2
- package/dist/core/scoped-state/profiles.d.ts +11 -0
- package/dist/core/scoped-state/profiles.js +1 -1
- package/dist/core/scoped-state/schema.d.ts +1 -1
- package/dist/core/scoped-state/schema.js +7 -5
- package/dist/core/spaces/permissions.d.ts +0 -14
- package/dist/core/spaces/permissions.js +1 -1
- package/dist/core/spaces/stop.d.ts +13 -0
- package/dist/core/spaces/stop.js +2 -2
- package/dist/core/storage/tables.d.ts +1 -1
- package/dist/core/substrate/delivery/corpus.d.ts +21 -0
- package/dist/core/substrate/delivery/corpus.js +3 -0
- package/dist/core/substrate/delivery/deliver.d.ts +76 -0
- package/dist/core/substrate/delivery/deliver.js +6 -0
- package/dist/core/substrate/delivery/listings.d.ts +27 -0
- package/dist/core/substrate/delivery/listings.js +4 -0
- package/dist/core/substrate/delivery/match.d.ts +28 -0
- package/dist/core/substrate/delivery/match.js +1 -0
- package/dist/core/substrate/delivery/plan.d.ts +67 -0
- package/dist/core/substrate/delivery/plan.js +3 -0
- package/dist/core/substrate/delivery/render-boot.d.ts +20 -0
- package/dist/core/substrate/delivery/render-boot.js +54 -0
- package/dist/core/substrate/delivery/render-event.d.ts +47 -0
- package/dist/core/substrate/delivery/render-event.js +6 -0
- package/dist/core/substrate/delivery/sub-persona-menu.d.ts +2 -0
- package/dist/core/substrate/delivery/sub-persona-menu.js +6 -0
- package/dist/core/substrate/delivery/types.d.ts +30 -0
- package/dist/core/substrate/delivery/types.js +0 -0
- package/dist/core/substrate/gate-explain.d.ts +0 -13
- package/dist/core/substrate/gate-explain.js +1 -1
- package/dist/core/substrate/schema.d.ts +11 -139
- package/dist/core/substrate/schema.js +1 -1
- package/dist/core/substrate/subject-fields.d.ts +3 -0
- package/dist/core/substrate/subject.d.ts +2 -1
- package/dist/core/substrate/subject.js +1 -1
- package/dist/daemon/api/handlers/app-profiles.js +1 -1
- package/dist/daemon/api/handlers/bash-jobs.js +1 -2
- package/dist/daemon/api/handlers/broker-ops.js +1 -1
- package/dist/daemon/api/handlers/canvas.js +5 -5
- package/dist/daemon/api/handlers/daemon.js +1 -1
- package/dist/daemon/api/handlers/delivery.d.ts +2 -0
- package/dist/daemon/api/handlers/delivery.js +1 -0
- package/dist/daemon/api/handlers/{memory.d.ts → docs.d.ts} +1 -1
- package/dist/daemon/api/handlers/docs.js +1 -0
- package/dist/daemon/api/handlers/hook-exec.js +1 -1
- package/dist/daemon/api/handlers/messages.js +2 -2
- package/dist/daemon/api/handlers/node-records.js +2 -2
- package/dist/daemon/api/handlers/nodes.js +1 -1
- package/dist/daemon/api/handlers/objects.d.ts +2 -0
- package/dist/daemon/api/handlers/objects.js +5 -0
- package/dist/daemon/api/handlers/package-docs.d.ts +2 -0
- package/dist/daemon/api/handlers/package-docs.js +1 -0
- package/dist/daemon/api/handlers/profiles.js +1 -1
- package/dist/daemon/api/handlers/reports.d.ts +2 -2
- package/dist/daemon/api/handlers/reports.js +4 -4
- package/dist/daemon/api/handlers/reviews.js +1 -1
- package/dist/daemon/api/map.d.ts +2 -2
- package/dist/daemon/api/map.js +2 -2
- package/dist/daemon/api/operations.d.ts +1 -1
- package/dist/daemon/api/operations.js +1 -1
- package/dist/daemon/api/reader.d.ts +17 -0
- package/dist/daemon/api/reader.js +1 -0
- package/dist/daemon/api/server.js +1 -1
- package/dist/daemon/control.d.ts +2 -3
- package/dist/daemon/crtrd.js +8 -6
- package/dist/daemon/fleet.js +4 -4
- package/dist/daemon/reconcilers/bash-deadline.d.ts +11 -1
- package/dist/daemon/reconcilers/bash-deadline.js +2 -1
- package/dist/daemon/reconcilers/broker-supervision.js +4 -4
- package/dist/daemon/reconcilers/live-obligation.js +1 -1
- package/dist/daemon/reconcilers/node-deadline.js +1 -1
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -1
- package/dist/daemon/reconcilers/storage-maintenance.d.ts +1 -0
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -1
- package/dist/daemon/review/deliver.js +2 -2
- package/dist/daemon/review/finish.js +1 -1
- package/dist/hook-authoring.d.ts +0 -1
- package/dist/hook-authoring.js +3 -3
- package/dist/migrations/004-canvas-documents/apply.d.ts +10 -0
- package/dist/migrations/004-canvas-documents/apply.js +1 -0
- package/dist/migrations/004-canvas-documents/fields.d.ts +24 -0
- package/dist/migrations/004-canvas-documents/fields.js +2 -0
- package/dist/migrations/004-canvas-documents/index.d.ts +16 -0
- package/dist/migrations/004-canvas-documents/index.js +2 -0
- package/dist/migrations/004-canvas-documents/legacy/discover.d.ts +16 -0
- package/dist/migrations/004-canvas-documents/legacy/discover.js +1 -0
- package/dist/migrations/004-canvas-documents/legacy/history.d.ts +5 -0
- package/dist/migrations/004-canvas-documents/legacy/history.js +2 -0
- package/dist/migrations/004-canvas-documents/legacy/nested.d.ts +7 -0
- package/dist/migrations/004-canvas-documents/legacy/nested.js +1 -0
- package/dist/migrations/004-canvas-documents/legacy/parse.d.ts +14 -0
- package/dist/migrations/004-canvas-documents/legacy/parse.js +1 -0
- package/dist/migrations/004-canvas-documents/legacy/types.d.ts +91 -0
- package/dist/migrations/004-canvas-documents/legacy/types.js +0 -0
- package/dist/migrations/004-canvas-documents/legacy-edges.d.ts +6 -0
- package/dist/migrations/004-canvas-documents/legacy-edges.js +18 -0
- package/dist/migrations/004-canvas-documents/plan.d.ts +102 -0
- package/dist/migrations/004-canvas-documents/plan.js +3 -0
- package/dist/migrations/004-canvas-documents/pointers.d.ts +23 -0
- package/dist/migrations/004-canvas-documents/pointers.js +4 -0
- package/dist/migrations/activation.d.ts +9 -18
- package/dist/migrations/activation.js +2 -2
- package/dist/pi-extensions/broker-local.d.ts +2 -2
- package/dist/pi-extensions/broker-local.js +2 -2
- package/dist/pi-extensions/canvas-bash-valve.js +5 -4
- package/dist/pi-extensions/canvas-context-intro.js +2 -2
- package/dist/pi-extensions/canvas-doc-substrate.d.ts +0 -1
- package/dist/pi-extensions/canvas-doc-substrate.js +6 -6
- package/dist/pi-extensions/canvas-inbox-watcher.js +2 -2
- package/dist/pi-extensions/canvas-passive-context.js +1 -1
- package/dist/pi-extensions/canvas-recap.js +2 -2
- package/dist/pi-extensions/canvas-stophook.d.ts +1 -1
- package/dist/pi-extensions/canvas-stophook.js +1 -1
- package/dist/prompts/review.js +3 -3
- package/dist/shared/env.d.ts +5 -0
- package/dist/shared/env.js +1 -1
- package/dist/shared/generated-context.js +2 -10
- package/dist/shared/inbox-entry-body.d.ts +22 -0
- package/dist/shared/inbox-entry-body.js +10 -0
- package/dist/{core/memory → shared}/inline-ref-guidance.d.ts +2 -2
- package/dist/shared/inline-ref-guidance.js +2 -0
- package/dist/types.d.ts +3 -1
- package/docs/cli/memory-and-preferences.md +12 -14
- package/docs/concepts/README.md +1 -1
- package/docs/concepts/lifecycle-and-wakes.md +1 -1
- package/docs/concepts/memory.md +15 -15
- package/docs/concepts/nodes-and-the-canvas.md +1 -1
- package/docs/concepts/profiles-kinds-and-modes.md +5 -5
- package/docs/concepts/scopes-and-trust.md +1 -1
- package/docs/concepts/why-a-daemon.md +1 -1
- package/docs/sdk/README.md +5 -6
- package/docs/sdk/errors.md +0 -13
- package/docs/sdk/guides/README.md +0 -1
- package/docs/sdk/nodes.md +0 -2
- package/docs/sdk/resources.md +0 -1
- package/package.json +2 -2
- package/packages/crouter-identity/package.json +1 -1
- package/runtime.lock.json +11 -11
- package/dist/api/dto/memory.d.ts +0 -171
- package/dist/api/dto/memory.js +0 -1
- package/dist/builtin-memory/crouter-sdk/guides/app-memory.md +0 -73
- package/dist/builtin-memory/crouter-sdk/memory.md +0 -87
- package/dist/commands/broker-permissions.d.ts +0 -2
- package/dist/commands/broker-permissions.js +0 -1
- package/dist/commands/memory/client.d.ts +0 -11
- package/dist/commands/memory/client.js +0 -1
- package/dist/commands/memory/delete.d.ts +0 -1
- package/dist/commands/memory/delete.js +0 -1
- package/dist/commands/memory/edit.d.ts +0 -1
- package/dist/commands/memory/edit.js +0 -21
- package/dist/commands/memory/find.d.ts +0 -1
- package/dist/commands/memory/find.js +0 -1
- package/dist/commands/memory/history.d.ts +0 -1
- package/dist/commands/memory/history.js +0 -5
- package/dist/commands/memory/lint.d.ts +0 -1
- package/dist/commands/memory/lint.js +0 -1
- package/dist/commands/memory/list.d.ts +0 -1
- package/dist/commands/memory/list.js +0 -1
- package/dist/commands/memory/move.d.ts +0 -1
- package/dist/commands/memory/move.js +0 -1
- package/dist/commands/memory/origin.d.ts +0 -1
- package/dist/commands/memory/origin.js +0 -1
- package/dist/commands/memory/read.d.ts +0 -1
- package/dist/commands/memory/read.js +0 -6
- package/dist/commands/memory/shared.d.ts +0 -22
- package/dist/commands/memory/shared.js +0 -1
- package/dist/commands/memory/write.d.ts +0 -1
- package/dist/commands/memory/write.js +0 -13
- package/dist/commands/memory.js +0 -1
- package/dist/commands/node-inspect-artifacts.d.ts +0 -1
- package/dist/commands/node-inspect-artifacts.js +0 -8
- package/dist/core/help/memory-extensions.d.ts +0 -3
- package/dist/core/help/memory-extensions.js +0 -2
- package/dist/core/memory/cli-selector.d.ts +0 -13
- package/dist/core/memory/cli-selector.js +0 -1
- package/dist/core/memory/doc-link-grammar.d.ts +0 -20
- package/dist/core/memory/doc-link-grammar.js +0 -2
- package/dist/core/memory/extensions.js +0 -1
- package/dist/core/memory/history.d.ts +0 -87
- package/dist/core/memory/history.js +0 -6
- package/dist/core/memory/identity.d.ts +0 -65
- package/dist/core/memory/identity.js +0 -1
- package/dist/core/memory/inline-ref-guidance.js +0 -2
- package/dist/core/memory/inline-ref-inventory.d.ts +0 -9
- package/dist/core/memory/inline-ref-inventory.js +0 -1
- package/dist/core/memory/lint.d.ts +0 -163
- package/dist/core/memory/lint.js +0 -2
- package/dist/core/memory/mutation-domain.d.ts +0 -113
- package/dist/core/memory/mutation-domain.js +0 -12
- package/dist/core/memory/mutations.d.ts +0 -74
- package/dist/core/memory/mutations.js +0 -1
- package/dist/core/memory/project-namespace.d.ts +0 -31
- package/dist/core/memory/project-namespace.js +0 -2
- package/dist/core/memory/repository-association.d.ts +0 -31
- package/dist/core/memory/repository-association.js +0 -1
- package/dist/core/memory/service.d.ts +0 -145
- package/dist/core/memory/service.js +0 -2
- package/dist/core/memory/tree.d.ts +0 -39
- package/dist/core/memory/tree.js +0 -1
- package/dist/core/memory-resolver.d.ts +0 -280
- package/dist/core/memory-resolver.js +0 -2
- package/dist/core/nested-stores.d.ts +0 -18
- package/dist/core/nested-stores.js +0 -1
- package/dist/core/runtime/memory.d.ts +0 -3
- package/dist/core/runtime/memory.js +0 -1
- package/dist/core/substrate/frontmatter-validation.d.ts +0 -11
- package/dist/core/substrate/frontmatter-validation.js +0 -1
- package/dist/core/substrate/gate.d.ts +0 -16
- package/dist/core/substrate/gate.js +0 -1
- package/dist/core/substrate/index.d.ts +0 -18
- package/dist/core/substrate/index.js +0 -1
- package/dist/core/substrate/injected-store.d.ts +0 -75
- package/dist/core/substrate/injected-store.js +0 -2
- package/dist/core/substrate/listings.d.ts +0 -28
- package/dist/core/substrate/listings.js +0 -1
- package/dist/core/substrate/memory-events.d.ts +0 -6
- package/dist/core/substrate/memory-events.js +0 -1
- package/dist/core/substrate/on-read-node.d.ts +0 -6
- package/dist/core/substrate/on-read-node.js +0 -1
- package/dist/core/substrate/on-read.d.ts +0 -101
- package/dist/core/substrate/on-read.js +0 -9
- package/dist/core/substrate/plan.d.ts +0 -94
- package/dist/core/substrate/plan.js +0 -1
- package/dist/core/substrate/render-node.d.ts +0 -12
- package/dist/core/substrate/render-node.js +0 -1
- package/dist/core/substrate/render.d.ts +0 -41
- package/dist/core/substrate/render.js +0 -65
- package/dist/core/substrate/session-cache.d.ts +0 -27
- package/dist/core/substrate/session-cache.js +0 -1
- package/dist/core/substrate/surface-match.d.ts +0 -73
- package/dist/core/substrate/surface-match.js +0 -1
- package/dist/daemon/api/handlers/memory.js +0 -5
- package/dist/migrations/001-surfaces-frontmatter.d.ts +0 -2
- package/dist/migrations/001-surfaces-frontmatter.js +0 -1
- package/dist/migrations/002-profile-project-memory.d.ts +0 -2
- package/dist/migrations/002-profile-project-memory.js +0 -1
- package/dist/migrations/003-repository-root-memory-identity/front-door.d.ts +0 -26
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +0 -11
- package/dist/migrations/003-repository-root-memory-identity/index.d.ts +0 -2
- package/dist/migrations/003-repository-root-memory-identity/index.js +0 -5
- package/dist/migrations/003-repository-root-memory-identity/references.d.ts +0 -95
- package/dist/migrations/003-repository-root-memory-identity/references.js +0 -5
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.d.ts +0 -39
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +0 -3
- package/dist/migrations/convergent.d.ts +0 -43
- package/dist/migrations/convergent.js +0 -2
- package/dist/migrations/corpus.d.ts +0 -75
- package/dist/migrations/corpus.js +0 -3
- package/dist/migrations/frontmatter-splice.d.ts +0 -15
- package/dist/migrations/frontmatter-splice.js +0 -8
- package/dist/migrations/profile-manifests.d.ts +0 -30
- package/dist/migrations/profile-manifests.js +0 -2
- package/dist/migrations/registry.d.ts +0 -7
- package/dist/migrations/registry.js +0 -1
- package/dist/migrations/runner.d.ts +0 -43
- package/dist/migrations/runner.js +0 -1
- package/dist/migrations/types.d.ts +0 -211
- package/dist/shared/birth-announcement.d.ts +0 -12
- package/dist/shared/birth-announcement.js +0 -1
- package/docs/sdk/guides/app-memory.md +0 -22
- package/docs/sdk/memory.md +0 -85
- /package/dist/{migrations/types.js → api/dto/delivery.js} +0 -0
- /package/dist/{core/memory → shared}/inline-ref-grammar.d.ts +0 -0
- /package/dist/{core/memory → shared}/inline-ref-grammar.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Ee=Object.defineProperty;var o=(e,n)=>Ee(e,"name",{value:n,configurable:!0});import{randomBytes as Te}from"node:crypto";import{parseScope as ie}from"@north-light/crouter-identity";import{importNodeSqlAuthority as se,recreateNodeRowsView as re}from"./node-sql-migration.js";import{migrateRecoveryWitnesses as ae}from"./recovery.js";import{migrateMessagingState as de}from"./deliveries.js";import{migrateHumanRequestsState as Ne}from"../human/requests.js";import{existsSync as A,readFileSync as U,readdirSync as C,realpathSync as _e,statSync as ce}from"node:fs";import{basename as Le,join as w,resolve as j}from"node:path";import{isSafeNodeId as ue,nodesRoot as m,nodeMetaPath as f}from"./paths.js";import{convertLegacyEdges as le}from"../../migrations/004-canvas-documents/legacy-edges.js";import{customExtensionPaths as Ae}from"./extensions.js";import{readMetaObject as P,updateJsonFileDurably as Y,withMetaLock as Oe,writeMetaObjectLocked as pe}from"./meta-file.js";function Re(e){e.exec(`
|
|
2
2
|
CREATE TABLE IF NOT EXISTS nodes (
|
|
3
3
|
node_id TEXT PRIMARY KEY,
|
|
4
4
|
name TEXT NOT NULL,
|
|
@@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS edges (
|
|
|
23
23
|
CREATE INDEX IF NOT EXISTS idx_edges_to ON edges(type, to_id);
|
|
24
24
|
CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(type, from_id);
|
|
25
25
|
CREATE INDEX IF NOT EXISTS idx_nodes_status ON nodes(status);
|
|
26
|
-
`)}o(
|
|
26
|
+
`)}o(Re,"baselineSchema");function y(e,n){return new Set(e.prepare(`PRAGMA table_info(${n})`).all().map(t=>t.name))}o(y,"tableColumns");function W(e,n,t,E){n.has(t)||(e.exec(E),n.add(t))}o(W,"addColumnIfMissing");function L(e){return y(e,"nodes")}o(L,"nodeColumns");const r=W;function Ie(e){const n=L(e);r(e,n,"intent","ALTER TABLE nodes ADD COLUMN intent TEXT;"),r(e,n,"pi_pid","ALTER TABLE nodes ADD COLUMN pi_pid INTEGER;"),r(e,n,"window","ALTER TABLE nodes ADD COLUMN window TEXT;"),r(e,n,"tmux_session","ALTER TABLE nodes ADD COLUMN tmux_session TEXT;")}o(Ie,"addRuntimeColumns");function Xe(e){const n=m();if(!A(n))return;const t=e.prepare('UPDATE nodes SET intent = ?, pi_pid = ?, "window" = ?, tmux_session = ? WHERE node_id = ?');for(const E of C(n)){const s=f(E);if(!A(s))continue;let T;try{T=JSON.parse(U(s,"utf8"))}catch{continue}t.run(T.intent??null,T.pi_pid??null,T.window??null,T.tmux_session??null,E)}}o(Xe,"backfillRuntime");function me(e){if(!(e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'edges'").get()!==void 0)){e.exec(`
|
|
27
27
|
CREATE TABLE edges (
|
|
28
28
|
type TEXT NOT NULL,
|
|
29
29
|
from_id TEXT NOT NULL,
|
|
@@ -57,14 +57,14 @@ DROP TABLE edges;
|
|
|
57
57
|
ALTER TABLE edges_new RENAME TO edges;
|
|
58
58
|
CREATE INDEX IF NOT EXISTS idx_edges_to ON edges(type, to_id);
|
|
59
59
|
CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(type, from_id);
|
|
60
|
-
`);const
|
|
60
|
+
`);const E=e.prepare("SELECT COUNT(*) AS n FROM edges").get().n;if(E!==t)throw new Error(`edges FK rebuild lost rows: expected ${t} non-orphan edge(s), got ${E}`);const s=e.prepare("PRAGMA foreign_key_check").all();if(s.length>0)throw new Error(`edges FK rebuild left ${s.length} foreign-key violation(s)`);e.exec("COMMIT")}catch(E){throw e.exec("ROLLBACK"),E}}finally{e.exec("PRAGMA foreign_keys = ON;")}}o(me,"edgesForeignKeyCascade");function fe(e){const n=L(e);r(e,n,"pane","ALTER TABLE nodes ADD COLUMN pane TEXT;")}o(fe,"addPaneColumn");function Ue(e){e.exec(`
|
|
61
61
|
CREATE TABLE IF NOT EXISTS focuses (
|
|
62
62
|
focus_id TEXT PRIMARY KEY, -- stable internal id for the viewport
|
|
63
63
|
pane TEXT, -- the durable %pane_id realizing the focus
|
|
64
64
|
session TEXT, -- derived cache of the user session (reconciled from pane)
|
|
65
65
|
node_id TEXT NOT NULL UNIQUE -- the node shown; UNIQUE \u2192 a node occupies <=1 focus
|
|
66
66
|
);
|
|
67
|
-
`)}o(
|
|
67
|
+
`)}o(Ue,"addFocusesTable");function Ce(e){e.exec(`
|
|
68
68
|
CREATE TABLE IF NOT EXISTS wakeups (
|
|
69
69
|
wakeup_id TEXT PRIMARY KEY,
|
|
70
70
|
node_id TEXT, -- TARGET + node-anchored cancel anchor; NULL = canvas-detached
|
|
@@ -80,7 +80,7 @@ CREATE INDEX IF NOT EXISTS idx_wakeups_fire ON wakeups(fire_at);
|
|
|
80
80
|
CREATE INDEX IF NOT EXISTS idx_wakeups_node ON wakeups(node_id); -- by-node cancel / list
|
|
81
81
|
CREATE INDEX IF NOT EXISTS idx_wakeups_owner ON wakeups(owner_id); -- by-owner reap (ruling A)
|
|
82
82
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_wakeups_deadline ON wakeups(node_id) WHERE kind = 'deadline';
|
|
83
|
-
`)}o(
|
|
83
|
+
`)}o(Ce,"appendWakeupsTable");function Se(e){e.exec(`
|
|
84
84
|
CREATE TABLE IF NOT EXISTS triggers (
|
|
85
85
|
trigger_id TEXT PRIMARY KEY,
|
|
86
86
|
owner_id TEXT NOT NULL,
|
|
@@ -131,12 +131,12 @@ SELECT
|
|
|
131
131
|
FROM wakeups;
|
|
132
132
|
|
|
133
133
|
DROP TABLE wakeups;
|
|
134
|
-
`)}o(
|
|
134
|
+
`)}o(Se,"migrateWakeupsToTriggers");function De(e){const n=L(e);r(e,n,"host_kind","ALTER TABLE nodes ADD COLUMN host_kind TEXT;")}o(De,"addHostKindColumn");function ge(e){e.exec(`
|
|
135
135
|
CREATE TABLE IF NOT EXISTS canvas_meta (
|
|
136
136
|
key TEXT PRIMARY KEY,
|
|
137
137
|
value TEXT NOT NULL
|
|
138
138
|
);
|
|
139
|
-
`)}o(
|
|
139
|
+
`)}o(ge,"addCanvasMetaTable");function he(e){const n=L(e);r(e,n,"profile_id","ALTER TABLE nodes ADD COLUMN profile_id TEXT;")}o(he,"addProfileIdColumn");function we(e){const n=L(e);r(e,n,"pi_pid_identity","ALTER TABLE nodes ADD COLUMN pi_pid_identity TEXT;")}o(we,"addPidIdentityColumn");function ye(e){const n=L(e);r(e,n,"waiting_for","ALTER TABLE nodes ADD COLUMN waiting_for TEXT;")}o(ye,"addMessageWaitColumn");function K(e){const n=L(e);if(n.size===0)return;r(e,n,"final_report","ALTER TABLE nodes ADD COLUMN final_report TEXT;"),r(e,n,"finalized_at","ALTER TABLE nodes ADD COLUMN finalized_at TEXT;");const t=e.prepare("SELECT node_id FROM nodes WHERE status = 'done' AND final_report IS NULL").all(),E=e.prepare("UPDATE nodes SET final_report = ?, finalized_at = ? WHERE node_id = ? AND final_report IS NULL");for(const{node_id:s}of t){const T=w(m(),s,"reports");if(!A(T))continue;let i=null;for(const a of C(T))if(a.endsWith(".md"))try{const d=U(w(T,a),"utf8"),N=/^---\nnode: [^\n]+\nkind: final\nts: ([^\n]+)\n---\n/.exec(d);if(N===null||Number.isNaN(Date.parse(N[1])))continue;const _={name:a,ts:N[1]};(i===null||_.ts>i.ts||_.ts===i.ts&&_.name>i.name)&&(i=_)}catch{}i!==null&&E.run(i.name,i.ts,s)}}o(K,"addCanonicalFinalColumns");function xe(e){const n=m();if(A(n))for(const t of C(n)){const E=f(t);A(E)&&Y(E,s=>{const T=s.launch;if(typeof T!="object"||T===null||Array.isArray(T))return!1;const i=T.extensions;if(!Array.isArray(i)||!i.every(d=>typeof d=="string"))return!1;const a=Ae(i);return a.length===i.length?!1:(T.extensions=a,!0)})}}o(xe,"normalizePersistedLaunchExtensions");function ve(e){const n=L(e);r(e,n,"waiting_for_generation","ALTER TABLE nodes ADD COLUMN waiting_for_generation INTEGER NOT NULL DEFAULT 0;")}o(ve,"addMessageWaitGenerationColumn");function Fe(e){e.exec(`
|
|
140
140
|
CREATE TABLE IF NOT EXISTS consult_outbox (
|
|
141
141
|
node_id TEXT PRIMARY KEY, -- legacy work node id
|
|
142
142
|
dir TEXT NOT NULL, -- legacy ticket directory
|
|
@@ -150,15 +150,15 @@ CREATE INDEX IF NOT EXISTS idx_consult_outbox_status ON consult_outbox(status);
|
|
|
150
150
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_dir ON consult_outbox(dir);
|
|
151
151
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_dir_request_status ON consult_outbox(dir, request_id, status);
|
|
152
152
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_dir_status ON consult_outbox(dir, status);
|
|
153
|
-
`)}o(
|
|
153
|
+
`)}o(Fe,"addHumanWorkOutboxTable");function ke(e){const n=y(e,"consult_outbox"),t=o((E,s)=>W(e,n,E,s),"add");t("work_kind","ALTER TABLE consult_outbox ADD COLUMN work_kind TEXT NOT NULL DEFAULT 'follow_up';"),t("interaction_id","ALTER TABLE consult_outbox ADD COLUMN interaction_id TEXT;"),t("generation_id","ALTER TABLE consult_outbox ADD COLUMN generation_id TEXT;"),t("interaction_snapshot","ALTER TABLE consult_outbox ADD COLUMN interaction_snapshot TEXT;"),t("handler_command","ALTER TABLE consult_outbox ADD COLUMN handler_command TEXT;"),t("handler_args_json","ALTER TABLE consult_outbox ADD COLUMN handler_args_json TEXT;"),t("claim_token","ALTER TABLE consult_outbox ADD COLUMN claim_token TEXT;"),e.exec(`
|
|
154
154
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_human_work_status ON consult_outbox(work_kind, status);
|
|
155
155
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_human_work_dir_status ON consult_outbox(dir, work_kind, status);
|
|
156
156
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_human_work_request_status ON consult_outbox(dir, request_id, work_kind, status);
|
|
157
157
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_consult_outbox_visual_request ON consult_outbox(dir, request_id, work_kind) WHERE work_kind = 'visual';
|
|
158
|
-
`)}o(
|
|
158
|
+
`)}o(ke,"addHumanWorkColumns");function Me(e){e.exec(`
|
|
159
159
|
CREATE INDEX IF NOT EXISTS idx_nodes_parent ON nodes(parent);
|
|
160
160
|
CREATE INDEX IF NOT EXISTS idx_nodes_created ON nodes(created);
|
|
161
|
-
`)}o(
|
|
161
|
+
`)}o(Me,"addNodeParentCreatedIndexes");function Be(e){e.exec(`
|
|
162
162
|
CREATE TABLE IF NOT EXISTS crons (
|
|
163
163
|
cron_id TEXT PRIMARY KEY,
|
|
164
164
|
name TEXT NOT NULL, -- agent-legible label; how it shows in list
|
|
@@ -213,38 +213,38 @@ CREATE TABLE IF NOT EXISTS cron_runs ( -- bounded ring, last 20 p
|
|
|
213
213
|
FOREIGN KEY (cron_id) REFERENCES crons(cron_id) ON DELETE CASCADE
|
|
214
214
|
);
|
|
215
215
|
CREATE INDEX IF NOT EXISTS idx_cron_runs_cron ON cron_runs(cron_id, started);
|
|
216
|
-
`)}o(
|
|
217
|
-
`).includes(
|
|
216
|
+
`)}o(Be,"addCronsTables");function R(e){return`'${e.replace(/'/g,`'"'"'`)}'`}o(R,"shellSingleQuote");function Ge(e,n){let t=0;for(;;){const E=`${n}_${t}`;if(!e.split(`
|
|
217
|
+
`).includes(E))return E;t++}}o(Ge,"uniqueHeredocDelimiter");function $(e,n,t){const E=Ge(n,t);return`${e} <<'${E}'
|
|
218
218
|
${n}
|
|
219
|
-
${
|
|
219
|
+
${E}`}o($,"heredocCommand");function be(e){if(typeof e!="string")return{};try{const n=JSON.parse(e);return typeof n!="object"||n===null||Array.isArray(n)?{}:n}catch{return{}}}o(be,"migrationPayload");function l(e,n,t){const E=e[n];if(typeof E!="string"||E.trim()==="")throw new Error(`trigger ${t} payload requires non-empty ${n}`);return E}o(l,"requiredString");function S(e,n){const t=e[n];return typeof t=="string"&&t.trim()!==""?t:void 0}o(S,"optionalString");function I(e,n){const t=e[n];return typeof t=="string"&&t.trim()!==""?t:void 0}o(I,"optionalColumn");function q(e,n,t,E){return $(`crtr node message send --to ${R(e)} --tier ${R(n)}`,t,`CRTR_MIGRATED_${E.replace(/[^A-Za-z0-9]/g,"_")}`)}o(q,"migratedMessageCommand");function He(e,n){return`printf '%s\\n' "$CRTR_GATE_STDOUT" | crtr node message send --to ${R(e)} --tier ${R(n)}`}o(He,"migratedGateStdoutMessageCommand");function je(e,n){const t=[`crtr node new --kind ${R(l(e,"kind",n))}`],E=[["mode","mode"],["cwd","cwd"],["name","name"],["parent","parent"],["worktreeBase","worktree"],["forkFrom","fork-from"],["model","model"],["profile","profile"],["situationalContext","situational-context"]];for(const[T,i]of E){const a=S(e,T);a!==void 0&&t.push(`--${i} ${R(a)}`)}e.root===!0&&t.push("--root");const s=l(e,"prompt",n);return $(t.join(" "),s,`CRTR_MIGRATED_${n.replace(/[^A-Za-z0-9]/g,"_")}`)}o(je,"migratedSpawnCommand");const z="migration.v22.skipped";function Pe(e){const n=e.prepare("SELECT cwd FROM nodes WHERE parent IS NULL ORDER BY created LIMIT 1").get();return(n!==void 0?I(n,"cwd"):void 0)??process.cwd()}o(Pe,"ambientMigrationCwd");function Ye(e){let n;try{n=e.prepare("SELECT eval_pid FROM triggers WHERE eval_state = 'running' AND eval_pid IS NOT NULL").all()}catch{return}for(const t of n){const E=t.eval_pid;if(!(typeof E!="number"||!Number.isInteger(E)||E<=1))try{process.kill(-E,"SIGTERM")}catch{}}}o(Ye,"reapRunningPredicateEvaluations");function We(e){const n=[],t=e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'triggers'").get()!==void 0;t&&Ye(e);let E=[];if(t)try{E=e.prepare("SELECT * FROM triggers ORDER BY created, trigger_id").all()}catch(i){n.push({trigger_id:"<unreadable table>",reason:`triggers table could not be read: ${i instanceof Error?i.message:String(i)}`})}const s=Pe(e),T=e.prepare(`
|
|
220
220
|
INSERT OR REPLACE INTO crons (
|
|
221
221
|
cron_id, name, created_by, command, fire_at, recur, tz, expires_at,
|
|
222
222
|
anchor_node, cancel_on_wake, cwd, env_json, profile, scope,
|
|
223
223
|
run_timeout_s, overlap, on_output, sink, tier, created, updated
|
|
224
|
-
) VALUES (?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, NULL, ?, 'profile', ?, 'skip', 'on-failure', '{}', ?, ?, ?)`);for(const
|
|
224
|
+
) VALUES (?, ?, ?, ?, ?, ?, NULL, ?, ?, ?, ?, NULL, ?, 'profile', ?, 'skip', 'on-failure', '{}', ?, ?, ?)`);for(const i of E){const a=I(i,"trigger_id");if(a===void 0){n.push({trigger_id:"<unidentified row>",reason:"row carries no trigger_id"});continue}try{Ke(e,T,i,a,s)}catch(d){n.push({trigger_id:a,reason:d instanceof Error?d.message:String(d)})}}n.length>0&&(e.prepare("INSERT INTO canvas_meta (key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(z,JSON.stringify(n)),console.warn(`[canvas migration v22] ${n.length} retired schedule(s) could not be converted to crons and were dropped; see canvas_meta['${z}']: `+n.map(i=>`${i.trigger_id} (${i.reason})`).join("; "))),e.exec(`
|
|
225
225
|
DROP INDEX IF EXISTS idx_triggers_fire;
|
|
226
226
|
DROP INDEX IF EXISTS idx_triggers_node;
|
|
227
227
|
DROP INDEX IF EXISTS idx_triggers_owner;
|
|
228
228
|
DROP INDEX IF EXISTS idx_triggers_eval;
|
|
229
229
|
DROP INDEX IF EXISTS idx_triggers_deadline;
|
|
230
230
|
DROP TABLE IF EXISTS triggers;
|
|
231
|
-
`)}o(We,"migrateTriggersToCrons");function Ke(e,n,t,
|
|
232
|
-
${
|
|
231
|
+
`)}o(We,"migrateTriggersToCrons");function Ke(e,n,t,E,s){const T=l(t,"owner_id",E),i=e.prepare("SELECT cwd, profile_id FROM nodes WHERE node_id = ?").get(T),a=(i===void 0?void 0:I(i,"cwd"))??s,d=i===void 0?null:I(i,"profile_id")??null,N=I(t,"node_id")??null,_=l(t,"action",E),c=l(t,"action_mode",E),u=l(t,"trigger_type",E),X=be(t.payload),G=I(t,"created")??new Date().toISOString(),g=c==="deadline_message"?"urgent":S(X,"tier")??"normal",x=S(X,"label");let O,h,b=!1;if(_==="msg"&&(c==="inbox_message"||c==="deadline_message")){if(N===null)throw new Error("has no message target");const p=S(X,"body");p!==void 0?O=q(N,g,p,E):u==="when"?(b=!0,O=He(N,g)):O=q(N,g,x??"Scheduled message (no body was recorded when this schedule was armed).",E),h=x??(c==="deadline_message"?"deadline":"scheduled message")}else if(_==="msg"&&c==="fresh_revive"){if(N===null)throw new Error("has no revive target");O=`crtr node lifecycle revive ${R(N)} --fresh`,h=x??"scheduled fresh revive"}else if(_==="new"&&c==="node_birth")O=je(X,E),h=S(X,"name")??`scheduled ${l(X,"kind",E)} node`;else throw new Error(`has unsupported action ${_}/${c}`);let v,F,H=null;if(u==="when"){v=l(t,"next_eval_at",E),F=l(t,"eval_every",E),H=I(t,"timeout_at")??null;const p=l(t,"when_script",E);O=`${b?`if ! CRTR_GATE_STDOUT="$(
|
|
232
|
+
${p}
|
|
233
233
|
)"; then`:`if ! (
|
|
234
|
-
${
|
|
234
|
+
${p}
|
|
235
235
|
); then`}
|
|
236
236
|
exit 0
|
|
237
237
|
fi
|
|
238
238
|
{
|
|
239
239
|
${O}
|
|
240
|
-
} && crtr cron cancel "$CRTR_CRON_ID"`}else if(
|
|
240
|
+
} && crtr cron cancel "$CRTR_CRON_ID"`}else if(u==="at"||u==="every"||u==="until")v=l(t,"fire_at",E),F=u==="every"?l(t,"recur",E):null;else throw new Error(`has unknown timing type ${u}`);if(c==="deadline_message"&&N!==null){const p=e.prepare("SELECT cron_id FROM crons WHERE anchor_node = ? AND cancel_on_wake = 1 AND cron_id <> ?").get(N,E);if(p!==void 0)throw new Error(`node ${N} already has a migrated deadline (${String(p.cron_id)}); only one is allowed`)}n.run(E,h,T,O,v,F,H,N,c==="deadline_message"?1:0,a,d,300,g,G,G)}o(Ke,"convertTriggerRow");function $e(e){const n=y(e,"crons");n.size===0||n.has("run_pid_identity")||e.exec("ALTER TABLE crons ADD COLUMN run_pid_identity TEXT;")}o($e,"addCronRunPidIdentityColumn");function qe(e){const n=y(e,"crons");n.size!==0&&(n.has("run_out_of_band")||e.exec("ALTER TABLE crons ADD COLUMN run_out_of_band INTEGER NOT NULL DEFAULT 0;"),n.has("queued")&&e.exec("ALTER TABLE crons DROP COLUMN queued;"))}o(qe,"addCronOutOfBandColumn");function ze(e){e.exec(`
|
|
241
241
|
CREATE TABLE IF NOT EXISTS warm_pool (
|
|
242
242
|
node_id TEXT PRIMARY KEY REFERENCES nodes(node_id) ON DELETE CASCADE,
|
|
243
243
|
recipe_key TEXT NOT NULL, -- frozen launch tuple this spare was minted for
|
|
244
244
|
created TEXT NOT NULL -- ISO 8601, mint time (oldest spare claimed first)
|
|
245
245
|
);
|
|
246
246
|
CREATE INDEX IF NOT EXISTS idx_warm_pool_recipe ON warm_pool(recipe_key, created);
|
|
247
|
-
`)}o(
|
|
247
|
+
`)}o(ze,"addWarmPoolTable");function Je(e){const n=e.prepare("SELECT node_id, dir, root, request_id, work_kind, status, final_report, updated_at FROM consult_outbox").all();e.exec(`
|
|
248
248
|
CREATE TABLE consult_outbox_new (
|
|
249
249
|
node_id TEXT PRIMARY KEY,
|
|
250
250
|
ticket_node_id TEXT NOT NULL,
|
|
@@ -256,7 +256,7 @@ CREATE TABLE consult_outbox_new (
|
|
|
256
256
|
);
|
|
257
257
|
`);const t=e.prepare(`
|
|
258
258
|
INSERT INTO consult_outbox_new (node_id, ticket_node_id, request_id, work_kind, status, final_report, updated_at)
|
|
259
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)`);let
|
|
259
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`);let E=0;for(const s of n){const T=Le(s.dir);if(!(s.root===j(s.root)&&s.dir===w(s.root,T))||!ue(T)){E+=1;continue}t.run(s.node_id,T,s.request_id,s.work_kind,s.status,s.final_report,s.updated_at)}E>0&&console.warn(`[canvas migration v26] dropped ${E} consult_outbox row(s) whose legacy ticket path cannot safely map to a ticket node id`),e.exec(`
|
|
260
260
|
DROP TABLE consult_outbox;
|
|
261
261
|
ALTER TABLE consult_outbox_new RENAME TO consult_outbox;
|
|
262
262
|
|
|
@@ -265,7 +265,7 @@ CREATE INDEX IF NOT EXISTS idx_consult_outbox_human_work_status ON consult_outbo
|
|
|
265
265
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_ticket_status ON consult_outbox(ticket_node_id, work_kind, status);
|
|
266
266
|
CREATE INDEX IF NOT EXISTS idx_consult_outbox_ticket_request_status ON consult_outbox(ticket_node_id, request_id, work_kind, status);
|
|
267
267
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_consult_outbox_visual_request ON consult_outbox(ticket_node_id, request_id, work_kind) WHERE work_kind = 'visual';
|
|
268
|
-
`)}o(
|
|
268
|
+
`)}o(Je,"narrowHumanWorkOutbox");function Qe(e){e.exec(`
|
|
269
269
|
CREATE TABLE IF NOT EXISTS reviews (
|
|
270
270
|
review_id TEXT PRIMARY KEY,
|
|
271
271
|
idempotency_key TEXT NOT NULL UNIQUE,
|
|
@@ -309,7 +309,7 @@ CREATE INDEX IF NOT EXISTS idx_reviews_state ON reviews(state);
|
|
|
309
309
|
CREATE INDEX IF NOT EXISTS idx_reviews_origin ON reviews(origin_node_id);
|
|
310
310
|
CREATE INDEX IF NOT EXISTS idx_reviews_file ON reviews(file);
|
|
311
311
|
CREATE INDEX IF NOT EXISTS idx_reviews_bridge ON reviews(bridge_node_id);
|
|
312
|
-
`)}o(
|
|
312
|
+
`)}o(Qe,"addReviewsTable");function Ve(e){e.exec(`
|
|
313
313
|
CREATE TABLE IF NOT EXISTS review_comments (
|
|
314
314
|
comment_id TEXT PRIMARY KEY,
|
|
315
315
|
review_id TEXT NOT NULL,
|
|
@@ -354,13 +354,13 @@ CREATE INDEX IF NOT EXISTS idx_review_comment_events_review_seq
|
|
|
354
354
|
ON review_comment_events(review_id, seq);
|
|
355
355
|
CREATE INDEX IF NOT EXISTS idx_review_comment_events_comment_seq
|
|
356
356
|
ON review_comment_events(comment_id, seq);
|
|
357
|
-
`)}o(
|
|
357
|
+
`)}o(Ve,"addReviewCommentTables");function Ze(e){e.exec(`
|
|
358
358
|
ALTER TABLE review_comments
|
|
359
359
|
ADD COLUMN anchor_state TEXT NOT NULL DEFAULT 'live' CHECK (anchor_state IN ('live', 'detached'));
|
|
360
|
-
`)}o(
|
|
360
|
+
`)}o(Ze,"addReviewCommentAnchorState");function en(e){e.exec("DROP TABLE IF EXISTS consult_outbox")}o(en,"dropConsultOutbox");function nn(e){e.exec("ALTER TABLE reviews ADD COLUMN submit_requested_at TEXT")}o(nn,"addReviewSubmitRequested");function tn(e){e.exec(`
|
|
361
361
|
ALTER TABLE crons ADD COLUMN held INTEGER NOT NULL DEFAULT 0;
|
|
362
362
|
ALTER TABLE crons ADD COLUMN last_poke_at TEXT;
|
|
363
|
-
`)}o(
|
|
363
|
+
`)}o(tn,"addCronHeldColumns");function on(e){e.exec(`
|
|
364
364
|
CREATE TABLE human_action_deliveries (
|
|
365
365
|
request_id TEXT PRIMARY KEY,
|
|
366
366
|
state TEXT NOT NULL,
|
|
@@ -378,18 +378,18 @@ CREATE TABLE human_action_deliveries (
|
|
|
378
378
|
updated_at INTEGER NOT NULL
|
|
379
379
|
);
|
|
380
380
|
CREATE INDEX idx_human_action_deliveries_due ON human_action_deliveries(state, next_attempt_at);
|
|
381
|
-
`)}o(
|
|
381
|
+
`)}o(on,"addHumanActionDeliveries");function En(e){const n=L(e);r(e,n,"pi_session_file","ALTER TABLE nodes ADD COLUMN pi_session_file TEXT;");for(const t of C(m(),{withFileTypes:!0}))if(t.isDirectory())try{const E=JSON.parse(U(f(t.name),"utf8"));typeof E.pi_session_file=="string"&&e.prepare("UPDATE nodes SET pi_session_file = ? WHERE node_id = ?").run(E.pi_session_file,t.name)}catch{}e.exec("CREATE INDEX IF NOT EXISTS idx_nodes_pi_session_file ON nodes(pi_session_file);")}o(En,"addNodeSessionFileIndex");function J(e,n){const t=o(a=>{const d=j(a);return A(d)?_e(d):d},"canonical"),E=e.prepare("UPDATE nodes SET pi_session_file = ? WHERE node_id = ?");e.exec("DROP INDEX IF EXISTS idx_nodes_pi_session_file;");const s=e.prepare("SELECT node_id FROM nodes ORDER BY created ASC, node_id ASC").all();for(const{node_id:a}of s){const d=f(a);if(P(d)===null){E.run(null,a);continue}const N=Oe(d,()=>{const _=P(d);if(_===null)throw new Error(`node ${a} session metadata changed during ownership migration`);if(typeof _.pi_session_file!="string")return null;const c=_.pi_session_file,u=t(c);return u!==c&&(_.pi_session_file=u,pe(d,_)),u});E.run(N,a)}const T=e.prepare(`
|
|
382
382
|
SELECT pi_session_file
|
|
383
383
|
FROM nodes
|
|
384
384
|
WHERE pi_session_file IS NOT NULL
|
|
385
385
|
GROUP BY pi_session_file
|
|
386
386
|
HAVING COUNT(*) > 1
|
|
387
|
-
`).all();if(!n&&T.length>0){const a=T.map(({pi_session_file:d})=>d).join(", ");throw new Error(`cannot restore unique Pi session ownership: authoritative metadata has concurrent claimants for ${a}`)}const
|
|
387
|
+
`).all();if(!n&&T.length>0){const a=T.map(({pi_session_file:d})=>d).join(", ");throw new Error(`cannot restore unique Pi session ownership: authoritative metadata has concurrent claimants for ${a}`)}const i=e.prepare("UPDATE nodes SET pi_session_file = NULL WHERE node_id = ?");for(const{pi_session_file:a}of T){const d=e.prepare(`
|
|
388
388
|
SELECT node_id
|
|
389
389
|
FROM nodes
|
|
390
390
|
WHERE pi_session_file = ?
|
|
391
391
|
ORDER BY created ASC, node_id ASC
|
|
392
|
-
`).all(a);for(const{node_id:
|
|
392
|
+
`).all(a);for(const{node_id:N}of d.slice(1)){if(!Y(f(N),c=>{const u=c.pi_session_file;if(typeof u!="string"||t(u)!==a)throw new Error(`node ${N} session metadata changed during ownership migration`);return c.pi_session_id=null,c.pi_session_file=null,!0}))throw new Error(`node ${N} session metadata changed during ownership migration`);i.run(N)}}e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_nodes_pi_session_file ON nodes(pi_session_file);")}o(J,"reconcileNodeSessionFileOwners");function Tn(e){J(e,!0)}o(Tn,"makeNodeSessionFileUnique");function sn(e){J(e,!1)}o(sn,"repairNodeSessionFileUniqueIndex");function rn(e){const n=L(e);r(e,n,"frozen_at","ALTER TABLE nodes ADD COLUMN frozen_at TEXT;"),r(e,n,"respawn_failures","ALTER TABLE nodes ADD COLUMN respawn_failures INTEGER NOT NULL DEFAULT 0;"),r(e,n,"respawn_not_before","ALTER TABLE nodes ADD COLUMN respawn_not_before TEXT;"),r(e,n,"launched_at","ALTER TABLE nodes ADD COLUMN launched_at TEXT;"),r(e,n,"last_settled_at","ALTER TABLE nodes ADD COLUMN last_settled_at TEXT;"),r(e,n,"terminal_reason","ALTER TABLE nodes ADD COLUMN terminal_reason TEXT;"),e.exec(`
|
|
393
393
|
UPDATE nodes SET terminal_reason = CASE
|
|
394
394
|
WHEN status = 'done' AND final_report IS NOT NULL THEN 'finalized'
|
|
395
395
|
WHEN status = 'done' AND intent = 'parked' THEN 'parked'
|
|
@@ -398,7 +398,7 @@ UPDATE nodes SET terminal_reason = CASE
|
|
|
398
398
|
WHEN status = 'dead' THEN 'crashed'
|
|
399
399
|
END
|
|
400
400
|
WHERE status IN ('done','canceled','dead') AND terminal_reason IS NULL;
|
|
401
|
-
`)}o(
|
|
401
|
+
`)}o(rn,"addNodeLifecycleColumns");function an(e){const n=L(e);r(e,n,"description","ALTER TABLE nodes ADD COLUMN description TEXT;"),r(e,n,"cycles","ALTER TABLE nodes ADD COLUMN cycles INTEGER;");const t=m();if(!A(t))return;const E=e.prepare("UPDATE nodes SET description = ?, cycles = ? WHERE node_id = ?");for(const s of C(t)){const T=f(s);if(!A(T))continue;let i;try{i=JSON.parse(U(T,"utf8"))}catch{continue}const a=typeof i.description=="string"?i.description:null,d=typeof i.cycles=="number"?i.cycles:null;E.run(a,d,s)}}o(an,"addNodeLabelColumns");function dn(e){const n=L(e);r(e,n,"outcome_kind","ALTER TABLE nodes ADD COLUMN outcome_kind TEXT;"),r(e,n,"outcome_reason","ALTER TABLE nodes ADD COLUMN outcome_reason TEXT;"),r(e,n,"outcome_at","ALTER TABLE nodes ADD COLUMN outcome_at TEXT;"),r(e,n,"outcome_revision","ALTER TABLE nodes ADD COLUMN outcome_revision INTEGER NOT NULL DEFAULT 0;"),r(e,n,"outcome_detail_json","ALTER TABLE nodes ADD COLUMN outcome_detail_json TEXT;"),r(e,n,"deadline_at","ALTER TABLE nodes ADD COLUMN deadline_at TEXT;"),e.exec(`
|
|
402
402
|
CREATE TABLE IF NOT EXISTS node_outcome_deliveries (
|
|
403
403
|
node_id TEXT PRIMARY KEY,
|
|
404
404
|
state TEXT NOT NULL,
|
|
@@ -431,17 +431,17 @@ UPDATE nodes SET outcome_kind='failure',
|
|
|
431
431
|
outcome_reason=COALESCE(terminal_reason,'crashed'),
|
|
432
432
|
outcome_at=COALESCE(finalized_at, created), outcome_revision=1
|
|
433
433
|
WHERE final_report IS NULL AND status IN ('done','dead','canceled') AND outcome_at IS NULL;
|
|
434
|
-
`)}o(
|
|
434
|
+
`)}o(dn,"addNodeOutcomeAndDeadline");function Nn(e){const n=L(e);r(e,n,"telemetry_tokens_in","ALTER TABLE nodes ADD COLUMN telemetry_tokens_in INTEGER;"),r(e,n,"telemetry_context_tokens","ALTER TABLE nodes ADD COLUMN telemetry_context_tokens INTEGER;"),r(e,n,"telemetry_last_activity","ALTER TABLE nodes ADD COLUMN telemetry_last_activity TEXT;"),r(e,n,"telemetry_updated_at","ALTER TABLE nodes ADD COLUMN telemetry_updated_at TEXT;");const t=e.prepare(`UPDATE nodes
|
|
435
435
|
SET telemetry_tokens_in = ?, telemetry_context_tokens = ?,
|
|
436
436
|
telemetry_last_activity = ?, telemetry_updated_at = ?
|
|
437
|
-
WHERE node_id = ?`);for(const{node_id:
|
|
437
|
+
WHERE node_id = ?`);for(const{node_id:E}of e.prepare("SELECT node_id FROM nodes").all()){const s=w(m(),E,"job","telemetry.json");if(A(s))try{const T=JSON.parse(U(s,"utf8")),i=typeof T.tokens_in=="number"&&Number.isFinite(T.tokens_in)?T.tokens_in:null,a=typeof T.context_tokens=="number"&&Number.isFinite(T.context_tokens)?T.context_tokens:null,d=typeof T.last_activity=="string"?T.last_activity:null,N=ce(s).mtime.toISOString();t.run(i,a,d,N,E)}catch{}}}o(Nn,"addNodeTelemetryColumns");function _n(e){e.exec(`
|
|
438
438
|
CREATE INDEX IF NOT EXISTS deliveries_external_due_order
|
|
439
439
|
ON deliveries(state, next_attempt_at, created_at, delivery_id)
|
|
440
440
|
WHERE destination_kind = 'external_action' AND canceled_at IS NULL;
|
|
441
441
|
DROP INDEX IF EXISTS deliveries_external_due;
|
|
442
442
|
CREATE INDEX IF NOT EXISTS idx_nodes_parent_created ON nodes(parent, created);
|
|
443
443
|
CREATE INDEX IF NOT EXISTS idx_edges_type_created ON edges(type, created);
|
|
444
|
-
`)}o(
|
|
444
|
+
`)}o(_n,"addRecurringLaneIndexes");function cn(e){re(e)}o(cn,"projectLiveNodeState");function Ln(e){r(e,L(e),"scopes_json","ALTER TABLE nodes ADD COLUMN scopes_json TEXT;")}o(Ln,"addNodeScopes");function un(e){const n=L(e);r(e,n,"grantee","ALTER TABLE nodes ADD COLUMN grantee TEXT NOT NULL DEFAULT 'user:local';"),r(e,n,"sub","ALTER TABLE nodes ADD COLUMN sub TEXT;"),r(e,n,"grant_id","ALTER TABLE nodes ADD COLUMN grant_id TEXT;"),r(e,n,"client_id","ALTER TABLE nodes ADD COLUMN client_id TEXT;"),r(e,n,"metadata_json","ALTER TABLE nodes ADD COLUMN metadata_json TEXT;"),r(e,n,"run_id","ALTER TABLE nodes ADD COLUMN run_id TEXT;"),r(e,n,"event_cursor","ALTER TABLE nodes ADD COLUMN event_cursor INTEGER;"),r(e,n,"usage_json","ALTER TABLE nodes ADD COLUMN usage_json TEXT;"),r(e,n,"deleting_at","ALTER TABLE nodes ADD COLUMN deleting_at TEXT;"),e.exec(`
|
|
445
445
|
ALTER TABLE sessions ADD COLUMN event_offset INTEGER;
|
|
446
446
|
CREATE INDEX idx_nodes_run_id ON nodes(run_id);
|
|
447
447
|
-- Child nodes may be pruned while their root run and event history remain.
|
|
@@ -466,10 +466,10 @@ CREATE INDEX IF NOT EXISTS idx_edges_type_created ON edges(type, created);
|
|
|
466
466
|
PRIMARY KEY (grantee, key)
|
|
467
467
|
);
|
|
468
468
|
CREATE INDEX idx_idempotency_keys_created_at ON idempotency_keys(created_at);
|
|
469
|
-
`)}o(un,"addRunFoundation");function
|
|
469
|
+
`)}o(un,"addRunFoundation");function ln(e){e.exec("ALTER TABLE nodes ADD COLUMN last_activity_at TEXT;"),e.exec(`UPDATE nodes SET last_activity_at = (
|
|
470
470
|
SELECT e.ts FROM run_events e WHERE e.run_id = nodes.node_id
|
|
471
471
|
ORDER BY e.sequence_number DESC LIMIT 1
|
|
472
|
-
) WHERE run_id = node_id`)}o(
|
|
472
|
+
) WHERE run_id = node_id`)}o(ln,"addRunLastActivity");function An(e){e.exec(`
|
|
473
473
|
CREATE TABLE grants (
|
|
474
474
|
id TEXT PRIMARY KEY, runtime TEXT NOT NULL, sub TEXT NOT NULL, grantee TEXT NOT NULL,
|
|
475
475
|
rev INTEGER NOT NULL, scopes_json TEXT NOT NULL, resolved_scopes_json TEXT NOT NULL,
|
|
@@ -478,13 +478,13 @@ CREATE INDEX IF NOT EXISTS idx_edges_type_created ON edges(type, created);
|
|
|
478
478
|
);
|
|
479
479
|
CREATE UNIQUE INDEX idx_grants_grantee_sub ON grants(grantee, sub);
|
|
480
480
|
CREATE TABLE runtime_state (key TEXT PRIMARY KEY, value TEXT NOT NULL);
|
|
481
|
-
`)}o(
|
|
481
|
+
`)}o(An,"addGrantMirror");function On(e){e.exec("UPDATE nodes SET grantee = 'app:terminal' WHERE grantee = 'user:local';")}o(On,"migrateTerminalGrantees");function pn(e){const n={llm:"crtr:llm",act:"crtr:act",schedule:"crtr:schedule","memory:read":"crtr:memory:read:user","memory:write":"crtr:memory:rw:user"},t=e.prepare("SELECT node_id, scopes_json FROM nodes WHERE scopes_json IS NOT NULL").all(),E=e.prepare("UPDATE nodes SET scopes_json = ? WHERE node_id = ?");for(const s of t){const T=JSON.parse(s.scopes_json);if(!Array.isArray(T))throw new Error(`invalid launched scopes for node ${s.node_id}`);const i=[];for(const a of T){if(typeof a!="string")continue;const d=n[a]??a;try{ie(d),i.push(d)}catch(N){if(!(N instanceof TypeError))throw N}}E.run(JSON.stringify([...new Set(i)]),s.node_id)}}o(pn,"migrateLaunchedScopes");function Rn(e){e.exec(`CREATE TABLE node_tokens (
|
|
482
482
|
broker_process_id TEXT PRIMARY KEY REFERENCES executions(execution_id) ON DELETE CASCADE,
|
|
483
483
|
node_id TEXT NOT NULL REFERENCES nodes(node_id) ON DELETE CASCADE,
|
|
484
484
|
token_hash TEXT NOT NULL UNIQUE, grantee TEXT NOT NULL, uid INTEGER NOT NULL,
|
|
485
485
|
sub TEXT NOT NULL, grant TEXT, client_id TEXT, scopes_json TEXT,
|
|
486
486
|
issued_at TEXT NOT NULL, revoked_at TEXT
|
|
487
|
-
);`)}o(
|
|
487
|
+
);`)}o(Rn,"addNodeTokens");function k(e,n){return e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(n)!==void 0}o(k,"hasTable");function M(e,n,t){return e.prepare(`PRAGMA table_info(${n})`).all().some(E=>E.name===t)}o(M,"hasColumn");function Q(e){k(e,"memory_reads")||e.exec(`CREATE TABLE memory_reads (
|
|
488
488
|
node_id TEXT NOT NULL REFERENCES nodes(node_id) ON DELETE CASCADE,
|
|
489
489
|
name TEXT NOT NULL,
|
|
490
490
|
scope TEXT NOT NULL,
|
|
@@ -493,12 +493,12 @@ CREATE INDEX IF NOT EXISTS idx_edges_type_created ON edges(type, created);
|
|
|
493
493
|
);
|
|
494
494
|
CREATE INDEX idx_memory_reads_at ON memory_reads(at);
|
|
495
495
|
CREATE INDEX idx_memory_reads_node ON memory_reads(node_id);
|
|
496
|
-
INSERT OR IGNORE INTO canvas_meta(key, value) VALUES ('memory_reads.started_at', strftime('%Y-%m-%dT%H:%M:%fZ','now'));`)}o(Q,"addMemoryReads");function V(e){
|
|
496
|
+
INSERT OR IGNORE INTO canvas_meta(key, value) VALUES ('memory_reads.started_at', strftime('%Y-%m-%dT%H:%M:%fZ','now'));`)}o(Q,"addMemoryReads");function V(e){M(e,"sessions","indexed_entry_id")||e.exec("ALTER TABLE sessions ADD COLUMN indexed_entry_id TEXT; ALTER TABLE sessions ADD COLUMN input_ids_json TEXT NOT NULL DEFAULT '[]';")}o(V,"addConversationIndex");function Z(e){k(e,"app_users")||e.exec(`CREATE TABLE app_users (
|
|
497
497
|
app TEXT PRIMARY KEY, uid INTEGER NOT NULL UNIQUE,
|
|
498
498
|
created TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('active', 'retired'))
|
|
499
|
-
);`)}o(Z,"addAppUsers");function ee(e){
|
|
499
|
+
);`)}o(Z,"addAppUsers");function ee(e){M(e,"crons","grantee")||(e.exec("ALTER TABLE crons ADD COLUMN grantee TEXT NOT NULL DEFAULT 'app:terminal'"),e.exec(`UPDATE crons SET grantee = COALESCE(
|
|
500
500
|
(SELECT COALESCE(nodes.grantee, 'app:terminal') FROM nodes WHERE nodes.node_id = crons.anchor_node),
|
|
501
|
-
'app:terminal') WHERE anchor_node IS NOT NULL`))}o(ee,"addCronGrantee");function
|
|
501
|
+
'app:terminal') WHERE anchor_node IS NOT NULL`))}o(ee,"addCronGrantee");function In(e){Q(e),V(e),Z(e),ee(e)}o(In,"convergeSharedVersions");function Xn(e){(e.prepare("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = 'app_users'").get()?.sql??"").includes("'removed'")||e.exec(`CREATE TABLE app_users_new (
|
|
502
502
|
uid INTEGER PRIMARY KEY, app TEXT NOT NULL,
|
|
503
503
|
created TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('active', 'removed')),
|
|
504
504
|
removed_at TEXT
|
|
@@ -508,7 +508,181 @@ CREATE INDEX IF NOT EXISTS idx_edges_type_created ON edges(type, created);
|
|
|
508
508
|
CASE status WHEN 'active' THEN NULL ELSE created END FROM app_users;
|
|
509
509
|
DROP TABLE app_users;
|
|
510
510
|
ALTER TABLE app_users_new RENAME TO app_users;
|
|
511
|
-
CREATE UNIQUE INDEX idx_app_users_active_app ON app_users(app) WHERE status = 'active';`)}o(Xn,"appUsersRemoved");function
|
|
511
|
+
CREATE UNIQUE INDEX idx_app_users_active_app ON app_users(app) WHERE status = 'active';`)}o(Xn,"appUsersRemoved");function ne(e){k(e,"objects")||(e.exec(`
|
|
512
|
+
CREATE TABLE objects (
|
|
513
|
+
rowid INTEGER PRIMARY KEY,
|
|
514
|
+
id TEXT NOT NULL UNIQUE,
|
|
515
|
+
type TEXT NOT NULL CHECK (type IN ('document','node','job','person','app','repo','profile')),
|
|
516
|
+
kind TEXT,
|
|
517
|
+
owner INTEGER REFERENCES objects(rowid),
|
|
518
|
+
privacy TEXT NOT NULL DEFAULT 'public' CHECK (privacy IN ('public','friends','private')),
|
|
519
|
+
name TEXT NOT NULL,
|
|
520
|
+
preview TEXT NOT NULL DEFAULT '',
|
|
521
|
+
created_at TEXT NOT NULL,
|
|
522
|
+
deleted_at TEXT
|
|
523
|
+
);
|
|
524
|
+
CREATE UNIQUE INDEX objects_doc_name ON objects(owner, name) WHERE type = 'document' AND deleted_at IS NULL;
|
|
525
|
+
CREATE UNIQUE INDEX objects_handle ON objects(type, name) WHERE type IN ('person','app','repo','profile');
|
|
526
|
+
CREATE INDEX objects_owner_type ON objects(owner, type, kind);
|
|
527
|
+
CREATE INDEX objects_type_kind ON objects(type, kind);
|
|
528
|
+
|
|
529
|
+
CREATE TABLE documents (
|
|
530
|
+
object INTEGER PRIMARY KEY REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
531
|
+
summary TEXT,
|
|
532
|
+
heads_key TEXT NOT NULL,
|
|
533
|
+
revision INTEGER NOT NULL,
|
|
534
|
+
why_it_exists TEXT,
|
|
535
|
+
unlisted INTEGER NOT NULL DEFAULT 0,
|
|
536
|
+
lint_ignore_json TEXT,
|
|
537
|
+
extensions_json TEXT,
|
|
538
|
+
source_path TEXT
|
|
539
|
+
);
|
|
540
|
+
|
|
541
|
+
CREATE TABLE revisions (
|
|
542
|
+
rowid INTEGER PRIMARY KEY,
|
|
543
|
+
document INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
544
|
+
rev_id TEXT NOT NULL UNIQUE,
|
|
545
|
+
number INTEGER NOT NULL,
|
|
546
|
+
body_hash TEXT NOT NULL,
|
|
547
|
+
author INTEGER REFERENCES objects(rowid),
|
|
548
|
+
rationale TEXT,
|
|
549
|
+
verbatim INTEGER NOT NULL DEFAULT 0,
|
|
550
|
+
created_at TEXT NOT NULL
|
|
551
|
+
);
|
|
552
|
+
CREATE TABLE revision_parents (
|
|
553
|
+
child INTEGER NOT NULL REFERENCES revisions(rowid) ON DELETE CASCADE,
|
|
554
|
+
parent INTEGER NOT NULL REFERENCES revisions(rowid) ON DELETE CASCADE,
|
|
555
|
+
PRIMARY KEY (child, parent)
|
|
556
|
+
) WITHOUT ROWID;
|
|
557
|
+
CREATE INDEX revisions_doc ON revisions(document, number);
|
|
558
|
+
|
|
559
|
+
CREATE TABLE jobs (
|
|
560
|
+
object INTEGER PRIMARY KEY REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
561
|
+
command TEXT NOT NULL,
|
|
562
|
+
status TEXT NOT NULL CHECK (status IN ('running','exited','killed')),
|
|
563
|
+
exit_code INTEGER,
|
|
564
|
+
job_dir TEXT NOT NULL,
|
|
565
|
+
log_path TEXT NOT NULL
|
|
566
|
+
);
|
|
567
|
+
|
|
568
|
+
CREATE TABLE identities (
|
|
569
|
+
object INTEGER PRIMARY KEY REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
570
|
+
scheme TEXT NOT NULL,
|
|
571
|
+
external_id TEXT NOT NULL,
|
|
572
|
+
UNIQUE (scheme, external_id)
|
|
573
|
+
);
|
|
574
|
+
|
|
575
|
+
CREATE TABLE watches (
|
|
576
|
+
rowid INTEGER PRIMARY KEY,
|
|
577
|
+
watcher INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
578
|
+
object INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
579
|
+
in_tree INTEGER NOT NULL DEFAULT 0,
|
|
580
|
+
read_heads_key TEXT,
|
|
581
|
+
created_at TEXT NOT NULL,
|
|
582
|
+
UNIQUE (watcher, object)
|
|
583
|
+
);
|
|
584
|
+
CREATE INDEX watches_object ON watches(object, watcher);
|
|
585
|
+
CREATE INDEX watches_tree_down ON watches(watcher, object) WHERE in_tree = 1;
|
|
586
|
+
CREATE INDEX watches_tree_up ON watches(object, watcher) WHERE in_tree = 1;
|
|
587
|
+
|
|
588
|
+
CREATE TABLE watch_subscriptions (
|
|
589
|
+
rowid INTEGER PRIMARY KEY,
|
|
590
|
+
watch INTEGER NOT NULL REFERENCES watches(rowid) ON DELETE CASCADE,
|
|
591
|
+
pattern TEXT NOT NULL,
|
|
592
|
+
filter_json TEXT,
|
|
593
|
+
config_json TEXT,
|
|
594
|
+
started_by TEXT NOT NULL CHECK (started_by IN ('spawn','job-start','ask','read','write','act','message','deliver','fork')),
|
|
595
|
+
ends_on TEXT,
|
|
596
|
+
created_at TEXT NOT NULL
|
|
597
|
+
);
|
|
598
|
+
CREATE INDEX watch_subscriptions_watch ON watch_subscriptions(watch);
|
|
599
|
+
|
|
600
|
+
CREATE TABLE context_sessions (
|
|
601
|
+
node INTEGER PRIMARY KEY REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
602
|
+
preference_snapshot TEXT,
|
|
603
|
+
listed_json TEXT NOT NULL DEFAULT '{}'
|
|
604
|
+
);
|
|
605
|
+
|
|
606
|
+
CREATE TABLE exposures (
|
|
607
|
+
node INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
608
|
+
object INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
609
|
+
channel TEXT NOT NULL CHECK (channel IN ('system','transcript')),
|
|
610
|
+
level TEXT NOT NULL CHECK (level IN ('name','preview','content')),
|
|
611
|
+
heads_key TEXT,
|
|
612
|
+
content_hash TEXT,
|
|
613
|
+
PRIMARY KEY (node, object, channel)
|
|
614
|
+
) WITHOUT ROWID;
|
|
615
|
+
|
|
616
|
+
CREATE TABLE rules (
|
|
617
|
+
rowid INTEGER PRIMARY KEY,
|
|
618
|
+
object INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
619
|
+
owner INTEGER,
|
|
620
|
+
position INTEGER NOT NULL,
|
|
621
|
+
on_event TEXT NOT NULL CHECK (on_event IN ('boot','workspace-open','file-read','document-read','command','pre-command','slash-command')),
|
|
622
|
+
match_json TEXT, match_frontmatter_json TEXT, if_json TEXT,
|
|
623
|
+
deliver TEXT NOT NULL CHECK (deliver IN ('name','preview','content'))
|
|
624
|
+
);
|
|
625
|
+
CREATE INDEX rules_on_owner ON rules(on_event, owner);
|
|
626
|
+
CREATE INDEX rules_object ON rules(object);
|
|
627
|
+
|
|
628
|
+
ALTER TABLE nodes ADD COLUMN listen_default_json TEXT;
|
|
629
|
+
ALTER TABLE messages ADD COLUMN event TEXT;
|
|
630
|
+
ALTER TABLE messages ADD COLUMN object_id TEXT;
|
|
631
|
+
ALTER TABLE messages ADD COLUMN level INTEGER;
|
|
632
|
+
ALTER TABLE messages ADD COLUMN actor_id TEXT;
|
|
633
|
+
`),te(e),e.exec("ANALYZE"))}o(ne,"canvasObjectsSchema");function te(e){const n=new Date().toISOString(),t=e.prepare("INSERT INTO objects (id, type, kind, owner, privacy, name, preview, created_at) VALUES (?, ?, NULL, NULL, 'public', ?, '', ?) RETURNING rowid"),E=e.prepare("INSERT INTO identities (object, scheme, external_id) VALUES (?, ?, ?)"),s=e.prepare(`SELECT DISTINCT n.grantee FROM nodes n
|
|
634
|
+
WHERE NOT EXISTS (SELECT 1 FROM identities i WHERE i.external_id = n.grantee AND i.scheme IN ('app', 'local-user'))`).all();for(const{grantee:T}of s){let i;if(T==="user:local")i={type:"person",scheme:"local-user",handle:"user"};else if(/^app:[a-z0-9][a-z0-9._-]*$/.test(T))i={type:"app",scheme:"app",handle:T.slice(4)};else throw new Error(`canvas objects migration: node grantee ${JSON.stringify(T)} is neither app:<name> nor user:local`);const{rowid:a}=t.get(`${Date.now().toString(36)}-${Te(4).toString("hex")}`,i.type,i.handle,n);E.run(a,i.scheme,T)}e.exec(`INSERT INTO objects (id, type, kind, owner, privacy, name, preview, created_at)
|
|
635
|
+
SELECT n.node_id, 'node', n.kind, i.object, 'public', n.name, '', n.created
|
|
636
|
+
FROM nodes n JOIN identities i ON i.external_id = n.grantee AND i.scheme IN ('app', 'local-user')
|
|
637
|
+
WHERE NOT EXISTS (SELECT 1 FROM objects o WHERE o.id = n.node_id)`)}o(te,"copyNodesIntoObjects");function mn(e){if(ne(e),!M(e,"nodes","name"))return;te(e);const n=e.prepare("SELECT COUNT(*) AS n FROM nodes WHERE node_id NOT IN (SELECT id FROM objects)").get();if(n.n>0)throw new Error(`canvasObjectsCut: ${n.n} node(s) have no objects row`);e.exec(`
|
|
638
|
+
ALTER TABLE edges RENAME TO legacy_edges;
|
|
639
|
+
CREATE TABLE edges (
|
|
640
|
+
type TEXT NOT NULL CHECK (type IN ('acted-on','links-to')),
|
|
641
|
+
src INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
642
|
+
dst INTEGER NOT NULL REFERENCES objects(rowid) ON DELETE CASCADE,
|
|
643
|
+
written_as TEXT,
|
|
644
|
+
created_at TEXT NOT NULL,
|
|
645
|
+
PRIMARY KEY (type, src, dst)
|
|
646
|
+
) WITHOUT ROWID;
|
|
647
|
+
CREATE INDEX edges_dst ON edges(type, dst, src);
|
|
648
|
+
DROP VIEW node_rows;
|
|
649
|
+
ALTER TABLE nodes DROP COLUMN name;
|
|
650
|
+
ALTER TABLE nodes DROP COLUMN kind;
|
|
651
|
+
ALTER TABLE nodes DROP COLUMN grantee;
|
|
652
|
+
`),e.exec(`
|
|
653
|
+
CREATE VIEW node_rows AS
|
|
654
|
+
SELECT n.*,
|
|
655
|
+
o.name,
|
|
656
|
+
o.kind,
|
|
657
|
+
oi.external_id AS grantee,
|
|
658
|
+
CASE WHEN e.state = 'running' THEN e.pid ELSE NULL END AS pi_pid,
|
|
659
|
+
CASE WHEN e.state = 'running' THEN e.process_identity ELSE NULL END AS pi_pid_identity,
|
|
660
|
+
e.turn_open_at,
|
|
661
|
+
e.turn_closed_at,
|
|
662
|
+
s.session_id AS pi_session_id,
|
|
663
|
+
s.transcript_path AS pi_session_file,
|
|
664
|
+
f.fault_id,
|
|
665
|
+
f.link AS fault_link,
|
|
666
|
+
f.op AS fault_op,
|
|
667
|
+
f.kind AS fault_kind,
|
|
668
|
+
f.message AS fault_message,
|
|
669
|
+
f.since AS fault_since,
|
|
670
|
+
f.operation_id AS fault_operation_id,
|
|
671
|
+
f.anchor_entry_id AS fault_anchor_entry_id,
|
|
672
|
+
f.retry_disposition AS fault_retry_disposition,
|
|
673
|
+
f.retry_by AS fault_retry_by,
|
|
674
|
+
f.retry_attempt AS fault_retry_attempt,
|
|
675
|
+
f.retry_max AS fault_retry_max,
|
|
676
|
+
f.retry_next_at AS fault_retry_next_at,
|
|
677
|
+
f.provider_error_json AS fault_provider_error_json
|
|
678
|
+
FROM nodes n
|
|
679
|
+
JOIN objects o ON o.id = n.node_id
|
|
680
|
+
LEFT JOIN identities oi ON oi.object = o.owner
|
|
681
|
+
LEFT JOIN executions e ON e.node_id = n.node_id AND e.state != 'exited'
|
|
682
|
+
LEFT JOIN sessions s ON s.node_id = n.node_id AND s.unbound_at IS NULL
|
|
683
|
+
LEFT JOIN node_faults f ON f.node_id = n.node_id AND f.active = 1;
|
|
684
|
+
ANALYZE;
|
|
685
|
+
`)}o(mn,"canvasObjectsCut");function fn(e){e.exec(`CREATE TABLE IF NOT EXISTS uploads (
|
|
512
686
|
upload_id TEXT PRIMARY KEY, grantee TEXT NOT NULL, name TEXT NOT NULL, media_type TEXT NOT NULL,
|
|
513
687
|
size INTEGER NOT NULL, created_at TEXT NOT NULL, delete_pending_since TEXT
|
|
514
688
|
);
|
|
@@ -524,4 +698,4 @@ CREATE INDEX IF NOT EXISTS idx_edges_type_created ON edges(type, created);
|
|
|
524
698
|
url TEXT NOT NULL, created_by TEXT NOT NULL, created_at TEXT NOT NULL, expires_at TEXT,
|
|
525
699
|
status TEXT NOT NULL CHECK (status IN ('on', 'off')), object_deleted_at TEXT
|
|
526
700
|
);
|
|
527
|
-
CREATE INDEX IF NOT EXISTS idx_shares_created_by ON shares(created_by);`)}o(
|
|
701
|
+
CREATE INDEX IF NOT EXISTS idx_shares_created_by ON shares(created_by);`)}o(fn,"addFileTransfer");const D=[Re,Ie,Xe,me,fe,Ue,Ce,De,Se,ge,he,we,ye,K,xe,K,ve,Fe,ke,Me,Be,We,$e,qe,ze,Je,Qe,Ve,Ze,en,nn,tn,on,En,rn,Tn,sn,an,dn,e=>{se(e),ae(e),de(e),Ne(e)},_n,cn,Nn,Ln,un,ln,An,Rn,On,pn,Q,V,Z,ee,In,Xn,ne,mn,le,fn],Un=new Set([3]);function B(e){return e.prepare("PRAGMA user_version").get().user_version}o(B,"currentUserVersion");function oe(e,n){D[n](e),e.exec(`PRAGMA user_version = ${n+1}`)}o(oe,"applyMigration");function Hn(e){const n=B(e);if(n>D.length)throw new Error(`unsupported canvas schema version ${n} (latest supported ${D.length})`);if(n===D.length)return;const t=e.prepare("PRAGMA busy_timeout").get().timeout;e.exec("PRAGMA busy_timeout = 60000;");try{Cn(e)}finally{e.exec(`PRAGMA busy_timeout = ${t};`)}}o(Hn,"migrate");function Cn(e){for(;;){const n=B(e);if(n>=D.length)return;if(e.isTransaction||Un.has(n)){oe(e,n);continue}e.exec("BEGIN IMMEDIATE");try{B(e)===n&&oe(e,n),e.exec("COMMIT")}catch(t){try{e.exec("ROLLBACK")}catch{}throw t}}}o(Cn,"runPendingMigrations");export{D as MIGRATIONS,Hn as migrate};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var s=Object.defineProperty;var t=(r,e)=>s(r,"name",{value:e,configurable:!0});import{join as p}from"node:path";import{envGrantee as a,envNodeId as u}from"../../shared/env.js";import{openDb as f}from"./db.js";import{nodeAgentDir as c,ensureNodeDirs as m,interpolateNodePaths as D}from"./paths.js";function o(r){const e=a();if(u()===r&&e)return e;const n=f().prepare("SELECT grantee FROM
|
|
1
|
+
var s=Object.defineProperty;var t=(r,e)=>s(r,"name",{value:e,configurable:!0});import{join as p}from"node:path";import{envGrantee as a,envNodeId as u}from"../../shared/env.js";import{openDb as f}from"./db.js";import{nodeAgentDir as c,ensureNodeDirs as m,interpolateNodePaths as D}from"./paths.js";function o(r){const e=a();if(u()===r&&e)return e;const n=f().prepare("SELECT grantee FROM node_rows WHERE node_id = ?").get(r);if(!n?.grantee)throw new Error(`node ${r} has no app assignment`);return n.grantee}t(o,"appForNode");function i(r,e){return c(r,e??o(r))}t(i,"nodeAgentDir");function w(r,e){return p(i(r,e),"context")}t(w,"contextDir");function E(r,e){return p(i(r,e),"reports")}t(E,"reportsDir");function F(r,e){return D(r,e,o(e))}t(F,"interpolateNodePaths");function d(r,e){m(r,e??o(r))}t(d,"ensureNodeDirs");export{o as appForNode,w as contextDir,d as ensureNodeDirs,F as interpolateNodePaths,i as nodeAgentDir,E as reportsDir};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var g=Object.defineProperty;var t=(e,n)=>g(e,"name",{value:n,configurable:!0});import{createHash as k,randomBytes as m}from"node:crypto";import{openDb as u}from"./db.js";import{terminalGrant as N}from"../grants/mirror.js";import{readConfig as c}from"../config.js";import{uidForApp as T}from"../spaces/users.js";const i=new Map,l=t(e=>k("sha256").update(e).digest("hex"),"hash");function x(e,n,o,s){const r=e.prepare("SELECT grantee, sub, grant_id, client_id, scopes_json, run_id FROM
|
|
1
|
+
var g=Object.defineProperty;var t=(e,n)=>g(e,"name",{value:n,configurable:!0});import{createHash as k,randomBytes as m}from"node:crypto";import{openDb as u}from"./db.js";import{terminalGrant as N}from"../grants/mirror.js";import{readConfig as c}from"../config.js";import{uidForApp as T}from"../spaces/users.js";const i=new Map,l=t(e=>k("sha256").update(e).digest("hex"),"hash");function x(e,n,o,s){const r=e.prepare("SELECT grantee, sub, grant_id, client_id, scopes_json, run_id FROM node_rows WHERE node_id = ?").get(o);if(!r)throw new Error(`cannot mint node token: missing node ${o}`);const a=r.run_id&&r.run_id!==o?e.prepare("SELECT sub, grant_id, client_id FROM nodes WHERE node_id = ?").get(r.run_id):void 0,d=r.grantee==="app:terminal"?N():null,p=d?.sub??a?.sub??r.sub,E=d?.id??a?.grant_id??r.grant_id??null;if(r.grantee==="app:terminal"&&c("user").runtime?.issuer&&!d)throw new Error("cannot mint node token: terminal grant is not active");if(!p&&r.grantee!=="user:local"&&!(r.grantee==="app:terminal"&&!c("user").runtime?.issuer))throw new Error(`cannot mint node token: no subject for ${r.grantee}`);const _=m(32).toString("base64url");e.prepare("INSERT INTO node_tokens (broker_process_id, node_id, token_hash, grantee, uid, sub, grant, client_id, scopes_json, issued_at, revoked_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL)").run(n,o,l(_),r.grantee==="user:local"?"app:terminal":r.grantee,T(r.grantee==="user:local"?"app:terminal":r.grantee),p??"user:local",E,a?.client_id??r.client_id,r.scopes_json,s),i.set(n,_)}t(x,"mintNodeToken");function A(e){const n=i.get(e);if(i.delete(e),!n)throw new Error(`missing node token for execution ${e}`);return n}t(A,"takeNodeToken");function f(e){i.delete(e)}t(f,"forgetNodeToken");function D(e){if(!/^[A-Za-z0-9_-]{43}$/.test(e))return null;const n=u().prepare(`SELECT t.node_id, t.grantee, t.uid, t.sub, t.grant, t.client_id, t.scopes_json, n.run_id
|
|
2
2
|
FROM node_tokens t JOIN executions e ON e.execution_id = t.broker_process_id
|
|
3
3
|
JOIN nodes n ON n.node_id = t.node_id
|
|
4
4
|
WHERE t.token_hash = ? AND t.revoked_at IS NULL AND e.state != 'exited'`).get(l(e));return n?{app:n.grantee,node:n.node_id,run:n.run_id,uid:n.uid,sub:n.sub,grant:n.grant,client_id:n.client_id,scopes:n.scopes_json===null?null:JSON.parse(n.scopes_json)}:null}t(D,"resolveNodeToken");function v(e){f(e),S(u(),"broker_process_id",e,new Date().toISOString())}t(v,"revokeExitedNodeToken");function U(e){u().prepare(`UPDATE node_tokens SET revoked_at = ? WHERE revoked_at IS NULL
|
|
@@ -47,7 +47,6 @@ export declare function contextDir(nodeId: string, grantee?: string): string;
|
|
|
47
47
|
export declare function interpolateNodePaths(text: string, nodeId: string, grantee?: string): string;
|
|
48
48
|
export declare function jobDir(nodeId: string): string;
|
|
49
49
|
export declare function nodeRunJobDir(nodeId: string): string;
|
|
50
|
-
export declare function reportsDir(nodeId: string, grantee?: string): string;
|
|
51
50
|
/** Overflow store for inbox entries whose inline body exceeds the digest's
|
|
52
51
|
* bounded preview (a direct `node message send` or a close/cancel doctrine
|
|
53
52
|
* wake) — the full body spills here, mirroring how a
|
|
@@ -61,9 +60,6 @@ export declare function situationalContextPath(nodeId: string): string;
|
|
|
61
60
|
export declare function passivePath(nodeId: string): string;
|
|
62
61
|
export declare function transcriptPath(nodeId: string): string;
|
|
63
62
|
export declare function sessionPtrPath(nodeId: string): string;
|
|
64
|
-
/** Frozen preference snapshot and rank-aware exposure state for the node's
|
|
65
|
-
* currently loaded LLM context. The filename remains stable across schema versions. */
|
|
66
|
-
export declare function injectedDocsPath(nodeId: string): string;
|
|
67
63
|
/** Create the full directory skeleton for a node. Idempotent. The agent and
|
|
68
64
|
* run folders are app-writable, so their subfolders are made beneath them. */
|
|
69
65
|
export declare function ensureNodeDirs(nodeId: string, grantee: string): void;
|