@north-light/crouter 0.3.318 → 0.3.319
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/dist/api/client.js +2 -912
- package/dist/api/dto/attach.js +0 -13
- package/dist/api/dto/bash-jobs.js +1 -9
- package/dist/api/dto/broker-ops.js +0 -6
- package/dist/api/dto/broker.js +0 -20
- package/dist/api/dto/canvas.js +0 -2
- package/dist/api/dto/chat-inventory.js +0 -11
- package/dist/api/dto/common.js +1 -15
- package/dist/api/dto/config.js +0 -3
- package/dist/api/dto/crons.js +1 -10
- package/dist/api/dto/files.js +0 -7
- package/dist/api/dto/focus.js +0 -10
- package/dist/api/dto/health.js +0 -2
- package/dist/api/dto/human-requests.js +0 -4
- package/dist/api/dto/human.js +0 -4
- package/dist/api/dto/inbox.js +0 -4
- package/dist/api/dto/lifecycle.js +0 -3
- package/dist/api/dto/mail.js +0 -1
- package/dist/api/dto/memory.js +0 -6
- package/dist/api/dto/messages.js +0 -2
- package/dist/api/dto/model-config.js +0 -1
- package/dist/api/dto/modelauth.js +0 -4
- package/dist/api/dto/node-outcomes.js +0 -2
- package/dist/api/dto/nodes.js +0 -3
- package/dist/api/dto/profiles.js +1 -4
- package/dist/api/dto/recovery.js +0 -1
- package/dist/api/dto/reports.js +0 -2
- package/dist/api/dto/review-comments.js +0 -5
- package/dist/api/dto/reviews.js +0 -5
- package/dist/api/dto/subscriptions.js +0 -2
- package/dist/api/dto/worktree.js +0 -6
- package/dist/api/errors.js +1 -40
- package/dist/api/index.js +1 -33
- package/dist/api/plugin-manifest-schema.js +0 -23
- package/dist/api/routes.js +1 -147
- package/dist/build-root.js +1 -198
- package/dist/cli.js +3 -99
- package/dist/clients/attach/ansi-cells.js +1 -137
- package/dist/clients/attach/chrome/bash-jobs.js +1 -31
- package/dist/clients/attach/chrome/canvas-panels.js +1 -194
- package/dist/clients/attach/chrome/completion-bell.js +1 -89
- package/dist/clients/attach/chrome/cron-wait.js +1 -34
- package/dist/clients/attach/chrome/git-info.js +2 -44
- package/dist/clients/attach/chrome/header.js +1 -30
- package/dist/clients/attach/chrome/inbox-strip.js +1 -199
- package/dist/clients/attach/chrome/recap.js +1 -19
- package/dist/clients/attach/chrome/review-wait.js +1 -22
- package/dist/clients/attach/chrome/roster.js +4 -275
- package/dist/clients/attach/chrome/status-line.js +1 -117
- package/dist/clients/attach/chrome/ticket-panel.js +1 -280
- package/dist/clients/attach/chrome/widgets.js +1 -51
- package/dist/clients/attach/command.js +1 -107
- package/dist/clients/attach/config.js +1 -274
- package/dist/clients/attach/input/capabilities.js +1 -104
- package/dist/clients/attach/input/clipboard-image.js +3 -220
- package/dist/clients/attach/input/completion-frecency.js +1 -141
- package/dist/clients/attach/input/controller.js +7 -377
- package/dist/clients/attach/input/overlay-owner.js +1 -199
- package/dist/clients/attach/input/ref-autocomplete.js +2 -176
- package/dist/clients/attach/input/titled-editor.js +4 -859
- package/dist/clients/attach/overlays/auth.js +2 -271
- package/dist/clients/attach/overlays/dialogs.js +2 -102
- package/dist/clients/attach/overlays/file-review.js +2 -128
- package/dist/clients/attach/overlays/graph.js +1 -661
- package/dist/clients/attach/overlays/help.js +1 -211
- package/dist/clients/attach/overlays/mcp.js +1 -302
- package/dist/clients/attach/overlays/pickers.js +1 -163
- package/dist/clients/attach/render/activity-slot.js +1 -13
- package/dist/clients/attach/render/assistant-message.js +1 -56
- package/dist/clients/attach/render/card-presentation.js +5 -218
- package/dist/clients/attach/render/chat-view.js +5 -1708
- package/dist/clients/attach/render/condensed-history.js +1 -60
- package/dist/clients/attach/render/context-message.js +1 -63
- package/dist/clients/attach/render/crtr-output.js +17 -905
- package/dist/clients/attach/render/diagram.js +7 -111
- package/dist/clients/attach/render/edit-diff.js +5 -304
- package/dist/clients/attach/render/glyph-codepoints.js +1 -42
- package/dist/clients/attach/render/group-activity.js +2 -263
- package/dist/clients/attach/render/group-recap.js +1 -152
- package/dist/clients/attach/render/markdown-source.js +5 -266
- package/dist/clients/attach/render/measured-container.js +1 -322
- package/dist/clients/attach/render/page-block.js +1 -183
- package/dist/clients/attach/render/scroll-animation.js +1 -80
- package/dist/clients/attach/render/tool-calls.js +3 -361
- package/dist/clients/attach/render/transcript-copy.js +2 -81
- package/dist/clients/attach/render/transcript-search.js +1 -152
- package/dist/clients/attach/render/viewport.js +1 -184
- package/dist/clients/attach/session/banner.js +1 -29
- package/dist/clients/attach/session/bindings.js +1 -71
- package/dist/clients/attach/session/chrome-refresh.js +1 -94
- package/dist/clients/attach/session/connection.js +1 -186
- package/dist/clients/attach/session/context.js +0 -16
- package/dist/clients/attach/session/editor-frame.js +1 -142
- package/dist/clients/attach/session/editor-inventory.js +6 -160
- package/dist/clients/attach/session/file-links.js +1 -68
- package/dist/clients/attach/session/focus-events.js +1 -12
- package/dist/clients/attach/session/frame.js +1 -214
- package/dist/clients/attach/session/frames.js +1 -188
- package/dist/clients/attach/session/identity.js +1 -26
- package/dist/clients/attach/session/input-wiring.js +1 -140
- package/dist/clients/attach/session/invariant.js +1 -15
- package/dist/clients/attach/session/keys.js +1 -77
- package/dist/clients/attach/session/layout.js +1 -59
- package/dist/clients/attach/session/mouse.js +1 -78
- package/dist/clients/attach/session/pane-focus.js +1 -42
- package/dist/clients/attach/session/pane-tag.js +1 -112
- package/dist/clients/attach/session/pi-assets.js +1 -24
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
- package/dist/clients/attach/session/profile-files.js +1 -228
- package/dist/clients/attach/session/reconnect.js +1 -175
- package/dist/clients/attach/session/selection.js +3 -108
- package/dist/clients/attach/session/state-sync.js +1 -67
- package/dist/clients/attach/session/surface-frame.js +1 -73
- package/dist/clients/attach/session/surface-host.js +1 -255
- package/dist/clients/attach/session/teardown.js +5 -94
- package/dist/clients/attach/session/transcript-search.js +3 -151
- package/dist/clients/attach/session/whip-achievements.js +2 -145
- package/dist/clients/attach/session/whip.js +1 -362
- package/dist/clients/attach/slash/dispatch.js +1 -706
- package/dist/clients/attach/slash/prompt-preview.js +1 -121
- package/dist/clients/attach/viewer.js +441 -441
- package/dist/clients/conversation/projection.js +1 -324
- package/dist/clients/conversation/submit.js +1 -51
- package/dist/clients/inbox/controller.js +1 -701
- package/dist/clients/inbox/dto-adapt.js +1 -93
- package/dist/clients/inbox/layout.js +1 -9
- package/dist/clients/inbox/page-adapter.js +1 -55
- package/dist/clients/inbox/resolve.js +1 -35
- package/dist/clients/inbox/review/anchors.js +1 -89
- package/dist/clients/inbox/review/comments-client.js +1 -98
- package/dist/clients/inbox/review/companion-pane.js +1 -82
- package/dist/clients/inbox/review/document-surface.js +2 -1188
- package/dist/clients/inbox/review/frame.js +1 -216
- package/dist/clients/inbox/review/keys.js +1 -123
- package/dist/clients/inbox/review/launch.js +1 -151
- package/dist/clients/inbox/review/live-source.js +1 -160
- package/dist/clients/inbox/review/nvim.js +1 -44
- package/dist/clients/inbox/review/remap.js +1 -157
- package/dist/clients/inbox/review/review-client.js +1 -123
- package/dist/clients/inbox/review/roundtrip.js +3 -36
- package/dist/clients/inbox/review/state.js +4 -315
- package/dist/clients/inbox/review-adapter.js +1 -43
- package/dist/clients/inbox/surface.js +1 -152
- package/dist/clients/inbox/tui/ansi.js +3 -321
- package/dist/clients/inbox/tui/input.js +5 -392
- package/dist/clients/inbox/tui/keys.js +1 -104
- package/dist/clients/inbox/tui/page-body.js +1 -66
- package/dist/clients/inbox/tui/panel.js +1 -84
- package/dist/clients/inbox/tui/render.js +2 -368
- package/dist/clients/inbox/tui/slots.js +3 -134
- package/dist/clients/inbox/tui/types.js +0 -1
- package/dist/clients/inbox/tui.js +1 -86
- package/dist/clients/surfaces/host.js +0 -1
- package/dist/commands/api-client.js +4 -290
- package/dist/commands/attention.js +1 -215
- package/dist/commands/canvas-browse.js +1 -70
- package/dist/commands/canvas-config.js +2 -192
- package/dist/commands/canvas-history/grep.js +7 -85
- package/dist/commands/canvas-history/read.js +3 -50
- package/dist/commands/canvas-history/search.js +10 -99
- package/dist/commands/canvas-history/shared.js +1 -139
- package/dist/commands/canvas-history/stats.js +6 -68
- package/dist/commands/canvas-history.js +1 -32
- package/dist/commands/canvas-issue.js +14 -149
- package/dist/commands/canvas-prune.js +1 -108
- package/dist/commands/canvas-roster.js +1 -69
- package/dist/commands/canvas-snapshot.js +1 -34
- package/dist/commands/canvas-use.js +1 -61
- package/dist/commands/canvas.js +1 -49
- package/dist/commands/chord.js +1 -241
- package/dist/commands/cron.js +11 -534
- package/dist/commands/dashboard.js +1 -85
- package/dist/commands/human/components.js +3 -77
- package/dist/commands/human/feedback.js +1 -112
- package/dist/commands/human/prompts.js +1 -331
- package/dist/commands/human/queue.js +1 -191
- package/dist/commands/human/request.js +1 -266
- package/dist/commands/human/review.js +1 -288
- package/dist/commands/human/shared.js +1 -67
- package/dist/commands/human.js +4 -60
- package/dist/commands/memory/delete.js +1 -100
- package/dist/commands/memory/edit.js +21 -219
- package/dist/commands/memory/find.js +2 -244
- package/dist/commands/memory/history.js +5 -199
- package/dist/commands/memory/lint.js +1 -107
- package/dist/commands/memory/list.js +1 -142
- package/dist/commands/memory/move.js +1 -223
- package/dist/commands/memory/origin.js +1 -130
- package/dist/commands/memory/read.js +6 -232
- package/dist/commands/memory/shared.js +12 -802
- package/dist/commands/memory/write.js +13 -235
- package/dist/commands/memory.js +1 -30
- package/dist/commands/node/bash.js +5 -245
- package/dist/commands/node/create.js +3 -332
- package/dist/commands/node/inspect.js +12 -300
- package/dist/commands/node/lifecycle.js +2 -453
- package/dist/commands/node/message.js +1 -161
- package/dist/commands/node/outcome.js +4 -134
- package/dist/commands/node/pyramid.js +2 -79
- package/dist/commands/node/subscription.js +1 -78
- package/dist/commands/node/wait.js +7 -163
- package/dist/commands/node-context.js +2 -159
- package/dist/commands/node-inspect-artifacts.js +8 -109
- package/dist/commands/node-lifecycle-revive.js +1 -217
- package/dist/commands/node-snapshot.js +1 -37
- package/dist/commands/node-transcript.js +1 -62
- package/dist/commands/node-worktree.js +1 -138
- package/dist/commands/node.js +1 -29
- package/dist/commands/pkg/browse/actions.js +1 -198
- package/dist/commands/pkg/browse/catalog.js +1 -466
- package/dist/commands/pkg/browse/command-view.js +1 -191
- package/dist/commands/pkg/browse/detail-panel.js +1 -402
- package/dist/commands/pkg/browse/doc-view.js +1 -89
- package/dist/commands/pkg/browse/list-panel.js +2 -168
- package/dist/commands/pkg/browse/model.js +1 -36
- package/dist/commands/pkg/browse/shell.js +1 -640
- package/dist/commands/pkg/browse.js +1 -27
- package/dist/commands/pkg/market-inspect.js +1 -141
- package/dist/commands/pkg/market-manage.js +1 -327
- package/dist/commands/pkg/market.js +1 -14
- package/dist/commands/pkg/plugin-inspect.js +1 -168
- package/dist/commands/pkg/plugin-manage.js +17 -1109
- package/dist/commands/pkg/plugin.js +1 -14
- package/dist/commands/pkg/shared.js +1 -62
- package/dist/commands/pkg.js +1 -21
- package/dist/commands/profile/default.js +1 -139
- package/dist/commands/profile/delete.js +1 -66
- package/dist/commands/profile/env.js +3 -188
- package/dist/commands/profile/kind.js +2 -35
- package/dist/commands/profile/list.js +1 -43
- package/dist/commands/profile/meta.js +1 -67
- package/dist/commands/profile/new.js +1 -115
- package/dist/commands/profile/pause.js +1 -59
- package/dist/commands/profile/project.js +1 -113
- package/dist/commands/profile/rename.js +1 -38
- package/dist/commands/profile/show.js +1 -52
- package/dist/commands/profile.js +1 -35
- package/dist/commands/push.js +9 -265
- package/dist/commands/revive.js +10 -181
- package/dist/commands/surface/node/cycle.js +1 -83
- package/dist/commands/surface/node/focus.js +1 -81
- package/dist/commands/surface/node/id.js +1 -38
- package/dist/commands/surface/node/pin.js +1 -42
- package/dist/commands/surface/node/placement.js +1 -134
- package/dist/commands/surface-edit.js +1 -157
- package/dist/commands/surface-inbox.js +1 -98
- package/dist/commands/surface-inspect.js +1 -39
- package/dist/commands/surface-node.js +1 -19
- package/dist/commands/surface-reload.js +2 -134
- package/dist/commands/surface-tmux-spread.js +1 -214
- package/dist/commands/surface.js +1 -28
- package/dist/commands/sys/branch.js +1 -19
- package/dist/commands/sys/config.js +1 -353
- package/dist/commands/sys/context/admin/actions.js +2 -246
- package/dist/commands/sys/context/admin/detail-panel.js +1 -247
- package/dist/commands/sys/context/admin/docs-panel.js +1 -191
- package/dist/commands/sys/context/admin/list-view.js +1 -183
- package/dist/commands/sys/context/admin/model.js +1 -229
- package/dist/commands/sys/context/admin/rail-panel.js +1 -227
- package/dist/commands/sys/context/admin/read-view.js +2 -194
- package/dist/commands/sys/context/admin/shell.js +1 -910
- package/dist/commands/sys/context/admin.js +2 -126
- package/dist/commands/sys/context/doc.js +3 -197
- package/dist/commands/sys/context/prompt-review.js +11 -291
- package/dist/commands/sys/context/resolve.js +10 -489
- package/dist/commands/sys/context/sysprompt.js +5 -96
- package/dist/commands/sys/context.js +1 -20
- package/dist/commands/sys/daemon.js +1 -313
- package/dist/commands/sys/doctor.js +1 -617
- package/dist/commands/sys/feedback.js +7 -228
- package/dist/commands/sys/logs.js +3 -129
- package/dist/commands/sys/migrate.js +1 -94
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
- package/dist/commands/sys/panels/dependencies-panel.js +1 -80
- package/dist/commands/sys/panels/keybindings-panel.js +1 -703
- package/dist/commands/sys/panels/models-panel.js +1 -1133
- package/dist/commands/sys/panels/plugins-panel.js +1 -80
- package/dist/commands/sys/panels/prefs-panel.js +1 -85
- package/dist/commands/sys/panels/profiles-panel.js +1 -601
- package/dist/commands/sys/panels/provider-panel.js +1 -538
- package/dist/commands/sys/settings-shell.js +1 -400
- package/dist/commands/sys/settings.js +1 -46
- package/dist/commands/sys/setup-core.js +6 -579
- package/dist/commands/sys/setup-settings-runner.js +1 -16
- package/dist/commands/sys/setup-wizard.js +1 -279
- package/dist/commands/sys/setup.js +1 -34
- package/dist/commands/sys/shared.js +1 -81
- package/dist/commands/sys/support/prepare.js +3 -239
- package/dist/commands/sys/support/submit.js +6 -524
- package/dist/commands/sys/support.js +1 -18
- package/dist/commands/sys/sync-deps.js +15 -498
- package/dist/commands/sys/sync-project-guidance.js +4 -481
- package/dist/commands/sys/sync-shared.js +1 -49
- package/dist/commands/sys/sync-skills.js +2 -311
- package/dist/commands/sys/sync.js +1 -18
- package/dist/commands/sys/update.js +1 -147
- package/dist/commands/sys/worktrees.js +5 -53
- package/dist/commands/sys.js +1 -18
- package/dist/core/activity-signal.js +2 -38
- package/dist/core/asset-root.js +1 -18
- package/dist/core/auth-file.js +2 -179
- package/dist/core/auth-interaction.js +3 -94
- package/dist/core/auto-update.js +4 -94
- package/dist/core/bash-guard.js +11 -393
- package/dist/core/bash-jobs.js +7 -411
- package/dist/core/bootstrap.js +2 -53
- package/dist/core/broker-client/client.js +1 -184
- package/dist/core/broker-client/index.js +1 -13
- package/dist/core/broker-client/transport-relay.js +1 -157
- package/dist/core/broker-client/transport-socket.js +1 -179
- package/dist/core/broker-client/transport.js +1 -26
- package/dist/core/canvas/attention.js +1 -47
- package/dist/core/canvas/boot-id.js +1 -26
- package/dist/core/canvas/boot.js +1 -186
- package/dist/core/canvas/browse/app.js +3 -919
- package/dist/core/canvas/browse/model.js +1 -477
- package/dist/core/canvas/browse/pins.js +1 -29
- package/dist/core/canvas/browse/render.js +3 -1055
- package/dist/core/canvas/canvas.js +15 -922
- package/dist/core/canvas/crons.js +11 -481
- package/dist/core/canvas/daemon-owner.js +2 -146
- package/dist/core/canvas/db.js +2 -100
- package/dist/core/canvas/deliveries.js +22 -283
- package/dist/core/canvas/delivery-contract.js +1 -8
- package/dist/core/canvas/executions.js +1 -68
- package/dist/core/canvas/extensions.js +1 -83
- package/dist/core/canvas/focuses.js +1 -77
- package/dist/core/canvas/history.js +24 -860
- package/dist/core/canvas/index.js +1 -15
- package/dist/core/canvas/install-id.js +1 -84
- package/dist/core/canvas/labels.js +1 -43
- package/dist/core/canvas/meta-file.js +1 -89
- package/dist/core/canvas/migrations.js +41 -1150
- package/dist/core/canvas/nav-model.js +1 -231
- package/dist/core/canvas/nav-render.js +1 -260
- package/dist/core/canvas/node-order.js +1 -37
- package/dist/core/canvas/node-recap.js +2 -67
- package/dist/core/canvas/node-sql-migration.js +2 -209
- package/dist/core/canvas/paths.js +1 -153
- package/dist/core/canvas/pid.js +4 -683
- package/dist/core/canvas/recovery.js +3 -565
- package/dist/core/canvas/remote-canvas-source.js +1 -288
- package/dist/core/canvas/remote-transport.js +1 -57
- package/dist/core/canvas/render-source.js +10 -635
- package/dist/core/canvas/sessions.js +1 -78
- package/dist/core/canvas/source.js +1 -47
- package/dist/core/canvas/status-glyph.js +1 -132
- package/dist/core/canvas/telemetry.js +1 -35
- package/dist/core/canvas/types.js +1 -6
- package/dist/core/canvas/waits.js +4 -68
- package/dist/core/canvas/worktrees.js +1 -93
- package/dist/core/clipboard-text.js +1 -57
- package/dist/core/command-hooks/artifact.js +1 -145
- package/dist/core/command-hooks/catalog.js +1 -38
- package/dist/core/command-hooks/compose.js +1 -99
- package/dist/core/command-hooks/discovery.js +1 -228
- package/dist/core/command-hooks/help.js +1 -18
- package/dist/core/command-hooks/index.js +1 -7
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
- package/dist/core/command-hooks/lifecycle-create.js +1 -51
- package/dist/core/command-hooks/report.js +1 -28
- package/dist/core/command-hooks/schema.js +1 -157
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
- package/dist/core/command-manifests/manifest.js +1 -324
- package/dist/core/command-manifests/registry.js +1 -118
- package/dist/core/command-manifests/schema.js +1 -736
- package/dist/core/command-plugins/bundle.js +1 -261
- package/dist/core/command-plugins/compose.js +1 -65
- package/dist/core/command-plugins/discovery.js +1 -245
- package/dist/core/command-plugins/endpoint.js +1 -48
- package/dist/core/command-plugins/extensions.js +1 -166
- package/dist/core/command-plugins/help-addenda.js +1 -44
- package/dist/core/command-plugins/presence.js +1 -17
- package/dist/core/command-plugins/revalidate.js +2 -152
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
- package/dist/core/command-plugins/transport/http-fetch.js +1 -68
- package/dist/core/command-plugins/transport/http-invoke.js +3 -546
- package/dist/core/command.js +10 -739
- package/dist/core/config.js +1 -1059
- package/dist/core/document-lines.js +3 -6
- package/dist/core/env-name.js +1 -9
- package/dist/core/errors.js +1 -52
- package/dist/core/events/emit.js +1 -17
- package/dist/core/events/envelope.js +1 -84
- package/dist/core/events/errors.js +1 -69
- package/dist/core/events/index.js +1 -4
- package/dist/core/events/operation-id.js +1 -24
- package/dist/core/events/read.js +1 -623
- package/dist/core/events/serialize.js +1 -199
- package/dist/core/events/source.js +1 -31
- package/dist/core/events/types.js +1 -11
- package/dist/core/exclusive-lock.js +1 -197
- package/dist/core/fault-classifier.js +1 -96
- package/dist/core/feed/feed.js +7 -202
- package/dist/core/feed/inbox-migrate.js +3 -135
- package/dist/core/feed/inbox.js +10 -122
- package/dist/core/feed/messages.js +6 -212
- package/dist/core/frontmatter.js +1 -35
- package/dist/core/fs-utils.js +3 -202
- package/dist/core/git.js +2 -103
- package/dist/core/help.js +9 -310
- package/dist/core/host-exports/builtins.js +9 -68
- package/dist/core/host-exports/export.js +3 -124
- package/dist/core/human/action-binding.js +1 -40
- package/dist/core/human/answer-text.js +5 -100
- package/dist/core/human/answer.js +1 -119
- package/dist/core/human/claim.js +3 -67
- package/dist/core/human/completion.js +1 -27
- package/dist/core/human/component-docs.js +78 -272
- package/dist/core/human/convention.js +2 -82
- package/dist/core/human/feedback-companion.js +1 -106
- package/dist/core/human/feedback.js +1 -88
- package/dist/core/human/page-authoring.js +1 -19
- package/dist/core/human/page-catalog.js +1 -172
- package/dist/core/human/page-errors.js +1 -7
- package/dist/core/human/page-eval.js +1 -125
- package/dist/core/human/page-html-markdown.js +8 -260
- package/dist/core/human/page-markdown.js +17 -295
- package/dist/core/human/page-schema.js +1 -373
- package/dist/core/human/page-synth.js +8 -27
- package/dist/core/human/page.js +1 -198
- package/dist/core/human/requests.js +15 -466
- package/dist/core/human/review-schema.js +1 -34
- package/dist/core/human/root.js +1 -11
- package/dist/core/human/scan.js +1 -69
- package/dist/core/human/summary.js +1 -5
- package/dist/core/human/tickets.js +1 -171
- package/dist/core/human/types.js +0 -1
- package/dist/core/human/visible-paths.js +1 -77
- package/dist/core/human-actions.js +1 -101
- package/dist/core/inspector/chrome.js +1 -14
- package/dist/core/inspector/contract.js +0 -1
- package/dist/core/inspector/core.js +2 -295
- package/dist/core/inspector/host.js +4 -538
- package/dist/core/inspector/model.js +2 -226
- package/dist/core/inspector/text.js +6 -45
- package/dist/core/inspector/transport.js +1 -36
- package/dist/core/inspector/tui.js +2 -295
- package/dist/core/installed-plugins.js +1 -78
- package/dist/core/io.js +7 -356
- package/dist/core/keybindings/attach-control.js +1 -42
- package/dist/core/keybindings/background-bash.js +1 -33
- package/dist/core/keybindings/catalog.js +1 -256
- package/dist/core/keybindings/inbox.js +1 -25
- package/dist/core/keybindings/index.js +1 -7
- package/dist/core/keybindings/match.js +1 -127
- package/dist/core/keybindings/persistence.js +1 -49
- package/dist/core/keybindings/resolve.js +1 -348
- package/dist/core/keybindings/types.js +0 -1
- package/dist/core/locked-file.js +1 -118
- package/dist/core/log.js +3 -27
- package/dist/core/manifest-recovery.js +1 -72
- package/dist/core/manifest-stale.js +1 -39
- package/dist/core/manifest.js +1 -20
- package/dist/core/memory/doc-link-grammar.js +2 -109
- package/dist/core/memory/extensions.js +1 -221
- package/dist/core/memory/history.js +6 -268
- package/dist/core/memory/identity.js +1 -181
- package/dist/core/memory/inline-ref-grammar.js +1 -98
- package/dist/core/memory/inline-ref-guidance.js +2 -35
- package/dist/core/memory/inline-ref-inventory.js +1 -59
- package/dist/core/memory/lint.js +2 -671
- package/dist/core/memory/project-namespace.js +2 -85
- package/dist/core/memory/repository-association.js +1 -129
- package/dist/core/memory/tree.js +1 -93
- package/dist/core/memory-resolver.js +2 -611
- package/dist/core/model-config.js +1 -107
- package/dist/core/model-routes.js +1 -201
- package/dist/core/nested-stores.js +2 -166
- package/dist/core/output.js +7 -99
- package/dist/core/pagination.js +1 -88
- package/dist/core/plugin-swap-lock.js +1 -31
- package/dist/core/pool-credential-store.js +1 -116
- package/dist/core/predicate.js +1 -191
- package/dist/core/preview-registry.js +2 -411
- package/dist/core/preview-result-path.js +1 -26
- package/dist/core/profiles/default-binding.js +1 -24
- package/dist/core/profiles/deletion-reservation.js +1 -42
- package/dist/core/profiles/env-store.js +2 -162
- package/dist/core/profiles/fuzzy-match.js +1 -92
- package/dist/core/profiles/manifest.js +1 -574
- package/dist/core/profiles/select.js +35 -741
- package/dist/core/profiles/state-block.js +3 -17
- package/dist/core/provider-error-recognition.js +1 -74
- package/dist/core/provider-failure.js +1 -86
- package/dist/core/provider-management.js +1 -22
- package/dist/core/remote-canvas-target.js +1 -30
- package/dist/core/render.js +18 -138
- package/dist/core/resolver.js +1 -111
- package/dist/core/review/birth.js +1 -52
- package/dist/core/review/comments.js +5 -279
- package/dist/core/review/companion.js +1 -215
- package/dist/core/review/document.js +2 -138
- package/dist/core/review/project.js +1 -36
- package/dist/core/review/realize.js +1 -71
- package/dist/core/review/remap.js +4 -141
- package/dist/core/review/signal.js +1 -12
- package/dist/core/review/stage.js +1 -184
- package/dist/core/review/store.js +1 -168
- package/dist/core/review/types.js +1 -23
- package/dist/core/runtime/advertised-command-invocation.js +1 -233
- package/dist/core/runtime/auth-reload.js +1 -67
- package/dist/core/runtime/banner.js +1 -51
- package/dist/core/runtime/bearings-render.js +18 -250
- package/dist/core/runtime/bearings.js +7 -194
- package/dist/core/runtime/bin-contributions.js +2 -186
- package/dist/core/runtime/boot-root.js +1 -107
- package/dist/core/runtime/branded-host.js +2 -264
- package/dist/core/runtime/broker/auth-reload.js +1 -157
- package/dist/core/runtime/broker/client-registry.js +1 -179
- package/dist/core/runtime/broker/daemon-ops.js +1 -88
- package/dist/core/runtime/broker/engine-drive.js +1 -354
- package/dist/core/runtime/broker/engine-routing.js +1 -211
- package/dist/core/runtime/broker/event-projection.js +1 -193
- package/dist/core/runtime/broker/extension-abort.js +1 -36
- package/dist/core/runtime/broker/fault-retry.js +1 -588
- package/dist/core/runtime/broker/frame-client.js +1 -132
- package/dist/core/runtime/broker/frame-dispatch.js +1 -183
- package/dist/core/runtime/broker/frame-engine-control.js +1 -231
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
- package/dist/core/runtime/broker/frame-model-query.js +1 -69
- package/dist/core/runtime/broker/frame-read.js +1 -116
- package/dist/core/runtime/broker/frame-replies.js +1 -64
- package/dist/core/runtime/broker/frame-session.js +4 -203
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
- package/dist/core/runtime/broker/inbox.js +13 -163
- package/dist/core/runtime/broker/node-named.js +1 -27
- package/dist/core/runtime/broker/read-ops.js +1 -171
- package/dist/core/runtime/broker/rebind.js +1 -318
- package/dist/core/runtime/broker/tool-groups.js +1 -246
- package/dist/core/runtime/broker/turn-admission.js +1 -31
- package/dist/core/runtime/broker/turn-ignition.js +1 -84
- package/dist/core/runtime/broker-cli.js +3 -81
- package/dist/core/runtime/broker-extension-render.js +5 -135
- package/dist/core/runtime/broker-inventory.js +1 -116
- package/dist/core/runtime/broker-persona-guidance.js +4 -154
- package/dist/core/runtime/broker-protocol.js +3 -152
- package/dist/core/runtime/broker-request.js +1 -85
- package/dist/core/runtime/broker-sdk.js +1 -129
- package/dist/core/runtime/broker.js +1 -1214
- package/dist/core/runtime/canvas-extensions.js +1 -96
- package/dist/core/runtime/chat-inventory-rows.js +1 -105
- package/dist/core/runtime/close.js +1 -265
- package/dist/core/runtime/command-expansion.js +9 -104
- package/dist/core/runtime/command-surface.js +1 -117
- package/dist/core/runtime/connectivity.js +1 -73
- package/dist/core/runtime/deliver-live.js +1 -88
- package/dist/core/runtime/fault-recovery.js +1 -83
- package/dist/core/runtime/fault.js +1 -17
- package/dist/core/runtime/fleet.js +1 -58
- package/dist/core/runtime/front-door-env.js +1 -16
- package/dist/core/runtime/front-door.js +7 -183
- package/dist/core/runtime/headless-pi.js +1 -161
- package/dist/core/runtime/host.js +1 -457
- package/dist/core/runtime/interactive-deliver.js +1 -51
- package/dist/core/runtime/invocation.js +0 -10
- package/dist/core/runtime/kickoff.js +30 -327
- package/dist/core/runtime/launch-config-worker.js +1 -12
- package/dist/core/runtime/launch-prompt.js +4 -13
- package/dist/core/runtime/launch-target.js +1 -55
- package/dist/core/runtime/launch.js +1 -483
- package/dist/core/runtime/lifecycle.js +2 -213
- package/dist/core/runtime/managed-provider-cooling.js +1 -62
- package/dist/core/runtime/memory.js +1 -17
- package/dist/core/runtime/model-registry.js +1 -13
- package/dist/core/runtime/model-selection.js +1 -135
- package/dist/core/runtime/model-swap.js +1 -86
- package/dist/core/runtime/naming.js +14 -298
- package/dist/core/runtime/nerd-font.js +2 -127
- package/dist/core/runtime/node-read.js +2 -386
- package/dist/core/runtime/nodes.js +1 -331
- package/dist/core/runtime/outcome-document.js +1 -97
- package/dist/core/runtime/package-health.js +4 -99
- package/dist/core/runtime/persona.js +2 -55
- package/dist/core/runtime/pi-cli.js +1 -65
- package/dist/core/runtime/pi-vendored.js +1 -66
- package/dist/core/runtime/placement-tmux.js +1 -81
- package/dist/core/runtime/placement.js +1 -386
- package/dist/core/runtime/promote.js +1 -174
- package/dist/core/runtime/prospective-inventory-cli.js +3 -61
- package/dist/core/runtime/prospective-inventory.js +2 -88
- package/dist/core/runtime/recap.js +27 -103
- package/dist/core/runtime/recycle.js +1 -190
- package/dist/core/runtime/reopen.js +1 -138
- package/dist/core/runtime/reset.js +1 -245
- package/dist/core/runtime/resume-root.js +10 -290
- package/dist/core/runtime/revive-all.js +1 -107
- package/dist/core/runtime/revive.js +4 -544
- package/dist/core/runtime/roadmap.js +4 -38
- package/dist/core/runtime/session-branch.js +1 -46
- package/dist/core/runtime/session-cycles.js +1 -110
- package/dist/core/runtime/session-list-cache.js +1 -406
- package/dist/core/runtime/session-visibility.js +1 -99
- package/dist/core/runtime/shell-expansion.js +9 -100
- package/dist/core/runtime/situational-context.js +2 -67
- package/dist/core/runtime/situational-live.js +1 -41
- package/dist/core/runtime/spawn-env.js +1 -255
- package/dist/core/runtime/spawn.js +3 -577
- package/dist/core/runtime/stamp/channel.js +1 -76
- package/dist/core/runtime/stamp/protocol.js +1 -113
- package/dist/core/runtime/stop-guard.js +7 -116
- package/dist/core/runtime/stop-signals.js +1 -46
- package/dist/core/runtime/stream-watchdog.js +1 -134
- package/dist/core/runtime/structured-output.js +4 -156
- package/dist/core/runtime/surface-bg.js +1 -85
- package/dist/core/runtime/tmux-bindings.js +4 -730
- package/dist/core/runtime/tmux-chrome.js +1 -5
- package/dist/core/runtime/tmux-driver.js +7 -637
- package/dist/core/runtime/tool-group-summary.js +6 -85
- package/dist/core/runtime/turn-visibility.js +1 -31
- package/dist/core/runtime/view-socket.js +1 -83
- package/dist/core/runtime/warm-pool.js +1 -395
- package/dist/core/scope.js +1 -254
- package/dist/core/scoped-state/db.js +1 -135
- package/dist/core/scoped-state/migrate.js +3 -181
- package/dist/core/scoped-state/paths.js +1 -27
- package/dist/core/scoped-state/profiles.js +1 -62
- package/dist/core/scoped-state/providers.js +1 -8
- package/dist/core/scoped-state/schema.js +3 -16
- package/dist/core/scoped-state/settings.js +1 -82
- package/dist/core/secrets.js +2 -55
- package/dist/core/self-update.js +1 -71
- package/dist/core/session-model/session-state.js +1 -180
- package/dist/core/shell-segments.js +4 -169
- package/dist/core/spawn.js +1 -26
- package/dist/core/stdout-errors.js +1 -14
- package/dist/core/subscription-state.js +3 -193
- package/dist/core/substrate/frontmatter-validation.js +1 -105
- package/dist/core/substrate/gate-explain.js +1 -424
- package/dist/core/substrate/gate.js +1 -26
- package/dist/core/substrate/index.js +1 -30
- package/dist/core/substrate/injected-store.js +1 -249
- package/dist/core/substrate/listings.js +1 -115
- package/dist/core/substrate/on-read-node.js +1 -36
- package/dist/core/substrate/on-read.js +9 -315
- package/dist/core/substrate/plan.js +1 -266
- package/dist/core/substrate/render-node.js +1 -30
- package/dist/core/substrate/render.js +65 -689
- package/dist/core/substrate/schema.js +1 -186
- package/dist/core/substrate/session-cache.js +1 -83
- package/dist/core/substrate/subject-fields.js +1 -35
- package/dist/core/substrate/subject.js +1 -47
- package/dist/core/substrate/surface-match.js +1 -242
- package/dist/core/termrender/code-doc.js +5 -92
- package/dist/core/termrender/display.js +2 -56
- package/dist/core/termrender/termrender.js +14 -719
- package/dist/core/termrender/version.js +1 -1
- package/dist/core/timing.js +2 -94
- package/dist/core/tui/draw.js +2 -378
- package/dist/core/tui/fuzzy.js +1 -38
- package/dist/core/tui/markdown.js +3 -407
- package/dist/core/tui/page-host.js +1 -74
- package/dist/core/tui/panel.js +1 -137
- package/dist/core/tui/terminal.js +2 -100
- package/dist/core/user-settings.js +1 -454
- package/dist/core/wake.js +1 -296
- package/dist/core/worktree-close.js +6 -228
- package/dist/core/worktree-containment.js +3 -48
- package/dist/core/worktree-landing.js +4 -56
- package/dist/core/worktree-mutation-async.js +10 -280
- package/dist/core/worktree-quarantine.js +1 -54
- package/dist/core/worktree-sweep.js +6 -453
- package/dist/core/worktree.js +18 -899
- package/dist/daemon/api/bridge.js +8 -418
- package/dist/daemon/api/handlers/attach.js +1 -65
- package/dist/daemon/api/handlers/bash-jobs.js +2 -91
- package/dist/daemon/api/handlers/broker-ops.js +1 -447
- package/dist/daemon/api/handlers/broker-recovery.js +1 -251
- package/dist/daemon/api/handlers/canvas.js +6 -490
- package/dist/daemon/api/handlers/chat-inventory.js +1 -25
- package/dist/daemon/api/handlers/crons.js +1 -373
- package/dist/daemon/api/handlers/daemon.js +1 -76
- package/dist/daemon/api/handlers/feedback-comments.js +3 -199
- package/dist/daemon/api/handlers/files.js +1 -63
- package/dist/daemon/api/handlers/focus.js +1 -92
- package/dist/daemon/api/handlers/health.js +1 -76
- package/dist/daemon/api/handlers/human-requests.js +1 -379
- package/dist/daemon/api/handlers/human.js +1 -3
- package/dist/daemon/api/handlers/inbox-page.js +1 -89
- package/dist/daemon/api/handlers/inbox.js +1 -301
- package/dist/daemon/api/handlers/memory.js +1 -50
- package/dist/daemon/api/handlers/messages.js +2 -506
- package/dist/daemon/api/handlers/model-config.js +1 -44
- package/dist/daemon/api/handlers/modelauth.js +1 -165
- package/dist/daemon/api/handlers/node-outcomes.js +1 -181
- package/dist/daemon/api/handlers/nodes.js +1 -939
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +5 -4
- package/runtime.lock.json +5 -5
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,150 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
// A pidfile check followed by a later write is not singleton ownership: two
|
|
4
|
-
// `crtrd` invocations racing a cold start can both read "no pidfile", both
|
|
5
|
-
// proceed, and both bind a canonical event source. The only race-free gate is
|
|
6
|
-
// a SNAPSHOT-CONDITIONED canvas.db mutation — a conditional insert/replace
|
|
7
|
-
// that only ever succeeds for exactly one caller. This module owns that
|
|
8
|
-
// mutation exclusively: the `DAEMON_OWNER_META_KEY` row shape, validated
|
|
9
|
-
// parsing of it, exact serialized snapshot reads, the conditional insert/
|
|
10
|
-
// replace SQL, and the exact conditional delete SQL. It has NO opinion about
|
|
11
|
-
// daemon lifecycle, source binding, the pidfile, or diagnostics — the caller
|
|
12
|
-
// (`src/daemon/crtrd.ts`) generates the unpredictable per-invocation token,
|
|
13
|
-
// calls `claimDaemonOwnership`/`releaseDaemonOwnership`, and owns everything
|
|
14
|
-
// that happens before and after those two calls.
|
|
15
|
-
//
|
|
16
|
-
// The claim is a snapshot-conditioned loop, not a single statement, because a
|
|
17
|
-
// live incumbent must be probed for liveness OUTSIDE any write transaction —
|
|
18
|
-
// `capturePidIdentities`/`recordedPidLiveness` shell out to `ps`, and holding
|
|
19
|
-
// `BEGIN IMMEDIATE` across a subprocess spawn would stall every unrelated
|
|
20
|
-
// canvas writer for the probe's duration. Each iteration therefore reads the
|
|
21
|
-
// current row as a plain (non-transactional) snapshot, probes if needed
|
|
22
|
-
// entirely outside a transaction, and only then opens a SHORT `withCanvasWrite`
|
|
23
|
-
// that conditionally mutates the row iff it still equals the exact snapshot
|
|
24
|
-
// just read. Zero changed rows means a concurrent writer changed the row
|
|
25
|
-
// between the read and the write; the loop restarts from a fresh read rather
|
|
26
|
-
// than assuming the outcome. This is what closes the second-writer race
|
|
27
|
-
// without ever holding the write lock across a liveness probe.
|
|
28
|
-
import { openDb, withCanvasWrite } from './db.js';
|
|
29
|
-
import { capturePidIdentities, recordedPidLiveness } from './pid.js';
|
|
30
|
-
/** The single `canvas_meta` key this module exclusively owns. No other module
|
|
31
|
-
* may read or write this key. */
|
|
32
|
-
export const DAEMON_OWNER_META_KEY = 'daemon_owner';
|
|
33
|
-
/** Deterministic serialization used for BOTH the stored `value` and every
|
|
34
|
-
* exact-match compare (insert guard, CAS replace, CAS release). Fixed key
|
|
35
|
-
* order so the same logical claim always serializes identically within this
|
|
36
|
-
* module — the only thing that matters, since no other writer touches this
|
|
37
|
-
* key. */
|
|
38
|
-
function serializeClaim(claim) {
|
|
39
|
-
return JSON.stringify({ pid: claim.pid, pid_identity: claim.pid_identity, token: claim.token });
|
|
40
|
-
}
|
|
41
|
-
/** Validated parse of a persisted `canvas_meta.value` back into a
|
|
42
|
-
* `DaemonOwnerClaim`. Returns `null` for anything that isn't exactly the
|
|
43
|
-
* expected shape (invalid JSON, wrong type, missing/empty field) — a
|
|
44
|
-
* malformed incumbent is treated as an unreadable claim, never coerced or
|
|
45
|
-
* partially trusted. */
|
|
46
|
-
function parseClaim(raw) {
|
|
47
|
-
let parsed;
|
|
48
|
-
try {
|
|
49
|
-
parsed = JSON.parse(raw);
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
if (typeof parsed !== 'object' || parsed === null)
|
|
55
|
-
return null;
|
|
56
|
-
const { pid, pid_identity, token } = parsed;
|
|
57
|
-
if (!Number.isInteger(pid) || pid <= 0)
|
|
58
|
-
return null;
|
|
59
|
-
if (typeof pid_identity !== 'string' || pid_identity.length === 0)
|
|
60
|
-
return null;
|
|
61
|
-
if (typeof token !== 'string' || token.length === 0)
|
|
62
|
-
return null;
|
|
63
|
-
return { pid: pid, pid_identity, token };
|
|
64
|
-
}
|
|
65
|
-
/** Bootstrap only `canvas_meta`; daemon startup owns explicit schema migration. */
|
|
66
|
-
function ensureOwnerTable() {
|
|
67
|
-
openDb().exec(`
|
|
1
|
+
var f=Object.defineProperty;var r=(e,n)=>f(e,"name",{value:n,configurable:!0});import{openDb as p,withCanvasWrite as d}from"./db.js";import{capturePidIdentities as T,recordedPidLiveness as _}from"./pid.js";const s="daemon_owner";function E(e){return JSON.stringify({pid:e.pid,pid_identity:e.pid_identity,token:e.token})}r(E,"serializeClaim");function v(e){let n;try{n=JSON.parse(e)}catch{return null}if(typeof n!="object"||n===null)return null;const{pid:t,pid_identity:i,token:a}=n;return!Number.isInteger(t)||t<=0||typeof i!="string"||i.length===0||typeof a!="string"||a.length===0?null:{pid:t,pid_identity:i,token:a}}r(v,"parseClaim");function y(){p().exec(`
|
|
68
2
|
CREATE TABLE IF NOT EXISTS canvas_meta (
|
|
69
3
|
key TEXT PRIMARY KEY,
|
|
70
4
|
value TEXT NOT NULL
|
|
71
5
|
)
|
|
72
|
-
`);
|
|
73
|
-
}
|
|
74
|
-
/** Read the incumbent's exact serialized `value` for `DAEMON_OWNER_META_KEY`
|
|
75
|
-
* as a plain snapshot — no transaction. `undefined` means the key is
|
|
76
|
-
* currently absent. */
|
|
77
|
-
function readSnapshot() {
|
|
78
|
-
const db = openDb();
|
|
79
|
-
const row = db
|
|
80
|
-
.prepare('SELECT value FROM canvas_meta WHERE key = ?')
|
|
81
|
-
.get(DAEMON_OWNER_META_KEY);
|
|
82
|
-
return row?.value;
|
|
83
|
-
}
|
|
84
|
-
/** Attempt to claim exclusive daemon ownership for this process, using
|
|
85
|
-
* `token` as the unpredictable per-invocation discriminator the caller
|
|
86
|
-
* generated. Synchronous — every underlying operation (identity capture,
|
|
87
|
-
* liveness probe, sqlite) is synchronous, and this must complete before the
|
|
88
|
-
* caller does any other fallible startup work.
|
|
89
|
-
*
|
|
90
|
-
* Only a `dead` incumbent is ever reclaimed, via a snapshot-conditioned
|
|
91
|
-
* compare-and-set; `alive` and `indeterminate` incumbents cause an immediate
|
|
92
|
-
* loss with no row mutation at all. A malformed incumbent also loses without
|
|
93
|
-
* deletion or probing — this primitive never repairs or clears a bad row; a
|
|
94
|
-
* future winning claimant's CAS naturally supersedes it once its OWN pid is
|
|
95
|
-
* confirmed dead... except a malformed row can never be proven dead (no pid
|
|
96
|
-
* to probe), so a malformed incumbent can only ever be lost against, never
|
|
97
|
-
* reclaimed, by this primitive alone. That is intentional: this module never
|
|
98
|
-
* guesses at repair. */
|
|
99
|
-
export function claimDaemonOwnership(token) {
|
|
100
|
-
const ownIdentities = capturePidIdentities([process.pid]);
|
|
101
|
-
const ownIdentity = ownIdentities?.get(process.pid);
|
|
102
|
-
if (ownIdentities === null || ownIdentity === undefined) {
|
|
103
|
-
return { claimed: false, reason: 'own_identity_indeterminate' };
|
|
104
|
-
}
|
|
105
|
-
const claim = { pid: process.pid, pid_identity: ownIdentity, token };
|
|
106
|
-
const serializedClaim = serializeClaim(claim);
|
|
107
|
-
ensureOwnerTable();
|
|
108
|
-
for (;;) {
|
|
109
|
-
const snapshot = readSnapshot();
|
|
110
|
-
if (snapshot === undefined) {
|
|
111
|
-
const changes = withCanvasWrite((db) => db
|
|
112
|
-
.prepare('INSERT INTO canvas_meta (key, value) SELECT ?, ? WHERE NOT EXISTS (SELECT 1 FROM canvas_meta WHERE key = ?)')
|
|
113
|
-
.run(DAEMON_OWNER_META_KEY, serializedClaim, DAEMON_OWNER_META_KEY).changes);
|
|
114
|
-
if (changes === 1)
|
|
115
|
-
return { claimed: true, claim };
|
|
116
|
-
continue; // the key was no longer absent by the time we wrote — restart from a fresh read
|
|
117
|
-
}
|
|
118
|
-
const incumbent = parseClaim(snapshot);
|
|
119
|
-
if (incumbent === null)
|
|
120
|
-
return { claimed: false, reason: 'incumbent_malformed' };
|
|
121
|
-
const verdict = recordedPidLiveness(incumbent.pid, incumbent.pid_identity);
|
|
122
|
-
if (verdict === 'alive' || verdict === 'indeterminate') {
|
|
123
|
-
return {
|
|
124
|
-
claimed: false,
|
|
125
|
-
reason: verdict === 'alive' ? 'incumbent_alive' : 'incumbent_indeterminate',
|
|
126
|
-
incumbentPid: incumbent.pid,
|
|
127
|
-
verdict,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
// verdict === 'dead': CAS-replace, conditioned on the exact snapshot we probed.
|
|
131
|
-
const changes = withCanvasWrite((db) => db
|
|
132
|
-
.prepare('UPDATE canvas_meta SET value = ? WHERE key = ? AND value = ?')
|
|
133
|
-
.run(serializedClaim, DAEMON_OWNER_META_KEY, snapshot).changes);
|
|
134
|
-
if (changes === 1)
|
|
135
|
-
return { claimed: true, claim };
|
|
136
|
-
continue; // lost compare-and-set — the snapshot changed since the read — restart
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/** Release exclusive daemon ownership, iff the persisted row still equals
|
|
140
|
-
* `claim` EXACTLY (key present and value byte-identical to this invocation's
|
|
141
|
-
* own winning claim). This is a conditional delete, not an unconditional one:
|
|
142
|
-
* a caller must never release a row a successor has since won (e.g. after
|
|
143
|
-
* this invocation's claim was already reclaimed via the dead-incumbent CAS
|
|
144
|
-
* path while this process lingered mid-teardown). */
|
|
145
|
-
export function releaseDaemonOwnership(claim) {
|
|
146
|
-
const changes = withCanvasWrite((db) => db
|
|
147
|
-
.prepare('DELETE FROM canvas_meta WHERE key = ? AND value = ?')
|
|
148
|
-
.run(DAEMON_OWNER_META_KEY, serializeClaim(claim)).changes);
|
|
149
|
-
return { released: changes === 1 };
|
|
150
|
-
}
|
|
6
|
+
`)}r(y,"ensureOwnerTable");function g(){return p().prepare("SELECT value FROM canvas_meta WHERE key = ?").get(s)?.value}r(g,"readSnapshot");function S(e){const n=T([process.pid]),t=n?.get(process.pid);if(n===null||t===void 0)return{claimed:!1,reason:"own_identity_indeterminate"};const i={pid:process.pid,pid_identity:t,token:e},a=E(i);for(y();;){const u=g();if(u===void 0){if(d(m=>m.prepare("INSERT INTO canvas_meta (key, value) SELECT ?, ? WHERE NOT EXISTS (SELECT 1 FROM canvas_meta WHERE key = ?)").run(s,a,s).changes)===1)return{claimed:!0,claim:i};continue}const c=v(u);if(c===null)return{claimed:!1,reason:"incumbent_malformed"};const o=_(c.pid,c.pid_identity);if(o==="alive"||o==="indeterminate")return{claimed:!1,reason:o==="alive"?"incumbent_alive":"incumbent_indeterminate",incumbentPid:c.pid,verdict:o};if(d(l=>l.prepare("UPDATE canvas_meta SET value = ? WHERE key = ? AND value = ?").run(a,s,u).changes)===1)return{claimed:!0,claim:i}}}r(S,"claimDaemonOwnership");function b(e){return{released:d(t=>t.prepare("DELETE FROM canvas_meta WHERE key = ? AND value = ?").run(s,E(e)).changes)===1}}r(b,"releaseDaemonOwnership");export{s as DAEMON_OWNER_META_KEY,S as claimDaemonOwnership,b as releaseDaemonOwnership};
|
package/dist/core/canvas/db.js
CHANGED
|
@@ -1,100 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { canvasDbPath, ensureHome } from './paths.js';
|
|
4
|
-
export { migrate, MIGRATIONS } from './migrations.js';
|
|
5
|
-
const handles = new Map();
|
|
6
|
-
// V-2 open-ledger instrumentation
|
|
7
|
-
//
|
|
8
|
-
// When `CRTR_DB_OPEN_LEDGER=<path>` is set, every *fresh* canvas.db open (i.e.
|
|
9
|
-
// one that actually constructs a new DatabaseSync, not a cache hit) appends one
|
|
10
|
-
// line recording the opening process's identity. This is corroborating runtime
|
|
11
|
-
// evidence for the crtrd-sole-state-owner guarantee: the C-4 §11 scenario
|
|
12
|
-
// runner sets the env for daemon + CLI and asserts the ledger contains ONLY the
|
|
13
|
-
// crtrd process — zero opens attributed to a `crtr`/`bin/crtr` CLI process.
|
|
14
|
-
//
|
|
15
|
-
// Line format (space-separated, one per open, trivially parseable):
|
|
16
|
-
// <iso-timestamp> <pid> <argv1>
|
|
17
|
-
// e.g. `2026-07-21T18:04:11.923Z 40521 /Users/x/crouter/dist/daemon/crtrd.js`
|
|
18
|
-
//
|
|
19
|
-
// A dumb append — no locking, no dedup. Zero behavior change when the env is
|
|
20
|
-
// unset; a failing append is swallowed so instrumentation never breaks an open.
|
|
21
|
-
function recordOpenLedger() {
|
|
22
|
-
const ledger = process.env.CRTR_DB_OPEN_LEDGER;
|
|
23
|
-
if (!ledger)
|
|
24
|
-
return;
|
|
25
|
-
try {
|
|
26
|
-
const line = `${new Date().toISOString()} ${process.pid} ${process.argv[1] ?? '<unknown>'}\n`;
|
|
27
|
-
appendFileSync(ledger, line);
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
/* instrumentation only — never let a ledger write break a db open */
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
/** Open (or reuse) the canvas db at the current `CRTR_HOME`, configuring WAL
|
|
34
|
-
* but never changing its schema. Keyed by path so tests with distinct homes get
|
|
35
|
-
* independent handles.
|
|
36
|
-
*
|
|
37
|
-
* A cache hit trusts the cached handle outright: `crtrd` is this process's
|
|
38
|
-
* sole canvas-db owner (see `crtrd-sole-state-owner`), and nothing outside
|
|
39
|
-
* `openDb`/`closeDb` ever touches `handles` — there is no other actor in this
|
|
40
|
-
* process that could invalidate a live handle out from under it. (A
|
|
41
|
-
* 2026-06-25 revision added a `PRAGMA database_list` liveness probe here that
|
|
42
|
-
* silently closed and reopened the handle on any throw; it shipped alongside
|
|
43
|
-
* an unrelated guest-relay `PATH` fix for the now-removed `hearth` guest
|
|
44
|
-
* bootstrap, named no concrete failure mode in its commit or a test, and that
|
|
45
|
-
* guest-relay path no longer exists. Removed rather than kept-and-logged: a
|
|
46
|
-
* silent boot-path reopen is worse than trusting a handle this process
|
|
47
|
-
* already owns.) */
|
|
48
|
-
export function openDb() {
|
|
49
|
-
const path = canvasDbPath();
|
|
50
|
-
const existing = handles.get(path);
|
|
51
|
-
if (existing)
|
|
52
|
-
return existing;
|
|
53
|
-
ensureHome();
|
|
54
|
-
recordOpenLedger();
|
|
55
|
-
const db = new DatabaseSync(path);
|
|
56
|
-
// FIRST, before any pragma that can contend. `journal_mode = WAL` takes a
|
|
57
|
-
// brief exclusive lock, so on the default zero busy_timeout a cold open that
|
|
58
|
-
// races a concurrent writer throws `database is locked` outright — crtrd, a
|
|
59
|
-
// CLI child and a broker all open this same file, and every one of them opens
|
|
60
|
-
// it cold. Setting the wait window first makes that open wait its turn.
|
|
61
|
-
db.exec('PRAGMA busy_timeout = 5000;');
|
|
62
|
-
db.exec('PRAGMA journal_mode = WAL;');
|
|
63
|
-
// Load-bearing as of migration v4: the edges→nodes FK (ON DELETE CASCADE)
|
|
64
|
-
// needs this ON at the deleting connection so a node delete reaps its edges.
|
|
65
|
-
db.exec('PRAGMA foreign_keys = ON;');
|
|
66
|
-
handles.set(path, db);
|
|
67
|
-
return db;
|
|
68
|
-
}
|
|
69
|
-
/** Run `body` under the canvas SQLite write lock, joining an outer transaction
|
|
70
|
-
* when the shared connection already owns one. This is the common boundary for
|
|
71
|
-
* multi-statement mutations whose reads and writes must linearize as one unit;
|
|
72
|
-
* `node:sqlite` rejects nested BEGINs, so only the outermost call commits.
|
|
73
|
-
*/
|
|
74
|
-
export function withCanvasWrite(body) {
|
|
75
|
-
const db = openDb();
|
|
76
|
-
if (db.isTransaction)
|
|
77
|
-
return body(db);
|
|
78
|
-
db.exec('BEGIN IMMEDIATE');
|
|
79
|
-
try {
|
|
80
|
-
const result = body(db);
|
|
81
|
-
db.exec('COMMIT');
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
try {
|
|
86
|
-
db.exec('ROLLBACK');
|
|
87
|
-
}
|
|
88
|
-
catch { /* transaction was already closed */ }
|
|
89
|
-
throw err;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
/** Close and forget the handle for the current home. Mainly for tests. */
|
|
93
|
-
export function closeDb() {
|
|
94
|
-
const path = canvasDbPath();
|
|
95
|
-
const db = handles.get(path);
|
|
96
|
-
if (db) {
|
|
97
|
-
db.close();
|
|
98
|
-
handles.delete(path);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
1
|
+
var s=Object.defineProperty;var r=(t,e)=>s(t,"name",{value:e,configurable:!0});import{DatabaseSync as i}from"node:sqlite";import{appendFileSync as a}from"node:fs";import{canvasDbPath as c,ensureHome as p}from"./paths.js";import{migrate as D,MIGRATIONS as R}from"./migrations.js";const o=new Map;function u(){const t=process.env.CRTR_DB_OPEN_LEDGER;if(t)try{const e=`${new Date().toISOString()} ${process.pid} ${process.argv[1]??"<unknown>"}
|
|
2
|
+
`;a(t,e)}catch{}}r(u,"recordOpenLedger");function f(){const t=c(),e=o.get(t);if(e)return e;p(),u();const n=new i(t);return n.exec("PRAGMA busy_timeout = 5000;"),n.exec("PRAGMA journal_mode = WAL;"),n.exec("PRAGMA foreign_keys = ON;"),o.set(t,n),n}r(f,"openDb");function g(t){const e=f();if(e.isTransaction)return t(e);e.exec("BEGIN IMMEDIATE");try{const n=t(e);return e.exec("COMMIT"),n}catch(n){try{e.exec("ROLLBACK")}catch{}throw n}}r(g,"withCanvasWrite");function h(){const t=c(),e=o.get(t);e&&(e.close(),o.delete(t))}r(h,"closeDb");export{R as MIGRATIONS,h as closeDb,D as migrate,f as openDb,g as withCanvasWrite};
|
|
@@ -1,247 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { openDb, withCanvasWrite } from './db.js';
|
|
4
|
-
import { inboxPath, passivePath } from './paths.js';
|
|
5
|
-
function deliveryFrom(row) {
|
|
6
|
-
return {
|
|
7
|
-
deliveryId: row.delivery_id,
|
|
8
|
-
messageId: row.message_id,
|
|
9
|
-
destinationKind: row.destination_kind,
|
|
10
|
-
destinationId: row.destination_id,
|
|
11
|
-
urgency: row.urgency,
|
|
12
|
-
wake: row.wake === 1 ? 1 : 0,
|
|
13
|
-
state: row.state,
|
|
14
|
-
attempts: row.attempts,
|
|
15
|
-
nextAttemptAt: row.next_attempt_at,
|
|
16
|
-
claimedAt: row.claimed_at,
|
|
17
|
-
claimOwner: row.claim_owner,
|
|
18
|
-
acknowledgedAt: row.acknowledged_at,
|
|
19
|
-
failedAt: row.failed_at,
|
|
20
|
-
lastFailure: row.last_failure_json === null ? null : JSON.parse(row.last_failure_json),
|
|
21
|
-
adapter: row.adapter_json === null ? null : JSON.parse(row.adapter_json),
|
|
22
|
-
effect: row.effect_json === null ? null : JSON.parse(row.effect_json),
|
|
23
|
-
idempotencyKey: row.idempotency_key,
|
|
24
|
-
canceledAt: row.canceled_at,
|
|
25
|
-
createdAt: row.created_at,
|
|
26
|
-
updatedAt: row.updated_at,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function executionIsLive(db, nodeId, executionId, rejectRefresh) {
|
|
30
|
-
const row = db.prepare(`SELECT 1 FROM nodes n JOIN executions e ON e.node_id = n.node_id
|
|
31
|
-
WHERE n.node_id = ? AND e.execution_id = ? AND e.state != 'exited'${rejectRefresh ? " AND n.intent IS NOT 'refresh'" : ''}`).get(nodeId, executionId);
|
|
32
|
-
return row !== undefined;
|
|
33
|
-
}
|
|
34
|
-
function nodeMailRows(db, nodeId, executionId, wake, freshIds) {
|
|
35
|
-
const rows = db.prepare(`SELECT d.*, m.message_id AS m_message_id, m.seq, m.operation_id, m.created_at AS message_created_at,
|
|
1
|
+
var w=Object.defineProperty;var o=(e,n)=>w(e,"name",{value:n,configurable:!0});import{existsSync as L,readFileSync as S}from"node:fs";import{randomBytes as U}from"node:crypto";import{openDb as u,withCanvasWrite as N}from"./db.js";import{inboxPath as T,passivePath as I}from"./paths.js";function g(e){return{deliveryId:e.delivery_id,messageId:e.message_id,destinationKind:e.destination_kind,destinationId:e.destination_id,urgency:e.urgency,wake:e.wake===1?1:0,state:e.state,attempts:e.attempts,nextAttemptAt:e.next_attempt_at,claimedAt:e.claimed_at,claimOwner:e.claim_owner,acknowledgedAt:e.acknowledged_at,failedAt:e.failed_at,lastFailure:e.last_failure_json===null?null:JSON.parse(e.last_failure_json),adapter:e.adapter_json===null?null:JSON.parse(e.adapter_json),effect:e.effect_json===null?null:JSON.parse(e.effect_json),idempotencyKey:e.idempotency_key,canceledAt:e.canceled_at,createdAt:e.created_at,updatedAt:e.updated_at}}o(g,"deliveryFrom");function y(e,n,d,r){return e.prepare(`SELECT 1 FROM nodes n JOIN executions e ON e.node_id = n.node_id
|
|
2
|
+
WHERE n.node_id = ? AND e.execution_id = ? AND e.state != 'exited'${r?" AND n.intent IS NOT 'refresh'":""}`).get(n,d)!==void 0}o(y,"executionIsLive");function O(e,n,d,r,i){return e.prepare(`SELECT d.*, m.message_id AS m_message_id, m.seq, m.operation_id, m.created_at AS message_created_at,
|
|
36
3
|
m.sender_node_id, m.sender_name, m.kind, m.label, m.body_ref, m.body_json, m.disposition,
|
|
37
4
|
CASE WHEN d.state = 'handed_off' THEN 'inherited' ELSE 'fresh' END AS handoff
|
|
38
5
|
FROM deliveries d JOIN messages m ON m.message_id = d.message_id
|
|
39
6
|
WHERE d.destination_kind = 'node_inbox' AND d.destination_id = ? AND d.wake = ?
|
|
40
7
|
AND d.canceled_at IS NULL
|
|
41
8
|
AND (d.state = 'pending' OR (d.state = 'handed_off' AND d.claim_owner = ?))
|
|
42
|
-
ORDER BY m.seq`).all(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
seq: Number(row['seq']),
|
|
48
|
-
operationId: row['operation_id'],
|
|
49
|
-
createdAt: row['message_created_at'],
|
|
50
|
-
senderNodeId: row['sender_node_id'],
|
|
51
|
-
senderName: row['sender_name'],
|
|
52
|
-
kind: row['kind'],
|
|
53
|
-
label: row['label'],
|
|
54
|
-
bodyRef: row['body_ref'],
|
|
55
|
-
bodyJson: row['body_json'] === null ? null : JSON.parse(row['body_json']),
|
|
56
|
-
disposition: row['disposition'],
|
|
57
|
-
},
|
|
58
|
-
handoff: freshIds?.has(row.delivery_id) === true ? 'fresh' : row['handoff'],
|
|
59
|
-
}));
|
|
60
|
-
}
|
|
61
|
-
/** Claim one broker channel. A refreshing or stale broker receives hold and changes nothing. */
|
|
62
|
-
export function claimNodeMail(nodeId, executionId, channel, now = Date.now()) {
|
|
63
|
-
return withCanvasWrite((db) => {
|
|
64
|
-
if (!executionIsLive(db, nodeId, executionId, true))
|
|
65
|
-
return { action: 'hold', deliveries: [] };
|
|
66
|
-
const wake = channel === 'wake' ? 1 : 0;
|
|
67
|
-
const freshIds = new Set(db.prepare(`SELECT delivery_id FROM deliveries
|
|
68
|
-
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = ? AND state = 'pending' AND canceled_at IS NULL`).all(nodeId, wake).map((row) => row.delivery_id));
|
|
69
|
-
db.prepare(`UPDATE deliveries SET state = 'handed_off', attempts = attempts + 1, claim_owner = ?, claimed_at = ?, updated_at = ?
|
|
70
|
-
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = ? AND state = 'pending' AND canceled_at IS NULL`).run(executionId, now, now, nodeId, wake);
|
|
71
|
-
return { action: 'claimed', deliveries: nodeMailRows(db, nodeId, executionId, wake, freshIds) };
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
/** Pre-launch wake claim. It uses the same state transition but deliberately does not reject refresh intent. */
|
|
75
|
-
export function claimKickoffMail(nodeId, executionId, now = Date.now()) {
|
|
76
|
-
return withCanvasWrite((db) => {
|
|
77
|
-
if (!executionIsLive(db, nodeId, executionId, false))
|
|
78
|
-
throw new Error(`execution ${executionId} is not live for node ${nodeId}`);
|
|
79
|
-
const freshIds = new Set(db.prepare(`SELECT delivery_id FROM deliveries
|
|
80
|
-
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1 AND state = 'pending' AND canceled_at IS NULL`).all(nodeId).map((row) => row.delivery_id));
|
|
81
|
-
db.prepare(`UPDATE deliveries SET state = 'handed_off', attempts = attempts + 1, claim_owner = ?, claimed_at = ?, updated_at = ?
|
|
82
|
-
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1 AND state = 'pending' AND canceled_at IS NULL`).run(executionId, now, now, nodeId);
|
|
83
|
-
return nodeMailRows(db, nodeId, executionId, 1, freshIds);
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
// Convert the existing subprocess contract at the one shared fence. The old names do not escape this module.
|
|
87
|
-
function normalizedSettlement(settlement) {
|
|
88
|
-
if (settlement.state === 'accepted')
|
|
89
|
-
return { state: 'acknowledged' };
|
|
90
|
-
return settlement;
|
|
91
|
-
}
|
|
92
|
-
/** The one execution/attempt/owner fence for node mail and external actions. */
|
|
93
|
-
export function settleDelivery(deliveryId, attempts, claimOwner, settlement, now = Date.now()) {
|
|
94
|
-
const next = normalizedSettlement(settlement);
|
|
95
|
-
const failure = next.state === 'pending' || next.state === 'permanent_failed' ? JSON.stringify(next.failure) : null;
|
|
96
|
-
const state = next.state === 'released' ? 'pending' : next.state;
|
|
97
|
-
const nextAttemptAt = next.state === 'pending' ? next.nextAttemptAt : state === 'pending' ? now : null;
|
|
98
|
-
return withCanvasWrite((db) => Number(db.prepare(`UPDATE deliveries
|
|
9
|
+
ORDER BY m.seq`).all(n,r,d).map(s=>({...g(s),message:{messageId:s.m_message_id,seq:Number(s.seq),operationId:s.operation_id,createdAt:s.message_created_at,senderNodeId:s.sender_node_id,senderName:s.sender_name,kind:s.kind,label:s.label,bodyRef:s.body_ref,bodyJson:s.body_json===null?null:JSON.parse(s.body_json),disposition:s.disposition},handoff:i?.has(s.delivery_id)===!0?"fresh":s.handoff}))}o(O,"nodeMailRows");function b(e,n,d,r=Date.now()){return N(i=>{if(!y(i,e,n,!0))return{action:"hold",deliveries:[]};const _=d==="wake"?1:0,s=new Set(i.prepare(`SELECT delivery_id FROM deliveries
|
|
10
|
+
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = ? AND state = 'pending' AND canceled_at IS NULL`).all(e,_).map(c=>c.delivery_id));return i.prepare(`UPDATE deliveries SET state = 'handed_off', attempts = attempts + 1, claim_owner = ?, claimed_at = ?, updated_at = ?
|
|
11
|
+
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = ? AND state = 'pending' AND canceled_at IS NULL`).run(n,r,r,e,_),{action:"claimed",deliveries:O(i,e,n,_,s)}})}o(b,"claimNodeMail");function q(e,n,d=Date.now()){return N(r=>{if(!y(r,e,n,!1))throw new Error(`execution ${n} is not live for node ${e}`);const i=new Set(r.prepare(`SELECT delivery_id FROM deliveries
|
|
12
|
+
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1 AND state = 'pending' AND canceled_at IS NULL`).all(e).map(_=>_.delivery_id));return r.prepare(`UPDATE deliveries SET state = 'handed_off', attempts = attempts + 1, claim_owner = ?, claimed_at = ?, updated_at = ?
|
|
13
|
+
WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1 AND state = 'pending' AND canceled_at IS NULL`).run(n,d,d,e),O(r,e,n,1,i)})}o(q,"claimKickoffMail");function C(e){return e.state==="accepted"?{state:"acknowledged"}:e}o(C,"normalizedSettlement");function h(e,n,d,r,i=Date.now()){const _=C(r),s=_.state==="pending"||_.state==="permanent_failed"?JSON.stringify(_.failure):null,c=_.state==="released"?"pending":_.state,t=_.state==="pending"?_.nextAttemptAt:c==="pending"?i:null;return N(a=>Number(a.prepare(`UPDATE deliveries
|
|
99
14
|
SET state = ?, next_attempt_at = ?, claimed_at = NULL, claim_owner = NULL,
|
|
100
15
|
acknowledged_at = ?, failed_at = ?, last_failure_json = ?, updated_at = ?
|
|
101
|
-
WHERE delivery_id = ? AND state = 'handed_off' AND attempts = ? AND claim_owner = ?`).run(
|
|
102
|
-
}
|
|
103
|
-
/** Broker acknowledgement additionally checks the live execution/refresh guards before the per-row fence. */
|
|
104
|
-
export function acknowledgeNodeMail(nodeId, executionId, deliveries, now = Date.now()) {
|
|
105
|
-
return withCanvasWrite((db) => {
|
|
106
|
-
if (!executionIsLive(db, nodeId, executionId, true))
|
|
107
|
-
return { action: 'hold', results: [] };
|
|
108
|
-
const results = deliveries.map((delivery) => {
|
|
109
|
-
const owned = db.prepare("SELECT 1 FROM deliveries WHERE delivery_id = ? AND destination_kind = 'node_inbox' AND destination_id = ?").get(delivery.deliveryId, nodeId) !== undefined;
|
|
110
|
-
return {
|
|
111
|
-
deliveryId: delivery.deliveryId,
|
|
112
|
-
outcome: owned && settleDelivery(delivery.deliveryId, delivery.attempts, executionId, { state: delivery.disposition }, now)
|
|
113
|
-
? delivery.disposition
|
|
114
|
-
: 'stale',
|
|
115
|
-
};
|
|
116
|
-
});
|
|
117
|
-
return { action: 'acknowledged', results };
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
/** The immutable action document belonging to one external-action obligation. */
|
|
121
|
-
export function messageBodyForDelivery(deliveryId) {
|
|
122
|
-
const row = openDb().prepare(`SELECT m.body_json FROM deliveries d JOIN messages m ON m.message_id = d.message_id
|
|
123
|
-
WHERE d.delivery_id = ? AND d.destination_kind = 'external_action'`).get(deliveryId);
|
|
124
|
-
return row === undefined || row.body_json === null ? null : JSON.parse(row.body_json);
|
|
125
|
-
}
|
|
126
|
-
/** Read the one external-action obligation with this caller-owned identity. */
|
|
127
|
-
export function readExternalActionDelivery(idempotencyKey) {
|
|
128
|
-
const row = openDb().prepare("SELECT * FROM deliveries WHERE destination_kind = 'external_action' AND idempotency_key = ?").get(idempotencyKey);
|
|
129
|
-
return row === undefined ? null : deliveryFrom(row);
|
|
130
|
-
}
|
|
131
|
-
export function dueExternalActionDeliveries(now) {
|
|
132
|
-
return openDb().prepare(`SELECT * FROM deliveries
|
|
16
|
+
WHERE delivery_id = ? AND state = 'handed_off' AND attempts = ? AND claim_owner = ?`).run(c,t,c==="acknowledged"?i:null,c==="permanent_failed"?i:null,s,i,e,n,d).changes)===1)}o(h,"settleDelivery");function $(e,n,d,r=Date.now()){return N(i=>y(i,e,n,!0)?{action:"acknowledged",results:d.map(s=>{const c=i.prepare("SELECT 1 FROM deliveries WHERE delivery_id = ? AND destination_kind = 'node_inbox' AND destination_id = ?").get(s.deliveryId,e)!==void 0;return{deliveryId:s.deliveryId,outcome:c&&h(s.deliveryId,s.attempts,n,{state:s.disposition},r)?s.disposition:"stale"}})}:{action:"hold",results:[]})}o($,"acknowledgeNodeMail");function J(e){const n=u().prepare(`SELECT m.body_json FROM deliveries d JOIN messages m ON m.message_id = d.message_id
|
|
17
|
+
WHERE d.delivery_id = ? AND d.destination_kind = 'external_action'`).get(e);return n===void 0||n.body_json===null?null:JSON.parse(n.body_json)}o(J,"messageBodyForDelivery");function K(e){const n=u().prepare("SELECT * FROM deliveries WHERE destination_kind = 'external_action' AND idempotency_key = ?").get(e);return n===void 0?null:g(n)}o(K,"readExternalActionDelivery");function P(e){return u().prepare(`SELECT * FROM deliveries
|
|
133
18
|
WHERE destination_kind = 'external_action' AND state = 'pending' AND canceled_at IS NULL AND next_attempt_at <= ?
|
|
134
|
-
ORDER BY next_attempt_at, created_at, delivery_id`).all(
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return withCanvasWrite((db) => {
|
|
138
|
-
const result = db.prepare(`UPDATE deliveries SET state = 'handed_off', attempts = attempts + 1, claimed_at = ?, claim_owner = ?, updated_at = ?
|
|
139
|
-
WHERE delivery_id = ? AND destination_kind = 'external_action' AND state = 'pending' AND canceled_at IS NULL AND next_attempt_at <= ?`).run(now, claimOwner, now, deliveryId, now);
|
|
140
|
-
if (Number(result.changes) === 0)
|
|
141
|
-
return null;
|
|
142
|
-
return deliveryFrom(db.prepare('SELECT * FROM deliveries WHERE delivery_id = ?').get(deliveryId));
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
export function resetHandedOffDeliveries(now) {
|
|
146
|
-
return withCanvasWrite((db) => Number(db.prepare(`UPDATE deliveries SET state = 'pending', next_attempt_at = CASE WHEN destination_kind = 'external_action' THEN ? ELSE NULL END,
|
|
147
|
-
claimed_at = NULL, claim_owner = NULL, updated_at = ? WHERE state = 'handed_off'`).run(now, now).changes));
|
|
148
|
-
}
|
|
149
|
-
/** Reset mail held by an execution that is no longer this node's one live execution. */
|
|
150
|
-
export function resetStaleExecutionMail(now) {
|
|
151
|
-
return withCanvasWrite((db) => Number(db.prepare(`UPDATE deliveries AS d SET state = 'pending', claimed_at = NULL, claim_owner = NULL, updated_at = ?
|
|
19
|
+
ORDER BY next_attempt_at, created_at, delivery_id`).all(e).map(g)}o(P,"dueExternalActionDeliveries");function G(e,n,d){return N(r=>{const i=r.prepare(`UPDATE deliveries SET state = 'handed_off', attempts = attempts + 1, claimed_at = ?, claim_owner = ?, updated_at = ?
|
|
20
|
+
WHERE delivery_id = ? AND destination_kind = 'external_action' AND state = 'pending' AND canceled_at IS NULL AND next_attempt_at <= ?`).run(n,d,n,e,n);return Number(i.changes)===0?null:g(r.prepare("SELECT * FROM deliveries WHERE delivery_id = ?").get(e))})}o(G,"claimExternalActionDelivery");function B(e){return N(n=>Number(n.prepare(`UPDATE deliveries SET state = 'pending', next_attempt_at = CASE WHEN destination_kind = 'external_action' THEN ? ELSE NULL END,
|
|
21
|
+
claimed_at = NULL, claim_owner = NULL, updated_at = ? WHERE state = 'handed_off'`).run(e,e).changes))}o(B,"resetHandedOffDeliveries");function Y(e){return N(n=>Number(n.prepare(`UPDATE deliveries AS d SET state = 'pending', claimed_at = NULL, claim_owner = NULL, updated_at = ?
|
|
152
22
|
WHERE d.destination_kind = 'node_inbox' AND d.state = 'handed_off'
|
|
153
23
|
AND NOT EXISTS (
|
|
154
24
|
SELECT 1 FROM executions e WHERE e.node_id = d.destination_id AND e.execution_id = d.claim_owner AND e.state != 'exited'
|
|
155
|
-
)`).run(
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
return openDb().prepare(`SELECT 1 FROM deliveries WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1
|
|
159
|
-
AND canceled_at IS NULL AND urgency != 'deferred' AND state IN ('pending', 'handed_off') LIMIT 1`).get(nodeId) !== undefined;
|
|
160
|
-
}
|
|
161
|
-
export function hasWakeMailSince(nodeId, since) {
|
|
162
|
-
return openDb().prepare(`SELECT 1 FROM deliveries WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1
|
|
163
|
-
AND urgency != 'deferred' AND created_at >= ? LIMIT 1`).get(nodeId, since) !== undefined;
|
|
164
|
-
}
|
|
165
|
-
export function acknowledgedNodeMailCount(nodeId) {
|
|
166
|
-
return Number(openDb().prepare("SELECT COUNT(*) AS count FROM deliveries WHERE destination_kind = 'node_inbox' AND destination_id = ? AND acknowledged_at IS NOT NULL").get(nodeId).count);
|
|
167
|
-
}
|
|
168
|
-
/** Register an outcome's frozen external destination before an outcome message exists. */
|
|
169
|
-
export function armExternalActionDelivery(db, input, now = Date.now()) {
|
|
170
|
-
const deliveryId = newId();
|
|
171
|
-
const result = db.prepare(`INSERT INTO deliveries
|
|
25
|
+
)`).run(e).changes))}o(Y,"resetStaleExecutionMail");function V(e){return u().prepare(`SELECT 1 FROM deliveries WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1
|
|
26
|
+
AND canceled_at IS NULL AND urgency != 'deferred' AND state IN ('pending', 'handed_off') LIMIT 1`).get(e)!==void 0}o(V,"hasUnseenWakeMail");function Q(e,n){return u().prepare(`SELECT 1 FROM deliveries WHERE destination_kind = 'node_inbox' AND destination_id = ? AND wake = 1
|
|
27
|
+
AND urgency != 'deferred' AND created_at >= ? LIMIT 1`).get(e,n)!==void 0}o(Q,"hasWakeMailSince");function z(e){return Number(u().prepare("SELECT COUNT(*) AS count FROM deliveries WHERE destination_kind = 'node_inbox' AND destination_id = ? AND acknowledged_at IS NOT NULL").get(e).count)}o(z,"acknowledgedNodeMailCount");function Z(e,n,d=Date.now()){const r=p(),i=e.prepare(`INSERT INTO deliveries
|
|
172
28
|
(delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, adapter_json, idempotency_key, created_at, updated_at)
|
|
173
29
|
VALUES (?, NULL, 'external_action', ?, 'normal', 0, 'armed', ?, ?, ?, ?)
|
|
174
30
|
ON CONFLICT(idempotency_key) WHERE idempotency_key IS NOT NULL DO UPDATE SET
|
|
175
31
|
destination_id = excluded.destination_id, adapter_json = excluded.adapter_json, updated_at = excluded.updated_at
|
|
176
|
-
WHERE deliveries.state = 'armed'`).run(
|
|
177
|
-
if (Number(result.changes) === 0)
|
|
178
|
-
throw new Error(`external action ${input.idempotencyKey} is already active`);
|
|
179
|
-
}
|
|
180
|
-
/** Attach a newly written immutable outcome message and make its registered action due. */
|
|
181
|
-
export function activateArmedExternalActionDelivery(db, input, now = Date.now()) {
|
|
182
|
-
const row = db.prepare("SELECT state FROM deliveries WHERE destination_kind = 'external_action' AND idempotency_key = ?").get(input.idempotencyKey);
|
|
183
|
-
if (row === undefined || (!input.supersede && row.state !== 'armed'))
|
|
184
|
-
return false;
|
|
185
|
-
let body;
|
|
186
|
-
try {
|
|
187
|
-
body = JSON.parse(input.bodyJson);
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
throw new Error(`external action ${input.idempotencyKey} has invalid outcome document: ${error instanceof Error ? error.message : String(error)}`);
|
|
191
|
-
}
|
|
192
|
-
const messageId = newId();
|
|
193
|
-
const seq = Number(db.prepare('SELECT COALESCE(MAX(seq), 0) AS seq FROM messages').get().seq) + 1;
|
|
194
|
-
db.prepare(`INSERT INTO messages
|
|
32
|
+
WHERE deliveries.state = 'armed'`).run(r,n.destinationId,JSON.stringify(n.adapter),n.idempotencyKey,d,d);if(Number(i.changes)===0)throw new Error(`external action ${n.idempotencyKey} is already active`)}o(Z,"armExternalActionDelivery");function ee(e,n,d=Date.now()){const r=e.prepare("SELECT state FROM deliveries WHERE destination_kind = 'external_action' AND idempotency_key = ?").get(n.idempotencyKey);if(r===void 0||!n.supersede&&r.state!=="armed")return!1;let i;try{i=JSON.parse(n.bodyJson)}catch(c){throw new Error(`external action ${n.idempotencyKey} has invalid outcome document: ${c instanceof Error?c.message:String(c)}`)}const _=p(),s=Number(e.prepare("SELECT COALESCE(MAX(seq), 0) AS seq FROM messages").get().seq)+1;return e.prepare(`INSERT INTO messages
|
|
195
33
|
(message_id, seq, operation_id, created_at, sender_node_id, sender_name, kind, label, body_ref, body_json, disposition)
|
|
196
|
-
VALUES (?, ?, ?, ?, NULL, NULL, 'completed', ?, NULL, ?, NULL)`).run(
|
|
197
|
-
if (input.supersede) {
|
|
198
|
-
db.prepare(`UPDATE deliveries SET message_id = ?, state = 'pending', attempts = 0, next_attempt_at = ?, claimed_at = NULL, claim_owner = NULL,
|
|
34
|
+
VALUES (?, ?, ?, ?, NULL, NULL, 'completed', ?, NULL, ?, NULL)`).run(_,s,p(),new Date(d).toISOString(),n.label,JSON.stringify(i)),n.supersede?e.prepare(`UPDATE deliveries SET message_id = ?, state = 'pending', attempts = 0, next_attempt_at = ?, claimed_at = NULL, claim_owner = NULL,
|
|
199
35
|
acknowledged_at = NULL, failed_at = NULL, last_failure_json = NULL, updated_at = ?
|
|
200
|
-
WHERE destination_kind = 'external_action' AND idempotency_key = ?`).run(
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
WHERE destination_kind = 'external_action' AND idempotency_key = ? AND state = 'armed'`).run(messageId, now, now, input.idempotencyKey);
|
|
205
|
-
}
|
|
206
|
-
return true;
|
|
207
|
-
}
|
|
208
|
-
function newId() {
|
|
209
|
-
let id;
|
|
210
|
-
do
|
|
211
|
-
id = randomBytes(16).toString('hex');
|
|
212
|
-
while (id === '00000000000000000000000000000000');
|
|
213
|
-
return id;
|
|
214
|
-
}
|
|
215
|
-
function readJsonLines(path) {
|
|
216
|
-
if (!existsSync(path))
|
|
217
|
-
return [];
|
|
218
|
-
const raw = readFileSync(path, 'utf8');
|
|
219
|
-
if (raw.trim() === '')
|
|
220
|
-
return [];
|
|
221
|
-
return raw.split('\n').filter((line) => line.trim() !== '').map((line, index) => {
|
|
222
|
-
let entry;
|
|
223
|
-
try {
|
|
224
|
-
entry = JSON.parse(line);
|
|
225
|
-
}
|
|
226
|
-
catch (error) {
|
|
227
|
-
throw new Error(`invalid mailbox JSON at ${path}:${index + 1}: ${error.message}`);
|
|
228
|
-
}
|
|
229
|
-
if (!/^(?!0{32}$)[0-9a-f]{32}$/.test(entry.entry_id) || !/^(?!0{32}$)[0-9a-f]{32}$/.test(entry.operation_id)) {
|
|
230
|
-
throw new Error(`invalid mailbox identity at ${path}:${index + 1}`);
|
|
231
|
-
}
|
|
232
|
-
if (typeof entry.ts !== 'string' || typeof entry.label !== 'string')
|
|
233
|
-
throw new Error(`incomplete mailbox entry at ${path}:${index + 1}`);
|
|
234
|
-
return entry;
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
function readCanceled(path) {
|
|
238
|
-
if (!existsSync(path))
|
|
239
|
-
return new Set();
|
|
240
|
-
return new Set(readFileSync(path, 'utf8').split('\n').map((line) => line.trim()).filter(Boolean));
|
|
241
|
-
}
|
|
242
|
-
/** Create the messaging schema and import every legacy mailbox/action/wait row. The caller owns the encompassing migration transaction. */
|
|
243
|
-
export function migrateMessagingState(db) {
|
|
244
|
-
db.exec(`
|
|
36
|
+
WHERE destination_kind = 'external_action' AND idempotency_key = ?`).run(_,d,d,n.idempotencyKey):e.prepare(`UPDATE deliveries SET message_id = ?, state = 'pending', next_attempt_at = ?, updated_at = ?
|
|
37
|
+
WHERE destination_kind = 'external_action' AND idempotency_key = ? AND state = 'armed'`).run(_,d,d,n.idempotencyKey),!0}o(ee,"activateArmedExternalActionDelivery");function p(){let e;do e=U(16).toString("hex");while(e==="00000000000000000000000000000000");return e}o(p,"newId");function R(e){if(!L(e))return[];const n=S(e,"utf8");return n.trim()===""?[]:n.split(`
|
|
38
|
+
`).filter(d=>d.trim()!=="").map((d,r)=>{let i;try{i=JSON.parse(d)}catch(_){throw new Error(`invalid mailbox JSON at ${e}:${r+1}: ${_.message}`)}if(!/^(?!0{32}$)[0-9a-f]{32}$/.test(i.entry_id)||!/^(?!0{32}$)[0-9a-f]{32}$/.test(i.operation_id))throw new Error(`invalid mailbox identity at ${e}:${r+1}`);if(typeof i.ts!="string"||typeof i.label!="string")throw new Error(`incomplete mailbox entry at ${e}:${r+1}`);return i})}o(R,"readJsonLines");function X(e){return L(e)?new Set(S(e,"utf8").split(`
|
|
39
|
+
`).map(n=>n.trim()).filter(Boolean)):new Set}o(X,"readCanceled");function te(e){e.exec(`
|
|
245
40
|
CREATE TABLE IF NOT EXISTS messages (
|
|
246
41
|
message_id TEXT PRIMARY KEY,
|
|
247
42
|
seq INTEGER NOT NULL UNIQUE,
|
|
@@ -295,60 +90,4 @@ CREATE TABLE IF NOT EXISTS waits (
|
|
|
295
90
|
);
|
|
296
91
|
CREATE UNIQUE INDEX IF NOT EXISTS waits_live ON waits(node_id) WHERE satisfied_at IS NULL;
|
|
297
92
|
CREATE INDEX IF NOT EXISTS waits_node ON waits(node_id);
|
|
298
|
-
`);
|
|
299
|
-
const mail = [];
|
|
300
|
-
for (const row of db.prepare('SELECT node_id FROM nodes').all()) {
|
|
301
|
-
const nodeId = row.node_id;
|
|
302
|
-
const inbox = readJsonLines(inboxPath(nodeId));
|
|
303
|
-
const cursor = existsSync(`${inboxPath(nodeId)}.cursor`) ? readFileSync(`${inboxPath(nodeId)}.cursor`, 'utf8').trim() : '';
|
|
304
|
-
const cursorIndex = inbox.findIndex((entry) => entry.entry_id === cursor);
|
|
305
|
-
const canceled = readCanceled(`${inboxPath(nodeId)}.canceled`);
|
|
306
|
-
inbox.forEach((entry, physicalIndex) => mail.push({ nodeId, wake: 1, source: 'inbox', fileRank: 0, physicalIndex, entry, acknowledged: cursorIndex >= 0 && physicalIndex <= cursorIndex, canceled: canceled.has(entry.entry_id), seq: 0 }));
|
|
307
|
-
for (const [fileRank, path] of [[0, `${passivePath(nodeId)}.draining`], [1, passivePath(nodeId)]]) {
|
|
308
|
-
readJsonLines(path).forEach((entry, physicalIndex) => mail.push({ nodeId, wake: 0, source: 'passive', fileRank, physicalIndex, entry, acknowledged: false, canceled: false, seq: 0 }));
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
mail.sort((a, b) => a.entry.ts.localeCompare(b.entry.ts) || a.nodeId.localeCompare(b.nodeId) || a.fileRank - b.fileRank || a.physicalIndex - b.physicalIndex);
|
|
312
|
-
mail.forEach((entry, index) => { entry.seq = index + 1; });
|
|
313
|
-
const groups = new Map();
|
|
314
|
-
for (const entry of mail) {
|
|
315
|
-
const key = `${entry.nodeId}\0${entry.source}`;
|
|
316
|
-
const group = groups.get(key) ?? [];
|
|
317
|
-
group.push(entry);
|
|
318
|
-
groups.set(key, group);
|
|
319
|
-
}
|
|
320
|
-
for (const group of groups.values()) {
|
|
321
|
-
const available = group.map((entry) => entry.seq).sort((a, b) => a - b);
|
|
322
|
-
group.sort((a, b) => a.fileRank - b.fileRank || a.physicalIndex - b.physicalIndex).forEach((entry, index) => { entry.seq = available[index]; });
|
|
323
|
-
}
|
|
324
|
-
const insertMessage = db.prepare(`INSERT INTO messages (message_id, seq, operation_id, created_at, sender_node_id, sender_name, kind, label, body_ref, body_json, disposition) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
325
|
-
const insertDelivery = db.prepare(`INSERT INTO deliveries (delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, attempts, acknowledged_at, canceled_at, created_at, updated_at) VALUES (?, ?, 'node_inbox', ?, ?, ?, ?, 0, ?, ?, ?, ?)`);
|
|
326
|
-
for (const imported of mail) {
|
|
327
|
-
const entry = imported.entry;
|
|
328
|
-
insertMessage.run(entry.entry_id, imported.seq, entry.operation_id, entry.ts, entry.from, entry.from_name ?? null, entry.kind, entry.label, entry.ref ?? null, entry.data === undefined ? null : JSON.stringify(entry.data), entry.disposition ?? null);
|
|
329
|
-
const timestamp = Date.parse(entry.ts);
|
|
330
|
-
const now = Number.isFinite(timestamp) ? timestamp : 0;
|
|
331
|
-
insertDelivery.run(newId(), entry.entry_id, imported.nodeId, entry.tier, imported.wake, imported.acknowledged ? 'acknowledged' : 'pending', imported.acknowledged ? now : null, imported.canceled ? now : null, now, now);
|
|
332
|
-
}
|
|
333
|
-
const actionRows = db.prepare('SELECT * FROM human_action_deliveries').all();
|
|
334
|
-
for (const row of actionRows) {
|
|
335
|
-
const messageId = newId();
|
|
336
|
-
insertMessage.run(messageId, nextSeq(db), newId(), new Date(row.created_at).toISOString(), null, null, 'completed', row.request_id, null, row.completion_json, null);
|
|
337
|
-
const state = row.state === 'running' ? 'handed_off' : row.state === 'accepted' ? 'acknowledged' : row.state;
|
|
338
|
-
db.prepare(`INSERT INTO deliveries (delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, attempts, next_attempt_at, claimed_at, claim_owner, acknowledged_at, failed_at, last_failure_json, adapter_json, idempotency_key, created_at, updated_at) VALUES (?, ?, 'external_action', 'human_action', 'normal', 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(newId(), messageId, state, row.attempt, row.next_attempt_at, row.claimed_at, row.claim_owner, row.accepted_at, row.permanent_failed_at, row.last_failure_json, JSON.stringify({ adapter: 'subprocess', argv: JSON.parse(row.argv_json), cwd: row.cwd }), `human-action:${row.request_id}`, row.created_at, row.updated_at);
|
|
339
|
-
}
|
|
340
|
-
const outcomeRows = db.prepare('SELECT * FROM node_outcome_deliveries').all();
|
|
341
|
-
for (const row of outcomeRows) {
|
|
342
|
-
const messageId = row.document_json === null ? null : newId();
|
|
343
|
-
if (messageId !== null)
|
|
344
|
-
insertMessage.run(messageId, nextSeq(db), newId(), new Date(row.created_at).toISOString(), null, null, 'completed', row.node_id, null, row.document_json, null);
|
|
345
|
-
const state = row.document_json === null ? 'armed' : row.state === 'running' ? 'handed_off' : row.state === 'accepted' ? 'acknowledged' : row.state;
|
|
346
|
-
db.prepare(`INSERT INTO deliveries (delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, attempts, next_attempt_at, claimed_at, claim_owner, acknowledged_at, failed_at, last_failure_json, adapter_json, idempotency_key, created_at, updated_at) VALUES (?, ?, 'external_action', ?, 'normal', 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(newId(), messageId, row.action_name, state, row.attempt, row.next_attempt_at, row.claimed_at, row.claim_owner, row.accepted_at, row.permanent_failed_at, row.last_failure_json, JSON.stringify({ adapter: 'subprocess', argv: JSON.parse(row.argv_json), cwd: row.cwd, config_origin: row.config_origin, payload: row.payload_json === null ? null : JSON.parse(row.payload_json) }), `node-outcome:${row.node_id}`, row.created_at, row.updated_at);
|
|
347
|
-
}
|
|
348
|
-
const waiting = db.prepare('SELECT node_id, waiting_for, waiting_for_generation FROM nodes WHERE waiting_for IS NOT NULL').all();
|
|
349
|
-
for (const row of waiting)
|
|
350
|
-
db.prepare("INSERT INTO waits (wait_id, node_id, kind, target_id, generation, created_at, satisfied_at) VALUES (?, ?, 'controller', ?, ?, ?, NULL)").run(newId(), row.node_id, row.waiting_for, row.waiting_for_generation, Date.now());
|
|
351
|
-
}
|
|
352
|
-
function nextSeq(db) {
|
|
353
|
-
return Number(db.prepare('SELECT COALESCE(MAX(seq), 0) AS seq FROM messages').get().seq) + 1;
|
|
354
|
-
}
|
|
93
|
+
`);const n=[];for(const t of e.prepare("SELECT node_id FROM nodes").all()){const a=t.node_id,l=R(T(a)),E=L(`${T(a)}.cursor`)?S(`${T(a)}.cursor`,"utf8").trim():"",A=l.findIndex(m=>m.entry_id===E),D=X(`${T(a)}.canceled`);l.forEach((m,f)=>n.push({nodeId:a,wake:1,source:"inbox",fileRank:0,physicalIndex:f,entry:m,acknowledged:A>=0&&f<=A,canceled:D.has(m.entry_id),seq:0}));for(const[m,f]of[[0,`${I(a)}.draining`],[1,I(a)]])R(f).forEach((x,v)=>n.push({nodeId:a,wake:0,source:"passive",fileRank:m,physicalIndex:v,entry:x,acknowledged:!1,canceled:!1,seq:0}))}n.sort((t,a)=>t.entry.ts.localeCompare(a.entry.ts)||t.nodeId.localeCompare(a.nodeId)||t.fileRank-a.fileRank||t.physicalIndex-a.physicalIndex),n.forEach((t,a)=>{t.seq=a+1});const d=new Map;for(const t of n){const a=`${t.nodeId}\0${t.source}`,l=d.get(a)??[];l.push(t),d.set(a,l)}for(const t of d.values()){const a=t.map(l=>l.seq).sort((l,E)=>l-E);t.sort((l,E)=>l.fileRank-E.fileRank||l.physicalIndex-E.physicalIndex).forEach((l,E)=>{l.seq=a[E]})}const r=e.prepare("INSERT INTO messages (message_id, seq, operation_id, created_at, sender_node_id, sender_name, kind, label, body_ref, body_json, disposition) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"),i=e.prepare("INSERT INTO deliveries (delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, attempts, acknowledged_at, canceled_at, created_at, updated_at) VALUES (?, ?, 'node_inbox', ?, ?, ?, ?, 0, ?, ?, ?, ?)");for(const t of n){const a=t.entry;r.run(a.entry_id,t.seq,a.operation_id,a.ts,a.from,a.from_name??null,a.kind,a.label,a.ref??null,a.data===void 0?null:JSON.stringify(a.data),a.disposition??null);const l=Date.parse(a.ts),E=Number.isFinite(l)?l:0;i.run(p(),a.entry_id,t.nodeId,a.tier,t.wake,t.acknowledged?"acknowledged":"pending",t.acknowledged?E:null,t.canceled?E:null,E,E)}const _=e.prepare("SELECT * FROM human_action_deliveries").all();for(const t of _){const a=p();r.run(a,k(e),p(),new Date(t.created_at).toISOString(),null,null,"completed",t.request_id,null,t.completion_json,null);const l=t.state==="running"?"handed_off":t.state==="accepted"?"acknowledged":t.state;e.prepare("INSERT INTO deliveries (delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, attempts, next_attempt_at, claimed_at, claim_owner, acknowledged_at, failed_at, last_failure_json, adapter_json, idempotency_key, created_at, updated_at) VALUES (?, ?, 'external_action', 'human_action', 'normal', 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(p(),a,l,t.attempt,t.next_attempt_at,t.claimed_at,t.claim_owner,t.accepted_at,t.permanent_failed_at,t.last_failure_json,JSON.stringify({adapter:"subprocess",argv:JSON.parse(t.argv_json),cwd:t.cwd}),`human-action:${t.request_id}`,t.created_at,t.updated_at)}const s=e.prepare("SELECT * FROM node_outcome_deliveries").all();for(const t of s){const a=t.document_json===null?null:p();a!==null&&r.run(a,k(e),p(),new Date(t.created_at).toISOString(),null,null,"completed",t.node_id,null,t.document_json,null);const l=t.document_json===null?"armed":t.state==="running"?"handed_off":t.state==="accepted"?"acknowledged":t.state;e.prepare("INSERT INTO deliveries (delivery_id, message_id, destination_kind, destination_id, urgency, wake, state, attempts, next_attempt_at, claimed_at, claim_owner, acknowledged_at, failed_at, last_failure_json, adapter_json, idempotency_key, created_at, updated_at) VALUES (?, ?, 'external_action', ?, 'normal', 0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(p(),a,t.action_name,l,t.attempt,t.next_attempt_at,t.claimed_at,t.claim_owner,t.accepted_at,t.permanent_failed_at,t.last_failure_json,JSON.stringify({adapter:"subprocess",argv:JSON.parse(t.argv_json),cwd:t.cwd,config_origin:t.config_origin,payload:t.payload_json===null?null:JSON.parse(t.payload_json)}),`node-outcome:${t.node_id}`,t.created_at,t.updated_at)}const c=e.prepare("SELECT node_id, waiting_for, waiting_for_generation FROM nodes WHERE waiting_for IS NOT NULL").all();for(const t of c)e.prepare("INSERT INTO waits (wait_id, node_id, kind, target_id, generation, created_at, satisfied_at) VALUES (?, ?, 'controller', ?, ?, ?, NULL)").run(p(),t.node_id,t.waiting_for,t.waiting_for_generation,Date.now())}o(te,"migrateMessagingState");function k(e){return Number(e.prepare("SELECT COALESCE(MAX(seq), 0) AS seq FROM messages").get().seq)+1}o(k,"nextSeq");export{$ as acknowledgeNodeMail,z as acknowledgedNodeMailCount,ee as activateArmedExternalActionDelivery,Z as armExternalActionDelivery,G as claimExternalActionDelivery,q as claimKickoffMail,b as claimNodeMail,P as dueExternalActionDeliveries,V as hasUnseenWakeMail,Q as hasWakeMailSince,J as messageBodyForDelivery,te as migrateMessagingState,K as readExternalActionDelivery,B as resetHandedOffDeliveries,Y as resetStaleExecutionMail,h as settleDelivery};
|
|
@@ -1,8 +1 @@
|
|
|
1
|
-
|
|
2
|
-
// records, how an attempt settles, and when the next attempt becomes due. The
|
|
3
|
-
// canvas modules own the rows; `daemon/delivery/run-delivery.ts` owns the
|
|
4
|
-
// process that produces these settlements.
|
|
5
|
-
/** Durable exponential retry delay for the attempt that just failed. */
|
|
6
|
-
export function deliveryBackoffMs(attempt) {
|
|
7
|
-
return Math.min(5_000 * 2 ** (attempt - 1), 3_600_000);
|
|
8
|
-
}
|
|
1
|
+
var t=Object.defineProperty;var n=(e,r)=>t(e,"name",{value:r,configurable:!0});function i(e){return Math.min(5e3*2**(e-1),36e5)}n(i,"deliveryBackoffMs");export{i as deliveryBackoffMs};
|