@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,359 +0,0 @@
|
|
|
1
|
-
// Contract-seam tests for bundle-plugin revalidation against a stub endpoint.
|
|
2
|
-
// Run with: npm run test:integration
|
|
3
|
-
//
|
|
4
|
-
// Two behaviors whose absence would be SILENT — the package on disk would still
|
|
5
|
-
// be a complete, valid command tree, so nothing fails loudly while the client
|
|
6
|
-
// dispatches against a description the server retired:
|
|
7
|
-
//
|
|
8
|
-
// 1. Round trip — an install stores the served validator; a later check sends
|
|
9
|
-
// it conditionally, leaves the package untouched on 304, and swaps it on a
|
|
10
|
-
// 200 that carries different bytes.
|
|
11
|
-
// 2. Refetch on miss — the forced refetch a `manifest_stale` answer triggers
|
|
12
|
-
// reports whether the package actually CHANGED. That boolean is the whole
|
|
13
|
-
// branch: false means the operation is genuinely gone and the server's own
|
|
14
|
-
// error stands, true means the retry has a fresher tree to parse against.
|
|
15
|
-
// 3. Recovery from a RENAMED op, end to end and entirely off the wire: the
|
|
16
|
-
// stub answers the v1 op with a real 400 error envelope carrying
|
|
17
|
-
// `manifest_stale`, so the flag is parsed by the transport rather than
|
|
18
|
-
// hand-built. `runCli` renders every other failure itself, so recovery is
|
|
19
|
-
// unreachable unless this one class escapes it — and from the outside a
|
|
20
|
-
// rendered error looks identical to a recovered one. Its three legs: the
|
|
21
|
-
// escape, the refetch-and-replay, and exactly-once.
|
|
22
|
-
//
|
|
23
|
-
// All run against an isolated HOME and a startDir with no `.crouter` ancestor,
|
|
24
|
-
// so no ambient plugin or scope of the developer's machine is reachable.
|
|
25
|
-
import { test, describe, before, beforeEach, afterEach, after } from 'node:test';
|
|
26
|
-
import assert from 'node:assert/strict';
|
|
27
|
-
import { mkdtempSync, writeFileSync, rmSync, readFileSync, realpathSync } from 'node:fs';
|
|
28
|
-
import { createServer } from 'node:http';
|
|
29
|
-
import { tmpdir } from 'node:os';
|
|
30
|
-
import { join } from 'node:path';
|
|
31
|
-
import * as tar from 'tar';
|
|
32
|
-
import { resetScopeCache, userScopeRoot } from '../../scope.js';
|
|
33
|
-
import { readState, readConfig } from '../../config.js';
|
|
34
|
-
import { closeScopedStores } from '../../scoped-state/db.js';
|
|
35
|
-
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
36
|
-
import { revalidateBundlePlugins, forceRevalidateBundlePlugin } from '../../command-plugins/revalidate.js';
|
|
37
|
-
import { pluginInstall } from '../../../commands/pkg/plugin-manage.js';
|
|
38
|
-
import { runCli } from '../../command.js';
|
|
39
|
-
import { buildRoot } from '../../../build-root.js';
|
|
40
|
-
import { dispatchWithStaleRecovery } from '../../manifest-recovery.js';
|
|
41
|
-
import { CrtrError } from '../../errors.js';
|
|
42
|
-
const PLUGIN = 'revalidate-fixture';
|
|
43
|
-
const ARGV = ['node', 'crtr', 'demo', 'show'];
|
|
44
|
-
/** The positional the fixture leaf echoes back. */
|
|
45
|
-
const FIXTURE_ID = 'fixture-1';
|
|
46
|
-
let isolatedHome;
|
|
47
|
-
let isolatedCwd;
|
|
48
|
-
let prevHome;
|
|
49
|
-
let prevTtl;
|
|
50
|
-
let prevCwd;
|
|
51
|
-
let server;
|
|
52
|
-
let endpoint;
|
|
53
|
-
/** What the stub serves right now, and what every BUNDLE request asked for. */
|
|
54
|
-
let served;
|
|
55
|
-
let requests;
|
|
56
|
-
/** Which generations of the `demo show` op this backend has retired. A call
|
|
57
|
-
* against a retired one gets the 400 + `manifest_stale` envelope that drives
|
|
58
|
-
* client recovery; any other generation is served normally. */
|
|
59
|
-
let retiredOps;
|
|
60
|
-
/** Every generation the leaf was actually invoked at, in order — `['v1','v2']`
|
|
61
|
-
* is one recovery: the stale call, then the replay against the fresh tree. */
|
|
62
|
-
let opCalls;
|
|
63
|
-
before(() => {
|
|
64
|
-
prevHome = process.env.HOME;
|
|
65
|
-
prevTtl = process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS;
|
|
66
|
-
prevCwd = process.cwd();
|
|
67
|
-
});
|
|
68
|
-
beforeEach(async () => {
|
|
69
|
-
isolatedHome = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-revalidate-home-')));
|
|
70
|
-
isolatedCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-revalidate-cwd-')));
|
|
71
|
-
process.env.HOME = isolatedHome;
|
|
72
|
-
process.chdir(isolatedCwd);
|
|
73
|
-
initializeFreshScopedStore({ kind: 'user', root: join(isolatedHome, '.crouter') });
|
|
74
|
-
resetScopeCache();
|
|
75
|
-
served = { archive: makeArchive('v1'), etag: '"sha256-v1"' };
|
|
76
|
-
requests = [];
|
|
77
|
-
retiredOps = new Set();
|
|
78
|
-
opCalls = [];
|
|
79
|
-
server = createServer((req, res) => {
|
|
80
|
-
const path = (req.url ?? '/').split('?')[0] ?? '/';
|
|
81
|
-
const op = /^\/(v\d+)\/demo\/(.+)$/.exec(path);
|
|
82
|
-
if (op !== null) {
|
|
83
|
-
serveOp(res, op[1], op[2]);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
if (path !== '/v1/cli/bundle') {
|
|
87
|
-
res.writeHead(404, { 'Content-Type': 'application/json' });
|
|
88
|
-
res.end(JSON.stringify({ error: { code: 'not_found', message: `no route for ${path}` } }));
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
const ifNoneMatch = typeof req.headers['if-none-match'] === 'string' ? req.headers['if-none-match'] : undefined;
|
|
92
|
-
if (ifNoneMatch === served.etag) {
|
|
93
|
-
requests.push({ ifNoneMatch, status: 304 });
|
|
94
|
-
res.writeHead(304, { ETag: served.etag, 'Cache-Control': 'private, no-cache' });
|
|
95
|
-
res.end();
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
requests.push({ ifNoneMatch, status: 200 });
|
|
99
|
-
res.writeHead(200, { 'Content-Type': 'application/x-tar', ETag: served.etag, 'Cache-Control': 'private, no-cache' });
|
|
100
|
-
res.end(Buffer.from(served.archive));
|
|
101
|
-
});
|
|
102
|
-
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
103
|
-
const address = server.address();
|
|
104
|
-
if (address === null || typeof address === 'string')
|
|
105
|
-
throw new Error('stub server has no TCP address');
|
|
106
|
-
endpoint = `http://127.0.0.1:${address.port}/v1/cli/bundle`;
|
|
107
|
-
});
|
|
108
|
-
afterEach(async () => {
|
|
109
|
-
await new Promise((resolve) => server.close(() => resolve()));
|
|
110
|
-
process.chdir(prevCwd);
|
|
111
|
-
closeScopedStores();
|
|
112
|
-
rmSync(isolatedHome, { recursive: true, force: true });
|
|
113
|
-
rmSync(isolatedCwd, { recursive: true, force: true });
|
|
114
|
-
});
|
|
115
|
-
after(() => {
|
|
116
|
-
process.chdir(prevCwd);
|
|
117
|
-
process.env.HOME = prevHome;
|
|
118
|
-
if (prevTtl === undefined)
|
|
119
|
-
delete process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS;
|
|
120
|
-
else
|
|
121
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = prevTtl;
|
|
122
|
-
resetScopeCache();
|
|
123
|
-
});
|
|
124
|
-
/** The `demo show` leaf, answered at whichever generation the caller's tree
|
|
125
|
-
* parsed the path from. A retired generation gets a real error envelope with
|
|
126
|
-
* `manifest_stale` set, so the flag reaches the client through the transport's
|
|
127
|
-
* own JSON parse rather than being constructed in the test. */
|
|
128
|
-
function serveOp(res, generation, id) {
|
|
129
|
-
opCalls.push(generation);
|
|
130
|
-
if (retiredOps.has(generation)) {
|
|
131
|
-
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
132
|
-
res.end(JSON.stringify({
|
|
133
|
-
error: {
|
|
134
|
-
code: 'cli_op_unknown',
|
|
135
|
-
message: `this backend no longer serves "demo show" at ${generation}`,
|
|
136
|
-
manifest_stale: true,
|
|
137
|
-
next: 'Refetch the plugin package and re-run.',
|
|
138
|
-
},
|
|
139
|
-
}));
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
143
|
-
res.end(JSON.stringify({ id }));
|
|
144
|
-
}
|
|
145
|
-
/** One archive per generation. `marker` rides the leaf description AND the REST
|
|
146
|
-
* path its leaf calls, so the tree unpacked on disk says which generation
|
|
147
|
-
* produced it, the two generations are different bytes with different
|
|
148
|
-
* validators, and a call made from the OLD tree is distinguishable on the wire
|
|
149
|
-
* from the same call made after a swap — which is exactly what a renamed op
|
|
150
|
-
* looks like to a backend. */
|
|
151
|
-
function makeArchive(marker) {
|
|
152
|
-
const commands = {
|
|
153
|
-
schemaVersion: 1,
|
|
154
|
-
mounts: [
|
|
155
|
-
{
|
|
156
|
-
parent: [],
|
|
157
|
-
node: {
|
|
158
|
-
kind: 'branch',
|
|
159
|
-
name: 'demo',
|
|
160
|
-
description: `demo commands (${marker})`,
|
|
161
|
-
whenToUse: 'you are exercising the revalidation seam',
|
|
162
|
-
rootEntry: {
|
|
163
|
-
concept: 'a fixture command tree served by the stub endpoint',
|
|
164
|
-
description: `demo commands (${marker})`,
|
|
165
|
-
whenToUse: 'you are exercising the revalidation seam',
|
|
166
|
-
},
|
|
167
|
-
summary: `demo commands (${marker})`,
|
|
168
|
-
model: 'A fixture tree with one read-only leaf.',
|
|
169
|
-
children: [
|
|
170
|
-
{
|
|
171
|
-
kind: 'leaf',
|
|
172
|
-
name: 'show',
|
|
173
|
-
description: `show the fixture (${marker})`,
|
|
174
|
-
whenToUse: 'inspect the fixture record',
|
|
175
|
-
tier: 'important',
|
|
176
|
-
summary: `show the fixture record (${marker})`,
|
|
177
|
-
params: [{ kind: 'positional', name: 'id', required: true, constraint: 'the fixture id' }],
|
|
178
|
-
output: [{ name: 'id', type: 'string', required: true, constraint: 'the echoed fixture id' }],
|
|
179
|
-
effects: ['None. Read-only.'],
|
|
180
|
-
rest: { method: 'GET', path: `/${marker}/demo/{id}`, params: { id: { in: 'path' } } },
|
|
181
|
-
},
|
|
182
|
-
],
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
],
|
|
186
|
-
};
|
|
187
|
-
const dir = mkdtempSync(join(tmpdir(), 'crtr-revalidate-tar-'));
|
|
188
|
-
try {
|
|
189
|
-
writeFileSync(join(dir, 'bundle.json'), JSON.stringify({ bundleVersion: 1 }));
|
|
190
|
-
writeFileSync(join(dir, 'commands.json'), JSON.stringify(commands));
|
|
191
|
-
const pack = tar.create({ sync: true, cwd: dir, portable: true }, ['bundle.json', 'commands.json']);
|
|
192
|
-
const chunks = [];
|
|
193
|
-
let chunk;
|
|
194
|
-
while ((chunk = pack.read()) !== null)
|
|
195
|
-
chunks.push(chunk);
|
|
196
|
-
return new Uint8Array(Buffer.concat(chunks));
|
|
197
|
-
}
|
|
198
|
-
finally {
|
|
199
|
-
rmSync(dir, { recursive: true, force: true });
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
async function install() {
|
|
203
|
-
await pluginInstall.run({ endpoint, name: PLUGIN, scope: 'user' });
|
|
204
|
-
}
|
|
205
|
-
/** The generation of the tree actually unpacked under the user scope. */
|
|
206
|
-
function installedMarker() {
|
|
207
|
-
const path = join(userScopeRoot(), 'plugins', PLUGIN, 'commands.json');
|
|
208
|
-
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
209
|
-
const description = parsed.mounts[0].node.description;
|
|
210
|
-
return description.slice(description.indexOf('(') + 1, description.indexOf(')'));
|
|
211
|
-
}
|
|
212
|
-
function pluginState() {
|
|
213
|
-
return readState('user').plugins[PLUGIN] ?? {};
|
|
214
|
-
}
|
|
215
|
-
function installedVersion() {
|
|
216
|
-
return readConfig('user').plugins[PLUGIN]?.version;
|
|
217
|
-
}
|
|
218
|
-
/** Age out the TTL without waiting one out: the pass measures freshness from
|
|
219
|
-
* `checked_at`, so a one-millisecond TTL plus a real pause is due. */
|
|
220
|
-
async function makeDue() {
|
|
221
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = '1';
|
|
222
|
-
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
223
|
-
}
|
|
224
|
-
/** Run a dispatch and collect what the caller would actually have observed:
|
|
225
|
-
* what reached stdout (both rendered results and rendered errors go there) and
|
|
226
|
-
* whether anything escaped the frame. `process.exitCode` is restored, since a
|
|
227
|
-
* rendered error sets it and would otherwise fail the whole test process. */
|
|
228
|
-
async function captured(run) {
|
|
229
|
-
const chunks = [];
|
|
230
|
-
const realWrite = process.stdout.write.bind(process.stdout);
|
|
231
|
-
const realExitCode = process.exitCode;
|
|
232
|
-
process.stdout.write = ((chunk) => {
|
|
233
|
-
chunks.push(String(chunk));
|
|
234
|
-
return true;
|
|
235
|
-
});
|
|
236
|
-
let thrown;
|
|
237
|
-
try {
|
|
238
|
-
await run();
|
|
239
|
-
}
|
|
240
|
-
catch (error) {
|
|
241
|
-
thrown = error;
|
|
242
|
-
}
|
|
243
|
-
finally {
|
|
244
|
-
process.stdout.write = realWrite;
|
|
245
|
-
process.exitCode = realExitCode;
|
|
246
|
-
}
|
|
247
|
-
return { stdout: chunks.join(''), thrown };
|
|
248
|
-
}
|
|
249
|
-
describe('bundle plugin revalidation', () => {
|
|
250
|
-
test('an install fills the cache; an unchanged bundle 304s and a changed one swaps the package', async () => {
|
|
251
|
-
await install();
|
|
252
|
-
// The install IS the first cache fill: unconditional, and it stores what
|
|
253
|
-
// the server named for the bytes it unpacked.
|
|
254
|
-
assert.deepEqual(requests, [{ ifNoneMatch: undefined, status: 200 }]);
|
|
255
|
-
assert.equal(pluginState().etag, '"sha256-v1"');
|
|
256
|
-
assert.ok(pluginState().checked_at !== undefined);
|
|
257
|
-
assert.equal(installedMarker(), 'v1');
|
|
258
|
-
const firstVersion = installedVersion();
|
|
259
|
-
// Inside the TTL there is nothing to do, and nothing is asked.
|
|
260
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = '600000';
|
|
261
|
-
await revalidateBundlePlugins(ARGV);
|
|
262
|
-
assert.equal(requests.length, 1);
|
|
263
|
-
// Due, unchanged: the request carries the stored validator, the server
|
|
264
|
-
// answers 304, and the package on disk is left exactly as it was.
|
|
265
|
-
await makeDue();
|
|
266
|
-
const beforeCheck = pluginState().checked_at;
|
|
267
|
-
await revalidateBundlePlugins(ARGV);
|
|
268
|
-
assert.deepEqual(requests[1], { ifNoneMatch: '"sha256-v1"', status: 304 });
|
|
269
|
-
assert.equal(installedMarker(), 'v1');
|
|
270
|
-
assert.equal(installedVersion(), firstVersion);
|
|
271
|
-
assert.equal(pluginState().etag, '"sha256-v1"');
|
|
272
|
-
assert.notEqual(pluginState().checked_at, beforeCheck);
|
|
273
|
-
// Due, changed: the 200 swaps the package, and the new validator replaces
|
|
274
|
-
// the old one so the next check is conditional on what is now on disk.
|
|
275
|
-
served = { archive: makeArchive('v2'), etag: '"sha256-v2"' };
|
|
276
|
-
await makeDue();
|
|
277
|
-
await revalidateBundlePlugins(ARGV);
|
|
278
|
-
assert.deepEqual(requests[2], { ifNoneMatch: '"sha256-v1"', status: 200 });
|
|
279
|
-
assert.equal(installedMarker(), 'v2');
|
|
280
|
-
assert.notEqual(installedVersion(), firstVersion);
|
|
281
|
-
assert.equal(pluginState().etag, '"sha256-v2"');
|
|
282
|
-
});
|
|
283
|
-
test('a forced refetch reports whether the package changed, ignoring a fresh TTL', async () => {
|
|
284
|
-
await install();
|
|
285
|
-
// A TTL the ordinary pass would honor. The forced path must not.
|
|
286
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = '600000';
|
|
287
|
-
// Nothing newer is served: the operation the caller invoked is genuinely
|
|
288
|
-
// gone, so the refetch reports no change and the server's error stands.
|
|
289
|
-
assert.equal(await forceRevalidateBundlePlugin(PLUGIN), false);
|
|
290
|
-
assert.deepEqual(requests[1], { ifNoneMatch: undefined, status: 200 });
|
|
291
|
-
assert.equal(installedMarker(), 'v1');
|
|
292
|
-
// A changed package: the retry has a fresher tree to re-parse against.
|
|
293
|
-
served = { archive: makeArchive('v2'), etag: '"sha256-v2"' };
|
|
294
|
-
assert.equal(await forceRevalidateBundlePlugin(PLUGIN), true);
|
|
295
|
-
assert.equal(installedMarker(), 'v2');
|
|
296
|
-
assert.equal(pluginState().etag, '"sha256-v2"');
|
|
297
|
-
// A plugin that is not installed is not a recovery path.
|
|
298
|
-
assert.equal(await forceRevalidateBundlePlugin('absent-plugin'), false);
|
|
299
|
-
});
|
|
300
|
-
test('the dispatcher lets a manifest_stale answer off the wire escape, and renders every other failure', async () => {
|
|
301
|
-
await install();
|
|
302
|
-
// The pass must not fire underneath these legs: every fetch below is one a
|
|
303
|
-
// test asked for.
|
|
304
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = '600000';
|
|
305
|
-
retiredOps.add('v1');
|
|
306
|
-
const root = await buildRoot();
|
|
307
|
-
const stale = await captured(() => runCli(root, [...ARGV, FIXTURE_ID]));
|
|
308
|
-
// Rethrown, not rendered: nothing printed, and the frame above holds the
|
|
309
|
-
// error with the two details recovery needs.
|
|
310
|
-
assert.equal(stale.stdout, '');
|
|
311
|
-
const thrown = stale.thrown;
|
|
312
|
-
assert.ok(thrown instanceof CrtrError, String(thrown));
|
|
313
|
-
assert.equal(thrown.details?.['manifest_stale'], true);
|
|
314
|
-
assert.equal(thrown.details?.['plugin'], PLUGIN);
|
|
315
|
-
assert.deepEqual(opCalls, ['v1']);
|
|
316
|
-
// Every other failure stays the dispatcher's to report. The same leaf,
|
|
317
|
-
// missing its required positional, is rendered rather than thrown.
|
|
318
|
-
const usage = await captured(() => runCli(root, ARGV));
|
|
319
|
-
assert.equal(usage.thrown, undefined);
|
|
320
|
-
assert.ok(usage.stdout.includes('id'), usage.stdout);
|
|
321
|
-
});
|
|
322
|
-
test('a stale answer refetches the package and re-runs the ORIGINAL argv against the refreshed tree', async () => {
|
|
323
|
-
await install();
|
|
324
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = '600000';
|
|
325
|
-
// The backend has moved the op on: it retired the generation this client
|
|
326
|
-
// installed, and now serves a package whose leaf calls the new path.
|
|
327
|
-
retiredOps.add('v1');
|
|
328
|
-
served = { archive: makeArchive('v2'), etag: '"sha256-v2"' };
|
|
329
|
-
const root = await buildRoot();
|
|
330
|
-
const run = await captured(() => dispatchWithStaleRecovery(root, [...ARGV, FIXTURE_ID]));
|
|
331
|
-
assert.equal(run.thrown, undefined);
|
|
332
|
-
// The stale call, one forced bundle fetch, then the replay at the NEW
|
|
333
|
-
// generation — which only the refreshed tree could have addressed.
|
|
334
|
-
assert.deepEqual(opCalls, ['v1', 'v2']);
|
|
335
|
-
assert.deepEqual(requests, [
|
|
336
|
-
{ ifNoneMatch: undefined, status: 200 }, // the install
|
|
337
|
-
{ ifNoneMatch: undefined, status: 200 }, // the forced refetch
|
|
338
|
-
]);
|
|
339
|
-
assert.equal(installedMarker(), 'v2');
|
|
340
|
-
assert.ok(run.stdout.includes(FIXTURE_ID), run.stdout);
|
|
341
|
-
});
|
|
342
|
-
test('a second stale answer is rendered rather than refetched again', async () => {
|
|
343
|
-
await install();
|
|
344
|
-
process.env.CRTR_PLUGIN_REVALIDATE_TTL_MS = '600000';
|
|
345
|
-
// A backend that keeps answering `manifest_stale` however fresh the package
|
|
346
|
-
// is. The refetch genuinely changes the tree, so the retry does happen —
|
|
347
|
-
// and its own stale answer must end the cycle, not restart it.
|
|
348
|
-
retiredOps = new Set(['v1', 'v2']);
|
|
349
|
-
served = { archive: makeArchive('v2'), etag: '"sha256-v2"' };
|
|
350
|
-
const root = await buildRoot();
|
|
351
|
-
const run = await captured(() => dispatchWithStaleRecovery(root, [...ARGV, FIXTURE_ID]));
|
|
352
|
-
assert.equal(run.thrown, undefined);
|
|
353
|
-
assert.deepEqual(opCalls, ['v1', 'v2']);
|
|
354
|
-
assert.equal(requests.length, 2, 'the install plus exactly ONE forced refetch');
|
|
355
|
-
assert.equal(installedMarker(), 'v2');
|
|
356
|
-
// The backend's own second complaint is the answer the caller gets.
|
|
357
|
-
assert.ok(run.stdout.includes('no longer serves'), run.stdout);
|
|
358
|
-
});
|
|
359
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { test } from 'node:test';
|
|
2
|
-
import assert from 'node:assert/strict';
|
|
3
|
-
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
4
|
-
import { contextDir } from '../../canvas/paths.js';
|
|
5
|
-
import { getRow } from '../../canvas/canvas.js';
|
|
6
|
-
import { bashJobPaths, bashJobsDir } from '../../bash-jobs.js';
|
|
7
|
-
import { acknowledgedNodeMailCount } from '../../canvas/deliveries.js';
|
|
8
|
-
import { transition } from '../../runtime/lifecycle.js';
|
|
9
|
-
import { ensureRootProfile, pauseProfile } from '../../profiles/manifest.js';
|
|
10
|
-
import { createHeadlessHarness } from '../helpers/harness.js';
|
|
11
|
-
function runningJob(nodeId) {
|
|
12
|
-
const dir = bashJobsDir(contextDir(nodeId));
|
|
13
|
-
try {
|
|
14
|
-
for (const jobId of readdirSync(dir)) {
|
|
15
|
-
const paths = bashJobPaths(contextDir(nodeId), jobId);
|
|
16
|
-
if (existsSync(paths.jobRun))
|
|
17
|
-
return paths;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
// The valve has not created its job directory yet.
|
|
22
|
-
}
|
|
23
|
-
return undefined;
|
|
24
|
-
}
|
|
25
|
-
test('profile pause backgrounds real bash, retains its queued SQL delivery, and recovers after a quick resume without failure', { timeout: 120_000 }, async () => {
|
|
26
|
-
const h = await createHeadlessHarness({ sessionPrefix: 'crtr-profile-pause' });
|
|
27
|
-
try {
|
|
28
|
-
const profile = ensureRootProfile();
|
|
29
|
-
const parent = h.fabricateBrokerNode({ lifecycle: 'resident' });
|
|
30
|
-
const child = await h.spawnHeadlessChild(parent, 'stay available while the profile pauses', { profile: profile.profileId });
|
|
31
|
-
h.fakeCmd(child, { cmd: 'bash', command: "sh -c 'sleep 2; printf preserved'" });
|
|
32
|
-
const job = await h.waitFor(() => runningJob(child), { label: 'valve job.run' });
|
|
33
|
-
assert.ok(existsSync(job.jobRun), 'the bash valve owns the foreground command before pause');
|
|
34
|
-
const paused = h.cli(null, ['profile', 'pause', profile.profileId]);
|
|
35
|
-
assert.equal(paused.code, 0, paused.stderr);
|
|
36
|
-
await h.tick();
|
|
37
|
-
assert.equal(h.bootCount(child), 1, 'the lifecycle pass while paused launches no replacement');
|
|
38
|
-
const retained = h.cli(null, ['node', 'message', 'send', '--to', child, 'mail retained while profile is paused']);
|
|
39
|
-
assert.equal(retained.code, 0, retained.stderr);
|
|
40
|
-
const retainedEntry = h.inbox(child).find((entry) => entry.data?.['body'] === 'mail retained while profile is paused');
|
|
41
|
-
assert.ok(retainedEntry, 'the message was durably appended');
|
|
42
|
-
assert.equal(acknowledgedNodeMailCount(child), 0, 'pause leaves the queued SQL delivery unacknowledged');
|
|
43
|
-
const resumed = h.cli(null, ['profile', 'resume', profile.profileId]);
|
|
44
|
-
assert.equal(resumed.code, 0, resumed.stderr);
|
|
45
|
-
await h.awaitFleetExit(child);
|
|
46
|
-
assert.ok(existsSync(job.jobBg), 'SIGTERM atomically handed job.run to job.bg');
|
|
47
|
-
assert.equal(existsSync(job.jobRun), false, 'the foreground valve ownership is gone');
|
|
48
|
-
await h.waitFor(() => existsSync(job.jobExit), { label: 'background bash completion' });
|
|
49
|
-
assert.equal(readFileSync(job.jobExit, 'utf8').trim(), '0', 'the handoff command completed after its broker exited');
|
|
50
|
-
assert.equal(acknowledgedNodeMailCount(child), 0, 'neither retained message nor background completion acknowledges the stopped broker delivery');
|
|
51
|
-
await h.tick();
|
|
52
|
-
assert.equal(h.bootCount(child), 1, 'the first resumed policy pass only consumes the pause interruption');
|
|
53
|
-
assert.equal(getRow(child)?.respawn_failures, 0, 'the intentional SIGTERM never counts as a crash');
|
|
54
|
-
await h.tick();
|
|
55
|
-
// `#respawn`'s backoff-assessment defers this exact relaunch on its first
|
|
56
|
-
// assessment: this node's original spawn (`spawnChild`'s direct
|
|
57
|
-
// `headlessBrokerHost.launch`) never records `launched_at`, so
|
|
58
|
-
// `decideRespawnAttempt` can never see `last_settled_at > launched_at` on
|
|
59
|
-
// this first-ever `#respawn` call for the row and always takes the
|
|
60
|
-
// `respawn_not_before` backoff branch (fleet.ts's RESPAWN_BACKOFF_BASE_MS,
|
|
61
|
-
// currently 5s) instead of launching. A THIRD tick, issued once real time
|
|
62
|
-
// has passed that window, finds `respawn_not_before` already set (so
|
|
63
|
-
// `#respawn` skips reassessment this time) and actually calls `reviveNode`.
|
|
64
|
-
// Real-time sleep, not a fake clock: `now()` here is the daemon's real
|
|
65
|
-
// `Date.now`, so only the wall clock — not another tick — advances it.
|
|
66
|
-
await new Promise((r) => setTimeout(r, 5_500));
|
|
67
|
-
await h.tick();
|
|
68
|
-
await h.awaitBoot(child, { minCount: 2, timeoutMs: 30_000 });
|
|
69
|
-
const deliveries = await h.awaitWake(child, { match: /mail retained while profile is paused/ });
|
|
70
|
-
assert.ok(deliveries.some((content) => /mail retained while profile is paused/.test(content)), 'the resumed watcher delivers the retained backlog');
|
|
71
|
-
}
|
|
72
|
-
finally {
|
|
73
|
-
await h.dispose();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
test('profile pause preserves an idle-release row so mail queued during pause wakes it', { timeout: 120_000 }, async () => {
|
|
77
|
-
const h = await createHeadlessHarness({ sessionPrefix: 'crtr-profile-pause-idle' });
|
|
78
|
-
try {
|
|
79
|
-
const profile = ensureRootProfile();
|
|
80
|
-
const parent = h.fabricateBrokerNode({ lifecycle: 'resident' });
|
|
81
|
-
const child = await h.spawnHeadlessChild(parent, 'await ordinary mail', { profile: profile.profileId, lifecycle: 'resident' });
|
|
82
|
-
transition(child, 'release');
|
|
83
|
-
const paused = h.cli(null, ['profile', 'pause', profile.profileId]);
|
|
84
|
-
assert.equal(paused.code, 0, paused.stderr);
|
|
85
|
-
const queued = h.cli(null, ['node', 'message', 'send', '--to', child, 'ordinary mail queued during pause']);
|
|
86
|
-
assert.equal(queued.code, 0, queued.stderr);
|
|
87
|
-
await h.awaitFleetExit(child);
|
|
88
|
-
const resumed = h.cli(null, ['profile', 'resume', profile.profileId]);
|
|
89
|
-
assert.equal(resumed.code, 0, resumed.stderr);
|
|
90
|
-
await h.tick();
|
|
91
|
-
await h.tick();
|
|
92
|
-
await h.awaitBoot(child, { minCount: 2, timeoutMs: 60_000 });
|
|
93
|
-
const deliveries = await h.awaitWake(child, { match: /ordinary mail queued during pause/ });
|
|
94
|
-
assert.ok(deliveries.some((content) => /ordinary mail queued during pause/.test(content)), 'the idle-release wake is not stranded behind the pause marker');
|
|
95
|
-
}
|
|
96
|
-
finally {
|
|
97
|
-
await h.dispose();
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
test('lifecycle catches a broker that became live after the pause command fast scan', { timeout: 60_000 }, async () => {
|
|
101
|
-
const h = await createHeadlessHarness({ sessionPrefix: 'crtr-profile-pause-race' });
|
|
102
|
-
try {
|
|
103
|
-
const profile = ensureRootProfile();
|
|
104
|
-
const parent = h.fabricateBrokerNode({ lifecycle: 'resident' });
|
|
105
|
-
const child = await h.spawnHeadlessChild(parent, 'broker launched after pause scan', { profile: profile.profileId });
|
|
106
|
-
pauseProfile(profile.profileId);
|
|
107
|
-
await h.tick();
|
|
108
|
-
await h.awaitFleetExit(child);
|
|
109
|
-
assert.equal(h.bootCount(child), 1, 'the paused lifecycle tick terminates the late live broker instead of leaving it running');
|
|
110
|
-
assert.equal(getRow(child)?.respawn_failures, 0, 'the late broker interruption has no failure cost');
|
|
111
|
-
}
|
|
112
|
-
finally {
|
|
113
|
-
await h.dispose();
|
|
114
|
-
}
|
|
115
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
// Run with: npm run test:integration
|
|
2
|
-
//
|
|
3
|
-
// BUG-REGRESSION (broker-universal-host cut, design §H refresh-authority; U7
|
|
4
|
-
// report mq8gq8we-4cadd8e6; stuck-refresh, parent mq7s5o93). A `node yield` /
|
|
5
|
-
// refresh records intent='refresh' and relies on the in-process stophook to call
|
|
6
|
-
// shutdown at stop. But the engine can be left ALIVE forever — it hangs at a huge
|
|
7
|
-
// context, OR a STALE in-process stophook (pi extensions never reload, so a
|
|
8
|
-
// days-old resident carries an old hook) ignores intent='refresh' and never calls
|
|
9
|
-
// shutdown. Engine alive + turn over + intent pending forever. The daemon only
|
|
10
|
-
// recovers DEAD engines, so without §H the node is permanently stuck. The DAEMON
|
|
11
|
-
// is the authority: when intent='refresh' persists on a LIVE engine whose turn is
|
|
12
|
-
// over, past YIELD_STALL_GRACE_MS, it force-kills the engine (SIGTERM). The kill
|
|
13
|
-
// then lands as a real exit event whose policy job classifies intent='refresh'
|
|
14
|
-
// as respawn-fresh (policy table row 3) — the fresh roadmap-revive the yield
|
|
15
|
-
// asked for.
|
|
16
|
-
//
|
|
17
|
-
// Two legs: the pure truth table (D4a — yieldStallVerdict) and the daemon
|
|
18
|
-
// integration over a real live pid the daemon must SIGTERM (D4b — superviseTick
|
|
19
|
-
// with an injected clock). Regression check: drop §H and D4b's "engine killed"
|
|
20
|
-
// assert goes RED (the live refresh pid lives forever, never recycled).
|
|
21
|
-
import { test } from 'node:test';
|
|
22
|
-
import assert from 'node:assert/strict';
|
|
23
|
-
import { spawn } from 'node:child_process';
|
|
24
|
-
import { createHeadlessHarness } from '../helpers/harness.js';
|
|
25
|
-
import { getRow } from '../../canvas/canvas.js';
|
|
26
|
-
import { abortExecution, beginExecution, recordExecutionPid } from '../../canvas/executions.js';
|
|
27
|
-
import { isPidAlive } from '../../canvas/pid.js';
|
|
28
|
-
import { BrokerSupervisionReconciler, yieldStallVerdict, YIELD_STALL_GRACE_MS } from '../../../daemon/reconcilers/broker-supervision.js';
|
|
29
|
-
// D4a — the pure refresh-stall truth table.
|
|
30
|
-
test('D4a yieldStallVerdict: kill ONLY a live, not-busy, refresh engine past the grace', () => {
|
|
31
|
-
const G = YIELD_STALL_GRACE_MS;
|
|
32
|
-
// The one 'kill' case: engine alive, intent=refresh, turn over (not busy), past grace.
|
|
33
|
-
assert.equal(yieldStallVerdict(true, 'refresh', false, G), 'kill', 'alive+refresh+!busy+>=grace → kill');
|
|
34
|
-
// A working engine is NEVER killed, even past the grace.
|
|
35
|
-
assert.equal(yieldStallVerdict(true, 'refresh', true, G + 60_000), 'leave', 'busy (mid-turn) → leave');
|
|
36
|
-
});
|
|
37
|
-
// D4b — daemon integration: a stuck refresh on a LIVE engine is force-recycled.
|
|
38
|
-
const T0 = 7_000_000;
|
|
39
|
-
const T_KILL = T0 + YIELD_STALL_GRACE_MS + 1; // one ms past the grace from t0
|
|
40
|
-
const KILL_ESCALATE_MS = 20_000;
|
|
41
|
-
test('D4b daemon force-recycles a stuck refresh: a live, not-busy refresh engine past the grace is SIGTERM\'d', { timeout: 30_000 }, async () => {
|
|
42
|
-
const h = await createHeadlessHarness({ sessionPrefix: 'crtr-d4b' });
|
|
43
|
-
// A real live subprocess standing in for the hung/stale-hook engine. `sleep`
|
|
44
|
-
// dies on SIGTERM, so the daemon's force-kill is directly observable.
|
|
45
|
-
const child = spawn('sleep', ['300'], { stdio: 'ignore' });
|
|
46
|
-
const enginePid = child.pid;
|
|
47
|
-
try {
|
|
48
|
-
assert.equal(isPidAlive(enginePid), true, 'precondition: the refresh engine is alive');
|
|
49
|
-
// intent='refresh' + LIVE pid + turn over (no busy marker by default) →
|
|
50
|
-
// the §H stall state the daemon must break.
|
|
51
|
-
const id = h.fabricateBrokerNode({
|
|
52
|
-
kind: 'developer',
|
|
53
|
-
status: 'active',
|
|
54
|
-
intent: 'refresh',
|
|
55
|
-
pi_pid: enginePid,
|
|
56
|
-
pi_session_id: 'sess-d4b',
|
|
57
|
-
});
|
|
58
|
-
// A live broker records its launch-time identity with its pid. The force
|
|
59
|
-
// signal re-verifies that identity, so this fixture must model the
|
|
60
|
-
// production record rather than a legacy identity-less row.
|
|
61
|
-
const executionId = beginExecution(id, { daemonEpoch: h.fleet.epoch() });
|
|
62
|
-
recordExecutionPid(executionId, id, enginePid);
|
|
63
|
-
// Post-cutover the live-fleet pass iterates fleet ENTRIES, not rows: a
|
|
64
|
-
// live broker IS a fleet entry (design D-1). Model the launch-time
|
|
65
|
-
// registration the production host performs, with a never-resolving
|
|
66
|
-
// exited promise — this test observes the SIGTERM, not the exit policy.
|
|
67
|
-
h.fleet.register(id, { pid: enginePid, exited: new Promise(() => { }) });
|
|
68
|
-
assert.equal(h.node(id).intent, 'refresh', 'precondition: intent=refresh pending');
|
|
69
|
-
assert.notEqual(h.node(id).pi_pid_identity, null, 'precondition: live engine has a recorded identity');
|
|
70
|
-
// TICK @ t0: arms the stall clock (yieldStallSince). No kill yet.
|
|
71
|
-
await h.tick(T0);
|
|
72
|
-
assert.equal(isPidAlive(enginePid), true, 'within grace: the engine is NOT killed (clock just armed)');
|
|
73
|
-
// --- TICK past the grace: the daemon concludes the refresh stalled and
|
|
74
|
-
// SIGTERMs the engine itself (§H force-recycle). ---
|
|
75
|
-
await h.tick(T_KILL);
|
|
76
|
-
await h.waitFor(() => (isPidAlive(enginePid) ? null : true), {
|
|
77
|
-
label: 'daemon SIGTERM killed the stuck refresh engine',
|
|
78
|
-
timeoutMs: 10_000,
|
|
79
|
-
});
|
|
80
|
-
assert.equal(isPidAlive(enginePid), false, 'past grace: the daemon force-killed the stuck refresh engine (§H)');
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
try {
|
|
84
|
-
child.kill('SIGKILL');
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
/* already gone */
|
|
88
|
-
}
|
|
89
|
-
await h.dispose();
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
test('D4c yield escalation is scoped to the broker that received SIGTERM', { timeout: 30_000 }, async () => {
|
|
93
|
-
const h = await createHeadlessHarness({ sessionPrefix: 'crtr-d4c' });
|
|
94
|
-
const original = spawn('sleep', ['300'], { stdio: 'ignore' });
|
|
95
|
-
let replacement;
|
|
96
|
-
try {
|
|
97
|
-
const id = h.fabricateBrokerNode({
|
|
98
|
-
kind: 'developer',
|
|
99
|
-
status: 'active',
|
|
100
|
-
intent: 'refresh',
|
|
101
|
-
pi_pid: original.pid,
|
|
102
|
-
pi_session_id: 'sess-d4c',
|
|
103
|
-
});
|
|
104
|
-
const originalExecution = beginExecution(id, { daemonEpoch: h.fleet.epoch() });
|
|
105
|
-
recordExecutionPid(originalExecution, id, original.pid);
|
|
106
|
-
h.fleet.register(id, { pid: original.pid, exited: new Promise(() => { }) });
|
|
107
|
-
const supervisor = new BrokerSupervisionReconciler();
|
|
108
|
-
const context = () => ({
|
|
109
|
-
rows: [getRow(id)],
|
|
110
|
-
fleet: h.fleet,
|
|
111
|
-
lifecycle: { acceptsDetachedWork: () => false, registerDetached: () => { } },
|
|
112
|
-
});
|
|
113
|
-
await supervisor.run(T0, context());
|
|
114
|
-
await supervisor.run(T_KILL, context());
|
|
115
|
-
await h.waitFor(() => (isPidAlive(original.pid) ? null : true), {
|
|
116
|
-
label: 'original refresh broker received SIGTERM',
|
|
117
|
-
timeoutMs: 10_000,
|
|
118
|
-
});
|
|
119
|
-
h.fleet.forget(id);
|
|
120
|
-
abortExecution(originalExecution, { reason: 'test replacement' });
|
|
121
|
-
replacement = spawn(process.execPath, ['-e', 'process.on("SIGTERM", () => {}); console.log("ready"); setInterval(() => {}, 1000)'], { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
122
|
-
await new Promise((resolve, reject) => {
|
|
123
|
-
replacement.stdout.once('data', () => resolve());
|
|
124
|
-
replacement.once('error', reject);
|
|
125
|
-
});
|
|
126
|
-
const replacementExecution = beginExecution(id, { daemonEpoch: h.fleet.epoch() });
|
|
127
|
-
recordExecutionPid(replacementExecution, id, replacement.pid);
|
|
128
|
-
h.fleet.register(id, { pid: replacement.pid, exited: new Promise(() => { }) });
|
|
129
|
-
const replacementStarted = T_KILL + KILL_ESCALATE_MS + 1;
|
|
130
|
-
await supervisor.run(replacementStarted, context());
|
|
131
|
-
assert.equal(isPidAlive(replacement.pid), true, 'the old SIGKILL deadline does not target the replacement');
|
|
132
|
-
await supervisor.run(replacementStarted + YIELD_STALL_GRACE_MS + 1, context());
|
|
133
|
-
assert.equal(isPidAlive(replacement.pid), true, 'the replacement survives its own SIGTERM when still stalled');
|
|
134
|
-
await supervisor.run(replacementStarted + YIELD_STALL_GRACE_MS + KILL_ESCALATE_MS + 1, context());
|
|
135
|
-
await h.waitFor(() => (isPidAlive(replacement.pid) ? null : true), {
|
|
136
|
-
label: 'replacement refresh broker received its own SIGKILL',
|
|
137
|
-
timeoutMs: 10_000,
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
finally {
|
|
141
|
-
for (const child of [original, replacement]) {
|
|
142
|
-
if (child?.pid === undefined)
|
|
143
|
-
continue;
|
|
144
|
-
try {
|
|
145
|
-
child.kill('SIGKILL');
|
|
146
|
-
}
|
|
147
|
-
catch { /* already gone */ }
|
|
148
|
-
}
|
|
149
|
-
await h.dispose();
|
|
150
|
-
}
|
|
151
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|