@north-light/crouter 0.3.318 → 0.3.320
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 +6 -4
- package/runtime.lock.json +5 -5
- package/scripts/pack-minify.mjs +108 -0
- 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,44 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from 'node:fs';
|
|
3
|
-
import { join, resolve } from 'node:path';
|
|
4
|
-
import { openDb, withCanvasWrite } from './db.js';
|
|
5
|
-
import { jobDir, nodesRoot } from './paths.js';
|
|
6
|
-
import { errorClassFromFault } from '../fault-classifier.js';
|
|
7
|
-
import { emitEvent } from '../events/emit.js';
|
|
8
|
-
import { operationIdContext, validateOperationId } from '../events/operation-id.js';
|
|
9
|
-
export const FAULT_QUIET_MS = 5 * 60_000;
|
|
10
|
-
const MESSAGE_CAP = 500;
|
|
11
|
-
const FAULT_LINKS = ['pi→provider', 'viewer↔broker', 'relay↔broker', 'viewer↔crtrd', 'daemon→node', 'crtr→pi'];
|
|
12
|
-
const LEGACY_FAULT_LINKS = [...FAULT_LINKS, 'broker↔crtrd'];
|
|
13
|
-
const FAULT_KINDS = ['rate-limit', 'overloaded', 'connection', 'auth', 'protocol', 'context-overflow', 'other', 'wedged', 'model-not-found'];
|
|
14
|
-
const RETRY_DISPOSITIONS = ['auto', 'manual', 'fatal'];
|
|
15
|
-
const RETRY_OWNERS = ['sdk', 'daemon', 'client'];
|
|
16
|
-
const EPISODE_STATES = ['pending', 'admitted', 'invalidated'];
|
|
17
|
-
function now() {
|
|
18
|
-
return new Date().toISOString();
|
|
19
|
-
}
|
|
20
|
-
function tableColumns(db, table) {
|
|
21
|
-
return new Set(db.prepare(`PRAGMA table_info(${table})`).all().map(({ name }) => name));
|
|
22
|
-
}
|
|
23
|
-
function addExecutionColumns(db) {
|
|
24
|
-
const columns = tableColumns(db, 'executions');
|
|
25
|
-
const additions = [
|
|
26
|
-
['turn_open_at', 'TEXT'],
|
|
27
|
-
['turn_progress_at', 'TEXT'],
|
|
28
|
-
['turn_closed_at', 'TEXT'],
|
|
29
|
-
['turn_end_reason', "TEXT CHECK (turn_end_reason IS NULL OR turn_end_reason IN ('settled', 'teardown-aborted'))"],
|
|
30
|
-
['exit_diagnostic_json', 'TEXT'],
|
|
31
|
-
];
|
|
32
|
-
for (const [name, definition] of additions)
|
|
33
|
-
if (!columns.has(name))
|
|
34
|
-
db.exec(`ALTER TABLE executions ADD COLUMN ${name} ${definition}`);
|
|
35
|
-
}
|
|
36
|
-
function createFaultTable(db) {
|
|
37
|
-
db.exec(`
|
|
1
|
+
var re=Object.defineProperty;var o=(e,t)=>re(e,"name",{value:t,configurable:!0});import{randomUUID as k}from"node:crypto";import{existsSync as _,readdirSync as ne,readFileSync as ie,realpathSync as oe,statSync as se}from"node:fs";import{join as f,resolve as de}from"node:path";import{openDb as T,withCanvasWrite as p}from"./db.js";import{jobDir as ae,nodesRoot as C}from"./paths.js";import{errorClassFromFault as P}from"../fault-classifier.js";import{emitEvent as w}from"../events/emit.js";import{operationIdContext as M,validateOperationId as X}from"../events/operation-id.js";const ke=5*6e4,ue=500,j=["pi\u2192provider","viewer\u2194broker","relay\u2194broker","viewer\u2194crtrd","daemon\u2192node","crtr\u2192pi"],ce=[...j,"broker\u2194crtrd"],pe=["rate-limit","overloaded","connection","auth","protocol","context-overflow","other","wedged","model-not-found"],_e=["auto","manual","fatal"],le=["sdk","daemon","client"],Ee=["pending","admitted","invalidated"];function a(){return new Date().toISOString()}o(a,"now");function $(e,t){return new Set(e.prepare(`PRAGMA table_info(${t})`).all().map(({name:r})=>r))}o($,"tableColumns");function fe(e){const t=$(e,"executions"),r=[["turn_open_at","TEXT"],["turn_progress_at","TEXT"],["turn_closed_at","TEXT"],["turn_end_reason","TEXT CHECK (turn_end_reason IS NULL OR turn_end_reason IN ('settled', 'teardown-aborted'))"],["exit_diagnostic_json","TEXT"]];for(const[n,i]of r)t.has(n)||e.exec(`ALTER TABLE executions ADD COLUMN ${n} ${i}`)}o(fe,"addExecutionColumns");function ye(e){e.exec(`
|
|
38
2
|
CREATE TABLE IF NOT EXISTS node_faults (
|
|
39
3
|
fault_id TEXT PRIMARY KEY,
|
|
40
4
|
node_id TEXT NOT NULL REFERENCES nodes(node_id) ON DELETE CASCADE,
|
|
41
|
-
link TEXT NOT NULL CHECK (link IN ('pi
|
|
5
|
+
link TEXT NOT NULL CHECK (link IN ('pi\u2192provider', 'viewer\u2194broker', 'relay\u2194broker', 'viewer\u2194crtrd', 'daemon\u2192node', 'crtr\u2192pi')),
|
|
42
6
|
op TEXT NOT NULL,
|
|
43
7
|
kind TEXT NOT NULL CHECK (kind IN ('rate-limit', 'overloaded', 'connection', 'auth', 'protocol', 'context-overflow', 'other', 'wedged', 'model-not-found')),
|
|
44
8
|
message TEXT NOT NULL,
|
|
@@ -59,530 +23,4 @@ CREATE TABLE IF NOT EXISTS node_faults (
|
|
|
59
23
|
);
|
|
60
24
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_node_faults_active ON node_faults(node_id) WHERE active = 1;
|
|
61
25
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_node_faults_episode ON node_faults(node_id) WHERE episode_state IS NOT NULL;
|
|
62
|
-
`);
|
|
63
|
-
}
|
|
64
|
-
function contains(values, value) {
|
|
65
|
-
return typeof value === 'string' && values.includes(value);
|
|
66
|
-
}
|
|
67
|
-
function isRecord(value) {
|
|
68
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
69
|
-
}
|
|
70
|
-
export function parseProviderError(value) {
|
|
71
|
-
if (!isRecord(value) || typeof value.provider !== 'string' || value.provider === '' || typeof value.model !== 'string' || value.model === '')
|
|
72
|
-
return undefined;
|
|
73
|
-
const status = typeof value.status === 'number' && Number.isFinite(value.status) ? value.status : undefined;
|
|
74
|
-
const code = typeof value.code === 'string' || typeof value.code === 'number' ? value.code : undefined;
|
|
75
|
-
const errno = typeof value.errno === 'string' ? value.errno : undefined;
|
|
76
|
-
const body = typeof value.body === 'string' ? value.body : undefined;
|
|
77
|
-
const causes = Array.isArray(value.causes)
|
|
78
|
-
? value.causes.flatMap((item) => {
|
|
79
|
-
if (!isRecord(item))
|
|
80
|
-
return [];
|
|
81
|
-
const cause = {
|
|
82
|
-
...(typeof item.message === 'string' ? { message: item.message } : {}),
|
|
83
|
-
...(typeof item.status === 'number' && Number.isFinite(item.status) ? { status: item.status } : {}),
|
|
84
|
-
...(typeof item.code === 'string' || typeof item.code === 'number' ? { code: item.code } : {}),
|
|
85
|
-
...(typeof item.errno === 'string' ? { errno: item.errno } : {}),
|
|
86
|
-
...(typeof item.body === 'string' ? { body: item.body } : {}),
|
|
87
|
-
};
|
|
88
|
-
return Object.keys(cause).length === 0 ? [] : [cause];
|
|
89
|
-
})
|
|
90
|
-
: undefined;
|
|
91
|
-
return {
|
|
92
|
-
provider: value.provider,
|
|
93
|
-
model: value.model,
|
|
94
|
-
...(status === undefined ? {} : { status }),
|
|
95
|
-
...(code === undefined ? {} : { code }),
|
|
96
|
-
...(errno === undefined ? {} : { errno }),
|
|
97
|
-
...(body === undefined ? {} : { body }),
|
|
98
|
-
...(causes === undefined || causes.length === 0 ? {} : { causes }),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function parseLegacyFault(raw) {
|
|
102
|
-
try {
|
|
103
|
-
const parsed = JSON.parse(raw);
|
|
104
|
-
if (!contains(LEGACY_FAULT_LINKS, parsed.link) || typeof parsed.op !== 'string' || parsed.op === '' || !contains(FAULT_KINDS, parsed.kind) || typeof parsed.message !== 'string' || typeof parsed.since !== 'string')
|
|
105
|
-
return null;
|
|
106
|
-
const operationId = validateOperationId(parsed.operation_id);
|
|
107
|
-
if (!isRecord(parsed.retry) || !contains(RETRY_DISPOSITIONS, parsed.retry.disposition))
|
|
108
|
-
return null;
|
|
109
|
-
if (parsed.retry.by !== undefined && !contains(RETRY_OWNERS, parsed.retry.by))
|
|
110
|
-
return null;
|
|
111
|
-
if (parsed.retry.attempt !== undefined && typeof parsed.retry.attempt !== 'number')
|
|
112
|
-
return null;
|
|
113
|
-
if (parsed.retry.max !== undefined && typeof parsed.retry.max !== 'number')
|
|
114
|
-
return null;
|
|
115
|
-
if (parsed.retry.nextAt !== undefined && typeof parsed.retry.nextAt !== 'string')
|
|
116
|
-
return null;
|
|
117
|
-
if (parsed.anchorEntryId !== undefined && (typeof parsed.anchorEntryId !== 'string' || parsed.anchorEntryId === ''))
|
|
118
|
-
return null;
|
|
119
|
-
const providerError = parsed.providerError === undefined ? undefined : parseProviderError(parsed.providerError);
|
|
120
|
-
if (parsed.providerError !== undefined && providerError === undefined)
|
|
121
|
-
return null;
|
|
122
|
-
return {
|
|
123
|
-
link: parsed.link,
|
|
124
|
-
op: parsed.op,
|
|
125
|
-
kind: parsed.kind,
|
|
126
|
-
retry: {
|
|
127
|
-
disposition: parsed.retry.disposition,
|
|
128
|
-
...(parsed.retry.by === undefined ? {} : { by: parsed.retry.by }),
|
|
129
|
-
...(parsed.retry.attempt === undefined ? {} : { attempt: parsed.retry.attempt }),
|
|
130
|
-
...(parsed.retry.max === undefined ? {} : { max: parsed.retry.max }),
|
|
131
|
-
...(parsed.retry.nextAt === undefined ? {} : { nextAt: parsed.retry.nextAt }),
|
|
132
|
-
},
|
|
133
|
-
message: parsed.message,
|
|
134
|
-
since: parsed.since,
|
|
135
|
-
operation_id: operationId,
|
|
136
|
-
...(parsed.anchorEntryId === undefined ? {} : { anchorEntryId: parsed.anchorEntryId }),
|
|
137
|
-
...(providerError === undefined ? {} : { providerError }),
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
catch {
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
function canonicalPath(path) {
|
|
145
|
-
const absolute = resolve(path);
|
|
146
|
-
try {
|
|
147
|
-
return realpathSync(absolute);
|
|
148
|
-
}
|
|
149
|
-
catch {
|
|
150
|
-
return absolute;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
function parseLegacyEpisode(raw) {
|
|
154
|
-
try {
|
|
155
|
-
const parsed = JSON.parse(raw);
|
|
156
|
-
if (!contains(EPISODE_STATES, parsed.state) || typeof parsed.sessionFile !== 'string' || parsed.sessionFile === '')
|
|
157
|
-
return null;
|
|
158
|
-
const fault = JSON.stringify(parsed.fault);
|
|
159
|
-
const parsedFault = parseLegacyFault(fault);
|
|
160
|
-
if (parsedFault === null || parsedFault.link !== 'pi→provider' || parsedFault.retry.disposition !== 'auto' || parsedFault.retry.by !== 'daemon')
|
|
161
|
-
return null;
|
|
162
|
-
const anchor = parsed.anchorEntryId;
|
|
163
|
-
if (anchor !== null && typeof anchor !== 'string')
|
|
164
|
-
return null;
|
|
165
|
-
if ((parsedFault.anchorEntryId ?? null) !== anchor)
|
|
166
|
-
return null;
|
|
167
|
-
return { state: parsed.state, sessionFile: canonicalPath(parsed.sessionFile), fault: parsedFault };
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
function resolveOperationId(explicit) {
|
|
174
|
-
if (explicit !== undefined)
|
|
175
|
-
return validateOperationId(explicit);
|
|
176
|
-
const current = operationIdContext.current();
|
|
177
|
-
return current ?? operationIdContext.fresh((operationId) => operationId);
|
|
178
|
-
}
|
|
179
|
-
function clampMessage(message) {
|
|
180
|
-
return message.slice(0, MESSAGE_CAP);
|
|
181
|
-
}
|
|
182
|
-
function faultPriority(fault) {
|
|
183
|
-
if (fault.link === 'pi→provider' && fault.retry.disposition === 'auto' && fault.retry.by === 'daemon')
|
|
184
|
-
return 3;
|
|
185
|
-
if (fault.retry.disposition === 'fatal')
|
|
186
|
-
return 2;
|
|
187
|
-
return 1;
|
|
188
|
-
}
|
|
189
|
-
function encodeFault(fault) {
|
|
190
|
-
return {
|
|
191
|
-
link: fault.link,
|
|
192
|
-
op: fault.op,
|
|
193
|
-
kind: fault.kind,
|
|
194
|
-
message: fault.message,
|
|
195
|
-
since: fault.since,
|
|
196
|
-
operationId: fault.operation_id,
|
|
197
|
-
anchorEntryId: fault.anchorEntryId ?? null,
|
|
198
|
-
retryDisposition: fault.retry.disposition,
|
|
199
|
-
retryBy: fault.retry.by ?? null,
|
|
200
|
-
retryAttempt: fault.retry.attempt ?? null,
|
|
201
|
-
retryMax: fault.retry.max ?? null,
|
|
202
|
-
retryNextAt: fault.retry.nextAt ?? null,
|
|
203
|
-
providerError: fault.providerError === undefined ? null : JSON.stringify(fault.providerError),
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
function hydrateFault(row) {
|
|
207
|
-
const provider = row['provider_error_json'];
|
|
208
|
-
const providerError = typeof provider === 'string' ? parseProviderError(JSON.parse(provider)) : undefined;
|
|
209
|
-
if (typeof provider === 'string' && providerError === undefined)
|
|
210
|
-
throw new Error(`invalid provider error on stored fault ${row['fault_id']}`);
|
|
211
|
-
const retry = {
|
|
212
|
-
disposition: row['retry_disposition'],
|
|
213
|
-
...(row['retry_by'] === null ? {} : { by: row['retry_by'] }),
|
|
214
|
-
...(row['retry_attempt'] === null ? {} : { attempt: row['retry_attempt'] }),
|
|
215
|
-
...(row['retry_max'] === null ? {} : { max: row['retry_max'] }),
|
|
216
|
-
...(row['retry_next_at'] === null ? {} : { nextAt: row['retry_next_at'] }),
|
|
217
|
-
};
|
|
218
|
-
return {
|
|
219
|
-
faultId: row['fault_id'],
|
|
220
|
-
link: row['link'],
|
|
221
|
-
op: row['op'],
|
|
222
|
-
kind: row['kind'],
|
|
223
|
-
message: row['message'],
|
|
224
|
-
since: row['since'],
|
|
225
|
-
operation_id: row['operation_id'],
|
|
226
|
-
retry,
|
|
227
|
-
...(row['anchor_entry_id'] === null ? {} : { anchorEntryId: row['anchor_entry_id'] }),
|
|
228
|
-
...(providerError === undefined ? {} : { providerError }),
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
function activeFault(db, nodeId) {
|
|
232
|
-
const row = db.prepare('SELECT * FROM node_faults WHERE node_id = ? AND active = 1').get(nodeId);
|
|
233
|
-
return row === undefined ? null : hydrateFault(row);
|
|
234
|
-
}
|
|
235
|
-
function storedFault(input) {
|
|
236
|
-
if (!contains(FAULT_LINKS, input.link))
|
|
237
|
-
throw new Error(`fault link is not durable: ${input.link}`);
|
|
238
|
-
return {
|
|
239
|
-
link: input.link,
|
|
240
|
-
op: input.op,
|
|
241
|
-
kind: input.kind,
|
|
242
|
-
retry: input.retry,
|
|
243
|
-
message: clampMessage(input.message),
|
|
244
|
-
since: input.since ?? now(),
|
|
245
|
-
operation_id: resolveOperationId(input.operation_id),
|
|
246
|
-
...(typeof input.anchorEntryId === 'string' && input.anchorEntryId !== '' ? { anchorEntryId: input.anchorEntryId } : {}),
|
|
247
|
-
...(input.providerError === undefined ? {} : { providerError: input.providerError }),
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
function emitRecordedFault(nodeId, fault) {
|
|
251
|
-
emitEvent({
|
|
252
|
-
level: fault.retry.disposition === 'fatal' ? 'error' : 'warn',
|
|
253
|
-
event: 'fault.recorded',
|
|
254
|
-
operation_id: fault.operation_id,
|
|
255
|
-
node_id: nodeId,
|
|
256
|
-
error_class: errorClassFromFault(fault),
|
|
257
|
-
fields: {
|
|
258
|
-
link: fault.link, op: fault.op, kind: fault.kind, retry: fault.retry, message: fault.message,
|
|
259
|
-
...(fault.anchorEntryId === undefined ? {} : { anchor_entry_id: fault.anchorEntryId }),
|
|
260
|
-
...(fault.providerError === undefined ? {} : { provider_error: fault.providerError }),
|
|
261
|
-
},
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
function insertFault(db, nodeId, fault, active, episode) {
|
|
265
|
-
const faultId = randomUUID();
|
|
266
|
-
const encoded = encodeFault(fault);
|
|
267
|
-
const at = now();
|
|
268
|
-
db.prepare('INSERT INTO node_faults (fault_id, node_id, link, op, kind, message, since, operation_id, anchor_entry_id, retry_disposition, retry_by, retry_attempt, retry_max, retry_next_at, provider_error_json, active, episode_state, episode_binding_id, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)')
|
|
269
|
-
.run(faultId, nodeId, encoded.link, encoded.op, encoded.kind, encoded.message, encoded.since, encoded.operationId, encoded.anchorEntryId, encoded.retryDisposition, encoded.retryBy, encoded.retryAttempt, encoded.retryMax, encoded.retryNextAt, encoded.providerError, active ? 1 : 0, episode?.state ?? null, episode?.bindingId ?? null, at, at);
|
|
270
|
-
return { ...fault, faultId };
|
|
271
|
-
}
|
|
272
|
-
function updateFault(db, faultId, fault, episode) {
|
|
273
|
-
const encoded = encodeFault(fault);
|
|
274
|
-
db.prepare('UPDATE node_faults SET link = ?, op = ?, kind = ?, message = ?, since = ?, operation_id = ?, anchor_entry_id = ?, retry_disposition = ?, retry_by = ?, retry_attempt = ?, retry_max = ?, retry_next_at = ?, provider_error_json = ?, episode_state = COALESCE(?, episode_state), episode_binding_id = COALESCE(?, episode_binding_id), updated_at = ? WHERE fault_id = ?')
|
|
275
|
-
.run(encoded.link, encoded.op, encoded.kind, encoded.message, encoded.since, encoded.operationId, encoded.anchorEntryId, encoded.retryDisposition, encoded.retryBy, encoded.retryAttempt, encoded.retryMax, encoded.retryNextAt, encoded.providerError, episode?.state ?? null, episode?.bindingId ?? null, now(), faultId);
|
|
276
|
-
return { ...fault, faultId };
|
|
277
|
-
}
|
|
278
|
-
function deleteIfUnretained(db, faultId) {
|
|
279
|
-
db.prepare('DELETE FROM node_faults WHERE fault_id = ? AND active = 0 AND episode_state IS NULL').run(faultId);
|
|
280
|
-
}
|
|
281
|
-
function replaceActiveFault(db, nodeId, fault, episode) {
|
|
282
|
-
const current = activeFault(db, nodeId);
|
|
283
|
-
if (current === null) {
|
|
284
|
-
// A revive clears the active marker while retaining its bound provider-retry
|
|
285
|
-
// episode. Startup re-records that same fault before arming its retry, so
|
|
286
|
-
// restore the retained row instead of creating an unpaired active fault.
|
|
287
|
-
const retained = db.prepare('SELECT fault_id, link, kind, since, operation_id FROM node_faults WHERE node_id = ? AND active = 0 AND episode_state IS NOT NULL').get(nodeId);
|
|
288
|
-
if (retained !== undefined && retained.link === fault.link && retained.kind === fault.kind && retained.since === fault.since && retained.operation_id === fault.operation_id) {
|
|
289
|
-
db.prepare('UPDATE node_faults SET active = 1, updated_at = ? WHERE fault_id = ?').run(now(), retained.fault_id);
|
|
290
|
-
return updateFault(db, retained.fault_id, fault);
|
|
291
|
-
}
|
|
292
|
-
return insertFault(db, nodeId, fault, true, episode);
|
|
293
|
-
}
|
|
294
|
-
if (current.link === fault.link && current.kind === fault.kind) {
|
|
295
|
-
const retry = { ...current.retry, ...fault.retry };
|
|
296
|
-
if (fault.retry.disposition === 'fatal' && !('nextAt' in fault.retry))
|
|
297
|
-
delete retry.nextAt;
|
|
298
|
-
return updateFault(db, current.faultId, { ...fault, since: current.since, anchorEntryId: current.anchorEntryId ?? fault.anchorEntryId, retry }, episode);
|
|
299
|
-
}
|
|
300
|
-
if (faultPriority(current) > faultPriority(fault))
|
|
301
|
-
return null;
|
|
302
|
-
db.prepare('UPDATE node_faults SET active = 0, updated_at = ? WHERE fault_id = ?').run(now(), current.faultId);
|
|
303
|
-
deleteIfUnretained(db, current.faultId);
|
|
304
|
-
return insertFault(db, nodeId, fault, true, episode);
|
|
305
|
-
}
|
|
306
|
-
function liveBinding(db, nodeId, sessionId) {
|
|
307
|
-
const row = db.prepare('SELECT binding_id FROM sessions WHERE node_id = ? AND session_id = ? AND unbound_at IS NULL').get(nodeId, sessionId);
|
|
308
|
-
return row?.binding_id ?? null;
|
|
309
|
-
}
|
|
310
|
-
export function openTurn(executionId, _opts) {
|
|
311
|
-
return withCanvasWrite((db) => {
|
|
312
|
-
const at = now();
|
|
313
|
-
const open = db.prepare("UPDATE executions SET turn_progress_at = ? WHERE execution_id = ? AND state != 'exited' AND turn_open_at IS NOT NULL AND turn_closed_at IS NULL").run(at, executionId);
|
|
314
|
-
if (open.changes > 0)
|
|
315
|
-
return true;
|
|
316
|
-
return db.prepare("UPDATE executions SET turn_open_at = ?, turn_progress_at = ?, turn_closed_at = NULL, turn_end_reason = NULL WHERE execution_id = ? AND state != 'exited'").run(at, at, executionId).changes > 0;
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
export function recordTurnProgress(executionId) {
|
|
320
|
-
return withCanvasWrite((db) => db.prepare("UPDATE executions SET turn_progress_at = ? WHERE execution_id = ? AND state != 'exited' AND turn_open_at IS NOT NULL AND turn_closed_at IS NULL").run(now(), executionId).changes > 0);
|
|
321
|
-
}
|
|
322
|
-
export function closeTurn(executionId, opts) {
|
|
323
|
-
return withCanvasWrite((db) => db.prepare("UPDATE executions SET turn_closed_at = ?, turn_end_reason = ? WHERE execution_id = ? AND state != 'exited' AND turn_open_at IS NOT NULL AND turn_closed_at IS NULL").run(now(), opts.endReason, executionId).changes > 0);
|
|
324
|
-
}
|
|
325
|
-
export function recordTransportPoisonVerdict(executionId, verdict) {
|
|
326
|
-
if (!Number.isInteger(verdict.consecutivePasses) || verdict.consecutivePasses < 1 || verdict.routes.length === 0 || !verdict.routes.every((route) => route !== ''))
|
|
327
|
-
throw new Error('invalid transport-poison verdict');
|
|
328
|
-
return withCanvasWrite((db) => db.prepare("UPDATE executions SET exit_diagnostic_json = ? WHERE execution_id = ? AND state != 'exited'").run(JSON.stringify({ schema: 'crtr.execution-exit-diagnostic/v1', transport_poison: { consecutive_passes: verdict.consecutivePasses, routes: verdict.routes } }), executionId).changes > 0);
|
|
329
|
-
}
|
|
330
|
-
export function readTransportPoisonVerdict(nodeId) {
|
|
331
|
-
const row = openDb().prepare("SELECT exit_diagnostic_json FROM executions WHERE node_id = ? ORDER BY rowid DESC LIMIT 1").get(nodeId);
|
|
332
|
-
if (row === undefined || row.exit_diagnostic_json === null)
|
|
333
|
-
return null;
|
|
334
|
-
try {
|
|
335
|
-
const parsed = JSON.parse(row.exit_diagnostic_json);
|
|
336
|
-
const poison = parsed.transport_poison;
|
|
337
|
-
if (parsed.schema !== 'crtr.execution-exit-diagnostic/v1' || poison === undefined || !Number.isInteger(poison.consecutive_passes) || poison.consecutive_passes < 1 || !Array.isArray(poison.routes) || poison.routes.length === 0 || !poison.routes.every((route) => typeof route === 'string' && route !== ''))
|
|
338
|
-
return null;
|
|
339
|
-
return { consecutivePasses: poison.consecutive_passes, routes: poison.routes };
|
|
340
|
-
}
|
|
341
|
-
catch {
|
|
342
|
-
return null;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
export function readLiveTurn(nodeId) {
|
|
346
|
-
const row = openDb().prepare("SELECT turn_open_at, turn_closed_at, turn_progress_at FROM executions WHERE node_id = ? AND state != 'exited'").get(nodeId);
|
|
347
|
-
if (row === undefined)
|
|
348
|
-
return null;
|
|
349
|
-
return { busy: row.turn_open_at !== null && row.turn_closed_at === null, progressAt: row.turn_progress_at };
|
|
350
|
-
}
|
|
351
|
-
export function readInterruptedTurn(nodeId) {
|
|
352
|
-
const db = openDb();
|
|
353
|
-
const bearing = db.prepare("SELECT turn_closed_at, turn_progress_at FROM executions WHERE node_id = ? AND turn_open_at IS NOT NULL ORDER BY rowid DESC LIMIT 1").get(nodeId);
|
|
354
|
-
if (bearing === undefined)
|
|
355
|
-
return null;
|
|
356
|
-
const latest = db.prepare('SELECT turn_end_reason FROM executions WHERE node_id = ? ORDER BY rowid DESC LIMIT 1').get(nodeId);
|
|
357
|
-
return { interrupted: bearing.turn_closed_at === null || latest?.turn_end_reason === 'teardown-aborted', progressAt: bearing.turn_progress_at };
|
|
358
|
-
}
|
|
359
|
-
export function recordFault(nodeId, input) {
|
|
360
|
-
const fault = storedFault(input);
|
|
361
|
-
emitRecordedFault(nodeId, fault);
|
|
362
|
-
return withCanvasWrite((db) => replaceActiveFault(db, nodeId, fault));
|
|
363
|
-
}
|
|
364
|
-
export function clearFault(nodeId, opts) {
|
|
365
|
-
return withCanvasWrite((db) => {
|
|
366
|
-
const current = activeFault(db, nodeId);
|
|
367
|
-
if (current === null || (opts?.link !== undefined && current.link !== opts.link))
|
|
368
|
-
return false;
|
|
369
|
-
const episode = db.prepare('SELECT episode_state FROM node_faults WHERE fault_id = ?').get(current.faultId);
|
|
370
|
-
db.prepare('UPDATE node_faults SET active = 0, updated_at = ? WHERE fault_id = ?').run(now(), current.faultId);
|
|
371
|
-
if (episode.episode_state === 'pending' && opts?.preserveEpisode !== true)
|
|
372
|
-
db.prepare('UPDATE node_faults SET episode_state = NULL, episode_binding_id = NULL, updated_at = ? WHERE fault_id = ?').run(now(), current.faultId);
|
|
373
|
-
deleteIfUnretained(db, current.faultId);
|
|
374
|
-
const operationId = resolveOperationId();
|
|
375
|
-
emitEvent({
|
|
376
|
-
level: 'info', event: 'fault.cleared', operation_id: operationId, node_id: nodeId, error_class: errorClassFromFault(current),
|
|
377
|
-
fields: { cleared_fault_operation_id: current.operation_id, link: current.link, op: current.op, kind: current.kind, retry: current.retry, message: current.message, since: current.since, ...(current.anchorEntryId === undefined ? {} : { anchor_entry_id: current.anchorEntryId }) },
|
|
378
|
-
});
|
|
379
|
-
return true;
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
export function readFault(nodeId) {
|
|
383
|
-
return activeFault(openDb(), nodeId);
|
|
384
|
-
}
|
|
385
|
-
export function recordPendingEpisode(nodeId, input) {
|
|
386
|
-
const fault = storedFault(input.input);
|
|
387
|
-
if (fault.link !== 'pi→provider' || fault.retry.disposition !== 'auto' || fault.retry.by !== 'daemon')
|
|
388
|
-
throw new Error('provider retry episode requires an automatic daemon provider fault');
|
|
389
|
-
emitRecordedFault(nodeId, fault);
|
|
390
|
-
return withCanvasWrite((db) => {
|
|
391
|
-
const bindingId = liveBinding(db, nodeId, input.sessionId);
|
|
392
|
-
if (bindingId === null)
|
|
393
|
-
return null;
|
|
394
|
-
const current = activeFault(db, nodeId);
|
|
395
|
-
if (current !== null && (current.link !== fault.link || current.kind !== fault.kind) && faultPriority(current) > faultPriority(fault))
|
|
396
|
-
return null;
|
|
397
|
-
const existingEpisodes = db.prepare('SELECT fault_id FROM node_faults WHERE node_id = ? AND episode_state IS NOT NULL').all(nodeId);
|
|
398
|
-
db.prepare('UPDATE node_faults SET episode_state = NULL, episode_binding_id = NULL, updated_at = ? WHERE node_id = ? AND episode_state IS NOT NULL').run(now(), nodeId);
|
|
399
|
-
for (const row of existingEpisodes)
|
|
400
|
-
deleteIfUnretained(db, row.fault_id);
|
|
401
|
-
const stored = replaceActiveFault(db, nodeId, fault, { state: 'pending', bindingId });
|
|
402
|
-
if (stored === null)
|
|
403
|
-
return null;
|
|
404
|
-
db.prepare('UPDATE node_faults SET episode_state = ?, episode_binding_id = ?, updated_at = ? WHERE fault_id = ?').run('pending', bindingId, now(), stored.faultId);
|
|
405
|
-
return stored;
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
export function admitEpisode(nodeId, input) {
|
|
409
|
-
return withCanvasWrite((db) => {
|
|
410
|
-
const bindingId = liveBinding(db, nodeId, input.sessionId);
|
|
411
|
-
if (bindingId === null)
|
|
412
|
-
return false;
|
|
413
|
-
return db.prepare("UPDATE node_faults SET episode_state = 'admitted', retry_disposition = ?, retry_by = ?, retry_attempt = ?, retry_max = ?, retry_next_at = ?, updated_at = ? WHERE node_id = ? AND fault_id = ? AND episode_state = 'pending' AND episode_binding_id = ?").run(input.retry.disposition, input.retry.by ?? null, input.retry.attempt ?? null, input.retry.max ?? null, input.retry.nextAt ?? null, now(), nodeId, input.faultId, bindingId).changes > 0;
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
export function reopenEpisode(nodeId, input) {
|
|
417
|
-
return withCanvasWrite((db) => {
|
|
418
|
-
const bindingId = liveBinding(db, nodeId, input.sessionId);
|
|
419
|
-
if (bindingId === null)
|
|
420
|
-
return false;
|
|
421
|
-
return db.prepare("UPDATE node_faults SET episode_state = 'pending', updated_at = ? WHERE node_id = ? AND episode_state = 'admitted' AND episode_binding_id = ?").run(now(), nodeId, bindingId).changes > 0;
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
export function invalidateEpisode(nodeId, input) {
|
|
425
|
-
return withCanvasWrite((db) => {
|
|
426
|
-
const bindingId = liveBinding(db, nodeId, input.sessionId);
|
|
427
|
-
if (bindingId === null)
|
|
428
|
-
return false;
|
|
429
|
-
return db.prepare("UPDATE node_faults SET episode_state = 'invalidated', updated_at = ? WHERE node_id = ? AND episode_state != 'invalidated' AND episode_state IS NOT NULL AND episode_binding_id = ?").run(now(), nodeId, bindingId).changes > 0;
|
|
430
|
-
});
|
|
431
|
-
}
|
|
432
|
-
export function clearEpisode(nodeId, input) {
|
|
433
|
-
return withCanvasWrite((db) => {
|
|
434
|
-
const bindingId = liveBinding(db, nodeId, input.sessionId);
|
|
435
|
-
if (bindingId === null)
|
|
436
|
-
return false;
|
|
437
|
-
const rows = db.prepare('SELECT fault_id FROM node_faults WHERE node_id = ? AND episode_binding_id = ? AND episode_state IS NOT NULL').all(nodeId, bindingId);
|
|
438
|
-
if (rows.length === 0)
|
|
439
|
-
return false;
|
|
440
|
-
db.prepare('UPDATE node_faults SET episode_state = NULL, episode_binding_id = NULL, updated_at = ? WHERE node_id = ? AND episode_binding_id = ? AND episode_state IS NOT NULL').run(now(), nodeId, bindingId);
|
|
441
|
-
for (const row of rows)
|
|
442
|
-
deleteIfUnretained(db, row.fault_id);
|
|
443
|
-
return true;
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
export function readEpisode(nodeId) {
|
|
447
|
-
const row = openDb().prepare('SELECT f.*, s.session_id FROM node_faults f JOIN sessions s ON s.binding_id = f.episode_binding_id WHERE f.node_id = ? AND f.episode_state IS NOT NULL').get(nodeId);
|
|
448
|
-
if (row === undefined)
|
|
449
|
-
return null;
|
|
450
|
-
return { state: row['episode_state'], sessionId: row['session_id'], fault: hydrateFault(row) };
|
|
451
|
-
}
|
|
452
|
-
export function beginBootFaultAttempt(nodeId) {
|
|
453
|
-
const preLaunchClear = readFault(nodeId) === null;
|
|
454
|
-
return {
|
|
455
|
-
explanation() {
|
|
456
|
-
if (!preLaunchClear)
|
|
457
|
-
return null;
|
|
458
|
-
const fault = readFault(nodeId);
|
|
459
|
-
if (fault === null || fault.link !== 'crtr→pi' || fault.retry.disposition !== 'fatal')
|
|
460
|
-
return null;
|
|
461
|
-
const op = fault.op.trim();
|
|
462
|
-
const message = fault.message.trim();
|
|
463
|
-
return op === '' || message === '' ? null : `${op}: ${message}`;
|
|
464
|
-
},
|
|
465
|
-
};
|
|
466
|
-
}
|
|
467
|
-
function markerMtime(path, fallback) {
|
|
468
|
-
try {
|
|
469
|
-
return statSync(path).mtime.toISOString();
|
|
470
|
-
}
|
|
471
|
-
catch {
|
|
472
|
-
return fallback;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
function legacyFile(path, required) {
|
|
476
|
-
if (!existsSync(path))
|
|
477
|
-
return null;
|
|
478
|
-
try {
|
|
479
|
-
return readFileSync(path, 'utf8');
|
|
480
|
-
}
|
|
481
|
-
catch (error) {
|
|
482
|
-
if (!required)
|
|
483
|
-
return null;
|
|
484
|
-
throw new Error(`cannot import recovery input ${path}: ${error.message}`);
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
function latestExecution(db, nodeId) {
|
|
488
|
-
const row = db.prepare('SELECT execution_id, started_at FROM executions WHERE node_id = ? ORDER BY rowid DESC LIMIT 1').get(nodeId);
|
|
489
|
-
return row ?? null;
|
|
490
|
-
}
|
|
491
|
-
function syntheticExecution(db, nodeId) {
|
|
492
|
-
const columns = tableColumns(db, 'nodes');
|
|
493
|
-
const launched = columns.has('launched_at')
|
|
494
|
-
? db.prepare('SELECT COALESCE(launched_at, created) AS started_at FROM nodes WHERE node_id = ?').get(nodeId)
|
|
495
|
-
: db.prepare('SELECT created AS started_at FROM nodes WHERE node_id = ?').get(nodeId);
|
|
496
|
-
if (launched === undefined)
|
|
497
|
-
throw new Error(`cannot import recovery witness for unknown node ${nodeId}`);
|
|
498
|
-
const executionId = randomUUID();
|
|
499
|
-
db.prepare("INSERT INTO executions (execution_id, node_id, daemon_epoch, pid, process_identity, state, started_at, ended_at, exit_reason) VALUES (?, ?, NULL, NULL, NULL, 'exited', ?, ?, 'pre-consolidation')").run(executionId, nodeId, launched.started_at, launched.started_at);
|
|
500
|
-
return { execution_id: executionId, started_at: launched.started_at };
|
|
501
|
-
}
|
|
502
|
-
function insertMigratedFault(db, nodeId, fault, active, episode) {
|
|
503
|
-
return insertFault(db, nodeId, fault, active, episode);
|
|
504
|
-
}
|
|
505
|
-
function migrationBinding(db, nodeId, transcriptPath, legacyPath) {
|
|
506
|
-
const current = db.prepare('SELECT binding_id, node_id FROM sessions WHERE transcript_path = ? AND unbound_at IS NULL').get(transcriptPath);
|
|
507
|
-
if (current !== undefined) {
|
|
508
|
-
if (current.node_id !== nodeId)
|
|
509
|
-
throw new Error(`cannot import provider retry ${legacyPath}: transcript is live-owned by ${current.node_id}`);
|
|
510
|
-
return current.binding_id;
|
|
511
|
-
}
|
|
512
|
-
const known = db.prepare('SELECT binding_id FROM sessions WHERE node_id = ? AND transcript_path = ? ORDER BY rowid DESC LIMIT 1').get(nodeId, transcriptPath);
|
|
513
|
-
if (known !== undefined)
|
|
514
|
-
return known.binding_id;
|
|
515
|
-
const created = db.prepare('SELECT created FROM nodes WHERE node_id = ?').get(nodeId);
|
|
516
|
-
if (created === undefined)
|
|
517
|
-
throw new Error(`cannot import provider retry ${legacyPath}: unknown node ${nodeId}`);
|
|
518
|
-
const bindingId = randomUUID();
|
|
519
|
-
db.prepare('INSERT INTO sessions (binding_id, session_id, node_id, transcript_path, source_session_id, fork_entry_id, created_at, bound_at, unbound_at) VALUES (?, NULL, ?, ?, NULL, NULL, ?, ?, ?)').run(bindingId, nodeId, transcriptPath, created.created, created.created, now());
|
|
520
|
-
return bindingId;
|
|
521
|
-
}
|
|
522
|
-
/** Import legacy witness and recovery files inside the parent's one shared consolidation transaction. */
|
|
523
|
-
export function migrateRecoveryWitnesses(db) {
|
|
524
|
-
addExecutionColumns(db);
|
|
525
|
-
createFaultTable(db);
|
|
526
|
-
if (!existsSync(nodesRoot()))
|
|
527
|
-
return;
|
|
528
|
-
const entries = readdirSync(nodesRoot(), { withFileTypes: true }).filter((entry) => entry.isDirectory()).sort((a, b) => a.name.localeCompare(b.name));
|
|
529
|
-
const nodeExists = db.prepare('SELECT 1 FROM nodes WHERE node_id = ?');
|
|
530
|
-
for (const entry of entries) {
|
|
531
|
-
const nodeId = entry.name;
|
|
532
|
-
const directory = jobDir(nodeId);
|
|
533
|
-
const busyPath = join(directory, 'busy');
|
|
534
|
-
const abortPath = join(directory, 'clean-abort');
|
|
535
|
-
const poisonPath = join(directory, 'transport-poison.json');
|
|
536
|
-
const faultPath = join(directory, 'fault');
|
|
537
|
-
const episodePath = join(directory, 'provider-retry');
|
|
538
|
-
const busy = existsSync(busyPath);
|
|
539
|
-
const aborted = existsSync(abortPath);
|
|
540
|
-
if (!busy && !aborted && !existsSync(poisonPath) && !existsSync(faultPath) && !existsSync(episodePath))
|
|
541
|
-
continue;
|
|
542
|
-
if (!existsSync(join(nodesRoot(), nodeId, 'meta.json')) && nodeExists.get(nodeId) === undefined)
|
|
543
|
-
continue;
|
|
544
|
-
const poison = legacyFile(poisonPath, false);
|
|
545
|
-
const legacyFault = legacyFile(faultPath, true);
|
|
546
|
-
const legacyEpisode = legacyFile(episodePath, true);
|
|
547
|
-
if (!busy && !aborted && poison === null && legacyFault === null && legacyEpisode === null)
|
|
548
|
-
continue;
|
|
549
|
-
let execution = latestExecution(db, nodeId);
|
|
550
|
-
if (execution === null)
|
|
551
|
-
execution = syntheticExecution(db, nodeId);
|
|
552
|
-
if (busy) {
|
|
553
|
-
const at = markerMtime(busyPath, execution.started_at);
|
|
554
|
-
db.prepare('UPDATE executions SET turn_open_at = ?, turn_progress_at = ?, turn_closed_at = NULL, turn_end_reason = NULL WHERE execution_id = ?').run(at, at, execution.execution_id);
|
|
555
|
-
}
|
|
556
|
-
else if (aborted) {
|
|
557
|
-
const at = markerMtime(abortPath, execution.started_at);
|
|
558
|
-
db.prepare("UPDATE executions SET turn_open_at = ?, turn_progress_at = ?, turn_closed_at = ?, turn_end_reason = 'teardown-aborted' WHERE execution_id = ?").run(at, at, at, execution.execution_id);
|
|
559
|
-
}
|
|
560
|
-
if (poison !== null) {
|
|
561
|
-
try {
|
|
562
|
-
const parsed = JSON.parse(poison);
|
|
563
|
-
if (Number.isInteger(parsed.consecutivePasses) && parsed.consecutivePasses >= 1 && Array.isArray(parsed.routes) && parsed.routes.length > 0 && parsed.routes.every((route) => typeof route === 'string' && route !== '')) {
|
|
564
|
-
db.prepare('UPDATE executions SET exit_diagnostic_json = ? WHERE execution_id = ?').run(JSON.stringify({ schema: 'crtr.execution-exit-diagnostic/v1', transport_poison: { consecutive_passes: parsed.consecutivePasses, routes: parsed.routes } }), execution.execution_id);
|
|
565
|
-
}
|
|
566
|
-
}
|
|
567
|
-
catch {
|
|
568
|
-
// Diagnostic-only legacy context is intentionally omitted when corrupt.
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
const active = legacyFault === null ? null : parseLegacyFault(legacyFault);
|
|
572
|
-
if (legacyFault !== null && active === null)
|
|
573
|
-
throw new Error(`cannot import recovery fault ${faultPath}`);
|
|
574
|
-
const episode = legacyEpisode === null ? null : parseLegacyEpisode(legacyEpisode);
|
|
575
|
-
if (legacyEpisode !== null && episode === null)
|
|
576
|
-
throw new Error(`cannot import provider retry ${episodePath}`);
|
|
577
|
-
let activeStored = active === null || active.link === 'broker↔crtrd' ? null : insertMigratedFault(db, nodeId, active, true);
|
|
578
|
-
if (episode !== null) {
|
|
579
|
-
const bindingId = migrationBinding(db, nodeId, episode.sessionFile, episodePath);
|
|
580
|
-
if (activeStored !== null && activeStored.since === episode.fault.since) {
|
|
581
|
-
db.prepare('UPDATE node_faults SET episode_state = ?, episode_binding_id = ?, updated_at = ? WHERE fault_id = ?').run(episode.state, bindingId, now(), activeStored.faultId);
|
|
582
|
-
}
|
|
583
|
-
else {
|
|
584
|
-
insertMigratedFault(db, nodeId, episode.fault, false, { state: episode.state, bindingId });
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
}
|
|
26
|
+
`)}o(ye,"createFaultTable");function y(e,t){return typeof t=="string"&&e.includes(t)}o(y,"contains");function b(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}o(b,"isRecord");function B(e){if(!b(e)||typeof e.provider!="string"||e.provider===""||typeof e.model!="string"||e.model==="")return;const t=typeof e.status=="number"&&Number.isFinite(e.status)?e.status:void 0,r=typeof e.code=="string"||typeof e.code=="number"?e.code:void 0,n=typeof e.errno=="string"?e.errno:void 0,i=typeof e.body=="string"?e.body:void 0,d=Array.isArray(e.causes)?e.causes.flatMap(s=>{if(!b(s))return[];const c={...typeof s.message=="string"?{message:s.message}:{},...typeof s.status=="number"&&Number.isFinite(s.status)?{status:s.status}:{},...typeof s.code=="string"||typeof s.code=="number"?{code:s.code}:{},...typeof s.errno=="string"?{errno:s.errno}:{},...typeof s.body=="string"?{body:s.body}:{}};return Object.keys(c).length===0?[]:[c]}):void 0;return{provider:e.provider,model:e.model,...t===void 0?{}:{status:t},...r===void 0?{}:{code:r},...n===void 0?{}:{errno:n},...i===void 0?{}:{body:i},...d===void 0||d.length===0?{}:{causes:d}}}o(B,"parseProviderError");function K(e){try{const t=JSON.parse(e);if(!y(ce,t.link)||typeof t.op!="string"||t.op===""||!y(pe,t.kind)||typeof t.message!="string"||typeof t.since!="string")return null;const r=X(t.operation_id);if(!b(t.retry)||!y(_e,t.retry.disposition)||t.retry.by!==void 0&&!y(le,t.retry.by)||t.retry.attempt!==void 0&&typeof t.retry.attempt!="number"||t.retry.max!==void 0&&typeof t.retry.max!="number"||t.retry.nextAt!==void 0&&typeof t.retry.nextAt!="string"||t.anchorEntryId!==void 0&&(typeof t.anchorEntryId!="string"||t.anchorEntryId===""))return null;const n=t.providerError===void 0?void 0:B(t.providerError);return t.providerError!==void 0&&n===void 0?null:{link:t.link,op:t.op,kind:t.kind,retry:{disposition:t.retry.disposition,...t.retry.by===void 0?{}:{by:t.retry.by},...t.retry.attempt===void 0?{}:{attempt:t.retry.attempt},...t.retry.max===void 0?{}:{max:t.retry.max},...t.retry.nextAt===void 0?{}:{nextAt:t.retry.nextAt}},message:t.message,since:t.since,operation_id:r,...t.anchorEntryId===void 0?{}:{anchorEntryId:t.anchorEntryId},...n===void 0?{}:{providerError:n}}}catch{return null}}o(K,"parseLegacyFault");function Te(e){const t=de(e);try{return oe(t)}catch{return t}}o(Te,"canonicalPath");function ge(e){try{const t=JSON.parse(e);if(!y(Ee,t.state)||typeof t.sessionFile!="string"||t.sessionFile==="")return null;const r=JSON.stringify(t.fault),n=K(r);if(n===null||n.link!=="pi\u2192provider"||n.retry.disposition!=="auto"||n.retry.by!=="daemon")return null;const i=t.anchorEntryId;return i!==null&&typeof i!="string"||(n.anchorEntryId??null)!==i?null:{state:t.state,sessionFile:Te(t.sessionFile),fault:n}}catch{return null}}o(ge,"parseLegacyEpisode");function J(e){return e!==void 0?X(e):M.current()??M.fresh(r=>r)}o(J,"resolveOperationId");function Ne(e){return e.slice(0,ue)}o(Ne,"clampMessage");function A(e){return e.link==="pi\u2192provider"&&e.retry.disposition==="auto"&&e.retry.by==="daemon"?3:e.retry.disposition==="fatal"?2:1}o(A,"faultPriority");function Y(e){return{link:e.link,op:e.op,kind:e.kind,message:e.message,since:e.since,operationId:e.operation_id,anchorEntryId:e.anchorEntryId??null,retryDisposition:e.retry.disposition,retryBy:e.retry.by??null,retryAttempt:e.retry.attempt??null,retryMax:e.retry.max??null,retryNextAt:e.retry.nextAt??null,providerError:e.providerError===void 0?null:JSON.stringify(e.providerError)}}o(Y,"encodeFault");function G(e){const t=e.provider_error_json,r=typeof t=="string"?B(JSON.parse(t)):void 0;if(typeof t=="string"&&r===void 0)throw new Error(`invalid provider error on stored fault ${e.fault_id}`);const n={disposition:e.retry_disposition,...e.retry_by===null?{}:{by:e.retry_by},...e.retry_attempt===null?{}:{attempt:e.retry_attempt},...e.retry_max===null?{}:{max:e.retry_max},...e.retry_next_at===null?{}:{nextAt:e.retry_next_at}};return{faultId:e.fault_id,link:e.link,op:e.op,kind:e.kind,message:e.message,since:e.since,operation_id:e.operation_id,retry:n,...e.anchor_entry_id===null?{}:{anchorEntryId:e.anchor_entry_id},...r===void 0?{}:{providerError:r}}}o(G,"hydrateFault");function I(e,t){const r=e.prepare("SELECT * FROM node_faults WHERE node_id = ? AND active = 1").get(t);return r===void 0?null:G(r)}o(I,"activeFault");function V(e){if(!y(j,e.link))throw new Error(`fault link is not durable: ${e.link}`);return{link:e.link,op:e.op,kind:e.kind,retry:e.retry,message:Ne(e.message),since:e.since??a(),operation_id:J(e.operation_id),...typeof e.anchorEntryId=="string"&&e.anchorEntryId!==""?{anchorEntryId:e.anchorEntryId}:{},...e.providerError===void 0?{}:{providerError:e.providerError}}}o(V,"storedFault");function Q(e,t){w({level:t.retry.disposition==="fatal"?"error":"warn",event:"fault.recorded",operation_id:t.operation_id,node_id:e,error_class:P(t),fields:{link:t.link,op:t.op,kind:t.kind,retry:t.retry,message:t.message,...t.anchorEntryId===void 0?{}:{anchor_entry_id:t.anchorEntryId},...t.providerError===void 0?{}:{provider_error:t.providerError}}})}o(Q,"emitRecordedFault");function F(e,t,r,n,i){const d=k(),s=Y(r),c=a();return e.prepare("INSERT INTO node_faults (fault_id, node_id, link, op, kind, message, since, operation_id, anchor_entry_id, retry_disposition, retry_by, retry_attempt, retry_max, retry_next_at, provider_error_json, active, episode_state, episode_binding_id, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)").run(d,t,s.link,s.op,s.kind,s.message,s.since,s.operationId,s.anchorEntryId,s.retryDisposition,s.retryBy,s.retryAttempt,s.retryMax,s.retryNextAt,s.providerError,n?1:0,i?.state??null,i?.bindingId??null,c,c),{...r,faultId:d}}o(F,"insertFault");function q(e,t,r,n){const i=Y(r);return e.prepare("UPDATE node_faults SET link = ?, op = ?, kind = ?, message = ?, since = ?, operation_id = ?, anchor_entry_id = ?, retry_disposition = ?, retry_by = ?, retry_attempt = ?, retry_max = ?, retry_next_at = ?, provider_error_json = ?, episode_state = COALESCE(?, episode_state), episode_binding_id = COALESCE(?, episode_binding_id), updated_at = ? WHERE fault_id = ?").run(i.link,i.op,i.kind,i.message,i.since,i.operationId,i.anchorEntryId,i.retryDisposition,i.retryBy,i.retryAttempt,i.retryMax,i.retryNextAt,i.providerError,n?.state??null,n?.bindingId??null,a(),t),{...r,faultId:t}}o(q,"updateFault");function R(e,t){e.prepare("DELETE FROM node_faults WHERE fault_id = ? AND active = 0 AND episode_state IS NULL").run(t)}o(R,"deleteIfUnretained");function z(e,t,r,n){const i=I(e,t);if(i===null){const d=e.prepare("SELECT fault_id, link, kind, since, operation_id FROM node_faults WHERE node_id = ? AND active = 0 AND episode_state IS NOT NULL").get(t);return d!==void 0&&d.link===r.link&&d.kind===r.kind&&d.since===r.since&&d.operation_id===r.operation_id?(e.prepare("UPDATE node_faults SET active = 1, updated_at = ? WHERE fault_id = ?").run(a(),d.fault_id),q(e,d.fault_id,r)):F(e,t,r,!0,n)}if(i.link===r.link&&i.kind===r.kind){const d={...i.retry,...r.retry};return r.retry.disposition==="fatal"&&!("nextAt"in r.retry)&&delete d.nextAt,q(e,i.faultId,{...r,since:i.since,anchorEntryId:i.anchorEntryId??r.anchorEntryId,retry:d},n)}return A(i)>A(r)?null:(e.prepare("UPDATE node_faults SET active = 0, updated_at = ? WHERE fault_id = ?").run(a(),i.faultId),R(e,i.faultId),F(e,t,r,!0,n))}o(z,"replaceActiveFault");function g(e,t,r){return e.prepare("SELECT binding_id FROM sessions WHERE node_id = ? AND session_id = ? AND unbound_at IS NULL").get(t,r)?.binding_id??null}o(g,"liveBinding");function Ce(e,t){return p(r=>{const n=a();return r.prepare("UPDATE executions SET turn_progress_at = ? WHERE execution_id = ? AND state != 'exited' AND turn_open_at IS NOT NULL AND turn_closed_at IS NULL").run(n,e).changes>0?!0:r.prepare("UPDATE executions SET turn_open_at = ?, turn_progress_at = ?, turn_closed_at = NULL, turn_end_reason = NULL WHERE execution_id = ? AND state != 'exited'").run(n,n,e).changes>0})}o(Ce,"openTurn");function be(e){return p(t=>t.prepare("UPDATE executions SET turn_progress_at = ? WHERE execution_id = ? AND state != 'exited' AND turn_open_at IS NOT NULL AND turn_closed_at IS NULL").run(a(),e).changes>0)}o(be,"recordTurnProgress");function Fe(e,t){return p(r=>r.prepare("UPDATE executions SET turn_closed_at = ?, turn_end_reason = ? WHERE execution_id = ? AND state != 'exited' AND turn_open_at IS NOT NULL AND turn_closed_at IS NULL").run(a(),t.endReason,e).changes>0)}o(Fe,"closeTurn");function He(e,t){if(!Number.isInteger(t.consecutivePasses)||t.consecutivePasses<1||t.routes.length===0||!t.routes.every(r=>r!==""))throw new Error("invalid transport-poison verdict");return p(r=>r.prepare("UPDATE executions SET exit_diagnostic_json = ? WHERE execution_id = ? AND state != 'exited'").run(JSON.stringify({schema:"crtr.execution-exit-diagnostic/v1",transport_poison:{consecutive_passes:t.consecutivePasses,routes:t.routes}}),e).changes>0)}o(He,"recordTransportPoisonVerdict");function We(e){const t=T().prepare("SELECT exit_diagnostic_json FROM executions WHERE node_id = ? ORDER BY rowid DESC LIMIT 1").get(e);if(t===void 0||t.exit_diagnostic_json===null)return null;try{const r=JSON.parse(t.exit_diagnostic_json),n=r.transport_poison;return r.schema!=="crtr.execution-exit-diagnostic/v1"||n===void 0||!Number.isInteger(n.consecutive_passes)||n.consecutive_passes<1||!Array.isArray(n.routes)||n.routes.length===0||!n.routes.every(i=>typeof i=="string"&&i!=="")?null:{consecutivePasses:n.consecutive_passes,routes:n.routes}}catch{return null}}o(We,"readTransportPoisonVerdict");function Pe(e){const t=T().prepare("SELECT turn_open_at, turn_closed_at, turn_progress_at FROM executions WHERE node_id = ? AND state != 'exited'").get(e);return t===void 0?null:{busy:t.turn_open_at!==null&&t.turn_closed_at===null,progressAt:t.turn_progress_at}}o(Pe,"readLiveTurn");function we(e){const t=T(),r=t.prepare("SELECT turn_closed_at, turn_progress_at FROM executions WHERE node_id = ? AND turn_open_at IS NOT NULL ORDER BY rowid DESC LIMIT 1").get(e);if(r===void 0)return null;const n=t.prepare("SELECT turn_end_reason FROM executions WHERE node_id = ? ORDER BY rowid DESC LIMIT 1").get(e);return{interrupted:r.turn_closed_at===null||n?.turn_end_reason==="teardown-aborted",progressAt:r.turn_progress_at}}o(we,"readInterruptedTurn");function Me(e,t){const r=V(t);return Q(e,r),p(n=>z(n,e,r))}o(Me,"recordFault");function Xe(e,t){return p(r=>{const n=I(r,e);if(n===null||t?.link!==void 0&&n.link!==t.link)return!1;const i=r.prepare("SELECT episode_state FROM node_faults WHERE fault_id = ?").get(n.faultId);r.prepare("UPDATE node_faults SET active = 0, updated_at = ? WHERE fault_id = ?").run(a(),n.faultId),i.episode_state==="pending"&&t?.preserveEpisode!==!0&&r.prepare("UPDATE node_faults SET episode_state = NULL, episode_binding_id = NULL, updated_at = ? WHERE fault_id = ?").run(a(),n.faultId),R(r,n.faultId);const d=J();return w({level:"info",event:"fault.cleared",operation_id:d,node_id:e,error_class:P(n),fields:{cleared_fault_operation_id:n.operation_id,link:n.link,op:n.op,kind:n.kind,retry:n.retry,message:n.message,since:n.since,...n.anchorEntryId===void 0?{}:{anchor_entry_id:n.anchorEntryId}}}),!0})}o(Xe,"clearFault");function Z(e){return I(T(),e)}o(Z,"readFault");function je(e,t){const r=V(t.input);if(r.link!=="pi\u2192provider"||r.retry.disposition!=="auto"||r.retry.by!=="daemon")throw new Error("provider retry episode requires an automatic daemon provider fault");return Q(e,r),p(n=>{const i=g(n,e,t.sessionId);if(i===null)return null;const d=I(n,e);if(d!==null&&(d.link!==r.link||d.kind!==r.kind)&&A(d)>A(r))return null;const s=n.prepare("SELECT fault_id FROM node_faults WHERE node_id = ? AND episode_state IS NOT NULL").all(e);n.prepare("UPDATE node_faults SET episode_state = NULL, episode_binding_id = NULL, updated_at = ? WHERE node_id = ? AND episode_state IS NOT NULL").run(a(),e);for(const N of s)R(n,N.fault_id);const c=z(n,e,r,{state:"pending",bindingId:i});return c===null?null:(n.prepare("UPDATE node_faults SET episode_state = ?, episode_binding_id = ?, updated_at = ? WHERE fault_id = ?").run("pending",i,a(),c.faultId),c)})}o(je,"recordPendingEpisode");function $e(e,t){return p(r=>{const n=g(r,e,t.sessionId);return n===null?!1:r.prepare("UPDATE node_faults SET episode_state = 'admitted', retry_disposition = ?, retry_by = ?, retry_attempt = ?, retry_max = ?, retry_next_at = ?, updated_at = ? WHERE node_id = ? AND fault_id = ? AND episode_state = 'pending' AND episode_binding_id = ?").run(t.retry.disposition,t.retry.by??null,t.retry.attempt??null,t.retry.max??null,t.retry.nextAt??null,a(),e,t.faultId,n).changes>0})}o($e,"admitEpisode");function Be(e,t){return p(r=>{const n=g(r,e,t.sessionId);return n===null?!1:r.prepare("UPDATE node_faults SET episode_state = 'pending', updated_at = ? WHERE node_id = ? AND episode_state = 'admitted' AND episode_binding_id = ?").run(a(),e,n).changes>0})}o(Be,"reopenEpisode");function Ke(e,t){return p(r=>{const n=g(r,e,t.sessionId);return n===null?!1:r.prepare("UPDATE node_faults SET episode_state = 'invalidated', updated_at = ? WHERE node_id = ? AND episode_state != 'invalidated' AND episode_state IS NOT NULL AND episode_binding_id = ?").run(a(),e,n).changes>0})}o(Ke,"invalidateEpisode");function Je(e,t){return p(r=>{const n=g(r,e,t.sessionId);if(n===null)return!1;const i=r.prepare("SELECT fault_id FROM node_faults WHERE node_id = ? AND episode_binding_id = ? AND episode_state IS NOT NULL").all(e,n);if(i.length===0)return!1;r.prepare("UPDATE node_faults SET episode_state = NULL, episode_binding_id = NULL, updated_at = ? WHERE node_id = ? AND episode_binding_id = ? AND episode_state IS NOT NULL").run(a(),e,n);for(const d of i)R(r,d.fault_id);return!0})}o(Je,"clearEpisode");function Ye(e){const t=T().prepare("SELECT f.*, s.session_id FROM node_faults f JOIN sessions s ON s.binding_id = f.episode_binding_id WHERE f.node_id = ? AND f.episode_state IS NOT NULL").get(e);return t===void 0?null:{state:t.episode_state,sessionId:t.session_id,fault:G(t)}}o(Ye,"readEpisode");function Ge(e){const t=Z(e)===null;return{explanation(){if(!t)return null;const r=Z(e);if(r===null||r.link!=="crtr\u2192pi"||r.retry.disposition!=="fatal")return null;const n=r.op.trim(),i=r.message.trim();return n===""||i===""?null:`${n}: ${i}`}}}o(Ge,"beginBootFaultAttempt");function ee(e,t){try{return se(e).mtime.toISOString()}catch{return t}}o(ee,"markerMtime");function H(e,t){if(!_(e))return null;try{return ie(e,"utf8")}catch(r){if(!t)return null;throw new Error(`cannot import recovery input ${e}: ${r.message}`)}}o(H,"legacyFile");function Le(e,t){return e.prepare("SELECT execution_id, started_at FROM executions WHERE node_id = ? ORDER BY rowid DESC LIMIT 1").get(t)??null}o(Le,"latestExecution");function me(e,t){const n=$(e,"nodes").has("launched_at")?e.prepare("SELECT COALESCE(launched_at, created) AS started_at FROM nodes WHERE node_id = ?").get(t):e.prepare("SELECT created AS started_at FROM nodes WHERE node_id = ?").get(t);if(n===void 0)throw new Error(`cannot import recovery witness for unknown node ${t}`);const i=k();return e.prepare("INSERT INTO executions (execution_id, node_id, daemon_epoch, pid, process_identity, state, started_at, ended_at, exit_reason) VALUES (?, ?, NULL, NULL, NULL, 'exited', ?, ?, 'pre-consolidation')").run(i,t,n.started_at,n.started_at),{execution_id:i,started_at:n.started_at}}o(me,"syntheticExecution");function te(e,t,r,n,i){return F(e,t,r,n,i)}o(te,"insertMigratedFault");function xe(e,t,r,n){const i=e.prepare("SELECT binding_id, node_id FROM sessions WHERE transcript_path = ? AND unbound_at IS NULL").get(r);if(i!==void 0){if(i.node_id!==t)throw new Error(`cannot import provider retry ${n}: transcript is live-owned by ${i.node_id}`);return i.binding_id}const d=e.prepare("SELECT binding_id FROM sessions WHERE node_id = ? AND transcript_path = ? ORDER BY rowid DESC LIMIT 1").get(t,r);if(d!==void 0)return d.binding_id;const s=e.prepare("SELECT created FROM nodes WHERE node_id = ?").get(t);if(s===void 0)throw new Error(`cannot import provider retry ${n}: unknown node ${t}`);const c=k();return e.prepare("INSERT INTO sessions (binding_id, session_id, node_id, transcript_path, source_session_id, fork_entry_id, created_at, bound_at, unbound_at) VALUES (?, NULL, ?, ?, NULL, NULL, ?, ?, ?)").run(c,t,r,s.created,s.created,a()),c}o(xe,"migrationBinding");function Ve(e){if(fe(e),ye(e),!_(C()))return;const t=ne(C(),{withFileTypes:!0}).filter(n=>n.isDirectory()).sort((n,i)=>n.name.localeCompare(i.name)),r=e.prepare("SELECT 1 FROM nodes WHERE node_id = ?");for(const n of t){const i=n.name,d=ae(i),s=f(d,"busy"),c=f(d,"clean-abort"),N=f(d,"transport-poison.json"),h=f(d,"fault"),L=f(d,"provider-retry"),D=_(s),U=_(c);if(!D&&!U&&!_(N)&&!_(h)&&!_(L)||!_(f(C(),i,"meta.json"))&&r.get(i)===void 0)continue;const O=H(N,!1),m=H(h,!0),x=H(L,!0);if(!D&&!U&&O===null&&m===null&&x===null)continue;let l=Le(e,i);if(l===null&&(l=me(e,i)),D){const u=ee(s,l.started_at);e.prepare("UPDATE executions SET turn_open_at = ?, turn_progress_at = ?, turn_closed_at = NULL, turn_end_reason = NULL WHERE execution_id = ?").run(u,u,l.execution_id)}else if(U){const u=ee(c,l.started_at);e.prepare("UPDATE executions SET turn_open_at = ?, turn_progress_at = ?, turn_closed_at = ?, turn_end_reason = 'teardown-aborted' WHERE execution_id = ?").run(u,u,u,l.execution_id)}if(O!==null)try{const u=JSON.parse(O);Number.isInteger(u.consecutivePasses)&&u.consecutivePasses>=1&&Array.isArray(u.routes)&&u.routes.length>0&&u.routes.every(W=>typeof W=="string"&&W!=="")&&e.prepare("UPDATE executions SET exit_diagnostic_json = ? WHERE execution_id = ?").run(JSON.stringify({schema:"crtr.execution-exit-diagnostic/v1",transport_poison:{consecutive_passes:u.consecutivePasses,routes:u.routes}}),l.execution_id)}catch{}const S=m===null?null:K(m);if(m!==null&&S===null)throw new Error(`cannot import recovery fault ${h}`);const E=x===null?null:ge(x);if(x!==null&&E===null)throw new Error(`cannot import provider retry ${L}`);let v=S===null||S.link==="broker\u2194crtrd"?null:te(e,i,S,!0);if(E!==null){const u=xe(e,i,E.sessionFile,L);v!==null&&v.since===E.fault.since?e.prepare("UPDATE node_faults SET episode_state = ?, episode_binding_id = ?, updated_at = ? WHERE fault_id = ?").run(E.state,u,a(),v.faultId):te(e,i,E.fault,!1,{state:E.state,bindingId:u})}}}o(Ve,"migrateRecoveryWitnesses");export{ke as FAULT_QUIET_MS,$e as admitEpisode,Ge as beginBootFaultAttempt,Je as clearEpisode,Xe as clearFault,Fe as closeTurn,Ke as invalidateEpisode,Ve as migrateRecoveryWitnesses,Ce as openTurn,B as parseProviderError,Ye as readEpisode,Z as readFault,we as readInterruptedTurn,Pe as readLiveTurn,We as readTransportPoisonVerdict,Me as recordFault,je as recordPendingEpisode,He as recordTransportPoisonVerdict,be as recordTurnProgress,Be as reopenEpisode};
|