@north-light/crouter 0.3.318 → 0.3.319
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/dist/api/client.js +2 -912
- package/dist/api/dto/attach.js +0 -13
- package/dist/api/dto/bash-jobs.js +1 -9
- package/dist/api/dto/broker-ops.js +0 -6
- package/dist/api/dto/broker.js +0 -20
- package/dist/api/dto/canvas.js +0 -2
- package/dist/api/dto/chat-inventory.js +0 -11
- package/dist/api/dto/common.js +1 -15
- package/dist/api/dto/config.js +0 -3
- package/dist/api/dto/crons.js +1 -10
- package/dist/api/dto/files.js +0 -7
- package/dist/api/dto/focus.js +0 -10
- package/dist/api/dto/health.js +0 -2
- package/dist/api/dto/human-requests.js +0 -4
- package/dist/api/dto/human.js +0 -4
- package/dist/api/dto/inbox.js +0 -4
- package/dist/api/dto/lifecycle.js +0 -3
- package/dist/api/dto/mail.js +0 -1
- package/dist/api/dto/memory.js +0 -6
- package/dist/api/dto/messages.js +0 -2
- package/dist/api/dto/model-config.js +0 -1
- package/dist/api/dto/modelauth.js +0 -4
- package/dist/api/dto/node-outcomes.js +0 -2
- package/dist/api/dto/nodes.js +0 -3
- package/dist/api/dto/profiles.js +1 -4
- package/dist/api/dto/recovery.js +0 -1
- package/dist/api/dto/reports.js +0 -2
- package/dist/api/dto/review-comments.js +0 -5
- package/dist/api/dto/reviews.js +0 -5
- package/dist/api/dto/subscriptions.js +0 -2
- package/dist/api/dto/worktree.js +0 -6
- package/dist/api/errors.js +1 -40
- package/dist/api/index.js +1 -33
- package/dist/api/plugin-manifest-schema.js +0 -23
- package/dist/api/routes.js +1 -147
- package/dist/build-root.js +1 -198
- package/dist/cli.js +3 -99
- package/dist/clients/attach/ansi-cells.js +1 -137
- package/dist/clients/attach/chrome/bash-jobs.js +1 -31
- package/dist/clients/attach/chrome/canvas-panels.js +1 -194
- package/dist/clients/attach/chrome/completion-bell.js +1 -89
- package/dist/clients/attach/chrome/cron-wait.js +1 -34
- package/dist/clients/attach/chrome/git-info.js +2 -44
- package/dist/clients/attach/chrome/header.js +1 -30
- package/dist/clients/attach/chrome/inbox-strip.js +1 -199
- package/dist/clients/attach/chrome/recap.js +1 -19
- package/dist/clients/attach/chrome/review-wait.js +1 -22
- package/dist/clients/attach/chrome/roster.js +4 -275
- package/dist/clients/attach/chrome/status-line.js +1 -117
- package/dist/clients/attach/chrome/ticket-panel.js +1 -280
- package/dist/clients/attach/chrome/widgets.js +1 -51
- package/dist/clients/attach/command.js +1 -107
- package/dist/clients/attach/config.js +1 -274
- package/dist/clients/attach/input/capabilities.js +1 -104
- package/dist/clients/attach/input/clipboard-image.js +3 -220
- package/dist/clients/attach/input/completion-frecency.js +1 -141
- package/dist/clients/attach/input/controller.js +7 -377
- package/dist/clients/attach/input/overlay-owner.js +1 -199
- package/dist/clients/attach/input/ref-autocomplete.js +2 -176
- package/dist/clients/attach/input/titled-editor.js +4 -859
- package/dist/clients/attach/overlays/auth.js +2 -271
- package/dist/clients/attach/overlays/dialogs.js +2 -102
- package/dist/clients/attach/overlays/file-review.js +2 -128
- package/dist/clients/attach/overlays/graph.js +1 -661
- package/dist/clients/attach/overlays/help.js +1 -211
- package/dist/clients/attach/overlays/mcp.js +1 -302
- package/dist/clients/attach/overlays/pickers.js +1 -163
- package/dist/clients/attach/render/activity-slot.js +1 -13
- package/dist/clients/attach/render/assistant-message.js +1 -56
- package/dist/clients/attach/render/card-presentation.js +5 -218
- package/dist/clients/attach/render/chat-view.js +5 -1708
- package/dist/clients/attach/render/condensed-history.js +1 -60
- package/dist/clients/attach/render/context-message.js +1 -63
- package/dist/clients/attach/render/crtr-output.js +17 -905
- package/dist/clients/attach/render/diagram.js +7 -111
- package/dist/clients/attach/render/edit-diff.js +5 -304
- package/dist/clients/attach/render/glyph-codepoints.js +1 -42
- package/dist/clients/attach/render/group-activity.js +2 -263
- package/dist/clients/attach/render/group-recap.js +1 -152
- package/dist/clients/attach/render/markdown-source.js +5 -266
- package/dist/clients/attach/render/measured-container.js +1 -322
- package/dist/clients/attach/render/page-block.js +1 -183
- package/dist/clients/attach/render/scroll-animation.js +1 -80
- package/dist/clients/attach/render/tool-calls.js +3 -361
- package/dist/clients/attach/render/transcript-copy.js +2 -81
- package/dist/clients/attach/render/transcript-search.js +1 -152
- package/dist/clients/attach/render/viewport.js +1 -184
- package/dist/clients/attach/session/banner.js +1 -29
- package/dist/clients/attach/session/bindings.js +1 -71
- package/dist/clients/attach/session/chrome-refresh.js +1 -94
- package/dist/clients/attach/session/connection.js +1 -186
- package/dist/clients/attach/session/context.js +0 -16
- package/dist/clients/attach/session/editor-frame.js +1 -142
- package/dist/clients/attach/session/editor-inventory.js +6 -160
- package/dist/clients/attach/session/file-links.js +1 -68
- package/dist/clients/attach/session/focus-events.js +1 -12
- package/dist/clients/attach/session/frame.js +1 -214
- package/dist/clients/attach/session/frames.js +1 -188
- package/dist/clients/attach/session/identity.js +1 -26
- package/dist/clients/attach/session/input-wiring.js +1 -140
- package/dist/clients/attach/session/invariant.js +1 -15
- package/dist/clients/attach/session/keys.js +1 -77
- package/dist/clients/attach/session/layout.js +1 -59
- package/dist/clients/attach/session/mouse.js +1 -78
- package/dist/clients/attach/session/pane-focus.js +1 -42
- package/dist/clients/attach/session/pane-tag.js +1 -112
- package/dist/clients/attach/session/pi-assets.js +1 -24
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
- package/dist/clients/attach/session/profile-files.js +1 -228
- package/dist/clients/attach/session/reconnect.js +1 -175
- package/dist/clients/attach/session/selection.js +3 -108
- package/dist/clients/attach/session/state-sync.js +1 -67
- package/dist/clients/attach/session/surface-frame.js +1 -73
- package/dist/clients/attach/session/surface-host.js +1 -255
- package/dist/clients/attach/session/teardown.js +5 -94
- package/dist/clients/attach/session/transcript-search.js +3 -151
- package/dist/clients/attach/session/whip-achievements.js +2 -145
- package/dist/clients/attach/session/whip.js +1 -362
- package/dist/clients/attach/slash/dispatch.js +1 -706
- package/dist/clients/attach/slash/prompt-preview.js +1 -121
- package/dist/clients/attach/viewer.js +441 -441
- package/dist/clients/conversation/projection.js +1 -324
- package/dist/clients/conversation/submit.js +1 -51
- package/dist/clients/inbox/controller.js +1 -701
- package/dist/clients/inbox/dto-adapt.js +1 -93
- package/dist/clients/inbox/layout.js +1 -9
- package/dist/clients/inbox/page-adapter.js +1 -55
- package/dist/clients/inbox/resolve.js +1 -35
- package/dist/clients/inbox/review/anchors.js +1 -89
- package/dist/clients/inbox/review/comments-client.js +1 -98
- package/dist/clients/inbox/review/companion-pane.js +1 -82
- package/dist/clients/inbox/review/document-surface.js +2 -1188
- package/dist/clients/inbox/review/frame.js +1 -216
- package/dist/clients/inbox/review/keys.js +1 -123
- package/dist/clients/inbox/review/launch.js +1 -151
- package/dist/clients/inbox/review/live-source.js +1 -160
- package/dist/clients/inbox/review/nvim.js +1 -44
- package/dist/clients/inbox/review/remap.js +1 -157
- package/dist/clients/inbox/review/review-client.js +1 -123
- package/dist/clients/inbox/review/roundtrip.js +3 -36
- package/dist/clients/inbox/review/state.js +4 -315
- package/dist/clients/inbox/review-adapter.js +1 -43
- package/dist/clients/inbox/surface.js +1 -152
- package/dist/clients/inbox/tui/ansi.js +3 -321
- package/dist/clients/inbox/tui/input.js +5 -392
- package/dist/clients/inbox/tui/keys.js +1 -104
- package/dist/clients/inbox/tui/page-body.js +1 -66
- package/dist/clients/inbox/tui/panel.js +1 -84
- package/dist/clients/inbox/tui/render.js +2 -368
- package/dist/clients/inbox/tui/slots.js +3 -134
- package/dist/clients/inbox/tui/types.js +0 -1
- package/dist/clients/inbox/tui.js +1 -86
- package/dist/clients/surfaces/host.js +0 -1
- package/dist/commands/api-client.js +4 -290
- package/dist/commands/attention.js +1 -215
- package/dist/commands/canvas-browse.js +1 -70
- package/dist/commands/canvas-config.js +2 -192
- package/dist/commands/canvas-history/grep.js +7 -85
- package/dist/commands/canvas-history/read.js +3 -50
- package/dist/commands/canvas-history/search.js +10 -99
- package/dist/commands/canvas-history/shared.js +1 -139
- package/dist/commands/canvas-history/stats.js +6 -68
- package/dist/commands/canvas-history.js +1 -32
- package/dist/commands/canvas-issue.js +14 -149
- package/dist/commands/canvas-prune.js +1 -108
- package/dist/commands/canvas-roster.js +1 -69
- package/dist/commands/canvas-snapshot.js +1 -34
- package/dist/commands/canvas-use.js +1 -61
- package/dist/commands/canvas.js +1 -49
- package/dist/commands/chord.js +1 -241
- package/dist/commands/cron.js +11 -534
- package/dist/commands/dashboard.js +1 -85
- package/dist/commands/human/components.js +3 -77
- package/dist/commands/human/feedback.js +1 -112
- package/dist/commands/human/prompts.js +1 -331
- package/dist/commands/human/queue.js +1 -191
- package/dist/commands/human/request.js +1 -266
- package/dist/commands/human/review.js +1 -288
- package/dist/commands/human/shared.js +1 -67
- package/dist/commands/human.js +4 -60
- package/dist/commands/memory/delete.js +1 -100
- package/dist/commands/memory/edit.js +21 -219
- package/dist/commands/memory/find.js +2 -244
- package/dist/commands/memory/history.js +5 -199
- package/dist/commands/memory/lint.js +1 -107
- package/dist/commands/memory/list.js +1 -142
- package/dist/commands/memory/move.js +1 -223
- package/dist/commands/memory/origin.js +1 -130
- package/dist/commands/memory/read.js +6 -232
- package/dist/commands/memory/shared.js +12 -802
- package/dist/commands/memory/write.js +13 -235
- package/dist/commands/memory.js +1 -30
- package/dist/commands/node/bash.js +5 -245
- package/dist/commands/node/create.js +3 -332
- package/dist/commands/node/inspect.js +12 -300
- package/dist/commands/node/lifecycle.js +2 -453
- package/dist/commands/node/message.js +1 -161
- package/dist/commands/node/outcome.js +4 -134
- package/dist/commands/node/pyramid.js +2 -79
- package/dist/commands/node/subscription.js +1 -78
- package/dist/commands/node/wait.js +7 -163
- package/dist/commands/node-context.js +2 -159
- package/dist/commands/node-inspect-artifacts.js +8 -109
- package/dist/commands/node-lifecycle-revive.js +1 -217
- package/dist/commands/node-snapshot.js +1 -37
- package/dist/commands/node-transcript.js +1 -62
- package/dist/commands/node-worktree.js +1 -138
- package/dist/commands/node.js +1 -29
- package/dist/commands/pkg/browse/actions.js +1 -198
- package/dist/commands/pkg/browse/catalog.js +1 -466
- package/dist/commands/pkg/browse/command-view.js +1 -191
- package/dist/commands/pkg/browse/detail-panel.js +1 -402
- package/dist/commands/pkg/browse/doc-view.js +1 -89
- package/dist/commands/pkg/browse/list-panel.js +2 -168
- package/dist/commands/pkg/browse/model.js +1 -36
- package/dist/commands/pkg/browse/shell.js +1 -640
- package/dist/commands/pkg/browse.js +1 -27
- package/dist/commands/pkg/market-inspect.js +1 -141
- package/dist/commands/pkg/market-manage.js +1 -327
- package/dist/commands/pkg/market.js +1 -14
- package/dist/commands/pkg/plugin-inspect.js +1 -168
- package/dist/commands/pkg/plugin-manage.js +17 -1109
- package/dist/commands/pkg/plugin.js +1 -14
- package/dist/commands/pkg/shared.js +1 -62
- package/dist/commands/pkg.js +1 -21
- package/dist/commands/profile/default.js +1 -139
- package/dist/commands/profile/delete.js +1 -66
- package/dist/commands/profile/env.js +3 -188
- package/dist/commands/profile/kind.js +2 -35
- package/dist/commands/profile/list.js +1 -43
- package/dist/commands/profile/meta.js +1 -67
- package/dist/commands/profile/new.js +1 -115
- package/dist/commands/profile/pause.js +1 -59
- package/dist/commands/profile/project.js +1 -113
- package/dist/commands/profile/rename.js +1 -38
- package/dist/commands/profile/show.js +1 -52
- package/dist/commands/profile.js +1 -35
- package/dist/commands/push.js +9 -265
- package/dist/commands/revive.js +10 -181
- package/dist/commands/surface/node/cycle.js +1 -83
- package/dist/commands/surface/node/focus.js +1 -81
- package/dist/commands/surface/node/id.js +1 -38
- package/dist/commands/surface/node/pin.js +1 -42
- package/dist/commands/surface/node/placement.js +1 -134
- package/dist/commands/surface-edit.js +1 -157
- package/dist/commands/surface-inbox.js +1 -98
- package/dist/commands/surface-inspect.js +1 -39
- package/dist/commands/surface-node.js +1 -19
- package/dist/commands/surface-reload.js +2 -134
- package/dist/commands/surface-tmux-spread.js +1 -214
- package/dist/commands/surface.js +1 -28
- package/dist/commands/sys/branch.js +1 -19
- package/dist/commands/sys/config.js +1 -353
- package/dist/commands/sys/context/admin/actions.js +2 -246
- package/dist/commands/sys/context/admin/detail-panel.js +1 -247
- package/dist/commands/sys/context/admin/docs-panel.js +1 -191
- package/dist/commands/sys/context/admin/list-view.js +1 -183
- package/dist/commands/sys/context/admin/model.js +1 -229
- package/dist/commands/sys/context/admin/rail-panel.js +1 -227
- package/dist/commands/sys/context/admin/read-view.js +2 -194
- package/dist/commands/sys/context/admin/shell.js +1 -910
- package/dist/commands/sys/context/admin.js +2 -126
- package/dist/commands/sys/context/doc.js +3 -197
- package/dist/commands/sys/context/prompt-review.js +11 -291
- package/dist/commands/sys/context/resolve.js +10 -489
- package/dist/commands/sys/context/sysprompt.js +5 -96
- package/dist/commands/sys/context.js +1 -20
- package/dist/commands/sys/daemon.js +1 -313
- package/dist/commands/sys/doctor.js +1 -617
- package/dist/commands/sys/feedback.js +7 -228
- package/dist/commands/sys/logs.js +3 -129
- package/dist/commands/sys/migrate.js +1 -94
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
- package/dist/commands/sys/panels/dependencies-panel.js +1 -80
- package/dist/commands/sys/panels/keybindings-panel.js +1 -703
- package/dist/commands/sys/panels/models-panel.js +1 -1133
- package/dist/commands/sys/panels/plugins-panel.js +1 -80
- package/dist/commands/sys/panels/prefs-panel.js +1 -85
- package/dist/commands/sys/panels/profiles-panel.js +1 -601
- package/dist/commands/sys/panels/provider-panel.js +1 -538
- package/dist/commands/sys/settings-shell.js +1 -400
- package/dist/commands/sys/settings.js +1 -46
- package/dist/commands/sys/setup-core.js +6 -579
- package/dist/commands/sys/setup-settings-runner.js +1 -16
- package/dist/commands/sys/setup-wizard.js +1 -279
- package/dist/commands/sys/setup.js +1 -34
- package/dist/commands/sys/shared.js +1 -81
- package/dist/commands/sys/support/prepare.js +3 -239
- package/dist/commands/sys/support/submit.js +6 -524
- package/dist/commands/sys/support.js +1 -18
- package/dist/commands/sys/sync-deps.js +15 -498
- package/dist/commands/sys/sync-project-guidance.js +4 -481
- package/dist/commands/sys/sync-shared.js +1 -49
- package/dist/commands/sys/sync-skills.js +2 -311
- package/dist/commands/sys/sync.js +1 -18
- package/dist/commands/sys/update.js +1 -147
- package/dist/commands/sys/worktrees.js +5 -53
- package/dist/commands/sys.js +1 -18
- package/dist/core/activity-signal.js +2 -38
- package/dist/core/asset-root.js +1 -18
- package/dist/core/auth-file.js +2 -179
- package/dist/core/auth-interaction.js +3 -94
- package/dist/core/auto-update.js +4 -94
- package/dist/core/bash-guard.js +11 -393
- package/dist/core/bash-jobs.js +7 -411
- package/dist/core/bootstrap.js +2 -53
- package/dist/core/broker-client/client.js +1 -184
- package/dist/core/broker-client/index.js +1 -13
- package/dist/core/broker-client/transport-relay.js +1 -157
- package/dist/core/broker-client/transport-socket.js +1 -179
- package/dist/core/broker-client/transport.js +1 -26
- package/dist/core/canvas/attention.js +1 -47
- package/dist/core/canvas/boot-id.js +1 -26
- package/dist/core/canvas/boot.js +1 -186
- package/dist/core/canvas/browse/app.js +3 -919
- package/dist/core/canvas/browse/model.js +1 -477
- package/dist/core/canvas/browse/pins.js +1 -29
- package/dist/core/canvas/browse/render.js +3 -1055
- package/dist/core/canvas/canvas.js +15 -922
- package/dist/core/canvas/crons.js +11 -481
- package/dist/core/canvas/daemon-owner.js +2 -146
- package/dist/core/canvas/db.js +2 -100
- package/dist/core/canvas/deliveries.js +22 -283
- package/dist/core/canvas/delivery-contract.js +1 -8
- package/dist/core/canvas/executions.js +1 -68
- package/dist/core/canvas/extensions.js +1 -83
- package/dist/core/canvas/focuses.js +1 -77
- package/dist/core/canvas/history.js +24 -860
- package/dist/core/canvas/index.js +1 -15
- package/dist/core/canvas/install-id.js +1 -84
- package/dist/core/canvas/labels.js +1 -43
- package/dist/core/canvas/meta-file.js +1 -89
- package/dist/core/canvas/migrations.js +41 -1150
- package/dist/core/canvas/nav-model.js +1 -231
- package/dist/core/canvas/nav-render.js +1 -260
- package/dist/core/canvas/node-order.js +1 -37
- package/dist/core/canvas/node-recap.js +2 -67
- package/dist/core/canvas/node-sql-migration.js +2 -209
- package/dist/core/canvas/paths.js +1 -153
- package/dist/core/canvas/pid.js +4 -683
- package/dist/core/canvas/recovery.js +3 -565
- package/dist/core/canvas/remote-canvas-source.js +1 -288
- package/dist/core/canvas/remote-transport.js +1 -57
- package/dist/core/canvas/render-source.js +10 -635
- package/dist/core/canvas/sessions.js +1 -78
- package/dist/core/canvas/source.js +1 -47
- package/dist/core/canvas/status-glyph.js +1 -132
- package/dist/core/canvas/telemetry.js +1 -35
- package/dist/core/canvas/types.js +1 -6
- package/dist/core/canvas/waits.js +4 -68
- package/dist/core/canvas/worktrees.js +1 -93
- package/dist/core/clipboard-text.js +1 -57
- package/dist/core/command-hooks/artifact.js +1 -145
- package/dist/core/command-hooks/catalog.js +1 -38
- package/dist/core/command-hooks/compose.js +1 -99
- package/dist/core/command-hooks/discovery.js +1 -228
- package/dist/core/command-hooks/help.js +1 -18
- package/dist/core/command-hooks/index.js +1 -7
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
- package/dist/core/command-hooks/lifecycle-create.js +1 -51
- package/dist/core/command-hooks/report.js +1 -28
- package/dist/core/command-hooks/schema.js +1 -157
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
- package/dist/core/command-manifests/manifest.js +1 -324
- package/dist/core/command-manifests/registry.js +1 -118
- package/dist/core/command-manifests/schema.js +1 -736
- package/dist/core/command-plugins/bundle.js +1 -261
- package/dist/core/command-plugins/compose.js +1 -65
- package/dist/core/command-plugins/discovery.js +1 -245
- package/dist/core/command-plugins/endpoint.js +1 -48
- package/dist/core/command-plugins/extensions.js +1 -166
- package/dist/core/command-plugins/help-addenda.js +1 -44
- package/dist/core/command-plugins/presence.js +1 -17
- package/dist/core/command-plugins/revalidate.js +2 -152
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
- package/dist/core/command-plugins/transport/http-fetch.js +1 -68
- package/dist/core/command-plugins/transport/http-invoke.js +3 -546
- package/dist/core/command.js +10 -739
- package/dist/core/config.js +1 -1059
- package/dist/core/document-lines.js +3 -6
- package/dist/core/env-name.js +1 -9
- package/dist/core/errors.js +1 -52
- package/dist/core/events/emit.js +1 -17
- package/dist/core/events/envelope.js +1 -84
- package/dist/core/events/errors.js +1 -69
- package/dist/core/events/index.js +1 -4
- package/dist/core/events/operation-id.js +1 -24
- package/dist/core/events/read.js +1 -623
- package/dist/core/events/serialize.js +1 -199
- package/dist/core/events/source.js +1 -31
- package/dist/core/events/types.js +1 -11
- package/dist/core/exclusive-lock.js +1 -197
- package/dist/core/fault-classifier.js +1 -96
- package/dist/core/feed/feed.js +7 -202
- package/dist/core/feed/inbox-migrate.js +3 -135
- package/dist/core/feed/inbox.js +10 -122
- package/dist/core/feed/messages.js +6 -212
- package/dist/core/frontmatter.js +1 -35
- package/dist/core/fs-utils.js +3 -202
- package/dist/core/git.js +2 -103
- package/dist/core/help.js +9 -310
- package/dist/core/host-exports/builtins.js +9 -68
- package/dist/core/host-exports/export.js +3 -124
- package/dist/core/human/action-binding.js +1 -40
- package/dist/core/human/answer-text.js +5 -100
- package/dist/core/human/answer.js +1 -119
- package/dist/core/human/claim.js +3 -67
- package/dist/core/human/completion.js +1 -27
- package/dist/core/human/component-docs.js +78 -272
- package/dist/core/human/convention.js +2 -82
- package/dist/core/human/feedback-companion.js +1 -106
- package/dist/core/human/feedback.js +1 -88
- package/dist/core/human/page-authoring.js +1 -19
- package/dist/core/human/page-catalog.js +1 -172
- package/dist/core/human/page-errors.js +1 -7
- package/dist/core/human/page-eval.js +1 -125
- package/dist/core/human/page-html-markdown.js +8 -260
- package/dist/core/human/page-markdown.js +17 -295
- package/dist/core/human/page-schema.js +1 -373
- package/dist/core/human/page-synth.js +8 -27
- package/dist/core/human/page.js +1 -198
- package/dist/core/human/requests.js +15 -466
- package/dist/core/human/review-schema.js +1 -34
- package/dist/core/human/root.js +1 -11
- package/dist/core/human/scan.js +1 -69
- package/dist/core/human/summary.js +1 -5
- package/dist/core/human/tickets.js +1 -171
- package/dist/core/human/types.js +0 -1
- package/dist/core/human/visible-paths.js +1 -77
- package/dist/core/human-actions.js +1 -101
- package/dist/core/inspector/chrome.js +1 -14
- package/dist/core/inspector/contract.js +0 -1
- package/dist/core/inspector/core.js +2 -295
- package/dist/core/inspector/host.js +4 -538
- package/dist/core/inspector/model.js +2 -226
- package/dist/core/inspector/text.js +6 -45
- package/dist/core/inspector/transport.js +1 -36
- package/dist/core/inspector/tui.js +2 -295
- package/dist/core/installed-plugins.js +1 -78
- package/dist/core/io.js +7 -356
- package/dist/core/keybindings/attach-control.js +1 -42
- package/dist/core/keybindings/background-bash.js +1 -33
- package/dist/core/keybindings/catalog.js +1 -256
- package/dist/core/keybindings/inbox.js +1 -25
- package/dist/core/keybindings/index.js +1 -7
- package/dist/core/keybindings/match.js +1 -127
- package/dist/core/keybindings/persistence.js +1 -49
- package/dist/core/keybindings/resolve.js +1 -348
- package/dist/core/keybindings/types.js +0 -1
- package/dist/core/locked-file.js +1 -118
- package/dist/core/log.js +3 -27
- package/dist/core/manifest-recovery.js +1 -72
- package/dist/core/manifest-stale.js +1 -39
- package/dist/core/manifest.js +1 -20
- package/dist/core/memory/doc-link-grammar.js +2 -109
- package/dist/core/memory/extensions.js +1 -221
- package/dist/core/memory/history.js +6 -268
- package/dist/core/memory/identity.js +1 -181
- package/dist/core/memory/inline-ref-grammar.js +1 -98
- package/dist/core/memory/inline-ref-guidance.js +2 -35
- package/dist/core/memory/inline-ref-inventory.js +1 -59
- package/dist/core/memory/lint.js +2 -671
- package/dist/core/memory/project-namespace.js +2 -85
- package/dist/core/memory/repository-association.js +1 -129
- package/dist/core/memory/tree.js +1 -93
- package/dist/core/memory-resolver.js +2 -611
- package/dist/core/model-config.js +1 -107
- package/dist/core/model-routes.js +1 -201
- package/dist/core/nested-stores.js +2 -166
- package/dist/core/output.js +7 -99
- package/dist/core/pagination.js +1 -88
- package/dist/core/plugin-swap-lock.js +1 -31
- package/dist/core/pool-credential-store.js +1 -116
- package/dist/core/predicate.js +1 -191
- package/dist/core/preview-registry.js +2 -411
- package/dist/core/preview-result-path.js +1 -26
- package/dist/core/profiles/default-binding.js +1 -24
- package/dist/core/profiles/deletion-reservation.js +1 -42
- package/dist/core/profiles/env-store.js +2 -162
- package/dist/core/profiles/fuzzy-match.js +1 -92
- package/dist/core/profiles/manifest.js +1 -574
- package/dist/core/profiles/select.js +35 -741
- package/dist/core/profiles/state-block.js +3 -17
- package/dist/core/provider-error-recognition.js +1 -74
- package/dist/core/provider-failure.js +1 -86
- package/dist/core/provider-management.js +1 -22
- package/dist/core/remote-canvas-target.js +1 -30
- package/dist/core/render.js +18 -138
- package/dist/core/resolver.js +1 -111
- package/dist/core/review/birth.js +1 -52
- package/dist/core/review/comments.js +5 -279
- package/dist/core/review/companion.js +1 -215
- package/dist/core/review/document.js +2 -138
- package/dist/core/review/project.js +1 -36
- package/dist/core/review/realize.js +1 -71
- package/dist/core/review/remap.js +4 -141
- package/dist/core/review/signal.js +1 -12
- package/dist/core/review/stage.js +1 -184
- package/dist/core/review/store.js +1 -168
- package/dist/core/review/types.js +1 -23
- package/dist/core/runtime/advertised-command-invocation.js +1 -233
- package/dist/core/runtime/auth-reload.js +1 -67
- package/dist/core/runtime/banner.js +1 -51
- package/dist/core/runtime/bearings-render.js +18 -250
- package/dist/core/runtime/bearings.js +7 -194
- package/dist/core/runtime/bin-contributions.js +2 -186
- package/dist/core/runtime/boot-root.js +1 -107
- package/dist/core/runtime/branded-host.js +2 -264
- package/dist/core/runtime/broker/auth-reload.js +1 -157
- package/dist/core/runtime/broker/client-registry.js +1 -179
- package/dist/core/runtime/broker/daemon-ops.js +1 -88
- package/dist/core/runtime/broker/engine-drive.js +1 -354
- package/dist/core/runtime/broker/engine-routing.js +1 -211
- package/dist/core/runtime/broker/event-projection.js +1 -193
- package/dist/core/runtime/broker/extension-abort.js +1 -36
- package/dist/core/runtime/broker/fault-retry.js +1 -588
- package/dist/core/runtime/broker/frame-client.js +1 -132
- package/dist/core/runtime/broker/frame-dispatch.js +1 -183
- package/dist/core/runtime/broker/frame-engine-control.js +1 -231
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
- package/dist/core/runtime/broker/frame-model-query.js +1 -69
- package/dist/core/runtime/broker/frame-read.js +1 -116
- package/dist/core/runtime/broker/frame-replies.js +1 -64
- package/dist/core/runtime/broker/frame-session.js +4 -203
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
- package/dist/core/runtime/broker/inbox.js +13 -163
- package/dist/core/runtime/broker/node-named.js +1 -27
- package/dist/core/runtime/broker/read-ops.js +1 -171
- package/dist/core/runtime/broker/rebind.js +1 -318
- package/dist/core/runtime/broker/tool-groups.js +1 -246
- package/dist/core/runtime/broker/turn-admission.js +1 -31
- package/dist/core/runtime/broker/turn-ignition.js +1 -84
- package/dist/core/runtime/broker-cli.js +3 -81
- package/dist/core/runtime/broker-extension-render.js +5 -135
- package/dist/core/runtime/broker-inventory.js +1 -116
- package/dist/core/runtime/broker-persona-guidance.js +4 -154
- package/dist/core/runtime/broker-protocol.js +3 -152
- package/dist/core/runtime/broker-request.js +1 -85
- package/dist/core/runtime/broker-sdk.js +1 -129
- package/dist/core/runtime/broker.js +1 -1214
- package/dist/core/runtime/canvas-extensions.js +1 -96
- package/dist/core/runtime/chat-inventory-rows.js +1 -105
- package/dist/core/runtime/close.js +1 -265
- package/dist/core/runtime/command-expansion.js +9 -104
- package/dist/core/runtime/command-surface.js +1 -117
- package/dist/core/runtime/connectivity.js +1 -73
- package/dist/core/runtime/deliver-live.js +1 -88
- package/dist/core/runtime/fault-recovery.js +1 -83
- package/dist/core/runtime/fault.js +1 -17
- package/dist/core/runtime/fleet.js +1 -58
- package/dist/core/runtime/front-door-env.js +1 -16
- package/dist/core/runtime/front-door.js +7 -183
- package/dist/core/runtime/headless-pi.js +1 -161
- package/dist/core/runtime/host.js +1 -457
- package/dist/core/runtime/interactive-deliver.js +1 -51
- package/dist/core/runtime/invocation.js +0 -10
- package/dist/core/runtime/kickoff.js +30 -327
- package/dist/core/runtime/launch-config-worker.js +1 -12
- package/dist/core/runtime/launch-prompt.js +4 -13
- package/dist/core/runtime/launch-target.js +1 -55
- package/dist/core/runtime/launch.js +1 -483
- package/dist/core/runtime/lifecycle.js +2 -213
- package/dist/core/runtime/managed-provider-cooling.js +1 -62
- package/dist/core/runtime/memory.js +1 -17
- package/dist/core/runtime/model-registry.js +1 -13
- package/dist/core/runtime/model-selection.js +1 -135
- package/dist/core/runtime/model-swap.js +1 -86
- package/dist/core/runtime/naming.js +14 -298
- package/dist/core/runtime/nerd-font.js +2 -127
- package/dist/core/runtime/node-read.js +2 -386
- package/dist/core/runtime/nodes.js +1 -331
- package/dist/core/runtime/outcome-document.js +1 -97
- package/dist/core/runtime/package-health.js +4 -99
- package/dist/core/runtime/persona.js +2 -55
- package/dist/core/runtime/pi-cli.js +1 -65
- package/dist/core/runtime/pi-vendored.js +1 -66
- package/dist/core/runtime/placement-tmux.js +1 -81
- package/dist/core/runtime/placement.js +1 -386
- package/dist/core/runtime/promote.js +1 -174
- package/dist/core/runtime/prospective-inventory-cli.js +3 -61
- package/dist/core/runtime/prospective-inventory.js +2 -88
- package/dist/core/runtime/recap.js +27 -103
- package/dist/core/runtime/recycle.js +1 -190
- package/dist/core/runtime/reopen.js +1 -138
- package/dist/core/runtime/reset.js +1 -245
- package/dist/core/runtime/resume-root.js +10 -290
- package/dist/core/runtime/revive-all.js +1 -107
- package/dist/core/runtime/revive.js +4 -544
- package/dist/core/runtime/roadmap.js +4 -38
- package/dist/core/runtime/session-branch.js +1 -46
- package/dist/core/runtime/session-cycles.js +1 -110
- package/dist/core/runtime/session-list-cache.js +1 -406
- package/dist/core/runtime/session-visibility.js +1 -99
- package/dist/core/runtime/shell-expansion.js +9 -100
- package/dist/core/runtime/situational-context.js +2 -67
- package/dist/core/runtime/situational-live.js +1 -41
- package/dist/core/runtime/spawn-env.js +1 -255
- package/dist/core/runtime/spawn.js +3 -577
- package/dist/core/runtime/stamp/channel.js +1 -76
- package/dist/core/runtime/stamp/protocol.js +1 -113
- package/dist/core/runtime/stop-guard.js +7 -116
- package/dist/core/runtime/stop-signals.js +1 -46
- package/dist/core/runtime/stream-watchdog.js +1 -134
- package/dist/core/runtime/structured-output.js +4 -156
- package/dist/core/runtime/surface-bg.js +1 -85
- package/dist/core/runtime/tmux-bindings.js +4 -730
- package/dist/core/runtime/tmux-chrome.js +1 -5
- package/dist/core/runtime/tmux-driver.js +7 -637
- package/dist/core/runtime/tool-group-summary.js +6 -85
- package/dist/core/runtime/turn-visibility.js +1 -31
- package/dist/core/runtime/view-socket.js +1 -83
- package/dist/core/runtime/warm-pool.js +1 -395
- package/dist/core/scope.js +1 -254
- package/dist/core/scoped-state/db.js +1 -135
- package/dist/core/scoped-state/migrate.js +3 -181
- package/dist/core/scoped-state/paths.js +1 -27
- package/dist/core/scoped-state/profiles.js +1 -62
- package/dist/core/scoped-state/providers.js +1 -8
- package/dist/core/scoped-state/schema.js +3 -16
- package/dist/core/scoped-state/settings.js +1 -82
- package/dist/core/secrets.js +2 -55
- package/dist/core/self-update.js +1 -71
- package/dist/core/session-model/session-state.js +1 -180
- package/dist/core/shell-segments.js +4 -169
- package/dist/core/spawn.js +1 -26
- package/dist/core/stdout-errors.js +1 -14
- package/dist/core/subscription-state.js +3 -193
- package/dist/core/substrate/frontmatter-validation.js +1 -105
- package/dist/core/substrate/gate-explain.js +1 -424
- package/dist/core/substrate/gate.js +1 -26
- package/dist/core/substrate/index.js +1 -30
- package/dist/core/substrate/injected-store.js +1 -249
- package/dist/core/substrate/listings.js +1 -115
- package/dist/core/substrate/on-read-node.js +1 -36
- package/dist/core/substrate/on-read.js +9 -315
- package/dist/core/substrate/plan.js +1 -266
- package/dist/core/substrate/render-node.js +1 -30
- package/dist/core/substrate/render.js +65 -689
- package/dist/core/substrate/schema.js +1 -186
- package/dist/core/substrate/session-cache.js +1 -83
- package/dist/core/substrate/subject-fields.js +1 -35
- package/dist/core/substrate/subject.js +1 -47
- package/dist/core/substrate/surface-match.js +1 -242
- package/dist/core/termrender/code-doc.js +5 -92
- package/dist/core/termrender/display.js +2 -56
- package/dist/core/termrender/termrender.js +14 -719
- package/dist/core/termrender/version.js +1 -1
- package/dist/core/timing.js +2 -94
- package/dist/core/tui/draw.js +2 -378
- package/dist/core/tui/fuzzy.js +1 -38
- package/dist/core/tui/markdown.js +3 -407
- package/dist/core/tui/page-host.js +1 -74
- package/dist/core/tui/panel.js +1 -137
- package/dist/core/tui/terminal.js +2 -100
- package/dist/core/user-settings.js +1 -454
- package/dist/core/wake.js +1 -296
- package/dist/core/worktree-close.js +6 -228
- package/dist/core/worktree-containment.js +3 -48
- package/dist/core/worktree-landing.js +4 -56
- package/dist/core/worktree-mutation-async.js +10 -280
- package/dist/core/worktree-quarantine.js +1 -54
- package/dist/core/worktree-sweep.js +6 -453
- package/dist/core/worktree.js +18 -899
- package/dist/daemon/api/bridge.js +8 -418
- package/dist/daemon/api/handlers/attach.js +1 -65
- package/dist/daemon/api/handlers/bash-jobs.js +2 -91
- package/dist/daemon/api/handlers/broker-ops.js +1 -447
- package/dist/daemon/api/handlers/broker-recovery.js +1 -251
- package/dist/daemon/api/handlers/canvas.js +6 -490
- package/dist/daemon/api/handlers/chat-inventory.js +1 -25
- package/dist/daemon/api/handlers/crons.js +1 -373
- package/dist/daemon/api/handlers/daemon.js +1 -76
- package/dist/daemon/api/handlers/feedback-comments.js +3 -199
- package/dist/daemon/api/handlers/files.js +1 -63
- package/dist/daemon/api/handlers/focus.js +1 -92
- package/dist/daemon/api/handlers/health.js +1 -76
- package/dist/daemon/api/handlers/human-requests.js +1 -379
- package/dist/daemon/api/handlers/human.js +1 -3
- package/dist/daemon/api/handlers/inbox-page.js +1 -89
- package/dist/daemon/api/handlers/inbox.js +1 -301
- package/dist/daemon/api/handlers/memory.js +1 -50
- package/dist/daemon/api/handlers/messages.js +2 -506
- package/dist/daemon/api/handlers/model-config.js +1 -44
- package/dist/daemon/api/handlers/modelauth.js +1 -165
- package/dist/daemon/api/handlers/node-outcomes.js +1 -181
- package/dist/daemon/api/handlers/nodes.js +1 -939
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +5 -4
- package/runtime.lock.json +5 -5
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,1010 +1 @@
|
|
|
1
|
-
// Wake mail is claimed through the daemon and acknowledged by delivery identity
|
|
2
|
-
// only after Pi settles. Deferred mail rides a natural input; a refused turn
|
|
3
|
-
// releases its claims instead of acknowledging content the model never consumed.
|
|
4
|
-
import { envNodeId, envProfileId, envWatcherDebounceMs, envWatcherTickMs } from '../shared/env.js';
|
|
5
|
-
import { coalesceBrokerInbox, entryCards, reportRefNodeId, } from '../core/runtime/broker/inbox.js';
|
|
6
|
-
import { acknowledgeBrokerMail, claimBrokerMail, brokerExtensionState } from '../core/runtime/broker/daemon-ops.js';
|
|
7
|
-
import { wasTurnRefused } from '../core/runtime/broker/extension-abort.js';
|
|
8
|
-
import { announceMessageOrigin } from '../core/runtime/stamp/channel.js';
|
|
9
|
-
import { captureGoalIfAbsent, generateAndCommitInitialName } from './broker-local.js';
|
|
10
|
-
import { emitEvent } from '../core/events/emit.js';
|
|
11
|
-
import { errorClassFromError } from '../core/events/errors.js';
|
|
12
|
-
import { operationIdContext } from '../core/events/operation-id.js';
|
|
13
|
-
import { situationalContextEnvelope, SITUATIONAL_CONTEXT_CUSTOM_TYPE } from '../core/runtime/situational-context.js';
|
|
14
|
-
import { isProfilePaused } from '../core/profiles/manifest.js';
|
|
15
|
-
import { brokerIdleTurnStart, HELD_DEFERRED_INBOX_PROMPT_JOIN, } from '../core/runtime/broker/held-deferred-inbox.js';
|
|
16
|
-
const MAX_PENDING_HANDOFFS = 64;
|
|
17
|
-
const MAX_SOURCE_OPERATION_IDS = 16;
|
|
18
|
-
let currentWatcher;
|
|
19
|
-
let nextGeneration = 0;
|
|
20
|
-
class WatcherFatalError extends Error {
|
|
21
|
-
constructor(message, cause) {
|
|
22
|
-
super(message, { cause });
|
|
23
|
-
this.name = 'WatcherFatalError';
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function resolveCadence() {
|
|
27
|
-
return {
|
|
28
|
-
tickMs: envWatcherTickMs(),
|
|
29
|
-
debounceMs: envWatcherDebounceMs(),
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function currentNodeId() {
|
|
33
|
-
const nodeId = envNodeId();
|
|
34
|
-
return nodeId === undefined || nodeId.trim() === '' ? undefined : nodeId;
|
|
35
|
-
}
|
|
36
|
-
/** Profile pause is read fresh each poll from its owning scoped store. */
|
|
37
|
-
function profilePaused() {
|
|
38
|
-
const profileId = envProfileId();
|
|
39
|
-
return profileId !== undefined && profileId !== '' && isProfilePaused(profileId);
|
|
40
|
-
}
|
|
41
|
-
function safeErrorClass(error) {
|
|
42
|
-
try {
|
|
43
|
-
return errorClassFromError(error);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return { class: 'unknown' };
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
function emitBestEffort(input) {
|
|
50
|
-
try {
|
|
51
|
-
emitEvent(input);
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
// SQL delivery state remains authoritative if diagnostics fail.
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
function emitFreshBestEffort(input) {
|
|
58
|
-
try {
|
|
59
|
-
operationIdContext.fresh((operationId) => {
|
|
60
|
-
emitBestEffort({ ...input, operation_id: operationId });
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
// Diagnostic emission cannot replace the condition being diagnosed.
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
function emitStoredBestEffort(operationId, input) {
|
|
68
|
-
try {
|
|
69
|
-
operationIdContext.run(operationId, () => {
|
|
70
|
-
emitBestEffort({ ...input, operation_id: operationId });
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
catch {
|
|
74
|
-
// Delivery state remains authoritative when its observational record cannot append.
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
/** The authorship stamped onto a delivered message. A person's words arrive
|
|
78
|
-
* verbatim and are stamped as theirs — no channel, because the durable inbox
|
|
79
|
-
* is not a transport a reader can attribute. Every other delivery is the
|
|
80
|
-
* runtime's inbox card, carrying each entry's attribution as the coalescer
|
|
81
|
-
* received it. */
|
|
82
|
-
function deliveryOrigin(delivery) {
|
|
83
|
-
if (delivery.kind === 'human')
|
|
84
|
-
return { type: 'human' };
|
|
85
|
-
return {
|
|
86
|
-
type: 'runtime',
|
|
87
|
-
kind: 'inbox',
|
|
88
|
-
entries: delivery.entries.map((entry) => ({
|
|
89
|
-
...(entry.from === null ? {} : { from: entry.from }),
|
|
90
|
-
...(entry.from_name === undefined ? {} : { fromName: entry.from_name }),
|
|
91
|
-
kind: entry.kind,
|
|
92
|
-
tier: entry.tier,
|
|
93
|
-
...(entry.ref === undefined ? {} : { ref: entry.ref }),
|
|
94
|
-
})),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
function deliveryFacts(entries, channel) {
|
|
98
|
-
if (entries.length === 0)
|
|
99
|
-
throw new Error(`cannot create an empty ${channel} delivery`);
|
|
100
|
-
const allSourceOperationIds = [...new Set(entries.map((entry) => entry.operation_id))].sort();
|
|
101
|
-
const omitted = allSourceOperationIds.length - MAX_SOURCE_OPERATION_IDS;
|
|
102
|
-
return {
|
|
103
|
-
channel,
|
|
104
|
-
entryIds: entries.map((entry) => entry.entry_id),
|
|
105
|
-
throughEntryId: entries.at(-1).entry_id,
|
|
106
|
-
sourceOperationIds: allSourceOperationIds.slice(0, MAX_SOURCE_OPERATION_IDS),
|
|
107
|
-
...(omitted > 0 ? { sourceOperationIdsOmitted: omitted } : {}),
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
function deliveryFields(facts) {
|
|
111
|
-
return {
|
|
112
|
-
channel: facts.channel,
|
|
113
|
-
entry_ids: facts.entryIds,
|
|
114
|
-
through_entry_id: facts.throughEntryId,
|
|
115
|
-
source_operation_ids: facts.sourceOperationIds,
|
|
116
|
-
...(facts.sourceOperationIdsOmitted === undefined
|
|
117
|
-
? {}
|
|
118
|
-
: { source_operation_ids_omitted: facts.sourceOperationIdsOmitted }),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
function emitDeliveryCompleted(handoff) {
|
|
122
|
-
emitStoredBestEffort(handoff.operationId, {
|
|
123
|
-
level: 'info',
|
|
124
|
-
event: 'inbox.delivery.completed',
|
|
125
|
-
outcome: 'succeeded',
|
|
126
|
-
fields: deliveryFields(handoff),
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
function emitDeliveryFailure(operationId, facts, stage, error) {
|
|
130
|
-
emitStoredBestEffort(operationId, {
|
|
131
|
-
level: 'error',
|
|
132
|
-
event: 'inbox.delivery.failed',
|
|
133
|
-
outcome: 'failed',
|
|
134
|
-
error,
|
|
135
|
-
error_class: safeErrorClass(error),
|
|
136
|
-
fields: { stage, ...deliveryFields(facts) },
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
function emitDeliveryAbandoned(handoff, reason) {
|
|
140
|
-
emitStoredBestEffort(handoff.operationId, {
|
|
141
|
-
level: 'error',
|
|
142
|
-
event: 'inbox.delivery.failed',
|
|
143
|
-
outcome: 'failed',
|
|
144
|
-
error_class: { class: 'unknown' },
|
|
145
|
-
fields: { stage: 'abandoned', reason, ...deliveryFields(handoff) },
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
function isSessionShutdownReason(value) {
|
|
149
|
-
return value === 'quit' || value === 'reload' || value === 'new' || value === 'resume' || value === 'fork';
|
|
150
|
-
}
|
|
151
|
-
function disposalReasonForShutdown(reason) {
|
|
152
|
-
switch (reason) {
|
|
153
|
-
case 'quit':
|
|
154
|
-
return 'shutdown';
|
|
155
|
-
case 'reload':
|
|
156
|
-
case 'new':
|
|
157
|
-
case 'resume':
|
|
158
|
-
case 'fork':
|
|
159
|
-
return 'reload';
|
|
160
|
-
default: {
|
|
161
|
-
const exhaustive = reason;
|
|
162
|
-
return exhaustive;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
function boundedRuntimeReason(value) {
|
|
167
|
-
if (typeof value === 'string')
|
|
168
|
-
return value.slice(0, 128);
|
|
169
|
-
if (value === null)
|
|
170
|
-
return 'null';
|
|
171
|
-
if (value === undefined)
|
|
172
|
-
return 'undefined';
|
|
173
|
-
if (typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint')
|
|
174
|
-
return String(value).slice(0, 128);
|
|
175
|
-
return typeof value;
|
|
176
|
-
}
|
|
177
|
-
class CanvasInboxWatcher {
|
|
178
|
-
pi;
|
|
179
|
-
cadence;
|
|
180
|
-
generation;
|
|
181
|
-
timer;
|
|
182
|
-
armed = false;
|
|
183
|
-
lastCtx;
|
|
184
|
-
streaming = false;
|
|
185
|
-
nodeId;
|
|
186
|
-
claims = new Map();
|
|
187
|
-
tickInFlight;
|
|
188
|
-
buffer = [];
|
|
189
|
-
lastArrival = 0;
|
|
190
|
-
pendingHandoffs = [];
|
|
191
|
-
pendingCommit;
|
|
192
|
-
promptJoinInFlight = false;
|
|
193
|
-
seeded = false;
|
|
194
|
-
disposed = false;
|
|
195
|
-
disposalReason;
|
|
196
|
-
fatalError;
|
|
197
|
-
fatalEscaped = false;
|
|
198
|
-
reportNodes = new Map();
|
|
199
|
-
reportNodesAsked = new Set();
|
|
200
|
-
reportNodesRefreshing = false;
|
|
201
|
-
constructor(pi, cadence, generation) {
|
|
202
|
-
this.pi = pi;
|
|
203
|
-
this.cadence = cadence;
|
|
204
|
-
this.generation = generation;
|
|
205
|
-
}
|
|
206
|
-
start() {
|
|
207
|
-
const capture = (event, ctx) => {
|
|
208
|
-
if (!this.canMutate())
|
|
209
|
-
return;
|
|
210
|
-
this.captureCtx(event, ctx);
|
|
211
|
-
};
|
|
212
|
-
// session_start is the ONLY arm point: pi rebinds its action methods
|
|
213
|
-
// (sendUserMessage/sendMessage) during session construction, AFTER every
|
|
214
|
-
// extension factory has already run, and emits session_start only once
|
|
215
|
-
// that bind has happened (see registerCanvasInboxWatcher's header note).
|
|
216
|
-
// Registering `this.pi.on(...)` here is side-effect-free (no Pi action is
|
|
217
|
-
// called), so the factory that constructs and starts this watcher can run
|
|
218
|
-
// safely during extension loading, before actions are bound. Arming the
|
|
219
|
-
// interval + running the first tick is deferred to `arm()`, which only
|
|
220
|
-
// this handler calls.
|
|
221
|
-
this.pi.on('session_start', (event, ctx) => {
|
|
222
|
-
if (!this.canMutate())
|
|
223
|
-
return;
|
|
224
|
-
this.captureCtx(event, ctx);
|
|
225
|
-
this.arm();
|
|
226
|
-
void this.refreshReportNodes(currentNodeId());
|
|
227
|
-
});
|
|
228
|
-
this.pi.on('turn_end', capture);
|
|
229
|
-
this.pi.on('agent_start', (event, ctx) => {
|
|
230
|
-
if (!this.canMutate())
|
|
231
|
-
return;
|
|
232
|
-
this.captureCtx(event, ctx);
|
|
233
|
-
this.streaming = true;
|
|
234
|
-
});
|
|
235
|
-
this.pi.on('agent_end', (event, ctx) => {
|
|
236
|
-
if (!this.canMutate())
|
|
237
|
-
return;
|
|
238
|
-
this.captureCtx(event, ctx);
|
|
239
|
-
this.streaming = false;
|
|
240
|
-
// agent_end can precede retry, compaction, or queued continuation.
|
|
241
|
-
});
|
|
242
|
-
this.pi.on('agent_settled', async (event, ctx) => {
|
|
243
|
-
if (!this.canMutate())
|
|
244
|
-
return;
|
|
245
|
-
this.captureCtx(event, ctx);
|
|
246
|
-
const nodeId = currentNodeId();
|
|
247
|
-
if (nodeId === undefined)
|
|
248
|
-
return;
|
|
249
|
-
try {
|
|
250
|
-
this.assertNodeOwnership(nodeId, 'settle');
|
|
251
|
-
await this.tickInFlight;
|
|
252
|
-
// Include kickoff claims even when the first turn settled before a poll.
|
|
253
|
-
if (!this.seeded)
|
|
254
|
-
await this.claimMail(nodeId);
|
|
255
|
-
const result = await this.settle(nodeId, ctx, false, true);
|
|
256
|
-
if (result === 'refresh_held')
|
|
257
|
-
this.dispose('refresh', false);
|
|
258
|
-
}
|
|
259
|
-
catch (error) {
|
|
260
|
-
this.dispose('shutdown', false, undefined, { error, stage: 'settle' });
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
this.pi.on('session_shutdown', async (event) => {
|
|
264
|
-
if (!this.canMutate())
|
|
265
|
-
return;
|
|
266
|
-
let runtimeReason;
|
|
267
|
-
try {
|
|
268
|
-
runtimeReason = event?.reason;
|
|
269
|
-
}
|
|
270
|
-
catch {
|
|
271
|
-
runtimeReason = undefined;
|
|
272
|
-
}
|
|
273
|
-
const reason = isSessionShutdownReason(runtimeReason)
|
|
274
|
-
? disposalReasonForShutdown(runtimeReason)
|
|
275
|
-
: 'reload';
|
|
276
|
-
if (!isSessionShutdownReason(runtimeReason)) {
|
|
277
|
-
emitFreshBestEffort({
|
|
278
|
-
level: 'warn',
|
|
279
|
-
event: 'inbox.lifecycle.unknown_shutdown_reason',
|
|
280
|
-
outcome: 'failed',
|
|
281
|
-
fields: { reason: boundedRuntimeReason(runtimeReason) },
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
try {
|
|
285
|
-
// Refresh rejects receipts, preserving claims for the replacement broker.
|
|
286
|
-
await this.disposeAtSettlement(reason, this.lastCtx);
|
|
287
|
-
}
|
|
288
|
-
catch (error) {
|
|
289
|
-
this.dispose(reason, false, undefined, { error, stage: 'settle' });
|
|
290
|
-
}
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
/** Idempotent: arms the poll interval and runs the initial tick exactly
|
|
294
|
-
* once, no matter how many times `session_start` fires (a resume, a fork,
|
|
295
|
-
* or any other re-emission all land here). Called only from the
|
|
296
|
-
* `session_start` handler above, so it never runs before Pi's action
|
|
297
|
-
* methods are bound. */
|
|
298
|
-
async refreshReportNodes(nodeId) {
|
|
299
|
-
if (nodeId === undefined)
|
|
300
|
-
return;
|
|
301
|
-
this.reportNodesRefreshing = true;
|
|
302
|
-
try {
|
|
303
|
-
const state = await brokerExtensionState(nodeId);
|
|
304
|
-
if (!this.canMutate())
|
|
305
|
-
return;
|
|
306
|
-
this.reportNodes = new Map(state.report_nodes.map((node) => [node.node_id, node]));
|
|
307
|
-
}
|
|
308
|
-
catch {
|
|
309
|
-
// Report bodies remain canonical pointers until the daemon projection is available.
|
|
310
|
-
}
|
|
311
|
-
finally {
|
|
312
|
-
this.reportNodesRefreshing = false;
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
/** Refresh once per unknown report sender, so new children can inline their reports. */
|
|
316
|
-
refreshForUnknownReportRefs() {
|
|
317
|
-
const unknown = [];
|
|
318
|
-
for (const entry of this.buffer) {
|
|
319
|
-
const refNodeId = reportRefNodeId(entry.ref);
|
|
320
|
-
if (refNodeId === undefined)
|
|
321
|
-
continue;
|
|
322
|
-
if (this.reportNodes.has(refNodeId) || this.reportNodesAsked.has(refNodeId))
|
|
323
|
-
continue;
|
|
324
|
-
unknown.push(refNodeId);
|
|
325
|
-
}
|
|
326
|
-
if (unknown.length === 0)
|
|
327
|
-
return false;
|
|
328
|
-
for (const refNodeId of unknown)
|
|
329
|
-
this.reportNodesAsked.add(refNodeId);
|
|
330
|
-
void this.refreshReportNodes(currentNodeId());
|
|
331
|
-
return this.reportNodesRefreshing;
|
|
332
|
-
}
|
|
333
|
-
arm() {
|
|
334
|
-
if (this.armed)
|
|
335
|
-
return;
|
|
336
|
-
this.armed = true;
|
|
337
|
-
this.timer = setInterval(() => this.runTick(), this.cadence.tickMs);
|
|
338
|
-
if (typeof this.timer.unref === 'function')
|
|
339
|
-
this.timer.unref();
|
|
340
|
-
// A revived broker can already have persisted inbox work. Buffer it now so
|
|
341
|
-
// the normal debounce owns delivery instead of waiting a full tick.
|
|
342
|
-
this.runTick('schedule');
|
|
343
|
-
}
|
|
344
|
-
/** Await graceful-shutdown receipts before disposing their in-process state. */
|
|
345
|
-
async disposeAtSettlement(reason, ctx) {
|
|
346
|
-
const nodeId = currentNodeId();
|
|
347
|
-
if (nodeId === undefined) {
|
|
348
|
-
this.dispose(reason, false);
|
|
349
|
-
return;
|
|
350
|
-
}
|
|
351
|
-
try {
|
|
352
|
-
this.assertNodeOwnership(nodeId, 'settle');
|
|
353
|
-
const result = await this.settle(nodeId, ctx, reason !== 'refresh');
|
|
354
|
-
this.dispose(result === 'refresh_held' ? 'refresh' : reason, false);
|
|
355
|
-
}
|
|
356
|
-
catch (error) {
|
|
357
|
-
this.dispose(reason, false, undefined, { error, stage: 'settle' });
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
dispose(reason, _atSettleBoundary, _settleCtx, fatalDisposal) {
|
|
361
|
-
if (this.disposed)
|
|
362
|
-
return;
|
|
363
|
-
this.disposed = true;
|
|
364
|
-
this.disposalReason = reason;
|
|
365
|
-
this.clearTimer();
|
|
366
|
-
const fatal = fatalDisposal;
|
|
367
|
-
{
|
|
368
|
-
const abandoned = [
|
|
369
|
-
...(this.pendingCommit?.handoffs ?? []),
|
|
370
|
-
...this.pendingHandoffs.splice(0),
|
|
371
|
-
];
|
|
372
|
-
this.buffer.length = 0;
|
|
373
|
-
this.claims.clear();
|
|
374
|
-
this.reportNodes.clear();
|
|
375
|
-
this.reportNodesAsked.clear();
|
|
376
|
-
this.pendingCommit = undefined;
|
|
377
|
-
this.promptJoinInFlight = false;
|
|
378
|
-
this.nodeId = undefined;
|
|
379
|
-
this.lastCtx = undefined;
|
|
380
|
-
this.lastArrival = 0;
|
|
381
|
-
this.streaming = false;
|
|
382
|
-
this.seeded = false;
|
|
383
|
-
if (this.ownsCurrentGeneration())
|
|
384
|
-
currentWatcher = undefined;
|
|
385
|
-
for (const handoff of abandoned)
|
|
386
|
-
emitDeliveryAbandoned(handoff, reason);
|
|
387
|
-
}
|
|
388
|
-
if (fatal !== undefined) {
|
|
389
|
-
this.scheduleHandlerFatal(fatal.error, fatal.stage);
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
ownsCurrentGeneration() {
|
|
394
|
-
return currentWatcher === this && currentWatcher.generation === this.generation;
|
|
395
|
-
}
|
|
396
|
-
canMutate() {
|
|
397
|
-
return this.ownsCurrentGeneration() && !this.disposed && this.fatalError === undefined;
|
|
398
|
-
}
|
|
399
|
-
captureCtx(_event, ctx) {
|
|
400
|
-
if (ctx !== undefined)
|
|
401
|
-
this.lastCtx = ctx;
|
|
402
|
-
}
|
|
403
|
-
clearTimer() {
|
|
404
|
-
if (this.timer === undefined)
|
|
405
|
-
return;
|
|
406
|
-
clearInterval(this.timer);
|
|
407
|
-
this.timer = undefined;
|
|
408
|
-
}
|
|
409
|
-
isIdle() {
|
|
410
|
-
try {
|
|
411
|
-
if (typeof this.lastCtx?.isIdle === 'function')
|
|
412
|
-
return this.lastCtx.isIdle() === true;
|
|
413
|
-
}
|
|
414
|
-
catch {
|
|
415
|
-
// The streaming flag remains the local idle signal when context inspection fails.
|
|
416
|
-
}
|
|
417
|
-
return !this.streaming;
|
|
418
|
-
}
|
|
419
|
-
assertNodeOwnership(nodeId, stage) {
|
|
420
|
-
if (!this.seeded || this.nodeId === undefined || this.nodeId === nodeId)
|
|
421
|
-
return;
|
|
422
|
-
this.raiseReadFatal(stage, new Error(`watcher node changed from ${this.nodeId} to ${nodeId}`));
|
|
423
|
-
}
|
|
424
|
-
raiseFatal(event, message, error, fields) {
|
|
425
|
-
if (this.fatalError === undefined) {
|
|
426
|
-
this.fatalError = new WatcherFatalError(message, error);
|
|
427
|
-
this.clearTimer();
|
|
428
|
-
emitFreshBestEffort({
|
|
429
|
-
level: 'error',
|
|
430
|
-
event,
|
|
431
|
-
outcome: 'failed',
|
|
432
|
-
error,
|
|
433
|
-
error_class: safeErrorClass(error),
|
|
434
|
-
fields,
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
throw this.fatalError;
|
|
438
|
-
}
|
|
439
|
-
raiseReadFatal(stage, error) {
|
|
440
|
-
return this.raiseFatal('inbox.read.failed', `inbox ${stage} state is corrupt`, error, { stage });
|
|
441
|
-
}
|
|
442
|
-
raiseSituationalFatal(markerEntryId, error) {
|
|
443
|
-
return this.raiseFatal('inbox.situational_context.missing', 'situational context marker has no readable sidecar', error, {
|
|
444
|
-
entry_id: markerEntryId,
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
escapeFatal(error, mode) {
|
|
448
|
-
if (this.fatalEscaped)
|
|
449
|
-
return;
|
|
450
|
-
this.fatalEscaped = true;
|
|
451
|
-
if (mode === 'throw')
|
|
452
|
-
throw error;
|
|
453
|
-
queueMicrotask(() => {
|
|
454
|
-
throw error;
|
|
455
|
-
});
|
|
456
|
-
}
|
|
457
|
-
scheduleHandlerFatal(error, stage) {
|
|
458
|
-
let fatal;
|
|
459
|
-
if (error instanceof WatcherFatalError) {
|
|
460
|
-
fatal = error;
|
|
461
|
-
}
|
|
462
|
-
else {
|
|
463
|
-
try {
|
|
464
|
-
this.raiseReadFatal(stage, error);
|
|
465
|
-
}
|
|
466
|
-
catch (tagged) {
|
|
467
|
-
fatal = tagged;
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
this.escapeFatal(fatal, 'schedule');
|
|
471
|
-
}
|
|
472
|
-
runTick(_fatalMode = 'throw') {
|
|
473
|
-
if (!this.canMutate() || this.tickInFlight !== undefined)
|
|
474
|
-
return;
|
|
475
|
-
const attempt = this.tick().catch((error) => {
|
|
476
|
-
if (this.canMutate())
|
|
477
|
-
this.scheduleHandlerFatal(error, 'poll');
|
|
478
|
-
}).finally(() => {
|
|
479
|
-
if (this.tickInFlight === attempt)
|
|
480
|
-
this.tickInFlight = undefined;
|
|
481
|
-
});
|
|
482
|
-
this.tickInFlight = attempt;
|
|
483
|
-
}
|
|
484
|
-
async claimMail(nodeId) {
|
|
485
|
-
this.assertNodeOwnership(nodeId, 'poll');
|
|
486
|
-
const result = await claimBrokerMail(nodeId, 'wake');
|
|
487
|
-
if (!this.canMutate())
|
|
488
|
-
return false;
|
|
489
|
-
if (result.action === 'hold')
|
|
490
|
-
return false;
|
|
491
|
-
this.nodeId = nodeId;
|
|
492
|
-
this.seeded = true;
|
|
493
|
-
const activeIds = new Set(result.deliveries.map((claim) => claim.entry.entry_id));
|
|
494
|
-
// A canceled buffered delivery disappears from the daemon's claim query.
|
|
495
|
-
const canceled = this.buffer.filter((entry) => !activeIds.has(entry.entry_id));
|
|
496
|
-
for (const entry of canceled)
|
|
497
|
-
this.claims.delete(entry.entry_id);
|
|
498
|
-
this.buffer.splice(0, this.buffer.length, ...this.buffer.filter((entry) => activeIds.has(entry.entry_id)));
|
|
499
|
-
for (const claim of result.deliveries) {
|
|
500
|
-
const id = claim.entry.entry_id;
|
|
501
|
-
if (this.claims.has(id))
|
|
502
|
-
continue;
|
|
503
|
-
this.claims.set(id, claim);
|
|
504
|
-
if (claim.handoff === 'inherited') {
|
|
505
|
-
operationIdContext.fresh((operationId) => {
|
|
506
|
-
this.pendingHandoffs.push({ ...deliveryFacts([claim.entry], 'visible'), operationId, settleAtAgentSettled: true });
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
else {
|
|
510
|
-
this.buffer.push(claim.entry);
|
|
511
|
-
this.lastArrival = Date.now();
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
return true;
|
|
515
|
-
}
|
|
516
|
-
async tick() {
|
|
517
|
-
const nodeId = currentNodeId();
|
|
518
|
-
if (nodeId === undefined)
|
|
519
|
-
return;
|
|
520
|
-
if (this.pendingCommit !== undefined) {
|
|
521
|
-
const result = await this.retryPendingCommit(nodeId);
|
|
522
|
-
if (result === 'refresh_held' && this.canMutate())
|
|
523
|
-
this.dispose('refresh', false);
|
|
524
|
-
return;
|
|
525
|
-
}
|
|
526
|
-
if (this.promptJoinInFlight || profilePaused())
|
|
527
|
-
return;
|
|
528
|
-
if (this.pendingHandoffs.length >= MAX_PENDING_HANDOFFS)
|
|
529
|
-
return;
|
|
530
|
-
if (!await this.claimMail(nodeId))
|
|
531
|
-
return;
|
|
532
|
-
if (this.buffer.length > 0 && Date.now() - this.lastArrival >= this.cadence.debounceMs) {
|
|
533
|
-
if (this.refreshForUnknownReportRefs())
|
|
534
|
-
return;
|
|
535
|
-
this.flushOrdinary(nodeId);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
missingChannelEntries(entries) {
|
|
539
|
-
// Each claim refresh removes canceled buffered entries before either channel sends.
|
|
540
|
-
const live = entries.filter((entry) => this.claims.has(entry.entry_id));
|
|
541
|
-
const hiddenCoverage = this.coveredEntryIds('hidden');
|
|
542
|
-
const visibleCoverage = this.coveredEntryIds('visible');
|
|
543
|
-
return {
|
|
544
|
-
// The context channel carries a batch's sidecar card and the one-shot
|
|
545
|
-
// cards of entries that get no visible delivery of their own. A
|
|
546
|
-
// `situationalOnly` entry is in NO other channel, so its coverage and
|
|
547
|
-
// commit depend on being routed here even when it carries no sidecar.
|
|
548
|
-
hiddenEntries: live.filter((entry) => (entry.data?.['situational'] === true || entry.data?.['situationalOnly'] === true)
|
|
549
|
-
&& !hiddenCoverage.has(entry.entry_id)),
|
|
550
|
-
visibleEntries: live.filter((entry) => entry.data?.['situationalOnly'] !== true && !visibleCoverage.has(entry.entry_id)),
|
|
551
|
-
};
|
|
552
|
-
}
|
|
553
|
-
visibleRoute(entries) {
|
|
554
|
-
if (entries.length === 0)
|
|
555
|
-
return 'none';
|
|
556
|
-
if (this.isIdle())
|
|
557
|
-
return 'idle';
|
|
558
|
-
if (entries.some((entry) => entry.tier === 'critical'))
|
|
559
|
-
return 'critical';
|
|
560
|
-
if (entries.some((entry) => entry.tier === 'urgent' || entry.kind === 'final'))
|
|
561
|
-
return 'steer';
|
|
562
|
-
return 'followUp';
|
|
563
|
-
}
|
|
564
|
-
buildPlan(entries) {
|
|
565
|
-
const { hiddenEntries, visibleEntries } = this.missingChannelEntries(entries);
|
|
566
|
-
const hiddenIds = new Set(hiddenEntries.map((entry) => entry.entry_id));
|
|
567
|
-
const visibleIds = new Set(visibleEntries.map((entry) => entry.entry_id));
|
|
568
|
-
const routedEntries = entries.filter((entry) => hiddenIds.has(entry.entry_id) || visibleIds.has(entry.entry_id));
|
|
569
|
-
// Deferred-only idle mail remains in this buffer until a non-deferred inbox
|
|
570
|
-
// entry starts delivery, or a live human prompt claims it through
|
|
571
|
-
// prependHeldDeferredInbox(). Neither path wakes the node on its own.
|
|
572
|
-
const deferredHold = this.isIdle()
|
|
573
|
-
&& routedEntries.length > 0
|
|
574
|
-
&& routedEntries.every((entry) => entry.tier === 'deferred');
|
|
575
|
-
// A critical entry aborts and requeues the whole batch before anything is
|
|
576
|
-
// sent, so neither channel counts against handoff capacity.
|
|
577
|
-
const critical = this.visibleRoute(visibleEntries) === 'critical';
|
|
578
|
-
const hiddenSend = !deferredHold && !critical && hiddenEntries.length > 0;
|
|
579
|
-
const visibleSend = !deferredHold && !critical && visibleEntries.length > 0;
|
|
580
|
-
return {
|
|
581
|
-
hiddenEntries,
|
|
582
|
-
visibleEntries,
|
|
583
|
-
deferredHold,
|
|
584
|
-
sendCount: Number(hiddenSend) + Number(visibleSend),
|
|
585
|
-
};
|
|
586
|
-
}
|
|
587
|
-
ordinaryPlan() {
|
|
588
|
-
return this.buildPlan(this.buffer);
|
|
589
|
-
}
|
|
590
|
-
/** The context channel's ordered cards for one batch: the sidecar envelope
|
|
591
|
-
* once (a batch containing any situational-marked entry), then the one-shot
|
|
592
|
-
* cards of entries that have no visible delivery to ride. */
|
|
593
|
-
contextCards(nodeId, entries) {
|
|
594
|
-
const cards = [];
|
|
595
|
-
if (entries.some((entry) => entry.data?.['situational'] === true)) {
|
|
596
|
-
const markerEntryId = entries.at(-1).entry_id;
|
|
597
|
-
let envelope;
|
|
598
|
-
try {
|
|
599
|
-
envelope = situationalContextEnvelope(nodeId);
|
|
600
|
-
}
|
|
601
|
-
catch (error) {
|
|
602
|
-
this.raiseSituationalFatal(markerEntryId, error);
|
|
603
|
-
}
|
|
604
|
-
if (envelope === null) {
|
|
605
|
-
this.raiseSituationalFatal(markerEntryId, new Error(`missing situational context for entry ${markerEntryId}`));
|
|
606
|
-
}
|
|
607
|
-
cards.push(envelope);
|
|
608
|
-
}
|
|
609
|
-
for (const entry of entries) {
|
|
610
|
-
if (entry.data?.['situationalOnly'] === true)
|
|
611
|
-
cards.push(...entryCards(entry));
|
|
612
|
-
}
|
|
613
|
-
return cards;
|
|
614
|
-
}
|
|
615
|
-
digest(entries, stage) {
|
|
616
|
-
try {
|
|
617
|
-
return coalesceBrokerInbox(entries, this.reportNodes);
|
|
618
|
-
}
|
|
619
|
-
catch (error) {
|
|
620
|
-
this.raiseReadFatal(stage, error);
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
sendDelivery(channel, entries, send, fatalStage) {
|
|
624
|
-
if (this.pendingHandoffs.length >= MAX_PENDING_HANDOFFS) {
|
|
625
|
-
this.raiseReadFatal(fatalStage, new Error(`pending handoff capacity exceeded before ${channel} send`));
|
|
626
|
-
}
|
|
627
|
-
let facts;
|
|
628
|
-
try {
|
|
629
|
-
facts = deliveryFacts(entries, channel);
|
|
630
|
-
}
|
|
631
|
-
catch (error) {
|
|
632
|
-
this.raiseReadFatal(fatalStage, error);
|
|
633
|
-
}
|
|
634
|
-
let operationId;
|
|
635
|
-
try {
|
|
636
|
-
operationIdContext.fresh((freshOperationId) => {
|
|
637
|
-
operationId = freshOperationId;
|
|
638
|
-
emitBestEffort({
|
|
639
|
-
level: 'info',
|
|
640
|
-
event: 'inbox.delivery.started',
|
|
641
|
-
operation_id: freshOperationId,
|
|
642
|
-
fields: deliveryFields(facts),
|
|
643
|
-
});
|
|
644
|
-
send();
|
|
645
|
-
});
|
|
646
|
-
}
|
|
647
|
-
catch (error) {
|
|
648
|
-
if (operationId === undefined)
|
|
649
|
-
this.raiseReadFatal(fatalStage, error);
|
|
650
|
-
emitDeliveryFailure(operationId, facts, 'send', error);
|
|
651
|
-
return 'failed';
|
|
652
|
-
}
|
|
653
|
-
if (operationId === undefined) {
|
|
654
|
-
this.raiseReadFatal(fatalStage, new Error(`${channel} delivery returned without an operation id`));
|
|
655
|
-
}
|
|
656
|
-
const handoff = { operationId, ...facts };
|
|
657
|
-
if (!this.canMutate()) {
|
|
658
|
-
if (this.disposed && this.disposalReason !== undefined)
|
|
659
|
-
emitDeliveryAbandoned(handoff, this.disposalReason);
|
|
660
|
-
return 'inactive';
|
|
661
|
-
}
|
|
662
|
-
this.pendingHandoffs.push(handoff);
|
|
663
|
-
return 'handed-off';
|
|
664
|
-
}
|
|
665
|
-
/** Send the batch's context cards. `route` is the route the visible delivery
|
|
666
|
-
* of this same cycle takes, so a streaming card queues behind nothing and
|
|
667
|
-
* ahead of the body. `triggersTurn` is set only when this cycle has no
|
|
668
|
-
* visible send at all — then the LAST card carries the wake. */
|
|
669
|
-
sendContext(nodeId, entries, cards, route, triggersTurn, stage) {
|
|
670
|
-
return this.sendDelivery('hidden', entries, () => {
|
|
671
|
-
const streamingRoute = route === 'steer' || route === 'followUp'
|
|
672
|
-
? route
|
|
673
|
-
: this.isIdle() ? undefined : 'followUp';
|
|
674
|
-
cards.forEach((card, index) => {
|
|
675
|
-
const wake = triggersTurn && index === cards.length - 1;
|
|
676
|
-
this.pi.sendMessage({
|
|
677
|
-
customType: SITUATIONAL_CONTEXT_CUSTOM_TYPE,
|
|
678
|
-
content: card,
|
|
679
|
-
display: true,
|
|
680
|
-
details: { nodeId },
|
|
681
|
-
}, streamingRoute !== undefined
|
|
682
|
-
? { deliverAs: streamingRoute }
|
|
683
|
-
: wake ? { deliverAs: 'followUp', triggerTurn: true } : {});
|
|
684
|
-
});
|
|
685
|
-
}, stage);
|
|
686
|
-
}
|
|
687
|
-
/** The visible delivery and its own entry's one-shot cards share ONE failure
|
|
688
|
-
* unit: a throw anywhere requeues the whole entry, so a retry may repeat a
|
|
689
|
-
* card already handed off (context is restatable; the human's body is not,
|
|
690
|
-
* and it is sent last). */
|
|
691
|
-
sendVisible(entries, cards, content, origin, route, stage) {
|
|
692
|
-
return this.sendDelivery('visible', entries, () => {
|
|
693
|
-
if (route !== 'idle' && route !== 'steer' && route !== 'followUp') {
|
|
694
|
-
throw new Error(`visible send requested for non-send route ${route}`);
|
|
695
|
-
}
|
|
696
|
-
for (const card of cards) {
|
|
697
|
-
this.pi.sendMessage({ customType: SITUATIONAL_CONTEXT_CUSTOM_TYPE, content: card, display: true }, route === 'idle' ? {} : { deliverAs: route });
|
|
698
|
-
}
|
|
699
|
-
// Claimed by the stamp writer against the message pi persists, so a send
|
|
700
|
-
// that throws here leaves an announcement nobody claims rather than one
|
|
701
|
-
// that mislabels a later message.
|
|
702
|
-
announceMessageOrigin(content, origin);
|
|
703
|
-
if (route === 'idle') {
|
|
704
|
-
const start = brokerIdleTurnStart();
|
|
705
|
-
if (start === undefined)
|
|
706
|
-
throw new Error('broker idle-turn admission is unavailable');
|
|
707
|
-
start(content);
|
|
708
|
-
}
|
|
709
|
-
else {
|
|
710
|
-
this.pi.sendUserMessage(content, { deliverAs: route });
|
|
711
|
-
}
|
|
712
|
-
}, stage);
|
|
713
|
-
}
|
|
714
|
-
abortCritical() {
|
|
715
|
-
try {
|
|
716
|
-
this.lastCtx?.abort?.();
|
|
717
|
-
}
|
|
718
|
-
catch {
|
|
719
|
-
// Abort is best-effort; the retained entries remain the retry source.
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
requeueFromBatch(batch, entryIds) {
|
|
723
|
-
if (entryIds.size === 0)
|
|
724
|
-
return;
|
|
725
|
-
const requeued = batch.filter((entry) => entryIds.has(entry.entry_id));
|
|
726
|
-
const requeuedIds = new Set(requeued.map((entry) => entry.entry_id));
|
|
727
|
-
const tail = this.buffer.filter((entry) => !requeuedIds.has(entry.entry_id));
|
|
728
|
-
this.buffer.splice(0, this.buffer.length, ...requeued, ...tail);
|
|
729
|
-
}
|
|
730
|
-
executePlan(nodeId, plan, stage) {
|
|
731
|
-
const requeueEntryIds = new Set();
|
|
732
|
-
// Route over the WHOLE visible set BEFORE anything is sent: a critical entry
|
|
733
|
-
// anywhere aborts the live turn and requeues the batch, cards included.
|
|
734
|
-
const route = this.visibleRoute(plan.visibleEntries);
|
|
735
|
-
if (route === 'critical') {
|
|
736
|
-
this.abortCritical();
|
|
737
|
-
if (!this.canMutate())
|
|
738
|
-
return { inactive: true, requeueEntryIds };
|
|
739
|
-
for (const entry of plan.visibleEntries)
|
|
740
|
-
requeueEntryIds.add(entry.entry_id);
|
|
741
|
-
for (const entry of plan.hiddenEntries)
|
|
742
|
-
requeueEntryIds.add(entry.entry_id);
|
|
743
|
-
return { inactive: false, requeueEntryIds };
|
|
744
|
-
}
|
|
745
|
-
// A mixed batch splits into several deliveries, and exactly one goes out
|
|
746
|
-
// per cycle: pi marks the session streaming only after awaits inside
|
|
747
|
-
// prompt(), so two user sends in one tick start two concurrent agent runs.
|
|
748
|
-
// The rest requeue and go out on later ticks, in order, behind this one —
|
|
749
|
-
// a requeued delivery's one-shot cards requeue with it.
|
|
750
|
-
const deliveries = plan.visibleEntries.length > 0 ? this.digest(plan.visibleEntries, stage) : [];
|
|
751
|
-
const [delivery, ...deferred] = deliveries;
|
|
752
|
-
for (const rest of deferred) {
|
|
753
|
-
for (const entry of rest.entries)
|
|
754
|
-
requeueEntryIds.add(entry.entry_id);
|
|
755
|
-
}
|
|
756
|
-
if (plan.hiddenEntries.length > 0) {
|
|
757
|
-
const cards = this.contextCards(nodeId, plan.hiddenEntries);
|
|
758
|
-
const result = this.sendContext(nodeId, plan.hiddenEntries, cards, route, delivery === undefined, stage);
|
|
759
|
-
if (result === 'inactive')
|
|
760
|
-
return { inactive: true, requeueEntryIds };
|
|
761
|
-
if (result === 'failed') {
|
|
762
|
-
for (const entry of plan.hiddenEntries)
|
|
763
|
-
requeueEntryIds.add(entry.entry_id);
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
if (!this.canMutate())
|
|
767
|
-
return { inactive: true, requeueEntryIds };
|
|
768
|
-
if (delivery !== undefined) {
|
|
769
|
-
const result = this.sendVisible(delivery.entries, delivery.cards, delivery.text, deliveryOrigin(delivery), route, stage);
|
|
770
|
-
if (result === 'inactive')
|
|
771
|
-
return { inactive: true, requeueEntryIds };
|
|
772
|
-
if (result === 'failed') {
|
|
773
|
-
for (const entry of delivery.entries)
|
|
774
|
-
requeueEntryIds.add(entry.entry_id);
|
|
775
|
-
}
|
|
776
|
-
else if (delivery.kind === 'human') {
|
|
777
|
-
// A person's own words, delivered through the durable inbox because the
|
|
778
|
-
// broker was cold when they arrived (crtrd's revive path, not pi's live
|
|
779
|
-
// socket). pi never fires its own `input` event for this path, so
|
|
780
|
-
// canvas-goal-capture's first-message hooks never run — mirror both here
|
|
781
|
-
// so an inbox-delivered first message names the node and survives a
|
|
782
|
-
// fresh revive exactly like a live-socket one. Both helpers are
|
|
783
|
-
// idempotent (no-op once a goal/description already exists).
|
|
784
|
-
captureGoalIfAbsent(nodeId, delivery.text);
|
|
785
|
-
generateAndCommitInitialName(nodeId, delivery.text);
|
|
786
|
-
}
|
|
787
|
-
}
|
|
788
|
-
return { inactive: false, requeueEntryIds };
|
|
789
|
-
}
|
|
790
|
-
flushOrdinary(nodeId) {
|
|
791
|
-
if (this.buffer.length === 0)
|
|
792
|
-
return 'empty';
|
|
793
|
-
const plan = this.ordinaryPlan();
|
|
794
|
-
if (plan.deferredHold)
|
|
795
|
-
return 'held';
|
|
796
|
-
if (this.pendingHandoffs.length + plan.sendCount > MAX_PENDING_HANDOFFS)
|
|
797
|
-
return 'capacity-blocked';
|
|
798
|
-
const batch = [...this.buffer];
|
|
799
|
-
const execution = this.executePlan(nodeId, plan, 'poll');
|
|
800
|
-
if (execution.inactive)
|
|
801
|
-
return 'attempted';
|
|
802
|
-
this.buffer.splice(0, batch.length);
|
|
803
|
-
this.requeueFromBatch(batch, execution.requeueEntryIds);
|
|
804
|
-
return 'attempted';
|
|
805
|
-
}
|
|
806
|
-
/** Deferred mail joins an admitted human prompt but remains unacknowledged until settlement. */
|
|
807
|
-
async prependHeldDeferredInbox(session) {
|
|
808
|
-
if (!this.canMutate() || this.nodeId === undefined || profilePaused())
|
|
809
|
-
return;
|
|
810
|
-
const plan = this.ordinaryPlan();
|
|
811
|
-
if (!plan.deferredHold)
|
|
812
|
-
return;
|
|
813
|
-
const deliveries = plan.visibleEntries.length === 0
|
|
814
|
-
? []
|
|
815
|
-
: this.digest(plan.visibleEntries, 'poll');
|
|
816
|
-
const handoffCount = Number(plan.hiddenEntries.length > 0) + deliveries.length;
|
|
817
|
-
if (this.pendingHandoffs.length + handoffCount > MAX_PENDING_HANDOFFS)
|
|
818
|
-
return;
|
|
819
|
-
const batch = [...this.buffer];
|
|
820
|
-
this.promptJoinInFlight = true;
|
|
821
|
-
try {
|
|
822
|
-
if (plan.hiddenEntries.length > 0) {
|
|
823
|
-
await this.sendPromptJoinDelivery(session, 'hidden', plan.hiddenEntries, this.contextCards(this.nodeId, plan.hiddenEntries));
|
|
824
|
-
}
|
|
825
|
-
for (const delivery of deliveries) {
|
|
826
|
-
await this.sendPromptJoinDelivery(session, 'visible', delivery.entries, [...delivery.cards, delivery.text]);
|
|
827
|
-
}
|
|
828
|
-
if (!this.canMutate())
|
|
829
|
-
return;
|
|
830
|
-
this.buffer.splice(0, batch.length);
|
|
831
|
-
}
|
|
832
|
-
finally {
|
|
833
|
-
this.promptJoinInFlight = false;
|
|
834
|
-
}
|
|
835
|
-
}
|
|
836
|
-
async sendPromptJoinDelivery(session, channel, entries, messages) {
|
|
837
|
-
let facts;
|
|
838
|
-
try {
|
|
839
|
-
facts = deliveryFacts(entries, channel);
|
|
840
|
-
}
|
|
841
|
-
catch (error) {
|
|
842
|
-
this.raiseReadFatal('poll', error);
|
|
843
|
-
}
|
|
844
|
-
let operationId;
|
|
845
|
-
try {
|
|
846
|
-
await operationIdContext.fresh(async (freshOperationId) => {
|
|
847
|
-
operationId = freshOperationId;
|
|
848
|
-
emitBestEffort({
|
|
849
|
-
level: 'info',
|
|
850
|
-
event: 'inbox.delivery.started',
|
|
851
|
-
operation_id: freshOperationId,
|
|
852
|
-
fields: deliveryFields(facts),
|
|
853
|
-
});
|
|
854
|
-
for (const content of messages) {
|
|
855
|
-
await session.sendCustomMessage({
|
|
856
|
-
customType: SITUATIONAL_CONTEXT_CUSTOM_TYPE,
|
|
857
|
-
content,
|
|
858
|
-
display: true,
|
|
859
|
-
});
|
|
860
|
-
}
|
|
861
|
-
});
|
|
862
|
-
}
|
|
863
|
-
catch (error) {
|
|
864
|
-
if (operationId === undefined)
|
|
865
|
-
this.raiseReadFatal('poll', error);
|
|
866
|
-
emitDeliveryFailure(operationId, facts, 'send', error);
|
|
867
|
-
throw error;
|
|
868
|
-
}
|
|
869
|
-
if (operationId === undefined) {
|
|
870
|
-
this.raiseReadFatal('poll', new Error(`${channel} prompt-join delivery returned without an operation id`));
|
|
871
|
-
}
|
|
872
|
-
const handoff = { operationId, ...facts, settleAtAgentSettled: true };
|
|
873
|
-
if (!this.canMutate()) {
|
|
874
|
-
if (this.disposed && this.disposalReason !== undefined)
|
|
875
|
-
emitDeliveryAbandoned(handoff, this.disposalReason);
|
|
876
|
-
return;
|
|
877
|
-
}
|
|
878
|
-
this.pendingHandoffs.push(handoff);
|
|
879
|
-
}
|
|
880
|
-
coveredEntryIds(channel) {
|
|
881
|
-
const covered = new Set();
|
|
882
|
-
for (const handoff of this.pendingHandoffs) {
|
|
883
|
-
if (handoff.channel !== channel)
|
|
884
|
-
continue;
|
|
885
|
-
for (const entryId of handoff.entryIds)
|
|
886
|
-
covered.add(entryId);
|
|
887
|
-
}
|
|
888
|
-
return covered;
|
|
889
|
-
}
|
|
890
|
-
retryPendingCommit(nodeId) {
|
|
891
|
-
const pending = this.pendingCommit;
|
|
892
|
-
if (pending === undefined)
|
|
893
|
-
return Promise.resolve('settled');
|
|
894
|
-
if (pending.attempt !== undefined)
|
|
895
|
-
return pending.attempt;
|
|
896
|
-
const attempt = this.attemptPendingCommit(nodeId, pending).finally(() => {
|
|
897
|
-
if (pending.attempt === attempt)
|
|
898
|
-
pending.attempt = undefined;
|
|
899
|
-
});
|
|
900
|
-
pending.attempt = attempt;
|
|
901
|
-
return attempt;
|
|
902
|
-
}
|
|
903
|
-
async attemptPendingCommit(nodeId, pending) {
|
|
904
|
-
let acknowledged = false;
|
|
905
|
-
try {
|
|
906
|
-
const directive = await acknowledgeBrokerMail(nodeId, pending.receipts);
|
|
907
|
-
if (directive.action === 'hold')
|
|
908
|
-
return 'refresh_held';
|
|
909
|
-
for (const receipt of pending.receipts) {
|
|
910
|
-
const result = directive.results.find((result) => result.delivery_id === receipt.delivery_id);
|
|
911
|
-
if (result?.outcome !== receipt.disposition && result?.outcome !== 'stale')
|
|
912
|
-
throw new Error('daemon returned no terminal mail settlement outcome');
|
|
913
|
-
}
|
|
914
|
-
acknowledged = directive.results.every((result) => result.outcome === 'acknowledged');
|
|
915
|
-
}
|
|
916
|
-
catch (error) {
|
|
917
|
-
if (this.pendingCommit === pending) {
|
|
918
|
-
for (const handoff of pending.handoffs) {
|
|
919
|
-
emitDeliveryFailure(handoff.operationId, handoff, 'receipt_commit', error);
|
|
920
|
-
}
|
|
921
|
-
}
|
|
922
|
-
return 'held';
|
|
923
|
-
}
|
|
924
|
-
if (this.pendingCommit !== pending)
|
|
925
|
-
return 'settled';
|
|
926
|
-
for (const id of pending.entryIds)
|
|
927
|
-
this.claims.delete(id);
|
|
928
|
-
if (pending.receipts.some((receipt) => receipt.disposition === 'released')) {
|
|
929
|
-
const released = new Set(pending.entryIds);
|
|
930
|
-
this.buffer.splice(0, this.buffer.length, ...this.buffer.filter((entry) => !released.has(entry.entry_id)));
|
|
931
|
-
}
|
|
932
|
-
this.pendingCommit = undefined;
|
|
933
|
-
const completed = this.detachPending((handoff) => handoff.entryIds.every((id) => !this.claims.has(id)));
|
|
934
|
-
for (const handoff of completed) {
|
|
935
|
-
if (acknowledged)
|
|
936
|
-
emitDeliveryCompleted(handoff);
|
|
937
|
-
}
|
|
938
|
-
return 'settled';
|
|
939
|
-
}
|
|
940
|
-
async settle(nodeId, ctx, holdPendingMessages, atAgentSettled = false) {
|
|
941
|
-
if (holdPendingMessages) {
|
|
942
|
-
try {
|
|
943
|
-
if (ctx?.hasPendingMessages?.() === true)
|
|
944
|
-
return 'held';
|
|
945
|
-
}
|
|
946
|
-
catch {
|
|
947
|
-
// A missing context signal does not invent a pending-message hold.
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
if (this.pendingCommit !== undefined)
|
|
951
|
-
return this.retryPendingCommit(nodeId);
|
|
952
|
-
const refused = wasTurnRefused();
|
|
953
|
-
const buffered = new Set(this.buffer.map((entry) => entry.entry_id));
|
|
954
|
-
const eligible = this.pendingHandoffs.filter((handoff) => atAgentSettled || handoff.settleAtAgentSettled !== true);
|
|
955
|
-
const handedOff = new Set(eligible.flatMap((handoff) => [...handoff.entryIds]));
|
|
956
|
-
const entryIds = [...this.claims.keys()].filter((id) => refused || (handedOff.has(id) && !buffered.has(id)));
|
|
957
|
-
if (entryIds.length === 0)
|
|
958
|
-
return 'settled';
|
|
959
|
-
this.pendingCommit = {
|
|
960
|
-
handoffs: eligible,
|
|
961
|
-
entryIds,
|
|
962
|
-
receipts: entryIds.map((id) => {
|
|
963
|
-
const claim = this.claims.get(id);
|
|
964
|
-
return { delivery_id: claim.delivery_id, attempts: claim.attempts, disposition: refused ? 'released' : 'acknowledged' };
|
|
965
|
-
}),
|
|
966
|
-
};
|
|
967
|
-
return this.retryPendingCommit(nodeId);
|
|
968
|
-
}
|
|
969
|
-
detachPending(predicate) {
|
|
970
|
-
const removed = [];
|
|
971
|
-
for (let index = this.pendingHandoffs.length - 1; index >= 0; index -= 1) {
|
|
972
|
-
const handoff = this.pendingHandoffs[index];
|
|
973
|
-
if (!predicate(handoff))
|
|
974
|
-
continue;
|
|
975
|
-
removed.push(...this.pendingHandoffs.splice(index, 1));
|
|
976
|
-
}
|
|
977
|
-
removed.reverse();
|
|
978
|
-
return removed;
|
|
979
|
-
}
|
|
980
|
-
}
|
|
981
|
-
function installWatcher(pi, cadence) {
|
|
982
|
-
currentWatcher?.dispose('reload', false);
|
|
983
|
-
const watcher = new CanvasInboxWatcher(pi, cadence, ++nextGeneration);
|
|
984
|
-
currentWatcher = watcher;
|
|
985
|
-
// Pi loads this extension through Jiti while the broker driver is native ESM,
|
|
986
|
-
// so their module-level singletons differ. Register the bound watcher on the
|
|
987
|
-
// process-global key that the broker reads immediately before a human prompt.
|
|
988
|
-
const promptJoin = (session) => watcher.prependHeldDeferredInbox(session);
|
|
989
|
-
globalThis[HELD_DEFERRED_INBOX_PROMPT_JOIN] = promptJoin;
|
|
990
|
-
try {
|
|
991
|
-
watcher.start();
|
|
992
|
-
}
|
|
993
|
-
catch (error) {
|
|
994
|
-
watcher.dispose('reload', false);
|
|
995
|
-
throw error;
|
|
996
|
-
}
|
|
997
|
-
return watcher;
|
|
998
|
-
}
|
|
999
|
-
/** Register one current watcher. `start()` only wires up pi's event handlers —
|
|
1000
|
-
* it calls no Pi action, so this is safe to run during extension factory
|
|
1001
|
-
* execution, before Pi has bound its action methods (sendUserMessage /
|
|
1002
|
-
* sendMessage throw until then). The watcher only starts polling and sending
|
|
1003
|
-
* once its own `session_start` handler fires and arms it — the first event
|
|
1004
|
-
* Pi emits once actions are bound. The returned disposer owns only this
|
|
1005
|
-
* registration's generation. */
|
|
1006
|
-
export function registerCanvasInboxWatcher(pi) {
|
|
1007
|
-
const watcher = installWatcher(pi, resolveCadence());
|
|
1008
|
-
return () => watcher.dispose('shutdown', false);
|
|
1009
|
-
}
|
|
1010
|
-
export default registerCanvasInboxWatcher;
|
|
1
|
+
var N=Object.defineProperty;var f=(s,t)=>N(s,"name",{value:t,configurable:!0});import{envNodeId as S,envProfileId as A,envWatcherDebounceMs as O,envWatcherTickMs as P}from"../shared/env.js";import{coalesceBrokerInbox as H,entryCards as T,reportRefNodeId as D}from"../core/runtime/broker/inbox.js";import{acknowledgeBrokerMail as U,claimBrokerMail as q,brokerExtensionState as B}from"../core/runtime/broker/daemon-ops.js";import{wasTurnRefused as J}from"../core/runtime/broker/extension-abort.js";import{announceMessageOrigin as $}from"../core/runtime/stamp/channel.js";import{captureGoalIfAbsent as W,generateAndCommitInitialName as G}from"./broker-local.js";import{emitEvent as X}from"../core/events/emit.js";import{errorClassFromError as L}from"../core/events/errors.js";import{operationIdContext as u}from"../core/events/operation-id.js";import{situationalContextEnvelope as V,SITUATIONAL_CONTEXT_CUSTOM_TYPE as w}from"../core/runtime/situational-context.js";import{isProfilePaused as j}from"../core/profiles/manifest.js";import{brokerIdleTurnStart as z,HELD_DEFERRED_INBOX_PROMPT_JOIN as Y}from"../core/runtime/broker/held-deferred-inbox.js";const g=64,C=16;let p,K=0;class x extends Error{static{f(this,"WatcherFatalError")}constructor(t,e){super(t,{cause:e}),this.name="WatcherFatalError"}}function Q(){return{tickMs:P(),debounceMs:O()}}f(Q,"resolveCadence");function m(){const s=S();return s===void 0||s.trim()===""?void 0:s}f(m,"currentNodeId");function k(){const s=A();return s!==void 0&&s!==""&&j(s)}f(k,"profilePaused");function F(s){try{return L(s)}catch{return{class:"unknown"}}}f(F,"safeErrorClass");function v(s){try{X(s)}catch{}}f(v,"emitBestEffort");function M(s){try{u.fresh(t=>{v({...s,operation_id:t})})}catch{}}f(M,"emitFreshBestEffort");function b(s,t){try{u.run(s,()=>{v({...t,operation_id:s})})}catch{}}f(b,"emitStoredBestEffort");function Z(s){return s.kind==="human"?{type:"human"}:{type:"runtime",kind:"inbox",entries:s.entries.map(t=>({...t.from===null?{}:{from:t.from},...t.from_name===void 0?{}:{fromName:t.from_name},kind:t.kind,tier:t.tier,...t.ref===void 0?{}:{ref:t.ref}}))}}f(Z,"deliveryOrigin");function _(s,t){if(s.length===0)throw new Error(`cannot create an empty ${t} delivery`);const e=[...new Set(s.map(n=>n.operation_id))].sort(),i=e.length-C;return{channel:t,entryIds:s.map(n=>n.entry_id),throughEntryId:s.at(-1).entry_id,sourceOperationIds:e.slice(0,C),...i>0?{sourceOperationIdsOmitted:i}:{}}}f(_,"deliveryFacts");function y(s){return{channel:s.channel,entry_ids:s.entryIds,through_entry_id:s.throughEntryId,source_operation_ids:s.sourceOperationIds,...s.sourceOperationIdsOmitted===void 0?{}:{source_operation_ids_omitted:s.sourceOperationIdsOmitted}}}f(y,"deliveryFields");function ee(s){b(s.operationId,{level:"info",event:"inbox.delivery.completed",outcome:"succeeded",fields:y(s)})}f(ee,"emitDeliveryCompleted");function I(s,t,e,i){b(s,{level:"error",event:"inbox.delivery.failed",outcome:"failed",error:i,error_class:F(i),fields:{stage:e,...y(t)}})}f(I,"emitDeliveryFailure");function E(s,t){b(s.operationId,{level:"error",event:"inbox.delivery.failed",outcome:"failed",error_class:{class:"unknown"},fields:{stage:"abandoned",reason:t,...y(s)}})}f(E,"emitDeliveryAbandoned");function R(s){return s==="quit"||s==="reload"||s==="new"||s==="resume"||s==="fork"}f(R,"isSessionShutdownReason");function te(s){switch(s){case"quit":return"shutdown";case"reload":case"new":case"resume":case"fork":return"reload";default:return s}}f(te,"disposalReasonForShutdown");function ie(s){return typeof s=="string"?s.slice(0,128):s===null?"null":s===void 0?"undefined":typeof s=="number"||typeof s=="boolean"||typeof s=="bigint"?String(s).slice(0,128):typeof s}f(ie,"boundedRuntimeReason");class re{static{f(this,"CanvasInboxWatcher")}pi;cadence;generation;timer;armed=!1;lastCtx;streaming=!1;nodeId;claims=new Map;tickInFlight;buffer=[];lastArrival=0;pendingHandoffs=[];pendingCommit;promptJoinInFlight=!1;seeded=!1;disposed=!1;disposalReason;fatalError;fatalEscaped=!1;reportNodes=new Map;reportNodesAsked=new Set;reportNodesRefreshing=!1;constructor(t,e,i){this.pi=t,this.cadence=e,this.generation=i}start(){const t=f((e,i)=>{this.canMutate()&&this.captureCtx(e,i)},"capture");this.pi.on("session_start",(e,i)=>{this.canMutate()&&(this.captureCtx(e,i),this.arm(),this.refreshReportNodes(m()))}),this.pi.on("turn_end",t),this.pi.on("agent_start",(e,i)=>{this.canMutate()&&(this.captureCtx(e,i),this.streaming=!0)}),this.pi.on("agent_end",(e,i)=>{this.canMutate()&&(this.captureCtx(e,i),this.streaming=!1)}),this.pi.on("agent_settled",async(e,i)=>{if(!this.canMutate())return;this.captureCtx(e,i);const n=m();if(n!==void 0)try{this.assertNodeOwnership(n,"settle"),await this.tickInFlight,this.seeded||await this.claimMail(n),await this.settle(n,i,!1,!0)==="refresh_held"&&this.dispose("refresh",!1)}catch(r){this.dispose("shutdown",!1,void 0,{error:r,stage:"settle"})}}),this.pi.on("session_shutdown",async e=>{if(!this.canMutate())return;let i;try{i=e?.reason}catch{i=void 0}const n=R(i)?te(i):"reload";R(i)||M({level:"warn",event:"inbox.lifecycle.unknown_shutdown_reason",outcome:"failed",fields:{reason:ie(i)}});try{await this.disposeAtSettlement(n,this.lastCtx)}catch(r){this.dispose(n,!1,void 0,{error:r,stage:"settle"})}})}async refreshReportNodes(t){if(t!==void 0){this.reportNodesRefreshing=!0;try{const e=await B(t);if(!this.canMutate())return;this.reportNodes=new Map(e.report_nodes.map(i=>[i.node_id,i]))}catch{}finally{this.reportNodesRefreshing=!1}}}refreshForUnknownReportRefs(){const t=[];for(const e of this.buffer){const i=D(e.ref);i!==void 0&&(this.reportNodes.has(i)||this.reportNodesAsked.has(i)||t.push(i))}if(t.length===0)return!1;for(const e of t)this.reportNodesAsked.add(e);return this.refreshReportNodes(m()),this.reportNodesRefreshing}arm(){this.armed||(this.armed=!0,this.timer=setInterval(()=>this.runTick(),this.cadence.tickMs),typeof this.timer.unref=="function"&&this.timer.unref(),this.runTick("schedule"))}async disposeAtSettlement(t,e){const i=m();if(i===void 0){this.dispose(t,!1);return}try{this.assertNodeOwnership(i,"settle");const n=await this.settle(i,e,t!=="refresh");this.dispose(n==="refresh_held"?"refresh":t,!1)}catch(n){this.dispose(t,!1,void 0,{error:n,stage:"settle"})}}dispose(t,e,i,n){if(this.disposed)return;this.disposed=!0,this.disposalReason=t,this.clearTimer();const r=n;{const o=[...this.pendingCommit?.handoffs??[],...this.pendingHandoffs.splice(0)];this.buffer.length=0,this.claims.clear(),this.reportNodes.clear(),this.reportNodesAsked.clear(),this.pendingCommit=void 0,this.promptJoinInFlight=!1,this.nodeId=void 0,this.lastCtx=void 0,this.lastArrival=0,this.streaming=!1,this.seeded=!1,this.ownsCurrentGeneration()&&(p=void 0);for(const a of o)E(a,t)}if(r!==void 0){this.scheduleHandlerFatal(r.error,r.stage);return}}ownsCurrentGeneration(){return p===this&&p.generation===this.generation}canMutate(){return this.ownsCurrentGeneration()&&!this.disposed&&this.fatalError===void 0}captureCtx(t,e){e!==void 0&&(this.lastCtx=e)}clearTimer(){this.timer!==void 0&&(clearInterval(this.timer),this.timer=void 0)}isIdle(){try{if(typeof this.lastCtx?.isIdle=="function")return this.lastCtx.isIdle()===!0}catch{}return!this.streaming}assertNodeOwnership(t,e){!this.seeded||this.nodeId===void 0||this.nodeId===t||this.raiseReadFatal(e,new Error(`watcher node changed from ${this.nodeId} to ${t}`))}raiseFatal(t,e,i,n){throw this.fatalError===void 0&&(this.fatalError=new x(e,i),this.clearTimer(),M({level:"error",event:t,outcome:"failed",error:i,error_class:F(i),fields:n})),this.fatalError}raiseReadFatal(t,e){return this.raiseFatal("inbox.read.failed",`inbox ${t} state is corrupt`,e,{stage:t})}raiseSituationalFatal(t,e){return this.raiseFatal("inbox.situational_context.missing","situational context marker has no readable sidecar",e,{entry_id:t})}escapeFatal(t,e){if(!this.fatalEscaped){if(this.fatalEscaped=!0,e==="throw")throw t;queueMicrotask(()=>{throw t})}}scheduleHandlerFatal(t,e){let i;if(t instanceof x)i=t;else try{this.raiseReadFatal(e,t)}catch(n){i=n}this.escapeFatal(i,"schedule")}runTick(t="throw"){if(!this.canMutate()||this.tickInFlight!==void 0)return;const e=this.tick().catch(i=>{this.canMutate()&&this.scheduleHandlerFatal(i,"poll")}).finally(()=>{this.tickInFlight===e&&(this.tickInFlight=void 0)});this.tickInFlight=e}async claimMail(t){this.assertNodeOwnership(t,"poll");const e=await q(t,"wake");if(!this.canMutate()||e.action==="hold")return!1;this.nodeId=t,this.seeded=!0;const i=new Set(e.deliveries.map(r=>r.entry.entry_id)),n=this.buffer.filter(r=>!i.has(r.entry_id));for(const r of n)this.claims.delete(r.entry_id);this.buffer.splice(0,this.buffer.length,...this.buffer.filter(r=>i.has(r.entry_id)));for(const r of e.deliveries){const o=r.entry.entry_id;this.claims.has(o)||(this.claims.set(o,r),r.handoff==="inherited"?u.fresh(a=>{this.pendingHandoffs.push({..._([r.entry],"visible"),operationId:a,settleAtAgentSettled:!0})}):(this.buffer.push(r.entry),this.lastArrival=Date.now()))}return!0}async tick(){const t=m();if(t!==void 0){if(this.pendingCommit!==void 0){await this.retryPendingCommit(t)==="refresh_held"&&this.canMutate()&&this.dispose("refresh",!1);return}if(!(this.promptJoinInFlight||k())&&!(this.pendingHandoffs.length>=g)&&await this.claimMail(t)&&this.buffer.length>0&&Date.now()-this.lastArrival>=this.cadence.debounceMs){if(this.refreshForUnknownReportRefs())return;this.flushOrdinary(t)}}}missingChannelEntries(t){const e=t.filter(r=>this.claims.has(r.entry_id)),i=this.coveredEntryIds("hidden"),n=this.coveredEntryIds("visible");return{hiddenEntries:e.filter(r=>(r.data?.situational===!0||r.data?.situationalOnly===!0)&&!i.has(r.entry_id)),visibleEntries:e.filter(r=>r.data?.situationalOnly!==!0&&!n.has(r.entry_id))}}visibleRoute(t){return t.length===0?"none":this.isIdle()?"idle":t.some(e=>e.tier==="critical")?"critical":t.some(e=>e.tier==="urgent"||e.kind==="final")?"steer":"followUp"}buildPlan(t){const{hiddenEntries:e,visibleEntries:i}=this.missingChannelEntries(t),n=new Set(e.map(c=>c.entry_id)),r=new Set(i.map(c=>c.entry_id)),o=t.filter(c=>n.has(c.entry_id)||r.has(c.entry_id)),a=this.isIdle()&&o.length>0&&o.every(c=>c.tier==="deferred"),d=this.visibleRoute(i)==="critical",h=!a&&!d&&e.length>0,l=!a&&!d&&i.length>0;return{hiddenEntries:e,visibleEntries:i,deferredHold:a,sendCount:Number(h)+Number(l)}}ordinaryPlan(){return this.buildPlan(this.buffer)}contextCards(t,e){const i=[];if(e.some(n=>n.data?.situational===!0)){const n=e.at(-1).entry_id;let r;try{r=V(t)}catch(o){this.raiseSituationalFatal(n,o)}r===null&&this.raiseSituationalFatal(n,new Error(`missing situational context for entry ${n}`)),i.push(r)}for(const n of e)n.data?.situationalOnly===!0&&i.push(...T(n));return i}digest(t,e){try{return H(t,this.reportNodes)}catch(i){this.raiseReadFatal(e,i)}}sendDelivery(t,e,i,n){this.pendingHandoffs.length>=g&&this.raiseReadFatal(n,new Error(`pending handoff capacity exceeded before ${t} send`));let r;try{r=_(e,t)}catch(d){this.raiseReadFatal(n,d)}let o;try{u.fresh(d=>{o=d,v({level:"info",event:"inbox.delivery.started",operation_id:d,fields:y(r)}),i()})}catch(d){return o===void 0&&this.raiseReadFatal(n,d),I(o,r,"send",d),"failed"}o===void 0&&this.raiseReadFatal(n,new Error(`${t} delivery returned without an operation id`));const a={operationId:o,...r};return this.canMutate()?(this.pendingHandoffs.push(a),"handed-off"):(this.disposed&&this.disposalReason!==void 0&&E(a,this.disposalReason),"inactive")}sendContext(t,e,i,n,r,o){return this.sendDelivery("hidden",e,()=>{const a=n==="steer"||n==="followUp"?n:this.isIdle()?void 0:"followUp";i.forEach((d,h)=>{const l=r&&h===i.length-1;this.pi.sendMessage({customType:w,content:d,display:!0,details:{nodeId:t}},a!==void 0?{deliverAs:a}:l?{deliverAs:"followUp",triggerTurn:!0}:{})})},o)}sendVisible(t,e,i,n,r,o){return this.sendDelivery("visible",t,()=>{if(r!=="idle"&&r!=="steer"&&r!=="followUp")throw new Error(`visible send requested for non-send route ${r}`);for(const a of e)this.pi.sendMessage({customType:w,content:a,display:!0},r==="idle"?{}:{deliverAs:r});if($(i,n),r==="idle"){const a=z();if(a===void 0)throw new Error("broker idle-turn admission is unavailable");a(i)}else this.pi.sendUserMessage(i,{deliverAs:r})},o)}abortCritical(){try{this.lastCtx?.abort?.()}catch{}}requeueFromBatch(t,e){if(e.size===0)return;const i=t.filter(o=>e.has(o.entry_id)),n=new Set(i.map(o=>o.entry_id)),r=this.buffer.filter(o=>!n.has(o.entry_id));this.buffer.splice(0,this.buffer.length,...i,...r)}executePlan(t,e,i){const n=new Set,r=this.visibleRoute(e.visibleEntries);if(r==="critical"){if(this.abortCritical(),!this.canMutate())return{inactive:!0,requeueEntryIds:n};for(const h of e.visibleEntries)n.add(h.entry_id);for(const h of e.hiddenEntries)n.add(h.entry_id);return{inactive:!1,requeueEntryIds:n}}const o=e.visibleEntries.length>0?this.digest(e.visibleEntries,i):[],[a,...d]=o;for(const h of d)for(const l of h.entries)n.add(l.entry_id);if(e.hiddenEntries.length>0){const h=this.contextCards(t,e.hiddenEntries),l=this.sendContext(t,e.hiddenEntries,h,r,a===void 0,i);if(l==="inactive")return{inactive:!0,requeueEntryIds:n};if(l==="failed")for(const c of e.hiddenEntries)n.add(c.entry_id)}if(!this.canMutate())return{inactive:!0,requeueEntryIds:n};if(a!==void 0){const h=this.sendVisible(a.entries,a.cards,a.text,Z(a),r,i);if(h==="inactive")return{inactive:!0,requeueEntryIds:n};if(h==="failed")for(const l of a.entries)n.add(l.entry_id);else a.kind==="human"&&(W(t,a.text),G(t,a.text))}return{inactive:!1,requeueEntryIds:n}}flushOrdinary(t){if(this.buffer.length===0)return"empty";const e=this.ordinaryPlan();if(e.deferredHold)return"held";if(this.pendingHandoffs.length+e.sendCount>g)return"capacity-blocked";const i=[...this.buffer],n=this.executePlan(t,e,"poll");return n.inactive||(this.buffer.splice(0,i.length),this.requeueFromBatch(i,n.requeueEntryIds)),"attempted"}async prependHeldDeferredInbox(t){if(!this.canMutate()||this.nodeId===void 0||k())return;const e=this.ordinaryPlan();if(!e.deferredHold)return;const i=e.visibleEntries.length===0?[]:this.digest(e.visibleEntries,"poll"),n=+(e.hiddenEntries.length>0)+i.length;if(this.pendingHandoffs.length+n>g)return;const r=[...this.buffer];this.promptJoinInFlight=!0;try{e.hiddenEntries.length>0&&await this.sendPromptJoinDelivery(t,"hidden",e.hiddenEntries,this.contextCards(this.nodeId,e.hiddenEntries));for(const o of i)await this.sendPromptJoinDelivery(t,"visible",o.entries,[...o.cards,o.text]);if(!this.canMutate())return;this.buffer.splice(0,r.length)}finally{this.promptJoinInFlight=!1}}async sendPromptJoinDelivery(t,e,i,n){let r;try{r=_(i,e)}catch(d){this.raiseReadFatal("poll",d)}let o;try{await u.fresh(async d=>{o=d,v({level:"info",event:"inbox.delivery.started",operation_id:d,fields:y(r)});for(const h of n)await t.sendCustomMessage({customType:w,content:h,display:!0})})}catch(d){throw o===void 0&&this.raiseReadFatal("poll",d),I(o,r,"send",d),d}o===void 0&&this.raiseReadFatal("poll",new Error(`${e} prompt-join delivery returned without an operation id`));const a={operationId:o,...r,settleAtAgentSettled:!0};if(!this.canMutate()){this.disposed&&this.disposalReason!==void 0&&E(a,this.disposalReason);return}this.pendingHandoffs.push(a)}coveredEntryIds(t){const e=new Set;for(const i of this.pendingHandoffs)if(i.channel===t)for(const n of i.entryIds)e.add(n);return e}retryPendingCommit(t){const e=this.pendingCommit;if(e===void 0)return Promise.resolve("settled");if(e.attempt!==void 0)return e.attempt;const i=this.attemptPendingCommit(t,e).finally(()=>{e.attempt===i&&(e.attempt=void 0)});return e.attempt=i,i}async attemptPendingCommit(t,e){let i=!1;try{const r=await U(t,e.receipts);if(r.action==="hold")return"refresh_held";for(const o of e.receipts){const a=r.results.find(d=>d.delivery_id===o.delivery_id);if(a?.outcome!==o.disposition&&a?.outcome!=="stale")throw new Error("daemon returned no terminal mail settlement outcome")}i=r.results.every(o=>o.outcome==="acknowledged")}catch(r){if(this.pendingCommit===e)for(const o of e.handoffs)I(o.operationId,o,"receipt_commit",r);return"held"}if(this.pendingCommit!==e)return"settled";for(const r of e.entryIds)this.claims.delete(r);if(e.receipts.some(r=>r.disposition==="released")){const r=new Set(e.entryIds);this.buffer.splice(0,this.buffer.length,...this.buffer.filter(o=>!r.has(o.entry_id)))}this.pendingCommit=void 0;const n=this.detachPending(r=>r.entryIds.every(o=>!this.claims.has(o)));for(const r of n)i&&ee(r);return"settled"}async settle(t,e,i,n=!1){if(i)try{if(e?.hasPendingMessages?.()===!0)return"held"}catch{}if(this.pendingCommit!==void 0)return this.retryPendingCommit(t);const r=J(),o=new Set(this.buffer.map(l=>l.entry_id)),a=this.pendingHandoffs.filter(l=>n||l.settleAtAgentSettled!==!0),d=new Set(a.flatMap(l=>[...l.entryIds])),h=[...this.claims.keys()].filter(l=>r||d.has(l)&&!o.has(l));return h.length===0?"settled":(this.pendingCommit={handoffs:a,entryIds:h,receipts:h.map(l=>{const c=this.claims.get(l);return{delivery_id:c.delivery_id,attempts:c.attempts,disposition:r?"released":"acknowledged"}})},this.retryPendingCommit(t))}detachPending(t){const e=[];for(let i=this.pendingHandoffs.length-1;i>=0;i-=1){const n=this.pendingHandoffs[i];t(n)&&e.push(...this.pendingHandoffs.splice(i,1))}return e.reverse(),e}}function ne(s,t){p?.dispose("reload",!1);const e=new re(s,t,++K);p=e;const i=f(n=>e.prependHeldDeferredInbox(n),"promptJoin");globalThis[Y]=i;try{e.start()}catch(n){throw e.dispose("reload",!1),n}return e}f(ne,"installWatcher");function se(s){const t=ne(s,Q());return()=>t.dispose("shutdown",!1)}f(se,"registerCanvasInboxWatcher");var we=se;export{we as default,se as registerCanvasInboxWatcher};
|