@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 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,610 +0,0 @@
|
|
|
1
|
-
// Run with: npm run test:integration
|
|
2
|
-
//
|
|
3
|
-
// REGRESSION LOCK — gh issue #341. `--tier deferred` is documented as the ONE
|
|
4
|
-
// tier that never wakes an idle node ("read on its next natural cycle"), but
|
|
5
|
-
// the wake block in `node message send`'s immediate-delivery path (src/commands/
|
|
6
|
-
// node.ts) never consulted `tier` at all — it revived ANY dormant target
|
|
7
|
-
// unconditionally. The daemon's idle-release second pass (crtrd.ts) had the
|
|
8
|
-
// same gap one hop later: any unseen inbox entry, deferred or not, revived an
|
|
9
|
-
// idle-released row.
|
|
10
|
-
//
|
|
11
|
-
// Fixed shape:
|
|
12
|
-
// (1) command layer — deferred to an ORDINARY dormant/revivable target
|
|
13
|
-
// (idle-released, or anything else with a real natural cycle ahead of
|
|
14
|
-
// it) appends durably and does NOT call reviveNode.
|
|
15
|
-
// (2) command layer — deferred to a TERMINAL target (done/canceled/
|
|
16
|
-
// finalized: no natural cycle ever brings it back) is rejected
|
|
17
|
-
// fail-loud, BEFORE any side effect (mirrors the existing
|
|
18
|
-
// output-schema+deferred rejection).
|
|
19
|
-
// (3) daemon second pass — a deferred-only unseen set is treated as "no
|
|
20
|
-
// wake-worthy work" (no revive, relaunch-attempt state cleared); a
|
|
21
|
-
// non-deferred unseen entry still wakes exactly as before, and delivers
|
|
22
|
-
// the previously-held deferred entry alongside it with no loss (neither
|
|
23
|
-
// delivery is ever dropped or acknowledged before settlement).
|
|
24
|
-
//
|
|
25
|
-
// (1) and (2) are exercised through the REAL `node message send` command
|
|
26
|
-
// boundary (mirrors push-final-guard.test.ts's #339/#340 pattern) with
|
|
27
|
-
// `headlessBrokerHost.launch` spied so a rejected/held delivery is proven to
|
|
28
|
-
// never attempt a revive, without spawning a real engine. (3) is exercised by
|
|
29
|
-
// fabricating an idle-released row directly and driving the REAL daemon
|
|
30
|
-
// decision pass (`superviseTick`), mirroring child-death-wake.test.ts's
|
|
31
|
-
// no-harness fabrication style.
|
|
32
|
-
//
|
|
33
|
-
// Phase 3 trigger→cron hard cut: the arm-time (`node trigger send`) and
|
|
34
|
-
// daemon fire-time predicate/clock-trigger suites that used to live in this
|
|
35
|
-
// file were removed along with the trigger subsystem itself. What remains
|
|
36
|
-
// below covers only behavior the cut left fully intact: the immediate
|
|
37
|
-
// `node message send --tier deferred` command path, the shared
|
|
38
|
-
// `withFreshTerminalGuard` primitive, and the daemon/inbox-watcher
|
|
39
|
-
// deferred-hold contract.
|
|
40
|
-
import { test, before, after, beforeEach, afterEach } from 'node:test';
|
|
41
|
-
import assert from 'node:assert/strict';
|
|
42
|
-
import { mkdtempSync, mkdirSync, rmSync, existsSync } from 'node:fs';
|
|
43
|
-
import { tmpdir } from 'node:os';
|
|
44
|
-
import { join } from 'node:path';
|
|
45
|
-
import { spawnSync } from 'node:child_process';
|
|
46
|
-
import { DatabaseSync } from 'node:sqlite';
|
|
47
|
-
import { createNode, deleteNode, getNode, setFrozen, setStatus, subscribe, withFreshTerminalGuard } from '../../canvas/canvas.js';
|
|
48
|
-
import { hasNoNaturalCycle } from '../../runtime/revive-all.js';
|
|
49
|
-
import { canvasDbPath, nodeDir, apiSocketPath } from '../../canvas/paths.js';
|
|
50
|
-
import { closeDb, migrate, openDb } from '../../canvas/db.js';
|
|
51
|
-
import { recordExecutionPid } from '../../canvas/executions.js';
|
|
52
|
-
import { closeScopedStores } from '../../scoped-state/db.js';
|
|
53
|
-
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
54
|
-
import { userScopeRoot } from '../../scope.js';
|
|
55
|
-
import { createApiServer } from '../../../daemon/api/server.js';
|
|
56
|
-
import { CrtrClient } from '../../../api/index.js';
|
|
57
|
-
import { BROKER_IDLE_TURN_START } from '../../runtime/broker/held-deferred-inbox.js';
|
|
58
|
-
import { registerNode } from '../../../commands/node.js';
|
|
59
|
-
import { pushFinal } from '../../feed/feed.js';
|
|
60
|
-
import { InputError } from '../../io.js';
|
|
61
|
-
import { headlessBrokerHost } from '../../runtime/host.js';
|
|
62
|
-
import { enqueueNodeMail } from '../../feed/messages.js';
|
|
63
|
-
import { acknowledgedNodeMailCount } from '../../canvas/deliveries.js';
|
|
64
|
-
import { beginExecution } from '../../canvas/executions.js';
|
|
65
|
-
import { superviseTick } from '../../../daemon/crtrd.js';
|
|
66
|
-
import registerCanvasInboxWatcher from '../../../pi-extensions/canvas-inbox-watcher.js';
|
|
67
|
-
import { bindTestFleet } from '../helpers/fleet.js';
|
|
68
|
-
import { resetFleetForTests } from '../../runtime/fleet.js';
|
|
69
|
-
let home;
|
|
70
|
-
let server;
|
|
71
|
-
const prevNodeId = process.env['CRTR_NODE_ID'];
|
|
72
|
-
const prevHome = process.env['HOME'];
|
|
73
|
-
// createApiServer binds its socket asynchronously (file created in the listen
|
|
74
|
-
// callback), and the socket FILE existing does not yet prove the server answers
|
|
75
|
-
// a full HTTP round-trip — under serial recycle the first request to a
|
|
76
|
-
// freshly-listening in-process server can race the accept path and write-EPIPE.
|
|
77
|
-
// Probe an actual `/healthz` round-trip (autostart OFF so a transient miss never
|
|
78
|
-
// spawns a REAL crtrd against the isolated home) before handing the socket to a
|
|
79
|
-
// cliClient() path.
|
|
80
|
-
async function waitForSocket(path) {
|
|
81
|
-
const probe = CrtrClient.forLocalSocket({ autostart: false });
|
|
82
|
-
for (let i = 0; i < 200; i++) {
|
|
83
|
-
if (existsSync(path)) {
|
|
84
|
-
try {
|
|
85
|
-
await probe.healthz();
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
/* not answering yet — keep polling */
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
await new Promise((r) => setTimeout(r, 25));
|
|
93
|
-
}
|
|
94
|
-
throw new Error(`api socket never answered /healthz at ${path}`);
|
|
95
|
-
}
|
|
96
|
-
function inboxRows(nodeId) {
|
|
97
|
-
return openDb().prepare(`SELECT m.message_id, d.urgency, d.state, d.acknowledged_at FROM deliveries d JOIN messages m ON m.message_id = d.message_id
|
|
98
|
-
WHERE d.destination_kind = 'node_inbox' AND d.destination_id = ? AND d.canceled_at IS NULL ORDER BY m.seq`).all(nodeId).map((row) => ({
|
|
99
|
-
messageId: row.message_id,
|
|
100
|
-
tier: row.urgency,
|
|
101
|
-
state: row.state,
|
|
102
|
-
acknowledgedAt: row.acknowledged_at,
|
|
103
|
-
}));
|
|
104
|
-
}
|
|
105
|
-
function sendMail(nodeId, tier, body, senderNodeId = 'human') {
|
|
106
|
-
return enqueueNodeMail(nodeId, {
|
|
107
|
-
...(senderNodeId === null ? {} : { senderNodeId }),
|
|
108
|
-
kind: 'message',
|
|
109
|
-
label: body,
|
|
110
|
-
bodyJson: { body },
|
|
111
|
-
urgency: tier,
|
|
112
|
-
wake: 1,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
function node(id, over = {}) {
|
|
116
|
-
return {
|
|
117
|
-
node_id: id,
|
|
118
|
-
name: id,
|
|
119
|
-
created: new Date().toISOString(),
|
|
120
|
-
cwd: '/tmp/work',
|
|
121
|
-
kind: 'general',
|
|
122
|
-
mode: 'base',
|
|
123
|
-
lifecycle: 'terminal',
|
|
124
|
-
status: 'active',
|
|
125
|
-
...over,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
function createFixtureNode(meta) {
|
|
129
|
-
createNode(meta);
|
|
130
|
-
if (meta.pi_pid == null)
|
|
131
|
-
return null;
|
|
132
|
-
const executionId = beginExecution(meta.node_id, { daemonEpoch: 'test-epoch' });
|
|
133
|
-
recordExecutionPid(executionId, meta.node_id, meta.pi_pid);
|
|
134
|
-
return executionId;
|
|
135
|
-
}
|
|
136
|
-
/** A pid guaranteed dead by the time spawnSync returns. */
|
|
137
|
-
function deadPid() {
|
|
138
|
-
const r = spawnSync('true', [], { stdio: 'ignore' });
|
|
139
|
-
return r.pid ?? 0x7ffffffe;
|
|
140
|
-
}
|
|
141
|
-
function messageSendLeaf() {
|
|
142
|
-
const branch = registerNode().children.find((child) => child.name === 'message');
|
|
143
|
-
assert.ok(branch !== undefined && branch.kind === 'branch');
|
|
144
|
-
const leaf = branch.children.find((child) => child.name === 'send');
|
|
145
|
-
assert.ok(leaf !== undefined && leaf.kind === 'leaf');
|
|
146
|
-
return leaf;
|
|
147
|
-
}
|
|
148
|
-
before(() => {
|
|
149
|
-
home = mkdtempSync(join(tmpdir(), 'crtr-deferred-nowake-'));
|
|
150
|
-
process.env['HOME'] = home;
|
|
151
|
-
process.env['CRTR_HOME'] = home;
|
|
152
|
-
// superviseTick and the in-process API server's launch verbs resolve
|
|
153
|
-
// boundFleet() (D-2). Empty is the point: no fabricated row here has a live
|
|
154
|
-
// broker, and every no-wake assertion is that no launch happens.
|
|
155
|
-
bindTestFleet();
|
|
156
|
-
});
|
|
157
|
-
beforeEach(async () => {
|
|
158
|
-
closeDb();
|
|
159
|
-
closeScopedStores();
|
|
160
|
-
rmSync(home, { recursive: true, force: true });
|
|
161
|
-
mkdirSync(home, { recursive: true });
|
|
162
|
-
migrate(openDb());
|
|
163
|
-
initializeFreshScopedStore({ kind: 'user', root: userScopeRoot() });
|
|
164
|
-
// POST-P1 the `node message send` leaf forwards its wake/revive canvas ops
|
|
165
|
-
// through cliClient() over crtrd's socket. This home neutralizes the daemon (no REAL
|
|
166
|
-
// crtrd) but binds no server, so stand one up in-process on the isolated
|
|
167
|
-
// home's socket (apiSocketPath() resolves under CRTR_HOME=home). Closed in
|
|
168
|
-
// afterEach.
|
|
169
|
-
server = createApiServer();
|
|
170
|
-
await waitForSocket(apiSocketPath());
|
|
171
|
-
});
|
|
172
|
-
afterEach(async () => {
|
|
173
|
-
await server?.close();
|
|
174
|
-
server = undefined;
|
|
175
|
-
closeDb();
|
|
176
|
-
closeScopedStores();
|
|
177
|
-
});
|
|
178
|
-
after(() => {
|
|
179
|
-
closeDb();
|
|
180
|
-
closeScopedStores();
|
|
181
|
-
rmSync(home, { recursive: true, force: true });
|
|
182
|
-
delete process.env['CRTR_HOME'];
|
|
183
|
-
if (prevHome === undefined)
|
|
184
|
-
delete process.env['HOME'];
|
|
185
|
-
else
|
|
186
|
-
process.env['HOME'] = prevHome;
|
|
187
|
-
if (prevNodeId === undefined)
|
|
188
|
-
delete process.env['CRTR_NODE_ID'];
|
|
189
|
-
else
|
|
190
|
-
process.env['CRTR_NODE_ID'] = prevNodeId;
|
|
191
|
-
resetFleetForTests();
|
|
192
|
-
});
|
|
193
|
-
// Command layer — the immediate-delivery wake block in node.ts
|
|
194
|
-
test('node message send --tier deferred to an ordinary dormant (idle-released) target does not revive it — appended and held for the next natural cycle', { timeout: 30_000 }, async () => {
|
|
195
|
-
const id = 'idleReleaseTarget';
|
|
196
|
-
// Resident: the hold is what a target with a real later cycle gets. A
|
|
197
|
-
// terminal target takes no such cycle, so its mail is raised to the steering
|
|
198
|
-
// tier instead (locked by the next test).
|
|
199
|
-
createNode(node(id, { lifecycle: 'resident', status: 'idle', intent: 'idle-release' }));
|
|
200
|
-
const inboxBefore = inboxRows(id).length;
|
|
201
|
-
const originalLaunch = headlessBrokerHost.launch;
|
|
202
|
-
let launchCalls = 0;
|
|
203
|
-
headlessBrokerHost.launch = ((...args) => {
|
|
204
|
-
launchCalls++;
|
|
205
|
-
return originalLaunch(...args);
|
|
206
|
-
});
|
|
207
|
-
try {
|
|
208
|
-
const res = (await messageSendLeaf().run({ to: id, tier: 'deferred', body: 'a held note' }));
|
|
209
|
-
assert.equal(res['revived'], false, 'deferred never revives a dormant target');
|
|
210
|
-
assert.equal(res['guidance'], "Delivered — held for the target's next natural cycle; not revived.", 'guidance is truthful about the hold, not a claimed revive');
|
|
211
|
-
}
|
|
212
|
-
finally {
|
|
213
|
-
headlessBrokerHost.launch = originalLaunch;
|
|
214
|
-
}
|
|
215
|
-
assert.equal(launchCalls, 0, 'a deferred delivery to a dormant target must never attempt a revive');
|
|
216
|
-
assert.equal(inboxRows(id).length, inboxBefore + 1, 'the SQL delivery is durable despite the hold');
|
|
217
|
-
const after = getNode(id);
|
|
218
|
-
assert.equal(after.status, 'idle', 'target left exactly where it was');
|
|
219
|
-
assert.equal(after.intent, 'idle-release', 'target left exactly where it was');
|
|
220
|
-
});
|
|
221
|
-
test('node message send --tier deferred to a TERMINAL-lifecycle target is raised to the steering tier and wakes it', { timeout: 30_000 }, async () => {
|
|
222
|
-
const id = 'terminalLifecycleTarget';
|
|
223
|
-
createFixtureNode(node(id, { status: 'idle', intent: 'idle-release', pi_pid: deadPid(), pi_session_id: null, cwd: home }));
|
|
224
|
-
// Fully stubbed (never delegates): the point is that the raised entry DOES
|
|
225
|
-
// attempt the wake, so a real detached broker must not be spawned to prove it.
|
|
226
|
-
const originalLaunch = headlessBrokerHost.launch;
|
|
227
|
-
let launchCalls = 0;
|
|
228
|
-
headlessBrokerHost.launch = (() => {
|
|
229
|
-
launchCalls++;
|
|
230
|
-
return { pid: 0x7ffffffe, exited: new Promise(() => { }) };
|
|
231
|
-
});
|
|
232
|
-
let res;
|
|
233
|
-
try {
|
|
234
|
-
res = (await messageSendLeaf().run({ to: id, tier: 'deferred', body: 'not held' }));
|
|
235
|
-
}
|
|
236
|
-
finally {
|
|
237
|
-
headlessBrokerHost.launch = originalLaunch;
|
|
238
|
-
}
|
|
239
|
-
const entries = inboxRows(id);
|
|
240
|
-
assert.equal(entries.length, 1, 'the SQL delivery is durable');
|
|
241
|
-
assert.equal(entries[0].tier, 'urgent', 'a terminal target takes no later cycle, so the delivery is raised to the steering tier');
|
|
242
|
-
assert.equal(launchCalls, 1, 'the raised entry wakes the dormant terminal target instead of waiting for a cycle it never takes');
|
|
243
|
-
assert.equal(res['revived'], true, 'the send reports the wake it actually performed');
|
|
244
|
-
});
|
|
245
|
-
test('node message send --tier deferred rejects ordinary terminal targets but accepts a frozen terminal target with a thaw cycle owed', { timeout: 30_000 }, async () => {
|
|
246
|
-
for (const status of ['done', 'canceled']) {
|
|
247
|
-
const id = `terminal-${status}`;
|
|
248
|
-
createNode(node(id, { status, intent: null }));
|
|
249
|
-
const inboxBefore = inboxRows(id).length;
|
|
250
|
-
const originalLaunch = headlessBrokerHost.launch;
|
|
251
|
-
let launchCalls = 0;
|
|
252
|
-
headlessBrokerHost.launch = ((...args) => {
|
|
253
|
-
launchCalls++;
|
|
254
|
-
return originalLaunch(...args);
|
|
255
|
-
});
|
|
256
|
-
try {
|
|
257
|
-
await assert.rejects(() => messageSendLeaf().run({ to: id, tier: 'deferred', body: 'never delivered' }), (e) => e instanceof InputError && e.payload.error === 'deferred_no_natural_cycle', `${status}: rejected with the terminal-edge error code`);
|
|
258
|
-
}
|
|
259
|
-
finally {
|
|
260
|
-
headlessBrokerHost.launch = originalLaunch;
|
|
261
|
-
}
|
|
262
|
-
assert.equal(launchCalls, 0, `${status}: a rejected deferred must never attempt a revive`);
|
|
263
|
-
assert.equal(inboxRows(id).length, inboxBefore, `${status}: a rejected deferred must not create a SQL delivery`);
|
|
264
|
-
}
|
|
265
|
-
const frozenId = 'terminal-frozen';
|
|
266
|
-
createNode(node(frozenId, {
|
|
267
|
-
lifecycle: 'resident',
|
|
268
|
-
status: 'done',
|
|
269
|
-
intent: 'parked',
|
|
270
|
-
}));
|
|
271
|
-
setFrozen(frozenId, new Date().toISOString());
|
|
272
|
-
const inboxBefore = inboxRows(frozenId).length;
|
|
273
|
-
const result = await messageSendLeaf().run({ to: frozenId, tier: 'deferred', body: 'held for thaw' });
|
|
274
|
-
assert.equal(result['guidance'], "Delivered — held for the target's next natural cycle; not revived.", 'a frozen terminal row still has a thaw cycle');
|
|
275
|
-
assert.equal(result['revived'], false, 'deferred mail waits for the thaw without launching');
|
|
276
|
-
assert.equal(inboxRows(frozenId).length, inboxBefore + 1, 'the deferred SQL delivery is durable');
|
|
277
|
-
});
|
|
278
|
-
// #343 third-fix-cycle review: the IMMEDIATE `--tier deferred` path had its
|
|
279
|
-
// own, separate TOCTOU — a stale-snapshot check (`rejectDeferredWithoutNaturalCycle`)
|
|
280
|
-
// ran before the SQL delivery write, with several fallible side effects
|
|
281
|
-
// (assertFinalizedForReopen/writeOutputSchema/appendSituationalContext/
|
|
282
|
-
// commitReopen) in between. The guarded closure keeps the fresh check and
|
|
283
|
-
// delivery write in one canvas transaction. This drives that shape against a
|
|
284
|
-
// real rival writer.
|
|
285
|
-
test('#343 (immediate path): withFreshTerminalGuard closes the TOCTOU for `node message send --tier deferred` — a rival terminalization cannot land between the fresh check and the SQL delivery it guards', { timeout: 30_000 }, () => {
|
|
286
|
-
const targetId = 'raceTargetImmediate';
|
|
287
|
-
createNode(node(targetId, { status: 'active', intent: null }));
|
|
288
|
-
const rival = new DatabaseSync(canvasDbPath());
|
|
289
|
-
rival.exec('PRAGMA busy_timeout = 0');
|
|
290
|
-
let rivalBlocked = false;
|
|
291
|
-
const outcome = withFreshTerminalGuard(targetId, hasNoNaturalCycle, () => {
|
|
292
|
-
// Same entry shape `deliverImmediate` builds for a body message — the
|
|
293
|
-
// guarded write this test's race must prove is atomic with the fresh read.
|
|
294
|
-
const entry = sendMail(targetId, 'deferred', 'raced note');
|
|
295
|
-
// Attempted WHILE the guard holds its BEGIN IMMEDIATE write lock — a real
|
|
296
|
-
// concurrent finish/cancel/finalization racing the immediate delivery.
|
|
297
|
-
try {
|
|
298
|
-
rival.exec('BEGIN IMMEDIATE');
|
|
299
|
-
rival.prepare("UPDATE nodes SET status = 'done' WHERE node_id = ?").run(targetId);
|
|
300
|
-
rival.exec('COMMIT');
|
|
301
|
-
}
|
|
302
|
-
catch (e) {
|
|
303
|
-
rivalBlocked = /SQLITE_BUSY|database is locked/i.test(e.message);
|
|
304
|
-
}
|
|
305
|
-
return entry;
|
|
306
|
-
});
|
|
307
|
-
try {
|
|
308
|
-
assert.equal(rivalBlocked, true, 'the rival terminalization could not acquire the lock mid-guard — the immediate delivery genuinely serializes against it');
|
|
309
|
-
assert.equal(outcome.kind, 'ran', 'the guard read the pre-terminal state and completed the delivery, uncontested by the rival');
|
|
310
|
-
assert.equal(inboxRows(targetId).length, 1, 'exactly the one guarded SQL delivery landed');
|
|
311
|
-
}
|
|
312
|
-
finally {
|
|
313
|
-
try {
|
|
314
|
-
rival.exec('ROLLBACK');
|
|
315
|
-
}
|
|
316
|
-
catch { /* rival's own txn already closed above */ }
|
|
317
|
-
rival.close();
|
|
318
|
-
}
|
|
319
|
-
});
|
|
320
|
-
test('#343 (immediate path): `node message send --tier deferred --reopen` against an already-finalized target is still rejected with deferred_no_natural_cycle, and does NOT clear final_report (the reopen+deferred combo stays dead, now atomically)', { timeout: 30_000 }, async () => {
|
|
321
|
-
const id = 'reopenDeferredFinalized';
|
|
322
|
-
createNode(node(id));
|
|
323
|
-
// #343 final-review Minor: capture the AMBIENT prior value (not assumed
|
|
324
|
-
// undefined) and restore exactly in `finally`, deleting only when it was
|
|
325
|
-
// originally unset — so a focused/reordered run under an ambient managed-
|
|
326
|
-
// node id stays hermetic instead of losing it for every later test in the
|
|
327
|
-
// file (the suite-level `after` hook only restores the ORIGINAL module-load
|
|
328
|
-
// value, too late for tests that run between this one and teardown).
|
|
329
|
-
const priorNodeId = process.env['CRTR_NODE_ID'];
|
|
330
|
-
process.env['CRTR_NODE_ID'] = id;
|
|
331
|
-
let firstFinal;
|
|
332
|
-
try {
|
|
333
|
-
await pushFinal(id, 'round 1 verdict');
|
|
334
|
-
firstFinal = getNode(id)?.final_report;
|
|
335
|
-
assert.ok(firstFinal, 'the target is genuinely finalized before the raced retask');
|
|
336
|
-
}
|
|
337
|
-
finally {
|
|
338
|
-
if (priorNodeId === undefined)
|
|
339
|
-
delete process.env['CRTR_NODE_ID'];
|
|
340
|
-
else
|
|
341
|
-
process.env['CRTR_NODE_ID'] = priorNodeId;
|
|
342
|
-
}
|
|
343
|
-
const inboxBefore = inboxRows(id).length;
|
|
344
|
-
const originalLaunch = headlessBrokerHost.launch;
|
|
345
|
-
let launchCalls = 0;
|
|
346
|
-
headlessBrokerHost.launch = ((...args) => {
|
|
347
|
-
launchCalls++;
|
|
348
|
-
return originalLaunch(...args);
|
|
349
|
-
});
|
|
350
|
-
try {
|
|
351
|
-
await assert.rejects(() => messageSendLeaf().run({ to: id, tier: 'deferred', reopen: true, body: 'round 2 attempt' }), (e) => e instanceof InputError && e.payload.error === 'deferred_no_natural_cycle', '--reopen + --tier deferred immediate delivery is a semantically-impossible combo (final_report set => hasNoNaturalCycle true) and stays rejected');
|
|
352
|
-
}
|
|
353
|
-
finally {
|
|
354
|
-
headlessBrokerHost.launch = originalLaunch;
|
|
355
|
-
}
|
|
356
|
-
assert.equal(launchCalls, 0, 'a rejected reopen+deferred retask must never attempt a revive');
|
|
357
|
-
assert.equal(inboxRows(id).length, inboxBefore, 'a rejected reopen+deferred retask must not create a SQL delivery');
|
|
358
|
-
assert.equal(getNode(id)?.final_report, firstFinal, 'the canonical final must survive untouched — assertFinalizedForReopen/commitReopen never ran on the rejected path');
|
|
359
|
-
});
|
|
360
|
-
// The shared `withFreshTerminalGuard` primitive itself (Major, gh #341/#343
|
|
361
|
-
// review). Every caller that needs a fresh terminal-status check and a
|
|
362
|
-
// dependent write to share one transaction — the immediate deferred path
|
|
363
|
-
// above, and any future arm/schedule doorway — rides this one function.
|
|
364
|
-
// #343 review, Major 1: the fresh terminal-status check and a guarded write
|
|
365
|
-
// that depends on it must share ONE transaction, or a concurrent finish/
|
|
366
|
-
// cancel/finalization can land in the gap and silently strand the write. This
|
|
367
|
-
// drives the actual shared primitive (`withFreshTerminalGuard`) against a
|
|
368
|
-
// REAL second connection to the same canvas.db — a genuine rival writer, not
|
|
369
|
-
// a timing sleep or a poll loop — to prove the linearization deterministically:
|
|
370
|
-
// while the guard holds its transaction, the rival's own write is provably
|
|
371
|
-
// locked out (SQLITE_BUSY, immediate — `busy_timeout = 0` never waits), so
|
|
372
|
-
// it cannot land between the guard's read and its write; and once the target
|
|
373
|
-
// is ALREADY terminal before the guard ever opens its transaction, the
|
|
374
|
-
// guarded body never runs at all.
|
|
375
|
-
test('#343: withFreshTerminalGuard closes the check-then-write TOCTOU — a rival writer cannot land inside the guarded transaction, and an already-terminal target never reaches the guarded write', { timeout: 30_000 }, () => {
|
|
376
|
-
const targetId = 'raceTarget';
|
|
377
|
-
createNode(node(targetId, { status: 'active', intent: null }));
|
|
378
|
-
// A second, independent connection to the SAME canvas.db, bypassing the
|
|
379
|
-
// process-wide openDb() singleton — models a concurrent writer (another
|
|
380
|
-
// broker's finish/cancel/finalize) racing the guarded operation.
|
|
381
|
-
const rival = new DatabaseSync(canvasDbPath());
|
|
382
|
-
rival.exec('PRAGMA busy_timeout = 0'); // fail immediately instead of blocking this single thread
|
|
383
|
-
let rivalBlocked = false;
|
|
384
|
-
try {
|
|
385
|
-
const outcome = withFreshTerminalGuard(targetId, hasNoNaturalCycle, () => {
|
|
386
|
-
// Attempted WHILE the guard holds its BEGIN IMMEDIATE write lock — a
|
|
387
|
-
// real concurrent terminalization racing the guarded write.
|
|
388
|
-
try {
|
|
389
|
-
rival.exec('BEGIN IMMEDIATE');
|
|
390
|
-
rival.prepare("UPDATE nodes SET status = 'done' WHERE node_id = ?").run(targetId);
|
|
391
|
-
rival.exec('COMMIT');
|
|
392
|
-
}
|
|
393
|
-
catch (e) {
|
|
394
|
-
rivalBlocked = /SQLITE_BUSY|database is locked/i.test(e.message);
|
|
395
|
-
}
|
|
396
|
-
return 'armed';
|
|
397
|
-
});
|
|
398
|
-
assert.equal(rivalBlocked, true, 'the rival terminalization write could not acquire the lock mid-guard — the guard genuinely serializes against it');
|
|
399
|
-
assert.deepEqual(outcome, { kind: 'ran', result: 'armed' }, 'the guard read the pre-terminal state and completed its write, uncontested by the rival');
|
|
400
|
-
}
|
|
401
|
-
finally {
|
|
402
|
-
try {
|
|
403
|
-
rival.exec('ROLLBACK');
|
|
404
|
-
}
|
|
405
|
-
catch { /* rival's own txn already closed by its own catch above */ }
|
|
406
|
-
rival.close();
|
|
407
|
-
}
|
|
408
|
-
// The reverse linearization: a terminalization that already committed
|
|
409
|
-
// BEFORE the guard's fresh read runs — the guard must observe it and never
|
|
410
|
-
// invoke the guarded write at all.
|
|
411
|
-
setStatus(targetId, 'done');
|
|
412
|
-
let bodyRan = false;
|
|
413
|
-
const outcome2 = withFreshTerminalGuard(targetId, hasNoNaturalCycle, () => {
|
|
414
|
-
bodyRan = true;
|
|
415
|
-
return 'never';
|
|
416
|
-
});
|
|
417
|
-
assert.equal(bodyRan, false, 'a target already terminal when the guard reads must short-circuit — the guarded write must never run');
|
|
418
|
-
assert.equal(outcome2.kind, 'terminal', 'the guard reports the terminal outcome instead of a written result');
|
|
419
|
-
});
|
|
420
|
-
// #343 final-review Major: the fresh terminal guard must not treat a target
|
|
421
|
-
// deleted between the caller's own selection and the guard's fresh read as
|
|
422
|
-
// safe/body-run — a distinct 'missing' outcome, never conflated with
|
|
423
|
-
// 'terminal' (no status/final_report to report) or a fabricated 'ran'.
|
|
424
|
-
test("withFreshTerminalGuard reports 'missing' — never runs the guarded body — for a target deleted before the guard's fresh read (no orphan node dir/inbox is created)", { timeout: 30_000 }, () => {
|
|
425
|
-
const targetId = 'deletedBeforeGuard';
|
|
426
|
-
createNode(node(targetId, { status: 'active', intent: null }));
|
|
427
|
-
deleteNode(targetId); // row + dir gone — models a concurrent deletion that already committed
|
|
428
|
-
assert.equal(existsSync(nodeDir(targetId)), false, 'sanity: the target dir is genuinely gone before the guard ever runs');
|
|
429
|
-
let bodyRan = false;
|
|
430
|
-
const outcome = withFreshTerminalGuard(targetId, hasNoNaturalCycle, () => {
|
|
431
|
-
bodyRan = true;
|
|
432
|
-
return sendMail(targetId, 'deferred', 'orphan');
|
|
433
|
-
});
|
|
434
|
-
assert.equal(bodyRan, false, "a missing target must NEVER run the guarded body — 'missing' must not be treated as safe/empty-and-runnable");
|
|
435
|
-
assert.deepEqual(outcome, { kind: 'missing' }, "the guard reports a distinct 'missing' outcome, not 'terminal' (nothing to report) and not a fabricated 'ran'");
|
|
436
|
-
assert.equal(existsSync(nodeDir(targetId)), false, 'the guarded SQL delivery never ran, so no orphan node dir was recreated for the deleted target');
|
|
437
|
-
});
|
|
438
|
-
// Daemon second pass — crtrd.ts's idle-release inbox loop
|
|
439
|
-
// Deterministic: `headlessBrokerHost.launch` is fully STUBBED (never delegates
|
|
440
|
-
// to the real launcher) so `reviveNode` cannot spawn a real detached broker/pi
|
|
441
|
-
// process as a side effect of this decision test — the stubbed HostHandle's
|
|
442
|
-
// `exited` promise never settles and its pid is a fixed sentinel, so the only
|
|
443
|
-
// thing under test is the daemon's revive-or-hold DECISION (cycles/status/
|
|
444
|
-
// intent), never a real engine's boot. Genuine post-revive DELIVERY (both
|
|
445
|
-
// entries actually reaching the target, no duplicate/loss, SQL acknowledgement) is
|
|
446
|
-
// proven separately below through the real inbox watcher.
|
|
447
|
-
test('daemon second pass: a deferred-only unseen set never wakes an idle-released node; a later non-deferred entry wakes it (decision only — real delivery is proven separately below)', { timeout: 30_000 }, async () => {
|
|
448
|
-
const id = 'idleReleaseDeferredDaemon';
|
|
449
|
-
createFixtureNode(node(id, { lifecycle: 'resident', status: 'idle', intent: 'idle-release', pi_pid: deadPid(), pi_session_id: null, cwd: home }));
|
|
450
|
-
// A live child is a standing obligation, which is what keeps this row
|
|
451
|
-
// idle-released across the tick. Without one it would settle into its park
|
|
452
|
-
// instead (the resident carve-out, locked in the next test) and the wake half
|
|
453
|
-
// below would be measuring a parked row.
|
|
454
|
-
createNode(node(`${id}Child`, { status: 'active' }));
|
|
455
|
-
subscribe(id, `${id}Child`);
|
|
456
|
-
const baselineAcknowledged = acknowledgedNodeMailCount(id);
|
|
457
|
-
const originalLaunch = headlessBrokerHost.launch;
|
|
458
|
-
let launchCalls = 0;
|
|
459
|
-
headlessBrokerHost.launch = (() => {
|
|
460
|
-
launchCalls++;
|
|
461
|
-
return { pid: 0x7ffffffe, exited: new Promise(() => { }) };
|
|
462
|
-
});
|
|
463
|
-
let deferredEntry;
|
|
464
|
-
let normalEntry;
|
|
465
|
-
try {
|
|
466
|
-
deferredEntry = sendMail(id, 'deferred', 'deferred note');
|
|
467
|
-
await superviseTick();
|
|
468
|
-
{
|
|
469
|
-
const after = getNode(id);
|
|
470
|
-
assert.equal(after.cycles ?? 0, 0, 'a deferred-only unseen entry never revives an idle-released node');
|
|
471
|
-
assert.equal(after.status, 'idle', 'target left idle');
|
|
472
|
-
assert.equal(after.intent, 'idle-release', 'target left idle-release');
|
|
473
|
-
assert.equal(launchCalls, 0, 'no launch attempt for a deferred-only unseen set');
|
|
474
|
-
}
|
|
475
|
-
assert.equal(acknowledgedNodeMailCount(id), baselineAcknowledged, 'the held delivery remains unacknowledged');
|
|
476
|
-
normalEntry = sendMail(id, 'normal', 'go now');
|
|
477
|
-
await superviseTick();
|
|
478
|
-
{
|
|
479
|
-
const after = getNode(id);
|
|
480
|
-
assert.equal(after.cycles ?? 0, 1, 'a non-deferred unseen entry still wakes the idle-released node exactly as before');
|
|
481
|
-
assert.equal(after.status, 'active', 'revived');
|
|
482
|
-
assert.equal(after.intent ?? null, null, 'intent cleared by the revive');
|
|
483
|
-
assert.equal(launchCalls, 1, 'exactly one (stubbed) launch attempt for the wake-worthy entry');
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
finally {
|
|
487
|
-
headlessBrokerHost.launch = originalLaunch;
|
|
488
|
-
}
|
|
489
|
-
// No loss: both independent SQL obligations remain pending for the revived execution.
|
|
490
|
-
assert.deepEqual(inboxRows(id).filter((row) => row.state === 'pending').map((row) => row.messageId), [deferredEntry.messageId, normalEntry.messageId], 'neither delivery was dropped or acknowledged by the daemon');
|
|
491
|
-
});
|
|
492
|
-
test('the lifecycle tick parks a resident holding deferred-only mail — mail that never wakes it must not hold it idle forever either', { timeout: 30_000 }, async () => {
|
|
493
|
-
const id = 'residentDeferredOnly';
|
|
494
|
-
createFixtureNode(node(id, { lifecycle: 'resident', status: 'idle', intent: 'idle-release', pi_pid: deadPid(), pi_session_id: null, cwd: home }));
|
|
495
|
-
const originalLaunch = headlessBrokerHost.launch;
|
|
496
|
-
let launchCalls = 0;
|
|
497
|
-
headlessBrokerHost.launch = (() => {
|
|
498
|
-
launchCalls++;
|
|
499
|
-
return { pid: 0x7ffffffe, exited: new Promise(() => { }) };
|
|
500
|
-
});
|
|
501
|
-
try {
|
|
502
|
-
const held = enqueueNodeMail(id, {
|
|
503
|
-
kind: 'message',
|
|
504
|
-
label: 'Child done — auto-done notice',
|
|
505
|
-
bodyJson: { reason: 'child-auto-done' },
|
|
506
|
-
urgency: 'deferred',
|
|
507
|
-
wake: 1,
|
|
508
|
-
});
|
|
509
|
-
await superviseTick();
|
|
510
|
-
const after = getNode(id);
|
|
511
|
-
assert.equal(after.status, 'done', 'the resident settles into its park instead of sitting idle behind mail that cannot wake it');
|
|
512
|
-
assert.equal(after.intent, 'parked', 'parked, not released');
|
|
513
|
-
assert.equal(launchCalls, 0, 'settling quietly never launches an engine');
|
|
514
|
-
assert.deepEqual(inboxRows(id).filter((row) => row.state === 'pending').map((row) => row.messageId), [held.messageId], 'the held delivery survives the park, ready for the cycle that reopens the conversation');
|
|
515
|
-
}
|
|
516
|
-
finally {
|
|
517
|
-
headlessBrokerHost.launch = originalLaunch;
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
|
-
function makeFakePi() {
|
|
521
|
-
const handlers = {};
|
|
522
|
-
const pi = {
|
|
523
|
-
injected: [],
|
|
524
|
-
on(e, h) { handlers[e] = h; },
|
|
525
|
-
sendUserMessage(content, options) { this.injected.push({ content, deliverAs: options?.deliverAs }); },
|
|
526
|
-
sendMessage() { },
|
|
527
|
-
async fire(e, ev, ctx) { await handlers[e]?.(ev, ctx); },
|
|
528
|
-
};
|
|
529
|
-
globalThis[BROKER_IDLE_TURN_START] = (content) => pi.sendUserMessage(content);
|
|
530
|
-
return pi;
|
|
531
|
-
}
|
|
532
|
-
const wait = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
533
|
-
async function waitUntil(check, timeoutMs) {
|
|
534
|
-
const deadline = Date.now() + timeoutMs;
|
|
535
|
-
while (!check()) {
|
|
536
|
-
if (Date.now() >= deadline)
|
|
537
|
-
throw new Error('timed out waiting for watcher deliveries');
|
|
538
|
-
await wait(5);
|
|
539
|
-
}
|
|
540
|
-
}
|
|
541
|
-
test('the real inbox watcher holds a deferred delivery alone, then delivers it TOGETHER with a later normal delivery with no duplicate/loss, and acknowledges both at settlement (gh #341 review: genuine delivery, not just the daemon decision)', { timeout: 30_000 }, async () => {
|
|
542
|
-
const id = 'watcherDeferredThenNormal';
|
|
543
|
-
// The watcher claims mail only for its current execution. This fake Pi runs
|
|
544
|
-
// in this test process, so its fabricated node must carry that execution just
|
|
545
|
-
// like a real launched node does.
|
|
546
|
-
createNode(node(id, { description: 'deferred inbox watcher fixture', lifecycle: 'resident', status: 'idle', intent: null }));
|
|
547
|
-
const executionId = beginExecution(id, { daemonEpoch: 'test' });
|
|
548
|
-
const TICK_MS = 20;
|
|
549
|
-
const DEBOUNCE_MS = 25;
|
|
550
|
-
const SETTLE_MS = TICK_MS * 2 + DEBOUNCE_MS + 30;
|
|
551
|
-
const origTick = process.env['CRTR_WATCHER_TICK_MS'];
|
|
552
|
-
const origDebounce = process.env['CRTR_WATCHER_DEBOUNCE_MS'];
|
|
553
|
-
const origNodeId = process.env['CRTR_NODE_ID'];
|
|
554
|
-
const origExecutionId = process.env['CRTR_EXECUTION_ID'];
|
|
555
|
-
process.env['CRTR_WATCHER_TICK_MS'] = String(TICK_MS);
|
|
556
|
-
process.env['CRTR_WATCHER_DEBOUNCE_MS'] = String(DEBOUNCE_MS);
|
|
557
|
-
process.env['CRTR_NODE_ID'] = id;
|
|
558
|
-
process.env['CRTR_EXECUTION_ID'] = executionId;
|
|
559
|
-
const pi = makeFakePi();
|
|
560
|
-
let dispose;
|
|
561
|
-
try {
|
|
562
|
-
dispose = registerCanvasInboxWatcher(pi);
|
|
563
|
-
// session_start is the real lifecycle gate that arms the watcher's poll
|
|
564
|
-
// interval and initial tick (see canvas-inbox-watcher.ts) — registration
|
|
565
|
-
// alone only wires up handlers.
|
|
566
|
-
await pi.fire('session_start', { type: 'session_start' }, undefined);
|
|
567
|
-
// No agent_start fired — the watcher treats the node as idle, same as the
|
|
568
|
-
// idle-released daemon scenario above.
|
|
569
|
-
await wait(TICK_MS + 60);
|
|
570
|
-
const deferredEntry = sendMail(id, 'deferred', 'deferred note');
|
|
571
|
-
await wait(SETTLE_MS);
|
|
572
|
-
assert.equal(pi.injected.length, 0, 'a deferred-only idle buffer is held by the real watcher, not delivered alone');
|
|
573
|
-
assert.equal(acknowledgedNodeMailCount(id), 0, 'nothing is acknowledged while held');
|
|
574
|
-
const normalEntry = sendMail(id, 'normal', 'go now');
|
|
575
|
-
await waitUntil(() => pi.injected.length === 2, SETTLE_MS + TICK_MS * 12);
|
|
576
|
-
// Two direct human entries are two verbatim deliveries — one message per
|
|
577
|
-
// entry, physical order preserved, one visible send per watcher cycle.
|
|
578
|
-
assert.equal(pi.injected.length, 2, 'both entries are delivered once a non-deferred entry joins the batch — each human entry as its own verbatim message');
|
|
579
|
-
assert.match(pi.injected[0].content, /deferred note/, 'the previously-held deferred entry is delivered first — not lost');
|
|
580
|
-
assert.doesNotMatch(pi.injected[0].content, /go now/, 'the deliveries are separate messages, not one concatenation');
|
|
581
|
-
assert.match(pi.injected[1].content, /go now/, 'the new normal entry follows in its own message — not duplicated');
|
|
582
|
-
assert.equal(pi.injected[0].deliverAs, undefined, 'idle delivery triggers a fresh turn, no deliverAs');
|
|
583
|
-
// Idle-path delivery hands off on the void send but only acknowledges the
|
|
584
|
-
// SQL deliveries at agent_settled (never on the fire-and-forget send
|
|
585
|
-
// itself) — settle the turn and prove both delivered obligations settle.
|
|
586
|
-
await pi.fire('agent_settled', { type: 'agent_settled' }, { isIdle: () => true, hasPendingMessages: () => false });
|
|
587
|
-
assert.equal(acknowledgedNodeMailCount(id), 2, 'agent_settled acknowledges both delivered SQL obligations');
|
|
588
|
-
assert.ok(inboxRows(id).every((row) => row.acknowledgedAt !== null), 'neither delivery is left in a partial handoff');
|
|
589
|
-
assert.notEqual(normalEntry.messageId, deferredEntry.messageId, 'the batch retains distinct message identities');
|
|
590
|
-
}
|
|
591
|
-
finally {
|
|
592
|
-
dispose?.();
|
|
593
|
-
if (origTick === undefined)
|
|
594
|
-
delete process.env['CRTR_WATCHER_TICK_MS'];
|
|
595
|
-
else
|
|
596
|
-
process.env['CRTR_WATCHER_TICK_MS'] = origTick;
|
|
597
|
-
if (origDebounce === undefined)
|
|
598
|
-
delete process.env['CRTR_WATCHER_DEBOUNCE_MS'];
|
|
599
|
-
else
|
|
600
|
-
process.env['CRTR_WATCHER_DEBOUNCE_MS'] = origDebounce;
|
|
601
|
-
if (origNodeId === undefined)
|
|
602
|
-
delete process.env['CRTR_NODE_ID'];
|
|
603
|
-
else
|
|
604
|
-
process.env['CRTR_NODE_ID'] = origNodeId;
|
|
605
|
-
if (origExecutionId === undefined)
|
|
606
|
-
delete process.env['CRTR_EXECUTION_ID'];
|
|
607
|
-
else
|
|
608
|
-
process.env['CRTR_EXECUTION_ID'] = origExecutionId;
|
|
609
|
-
}
|
|
610
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|