@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,806 +0,0 @@
|
|
|
1
|
-
// helpers/harness.ts — a reusable, FAITHFUL integration-test driver for the
|
|
2
|
-
// node/canvas runtime.
|
|
3
|
-
//
|
|
4
|
-
// It drives the REAL `crtr` CLI (as subprocesses, AS specific nodes) into a
|
|
5
|
-
// REAL but isolated tmux session, substitutes the fake-pi vehicle (fixtures/
|
|
6
|
-
// fake-pi-host.ts) for the LLM `pi` via the CRTR_PI_BINARY seam, fires the REAL
|
|
7
|
-
// extension hooks inside that fake-pi over a polled control channel, and runs
|
|
8
|
-
// the daemon decision pass in-process via superviseTick(now). Every assertion
|
|
9
|
-
// reads straight off the canvas data layer. NOTHING here mocks the runtime.
|
|
10
|
-
//
|
|
11
|
-
// See harness-design.md §4/§5 and vehicle-and-hooks.md §6 for the architecture
|
|
12
|
-
// this implements. The ONE production seam used is CRTR_PI_BINARY in
|
|
13
|
-
// piCommand (src/core/runtime/tmux-driver.ts) — no production file is modified.
|
|
14
|
-
//
|
|
15
|
-
// Isolation contract (harness-design.md §4a):
|
|
16
|
-
// • The harness itself runs AS a canvas node, so its OWN process.env carries
|
|
17
|
-
// the REAL canvas vars. We override CRTR_HOME (+ CRTR_PI_BINARY) for our own
|
|
18
|
-
// in-process reads/revives, and scrub every canvas var from each subprocess
|
|
19
|
-
// env. closeDb() rebinds sqlite to the isolated home before every read.
|
|
20
|
-
// • The isolated tmux session lives on the DEFAULT server (the runtime shells
|
|
21
|
-
// `tmux` with no -L, so an -L server would be invisible to the real CLI and
|
|
22
|
-
// to superviseTick). We only ever kill-session, never kill-server.
|
|
23
|
-
import { spawnSync, spawn } from 'node:child_process';
|
|
24
|
-
import { mkdtempSync, rmSync, existsSync, readFileSync, readdirSync, writeFileSync, renameSync, } from 'node:fs';
|
|
25
|
-
import { homedir, tmpdir } from 'node:os';
|
|
26
|
-
import { join, dirname } from 'node:path';
|
|
27
|
-
import { fileURLToPath } from 'node:url';
|
|
28
|
-
import { createRequire } from 'node:module';
|
|
29
|
-
import { createNode, getNode, subscribersOf, subscriptionsOf, } from '../../canvas/canvas.js';
|
|
30
|
-
import { closeDb, migrate, openDb } from '../../canvas/db.js';
|
|
31
|
-
import { beginExecution, liveExecutionForNode, recordExecutionPid } from '../../canvas/executions.js';
|
|
32
|
-
import { resetSession } from '../../canvas/sessions.js';
|
|
33
|
-
import { closeScopedStores } from '../../scoped-state/db.js';
|
|
34
|
-
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
35
|
-
import { piAgentDir } from '../../runtime/package-health.js';
|
|
36
|
-
import { spawnChild } from '../../runtime/spawn.js';
|
|
37
|
-
import { superviseTick } from '../../../daemon/crtrd.js';
|
|
38
|
-
import { DaemonFleet } from '../../../daemon/fleet.js';
|
|
39
|
-
import { apiSocketPath } from '../../canvas/paths.js';
|
|
40
|
-
import { bindDaemonEventSource, resetEventSourceForTests } from '../../events/source.js';
|
|
41
|
-
import { bindFleet, resetFleetForTests } from '../../runtime/fleet.js';
|
|
42
|
-
import { capturePidCommand, recordedPidLiveness } from '../../canvas/pid.js';
|
|
43
|
-
// locations
|
|
44
|
-
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
45
|
-
const TREE_ROOT = join(HERE, '..', '..', '..'); // src/ or dist/
|
|
46
|
-
const CROUTER = join(TREE_ROOT, '..'); // package root
|
|
47
|
-
const COMPILED = TREE_ROOT === join(CROUTER, 'dist');
|
|
48
|
-
const MODULE_EXT = COMPILED ? '.js' : '.ts';
|
|
49
|
-
const CLI_ENTRY = join(TREE_ROOT, `cli${MODULE_EXT}`);
|
|
50
|
-
const FAKE_PI_HOST = join(HERE, '..', 'fixtures', `fake-pi-host${MODULE_EXT}`);
|
|
51
|
-
// The standalone API-server host (separate process — see the fixture header for
|
|
52
|
-
// why it cannot be in-process alongside the harness's spawnSync cli() driver).
|
|
53
|
-
const API_SERVER_HOST = join(HERE, '..', 'fixtures', `api-server-host${MODULE_EXT}`);
|
|
54
|
-
// The in-process fake BrokerEngine (the SDK analog of the fake-pi vehicle). The
|
|
55
|
-
// REAL broker loads it via the CRTR_BROKER_ENGINE seam (broker-sdk.ts). Source
|
|
56
|
-
// tests load the TypeScript fixture through tsx; compiled tests load its emitted
|
|
57
|
-
// JavaScript directly so every integration child exercises the built runtime.
|
|
58
|
-
const FAKE_ENGINE = join(HERE, '..', 'fixtures', `fake-engine${MODULE_EXT}`);
|
|
59
|
-
const TSX_ESM = COMPILED ? null : createRequire(import.meta.url).resolve('tsx/esm');
|
|
60
|
-
// A multi-word launcher, baked verbatim ahead of the (shell-quoted) argv by the
|
|
61
|
-
// seam. Absolute paths so it works regardless of the spawned window's cwd.
|
|
62
|
-
const FAKE_PI_BINARY = [process.execPath, ...(TSX_ESM === null ? [] : ['--import', TSX_ESM]), FAKE_PI_HOST].join(' ');
|
|
63
|
-
// Every raw `tmux` call the harness/compiled-seam tests make against the shared
|
|
64
|
-
// DEFAULT server is synchronous (spawnSync). Node's spawnSync blocks the WHOLE
|
|
65
|
-
// worker (no event loop, no `node --test` timeout can preempt it) until the
|
|
66
|
-
// child exits — with no `timeout` option it can wait forever. A wedged or
|
|
67
|
-
// CPU-starved tmux server would consume a serialized seam worker indefinitely.
|
|
68
|
-
// TMUX_TIMEOUT_MS makes that one call and its test fail instead of hanging the
|
|
69
|
-
// whole suite.
|
|
70
|
-
export const TMUX_TIMEOUT_MS = 10_000;
|
|
71
|
-
/** True when a usable tmux is on PATH — tests gate on this and SKIP otherwise. */
|
|
72
|
-
export function hasTmux() {
|
|
73
|
-
return spawnSync('tmux', ['-V'], { stdio: 'ignore', timeout: TMUX_TIMEOUT_MS }).status === 0;
|
|
74
|
-
}
|
|
75
|
-
function tmuxSessionExists(session) {
|
|
76
|
-
return (spawnSync('tmux', ['has-session', '-t', session], {
|
|
77
|
-
stdio: 'ignore',
|
|
78
|
-
timeout: TMUX_TIMEOUT_MS,
|
|
79
|
-
}).status === 0);
|
|
80
|
-
}
|
|
81
|
-
// Every canvas/tmux var the harness itself runs under — scrubbed from each child
|
|
82
|
-
// env so a spawned CLI cannot leak the REAL canvas into the isolated test.
|
|
83
|
-
const CANVAS_ENV_KEYS = [
|
|
84
|
-
'CRTR_NODE_ID',
|
|
85
|
-
'CRTR_HOME',
|
|
86
|
-
'CRTR_ROOT_SESSION',
|
|
87
|
-
'CRTR_SUBTREE',
|
|
88
|
-
'CRTR_NODE_SESSION',
|
|
89
|
-
'CRTR_PARENT_NODE_ID',
|
|
90
|
-
'CRTR_FRONT_DOOR',
|
|
91
|
-
'CRTR_KIND',
|
|
92
|
-
'CRTR_MODE',
|
|
93
|
-
'CRTR_LIFECYCLE',
|
|
94
|
-
'CRTR_NODE_CWD',
|
|
95
|
-
'CRTR_PI_BINARY',
|
|
96
|
-
// Scrubbed then re-added (controlled) in childEnv, mirroring CRTR_PI_BINARY —
|
|
97
|
-
// so the headless-broker seam can't leak the REAL engine into the isolated
|
|
98
|
-
// test, and the CLI subprocess that spawns a broker carries the FAKE one.
|
|
99
|
-
'CRTR_BROKER_ENGINE',
|
|
100
|
-
'TMUX',
|
|
101
|
-
'TMUX_PANE',
|
|
102
|
-
];
|
|
103
|
-
function cleanBaseEnv() {
|
|
104
|
-
const e = {};
|
|
105
|
-
for (const [k, v] of Object.entries(process.env))
|
|
106
|
-
if (v !== undefined)
|
|
107
|
-
e[k] = v;
|
|
108
|
-
for (const k of CANVAS_ENV_KEYS)
|
|
109
|
-
delete e[k];
|
|
110
|
-
// Contain per-invocation scope-init + auto-update side effects (they write to
|
|
111
|
-
// ~/.crouter / ~/.claude / ~/.pi, NOT under CRTR_HOME — HOME is contained too).
|
|
112
|
-
e['CRTR_NO_AUTO_UPDATE'] = '1';
|
|
113
|
-
e['CRTR_NO_EXPORTS'] = '1';
|
|
114
|
-
e['CRTR_NO_AUTO_INIT'] = '1';
|
|
115
|
-
return e;
|
|
116
|
-
}
|
|
117
|
-
async function waitFor(probe, opts = {}) {
|
|
118
|
-
const timeoutMs = opts.timeoutMs ?? 20_000;
|
|
119
|
-
const intervalMs = opts.intervalMs ?? 100;
|
|
120
|
-
const deadline = Date.now() + timeoutMs;
|
|
121
|
-
for (;;) {
|
|
122
|
-
const v = probe();
|
|
123
|
-
if (v)
|
|
124
|
-
return v;
|
|
125
|
-
if (Date.now() > deadline)
|
|
126
|
-
throw new Error(`waitFor timed out: ${opts.label ?? 'condition'}`);
|
|
127
|
-
await new Promise((r) => setTimeout(r, intervalMs));
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
export function readLines(path) {
|
|
131
|
-
try {
|
|
132
|
-
const content = readFileSync(path, 'utf8');
|
|
133
|
-
const lines = content.split('\n');
|
|
134
|
-
if (!content.endsWith('\n'))
|
|
135
|
-
lines.pop();
|
|
136
|
-
return lines.filter((l) => l.trim() !== '');
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
return [];
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
/** Thin wrapper: a headless-only harness (broker-hosted, paneless nodes). */
|
|
143
|
-
export async function createHeadlessHarness(opts = {}) {
|
|
144
|
-
return createHarness({ ...opts, headless: true });
|
|
145
|
-
}
|
|
146
|
-
export async function createHarness(opts = {}) {
|
|
147
|
-
const headless = opts.headless === true;
|
|
148
|
-
if (!headless && !hasTmux())
|
|
149
|
-
throw new Error('createHarness: tmux not available');
|
|
150
|
-
const origHome = process.env['CRTR_HOME'];
|
|
151
|
-
const origAgentHome = process.env['HOME'];
|
|
152
|
-
const origPiBinary = process.env['CRTR_PI_BINARY'];
|
|
153
|
-
const origNodeSession = process.env['CRTR_NODE_SESSION'];
|
|
154
|
-
const origNodeOptions = process.env['NODE_OPTIONS'];
|
|
155
|
-
const origBrokerEngine = process.env['CRTR_BROKER_ENGINE'];
|
|
156
|
-
// The headless broker binds a unix socket at <home>/nodes/<id>/view.sock. A
|
|
157
|
-
// unix socket path (sun_path) has a ~104-char OS limit, and macOS's per-user
|
|
158
|
-
// $TMPDIR (/var/folders/<…>/T/, ~49 chars) alone pushes that path past the
|
|
159
|
-
// limit — server.listen() then fails EINVAL and the broker's loop drains
|
|
160
|
-
// (boots, never serves). NOT a production concern (~/.crouter/canvas/… is
|
|
161
|
-
// short); a test-only artifact of the long temp base. Use a SHORT base + short
|
|
162
|
-
// prefix for the canvas home so broker sockets fit. tmpHome (HOME) hosts no
|
|
163
|
-
// socket, so it can stay on the standard temp base.
|
|
164
|
-
const shortTmpBase = tmpdir();
|
|
165
|
-
const home = mkdtempSync(join(shortTmpBase, 'crh-'));
|
|
166
|
-
const tmpHome = mkdtempSync(join(tmpdir(), 'crtr-harness-HOME-'));
|
|
167
|
-
const session = `${opts.sessionPrefix ?? 'crtr-harness'}-${process.pid}-${Date.now().toString(36)}`;
|
|
168
|
-
// The harness reads/writes the isolated canvas in-process. CRTR_PI_BINARY in
|
|
169
|
-
// OUR env makes in-process launches (spawnChild and superviseTick → reviveNode)
|
|
170
|
-
// bake the fake-pi into the command string.
|
|
171
|
-
process.env['CRTR_HOME'] = home;
|
|
172
|
-
// HOME must be isolated in THIS process too, not just in the subprocess envs
|
|
173
|
-
// below: an in-process launch (spawnHeadlessChild's spawnChild, superviseTick
|
|
174
|
-
// pass-2 wakes) builds its broker env from process.env, so a real HOME here
|
|
175
|
-
// makes every broker read the developer's OWN ~/.pi/agent — auth.json and the
|
|
176
|
-
// managed subscription pools — instead of agentHome, and provider tests then
|
|
177
|
-
// pass or fail on whatever credentials the machine happens to hold.
|
|
178
|
-
// …but the isolated HOME must NOT hide the installed runtime generation from
|
|
179
|
-
// the `crtr` chrome panes tmux forks. `bin/crtr` resolves its generation from
|
|
180
|
-
// `$CRTR_RUNTIME_HOME` else `$HOME/.crouter/runtime`, and a viewer pane bakes
|
|
181
|
-
// in the BARE command `crtr surface attach to <id>` — so with HOME rewritten to
|
|
182
|
-
// an empty temp dir every viewer pane died with `invalid runtime selection:
|
|
183
|
-
// missing <tmpHome>/.crouter/runtime/selected` before it could self-tag.
|
|
184
|
-
// Pin the REAL runtime home (captured before the HOME rewrite) so panes load
|
|
185
|
-
// the generation `npm run install-runtime` selected. Runner-only until now
|
|
186
|
-
// purely by accident: a dev box already has a tmux server running with the
|
|
187
|
-
// developer's real HOME, and a new session inherits the SERVER's env — on a
|
|
188
|
-
// pristine runner the harness's own `new-session` starts the server, so the
|
|
189
|
-
// rewritten HOME becomes every pane's HOME.
|
|
190
|
-
const realRuntimeHome = process.env['CRTR_RUNTIME_HOME'] ?? join(process.env['HOME'] ?? homedir(), '.crouter', 'runtime');
|
|
191
|
-
process.env['HOME'] = tmpHome;
|
|
192
|
-
process.env['CRTR_RUNTIME_HOME'] = realRuntimeHome;
|
|
193
|
-
process.env['CRTR_PI_BINARY'] = FAKE_PI_BINARY;
|
|
194
|
-
delete process.env['CRTR_NODE_SESSION'];
|
|
195
|
-
// Source tests need tsx in every spawned broker because host.ts resolves its
|
|
196
|
-
// sibling broker-cli.js to broker-cli.ts and the fake engine is TypeScript.
|
|
197
|
-
// Compiled integration tests execute emitted JavaScript directly and scrub an
|
|
198
|
-
// ambient NODE_OPTIONS so their children do not accidentally pay for or depend
|
|
199
|
-
// on a source loader. dispose() restores the caller's value in both cases.
|
|
200
|
-
if (TSX_ESM === null) {
|
|
201
|
-
delete process.env['NODE_OPTIONS'];
|
|
202
|
-
}
|
|
203
|
-
else {
|
|
204
|
-
process.env['NODE_OPTIONS'] = [process.env['NODE_OPTIONS'], `--import ${TSX_ESM}`]
|
|
205
|
-
.filter((s) => s !== undefined && s !== '')
|
|
206
|
-
.join(' ');
|
|
207
|
-
}
|
|
208
|
-
process.env['CRTR_BROKER_ENGINE'] = FAKE_ENGINE;
|
|
209
|
-
initializeFreshScopedStore({ kind: 'user', root: join(tmpHome, '.crouter') });
|
|
210
|
-
initializeFreshScopedStore({ kind: 'provider', root: piAgentDir() });
|
|
211
|
-
closeDb();
|
|
212
|
-
migrate(openDb());
|
|
213
|
-
// The harness drives superviseTick() in-process, so it stands in for the
|
|
214
|
-
// daemon process (crtrd.ts:2490 binds the same way at real-daemon startup).
|
|
215
|
-
// Reset first: `bound` is a single-assignment process global with no other
|
|
216
|
-
// unbind path, and each harness instance points at a different isolated
|
|
217
|
-
// `home`, so a bare re-bind() across sequential harnesses in one test
|
|
218
|
-
// process would throw "already bound". Binding daemon (not broker) here
|
|
219
|
-
// keeps in-process reviveNode()'s host.ts:299 `eventSource() === undefined`
|
|
220
|
-
// check false, so it never binds a broker source over this one.
|
|
221
|
-
resetEventSourceForTests();
|
|
222
|
-
bindDaemonEventSource();
|
|
223
|
-
// The harness also stands in for the daemon's FLEET: every in-harness broker
|
|
224
|
-
// launch (spawnChild, reviveNode, superviseTick pass-2 wakes) registers its
|
|
225
|
-
// ChildProcess handle here, and real child exits enqueue exit-policy jobs on
|
|
226
|
-
// this serial work lane — the same single-lane discipline crtrd runs, but
|
|
227
|
-
// drainable to a deterministic quiescent point. Reset first for the same
|
|
228
|
-
// reason as the event source above (process-global, sequential harnesses).
|
|
229
|
-
resetFleetForTests();
|
|
230
|
-
let laneTail = Promise.resolve();
|
|
231
|
-
let laneClosed = false;
|
|
232
|
-
function enqueueLaneJob(job) {
|
|
233
|
-
// Same admission rule as crtrd's shutdown: once the harness is disposed,
|
|
234
|
-
// late exit events (dispose SIGKILLs every broker; their exit callbacks
|
|
235
|
-
// fire on later event-loop turns, after CRTR_HOME is restored) must NOT
|
|
236
|
-
// run policy — they would read the REAL canvas home.
|
|
237
|
-
if (laneClosed)
|
|
238
|
-
return laneTail;
|
|
239
|
-
// Drop the cached SQLite handle before every policy job. crtrd owns canvas
|
|
240
|
-
// state in-process, so its exit policy always reads its own writes; the
|
|
241
|
-
// harness runs lifecycle verbs as SUBPROCESSES (`h.cli`), whose WAL writes
|
|
242
|
-
// are invisible to a cached handle. Without this, an exit landing just
|
|
243
|
-
// after `node lifecycle close` reads the pre-close row (still active, with
|
|
244
|
-
// a session id), classifies `respawn-resume`, and RELAUNCHES a node the
|
|
245
|
-
// close just canceled — the intermittent "broker engine destroyed by
|
|
246
|
-
// close" failure, which only reproduced when the exit lost the race.
|
|
247
|
-
const run = laneTail.then(() => { closeDb(); return job(); }).then(() => { }, (err) => {
|
|
248
|
-
// Policy jobs contain their own error handling; anything escaping is a
|
|
249
|
-
// genuine bug — surface it, never wedge the lane.
|
|
250
|
-
console.error('[harness] fleet lane job failed:', err);
|
|
251
|
-
});
|
|
252
|
-
laneTail = run;
|
|
253
|
-
return run;
|
|
254
|
-
}
|
|
255
|
-
async function drainLane() {
|
|
256
|
-
let tail;
|
|
257
|
-
do {
|
|
258
|
-
tail = laneTail;
|
|
259
|
-
await tail;
|
|
260
|
-
} while (tail !== laneTail);
|
|
261
|
-
}
|
|
262
|
-
// Respawn policy probes network reachability (an offline box parks a node
|
|
263
|
-
// instead of spending its respawn budget). Reachability is an environment
|
|
264
|
-
// condition, not runtime behavior under test — pin it online so a sandboxed
|
|
265
|
-
// or offline runner exercises the same recovery path a connected one does.
|
|
266
|
-
const fleet = new DaemonFleet({ epoch: 'harness-epoch', enqueue: enqueueLaneJob, probeOnline: async () => true });
|
|
267
|
-
bindFleet(fleet);
|
|
268
|
-
// Neutralize ensureDaemon (spawn.ts calls it on every `node new`): write a
|
|
269
|
-
// fake-live-daemon pidfile pointing at OUR (always-alive) pid, so
|
|
270
|
-
// isDaemonRunning() is true and no REAL crtrd is spawned against the isolated
|
|
271
|
-
// home. Source-mode broker launches propagate NODE_OPTIONS=--import tsx to
|
|
272
|
-
// subprocesses, so allowing ensureDaemon to start a real supervisor would race
|
|
273
|
-
// the in-process superviseTick + fixed-clock crash/grace scenarios. The same
|
|
274
|
-
// containment keeps compiled runs identical. The harness drives the daemon pass
|
|
275
|
-
// itself via `tick()`. (fakeLiveDaemon pattern, home-session.test.ts.) home/ is
|
|
276
|
-
// rmSync'd in dispose.
|
|
277
|
-
writeFileSync(join(home, 'crtrd.pid'), String(process.pid), 'utf8');
|
|
278
|
-
const pidsToKill = new Set();
|
|
279
|
-
let nextRootSeq = 0;
|
|
280
|
-
// Every REAL `crtr` CLI subprocess this harness spawns (`node new`,
|
|
281
|
-
// `node promote`, `node message send`, `push final`, …) routes its canvas reads/mutations
|
|
282
|
-
// through cliClient() over crtrd's socket. The fake pidfile above makes
|
|
283
|
-
// isDaemonRunning() true so ensureDaemon never spawns a REAL crtrd against the
|
|
284
|
-
// isolated home — but that leaves the socket UNBOUND, so a subprocess client
|
|
285
|
-
// finds nothing (exit 5, daemon_unavailable). Stand up an API server on THIS
|
|
286
|
-
// isolated home's socket. It MUST run in a SEPARATE process: cli() drives the
|
|
287
|
-
// CLI via spawnSync, which blocks this process's event loop until the child
|
|
288
|
-
// exits, so an in-process server could never answer that child's request
|
|
289
|
-
// (request_timeout). The api-server-host fixture runs createApiServer() ONLY
|
|
290
|
-
// (no supervision loop — the harness drives superviseTick itself), carrying
|
|
291
|
-
// CRTR_HOME=home so apiSocketPath() resolves to this isolated socket. Killed
|
|
292
|
-
// in dispose(). No real subprocess daemon is ever autostarted; no client is
|
|
293
|
-
// mocked.
|
|
294
|
-
const apiServerProc = spawn(process.execPath, [...(TSX_ESM === null ? [] : ['--import', TSX_ESM]), API_SERVER_HOST], {
|
|
295
|
-
cwd: CROUTER,
|
|
296
|
-
// `node new`/`node promote`/… route to THIS server, whose spawnChild/
|
|
297
|
-
// reviveNode launch the broker ENGINE as a detached child of this very
|
|
298
|
-
// process (launchBrokerOrCrash, spawn.ts). That broker must load the FAKE
|
|
299
|
-
// pi vehicle + fake BrokerEngine, so carry the same two seams childEnv
|
|
300
|
-
// gives every in-process harness launch (cleanBaseEnv scrubs them). HOME
|
|
301
|
-
// is pinned to the isolated tmpHome so the server + the brokers it spawns
|
|
302
|
-
// never read the real user home. Without these, spawnChild launches the
|
|
303
|
-
// REAL pi and the child never boots (awaitBoot: pi_pid=null, bootCount=0).
|
|
304
|
-
env: {
|
|
305
|
-
...cleanBaseEnv(),
|
|
306
|
-
CRTR_HOME: home,
|
|
307
|
-
HOME: tmpHome,
|
|
308
|
-
CRTR_RUNTIME_HOME: realRuntimeHome,
|
|
309
|
-
CRTR_PI_BINARY: FAKE_PI_BINARY,
|
|
310
|
-
CRTR_BROKER_ENGINE: FAKE_ENGINE,
|
|
311
|
-
},
|
|
312
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
313
|
-
});
|
|
314
|
-
let apiServerStderr = '';
|
|
315
|
-
apiServerProc.stderr?.on('data', (chunk) => {
|
|
316
|
-
apiServerStderr += chunk.toString();
|
|
317
|
-
});
|
|
318
|
-
if (apiServerProc.pid !== undefined)
|
|
319
|
-
pidsToKill.add(apiServerProc.pid);
|
|
320
|
-
try {
|
|
321
|
-
await waitFor(() => existsSync(apiSocketPath()), {
|
|
322
|
-
timeoutMs: 30_000,
|
|
323
|
-
intervalMs: 25,
|
|
324
|
-
label: 'api server socket bind',
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
catch (err) {
|
|
328
|
-
try {
|
|
329
|
-
apiServerProc.kill('SIGKILL');
|
|
330
|
-
}
|
|
331
|
-
catch {
|
|
332
|
-
/* already gone */
|
|
333
|
-
}
|
|
334
|
-
throw new Error(`api-server-host never bound ${apiSocketPath()}\n--server stderr--\n${apiServerStderr}`, { cause: err });
|
|
335
|
-
}
|
|
336
|
-
// Pre-create the isolated session on the DEFAULT server so teardown always
|
|
337
|
-
// has a kill-sessions target.
|
|
338
|
-
// ISOLATION ASSUMPTION (see header): isolation is by SESSION NAME on
|
|
339
|
-
// the DEFAULT tmux server only. The runtime CLI shells `tmux` with no `-L`, so
|
|
340
|
-
// a custom-socket server (`tmux -L foo`) would be invisible to it; this harness
|
|
341
|
-
// therefore assumes the default socket and only ever kill-sessions, never the
|
|
342
|
-
// server.
|
|
343
|
-
// HEADLESS: skip ALL eager tmux setup. No node in a headless run opens a
|
|
344
|
-
// window, so there is no pane to pre-seed an env into and no session to pre-
|
|
345
|
-
// create.
|
|
346
|
-
if (!headless) {
|
|
347
|
-
// -x/-y explicitly: a DETACHED session with no client attached inherits
|
|
348
|
-
// tmux's 80x24 default, and these tests split it several times before
|
|
349
|
-
// `surface node focus` splits once more for the viewer. At 24 rows the
|
|
350
|
-
// viewer lands in a 2-row pane (or the split fails outright), the attach
|
|
351
|
-
// TUI exits, and tmux closes the pane — leaving the node with no tagged
|
|
352
|
-
// viewer and the test with nothing to look at. A dev box's session is as
|
|
353
|
-
// big as the developer's terminal, which is why this was hosted-runner-only.
|
|
354
|
-
spawnSync('tmux', ['new-session', '-d', '-s', session, '-x', '250', '-y', '60', '-c', CROUTER, 'sleep 100000'], {
|
|
355
|
-
stdio: 'ignore',
|
|
356
|
-
timeout: TMUX_TIMEOUT_MS,
|
|
357
|
-
});
|
|
358
|
-
// Put CRTR_PI_BINARY in the SESSION environment so EVERY pane/process spawned
|
|
359
|
-
// in this session inherits it — so any pi the runtime launches (boot, revive)
|
|
360
|
-
// resolves to the fake-pi vehicle, not a real pi.
|
|
361
|
-
spawnSync('tmux', ['set-environment', '-t', session, 'CRTR_PI_BINARY', FAKE_PI_BINARY], {
|
|
362
|
-
stdio: 'ignore',
|
|
363
|
-
timeout: TMUX_TIMEOUT_MS,
|
|
364
|
-
});
|
|
365
|
-
spawnSync('tmux', ['set-environment', '-t', session, 'CRTR_HOME', home], {
|
|
366
|
-
stdio: 'ignore',
|
|
367
|
-
timeout: TMUX_TIMEOUT_MS,
|
|
368
|
-
});
|
|
369
|
-
// Every `crtr` pane this session forks (the attach viewers above all) must
|
|
370
|
-
// find the installed runtime generation despite the isolated HOME.
|
|
371
|
-
spawnSync('tmux', ['set-environment', '-t', session, 'CRTR_RUNTIME_HOME', realRuntimeHome], {
|
|
372
|
-
stdio: 'ignore',
|
|
373
|
-
timeout: TMUX_TIMEOUT_MS,
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
// -- env for a subprocess CLI invocation -----------------------------------
|
|
377
|
-
function childEnv(nodeId) {
|
|
378
|
-
const e = cleanBaseEnv();
|
|
379
|
-
e['CRTR_HOME'] = home;
|
|
380
|
-
e['HOME'] = tmpHome;
|
|
381
|
-
e['CRTR_RUNTIME_HOME'] = realRuntimeHome;
|
|
382
|
-
e['CRTR_NODE_SESSION'] = session;
|
|
383
|
-
e['CRTR_PI_BINARY'] = FAKE_PI_BINARY;
|
|
384
|
-
e['CRTR_BROKER_ENGINE'] = FAKE_ENGINE;
|
|
385
|
-
if (nodeId !== null)
|
|
386
|
-
e['CRTR_NODE_ID'] = nodeId;
|
|
387
|
-
return e;
|
|
388
|
-
}
|
|
389
|
-
function nodeDir(id) {
|
|
390
|
-
return join(home, 'nodes', id);
|
|
391
|
-
}
|
|
392
|
-
function nodeDirs() {
|
|
393
|
-
try {
|
|
394
|
-
// Node ids end in an 8-hex random suffix and may have any number of
|
|
395
|
-
// lowercase-alphanumeric prefix segments. Only return those node dirs so
|
|
396
|
-
// fixture cleanup never treats a non-node sibling as a canvas row.
|
|
397
|
-
return readdirSync(join(home, 'nodes')).filter((d) => /^[a-z0-9]+(?:-[a-z0-9]+)*-[0-9a-f]{8}$/.test(d));
|
|
398
|
-
}
|
|
399
|
-
catch {
|
|
400
|
-
return [];
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
function cli(nodeId, args) {
|
|
404
|
-
const runtimeArgs = TSX_ESM === null ? [] : ['--import', TSX_ESM];
|
|
405
|
-
const res = spawnSync(process.execPath, [...runtimeArgs, CLI_ENTRY, ...args], {
|
|
406
|
-
cwd: CROUTER,
|
|
407
|
-
env: childEnv(nodeId),
|
|
408
|
-
encoding: 'utf8',
|
|
409
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
410
|
-
timeout: 60_000,
|
|
411
|
-
});
|
|
412
|
-
closeDb();
|
|
413
|
-
let json;
|
|
414
|
-
try {
|
|
415
|
-
json = JSON.parse(res.stdout ?? '');
|
|
416
|
-
}
|
|
417
|
-
catch {
|
|
418
|
-
/* not json */
|
|
419
|
-
}
|
|
420
|
-
return { code: res.status ?? -1, stdout: res.stdout ?? '', stderr: res.stderr ?? '', json };
|
|
421
|
-
}
|
|
422
|
-
// -- control channel -------------------------------------------------------
|
|
423
|
-
function sendCmd(nodeId, cmd) {
|
|
424
|
-
const dir = nodeDir(nodeId);
|
|
425
|
-
const tmp = join(dir, 'fake-pi.cmd.tmp');
|
|
426
|
-
writeFileSync(tmp, JSON.stringify(cmd));
|
|
427
|
-
renameSync(tmp, join(dir, 'fake-pi.cmd')); // atomic: host never reads a partial
|
|
428
|
-
}
|
|
429
|
-
function eventCount(nodeId, event) {
|
|
430
|
-
return readLines(join(nodeDir(nodeId), 'fake-pi.events.jsonl')).filter((l) => {
|
|
431
|
-
try {
|
|
432
|
-
return JSON.parse(l).event === event;
|
|
433
|
-
}
|
|
434
|
-
catch {
|
|
435
|
-
return false;
|
|
436
|
-
}
|
|
437
|
-
}).length;
|
|
438
|
-
}
|
|
439
|
-
function bootCount(nodeId) {
|
|
440
|
-
return readLines(join(nodeDir(nodeId), 'fake-pi.boots.jsonl')).length;
|
|
441
|
-
}
|
|
442
|
-
function inbox(nodeId) {
|
|
443
|
-
return openDb().prepare(`SELECT m.message_id AS entry_id, m.operation_id, m.created_at AS ts,
|
|
444
|
-
m.sender_node_id AS "from", m.sender_name AS from_name, d.urgency AS tier,
|
|
445
|
-
m.kind, m.body_ref AS ref, m.label, m.body_json AS data, m.disposition
|
|
446
|
-
FROM deliveries d JOIN messages m ON m.message_id = d.message_id
|
|
447
|
-
WHERE d.destination_kind = 'node_inbox' AND d.destination_id = ? AND d.wake = 1
|
|
448
|
-
ORDER BY m.seq`).all(nodeId).map((row) => {
|
|
449
|
-
const value = row;
|
|
450
|
-
return {
|
|
451
|
-
entry_id: value['entry_id'],
|
|
452
|
-
operation_id: value['operation_id'],
|
|
453
|
-
ts: value['ts'],
|
|
454
|
-
from: value['from'],
|
|
455
|
-
...(value['from_name'] === null ? {} : { from_name: value['from_name'] }),
|
|
456
|
-
tier: value['tier'],
|
|
457
|
-
kind: value['kind'],
|
|
458
|
-
...(value['ref'] === null ? {} : { ref: value['ref'] }),
|
|
459
|
-
label: value['label'],
|
|
460
|
-
...(value['data'] === null ? {} : { data: JSON.parse(value['data']) }),
|
|
461
|
-
...(value['disposition'] === null ? {} : { disposition: value['disposition'] }),
|
|
462
|
-
};
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
function injected(nodeId) {
|
|
466
|
-
return readLines(join(nodeDir(nodeId), 'fake-pi.injected.jsonl'))
|
|
467
|
-
.map((l) => {
|
|
468
|
-
try {
|
|
469
|
-
return JSON.parse(l);
|
|
470
|
-
}
|
|
471
|
-
catch {
|
|
472
|
-
return null;
|
|
473
|
-
}
|
|
474
|
-
})
|
|
475
|
-
.filter((x) => x !== null);
|
|
476
|
-
}
|
|
477
|
-
// Wait for the host to have BEGUN dispatching agent_end (recorded before its
|
|
478
|
-
// handlers run, so it survives a handler that tears the process down).
|
|
479
|
-
async function awaitAgentEnd(nodeId, base, label) {
|
|
480
|
-
await waitFor(() => eventCount(nodeId, 'agent_end') > base, {
|
|
481
|
-
timeoutMs: 20_000,
|
|
482
|
-
label,
|
|
483
|
-
});
|
|
484
|
-
}
|
|
485
|
-
const harness = {
|
|
486
|
-
home,
|
|
487
|
-
agentHome: tmpHome,
|
|
488
|
-
session,
|
|
489
|
-
spawnRoot(task, o = {}) {
|
|
490
|
-
const id = o.id ?? `root-${process.pid}-${nextRootSeq++}`;
|
|
491
|
-
const meta = {
|
|
492
|
-
node_id: id,
|
|
493
|
-
name: o.id ?? (task.slice(0, 24) || id),
|
|
494
|
-
created: new Date().toISOString(),
|
|
495
|
-
cwd: CROUTER,
|
|
496
|
-
kind: o.kind ?? 'general',
|
|
497
|
-
mode: o.mode ?? 'base',
|
|
498
|
-
lifecycle: o.lifecycle ?? 'resident',
|
|
499
|
-
status: 'active',
|
|
500
|
-
parent: null,
|
|
501
|
-
};
|
|
502
|
-
createNode(meta);
|
|
503
|
-
const executionId = beginExecution(id, { daemonEpoch: fleet.epoch() });
|
|
504
|
-
recordExecutionPid(executionId, id, process.pid);
|
|
505
|
-
closeDb();
|
|
506
|
-
return id;
|
|
507
|
-
},
|
|
508
|
-
fabricateBrokerNode(o = {}) {
|
|
509
|
-
const id = o.id ?? `brk-${process.pid}-${nextRootSeq++}`;
|
|
510
|
-
const meta = {
|
|
511
|
-
node_id: id,
|
|
512
|
-
name: id,
|
|
513
|
-
created: new Date().toISOString(),
|
|
514
|
-
cwd: CROUTER,
|
|
515
|
-
host_kind: 'broker',
|
|
516
|
-
kind: o.kind ?? 'developer',
|
|
517
|
-
mode: o.mode ?? 'base',
|
|
518
|
-
lifecycle: o.lifecycle ?? 'terminal',
|
|
519
|
-
parent: o.parent ?? null,
|
|
520
|
-
pi_session_id: o.pi_session_id ?? null,
|
|
521
|
-
pi_session_file: o.pi_session_file ?? null,
|
|
522
|
-
status: o.status ?? 'active',
|
|
523
|
-
intent: o.intent ?? null,
|
|
524
|
-
pi_pid: o.pi_pid ?? null,
|
|
525
|
-
};
|
|
526
|
-
createNode(meta);
|
|
527
|
-
if (o.pi_pid !== null && o.pi_pid !== undefined) {
|
|
528
|
-
const executionId = beginExecution(id, { daemonEpoch: fleet.epoch() });
|
|
529
|
-
recordExecutionPid(executionId, id, o.pi_pid);
|
|
530
|
-
}
|
|
531
|
-
if (o.pi_session_id !== null && o.pi_session_id !== undefined || o.pi_session_file !== null && o.pi_session_file !== undefined) {
|
|
532
|
-
resetSession(id, { sessionId: o.pi_session_id ?? '', transcriptPath: o.pi_session_file ?? null });
|
|
533
|
-
}
|
|
534
|
-
closeDb();
|
|
535
|
-
return id;
|
|
536
|
-
},
|
|
537
|
-
async spawnHeadlessChild(parentId, task, o = {}) {
|
|
538
|
-
const result = await spawnChild({
|
|
539
|
-
kind: o.kind ?? 'general',
|
|
540
|
-
cwd: CROUTER,
|
|
541
|
-
prompt: task,
|
|
542
|
-
parent: parentId,
|
|
543
|
-
...(o.mode !== undefined ? { mode: o.mode } : {}),
|
|
544
|
-
...(o.lifecycle !== undefined ? { rootLifecycle: o.lifecycle } : {}),
|
|
545
|
-
...(o.model !== undefined ? { model: o.model } : {}),
|
|
546
|
-
...(o.profile !== undefined ? { profile: o.profile } : {}),
|
|
547
|
-
});
|
|
548
|
-
await harness.awaitBoot(result.node.node_id);
|
|
549
|
-
return result.node.node_id;
|
|
550
|
-
},
|
|
551
|
-
cli,
|
|
552
|
-
async stop(nodeId, reason = 'stop', errorMessage) {
|
|
553
|
-
const base = eventCount(nodeId, 'agent_end');
|
|
554
|
-
sendCmd(nodeId, { cmd: 'stop', id: `stop-${Date.now()}`, reason, errorMessage });
|
|
555
|
-
await awaitAgentEnd(nodeId, base, `stop agent_end for ${nodeId}`);
|
|
556
|
-
},
|
|
557
|
-
async tick(now) {
|
|
558
|
-
closeDb();
|
|
559
|
-
// On the lane, after every already-enqueued exit job — the same strict
|
|
560
|
-
// serialization crtrd's enqueueTick gives the real daemon.
|
|
561
|
-
await enqueueLaneJob(() => superviseTick(now));
|
|
562
|
-
closeDb();
|
|
563
|
-
},
|
|
564
|
-
fleet,
|
|
565
|
-
async deliverExit(nodeId, status = { code: null, signal: 'SIGKILL' }) {
|
|
566
|
-
closeDb();
|
|
567
|
-
fleet.deliverExit(nodeId, status);
|
|
568
|
-
await drainLane();
|
|
569
|
-
closeDb();
|
|
570
|
-
},
|
|
571
|
-
async awaitFleetExit(nodeId, timeoutMs = 15_000) {
|
|
572
|
-
await waitFor(() => !fleet.has(nodeId), {
|
|
573
|
-
timeoutMs,
|
|
574
|
-
intervalMs: 20,
|
|
575
|
-
label: `fleet forgets ${nodeId} (child exit delivered)`,
|
|
576
|
-
});
|
|
577
|
-
await drainLane();
|
|
578
|
-
closeDb();
|
|
579
|
-
},
|
|
580
|
-
async awaitBoot(nodeId, o = {}) {
|
|
581
|
-
const minCount = o.minCount ?? 1;
|
|
582
|
-
const bootsPath = join(nodeDir(nodeId), 'fake-pi.boots.jsonl');
|
|
583
|
-
const errPath = join(nodeDir(nodeId), 'fake-pi.error');
|
|
584
|
-
let lines;
|
|
585
|
-
try {
|
|
586
|
-
lines = await waitFor(() => {
|
|
587
|
-
const ls = readLines(bootsPath);
|
|
588
|
-
return ls.length >= minCount ? ls : null;
|
|
589
|
-
}, {
|
|
590
|
-
timeoutMs: o.timeoutMs ?? 30_000,
|
|
591
|
-
label: `fake-pi boot >= ${minCount} for ${nodeId}` +
|
|
592
|
-
(existsSync(errPath) ? ` (error file: ${readFileSync(errPath, 'utf8')})` : ''),
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
catch (err) {
|
|
596
|
-
// Failure-path-only diagnostic: on boot timeout, dump the node row's recorded
|
|
597
|
-
// liveness fields, recorded-vs-live identity verdict, tail of broker.log, and
|
|
598
|
-
// late error file so the failure is self-explaining from the CI log alone.
|
|
599
|
-
closeDb();
|
|
600
|
-
const n = getNode(nodeId);
|
|
601
|
-
process.stderr.write(`[awaitBoot] timeout for ${nodeId}: pi_pid=${n?.pi_pid ?? 'null'} ` +
|
|
602
|
-
`pi_pid_identity=${n?.pi_pid_identity ?? 'null'} status=${n?.status ?? 'null'} ` +
|
|
603
|
-
`intent=${n?.intent ?? 'null'} pi_session_id=${n?.pi_session_id ?? 'null'} ` +
|
|
604
|
-
`bootCount=${bootCount(nodeId)} minCount=${minCount}\n`);
|
|
605
|
-
// Diagnostic (2026-09-03 CI investigation): confirm or rule out the
|
|
606
|
-
// backoff-gated respawn path (fleet.ts #respawn's `assess` branch)
|
|
607
|
-
// stranding this row behind a `respawn_not_before` window that never
|
|
608
|
-
// gets a further h.tick() to clear it, since awaitBoot itself never
|
|
609
|
-
// ticks. Remove once the real CI failure is diagnosed.
|
|
610
|
-
process.stderr.write(`[awaitBoot] respawn state: respawn_failures=${n?.respawn_failures ?? 'null'} ` +
|
|
611
|
-
`respawn_not_before=${n?.respawn_not_before ?? 'null'} launched_at=${n?.launched_at ?? 'null'} ` +
|
|
612
|
-
`last_settled_at=${n?.last_settled_at ?? 'null'} now=${new Date().toISOString()}\n`);
|
|
613
|
-
// Identity-aware liveness: what does the current process state say about recorded identity?
|
|
614
|
-
if (n?.pi_pid !== null && n?.pi_pid !== undefined) {
|
|
615
|
-
const liveness = recordedPidLiveness(n.pi_pid, n.pi_pid_identity);
|
|
616
|
-
process.stderr.write(`[awaitBoot] identity-liveness: pid=${n.pi_pid} recorded-identity=${n.pi_pid_identity ?? 'null'} liveness=${liveness}\n`);
|
|
617
|
-
}
|
|
618
|
-
// Tail of broker.log if it exists (shows pre-session startup issues)
|
|
619
|
-
const brokerLogPath = join(nodeDir(nodeId), 'job', 'broker.log');
|
|
620
|
-
if (existsSync(brokerLogPath)) {
|
|
621
|
-
const logContent = readFileSync(brokerLogPath, 'utf8');
|
|
622
|
-
const lines = logContent.split('\n');
|
|
623
|
-
const tail = lines.slice(-10).join('\n');
|
|
624
|
-
process.stderr.write(`[awaitBoot] broker.log tail:\n${tail}\n`);
|
|
625
|
-
}
|
|
626
|
-
// Late error file (written during boot, e.g., fake-pi init failure)
|
|
627
|
-
const lateErrPath = join(nodeDir(nodeId), 'fake-pi.error');
|
|
628
|
-
if (existsSync(lateErrPath)) {
|
|
629
|
-
const lateErr = readFileSync(lateErrPath, 'utf8');
|
|
630
|
-
process.stderr.write(`[awaitBoot] fake-pi.error: ${lateErr}\n`);
|
|
631
|
-
}
|
|
632
|
-
throw err;
|
|
633
|
-
}
|
|
634
|
-
const boot = JSON.parse(lines[lines.length - 1]);
|
|
635
|
-
if (typeof boot.pid === 'number')
|
|
636
|
-
pidsToKill.add(boot.pid);
|
|
637
|
-
return boot;
|
|
638
|
-
},
|
|
639
|
-
async awaitWake(nodeId, o = {}) {
|
|
640
|
-
const sinceCount = o.sinceCount ?? 0;
|
|
641
|
-
const match = o.match;
|
|
642
|
-
const fresh = await waitFor(() => {
|
|
643
|
-
const all = injected(nodeId).slice(sinceCount);
|
|
644
|
-
if (all.length === 0)
|
|
645
|
-
return null;
|
|
646
|
-
if (match && !all.some((e) => match.test(e.content)))
|
|
647
|
-
return null;
|
|
648
|
-
return all;
|
|
649
|
-
}, { timeoutMs: o.timeoutMs ?? 15_000, label: `wake delivery for ${nodeId}` });
|
|
650
|
-
return fresh.map((e) => e.content);
|
|
651
|
-
},
|
|
652
|
-
waitFor,
|
|
653
|
-
node(nodeId) {
|
|
654
|
-
closeDb();
|
|
655
|
-
return getNode(nodeId);
|
|
656
|
-
},
|
|
657
|
-
status(nodeId) {
|
|
658
|
-
closeDb();
|
|
659
|
-
return getNode(nodeId)?.status ?? null;
|
|
660
|
-
},
|
|
661
|
-
inbox(nodeId) {
|
|
662
|
-
closeDb();
|
|
663
|
-
return inbox(nodeId);
|
|
664
|
-
},
|
|
665
|
-
injected,
|
|
666
|
-
fakeCmd(nodeId, cmd) {
|
|
667
|
-
sendCmd(nodeId, cmd);
|
|
668
|
-
},
|
|
669
|
-
async stopApiServer() {
|
|
670
|
-
try {
|
|
671
|
-
apiServerProc.kill('SIGTERM');
|
|
672
|
-
}
|
|
673
|
-
catch {
|
|
674
|
-
/* already gone */
|
|
675
|
-
}
|
|
676
|
-
await waitFor(() => apiServerProc.exitCode === null && apiServerProc.signalCode === null ? null : true, { label: 'harness API server exit' });
|
|
677
|
-
},
|
|
678
|
-
dialogResults(nodeId) {
|
|
679
|
-
return readLines(join(nodeDir(nodeId), 'fake-pi.dialog.jsonl'))
|
|
680
|
-
.map((l) => {
|
|
681
|
-
try {
|
|
682
|
-
return JSON.parse(l);
|
|
683
|
-
}
|
|
684
|
-
catch {
|
|
685
|
-
return null;
|
|
686
|
-
}
|
|
687
|
-
})
|
|
688
|
-
.filter((x) => x !== null);
|
|
689
|
-
},
|
|
690
|
-
brokerSock(nodeId) {
|
|
691
|
-
return join(nodeDir(nodeId), 'view.sock');
|
|
692
|
-
},
|
|
693
|
-
bootCount,
|
|
694
|
-
subscribers(nodeId) {
|
|
695
|
-
closeDb();
|
|
696
|
-
return subscribersOf(nodeId).map((s) => ({ node_id: s.node_id, active: s.active }));
|
|
697
|
-
},
|
|
698
|
-
subscriptions(nodeId) {
|
|
699
|
-
closeDb();
|
|
700
|
-
return subscriptionsOf(nodeId).map((s) => ({ node_id: s.node_id, active: s.active }));
|
|
701
|
-
},
|
|
702
|
-
async dispose() {
|
|
703
|
-
laneClosed = true;
|
|
704
|
-
spawnSync('tmux', ['kill-session', '-t', session], {
|
|
705
|
-
stdio: 'ignore',
|
|
706
|
-
timeout: TMUX_TIMEOUT_MS,
|
|
707
|
-
});
|
|
708
|
-
// Best-effort: a superviseTick-triggered revive of a fabricated node fires
|
|
709
|
-
// a DETACHED throwaway broker (it loads the real SDK; the rmSync of home
|
|
710
|
-
// below makes a mid-boot one self-terminate when its files vanish). Kill
|
|
711
|
-
// any that recorded a pid first — scan every node's row pid + recorded
|
|
712
|
-
// boot pids and add them to the kill set.
|
|
713
|
-
closeDb();
|
|
714
|
-
for (const d of nodeDirs()) {
|
|
715
|
-
try {
|
|
716
|
-
const n = getNode(d);
|
|
717
|
-
const execution = liveExecutionForNode(d);
|
|
718
|
-
if (execution?.pid != null)
|
|
719
|
-
pidsToKill.add(execution.pid);
|
|
720
|
-
}
|
|
721
|
-
catch {
|
|
722
|
-
/* row gone — fine */
|
|
723
|
-
}
|
|
724
|
-
for (const line of readLines(join(nodeDir(d), 'fake-pi.boots.jsonl'))) {
|
|
725
|
-
try {
|
|
726
|
-
const p = JSON.parse(line).pid;
|
|
727
|
-
if (typeof p === 'number')
|
|
728
|
-
pidsToKill.add(p);
|
|
729
|
-
}
|
|
730
|
-
catch {
|
|
731
|
-
/* skip */
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
// Every pid here was recorded EARLIER (a row's pi_pid, a fake-pi boot
|
|
736
|
-
// line, the API-server child) and may since have exited and had its pid
|
|
737
|
-
// REUSED by an unrelated process — including a real, just-spawned broker
|
|
738
|
-
// on the developer's own canvas, which a blind SIGKILL then murders (the
|
|
739
|
-
// 2026-07-27 "brokers die at startup" RCA). Re-read each pid's command
|
|
740
|
-
// at the signal boundary (same fresh-read guard crtrd's reapOrphanBrokers
|
|
741
|
-
// uses) and signal ONLY what still looks like one of THIS fixture's
|
|
742
|
-
// processes: a broker/CLI declaring this isolated canvas home, or one of
|
|
743
|
-
// the fixture entrypoints. Anything else is skipped, not killed.
|
|
744
|
-
const fixtureFingerprints = [home, tmpHome, API_SERVER_HOST, FAKE_ENGINE, FAKE_PI_HOST];
|
|
745
|
-
for (const p of pidsToKill) {
|
|
746
|
-
const command = capturePidCommand(p);
|
|
747
|
-
if (command === null)
|
|
748
|
-
continue; // gone already — nothing to signal
|
|
749
|
-
if (!fixtureFingerprints.some((mark) => command.includes(mark)))
|
|
750
|
-
continue; // pid reused by a stranger
|
|
751
|
-
try {
|
|
752
|
-
process.kill(p, 'SIGKILL');
|
|
753
|
-
}
|
|
754
|
-
catch {
|
|
755
|
-
/* already gone */
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
closeDb();
|
|
759
|
-
closeScopedStores();
|
|
760
|
-
// Stop the standalone API-server process (its socket lives under home/,
|
|
761
|
-
// removed below). SIGTERM lets it close() its listener and unlink the
|
|
762
|
-
// socket; the pid is also in pidsToKill as a backstop.
|
|
763
|
-
try {
|
|
764
|
-
apiServerProc.kill('SIGTERM');
|
|
765
|
-
}
|
|
766
|
-
catch {
|
|
767
|
-
/* already gone */
|
|
768
|
-
}
|
|
769
|
-
await waitFor(() => apiServerProc.exitCode === null && apiServerProc.signalCode === null ? null : true, { label: 'harness API server exit' });
|
|
770
|
-
// Leave the process-global event source + fleet unbound so the next
|
|
771
|
-
// harness instance in this same test process can bind cleanly (see setup
|
|
772
|
-
// above). dispose() the fleet first: a pending backoff-respawn timer
|
|
773
|
-
// would otherwise hold the test process's event loop open.
|
|
774
|
-
fleet.dispose();
|
|
775
|
-
resetFleetForTests();
|
|
776
|
-
resetEventSourceForTests();
|
|
777
|
-
rmSync(home, { recursive: true, force: true });
|
|
778
|
-
rmSync(tmpHome, { recursive: true, force: true });
|
|
779
|
-
if (origHome === undefined)
|
|
780
|
-
delete process.env['CRTR_HOME'];
|
|
781
|
-
else
|
|
782
|
-
process.env['CRTR_HOME'] = origHome;
|
|
783
|
-
if (origAgentHome === undefined)
|
|
784
|
-
delete process.env['HOME'];
|
|
785
|
-
else
|
|
786
|
-
process.env['HOME'] = origAgentHome;
|
|
787
|
-
if (origPiBinary === undefined)
|
|
788
|
-
delete process.env['CRTR_PI_BINARY'];
|
|
789
|
-
else
|
|
790
|
-
process.env['CRTR_PI_BINARY'] = origPiBinary;
|
|
791
|
-
if (origNodeSession === undefined)
|
|
792
|
-
delete process.env['CRTR_NODE_SESSION'];
|
|
793
|
-
else
|
|
794
|
-
process.env['CRTR_NODE_SESSION'] = origNodeSession;
|
|
795
|
-
if (origNodeOptions === undefined)
|
|
796
|
-
delete process.env['NODE_OPTIONS'];
|
|
797
|
-
else
|
|
798
|
-
process.env['NODE_OPTIONS'] = origNodeOptions;
|
|
799
|
-
if (origBrokerEngine === undefined)
|
|
800
|
-
delete process.env['CRTR_BROKER_ENGINE'];
|
|
801
|
-
else
|
|
802
|
-
process.env['CRTR_BROKER_ENGINE'] = origBrokerEngine;
|
|
803
|
-
},
|
|
804
|
-
};
|
|
805
|
-
return harness;
|
|
806
|
-
}
|