@north-light/crouter 0.3.318 → 0.3.320
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/dist/api/client.js +2 -912
- package/dist/api/dto/attach.js +0 -13
- package/dist/api/dto/bash-jobs.js +1 -9
- package/dist/api/dto/broker-ops.js +0 -6
- package/dist/api/dto/broker.js +0 -20
- package/dist/api/dto/canvas.js +0 -2
- package/dist/api/dto/chat-inventory.js +0 -11
- package/dist/api/dto/common.js +1 -15
- package/dist/api/dto/config.js +0 -3
- package/dist/api/dto/crons.js +1 -10
- package/dist/api/dto/files.js +0 -7
- package/dist/api/dto/focus.js +0 -10
- package/dist/api/dto/health.js +0 -2
- package/dist/api/dto/human-requests.js +0 -4
- package/dist/api/dto/human.js +0 -4
- package/dist/api/dto/inbox.js +0 -4
- package/dist/api/dto/lifecycle.js +0 -3
- package/dist/api/dto/mail.js +0 -1
- package/dist/api/dto/memory.js +0 -6
- package/dist/api/dto/messages.js +0 -2
- package/dist/api/dto/model-config.js +0 -1
- package/dist/api/dto/modelauth.js +0 -4
- package/dist/api/dto/node-outcomes.js +0 -2
- package/dist/api/dto/nodes.js +0 -3
- package/dist/api/dto/profiles.js +1 -4
- package/dist/api/dto/recovery.js +0 -1
- package/dist/api/dto/reports.js +0 -2
- package/dist/api/dto/review-comments.js +0 -5
- package/dist/api/dto/reviews.js +0 -5
- package/dist/api/dto/subscriptions.js +0 -2
- package/dist/api/dto/worktree.js +0 -6
- package/dist/api/errors.js +1 -40
- package/dist/api/index.js +1 -33
- package/dist/api/plugin-manifest-schema.js +0 -23
- package/dist/api/routes.js +1 -147
- package/dist/build-root.js +1 -198
- package/dist/cli.js +3 -99
- package/dist/clients/attach/ansi-cells.js +1 -137
- package/dist/clients/attach/chrome/bash-jobs.js +1 -31
- package/dist/clients/attach/chrome/canvas-panels.js +1 -194
- package/dist/clients/attach/chrome/completion-bell.js +1 -89
- package/dist/clients/attach/chrome/cron-wait.js +1 -34
- package/dist/clients/attach/chrome/git-info.js +2 -44
- package/dist/clients/attach/chrome/header.js +1 -30
- package/dist/clients/attach/chrome/inbox-strip.js +1 -199
- package/dist/clients/attach/chrome/recap.js +1 -19
- package/dist/clients/attach/chrome/review-wait.js +1 -22
- package/dist/clients/attach/chrome/roster.js +4 -275
- package/dist/clients/attach/chrome/status-line.js +1 -117
- package/dist/clients/attach/chrome/ticket-panel.js +1 -280
- package/dist/clients/attach/chrome/widgets.js +1 -51
- package/dist/clients/attach/command.js +1 -107
- package/dist/clients/attach/config.js +1 -274
- package/dist/clients/attach/input/capabilities.js +1 -104
- package/dist/clients/attach/input/clipboard-image.js +3 -220
- package/dist/clients/attach/input/completion-frecency.js +1 -141
- package/dist/clients/attach/input/controller.js +7 -377
- package/dist/clients/attach/input/overlay-owner.js +1 -199
- package/dist/clients/attach/input/ref-autocomplete.js +2 -176
- package/dist/clients/attach/input/titled-editor.js +4 -859
- package/dist/clients/attach/overlays/auth.js +2 -271
- package/dist/clients/attach/overlays/dialogs.js +2 -102
- package/dist/clients/attach/overlays/file-review.js +2 -128
- package/dist/clients/attach/overlays/graph.js +1 -661
- package/dist/clients/attach/overlays/help.js +1 -211
- package/dist/clients/attach/overlays/mcp.js +1 -302
- package/dist/clients/attach/overlays/pickers.js +1 -163
- package/dist/clients/attach/render/activity-slot.js +1 -13
- package/dist/clients/attach/render/assistant-message.js +1 -56
- package/dist/clients/attach/render/card-presentation.js +5 -218
- package/dist/clients/attach/render/chat-view.js +5 -1708
- package/dist/clients/attach/render/condensed-history.js +1 -60
- package/dist/clients/attach/render/context-message.js +1 -63
- package/dist/clients/attach/render/crtr-output.js +17 -905
- package/dist/clients/attach/render/diagram.js +7 -111
- package/dist/clients/attach/render/edit-diff.js +5 -304
- package/dist/clients/attach/render/glyph-codepoints.js +1 -42
- package/dist/clients/attach/render/group-activity.js +2 -263
- package/dist/clients/attach/render/group-recap.js +1 -152
- package/dist/clients/attach/render/markdown-source.js +5 -266
- package/dist/clients/attach/render/measured-container.js +1 -322
- package/dist/clients/attach/render/page-block.js +1 -183
- package/dist/clients/attach/render/scroll-animation.js +1 -80
- package/dist/clients/attach/render/tool-calls.js +3 -361
- package/dist/clients/attach/render/transcript-copy.js +2 -81
- package/dist/clients/attach/render/transcript-search.js +1 -152
- package/dist/clients/attach/render/viewport.js +1 -184
- package/dist/clients/attach/session/banner.js +1 -29
- package/dist/clients/attach/session/bindings.js +1 -71
- package/dist/clients/attach/session/chrome-refresh.js +1 -94
- package/dist/clients/attach/session/connection.js +1 -186
- package/dist/clients/attach/session/context.js +0 -16
- package/dist/clients/attach/session/editor-frame.js +1 -142
- package/dist/clients/attach/session/editor-inventory.js +6 -160
- package/dist/clients/attach/session/file-links.js +1 -68
- package/dist/clients/attach/session/focus-events.js +1 -12
- package/dist/clients/attach/session/frame.js +1 -214
- package/dist/clients/attach/session/frames.js +1 -188
- package/dist/clients/attach/session/identity.js +1 -26
- package/dist/clients/attach/session/input-wiring.js +1 -140
- package/dist/clients/attach/session/invariant.js +1 -15
- package/dist/clients/attach/session/keys.js +1 -77
- package/dist/clients/attach/session/layout.js +1 -59
- package/dist/clients/attach/session/mouse.js +1 -78
- package/dist/clients/attach/session/pane-focus.js +1 -42
- package/dist/clients/attach/session/pane-tag.js +1 -112
- package/dist/clients/attach/session/pi-assets.js +1 -24
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
- package/dist/clients/attach/session/profile-files.js +1 -228
- package/dist/clients/attach/session/reconnect.js +1 -175
- package/dist/clients/attach/session/selection.js +3 -108
- package/dist/clients/attach/session/state-sync.js +1 -67
- package/dist/clients/attach/session/surface-frame.js +1 -73
- package/dist/clients/attach/session/surface-host.js +1 -255
- package/dist/clients/attach/session/teardown.js +5 -94
- package/dist/clients/attach/session/transcript-search.js +3 -151
- package/dist/clients/attach/session/whip-achievements.js +2 -145
- package/dist/clients/attach/session/whip.js +1 -362
- package/dist/clients/attach/slash/dispatch.js +1 -706
- package/dist/clients/attach/slash/prompt-preview.js +1 -121
- package/dist/clients/attach/viewer.js +441 -441
- package/dist/clients/conversation/projection.js +1 -324
- package/dist/clients/conversation/submit.js +1 -51
- package/dist/clients/inbox/controller.js +1 -701
- package/dist/clients/inbox/dto-adapt.js +1 -93
- package/dist/clients/inbox/layout.js +1 -9
- package/dist/clients/inbox/page-adapter.js +1 -55
- package/dist/clients/inbox/resolve.js +1 -35
- package/dist/clients/inbox/review/anchors.js +1 -89
- package/dist/clients/inbox/review/comments-client.js +1 -98
- package/dist/clients/inbox/review/companion-pane.js +1 -82
- package/dist/clients/inbox/review/document-surface.js +2 -1188
- package/dist/clients/inbox/review/frame.js +1 -216
- package/dist/clients/inbox/review/keys.js +1 -123
- package/dist/clients/inbox/review/launch.js +1 -151
- package/dist/clients/inbox/review/live-source.js +1 -160
- package/dist/clients/inbox/review/nvim.js +1 -44
- package/dist/clients/inbox/review/remap.js +1 -157
- package/dist/clients/inbox/review/review-client.js +1 -123
- package/dist/clients/inbox/review/roundtrip.js +3 -36
- package/dist/clients/inbox/review/state.js +4 -315
- package/dist/clients/inbox/review-adapter.js +1 -43
- package/dist/clients/inbox/surface.js +1 -152
- package/dist/clients/inbox/tui/ansi.js +3 -321
- package/dist/clients/inbox/tui/input.js +5 -392
- package/dist/clients/inbox/tui/keys.js +1 -104
- package/dist/clients/inbox/tui/page-body.js +1 -66
- package/dist/clients/inbox/tui/panel.js +1 -84
- package/dist/clients/inbox/tui/render.js +2 -368
- package/dist/clients/inbox/tui/slots.js +3 -134
- package/dist/clients/inbox/tui/types.js +0 -1
- package/dist/clients/inbox/tui.js +1 -86
- package/dist/clients/surfaces/host.js +0 -1
- package/dist/commands/api-client.js +4 -290
- package/dist/commands/attention.js +1 -215
- package/dist/commands/canvas-browse.js +1 -70
- package/dist/commands/canvas-config.js +2 -192
- package/dist/commands/canvas-history/grep.js +7 -85
- package/dist/commands/canvas-history/read.js +3 -50
- package/dist/commands/canvas-history/search.js +10 -99
- package/dist/commands/canvas-history/shared.js +1 -139
- package/dist/commands/canvas-history/stats.js +6 -68
- package/dist/commands/canvas-history.js +1 -32
- package/dist/commands/canvas-issue.js +14 -149
- package/dist/commands/canvas-prune.js +1 -108
- package/dist/commands/canvas-roster.js +1 -69
- package/dist/commands/canvas-snapshot.js +1 -34
- package/dist/commands/canvas-use.js +1 -61
- package/dist/commands/canvas.js +1 -49
- package/dist/commands/chord.js +1 -241
- package/dist/commands/cron.js +11 -534
- package/dist/commands/dashboard.js +1 -85
- package/dist/commands/human/components.js +3 -77
- package/dist/commands/human/feedback.js +1 -112
- package/dist/commands/human/prompts.js +1 -331
- package/dist/commands/human/queue.js +1 -191
- package/dist/commands/human/request.js +1 -266
- package/dist/commands/human/review.js +1 -288
- package/dist/commands/human/shared.js +1 -67
- package/dist/commands/human.js +4 -60
- package/dist/commands/memory/delete.js +1 -100
- package/dist/commands/memory/edit.js +21 -219
- package/dist/commands/memory/find.js +2 -244
- package/dist/commands/memory/history.js +5 -199
- package/dist/commands/memory/lint.js +1 -107
- package/dist/commands/memory/list.js +1 -142
- package/dist/commands/memory/move.js +1 -223
- package/dist/commands/memory/origin.js +1 -130
- package/dist/commands/memory/read.js +6 -232
- package/dist/commands/memory/shared.js +12 -802
- package/dist/commands/memory/write.js +13 -235
- package/dist/commands/memory.js +1 -30
- package/dist/commands/node/bash.js +5 -245
- package/dist/commands/node/create.js +3 -332
- package/dist/commands/node/inspect.js +12 -300
- package/dist/commands/node/lifecycle.js +2 -453
- package/dist/commands/node/message.js +1 -161
- package/dist/commands/node/outcome.js +4 -134
- package/dist/commands/node/pyramid.js +2 -79
- package/dist/commands/node/subscription.js +1 -78
- package/dist/commands/node/wait.js +7 -163
- package/dist/commands/node-context.js +2 -159
- package/dist/commands/node-inspect-artifacts.js +8 -109
- package/dist/commands/node-lifecycle-revive.js +1 -217
- package/dist/commands/node-snapshot.js +1 -37
- package/dist/commands/node-transcript.js +1 -62
- package/dist/commands/node-worktree.js +1 -138
- package/dist/commands/node.js +1 -29
- package/dist/commands/pkg/browse/actions.js +1 -198
- package/dist/commands/pkg/browse/catalog.js +1 -466
- package/dist/commands/pkg/browse/command-view.js +1 -191
- package/dist/commands/pkg/browse/detail-panel.js +1 -402
- package/dist/commands/pkg/browse/doc-view.js +1 -89
- package/dist/commands/pkg/browse/list-panel.js +2 -168
- package/dist/commands/pkg/browse/model.js +1 -36
- package/dist/commands/pkg/browse/shell.js +1 -640
- package/dist/commands/pkg/browse.js +1 -27
- package/dist/commands/pkg/market-inspect.js +1 -141
- package/dist/commands/pkg/market-manage.js +1 -327
- package/dist/commands/pkg/market.js +1 -14
- package/dist/commands/pkg/plugin-inspect.js +1 -168
- package/dist/commands/pkg/plugin-manage.js +17 -1109
- package/dist/commands/pkg/plugin.js +1 -14
- package/dist/commands/pkg/shared.js +1 -62
- package/dist/commands/pkg.js +1 -21
- package/dist/commands/profile/default.js +1 -139
- package/dist/commands/profile/delete.js +1 -66
- package/dist/commands/profile/env.js +3 -188
- package/dist/commands/profile/kind.js +2 -35
- package/dist/commands/profile/list.js +1 -43
- package/dist/commands/profile/meta.js +1 -67
- package/dist/commands/profile/new.js +1 -115
- package/dist/commands/profile/pause.js +1 -59
- package/dist/commands/profile/project.js +1 -113
- package/dist/commands/profile/rename.js +1 -38
- package/dist/commands/profile/show.js +1 -52
- package/dist/commands/profile.js +1 -35
- package/dist/commands/push.js +9 -265
- package/dist/commands/revive.js +10 -181
- package/dist/commands/surface/node/cycle.js +1 -83
- package/dist/commands/surface/node/focus.js +1 -81
- package/dist/commands/surface/node/id.js +1 -38
- package/dist/commands/surface/node/pin.js +1 -42
- package/dist/commands/surface/node/placement.js +1 -134
- package/dist/commands/surface-edit.js +1 -157
- package/dist/commands/surface-inbox.js +1 -98
- package/dist/commands/surface-inspect.js +1 -39
- package/dist/commands/surface-node.js +1 -19
- package/dist/commands/surface-reload.js +2 -134
- package/dist/commands/surface-tmux-spread.js +1 -214
- package/dist/commands/surface.js +1 -28
- package/dist/commands/sys/branch.js +1 -19
- package/dist/commands/sys/config.js +1 -353
- package/dist/commands/sys/context/admin/actions.js +2 -246
- package/dist/commands/sys/context/admin/detail-panel.js +1 -247
- package/dist/commands/sys/context/admin/docs-panel.js +1 -191
- package/dist/commands/sys/context/admin/list-view.js +1 -183
- package/dist/commands/sys/context/admin/model.js +1 -229
- package/dist/commands/sys/context/admin/rail-panel.js +1 -227
- package/dist/commands/sys/context/admin/read-view.js +2 -194
- package/dist/commands/sys/context/admin/shell.js +1 -910
- package/dist/commands/sys/context/admin.js +2 -126
- package/dist/commands/sys/context/doc.js +3 -197
- package/dist/commands/sys/context/prompt-review.js +11 -291
- package/dist/commands/sys/context/resolve.js +10 -489
- package/dist/commands/sys/context/sysprompt.js +5 -96
- package/dist/commands/sys/context.js +1 -20
- package/dist/commands/sys/daemon.js +1 -313
- package/dist/commands/sys/doctor.js +1 -617
- package/dist/commands/sys/feedback.js +7 -228
- package/dist/commands/sys/logs.js +3 -129
- package/dist/commands/sys/migrate.js +1 -94
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
- package/dist/commands/sys/panels/dependencies-panel.js +1 -80
- package/dist/commands/sys/panels/keybindings-panel.js +1 -703
- package/dist/commands/sys/panels/models-panel.js +1 -1133
- package/dist/commands/sys/panels/plugins-panel.js +1 -80
- package/dist/commands/sys/panels/prefs-panel.js +1 -85
- package/dist/commands/sys/panels/profiles-panel.js +1 -601
- package/dist/commands/sys/panels/provider-panel.js +1 -538
- package/dist/commands/sys/settings-shell.js +1 -400
- package/dist/commands/sys/settings.js +1 -46
- package/dist/commands/sys/setup-core.js +6 -579
- package/dist/commands/sys/setup-settings-runner.js +1 -16
- package/dist/commands/sys/setup-wizard.js +1 -279
- package/dist/commands/sys/setup.js +1 -34
- package/dist/commands/sys/shared.js +1 -81
- package/dist/commands/sys/support/prepare.js +3 -239
- package/dist/commands/sys/support/submit.js +6 -524
- package/dist/commands/sys/support.js +1 -18
- package/dist/commands/sys/sync-deps.js +15 -498
- package/dist/commands/sys/sync-project-guidance.js +4 -481
- package/dist/commands/sys/sync-shared.js +1 -49
- package/dist/commands/sys/sync-skills.js +2 -311
- package/dist/commands/sys/sync.js +1 -18
- package/dist/commands/sys/update.js +1 -147
- package/dist/commands/sys/worktrees.js +5 -53
- package/dist/commands/sys.js +1 -18
- package/dist/core/activity-signal.js +2 -38
- package/dist/core/asset-root.js +1 -18
- package/dist/core/auth-file.js +2 -179
- package/dist/core/auth-interaction.js +3 -94
- package/dist/core/auto-update.js +4 -94
- package/dist/core/bash-guard.js +11 -393
- package/dist/core/bash-jobs.js +7 -411
- package/dist/core/bootstrap.js +2 -53
- package/dist/core/broker-client/client.js +1 -184
- package/dist/core/broker-client/index.js +1 -13
- package/dist/core/broker-client/transport-relay.js +1 -157
- package/dist/core/broker-client/transport-socket.js +1 -179
- package/dist/core/broker-client/transport.js +1 -26
- package/dist/core/canvas/attention.js +1 -47
- package/dist/core/canvas/boot-id.js +1 -26
- package/dist/core/canvas/boot.js +1 -186
- package/dist/core/canvas/browse/app.js +3 -919
- package/dist/core/canvas/browse/model.js +1 -477
- package/dist/core/canvas/browse/pins.js +1 -29
- package/dist/core/canvas/browse/render.js +3 -1055
- package/dist/core/canvas/canvas.js +15 -922
- package/dist/core/canvas/crons.js +11 -481
- package/dist/core/canvas/daemon-owner.js +2 -146
- package/dist/core/canvas/db.js +2 -100
- package/dist/core/canvas/deliveries.js +22 -283
- package/dist/core/canvas/delivery-contract.js +1 -8
- package/dist/core/canvas/executions.js +1 -68
- package/dist/core/canvas/extensions.js +1 -83
- package/dist/core/canvas/focuses.js +1 -77
- package/dist/core/canvas/history.js +24 -860
- package/dist/core/canvas/index.js +1 -15
- package/dist/core/canvas/install-id.js +1 -84
- package/dist/core/canvas/labels.js +1 -43
- package/dist/core/canvas/meta-file.js +1 -89
- package/dist/core/canvas/migrations.js +41 -1150
- package/dist/core/canvas/nav-model.js +1 -231
- package/dist/core/canvas/nav-render.js +1 -260
- package/dist/core/canvas/node-order.js +1 -37
- package/dist/core/canvas/node-recap.js +2 -67
- package/dist/core/canvas/node-sql-migration.js +2 -209
- package/dist/core/canvas/paths.js +1 -153
- package/dist/core/canvas/pid.js +4 -683
- package/dist/core/canvas/recovery.js +3 -565
- package/dist/core/canvas/remote-canvas-source.js +1 -288
- package/dist/core/canvas/remote-transport.js +1 -57
- package/dist/core/canvas/render-source.js +10 -635
- package/dist/core/canvas/sessions.js +1 -78
- package/dist/core/canvas/source.js +1 -47
- package/dist/core/canvas/status-glyph.js +1 -132
- package/dist/core/canvas/telemetry.js +1 -35
- package/dist/core/canvas/types.js +1 -6
- package/dist/core/canvas/waits.js +4 -68
- package/dist/core/canvas/worktrees.js +1 -93
- package/dist/core/clipboard-text.js +1 -57
- package/dist/core/command-hooks/artifact.js +1 -145
- package/dist/core/command-hooks/catalog.js +1 -38
- package/dist/core/command-hooks/compose.js +1 -99
- package/dist/core/command-hooks/discovery.js +1 -228
- package/dist/core/command-hooks/help.js +1 -18
- package/dist/core/command-hooks/index.js +1 -7
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
- package/dist/core/command-hooks/lifecycle-create.js +1 -51
- package/dist/core/command-hooks/report.js +1 -28
- package/dist/core/command-hooks/schema.js +1 -157
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
- package/dist/core/command-manifests/manifest.js +1 -324
- package/dist/core/command-manifests/registry.js +1 -118
- package/dist/core/command-manifests/schema.js +1 -736
- package/dist/core/command-plugins/bundle.js +1 -261
- package/dist/core/command-plugins/compose.js +1 -65
- package/dist/core/command-plugins/discovery.js +1 -245
- package/dist/core/command-plugins/endpoint.js +1 -48
- package/dist/core/command-plugins/extensions.js +1 -166
- package/dist/core/command-plugins/help-addenda.js +1 -44
- package/dist/core/command-plugins/presence.js +1 -17
- package/dist/core/command-plugins/revalidate.js +2 -152
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
- package/dist/core/command-plugins/transport/http-fetch.js +1 -68
- package/dist/core/command-plugins/transport/http-invoke.js +3 -546
- package/dist/core/command.js +10 -739
- package/dist/core/config.js +1 -1059
- package/dist/core/document-lines.js +3 -6
- package/dist/core/env-name.js +1 -9
- package/dist/core/errors.js +1 -52
- package/dist/core/events/emit.js +1 -17
- package/dist/core/events/envelope.js +1 -84
- package/dist/core/events/errors.js +1 -69
- package/dist/core/events/index.js +1 -4
- package/dist/core/events/operation-id.js +1 -24
- package/dist/core/events/read.js +1 -623
- package/dist/core/events/serialize.js +1 -199
- package/dist/core/events/source.js +1 -31
- package/dist/core/events/types.js +1 -11
- package/dist/core/exclusive-lock.js +1 -197
- package/dist/core/fault-classifier.js +1 -96
- package/dist/core/feed/feed.js +7 -202
- package/dist/core/feed/inbox-migrate.js +3 -135
- package/dist/core/feed/inbox.js +10 -122
- package/dist/core/feed/messages.js +6 -212
- package/dist/core/frontmatter.js +1 -35
- package/dist/core/fs-utils.js +3 -202
- package/dist/core/git.js +2 -103
- package/dist/core/help.js +9 -310
- package/dist/core/host-exports/builtins.js +9 -68
- package/dist/core/host-exports/export.js +3 -124
- package/dist/core/human/action-binding.js +1 -40
- package/dist/core/human/answer-text.js +5 -100
- package/dist/core/human/answer.js +1 -119
- package/dist/core/human/claim.js +3 -67
- package/dist/core/human/completion.js +1 -27
- package/dist/core/human/component-docs.js +78 -272
- package/dist/core/human/convention.js +2 -82
- package/dist/core/human/feedback-companion.js +1 -106
- package/dist/core/human/feedback.js +1 -88
- package/dist/core/human/page-authoring.js +1 -19
- package/dist/core/human/page-catalog.js +1 -172
- package/dist/core/human/page-errors.js +1 -7
- package/dist/core/human/page-eval.js +1 -125
- package/dist/core/human/page-html-markdown.js +8 -260
- package/dist/core/human/page-markdown.js +17 -295
- package/dist/core/human/page-schema.js +1 -373
- package/dist/core/human/page-synth.js +8 -27
- package/dist/core/human/page.js +1 -198
- package/dist/core/human/requests.js +15 -466
- package/dist/core/human/review-schema.js +1 -34
- package/dist/core/human/root.js +1 -11
- package/dist/core/human/scan.js +1 -69
- package/dist/core/human/summary.js +1 -5
- package/dist/core/human/tickets.js +1 -171
- package/dist/core/human/types.js +0 -1
- package/dist/core/human/visible-paths.js +1 -77
- package/dist/core/human-actions.js +1 -101
- package/dist/core/inspector/chrome.js +1 -14
- package/dist/core/inspector/contract.js +0 -1
- package/dist/core/inspector/core.js +2 -295
- package/dist/core/inspector/host.js +4 -538
- package/dist/core/inspector/model.js +2 -226
- package/dist/core/inspector/text.js +6 -45
- package/dist/core/inspector/transport.js +1 -36
- package/dist/core/inspector/tui.js +2 -295
- package/dist/core/installed-plugins.js +1 -78
- package/dist/core/io.js +7 -356
- package/dist/core/keybindings/attach-control.js +1 -42
- package/dist/core/keybindings/background-bash.js +1 -33
- package/dist/core/keybindings/catalog.js +1 -256
- package/dist/core/keybindings/inbox.js +1 -25
- package/dist/core/keybindings/index.js +1 -7
- package/dist/core/keybindings/match.js +1 -127
- package/dist/core/keybindings/persistence.js +1 -49
- package/dist/core/keybindings/resolve.js +1 -348
- package/dist/core/keybindings/types.js +0 -1
- package/dist/core/locked-file.js +1 -118
- package/dist/core/log.js +3 -27
- package/dist/core/manifest-recovery.js +1 -72
- package/dist/core/manifest-stale.js +1 -39
- package/dist/core/manifest.js +1 -20
- package/dist/core/memory/doc-link-grammar.js +2 -109
- package/dist/core/memory/extensions.js +1 -221
- package/dist/core/memory/history.js +6 -268
- package/dist/core/memory/identity.js +1 -181
- package/dist/core/memory/inline-ref-grammar.js +1 -98
- package/dist/core/memory/inline-ref-guidance.js +2 -35
- package/dist/core/memory/inline-ref-inventory.js +1 -59
- package/dist/core/memory/lint.js +2 -671
- package/dist/core/memory/project-namespace.js +2 -85
- package/dist/core/memory/repository-association.js +1 -129
- package/dist/core/memory/tree.js +1 -93
- package/dist/core/memory-resolver.js +2 -611
- package/dist/core/model-config.js +1 -107
- package/dist/core/model-routes.js +1 -201
- package/dist/core/nested-stores.js +2 -166
- package/dist/core/output.js +7 -99
- package/dist/core/pagination.js +1 -88
- package/dist/core/plugin-swap-lock.js +1 -31
- package/dist/core/pool-credential-store.js +1 -116
- package/dist/core/predicate.js +1 -191
- package/dist/core/preview-registry.js +2 -411
- package/dist/core/preview-result-path.js +1 -26
- package/dist/core/profiles/default-binding.js +1 -24
- package/dist/core/profiles/deletion-reservation.js +1 -42
- package/dist/core/profiles/env-store.js +2 -162
- package/dist/core/profiles/fuzzy-match.js +1 -92
- package/dist/core/profiles/manifest.js +1 -574
- package/dist/core/profiles/select.js +35 -741
- package/dist/core/profiles/state-block.js +3 -17
- package/dist/core/provider-error-recognition.js +1 -74
- package/dist/core/provider-failure.js +1 -86
- package/dist/core/provider-management.js +1 -22
- package/dist/core/remote-canvas-target.js +1 -30
- package/dist/core/render.js +18 -138
- package/dist/core/resolver.js +1 -111
- package/dist/core/review/birth.js +1 -52
- package/dist/core/review/comments.js +5 -279
- package/dist/core/review/companion.js +1 -215
- package/dist/core/review/document.js +2 -138
- package/dist/core/review/project.js +1 -36
- package/dist/core/review/realize.js +1 -71
- package/dist/core/review/remap.js +4 -141
- package/dist/core/review/signal.js +1 -12
- package/dist/core/review/stage.js +1 -184
- package/dist/core/review/store.js +1 -168
- package/dist/core/review/types.js +1 -23
- package/dist/core/runtime/advertised-command-invocation.js +1 -233
- package/dist/core/runtime/auth-reload.js +1 -67
- package/dist/core/runtime/banner.js +1 -51
- package/dist/core/runtime/bearings-render.js +18 -250
- package/dist/core/runtime/bearings.js +7 -194
- package/dist/core/runtime/bin-contributions.js +2 -186
- package/dist/core/runtime/boot-root.js +1 -107
- package/dist/core/runtime/branded-host.js +2 -264
- package/dist/core/runtime/broker/auth-reload.js +1 -157
- package/dist/core/runtime/broker/client-registry.js +1 -179
- package/dist/core/runtime/broker/daemon-ops.js +1 -88
- package/dist/core/runtime/broker/engine-drive.js +1 -354
- package/dist/core/runtime/broker/engine-routing.js +1 -211
- package/dist/core/runtime/broker/event-projection.js +1 -193
- package/dist/core/runtime/broker/extension-abort.js +1 -36
- package/dist/core/runtime/broker/fault-retry.js +1 -588
- package/dist/core/runtime/broker/frame-client.js +1 -132
- package/dist/core/runtime/broker/frame-dispatch.js +1 -183
- package/dist/core/runtime/broker/frame-engine-control.js +1 -231
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
- package/dist/core/runtime/broker/frame-model-query.js +1 -69
- package/dist/core/runtime/broker/frame-read.js +1 -116
- package/dist/core/runtime/broker/frame-replies.js +1 -64
- package/dist/core/runtime/broker/frame-session.js +4 -203
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
- package/dist/core/runtime/broker/inbox.js +13 -163
- package/dist/core/runtime/broker/node-named.js +1 -27
- package/dist/core/runtime/broker/read-ops.js +1 -171
- package/dist/core/runtime/broker/rebind.js +1 -318
- package/dist/core/runtime/broker/tool-groups.js +1 -246
- package/dist/core/runtime/broker/turn-admission.js +1 -31
- package/dist/core/runtime/broker/turn-ignition.js +1 -84
- package/dist/core/runtime/broker-cli.js +3 -81
- package/dist/core/runtime/broker-extension-render.js +5 -135
- package/dist/core/runtime/broker-inventory.js +1 -116
- package/dist/core/runtime/broker-persona-guidance.js +4 -154
- package/dist/core/runtime/broker-protocol.js +3 -152
- package/dist/core/runtime/broker-request.js +1 -85
- package/dist/core/runtime/broker-sdk.js +1 -129
- package/dist/core/runtime/broker.js +1 -1214
- package/dist/core/runtime/canvas-extensions.js +1 -96
- package/dist/core/runtime/chat-inventory-rows.js +1 -105
- package/dist/core/runtime/close.js +1 -265
- package/dist/core/runtime/command-expansion.js +9 -104
- package/dist/core/runtime/command-surface.js +1 -117
- package/dist/core/runtime/connectivity.js +1 -73
- package/dist/core/runtime/deliver-live.js +1 -88
- package/dist/core/runtime/fault-recovery.js +1 -83
- package/dist/core/runtime/fault.js +1 -17
- package/dist/core/runtime/fleet.js +1 -58
- package/dist/core/runtime/front-door-env.js +1 -16
- package/dist/core/runtime/front-door.js +7 -183
- package/dist/core/runtime/headless-pi.js +1 -161
- package/dist/core/runtime/host.js +1 -457
- package/dist/core/runtime/interactive-deliver.js +1 -51
- package/dist/core/runtime/invocation.js +0 -10
- package/dist/core/runtime/kickoff.js +30 -327
- package/dist/core/runtime/launch-config-worker.js +1 -12
- package/dist/core/runtime/launch-prompt.js +4 -13
- package/dist/core/runtime/launch-target.js +1 -55
- package/dist/core/runtime/launch.js +1 -483
- package/dist/core/runtime/lifecycle.js +2 -213
- package/dist/core/runtime/managed-provider-cooling.js +1 -62
- package/dist/core/runtime/memory.js +1 -17
- package/dist/core/runtime/model-registry.js +1 -13
- package/dist/core/runtime/model-selection.js +1 -135
- package/dist/core/runtime/model-swap.js +1 -86
- package/dist/core/runtime/naming.js +14 -298
- package/dist/core/runtime/nerd-font.js +2 -127
- package/dist/core/runtime/node-read.js +2 -386
- package/dist/core/runtime/nodes.js +1 -331
- package/dist/core/runtime/outcome-document.js +1 -97
- package/dist/core/runtime/package-health.js +4 -99
- package/dist/core/runtime/persona.js +2 -55
- package/dist/core/runtime/pi-cli.js +1 -65
- package/dist/core/runtime/pi-vendored.js +1 -66
- package/dist/core/runtime/placement-tmux.js +1 -81
- package/dist/core/runtime/placement.js +1 -386
- package/dist/core/runtime/promote.js +1 -174
- package/dist/core/runtime/prospective-inventory-cli.js +3 -61
- package/dist/core/runtime/prospective-inventory.js +2 -88
- package/dist/core/runtime/recap.js +27 -103
- package/dist/core/runtime/recycle.js +1 -190
- package/dist/core/runtime/reopen.js +1 -138
- package/dist/core/runtime/reset.js +1 -245
- package/dist/core/runtime/resume-root.js +10 -290
- package/dist/core/runtime/revive-all.js +1 -107
- package/dist/core/runtime/revive.js +4 -544
- package/dist/core/runtime/roadmap.js +4 -38
- package/dist/core/runtime/session-branch.js +1 -46
- package/dist/core/runtime/session-cycles.js +1 -110
- package/dist/core/runtime/session-list-cache.js +1 -406
- package/dist/core/runtime/session-visibility.js +1 -99
- package/dist/core/runtime/shell-expansion.js +9 -100
- package/dist/core/runtime/situational-context.js +2 -67
- package/dist/core/runtime/situational-live.js +1 -41
- package/dist/core/runtime/spawn-env.js +1 -255
- package/dist/core/runtime/spawn.js +3 -577
- package/dist/core/runtime/stamp/channel.js +1 -76
- package/dist/core/runtime/stamp/protocol.js +1 -113
- package/dist/core/runtime/stop-guard.js +7 -116
- package/dist/core/runtime/stop-signals.js +1 -46
- package/dist/core/runtime/stream-watchdog.js +1 -134
- package/dist/core/runtime/structured-output.js +4 -156
- package/dist/core/runtime/surface-bg.js +1 -85
- package/dist/core/runtime/tmux-bindings.js +4 -730
- package/dist/core/runtime/tmux-chrome.js +1 -5
- package/dist/core/runtime/tmux-driver.js +7 -637
- package/dist/core/runtime/tool-group-summary.js +6 -85
- package/dist/core/runtime/turn-visibility.js +1 -31
- package/dist/core/runtime/view-socket.js +1 -83
- package/dist/core/runtime/warm-pool.js +1 -395
- package/dist/core/scope.js +1 -254
- package/dist/core/scoped-state/db.js +1 -135
- package/dist/core/scoped-state/migrate.js +3 -181
- package/dist/core/scoped-state/paths.js +1 -27
- package/dist/core/scoped-state/profiles.js +1 -62
- package/dist/core/scoped-state/providers.js +1 -8
- package/dist/core/scoped-state/schema.js +3 -16
- package/dist/core/scoped-state/settings.js +1 -82
- package/dist/core/secrets.js +2 -55
- package/dist/core/self-update.js +1 -71
- package/dist/core/session-model/session-state.js +1 -180
- package/dist/core/shell-segments.js +4 -169
- package/dist/core/spawn.js +1 -26
- package/dist/core/stdout-errors.js +1 -14
- package/dist/core/subscription-state.js +3 -193
- package/dist/core/substrate/frontmatter-validation.js +1 -105
- package/dist/core/substrate/gate-explain.js +1 -424
- package/dist/core/substrate/gate.js +1 -26
- package/dist/core/substrate/index.js +1 -30
- package/dist/core/substrate/injected-store.js +1 -249
- package/dist/core/substrate/listings.js +1 -115
- package/dist/core/substrate/on-read-node.js +1 -36
- package/dist/core/substrate/on-read.js +9 -315
- package/dist/core/substrate/plan.js +1 -266
- package/dist/core/substrate/render-node.js +1 -30
- package/dist/core/substrate/render.js +65 -689
- package/dist/core/substrate/schema.js +1 -186
- package/dist/core/substrate/session-cache.js +1 -83
- package/dist/core/substrate/subject-fields.js +1 -35
- package/dist/core/substrate/subject.js +1 -47
- package/dist/core/substrate/surface-match.js +1 -242
- package/dist/core/termrender/code-doc.js +5 -92
- package/dist/core/termrender/display.js +2 -56
- package/dist/core/termrender/termrender.js +14 -719
- package/dist/core/termrender/version.js +1 -1
- package/dist/core/timing.js +2 -94
- package/dist/core/tui/draw.js +2 -378
- package/dist/core/tui/fuzzy.js +1 -38
- package/dist/core/tui/markdown.js +3 -407
- package/dist/core/tui/page-host.js +1 -74
- package/dist/core/tui/panel.js +1 -137
- package/dist/core/tui/terminal.js +2 -100
- package/dist/core/user-settings.js +1 -454
- package/dist/core/wake.js +1 -296
- package/dist/core/worktree-close.js +6 -228
- package/dist/core/worktree-containment.js +3 -48
- package/dist/core/worktree-landing.js +4 -56
- package/dist/core/worktree-mutation-async.js +10 -280
- package/dist/core/worktree-quarantine.js +1 -54
- package/dist/core/worktree-sweep.js +6 -453
- package/dist/core/worktree.js +18 -899
- package/dist/daemon/api/bridge.js +8 -418
- package/dist/daemon/api/handlers/attach.js +1 -65
- package/dist/daemon/api/handlers/bash-jobs.js +2 -91
- package/dist/daemon/api/handlers/broker-ops.js +1 -447
- package/dist/daemon/api/handlers/broker-recovery.js +1 -251
- package/dist/daemon/api/handlers/canvas.js +6 -490
- package/dist/daemon/api/handlers/chat-inventory.js +1 -25
- package/dist/daemon/api/handlers/crons.js +1 -373
- package/dist/daemon/api/handlers/daemon.js +1 -76
- package/dist/daemon/api/handlers/feedback-comments.js +3 -199
- package/dist/daemon/api/handlers/files.js +1 -63
- package/dist/daemon/api/handlers/focus.js +1 -92
- package/dist/daemon/api/handlers/health.js +1 -76
- package/dist/daemon/api/handlers/human-requests.js +1 -379
- package/dist/daemon/api/handlers/human.js +1 -3
- package/dist/daemon/api/handlers/inbox-page.js +1 -89
- package/dist/daemon/api/handlers/inbox.js +1 -301
- package/dist/daemon/api/handlers/memory.js +1 -50
- package/dist/daemon/api/handlers/messages.js +2 -506
- package/dist/daemon/api/handlers/model-config.js +1 -44
- package/dist/daemon/api/handlers/modelauth.js +1 -165
- package/dist/daemon/api/handlers/node-outcomes.js +1 -181
- package/dist/daemon/api/handlers/nodes.js +1 -939
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +6 -4
- package/runtime.lock.json +5 -5
- package/scripts/pack-minify.mjs +108 -0
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
// Run with: node --import tsx/esm --test src/core/runtime/__tests__/spawn-env.test.ts
|
|
2
|
-
//
|
|
3
|
-
// Regression lock for the C-1 spawn-env boundary (`../spawn-env.ts`): the
|
|
4
|
-
// broker child env is CONSTRUCTED from a default-deny allowlist, never
|
|
5
|
-
// inherited via `{ ...process.env }`. Each case below reproduces one clause of
|
|
6
|
-
// the contract so a future edit that re-opens the leak (or re-admits `GIT_*`
|
|
7
|
-
// / a credentialed proxy, or resolves `spawnEnv.allow` from the wrong scope)
|
|
8
|
-
// fails loud here instead of silently in prod.
|
|
9
|
-
import { test, before, after, beforeEach, afterEach } from 'node:test';
|
|
10
|
-
import assert from 'node:assert/strict';
|
|
11
|
-
import { mkdtempSync, mkdirSync, rmSync, writeFileSync, realpathSync } from 'node:fs';
|
|
12
|
-
import { tmpdir } from 'node:os';
|
|
13
|
-
import { join } from 'node:path';
|
|
14
|
-
import { resetScopeCache } from '../../scope.js';
|
|
15
|
-
import { readMergedLaunchConfig, writeRawConfig, updateConfigAtRoot } from '../../config.js';
|
|
16
|
-
import { createProfile, profileRoot } from '../../profiles/manifest.js';
|
|
17
|
-
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
18
|
-
import { buildOperationalEnvBase, buildBrokerEnv } from '../spawn-env.js';
|
|
19
|
-
const LEAK_CLASS_HOST_ENV = {
|
|
20
|
-
HOME: '/Users/tester',
|
|
21
|
-
PATH: '/usr/bin:/bin',
|
|
22
|
-
LANG: 'en_US.UTF-8',
|
|
23
|
-
XDG_CONFIG_HOME: '/Users/tester/.config',
|
|
24
|
-
PI_CODING_AGENT_DIR: '/Users/tester/.pi',
|
|
25
|
-
// The C-1 leak class: ambient third-party credentials that must never cross.
|
|
26
|
-
MISTRAL_API_KEY: 'fake-m',
|
|
27
|
-
GOOGLE_GENERATIVE_AI_API_KEY: 'fake-g',
|
|
28
|
-
GITHUB_TOKEN: 'fake-gh',
|
|
29
|
-
AWS_ACCESS_KEY_ID: 'fake-aws-id',
|
|
30
|
-
AWS_SECRET_ACCESS_KEY: 'fake-aws-secret',
|
|
31
|
-
// The GIT_* injection surface.
|
|
32
|
-
GIT_CONFIG_KEY_0: 'http.https://x.insteadof',
|
|
33
|
-
GIT_ASKPASS: '/tmp/fake-askpass',
|
|
34
|
-
// Proxy: one credentialed (must drop), one plain (must keep).
|
|
35
|
-
HTTP_PROXY: 'http://baduser:badpass@proxy.corp:3128',
|
|
36
|
-
HTTPS_PROXY: 'http://proxy.corp:3128',
|
|
37
|
-
NO_PROXY: 'localhost,127.0.0.1',
|
|
38
|
-
// Configured model-provider keys (source B).
|
|
39
|
-
ANTHROPIC_API_KEY: 'fake-anthropic',
|
|
40
|
-
OPENAI_API_KEY: 'fake-openai',
|
|
41
|
-
};
|
|
42
|
-
/** Ambient-scope helper: most cases below don't care about `spawnEnv.allow`
|
|
43
|
-
* scoping (source C), so they resolve against whatever cwd/profile is live
|
|
44
|
-
* when they run (an isolated empty scope by construction of `beforeEach`
|
|
45
|
-
* below) rather than repeating `{ targetCwd, targetProfileId }` at each
|
|
46
|
-
* call site. */
|
|
47
|
-
function base(host) {
|
|
48
|
-
return buildOperationalEnvBase({ targetCwd: process.cwd(), targetProfileId: null, host });
|
|
49
|
-
}
|
|
50
|
-
// --- every case needs an isolated scope root so the repo's own
|
|
51
|
-
// .crouter/config.json (which declares no spawnEnv) never masks a test, and
|
|
52
|
-
// so `spawnEnv.allow` config can be planted per-test without cross-talk.
|
|
53
|
-
let isolatedHome;
|
|
54
|
-
let isolatedCwd;
|
|
55
|
-
let prevHome;
|
|
56
|
-
let prevCwd;
|
|
57
|
-
before(() => {
|
|
58
|
-
prevHome = process.env.HOME;
|
|
59
|
-
prevCwd = process.cwd();
|
|
60
|
-
});
|
|
61
|
-
beforeEach(() => {
|
|
62
|
-
isolatedHome = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-home-')));
|
|
63
|
-
isolatedCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-cwd-')));
|
|
64
|
-
process.env.HOME = isolatedHome;
|
|
65
|
-
process.chdir(isolatedCwd);
|
|
66
|
-
initializeFreshScopedStore({ kind: 'user', root: join(isolatedHome, '.crouter') });
|
|
67
|
-
resetScopeCache();
|
|
68
|
-
});
|
|
69
|
-
afterEach(() => {
|
|
70
|
-
rmSync(isolatedHome, { recursive: true, force: true });
|
|
71
|
-
rmSync(isolatedCwd, { recursive: true, force: true });
|
|
72
|
-
});
|
|
73
|
-
after(() => {
|
|
74
|
-
process.chdir(prevCwd);
|
|
75
|
-
if (prevHome === undefined)
|
|
76
|
-
delete process.env.HOME;
|
|
77
|
-
else
|
|
78
|
-
process.env.HOME = prevHome;
|
|
79
|
-
resetScopeCache();
|
|
80
|
-
});
|
|
81
|
-
test('A1: literal operational names and non-secret prefixes cross verbatim', () => {
|
|
82
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
83
|
-
assert.equal(env.HOME, '/Users/tester');
|
|
84
|
-
assert.equal(env.PATH, '/usr/bin:/bin');
|
|
85
|
-
assert.equal(env.LANG, 'en_US.UTF-8');
|
|
86
|
-
assert.equal(env.XDG_CONFIG_HOME, '/Users/tester/.config');
|
|
87
|
-
assert.equal(env.PI_CODING_AGENT_DIR, '/Users/tester/.pi');
|
|
88
|
-
});
|
|
89
|
-
test('leak-class ambient credentials are dropped', () => {
|
|
90
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
91
|
-
assert.equal(env.MISTRAL_API_KEY, undefined);
|
|
92
|
-
assert.equal(env.GOOGLE_GENERATIVE_AI_API_KEY, undefined);
|
|
93
|
-
assert.equal(env.GITHUB_TOKEN, undefined);
|
|
94
|
-
assert.equal(env.AWS_ACCESS_KEY_ID, undefined);
|
|
95
|
-
assert.equal(env.AWS_SECRET_ACCESS_KEY, undefined);
|
|
96
|
-
});
|
|
97
|
-
test('GIT_* is dropped in full — no default admits any GIT_ variable', () => {
|
|
98
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
99
|
-
assert.equal(env.GIT_CONFIG_KEY_0, undefined);
|
|
100
|
-
assert.equal(env.GIT_ASKPASS, undefined);
|
|
101
|
-
assert.equal(Object.keys(env).some((k) => k.startsWith('GIT_')), false);
|
|
102
|
-
});
|
|
103
|
-
test('B: configured model-provider keys cross by exact name', () => {
|
|
104
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
105
|
-
assert.equal(env.ANTHROPIC_API_KEY, 'fake-anthropic');
|
|
106
|
-
assert.equal(env.OPENAI_API_KEY, 'fake-openai');
|
|
107
|
-
});
|
|
108
|
-
// A2 — proxy userinfo guard (Major 1 fix): must reject username-only,
|
|
109
|
-
// password-only, and scheme-less userinfo, for BOTH uppercase and lowercase
|
|
110
|
-
// var names; must keep a plain proxy URL, for both cases; NO_PROXY always
|
|
111
|
-
// keeps.
|
|
112
|
-
test('A2: a credentialed proxy URL is dropped, a plain one crosses (uppercase)', () => {
|
|
113
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
114
|
-
assert.equal(env.HTTP_PROXY, undefined, 'userinfo-bearing proxy must not cross');
|
|
115
|
-
assert.equal(env.HTTPS_PROXY, 'http://proxy.corp:3128', 'plain proxy crosses untouched');
|
|
116
|
-
assert.equal(env.NO_PROXY, 'localhost,127.0.0.1');
|
|
117
|
-
});
|
|
118
|
-
test('A2: password-only proxy authority is dropped (http://:pass@host)', () => {
|
|
119
|
-
const env = base({ HTTP_PROXY: 'http://:badpass@proxy.corp:3128' });
|
|
120
|
-
assert.equal(env.HTTP_PROXY, undefined, 'a naive `username === \'\'` check would wrongly admit this');
|
|
121
|
-
});
|
|
122
|
-
test('A2: username-only proxy authority is dropped (http://user@host)', () => {
|
|
123
|
-
const env = base({ HTTP_PROXY: 'http://baduser@proxy.corp:3128' });
|
|
124
|
-
assert.equal(env.HTTP_PROXY, undefined);
|
|
125
|
-
});
|
|
126
|
-
test('A2: scheme-less userinfo is dropped, not silently normalized then admitted', () => {
|
|
127
|
-
// `new URL('user:pass@proxy.corp:3128')` parses "user" as a CUSTOM scheme
|
|
128
|
-
// with empty username/password — the exact hole the naive check missed.
|
|
129
|
-
const env = base({ HTTP_PROXY: 'user:pass@proxy.corp:3128' });
|
|
130
|
-
assert.equal(env.HTTP_PROXY, undefined);
|
|
131
|
-
});
|
|
132
|
-
test('A2: lowercase proxy vars get the same guard — credentialed drops, plain keeps', () => {
|
|
133
|
-
const env = base({
|
|
134
|
-
http_proxy: 'http://baduser:badpass@proxy.corp:3128',
|
|
135
|
-
https_proxy: 'http://proxy.corp:3128',
|
|
136
|
-
no_proxy: 'localhost',
|
|
137
|
-
});
|
|
138
|
-
assert.equal(env.http_proxy, undefined, 'lowercase credentialed proxy must not cross');
|
|
139
|
-
assert.equal(env.https_proxy, 'http://proxy.corp:3128', 'lowercase plain proxy crosses');
|
|
140
|
-
assert.equal(env.no_proxy, 'localhost');
|
|
141
|
-
});
|
|
142
|
-
test('A2: a non-http(s) scheme or hostless value is dropped, never admitted', () => {
|
|
143
|
-
const env = base({ HTTP_PROXY: 'not a url at all' });
|
|
144
|
-
assert.equal(env.HTTP_PROXY, undefined);
|
|
145
|
-
});
|
|
146
|
-
// buildBrokerEnv: overlay + drop the leak class through the real process.env
|
|
147
|
-
// path.
|
|
148
|
-
test('buildBrokerEnv overlays inv.env + FRONT_DOOR_ENV on top of the sanitized base, and drops the leak class', () => {
|
|
149
|
-
const inv = {
|
|
150
|
-
argv: [],
|
|
151
|
-
env: { CRTR_NODE_ID: 'n1', CRTR_CONTEXT_DIR: '/ctx', CRTR_NODE_CWD: isolatedCwd, CRTR_PROFILE_ID: '' },
|
|
152
|
-
};
|
|
153
|
-
// Mutate individual keys and delete them back out afterward — NEVER
|
|
154
|
-
// reassign `process.env` wholesale (`process.env = {...}`), which detaches
|
|
155
|
-
// it from the real OS environment binding (e.g. breaks `os.homedir()` for
|
|
156
|
-
// every test that runs after it in this same process).
|
|
157
|
-
try {
|
|
158
|
-
process.env.MISTRAL_API_KEY = 'fake-m';
|
|
159
|
-
process.env.GIT_ASKPASS = '/tmp/fake-askpass';
|
|
160
|
-
const env = buildBrokerEnv(inv);
|
|
161
|
-
assert.equal(env.CRTR_NODE_ID, 'n1', 'trusted inv.env overlay present');
|
|
162
|
-
assert.equal(env.CRTR_CONTEXT_DIR, '/ctx');
|
|
163
|
-
assert.equal(env.CRTR_FRONT_DOOR, '1', 'fork-bomb recursion guard set');
|
|
164
|
-
assert.equal(env.MISTRAL_API_KEY, undefined, 'ambient leak class still absent through the real process.env path');
|
|
165
|
-
assert.equal(env.GIT_ASKPASS, undefined, 'GIT_* still absent through the real process.env path');
|
|
166
|
-
}
|
|
167
|
-
finally {
|
|
168
|
-
delete process.env.MISTRAL_API_KEY;
|
|
169
|
-
delete process.env.GIT_ASKPASS;
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
// C — explicit spawnEnv.allow escape hatch: literal names + globs.
|
|
173
|
-
test('C: an explicit spawnEnv.allow literal name admits a var that would otherwise be dropped', () => {
|
|
174
|
-
writeRawConfig('user', { spawnEnv: { allow: ['GOOGLE_GENERATIVE_AI_API_KEY'] } });
|
|
175
|
-
resetScopeCache();
|
|
176
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
177
|
-
assert.equal(env.GOOGLE_GENERATIVE_AI_API_KEY, 'fake-g', 'explicitly allowlisted name now crosses');
|
|
178
|
-
assert.equal(env.MISTRAL_API_KEY, undefined, 'every other leak-class name stays absent — the hatch is scoped, not a blanket reopen');
|
|
179
|
-
assert.equal(env.GIT_ASKPASS, undefined);
|
|
180
|
-
});
|
|
181
|
-
test('C (glob, Minor fix): AWS_* admits only AWS_-prefixed names, nothing else', () => {
|
|
182
|
-
writeRawConfig('user', { spawnEnv: { allow: ['AWS_*'] } });
|
|
183
|
-
resetScopeCache();
|
|
184
|
-
const env = base(LEAK_CLASS_HOST_ENV);
|
|
185
|
-
assert.equal(env.AWS_ACCESS_KEY_ID, 'fake-aws-id', 'AWS_-prefixed name admitted by the glob');
|
|
186
|
-
assert.equal(env.AWS_SECRET_ACCESS_KEY, 'fake-aws-secret', 'a second AWS_-prefixed name is also admitted');
|
|
187
|
-
assert.equal(env.MISTRAL_API_KEY, undefined, 'the glob must not admit unrelated names');
|
|
188
|
-
assert.equal(env.GIT_ASKPASS, undefined);
|
|
189
|
-
});
|
|
190
|
-
test('C (glob, Minor fix): a bare "*" (inherit-all) is rejected loud at config read, not silently accepted or dropped', () => {
|
|
191
|
-
mkdirSync(join(isolatedCwd, '.crouter'), { recursive: true });
|
|
192
|
-
writeFileSync(join(isolatedCwd, '.crouter', 'config.json'), JSON.stringify({ spawnEnv: { allow: ['*'] } }));
|
|
193
|
-
resetScopeCache();
|
|
194
|
-
assert.throws(() => readMergedLaunchConfig(isolatedCwd, null), /matches every env var name/, 'a bare "*" must fail loud at config read, per cto-rejects-fallback-hedges — never silently literal, never silently dropped');
|
|
195
|
-
});
|
|
196
|
-
// Major 2 fix — spawnEnv.allow resolves from the TARGET's own cwd/profile,
|
|
197
|
-
// never the calling/launcher process's ambient scope.
|
|
198
|
-
test('target-scope: spawnEnv.allow is read from the TARGET cwd, not process.cwd() (the ambient/launcher cwd)', () => {
|
|
199
|
-
const launcherCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-launcher-')));
|
|
200
|
-
const targetCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-target-')));
|
|
201
|
-
try {
|
|
202
|
-
// The LAUNCHER's own cwd declares an allowlist entry — this must NOT leak
|
|
203
|
-
// into a target with a different cwd (the verified C-1 follow-up leak:
|
|
204
|
-
// "a broker for target cwd B admitted AWS_ACCESS_KEY_ID solely because
|
|
205
|
-
// the launcher cwd A had it in spawnEnv.allow").
|
|
206
|
-
mkdirSync(join(launcherCwd, '.crouter'), { recursive: true });
|
|
207
|
-
writeFileSync(join(launcherCwd, '.crouter', 'config.json'), JSON.stringify({ spawnEnv: { allow: ['AWS_ACCESS_KEY_ID'] } }));
|
|
208
|
-
process.chdir(launcherCwd); // simulate: ambient process.cwd() is the LAUNCHER's, not the target's
|
|
209
|
-
resetScopeCache();
|
|
210
|
-
const envAgainstUnrelatedTarget = buildOperationalEnvBase({ targetCwd, targetProfileId: null, host: LEAK_CLASS_HOST_ENV });
|
|
211
|
-
assert.equal(envAgainstUnrelatedTarget.AWS_ACCESS_KEY_ID, undefined, "the launcher's own cwd allowlist must not admit into an unrelated target");
|
|
212
|
-
// Now give the TARGET's own cwd the allow entry instead (ambient
|
|
213
|
-
// process.cwd() is STILL the launcher's — unchanged) and confirm it takes
|
|
214
|
-
// effect purely because it is the passed target scope.
|
|
215
|
-
mkdirSync(join(targetCwd, '.crouter'), { recursive: true });
|
|
216
|
-
writeFileSync(join(targetCwd, '.crouter', 'config.json'), JSON.stringify({ spawnEnv: { allow: ['AWS_ACCESS_KEY_ID'] } }));
|
|
217
|
-
resetScopeCache();
|
|
218
|
-
const envAgainstOwnTarget = buildOperationalEnvBase({ targetCwd, targetProfileId: null, host: LEAK_CLASS_HOST_ENV });
|
|
219
|
-
assert.equal(envAgainstOwnTarget.AWS_ACCESS_KEY_ID, 'fake-aws-id', "the TARGET's own cwd allowlist takes effect regardless of the ambient/launcher cwd");
|
|
220
|
-
}
|
|
221
|
-
finally {
|
|
222
|
-
rmSync(launcherCwd, { recursive: true, force: true });
|
|
223
|
-
rmSync(targetCwd, { recursive: true, force: true });
|
|
224
|
-
resetScopeCache();
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
test('target-scope: buildBrokerEnv resolves spawnEnv.allow from inv.env.CRTR_NODE_CWD (the revive/spawn target), not this process\'s ambient cwd', () => {
|
|
228
|
-
const launcherCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-launcher2-')));
|
|
229
|
-
const targetCwd = realpathSync(mkdtempSync(join(tmpdir(), 'crtr-spawn-env-target2-')));
|
|
230
|
-
try {
|
|
231
|
-
mkdirSync(join(targetCwd, '.crouter'), { recursive: true });
|
|
232
|
-
writeFileSync(join(targetCwd, '.crouter', 'config.json'), JSON.stringify({ spawnEnv: { allow: ['MISTRAL_API_KEY'] } }));
|
|
233
|
-
process.chdir(launcherCwd); // this process's ambient cwd is unrelated to the target — mirrors the daemon reviving a node from its OWN cwd
|
|
234
|
-
resetScopeCache();
|
|
235
|
-
process.env.MISTRAL_API_KEY = 'fake-m';
|
|
236
|
-
try {
|
|
237
|
-
const inv = { argv: [], env: { CRTR_NODE_ID: 'n2', CRTR_NODE_CWD: targetCwd, CRTR_PROFILE_ID: '' } };
|
|
238
|
-
const env = buildBrokerEnv(inv);
|
|
239
|
-
assert.equal(env.MISTRAL_API_KEY, 'fake-m', "the TARGET node's own cwd allowlist (from inv.env.CRTR_NODE_CWD) takes effect on a broker launch — this is what revive/cron-launched spawn goes through");
|
|
240
|
-
}
|
|
241
|
-
finally {
|
|
242
|
-
delete process.env.MISTRAL_API_KEY;
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
finally {
|
|
246
|
-
rmSync(launcherCwd, { recursive: true, force: true });
|
|
247
|
-
rmSync(targetCwd, { recursive: true, force: true });
|
|
248
|
-
resetScopeCache();
|
|
249
|
-
}
|
|
250
|
-
});
|
|
251
|
-
test('target-scope: spawnEnv.allow is read from the TARGET profile id, not this process\'s ambient CRTR_PROFILE_ID', () => {
|
|
252
|
-
const { profileId } = createProfile('test profile');
|
|
253
|
-
updateConfigAtRoot(profileRoot(profileId), (config) => { config.spawnEnv = { allow: ['AWS_ACCESS_KEY_ID'] }; });
|
|
254
|
-
resetScopeCache();
|
|
255
|
-
const withoutTargetProfile = buildOperationalEnvBase({ targetCwd: isolatedCwd, targetProfileId: null, host: LEAK_CLASS_HOST_ENV });
|
|
256
|
-
assert.equal(withoutTargetProfile.AWS_ACCESS_KEY_ID, undefined, 'no profile passed — the profile-scoped allow must not apply');
|
|
257
|
-
const withTargetProfile = buildOperationalEnvBase({ targetCwd: isolatedCwd, targetProfileId: profileId, host: LEAK_CLASS_HOST_ENV });
|
|
258
|
-
assert.equal(withTargetProfile.AWS_ACCESS_KEY_ID, 'fake-aws-id', "passing the TARGET's own profile id resolves that profile's allowlist");
|
|
259
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
// Deliberate, user-approved exception to crouter's standing policy of not using unit tests: glob matching is pure string logic with a large space of near-miss inputs, where a table of real cases is the only economical way to pin behavior, and where BOTH false negatives and false positives are defects.
|
|
2
|
-
//
|
|
3
|
-
// Run: node --conditions=crtr-src --import tsx/esm --test src/core/substrate/__tests__/surface-match-command.test.ts
|
|
4
|
-
import { test } from 'node:test';
|
|
5
|
-
import assert from 'node:assert/strict';
|
|
6
|
-
import { commandDeliveryRung, matchesCommandEntry } from '../surface-match.js';
|
|
7
|
-
const subject = {
|
|
8
|
-
kind: 'developer',
|
|
9
|
-
mode: 'base',
|
|
10
|
-
lifecycle: 'terminal',
|
|
11
|
-
hasManager: false,
|
|
12
|
-
cwd: '/tmp/project',
|
|
13
|
-
scope: 'project',
|
|
14
|
-
orchestration: { depth: 0 },
|
|
15
|
-
profile: null,
|
|
16
|
-
};
|
|
17
|
-
function entry(match, on = 'command', at = 'preview') {
|
|
18
|
-
return { on, at, match };
|
|
19
|
-
}
|
|
20
|
-
test('real command globs match the direct invocation they describe', () => {
|
|
21
|
-
const cases = [
|
|
22
|
-
{ name: 'linear issues', glob: 'linear *', command: 'linear issues list', expected: true },
|
|
23
|
-
{ name: 'capture screenshot', glob: '*capture *', command: 'capture screenshot --url https://example.com', expected: true },
|
|
24
|
-
{ name: 'grove status', glob: '*grove*', command: 'grove status', expected: true },
|
|
25
|
-
{ name: 'crtr human send', glob: '*crtr human *', command: 'crtr human send --message "Approve this change"', expected: true },
|
|
26
|
-
{ name: 'git commit', glob: '*git commit*', command: 'git commit -m "ship fix"', expected: true },
|
|
27
|
-
{ name: 'git push', glob: '*git push*', command: 'git push origin main', expected: true },
|
|
28
|
-
{ name: 'npm publish', glob: '*npm publish*', command: 'npm publish --access public', expected: true },
|
|
29
|
-
{ name: 'pnpm publish', glob: '*pnpm publish*', command: 'pnpm publish --access public', expected: true },
|
|
30
|
-
{ name: 'termrender doc check', glob: '*termrender*', command: 'termrender doc check ./README.md', expected: true },
|
|
31
|
-
{ name: 'single-character question mark', glob: '*git p?sh*', command: 'git push origin main', expected: true },
|
|
32
|
-
{ name: 'trailing star permits bare tool', glob: 'linear *', command: 'linear', expected: true },
|
|
33
|
-
{ name: 'literal glob is an exact command', glob: 'git status', command: 'git status', expected: true },
|
|
34
|
-
{ name: 'literal glob does not imply arguments', glob: 'git status', command: 'git status --short', expected: false },
|
|
35
|
-
];
|
|
36
|
-
for (const testCase of cases) {
|
|
37
|
-
assert.equal(matchesCommandEntry(entry([testCase.glob]), subject, testCase.command), testCase.expected, testCase.name);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
test('a command is found after ordinary shell composition and whitespace variation', () => {
|
|
41
|
-
const cases = [
|
|
42
|
-
{ name: 'after directory change', glob: 'linear *', command: 'cd apps/core && linear issues list', expected: true },
|
|
43
|
-
{ name: 'after semicolon', glob: '*grove*', command: 'printf ready; grove status', expected: true },
|
|
44
|
-
{ name: 'after or-list', glob: '*crtr human *', command: 'test -f answer.txt || crtr human send --message "Choose one"', expected: true },
|
|
45
|
-
{ name: 'leading environment assignment', glob: 'linear *', command: 'CI=1 linear issues list', expected: true },
|
|
46
|
-
{ name: 'tool inside a pipeline', glob: '*termrender*', command: 'termrender doc check README.md | grep -q error', expected: true },
|
|
47
|
-
{ name: 'tool on the right side of a pipe', glob: '*termrender*', command: 'cat README.md | termrender', expected: true },
|
|
48
|
-
{ name: 'two spaces between tokens', glob: 'linear *', command: 'linear issues list', expected: true },
|
|
49
|
-
{ name: 'tab between tokens', glob: 'linear *', command: 'linear\tissues list', expected: true },
|
|
50
|
-
{ name: 'trailing newline', glob: 'linear *', command: 'linear issues list\n', expected: true },
|
|
51
|
-
];
|
|
52
|
-
for (const testCase of cases) {
|
|
53
|
-
assert.equal(matchesCommandEntry(entry([testCase.glob]), subject, testCase.command), testCase.expected, testCase.name);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
test('command text and token near-misses do not wake a surface', () => {
|
|
57
|
-
const cases = [
|
|
58
|
-
{ name: 'linear only appears in quoted text', glob: 'linear *', command: 'echo "linear issues list"', expected: false },
|
|
59
|
-
{ name: 'capture only appears in quoted text', glob: '*capture *', command: 'echo "capture screenshot"', expected: false },
|
|
60
|
-
{ name: 'git push only appears in a commit message', glob: '*git push*', command: 'git commit -m "please git push later"', expected: false },
|
|
61
|
-
{ name: 'grove is part of a longer word', glob: '*grove*', command: 'echo grover', expected: false },
|
|
62
|
-
{ name: 'capture is part of a longer word', glob: '*capture *', command: 'printf "%s\\n" mycapture', expected: false },
|
|
63
|
-
{ name: 'linear is part of a filename', glob: 'linear *', command: 'python linear-regression.py', expected: false },
|
|
64
|
-
{ name: 'git commit is a sibling subcommand', glob: '*git commit*', command: 'git commit-tree -m "ship fix"', expected: false },
|
|
65
|
-
{ name: 'termrender only appears in quoted text', glob: '*termrender*', command: 'echo "termrender"', expected: false },
|
|
66
|
-
// A path mention is not an invocation: an unrelated listing should not wake the grove doc.
|
|
67
|
-
{ name: 'grove only appears in an unrelated path', glob: '*grove*', command: 'ls /tmp/grove/config', expected: false },
|
|
68
|
-
];
|
|
69
|
-
for (const testCase of cases) {
|
|
70
|
-
assert.equal(matchesCommandEntry(entry([testCase.glob]), subject, testCase.command), testCase.expected, testCase.name);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
test('entry and match-list composition stays within the command event', () => {
|
|
74
|
-
const anyGlobCases = [
|
|
75
|
-
{ name: 'second glob satisfies the list', globs: ['*npm publish*', '*pnpm publish*'], command: 'pnpm publish --access public', expected: true },
|
|
76
|
-
{ name: 'no glob satisfies the list', globs: ['*npm publish*', '*pnpm publish*'], command: 'yarn publish', expected: false },
|
|
77
|
-
];
|
|
78
|
-
for (const testCase of anyGlobCases) {
|
|
79
|
-
assert.equal(matchesCommandEntry(entry(testCase.globs), subject, testCase.command), testCase.expected, testCase.name);
|
|
80
|
-
}
|
|
81
|
-
assert.equal(commandDeliveryRung({ surfaces: [entry(['*npm publish*'], 'command', 'name'), entry(['*pnpm publish*'], 'command', 'content')] }, subject, 'pnpm publish --access public'), 'content', 'matching command entries OR together and retain the highest matching rung');
|
|
82
|
-
const otherEventCases = [
|
|
83
|
-
{ name: 'read entry never fires for a command', on: 'read' },
|
|
84
|
-
{ name: 'memory-read entry never fires for a command', on: 'memory-read' },
|
|
85
|
-
];
|
|
86
|
-
for (const testCase of otherEventCases) {
|
|
87
|
-
assert.equal(matchesCommandEntry(entry(['linear *'], testCase.on), subject, 'linear issues list'), false, testCase.name);
|
|
88
|
-
}
|
|
89
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
// Regression: memory-read matching must consume ONLY the resolved doc's
|
|
2
|
-
// exact canonical name — the hard-cut identity rule forbids a mount-stripped
|
|
3
|
-
// alias (or any other alias) from firing an unrelated carrier's route.
|
|
4
|
-
//
|
|
5
|
-
// Run: node --conditions=crtr-src --import tsx/esm --test src/core/substrate/__tests__/surface-match-memory-read.test.ts
|
|
6
|
-
import { test } from 'node:test';
|
|
7
|
-
import assert from 'node:assert/strict';
|
|
8
|
-
import { matchesMemoryReadEntry } from '../surface-match.js';
|
|
9
|
-
function entry(match) {
|
|
10
|
-
return { on: 'memory-read', at: 'preview', match };
|
|
11
|
-
}
|
|
12
|
-
test('a carrier routed at the mount-stripped local name does not fire for the plugin-qualified canonical read', () => {
|
|
13
|
-
// Authored for an unrelated ordinary doc named "topic" — must not fire
|
|
14
|
-
// when the resolved doc is actually the plugin doc "plug/topic".
|
|
15
|
-
assert.equal(matchesMemoryReadEntry(entry(['topic']), '', null, 'plug/topic'), false);
|
|
16
|
-
});
|
|
17
|
-
test('a carrier routed at the plugin-qualified canonical name still fires for that exact read', () => {
|
|
18
|
-
assert.equal(matchesMemoryReadEntry(entry(['plug/topic']), '', null, 'plug/topic'), true);
|
|
19
|
-
});
|
|
20
|
-
test('a carrier routed at the canonical name still fires for an ordinary (non-plugin) read', () => {
|
|
21
|
-
assert.equal(matchesMemoryReadEntry(entry(['topic']), '', null, 'topic'), true);
|
|
22
|
-
});
|
|
23
|
-
test('a directory-relative `./` route still anchors to the routing anchor of the canonical name', () => {
|
|
24
|
-
// Legitimate routing anchor / directory semantics preserved: a carrier
|
|
25
|
-
// fronting `plug/dir` still matches its own member by relative glob.
|
|
26
|
-
assert.equal(matchesMemoryReadEntry(entry(['./member']), 'plug/dir', null, 'plug/dir/member'), true);
|
|
27
|
-
assert.equal(matchesMemoryReadEntry(entry(['./member']), 'plug/dir', null, 'member'), false);
|
|
28
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
// Regression: `pre-command` matching holds a command BEFORE it runs, so it
|
|
2
|
-
// costs the agent a whole turn when it fires. Two ways it can be wrong:
|
|
3
|
-
//
|
|
4
|
-
// • It fires on a mention rather than an invocation. A doc-writing command
|
|
5
|
-
// whose heredoc body merely quotes a matched invocation must run untouched
|
|
6
|
-
// — only the heredoc's opening line is a real command.
|
|
7
|
-
// • It ignores the entry's own `gate`. A doc whose entry excludes this node
|
|
8
|
-
// must never hold that node's commands.
|
|
9
|
-
//
|
|
10
|
-
// It also pins the shared-routing invariant: the pre-command matcher is the
|
|
11
|
-
// post-execution `command` matcher plus heredoc stripping, and nothing else.
|
|
12
|
-
// One command-glob semantics, not two.
|
|
13
|
-
//
|
|
14
|
-
// Run: node --conditions=crtr-src --import tsx/esm --test src/core/substrate/__tests__/surface-match-pre-command.test.ts
|
|
15
|
-
import { test } from 'node:test';
|
|
16
|
-
import assert from 'node:assert/strict';
|
|
17
|
-
import { matchesCommandEntry, matchesPreCommandEntry, preCommandDeliveryRung } from '../surface-match.js';
|
|
18
|
-
const SUBJECT = {
|
|
19
|
-
kind: 'developer',
|
|
20
|
-
mode: 'base',
|
|
21
|
-
lifecycle: 'terminal',
|
|
22
|
-
hasManager: true,
|
|
23
|
-
cwd: '/tmp/project',
|
|
24
|
-
scope: 'project',
|
|
25
|
-
orchestration: { depth: 1 },
|
|
26
|
-
profile: 'northlight',
|
|
27
|
-
};
|
|
28
|
-
function entry(match, gate) {
|
|
29
|
-
return { on: 'pre-command', at: 'content', match, ...(gate !== undefined ? { gate } : {}) };
|
|
30
|
-
}
|
|
31
|
-
// the behaviour this event adds
|
|
32
|
-
test('a matched invocation inside a heredoc BODY does not hold the command', () => {
|
|
33
|
-
const command = [
|
|
34
|
-
"crtr memory write approvals --body <<'EOF'",
|
|
35
|
-
'Before you run `crtr integration run --action send`, get approval.',
|
|
36
|
-
'EOF',
|
|
37
|
-
].join('\n');
|
|
38
|
-
assert.equal(matchesPreCommandEntry(entry(['crtr integration run*']), SUBJECT, command), false);
|
|
39
|
-
});
|
|
40
|
-
test('the same invocation on the heredoc OPENING line still holds the command', () => {
|
|
41
|
-
const command = ["crtr integration run --action send --body <<'EOF'", 'hello', 'EOF'].join('\n');
|
|
42
|
-
assert.equal(matchesPreCommandEntry(entry(['crtr integration run*']), SUBJECT, command), true);
|
|
43
|
-
});
|
|
44
|
-
test('a `<<-` heredoc body is stripped too, tabs and all', () => {
|
|
45
|
-
const command = ['cat <<-EOF', '\tcrtr integration run --action send', '\tEOF'].join('\n');
|
|
46
|
-
assert.equal(matchesPreCommandEntry(entry(['crtr integration run*']), SUBJECT, command), false);
|
|
47
|
-
});
|
|
48
|
-
test('an unterminated heredoc drops its body rather than leaking it back in', () => {
|
|
49
|
-
const command = ["crtr memory write d --body <<'EOF'", 'crtr integration run --action send'].join('\n');
|
|
50
|
-
assert.equal(matchesPreCommandEntry(entry(['crtr integration run*']), SUBJECT, command), false);
|
|
51
|
-
});
|
|
52
|
-
test('an entry whose gate excludes the subject never holds a command', () => {
|
|
53
|
-
const excluded = entry(['crtr integration run*'], { lifecycle: 'resident' });
|
|
54
|
-
assert.equal(matchesPreCommandEntry(excluded, SUBJECT, 'crtr integration run --action send'), false);
|
|
55
|
-
const included = entry(['crtr integration run*'], { lifecycle: 'terminal' });
|
|
56
|
-
assert.equal(matchesPreCommandEntry(included, SUBJECT, 'crtr integration run --action send'), true);
|
|
57
|
-
});
|
|
58
|
-
test('a `command` entry is never consumed by the pre-command matcher, nor the reverse', () => {
|
|
59
|
-
const post = { on: 'command', at: 'content', match: ['crtr integration run*'] };
|
|
60
|
-
assert.equal(matchesPreCommandEntry(post, SUBJECT, 'crtr integration run --action send'), false);
|
|
61
|
-
assert.equal(matchesCommandEntry(entry(['crtr integration run*']), SUBJECT, 'crtr integration run --action send'), false);
|
|
62
|
-
});
|
|
63
|
-
// the rung fold
|
|
64
|
-
test('the rung fold returns the highest `at` across matching entries, and none when nothing matches', () => {
|
|
65
|
-
const doc = {
|
|
66
|
-
surfaces: [
|
|
67
|
-
entry(['crtr crustdata person search*']),
|
|
68
|
-
entry(['crtr integration run*']),
|
|
69
|
-
{ on: 'command', at: 'content', match: ['*'] },
|
|
70
|
-
],
|
|
71
|
-
};
|
|
72
|
-
assert.equal(preCommandDeliveryRung(doc, SUBJECT, 'crtr integration run --action send'), 'content');
|
|
73
|
-
assert.equal(preCommandDeliveryRung(doc, SUBJECT, 'ls -la'), 'none');
|
|
74
|
-
});
|
|
75
|
-
// shared routing: one command-glob semantics, not two
|
|
76
|
-
test('outside a heredoc, pre-command matching is exactly the `command` matcher', () => {
|
|
77
|
-
// The guard against a second command tokenizer drifting away from the first.
|
|
78
|
-
// Whatever `command` globs mean today, `pre-command` means the same thing —
|
|
79
|
-
// so a sharpening of command-position matching reaches both events at once.
|
|
80
|
-
const glob = 'crtr integration run*';
|
|
81
|
-
for (const command of [
|
|
82
|
-
'crtr integration run --action send',
|
|
83
|
-
'cd /tmp && crtr integration run --action send',
|
|
84
|
-
'echo hi\ncrtr integration run --action send',
|
|
85
|
-
'NL_ENV=1 crtr integration run --action send',
|
|
86
|
-
'crtr integration list',
|
|
87
|
-
'ls -la',
|
|
88
|
-
'echo "crtr integration run --action send"',
|
|
89
|
-
]) {
|
|
90
|
-
assert.equal(matchesPreCommandEntry(entry([glob]), SUBJECT, command), matchesCommandEntry({ on: 'command', at: 'content', match: [glob] }, SUBJECT, command), `pre-command and command disagreed on: ${JSON.stringify(command)}`);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { test, beforeEach, after } from 'node:test';
|
|
2
|
-
import assert from 'node:assert/strict';
|
|
3
|
-
import { mkdtempSync, rmSync } from 'node:fs';
|
|
4
|
-
import { tmpdir } from 'node:os';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { ensureDaemon, resetDaemonAutostart, } from '../manage.js';
|
|
7
|
-
import { withExclusiveDirectoryLockAsync } from '../../core/exclusive-lock.js';
|
|
8
|
-
// REGRESSION (daemon respawn storm): a daemon whose startup hit a STANDING
|
|
9
|
-
// condition — a blocked on-disk migration — exited, its attach clients saw a
|
|
10
|
-
// cold socket, autostarted a replacement, and that replacement hit the same
|
|
11
|
-
// wall. Nothing tracked the repeat and nothing reaped the losers, so failed
|
|
12
|
-
// starts accumulated into a pile that pegged the machine. Three properties keep
|
|
13
|
-
// that from recurring: the terminal exit is TYPED, a typed failure SUPPRESSES
|
|
14
|
-
// further autostarts, and an ordinary failure at least BACKS OFF.
|
|
15
|
-
const settle = async () => { await new Promise((resolve) => setImmediate(resolve)); };
|
|
16
|
-
// The test lane exports CRTR_NO_DAEMON_AUTOSTART=1 so no suite ever spawns a
|
|
17
|
-
// real daemon. These tests drive ensureDaemon through injected deps — nothing
|
|
18
|
-
// is spawned — so the guard has to come off for the gate under test to be
|
|
19
|
-
// reachable at all.
|
|
20
|
-
const autostartEnv = process.env['CRTR_NO_DAEMON_AUTOSTART'];
|
|
21
|
-
beforeEach(() => {
|
|
22
|
-
delete process.env['CRTR_NO_DAEMON_AUTOSTART'];
|
|
23
|
-
resetDaemonAutostart();
|
|
24
|
-
});
|
|
25
|
-
after(() => {
|
|
26
|
-
if (autostartEnv === undefined)
|
|
27
|
-
delete process.env['CRTR_NO_DAEMON_AUTOSTART'];
|
|
28
|
-
else
|
|
29
|
-
process.env['CRTR_NO_DAEMON_AUTOSTART'] = autostartEnv;
|
|
30
|
-
resetDaemonAutostart();
|
|
31
|
-
});
|
|
32
|
-
test('an ordinary spawn failure backs off, then retries once the window passes', async () => {
|
|
33
|
-
let spawns = 0;
|
|
34
|
-
let now = 1_000_000;
|
|
35
|
-
const deps = {
|
|
36
|
-
isDaemonRunning: () => false,
|
|
37
|
-
now: () => now,
|
|
38
|
-
spawnDaemon: async () => {
|
|
39
|
-
spawns += 1;
|
|
40
|
-
throw new Error('dist/daemon/crtrd-cli.js missing');
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
ensureDaemon(deps);
|
|
44
|
-
await settle();
|
|
45
|
-
assert.equal(spawns, 1);
|
|
46
|
-
for (let i = 0; i < 20; i++)
|
|
47
|
-
ensureDaemon(deps);
|
|
48
|
-
await settle();
|
|
49
|
-
assert.equal(spawns, 1, 'retries inside the backoff window must be dropped');
|
|
50
|
-
now += 5_000;
|
|
51
|
-
ensureDaemon(deps);
|
|
52
|
-
await settle();
|
|
53
|
-
assert.equal(spawns, 2, 'the window expiring re-opens exactly one attempt');
|
|
54
|
-
// Backoff grows, so the second failure buys a longer quiet period than the first.
|
|
55
|
-
now += 5_000;
|
|
56
|
-
ensureDaemon(deps);
|
|
57
|
-
await settle();
|
|
58
|
-
assert.equal(spawns, 2, 'the second failure must back off further than the first');
|
|
59
|
-
});
|
|
60
|
-
test('a spawn already in flight blocks a concurrent autostart', async () => {
|
|
61
|
-
let spawns = 0;
|
|
62
|
-
let release = () => { };
|
|
63
|
-
const gate = new Promise((resolve) => { release = resolve; });
|
|
64
|
-
const deps = {
|
|
65
|
-
isDaemonRunning: () => false,
|
|
66
|
-
spawnDaemon: async () => {
|
|
67
|
-
spawns += 1;
|
|
68
|
-
await gate;
|
|
69
|
-
return { started: true, pid: 1 };
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
ensureDaemon(deps);
|
|
73
|
-
for (let i = 0; i < 10; i++)
|
|
74
|
-
ensureDaemon(deps);
|
|
75
|
-
await settle();
|
|
76
|
-
assert.equal(spawns, 1, 'concurrent callers must not each spawn a daemon');
|
|
77
|
-
release();
|
|
78
|
-
await settle();
|
|
79
|
-
});
|
|
80
|
-
test('a success clears the backoff so the next cold socket starts immediately', async () => {
|
|
81
|
-
let spawns = 0;
|
|
82
|
-
let fail = true;
|
|
83
|
-
let now = 1_000_000;
|
|
84
|
-
const deps = {
|
|
85
|
-
isDaemonRunning: () => false,
|
|
86
|
-
now: () => now,
|
|
87
|
-
spawnDaemon: async () => {
|
|
88
|
-
spawns += 1;
|
|
89
|
-
if (fail)
|
|
90
|
-
throw new Error('transient');
|
|
91
|
-
return { started: true, pid: 1 };
|
|
92
|
-
},
|
|
93
|
-
};
|
|
94
|
-
ensureDaemon(deps);
|
|
95
|
-
await settle();
|
|
96
|
-
fail = false;
|
|
97
|
-
now += 5_000;
|
|
98
|
-
ensureDaemon(deps);
|
|
99
|
-
await settle();
|
|
100
|
-
assert.equal(spawns, 2);
|
|
101
|
-
ensureDaemon(deps);
|
|
102
|
-
await settle();
|
|
103
|
-
assert.equal(spawns, 3, 'a healthy start must not leave a backoff behind');
|
|
104
|
-
});
|
|
105
|
-
// The pile pegged the machine because each waiter re-probed the lock every 10ms
|
|
106
|
-
// with no backoff. Backing off must not make an uncontended hand-off sluggish.
|
|
107
|
-
test('a contended lock waiter still acquires promptly once the holder releases', async () => {
|
|
108
|
-
const home = mkdtempSync(join(tmpdir(), 'crtr-lock-backoff-'));
|
|
109
|
-
const lockPath = join(home, 'contended.lock');
|
|
110
|
-
try {
|
|
111
|
-
let released = 0;
|
|
112
|
-
const holder = withExclusiveDirectoryLockAsync(lockPath, async () => {
|
|
113
|
-
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
114
|
-
released = Date.now();
|
|
115
|
-
}, { timeoutMs: 5_000 });
|
|
116
|
-
await new Promise((resolve) => setTimeout(resolve, 20));
|
|
117
|
-
let acquired = 0;
|
|
118
|
-
const waiter = withExclusiveDirectoryLockAsync(lockPath, async () => {
|
|
119
|
-
acquired = Date.now();
|
|
120
|
-
}, { timeoutMs: 5_000 });
|
|
121
|
-
await Promise.all([holder, waiter]);
|
|
122
|
-
assert.ok(acquired >= released, 'the waiter must not enter before the holder leaves');
|
|
123
|
-
assert.ok(acquired - released < 1_000, `hand-off took ${acquired - released}ms — backoff ceiling is too coarse`);
|
|
124
|
-
}
|
|
125
|
-
finally {
|
|
126
|
-
rmSync(home, { recursive: true, force: true });
|
|
127
|
-
}
|
|
128
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
// Regression (2026-07-22 cross-canvas broker slaughter): the orphan reaper
|
|
2
|
-
// matched every broker-cli.js process on the machine, so a test-fixture
|
|
3
|
-
// daemon in a temp CRTR_HOME SIGTERMed the real fleet each test iteration
|
|
4
|
-
// while the real daemon reaped the fixture's brk-* brokers. Ownership is now
|
|
5
|
-
// DECLARED at spawn — `broker-cli.js --canvas-home <home> <nodeId>` — and
|
|
6
|
-
// the census/reap match exactly the daemon's own canvas home; untagged or
|
|
7
|
-
// foreign-home brokers are invisible to both.
|
|
8
|
-
import { test } from 'node:test';
|
|
9
|
-
import assert from 'node:assert/strict';
|
|
10
|
-
import { brokerCommandDeclaresCanvasHome } from '../crtrd.js';
|
|
11
|
-
const HOME = '/Users/u/.crouter/canvas';
|
|
12
|
-
const CMD = `1234 /Users/u/.crouter/host/crouter /Users/u/.crouter/runtime/generations/abc/dist/core/runtime/broker-cli.js --canvas-home ${HOME} mrnode01-aabbccdd`;
|
|
13
|
-
test('matches a broker declaring this canvas home', () => {
|
|
14
|
-
assert.equal(brokerCommandDeclaresCanvasHome(CMD, HOME), true);
|
|
15
|
-
});
|
|
16
|
-
test('rejects a broker declaring a different canvas home', () => {
|
|
17
|
-
assert.equal(brokerCommandDeclaresCanvasHome(CMD, '/tmp/crtr-test-xyz/canvas'), false);
|
|
18
|
-
});
|
|
19
|
-
test('rejects an untagged (pre-tag or harness-spawned) broker', () => {
|
|
20
|
-
const untagged = '1234 node /repo/dist/core/runtime/broker-cli.js brk-99-0';
|
|
21
|
-
assert.equal(brokerCommandDeclaresCanvasHome(untagged, HOME), false);
|
|
22
|
-
});
|
|
23
|
-
test('rejects a home that is a prefix of the declared home', () => {
|
|
24
|
-
assert.equal(brokerCommandDeclaresCanvasHome(CMD, '/Users/u/.crouter'), false);
|
|
25
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|