@north-light/crouter 0.3.318 → 0.3.319
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/dist/api/client.js +2 -912
- package/dist/api/dto/attach.js +0 -13
- package/dist/api/dto/bash-jobs.js +1 -9
- package/dist/api/dto/broker-ops.js +0 -6
- package/dist/api/dto/broker.js +0 -20
- package/dist/api/dto/canvas.js +0 -2
- package/dist/api/dto/chat-inventory.js +0 -11
- package/dist/api/dto/common.js +1 -15
- package/dist/api/dto/config.js +0 -3
- package/dist/api/dto/crons.js +1 -10
- package/dist/api/dto/files.js +0 -7
- package/dist/api/dto/focus.js +0 -10
- package/dist/api/dto/health.js +0 -2
- package/dist/api/dto/human-requests.js +0 -4
- package/dist/api/dto/human.js +0 -4
- package/dist/api/dto/inbox.js +0 -4
- package/dist/api/dto/lifecycle.js +0 -3
- package/dist/api/dto/mail.js +0 -1
- package/dist/api/dto/memory.js +0 -6
- package/dist/api/dto/messages.js +0 -2
- package/dist/api/dto/model-config.js +0 -1
- package/dist/api/dto/modelauth.js +0 -4
- package/dist/api/dto/node-outcomes.js +0 -2
- package/dist/api/dto/nodes.js +0 -3
- package/dist/api/dto/profiles.js +1 -4
- package/dist/api/dto/recovery.js +0 -1
- package/dist/api/dto/reports.js +0 -2
- package/dist/api/dto/review-comments.js +0 -5
- package/dist/api/dto/reviews.js +0 -5
- package/dist/api/dto/subscriptions.js +0 -2
- package/dist/api/dto/worktree.js +0 -6
- package/dist/api/errors.js +1 -40
- package/dist/api/index.js +1 -33
- package/dist/api/plugin-manifest-schema.js +0 -23
- package/dist/api/routes.js +1 -147
- package/dist/build-root.js +1 -198
- package/dist/cli.js +3 -99
- package/dist/clients/attach/ansi-cells.js +1 -137
- package/dist/clients/attach/chrome/bash-jobs.js +1 -31
- package/dist/clients/attach/chrome/canvas-panels.js +1 -194
- package/dist/clients/attach/chrome/completion-bell.js +1 -89
- package/dist/clients/attach/chrome/cron-wait.js +1 -34
- package/dist/clients/attach/chrome/git-info.js +2 -44
- package/dist/clients/attach/chrome/header.js +1 -30
- package/dist/clients/attach/chrome/inbox-strip.js +1 -199
- package/dist/clients/attach/chrome/recap.js +1 -19
- package/dist/clients/attach/chrome/review-wait.js +1 -22
- package/dist/clients/attach/chrome/roster.js +4 -275
- package/dist/clients/attach/chrome/status-line.js +1 -117
- package/dist/clients/attach/chrome/ticket-panel.js +1 -280
- package/dist/clients/attach/chrome/widgets.js +1 -51
- package/dist/clients/attach/command.js +1 -107
- package/dist/clients/attach/config.js +1 -274
- package/dist/clients/attach/input/capabilities.js +1 -104
- package/dist/clients/attach/input/clipboard-image.js +3 -220
- package/dist/clients/attach/input/completion-frecency.js +1 -141
- package/dist/clients/attach/input/controller.js +7 -377
- package/dist/clients/attach/input/overlay-owner.js +1 -199
- package/dist/clients/attach/input/ref-autocomplete.js +2 -176
- package/dist/clients/attach/input/titled-editor.js +4 -859
- package/dist/clients/attach/overlays/auth.js +2 -271
- package/dist/clients/attach/overlays/dialogs.js +2 -102
- package/dist/clients/attach/overlays/file-review.js +2 -128
- package/dist/clients/attach/overlays/graph.js +1 -661
- package/dist/clients/attach/overlays/help.js +1 -211
- package/dist/clients/attach/overlays/mcp.js +1 -302
- package/dist/clients/attach/overlays/pickers.js +1 -163
- package/dist/clients/attach/render/activity-slot.js +1 -13
- package/dist/clients/attach/render/assistant-message.js +1 -56
- package/dist/clients/attach/render/card-presentation.js +5 -218
- package/dist/clients/attach/render/chat-view.js +5 -1708
- package/dist/clients/attach/render/condensed-history.js +1 -60
- package/dist/clients/attach/render/context-message.js +1 -63
- package/dist/clients/attach/render/crtr-output.js +17 -905
- package/dist/clients/attach/render/diagram.js +7 -111
- package/dist/clients/attach/render/edit-diff.js +5 -304
- package/dist/clients/attach/render/glyph-codepoints.js +1 -42
- package/dist/clients/attach/render/group-activity.js +2 -263
- package/dist/clients/attach/render/group-recap.js +1 -152
- package/dist/clients/attach/render/markdown-source.js +5 -266
- package/dist/clients/attach/render/measured-container.js +1 -322
- package/dist/clients/attach/render/page-block.js +1 -183
- package/dist/clients/attach/render/scroll-animation.js +1 -80
- package/dist/clients/attach/render/tool-calls.js +3 -361
- package/dist/clients/attach/render/transcript-copy.js +2 -81
- package/dist/clients/attach/render/transcript-search.js +1 -152
- package/dist/clients/attach/render/viewport.js +1 -184
- package/dist/clients/attach/session/banner.js +1 -29
- package/dist/clients/attach/session/bindings.js +1 -71
- package/dist/clients/attach/session/chrome-refresh.js +1 -94
- package/dist/clients/attach/session/connection.js +1 -186
- package/dist/clients/attach/session/context.js +0 -16
- package/dist/clients/attach/session/editor-frame.js +1 -142
- package/dist/clients/attach/session/editor-inventory.js +6 -160
- package/dist/clients/attach/session/file-links.js +1 -68
- package/dist/clients/attach/session/focus-events.js +1 -12
- package/dist/clients/attach/session/frame.js +1 -214
- package/dist/clients/attach/session/frames.js +1 -188
- package/dist/clients/attach/session/identity.js +1 -26
- package/dist/clients/attach/session/input-wiring.js +1 -140
- package/dist/clients/attach/session/invariant.js +1 -15
- package/dist/clients/attach/session/keys.js +1 -77
- package/dist/clients/attach/session/layout.js +1 -59
- package/dist/clients/attach/session/mouse.js +1 -78
- package/dist/clients/attach/session/pane-focus.js +1 -42
- package/dist/clients/attach/session/pane-tag.js +1 -112
- package/dist/clients/attach/session/pi-assets.js +1 -24
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
- package/dist/clients/attach/session/profile-files.js +1 -228
- package/dist/clients/attach/session/reconnect.js +1 -175
- package/dist/clients/attach/session/selection.js +3 -108
- package/dist/clients/attach/session/state-sync.js +1 -67
- package/dist/clients/attach/session/surface-frame.js +1 -73
- package/dist/clients/attach/session/surface-host.js +1 -255
- package/dist/clients/attach/session/teardown.js +5 -94
- package/dist/clients/attach/session/transcript-search.js +3 -151
- package/dist/clients/attach/session/whip-achievements.js +2 -145
- package/dist/clients/attach/session/whip.js +1 -362
- package/dist/clients/attach/slash/dispatch.js +1 -706
- package/dist/clients/attach/slash/prompt-preview.js +1 -121
- package/dist/clients/attach/viewer.js +441 -441
- package/dist/clients/conversation/projection.js +1 -324
- package/dist/clients/conversation/submit.js +1 -51
- package/dist/clients/inbox/controller.js +1 -701
- package/dist/clients/inbox/dto-adapt.js +1 -93
- package/dist/clients/inbox/layout.js +1 -9
- package/dist/clients/inbox/page-adapter.js +1 -55
- package/dist/clients/inbox/resolve.js +1 -35
- package/dist/clients/inbox/review/anchors.js +1 -89
- package/dist/clients/inbox/review/comments-client.js +1 -98
- package/dist/clients/inbox/review/companion-pane.js +1 -82
- package/dist/clients/inbox/review/document-surface.js +2 -1188
- package/dist/clients/inbox/review/frame.js +1 -216
- package/dist/clients/inbox/review/keys.js +1 -123
- package/dist/clients/inbox/review/launch.js +1 -151
- package/dist/clients/inbox/review/live-source.js +1 -160
- package/dist/clients/inbox/review/nvim.js +1 -44
- package/dist/clients/inbox/review/remap.js +1 -157
- package/dist/clients/inbox/review/review-client.js +1 -123
- package/dist/clients/inbox/review/roundtrip.js +3 -36
- package/dist/clients/inbox/review/state.js +4 -315
- package/dist/clients/inbox/review-adapter.js +1 -43
- package/dist/clients/inbox/surface.js +1 -152
- package/dist/clients/inbox/tui/ansi.js +3 -321
- package/dist/clients/inbox/tui/input.js +5 -392
- package/dist/clients/inbox/tui/keys.js +1 -104
- package/dist/clients/inbox/tui/page-body.js +1 -66
- package/dist/clients/inbox/tui/panel.js +1 -84
- package/dist/clients/inbox/tui/render.js +2 -368
- package/dist/clients/inbox/tui/slots.js +3 -134
- package/dist/clients/inbox/tui/types.js +0 -1
- package/dist/clients/inbox/tui.js +1 -86
- package/dist/clients/surfaces/host.js +0 -1
- package/dist/commands/api-client.js +4 -290
- package/dist/commands/attention.js +1 -215
- package/dist/commands/canvas-browse.js +1 -70
- package/dist/commands/canvas-config.js +2 -192
- package/dist/commands/canvas-history/grep.js +7 -85
- package/dist/commands/canvas-history/read.js +3 -50
- package/dist/commands/canvas-history/search.js +10 -99
- package/dist/commands/canvas-history/shared.js +1 -139
- package/dist/commands/canvas-history/stats.js +6 -68
- package/dist/commands/canvas-history.js +1 -32
- package/dist/commands/canvas-issue.js +14 -149
- package/dist/commands/canvas-prune.js +1 -108
- package/dist/commands/canvas-roster.js +1 -69
- package/dist/commands/canvas-snapshot.js +1 -34
- package/dist/commands/canvas-use.js +1 -61
- package/dist/commands/canvas.js +1 -49
- package/dist/commands/chord.js +1 -241
- package/dist/commands/cron.js +11 -534
- package/dist/commands/dashboard.js +1 -85
- package/dist/commands/human/components.js +3 -77
- package/dist/commands/human/feedback.js +1 -112
- package/dist/commands/human/prompts.js +1 -331
- package/dist/commands/human/queue.js +1 -191
- package/dist/commands/human/request.js +1 -266
- package/dist/commands/human/review.js +1 -288
- package/dist/commands/human/shared.js +1 -67
- package/dist/commands/human.js +4 -60
- package/dist/commands/memory/delete.js +1 -100
- package/dist/commands/memory/edit.js +21 -219
- package/dist/commands/memory/find.js +2 -244
- package/dist/commands/memory/history.js +5 -199
- package/dist/commands/memory/lint.js +1 -107
- package/dist/commands/memory/list.js +1 -142
- package/dist/commands/memory/move.js +1 -223
- package/dist/commands/memory/origin.js +1 -130
- package/dist/commands/memory/read.js +6 -232
- package/dist/commands/memory/shared.js +12 -802
- package/dist/commands/memory/write.js +13 -235
- package/dist/commands/memory.js +1 -30
- package/dist/commands/node/bash.js +5 -245
- package/dist/commands/node/create.js +3 -332
- package/dist/commands/node/inspect.js +12 -300
- package/dist/commands/node/lifecycle.js +2 -453
- package/dist/commands/node/message.js +1 -161
- package/dist/commands/node/outcome.js +4 -134
- package/dist/commands/node/pyramid.js +2 -79
- package/dist/commands/node/subscription.js +1 -78
- package/dist/commands/node/wait.js +7 -163
- package/dist/commands/node-context.js +2 -159
- package/dist/commands/node-inspect-artifacts.js +8 -109
- package/dist/commands/node-lifecycle-revive.js +1 -217
- package/dist/commands/node-snapshot.js +1 -37
- package/dist/commands/node-transcript.js +1 -62
- package/dist/commands/node-worktree.js +1 -138
- package/dist/commands/node.js +1 -29
- package/dist/commands/pkg/browse/actions.js +1 -198
- package/dist/commands/pkg/browse/catalog.js +1 -466
- package/dist/commands/pkg/browse/command-view.js +1 -191
- package/dist/commands/pkg/browse/detail-panel.js +1 -402
- package/dist/commands/pkg/browse/doc-view.js +1 -89
- package/dist/commands/pkg/browse/list-panel.js +2 -168
- package/dist/commands/pkg/browse/model.js +1 -36
- package/dist/commands/pkg/browse/shell.js +1 -640
- package/dist/commands/pkg/browse.js +1 -27
- package/dist/commands/pkg/market-inspect.js +1 -141
- package/dist/commands/pkg/market-manage.js +1 -327
- package/dist/commands/pkg/market.js +1 -14
- package/dist/commands/pkg/plugin-inspect.js +1 -168
- package/dist/commands/pkg/plugin-manage.js +17 -1109
- package/dist/commands/pkg/plugin.js +1 -14
- package/dist/commands/pkg/shared.js +1 -62
- package/dist/commands/pkg.js +1 -21
- package/dist/commands/profile/default.js +1 -139
- package/dist/commands/profile/delete.js +1 -66
- package/dist/commands/profile/env.js +3 -188
- package/dist/commands/profile/kind.js +2 -35
- package/dist/commands/profile/list.js +1 -43
- package/dist/commands/profile/meta.js +1 -67
- package/dist/commands/profile/new.js +1 -115
- package/dist/commands/profile/pause.js +1 -59
- package/dist/commands/profile/project.js +1 -113
- package/dist/commands/profile/rename.js +1 -38
- package/dist/commands/profile/show.js +1 -52
- package/dist/commands/profile.js +1 -35
- package/dist/commands/push.js +9 -265
- package/dist/commands/revive.js +10 -181
- package/dist/commands/surface/node/cycle.js +1 -83
- package/dist/commands/surface/node/focus.js +1 -81
- package/dist/commands/surface/node/id.js +1 -38
- package/dist/commands/surface/node/pin.js +1 -42
- package/dist/commands/surface/node/placement.js +1 -134
- package/dist/commands/surface-edit.js +1 -157
- package/dist/commands/surface-inbox.js +1 -98
- package/dist/commands/surface-inspect.js +1 -39
- package/dist/commands/surface-node.js +1 -19
- package/dist/commands/surface-reload.js +2 -134
- package/dist/commands/surface-tmux-spread.js +1 -214
- package/dist/commands/surface.js +1 -28
- package/dist/commands/sys/branch.js +1 -19
- package/dist/commands/sys/config.js +1 -353
- package/dist/commands/sys/context/admin/actions.js +2 -246
- package/dist/commands/sys/context/admin/detail-panel.js +1 -247
- package/dist/commands/sys/context/admin/docs-panel.js +1 -191
- package/dist/commands/sys/context/admin/list-view.js +1 -183
- package/dist/commands/sys/context/admin/model.js +1 -229
- package/dist/commands/sys/context/admin/rail-panel.js +1 -227
- package/dist/commands/sys/context/admin/read-view.js +2 -194
- package/dist/commands/sys/context/admin/shell.js +1 -910
- package/dist/commands/sys/context/admin.js +2 -126
- package/dist/commands/sys/context/doc.js +3 -197
- package/dist/commands/sys/context/prompt-review.js +11 -291
- package/dist/commands/sys/context/resolve.js +10 -489
- package/dist/commands/sys/context/sysprompt.js +5 -96
- package/dist/commands/sys/context.js +1 -20
- package/dist/commands/sys/daemon.js +1 -313
- package/dist/commands/sys/doctor.js +1 -617
- package/dist/commands/sys/feedback.js +7 -228
- package/dist/commands/sys/logs.js +3 -129
- package/dist/commands/sys/migrate.js +1 -94
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
- package/dist/commands/sys/panels/dependencies-panel.js +1 -80
- package/dist/commands/sys/panels/keybindings-panel.js +1 -703
- package/dist/commands/sys/panels/models-panel.js +1 -1133
- package/dist/commands/sys/panels/plugins-panel.js +1 -80
- package/dist/commands/sys/panels/prefs-panel.js +1 -85
- package/dist/commands/sys/panels/profiles-panel.js +1 -601
- package/dist/commands/sys/panels/provider-panel.js +1 -538
- package/dist/commands/sys/settings-shell.js +1 -400
- package/dist/commands/sys/settings.js +1 -46
- package/dist/commands/sys/setup-core.js +6 -579
- package/dist/commands/sys/setup-settings-runner.js +1 -16
- package/dist/commands/sys/setup-wizard.js +1 -279
- package/dist/commands/sys/setup.js +1 -34
- package/dist/commands/sys/shared.js +1 -81
- package/dist/commands/sys/support/prepare.js +3 -239
- package/dist/commands/sys/support/submit.js +6 -524
- package/dist/commands/sys/support.js +1 -18
- package/dist/commands/sys/sync-deps.js +15 -498
- package/dist/commands/sys/sync-project-guidance.js +4 -481
- package/dist/commands/sys/sync-shared.js +1 -49
- package/dist/commands/sys/sync-skills.js +2 -311
- package/dist/commands/sys/sync.js +1 -18
- package/dist/commands/sys/update.js +1 -147
- package/dist/commands/sys/worktrees.js +5 -53
- package/dist/commands/sys.js +1 -18
- package/dist/core/activity-signal.js +2 -38
- package/dist/core/asset-root.js +1 -18
- package/dist/core/auth-file.js +2 -179
- package/dist/core/auth-interaction.js +3 -94
- package/dist/core/auto-update.js +4 -94
- package/dist/core/bash-guard.js +11 -393
- package/dist/core/bash-jobs.js +7 -411
- package/dist/core/bootstrap.js +2 -53
- package/dist/core/broker-client/client.js +1 -184
- package/dist/core/broker-client/index.js +1 -13
- package/dist/core/broker-client/transport-relay.js +1 -157
- package/dist/core/broker-client/transport-socket.js +1 -179
- package/dist/core/broker-client/transport.js +1 -26
- package/dist/core/canvas/attention.js +1 -47
- package/dist/core/canvas/boot-id.js +1 -26
- package/dist/core/canvas/boot.js +1 -186
- package/dist/core/canvas/browse/app.js +3 -919
- package/dist/core/canvas/browse/model.js +1 -477
- package/dist/core/canvas/browse/pins.js +1 -29
- package/dist/core/canvas/browse/render.js +3 -1055
- package/dist/core/canvas/canvas.js +15 -922
- package/dist/core/canvas/crons.js +11 -481
- package/dist/core/canvas/daemon-owner.js +2 -146
- package/dist/core/canvas/db.js +2 -100
- package/dist/core/canvas/deliveries.js +22 -283
- package/dist/core/canvas/delivery-contract.js +1 -8
- package/dist/core/canvas/executions.js +1 -68
- package/dist/core/canvas/extensions.js +1 -83
- package/dist/core/canvas/focuses.js +1 -77
- package/dist/core/canvas/history.js +24 -860
- package/dist/core/canvas/index.js +1 -15
- package/dist/core/canvas/install-id.js +1 -84
- package/dist/core/canvas/labels.js +1 -43
- package/dist/core/canvas/meta-file.js +1 -89
- package/dist/core/canvas/migrations.js +41 -1150
- package/dist/core/canvas/nav-model.js +1 -231
- package/dist/core/canvas/nav-render.js +1 -260
- package/dist/core/canvas/node-order.js +1 -37
- package/dist/core/canvas/node-recap.js +2 -67
- package/dist/core/canvas/node-sql-migration.js +2 -209
- package/dist/core/canvas/paths.js +1 -153
- package/dist/core/canvas/pid.js +4 -683
- package/dist/core/canvas/recovery.js +3 -565
- package/dist/core/canvas/remote-canvas-source.js +1 -288
- package/dist/core/canvas/remote-transport.js +1 -57
- package/dist/core/canvas/render-source.js +10 -635
- package/dist/core/canvas/sessions.js +1 -78
- package/dist/core/canvas/source.js +1 -47
- package/dist/core/canvas/status-glyph.js +1 -132
- package/dist/core/canvas/telemetry.js +1 -35
- package/dist/core/canvas/types.js +1 -6
- package/dist/core/canvas/waits.js +4 -68
- package/dist/core/canvas/worktrees.js +1 -93
- package/dist/core/clipboard-text.js +1 -57
- package/dist/core/command-hooks/artifact.js +1 -145
- package/dist/core/command-hooks/catalog.js +1 -38
- package/dist/core/command-hooks/compose.js +1 -99
- package/dist/core/command-hooks/discovery.js +1 -228
- package/dist/core/command-hooks/help.js +1 -18
- package/dist/core/command-hooks/index.js +1 -7
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
- package/dist/core/command-hooks/lifecycle-create.js +1 -51
- package/dist/core/command-hooks/report.js +1 -28
- package/dist/core/command-hooks/schema.js +1 -157
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
- package/dist/core/command-manifests/manifest.js +1 -324
- package/dist/core/command-manifests/registry.js +1 -118
- package/dist/core/command-manifests/schema.js +1 -736
- package/dist/core/command-plugins/bundle.js +1 -261
- package/dist/core/command-plugins/compose.js +1 -65
- package/dist/core/command-plugins/discovery.js +1 -245
- package/dist/core/command-plugins/endpoint.js +1 -48
- package/dist/core/command-plugins/extensions.js +1 -166
- package/dist/core/command-plugins/help-addenda.js +1 -44
- package/dist/core/command-plugins/presence.js +1 -17
- package/dist/core/command-plugins/revalidate.js +2 -152
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
- package/dist/core/command-plugins/transport/http-fetch.js +1 -68
- package/dist/core/command-plugins/transport/http-invoke.js +3 -546
- package/dist/core/command.js +10 -739
- package/dist/core/config.js +1 -1059
- package/dist/core/document-lines.js +3 -6
- package/dist/core/env-name.js +1 -9
- package/dist/core/errors.js +1 -52
- package/dist/core/events/emit.js +1 -17
- package/dist/core/events/envelope.js +1 -84
- package/dist/core/events/errors.js +1 -69
- package/dist/core/events/index.js +1 -4
- package/dist/core/events/operation-id.js +1 -24
- package/dist/core/events/read.js +1 -623
- package/dist/core/events/serialize.js +1 -199
- package/dist/core/events/source.js +1 -31
- package/dist/core/events/types.js +1 -11
- package/dist/core/exclusive-lock.js +1 -197
- package/dist/core/fault-classifier.js +1 -96
- package/dist/core/feed/feed.js +7 -202
- package/dist/core/feed/inbox-migrate.js +3 -135
- package/dist/core/feed/inbox.js +10 -122
- package/dist/core/feed/messages.js +6 -212
- package/dist/core/frontmatter.js +1 -35
- package/dist/core/fs-utils.js +3 -202
- package/dist/core/git.js +2 -103
- package/dist/core/help.js +9 -310
- package/dist/core/host-exports/builtins.js +9 -68
- package/dist/core/host-exports/export.js +3 -124
- package/dist/core/human/action-binding.js +1 -40
- package/dist/core/human/answer-text.js +5 -100
- package/dist/core/human/answer.js +1 -119
- package/dist/core/human/claim.js +3 -67
- package/dist/core/human/completion.js +1 -27
- package/dist/core/human/component-docs.js +78 -272
- package/dist/core/human/convention.js +2 -82
- package/dist/core/human/feedback-companion.js +1 -106
- package/dist/core/human/feedback.js +1 -88
- package/dist/core/human/page-authoring.js +1 -19
- package/dist/core/human/page-catalog.js +1 -172
- package/dist/core/human/page-errors.js +1 -7
- package/dist/core/human/page-eval.js +1 -125
- package/dist/core/human/page-html-markdown.js +8 -260
- package/dist/core/human/page-markdown.js +17 -295
- package/dist/core/human/page-schema.js +1 -373
- package/dist/core/human/page-synth.js +8 -27
- package/dist/core/human/page.js +1 -198
- package/dist/core/human/requests.js +15 -466
- package/dist/core/human/review-schema.js +1 -34
- package/dist/core/human/root.js +1 -11
- package/dist/core/human/scan.js +1 -69
- package/dist/core/human/summary.js +1 -5
- package/dist/core/human/tickets.js +1 -171
- package/dist/core/human/types.js +0 -1
- package/dist/core/human/visible-paths.js +1 -77
- package/dist/core/human-actions.js +1 -101
- package/dist/core/inspector/chrome.js +1 -14
- package/dist/core/inspector/contract.js +0 -1
- package/dist/core/inspector/core.js +2 -295
- package/dist/core/inspector/host.js +4 -538
- package/dist/core/inspector/model.js +2 -226
- package/dist/core/inspector/text.js +6 -45
- package/dist/core/inspector/transport.js +1 -36
- package/dist/core/inspector/tui.js +2 -295
- package/dist/core/installed-plugins.js +1 -78
- package/dist/core/io.js +7 -356
- package/dist/core/keybindings/attach-control.js +1 -42
- package/dist/core/keybindings/background-bash.js +1 -33
- package/dist/core/keybindings/catalog.js +1 -256
- package/dist/core/keybindings/inbox.js +1 -25
- package/dist/core/keybindings/index.js +1 -7
- package/dist/core/keybindings/match.js +1 -127
- package/dist/core/keybindings/persistence.js +1 -49
- package/dist/core/keybindings/resolve.js +1 -348
- package/dist/core/keybindings/types.js +0 -1
- package/dist/core/locked-file.js +1 -118
- package/dist/core/log.js +3 -27
- package/dist/core/manifest-recovery.js +1 -72
- package/dist/core/manifest-stale.js +1 -39
- package/dist/core/manifest.js +1 -20
- package/dist/core/memory/doc-link-grammar.js +2 -109
- package/dist/core/memory/extensions.js +1 -221
- package/dist/core/memory/history.js +6 -268
- package/dist/core/memory/identity.js +1 -181
- package/dist/core/memory/inline-ref-grammar.js +1 -98
- package/dist/core/memory/inline-ref-guidance.js +2 -35
- package/dist/core/memory/inline-ref-inventory.js +1 -59
- package/dist/core/memory/lint.js +2 -671
- package/dist/core/memory/project-namespace.js +2 -85
- package/dist/core/memory/repository-association.js +1 -129
- package/dist/core/memory/tree.js +1 -93
- package/dist/core/memory-resolver.js +2 -611
- package/dist/core/model-config.js +1 -107
- package/dist/core/model-routes.js +1 -201
- package/dist/core/nested-stores.js +2 -166
- package/dist/core/output.js +7 -99
- package/dist/core/pagination.js +1 -88
- package/dist/core/plugin-swap-lock.js +1 -31
- package/dist/core/pool-credential-store.js +1 -116
- package/dist/core/predicate.js +1 -191
- package/dist/core/preview-registry.js +2 -411
- package/dist/core/preview-result-path.js +1 -26
- package/dist/core/profiles/default-binding.js +1 -24
- package/dist/core/profiles/deletion-reservation.js +1 -42
- package/dist/core/profiles/env-store.js +2 -162
- package/dist/core/profiles/fuzzy-match.js +1 -92
- package/dist/core/profiles/manifest.js +1 -574
- package/dist/core/profiles/select.js +35 -741
- package/dist/core/profiles/state-block.js +3 -17
- package/dist/core/provider-error-recognition.js +1 -74
- package/dist/core/provider-failure.js +1 -86
- package/dist/core/provider-management.js +1 -22
- package/dist/core/remote-canvas-target.js +1 -30
- package/dist/core/render.js +18 -138
- package/dist/core/resolver.js +1 -111
- package/dist/core/review/birth.js +1 -52
- package/dist/core/review/comments.js +5 -279
- package/dist/core/review/companion.js +1 -215
- package/dist/core/review/document.js +2 -138
- package/dist/core/review/project.js +1 -36
- package/dist/core/review/realize.js +1 -71
- package/dist/core/review/remap.js +4 -141
- package/dist/core/review/signal.js +1 -12
- package/dist/core/review/stage.js +1 -184
- package/dist/core/review/store.js +1 -168
- package/dist/core/review/types.js +1 -23
- package/dist/core/runtime/advertised-command-invocation.js +1 -233
- package/dist/core/runtime/auth-reload.js +1 -67
- package/dist/core/runtime/banner.js +1 -51
- package/dist/core/runtime/bearings-render.js +18 -250
- package/dist/core/runtime/bearings.js +7 -194
- package/dist/core/runtime/bin-contributions.js +2 -186
- package/dist/core/runtime/boot-root.js +1 -107
- package/dist/core/runtime/branded-host.js +2 -264
- package/dist/core/runtime/broker/auth-reload.js +1 -157
- package/dist/core/runtime/broker/client-registry.js +1 -179
- package/dist/core/runtime/broker/daemon-ops.js +1 -88
- package/dist/core/runtime/broker/engine-drive.js +1 -354
- package/dist/core/runtime/broker/engine-routing.js +1 -211
- package/dist/core/runtime/broker/event-projection.js +1 -193
- package/dist/core/runtime/broker/extension-abort.js +1 -36
- package/dist/core/runtime/broker/fault-retry.js +1 -588
- package/dist/core/runtime/broker/frame-client.js +1 -132
- package/dist/core/runtime/broker/frame-dispatch.js +1 -183
- package/dist/core/runtime/broker/frame-engine-control.js +1 -231
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
- package/dist/core/runtime/broker/frame-model-query.js +1 -69
- package/dist/core/runtime/broker/frame-read.js +1 -116
- package/dist/core/runtime/broker/frame-replies.js +1 -64
- package/dist/core/runtime/broker/frame-session.js +4 -203
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
- package/dist/core/runtime/broker/inbox.js +13 -163
- package/dist/core/runtime/broker/node-named.js +1 -27
- package/dist/core/runtime/broker/read-ops.js +1 -171
- package/dist/core/runtime/broker/rebind.js +1 -318
- package/dist/core/runtime/broker/tool-groups.js +1 -246
- package/dist/core/runtime/broker/turn-admission.js +1 -31
- package/dist/core/runtime/broker/turn-ignition.js +1 -84
- package/dist/core/runtime/broker-cli.js +3 -81
- package/dist/core/runtime/broker-extension-render.js +5 -135
- package/dist/core/runtime/broker-inventory.js +1 -116
- package/dist/core/runtime/broker-persona-guidance.js +4 -154
- package/dist/core/runtime/broker-protocol.js +3 -152
- package/dist/core/runtime/broker-request.js +1 -85
- package/dist/core/runtime/broker-sdk.js +1 -129
- package/dist/core/runtime/broker.js +1 -1214
- package/dist/core/runtime/canvas-extensions.js +1 -96
- package/dist/core/runtime/chat-inventory-rows.js +1 -105
- package/dist/core/runtime/close.js +1 -265
- package/dist/core/runtime/command-expansion.js +9 -104
- package/dist/core/runtime/command-surface.js +1 -117
- package/dist/core/runtime/connectivity.js +1 -73
- package/dist/core/runtime/deliver-live.js +1 -88
- package/dist/core/runtime/fault-recovery.js +1 -83
- package/dist/core/runtime/fault.js +1 -17
- package/dist/core/runtime/fleet.js +1 -58
- package/dist/core/runtime/front-door-env.js +1 -16
- package/dist/core/runtime/front-door.js +7 -183
- package/dist/core/runtime/headless-pi.js +1 -161
- package/dist/core/runtime/host.js +1 -457
- package/dist/core/runtime/interactive-deliver.js +1 -51
- package/dist/core/runtime/invocation.js +0 -10
- package/dist/core/runtime/kickoff.js +30 -327
- package/dist/core/runtime/launch-config-worker.js +1 -12
- package/dist/core/runtime/launch-prompt.js +4 -13
- package/dist/core/runtime/launch-target.js +1 -55
- package/dist/core/runtime/launch.js +1 -483
- package/dist/core/runtime/lifecycle.js +2 -213
- package/dist/core/runtime/managed-provider-cooling.js +1 -62
- package/dist/core/runtime/memory.js +1 -17
- package/dist/core/runtime/model-registry.js +1 -13
- package/dist/core/runtime/model-selection.js +1 -135
- package/dist/core/runtime/model-swap.js +1 -86
- package/dist/core/runtime/naming.js +14 -298
- package/dist/core/runtime/nerd-font.js +2 -127
- package/dist/core/runtime/node-read.js +2 -386
- package/dist/core/runtime/nodes.js +1 -331
- package/dist/core/runtime/outcome-document.js +1 -97
- package/dist/core/runtime/package-health.js +4 -99
- package/dist/core/runtime/persona.js +2 -55
- package/dist/core/runtime/pi-cli.js +1 -65
- package/dist/core/runtime/pi-vendored.js +1 -66
- package/dist/core/runtime/placement-tmux.js +1 -81
- package/dist/core/runtime/placement.js +1 -386
- package/dist/core/runtime/promote.js +1 -174
- package/dist/core/runtime/prospective-inventory-cli.js +3 -61
- package/dist/core/runtime/prospective-inventory.js +2 -88
- package/dist/core/runtime/recap.js +27 -103
- package/dist/core/runtime/recycle.js +1 -190
- package/dist/core/runtime/reopen.js +1 -138
- package/dist/core/runtime/reset.js +1 -245
- package/dist/core/runtime/resume-root.js +10 -290
- package/dist/core/runtime/revive-all.js +1 -107
- package/dist/core/runtime/revive.js +4 -544
- package/dist/core/runtime/roadmap.js +4 -38
- package/dist/core/runtime/session-branch.js +1 -46
- package/dist/core/runtime/session-cycles.js +1 -110
- package/dist/core/runtime/session-list-cache.js +1 -406
- package/dist/core/runtime/session-visibility.js +1 -99
- package/dist/core/runtime/shell-expansion.js +9 -100
- package/dist/core/runtime/situational-context.js +2 -67
- package/dist/core/runtime/situational-live.js +1 -41
- package/dist/core/runtime/spawn-env.js +1 -255
- package/dist/core/runtime/spawn.js +3 -577
- package/dist/core/runtime/stamp/channel.js +1 -76
- package/dist/core/runtime/stamp/protocol.js +1 -113
- package/dist/core/runtime/stop-guard.js +7 -116
- package/dist/core/runtime/stop-signals.js +1 -46
- package/dist/core/runtime/stream-watchdog.js +1 -134
- package/dist/core/runtime/structured-output.js +4 -156
- package/dist/core/runtime/surface-bg.js +1 -85
- package/dist/core/runtime/tmux-bindings.js +4 -730
- package/dist/core/runtime/tmux-chrome.js +1 -5
- package/dist/core/runtime/tmux-driver.js +7 -637
- package/dist/core/runtime/tool-group-summary.js +6 -85
- package/dist/core/runtime/turn-visibility.js +1 -31
- package/dist/core/runtime/view-socket.js +1 -83
- package/dist/core/runtime/warm-pool.js +1 -395
- package/dist/core/scope.js +1 -254
- package/dist/core/scoped-state/db.js +1 -135
- package/dist/core/scoped-state/migrate.js +3 -181
- package/dist/core/scoped-state/paths.js +1 -27
- package/dist/core/scoped-state/profiles.js +1 -62
- package/dist/core/scoped-state/providers.js +1 -8
- package/dist/core/scoped-state/schema.js +3 -16
- package/dist/core/scoped-state/settings.js +1 -82
- package/dist/core/secrets.js +2 -55
- package/dist/core/self-update.js +1 -71
- package/dist/core/session-model/session-state.js +1 -180
- package/dist/core/shell-segments.js +4 -169
- package/dist/core/spawn.js +1 -26
- package/dist/core/stdout-errors.js +1 -14
- package/dist/core/subscription-state.js +3 -193
- package/dist/core/substrate/frontmatter-validation.js +1 -105
- package/dist/core/substrate/gate-explain.js +1 -424
- package/dist/core/substrate/gate.js +1 -26
- package/dist/core/substrate/index.js +1 -30
- package/dist/core/substrate/injected-store.js +1 -249
- package/dist/core/substrate/listings.js +1 -115
- package/dist/core/substrate/on-read-node.js +1 -36
- package/dist/core/substrate/on-read.js +9 -315
- package/dist/core/substrate/plan.js +1 -266
- package/dist/core/substrate/render-node.js +1 -30
- package/dist/core/substrate/render.js +65 -689
- package/dist/core/substrate/schema.js +1 -186
- package/dist/core/substrate/session-cache.js +1 -83
- package/dist/core/substrate/subject-fields.js +1 -35
- package/dist/core/substrate/subject.js +1 -47
- package/dist/core/substrate/surface-match.js +1 -242
- package/dist/core/termrender/code-doc.js +5 -92
- package/dist/core/termrender/display.js +2 -56
- package/dist/core/termrender/termrender.js +14 -719
- package/dist/core/termrender/version.js +1 -1
- package/dist/core/timing.js +2 -94
- package/dist/core/tui/draw.js +2 -378
- package/dist/core/tui/fuzzy.js +1 -38
- package/dist/core/tui/markdown.js +3 -407
- package/dist/core/tui/page-host.js +1 -74
- package/dist/core/tui/panel.js +1 -137
- package/dist/core/tui/terminal.js +2 -100
- package/dist/core/user-settings.js +1 -454
- package/dist/core/wake.js +1 -296
- package/dist/core/worktree-close.js +6 -228
- package/dist/core/worktree-containment.js +3 -48
- package/dist/core/worktree-landing.js +4 -56
- package/dist/core/worktree-mutation-async.js +10 -280
- package/dist/core/worktree-quarantine.js +1 -54
- package/dist/core/worktree-sweep.js +6 -453
- package/dist/core/worktree.js +18 -899
- package/dist/daemon/api/bridge.js +8 -418
- package/dist/daemon/api/handlers/attach.js +1 -65
- package/dist/daemon/api/handlers/bash-jobs.js +2 -91
- package/dist/daemon/api/handlers/broker-ops.js +1 -447
- package/dist/daemon/api/handlers/broker-recovery.js +1 -251
- package/dist/daemon/api/handlers/canvas.js +6 -490
- package/dist/daemon/api/handlers/chat-inventory.js +1 -25
- package/dist/daemon/api/handlers/crons.js +1 -373
- package/dist/daemon/api/handlers/daemon.js +1 -76
- package/dist/daemon/api/handlers/feedback-comments.js +3 -199
- package/dist/daemon/api/handlers/files.js +1 -63
- package/dist/daemon/api/handlers/focus.js +1 -92
- package/dist/daemon/api/handlers/health.js +1 -76
- package/dist/daemon/api/handlers/human-requests.js +1 -379
- package/dist/daemon/api/handlers/human.js +1 -3
- package/dist/daemon/api/handlers/inbox-page.js +1 -89
- package/dist/daemon/api/handlers/inbox.js +1 -301
- package/dist/daemon/api/handlers/memory.js +1 -50
- package/dist/daemon/api/handlers/messages.js +2 -506
- package/dist/daemon/api/handlers/model-config.js +1 -44
- package/dist/daemon/api/handlers/modelauth.js +1 -165
- package/dist/daemon/api/handlers/node-outcomes.js +1 -181
- package/dist/daemon/api/handlers/nodes.js +1 -939
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +5 -4
- package/runtime.lock.json +5 -5
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,750 +0,0 @@
|
|
|
1
|
-
// Run with: npm run test:integration
|
|
2
|
-
//
|
|
3
|
-
// REAL-SDK regression tests for the latent broker gaps the viewer-reuse scout
|
|
4
|
-
// (node mq5thyli) found (findings-viewer-reuse.md §Q2). These deliberately drive
|
|
5
|
-
// the ACTUAL `@earendil-works/pi-coding-agent` SDK — NOT the `CRTR_BROKER_ENGINE`
|
|
6
|
-
// fake the lifecycle suite uses — because C3 and C4 slipped past the Phase-3 gate
|
|
7
|
-
// PRECISELY because that gate mocked the SDK out. Each test exercises the exact
|
|
8
|
-
// production wiring (`buildBrokerSession` / `makeBrokerUiContext`) and would FAIL
|
|
9
|
-
// against the pre-fix broker:
|
|
10
|
-
//
|
|
11
|
-
// C3 — the broker drives the SERVICES path, so an extension-registered custom
|
|
12
|
-
// model provider is registered into the ModelRegistry and resolves onto
|
|
13
|
-
// the session. Plain createAgentSession never calls registerProvider, so a
|
|
14
|
-
// custom-provider node would get NO model.
|
|
15
|
-
// C2 — with ZERO viewers attached, the broker UI context resolves confirm() /
|
|
16
|
-
// select() / input() / editor() to deny/cancel IMMEDIATELY (noOp), instead
|
|
17
|
-
// of relying on a per-dialog timeout and hanging the agent turn forever.
|
|
18
|
-
//
|
|
19
|
-
// These run offline (no network/auth): registration + system-prompt assembly +
|
|
20
|
-
// dialog routing are all local. No tmux, no broker process — direct unit drives.
|
|
21
|
-
import { after, before, test } from 'node:test';
|
|
22
|
-
import assert from 'node:assert/strict';
|
|
23
|
-
import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync } from 'node:fs';
|
|
24
|
-
import { spawnSync } from 'node:child_process';
|
|
25
|
-
import { tmpdir } from 'node:os';
|
|
26
|
-
import { join, dirname } from 'node:path';
|
|
27
|
-
import { fileURLToPath } from 'node:url';
|
|
28
|
-
import { createAgentSessionServices, createAgentSessionFromServices, SessionManager, VERSION, } from '../../runtime/broker-sdk.js';
|
|
29
|
-
import { buildBrokerSession, makeBrokerUiContext, snapshotMessages } from '../../runtime/broker.js';
|
|
30
|
-
import { isLeadingEngineCommand, resolveSteerCall, chooseGuidanceDeliveryMode, promptWithNextTurnGuidance, engineLeadingCommandTokens, } from '../../runtime/broker/engine-routing.js';
|
|
31
|
-
import { isHiddenJsonlBranchEntry, stripHiddenEntriesFromJsonlExport, } from '../../runtime/broker/frame-session.js';
|
|
32
|
-
import { CANVAS_EXTENSIONS } from '../../runtime/launch.js';
|
|
33
|
-
import { prepareAdvertisedCommandPersistence, promptWithAdvertisedCommandInvocation, } from '../../runtime/advertised-command-invocation.js';
|
|
34
|
-
import { closeDb, migrate, openDb } from '../../canvas/db.js';
|
|
35
|
-
import { closeScopedStores } from '../../scoped-state/db.js';
|
|
36
|
-
import { initializeFreshScopedStore } from '../../scoped-state/migrate.js';
|
|
37
|
-
// The REAL engine, assembled from broker-sdk's static SDK re-exports — bypasses
|
|
38
|
-
// the CRTR_BROKER_ENGINE seam entirely so these tests can never accidentally hit
|
|
39
|
-
// the fake (the whole point: prove the wiring the mock hid).
|
|
40
|
-
const realEngine = {
|
|
41
|
-
createAgentSessionServices,
|
|
42
|
-
createAgentSessionFromServices,
|
|
43
|
-
SessionManager,
|
|
44
|
-
VERSION,
|
|
45
|
-
};
|
|
46
|
-
const HERE = join(dirname(fileURLToPath(import.meta.url)), '..');
|
|
47
|
-
const C3_EXT = join(HERE, 'fixtures', 'c3-custom-provider-ext.ts');
|
|
48
|
-
const C5_EXT = join(HERE, 'fixtures', 'c5-command-boundary-ext.ts');
|
|
49
|
-
const priorModelIntent = process.env['CRTR_MODEL_INTENT'];
|
|
50
|
-
const priorNodeCwd = process.env['CRTR_NODE_CWD'];
|
|
51
|
-
const priorProfileId = process.env['CRTR_PROFILE_ID'];
|
|
52
|
-
const priorHome = process.env['HOME'];
|
|
53
|
-
const priorCanvasHome = process.env['CRTR_HOME'];
|
|
54
|
-
const priorAgentDir = process.env['PI_CODING_AGENT_DIR'];
|
|
55
|
-
let home;
|
|
56
|
-
let agentDir;
|
|
57
|
-
before(() => {
|
|
58
|
-
home = mkdtempSync(join(tmpdir(), 'crtr-sdk-wiring-home-'));
|
|
59
|
-
agentDir = join(home, '.pi', 'agent');
|
|
60
|
-
closeDb();
|
|
61
|
-
closeScopedStores();
|
|
62
|
-
process.env['HOME'] = home;
|
|
63
|
-
process.env['CRTR_HOME'] = join(home, '.crouter', 'canvas');
|
|
64
|
-
process.env['PI_CODING_AGENT_DIR'] = agentDir;
|
|
65
|
-
migrate(openDb());
|
|
66
|
-
initializeFreshScopedStore({ kind: 'user', root: join(home, '.crouter') });
|
|
67
|
-
initializeFreshScopedStore({ kind: 'provider', root: agentDir });
|
|
68
|
-
// buildBrokerSession normally receives its environment through buildBrokerEnv,
|
|
69
|
-
// which strips the launcher's CRTR_* values before applying the target recipe.
|
|
70
|
-
// These direct SDK tests bypass that boundary, so clear the ambient node's
|
|
71
|
-
// routing scope and intent to exercise only each fixture's explicit config.
|
|
72
|
-
delete process.env['CRTR_MODEL_INTENT'];
|
|
73
|
-
delete process.env['CRTR_NODE_CWD'];
|
|
74
|
-
delete process.env['CRTR_PROFILE_ID'];
|
|
75
|
-
});
|
|
76
|
-
after(() => {
|
|
77
|
-
closeDb();
|
|
78
|
-
closeScopedStores();
|
|
79
|
-
if (priorModelIntent === undefined)
|
|
80
|
-
delete process.env['CRTR_MODEL_INTENT'];
|
|
81
|
-
else
|
|
82
|
-
process.env['CRTR_MODEL_INTENT'] = priorModelIntent;
|
|
83
|
-
if (priorNodeCwd === undefined)
|
|
84
|
-
delete process.env['CRTR_NODE_CWD'];
|
|
85
|
-
else
|
|
86
|
-
process.env['CRTR_NODE_CWD'] = priorNodeCwd;
|
|
87
|
-
if (priorProfileId === undefined)
|
|
88
|
-
delete process.env['CRTR_PROFILE_ID'];
|
|
89
|
-
else
|
|
90
|
-
process.env['CRTR_PROFILE_ID'] = priorProfileId;
|
|
91
|
-
if (priorHome === undefined)
|
|
92
|
-
delete process.env['HOME'];
|
|
93
|
-
else
|
|
94
|
-
process.env['HOME'] = priorHome;
|
|
95
|
-
if (priorCanvasHome === undefined)
|
|
96
|
-
delete process.env['CRTR_HOME'];
|
|
97
|
-
else
|
|
98
|
-
process.env['CRTR_HOME'] = priorCanvasHome;
|
|
99
|
-
if (priorAgentDir === undefined)
|
|
100
|
-
delete process.env['PI_CODING_AGENT_DIR'];
|
|
101
|
-
else
|
|
102
|
-
process.env['PI_CODING_AGENT_DIR'] = priorAgentDir;
|
|
103
|
-
rmSync(home, { recursive: true, force: true });
|
|
104
|
-
});
|
|
105
|
-
function brokerExts() {
|
|
106
|
-
return [...CANVAS_EXTENSIONS, C3_EXT];
|
|
107
|
-
}
|
|
108
|
-
function cfg(cwd, extra = {}) {
|
|
109
|
-
return { cwd, extensionPaths: brokerExts(), ...extra };
|
|
110
|
-
}
|
|
111
|
-
// C3 — the SERVICES path registers an extension's custom model provider, so the
|
|
112
|
-
// broker resolves a model that plain createAgentSession (no registerProvider)
|
|
113
|
-
// would never see.
|
|
114
|
-
test('C3 — services path registers an extension model provider; the broker session gets it', async () => {
|
|
115
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c3-'));
|
|
116
|
-
try {
|
|
117
|
-
const { session, services } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C3_EXT], model: 'c3prov/c3model' }));
|
|
118
|
-
try {
|
|
119
|
-
// The extension's provider was registered into the SERVICES model runtime (this
|
|
120
|
-
// is the registerProvider step plain createAgentSession skips).
|
|
121
|
-
const found = services.modelRuntime.getModel('c3prov', 'c3model');
|
|
122
|
-
assert.ok(found, 'C3: extension-registered model is present in the services ModelRuntime');
|
|
123
|
-
assert.equal(found.provider, 'c3prov', 'C3: provider name round-trips');
|
|
124
|
-
assert.equal(found.id, 'c3model', 'C3: model id round-trips');
|
|
125
|
-
// …and the broker resolved it onto the session AGAINST the services runtime
|
|
126
|
-
// (a fresh ModelRuntime would have returned undefined → no model).
|
|
127
|
-
assert.equal(session.model?.id, 'c3model', 'C3: the broker session got the custom-provider model');
|
|
128
|
-
}
|
|
129
|
-
finally {
|
|
130
|
-
session.dispose();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
test('C3b — broker splits model thinking suffix before SDK registry lookup', async () => {
|
|
138
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c3b-'));
|
|
139
|
-
try {
|
|
140
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C3_EXT], model: 'c3prov/c3model:high' }));
|
|
141
|
-
try {
|
|
142
|
-
assert.equal(session.model?.id, 'c3model', 'C3b: suffixed model specs resolve by model id instead of falling back to SDK default');
|
|
143
|
-
}
|
|
144
|
-
finally {
|
|
145
|
-
session.dispose();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
finally {
|
|
149
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
test('C3c — mandatory canvas extensions must be loaded, not merely passed in argv', async () => {
|
|
153
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c3c-'));
|
|
154
|
-
try {
|
|
155
|
-
const badServiceFailureEngine = {
|
|
156
|
-
createAgentSessionServices: async () => ({
|
|
157
|
-
cwd,
|
|
158
|
-
agentDir: cwd,
|
|
159
|
-
modelRegistry: { hasConfiguredAuth: () => false, getAvailable: () => [] },
|
|
160
|
-
diagnostics: [],
|
|
161
|
-
resourceLoader: {
|
|
162
|
-
getExtensions: () => ({
|
|
163
|
-
extensions: CANVAS_EXTENSIONS.slice(1).map((path) => ({
|
|
164
|
-
path,
|
|
165
|
-
resolvedPath: path,
|
|
166
|
-
sourceInfo: {},
|
|
167
|
-
handlers: new Map(),
|
|
168
|
-
tools: new Map(),
|
|
169
|
-
messageRenderers: new Map(),
|
|
170
|
-
})),
|
|
171
|
-
errors: [{ path: CANVAS_EXTENSIONS[0], error: 'boom' }],
|
|
172
|
-
runtime: {},
|
|
173
|
-
}),
|
|
174
|
-
},
|
|
175
|
-
}),
|
|
176
|
-
createAgentSessionFromServices: async () => {
|
|
177
|
-
throw new Error('C3c: must fail before session creation');
|
|
178
|
-
},
|
|
179
|
-
SessionManager: class {
|
|
180
|
-
static create = () => ({});
|
|
181
|
-
},
|
|
182
|
-
VERSION: 'test',
|
|
183
|
-
};
|
|
184
|
-
await assert.rejects(() => buildBrokerSession(badServiceFailureEngine, cfg(cwd, { model: 'c3prov/c3model' })), /mandatory canvas extensions failed to load/);
|
|
185
|
-
}
|
|
186
|
-
finally {
|
|
187
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
function runIsolatedManagedLaunch(pool) {
|
|
191
|
-
const home = mkdtempSync(join(tmpdir(), 'crtr-c3-managed-home-'));
|
|
192
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c3-managed-cwd-'));
|
|
193
|
-
const canvasHome = join(home, '.crouter', 'canvas');
|
|
194
|
-
const agentDir = join(home, '.pi', 'agent');
|
|
195
|
-
const script = `
|
|
196
|
-
process.env.CRTR_HOME = ${JSON.stringify(canvasHome)};
|
|
197
|
-
process.env.PI_CODING_AGENT_DIR = ${JSON.stringify(agentDir)};
|
|
198
|
-
const { createAgentSessionServices, createAgentSessionFromServices, SessionManager, VERSION } = await import(${JSON.stringify(new URL('../../runtime/broker-sdk.ts', import.meta.url).href)});
|
|
199
|
-
const { buildBrokerSession } = await import(${JSON.stringify(new URL('../../runtime/broker.ts', import.meta.url).href)});
|
|
200
|
-
const { migrate, openDb } = await import(${JSON.stringify(new URL('../../canvas/db.ts', import.meta.url).href)});
|
|
201
|
-
const { initializeFreshScopedStore } = await import(${JSON.stringify(new URL('../../scoped-state/migrate.ts', import.meta.url).href)});
|
|
202
|
-
const { writeSubscriptionPool } = await import(${JSON.stringify(new URL('../../subscription-state.ts', import.meta.url).href)});
|
|
203
|
-
migrate(openDb());
|
|
204
|
-
initializeFreshScopedStore({ kind: 'user', root: ${JSON.stringify(join(home, '.crouter'))} });
|
|
205
|
-
initializeFreshScopedStore({ kind: 'provider', root: ${JSON.stringify(agentDir)} });
|
|
206
|
-
await writeSubscriptionPool('anthropic', ${JSON.stringify(pool)});
|
|
207
|
-
const realEngine = { createAgentSessionServices, createAgentSessionFromServices, SessionManager, VERSION };
|
|
208
|
-
const engine = {
|
|
209
|
-
...realEngine,
|
|
210
|
-
async createAgentSessionServices(options) {
|
|
211
|
-
const services = await realEngine.createAgentSessionServices(options);
|
|
212
|
-
const fallback = services.modelRuntime.getModel('c3prov', 'c3model');
|
|
213
|
-
if (!fallback) throw new Error('test fallback model was not registered');
|
|
214
|
-
const requested = { ...fallback, provider: 'anthropic', id: 'cooling-model' };
|
|
215
|
-
// The broker reads models through pi's sync ModelRegistry facade, which delegates
|
|
216
|
-
// getModel/getModels/getAvailableSnapshot/hasConfiguredAuth to the runtime.
|
|
217
|
-
const modelRuntime = Object.create(services.modelRuntime);
|
|
218
|
-
modelRuntime.getModel = (provider, id) =>
|
|
219
|
-
provider === 'anthropic' && id === 'cooling-model' ? requested : provider === 'c3prov' && id === 'c3model' ? fallback : undefined;
|
|
220
|
-
modelRuntime.getModels = () => [requested, fallback];
|
|
221
|
-
modelRuntime.getAvailableSnapshot = () => [fallback];
|
|
222
|
-
modelRuntime.hasConfiguredAuth = (providerId) => providerId === fallback.provider;
|
|
223
|
-
return { ...services, modelRuntime };
|
|
224
|
-
},
|
|
225
|
-
};
|
|
226
|
-
const { session } = await buildBrokerSession(engine, { cwd: ${JSON.stringify(cwd)}, extensionPaths: [${JSON.stringify(C3_EXT)}], model: 'anthropic/cooling-model' });
|
|
227
|
-
console.log(JSON.stringify({ provider: session.model?.provider, id: session.model?.id }));
|
|
228
|
-
session.dispose();
|
|
229
|
-
`;
|
|
230
|
-
try {
|
|
231
|
-
const result = spawnSync(process.execPath, ['--import', 'tsx/esm', '--input-type=module', '-e', script], {
|
|
232
|
-
cwd: process.cwd(),
|
|
233
|
-
env: { ...process.env, HOME: home },
|
|
234
|
-
encoding: 'utf8',
|
|
235
|
-
});
|
|
236
|
-
assert.equal(result.status, 0, result.stderr);
|
|
237
|
-
return JSON.parse(result.stdout);
|
|
238
|
-
}
|
|
239
|
-
finally {
|
|
240
|
-
rmSync(home, { recursive: true, force: true });
|
|
241
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
test('C3f — a logical request can reach a non-managed raw-registry fallback when no managed provider is authenticated', async () => {
|
|
245
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c3c-'));
|
|
246
|
-
const priorIntent = process.env['CRTR_MODEL_INTENT'];
|
|
247
|
-
const priorNodeCwd = process.env['CRTR_NODE_CWD'];
|
|
248
|
-
process.env['CRTR_MODEL_INTENT'] = 'custom/strong';
|
|
249
|
-
process.env['CRTR_NODE_CWD'] = cwd;
|
|
250
|
-
mkdirSync(join(cwd, '.crouter'), { recursive: true });
|
|
251
|
-
writeFileSync(join(cwd, '.crouter', 'config.json'), `${JSON.stringify({
|
|
252
|
-
modelRoutes: {
|
|
253
|
-
c3: {
|
|
254
|
-
family: 'custom',
|
|
255
|
-
credentialSource: 'user',
|
|
256
|
-
providerId: 'c3prov',
|
|
257
|
-
models: { ultra: 'c3prov/c3model', strong: 'c3prov/c3model', medium: 'c3prov/c3model', light: 'c3prov/c3model' },
|
|
258
|
-
},
|
|
259
|
-
},
|
|
260
|
-
})}\n`);
|
|
261
|
-
try {
|
|
262
|
-
const deterministicEngine = {
|
|
263
|
-
...realEngine,
|
|
264
|
-
async createAgentSessionServices(options) {
|
|
265
|
-
const services = await realEngine.createAgentSessionServices(options);
|
|
266
|
-
const requested = services.modelRuntime.getModel('c3prov', 'c3model');
|
|
267
|
-
const fallback = services.modelRuntime.getModel('c3fallback', 'fallback-model');
|
|
268
|
-
// The broker reads models through pi's sync ModelRegistry facade, which delegates
|
|
269
|
-
// getAll/getAvailable/hasConfiguredAuth straight to these three runtime methods.
|
|
270
|
-
const modelRuntime = Object.create(services.modelRuntime);
|
|
271
|
-
modelRuntime.getModels = () => [requested, fallback];
|
|
272
|
-
modelRuntime.getAvailableSnapshot = () => [fallback];
|
|
273
|
-
modelRuntime.hasConfiguredAuth = (providerId) => providerId === fallback.provider;
|
|
274
|
-
return { ...services, modelRuntime };
|
|
275
|
-
},
|
|
276
|
-
};
|
|
277
|
-
// The requested model (c3prov/c3model) is registered but UNauthenticated, and
|
|
278
|
-
// the only authenticated candidate is the non-managed c3fallback/fallback-model.
|
|
279
|
-
// With NO managed provider authenticated, resolveLaunchModel's tier-2 promotes
|
|
280
|
-
// that authenticated non-managed model to an automatic fallback — so the launch
|
|
281
|
-
// SUCCEEDS on it rather than rejecting.
|
|
282
|
-
const { session } = await buildBrokerSession(deterministicEngine, cfg(cwd, { extensionPaths: [C3_EXT], model: 'c3prov/c3model' }));
|
|
283
|
-
try {
|
|
284
|
-
assert.equal(`${session.model?.provider}/${session.model?.id}`, 'c3fallback/fallback-model');
|
|
285
|
-
}
|
|
286
|
-
finally {
|
|
287
|
-
session.dispose();
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
finally {
|
|
291
|
-
if (priorIntent === undefined)
|
|
292
|
-
delete process.env['CRTR_MODEL_INTENT'];
|
|
293
|
-
else
|
|
294
|
-
process.env['CRTR_MODEL_INTENT'] = priorIntent;
|
|
295
|
-
if (priorNodeCwd === undefined)
|
|
296
|
-
delete process.env['CRTR_NODE_CWD'];
|
|
297
|
-
else
|
|
298
|
-
process.env['CRTR_NODE_CWD'] = priorNodeCwd;
|
|
299
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
300
|
-
}
|
|
301
|
-
});
|
|
302
|
-
test('C3g — an explicit managed subscription pool authenticates a registered requested model without SDK auth', () => {
|
|
303
|
-
const selected = runIsolatedManagedLaunch([
|
|
304
|
-
{ label: 'explicit', refresh: 'r', access: 'a', expires: Date.now() + 60_000, rateLimitedUntil: 0, lastAttemptAt: 0, lastRateLimitedAt: 0 },
|
|
305
|
-
]);
|
|
306
|
-
assert.equal(selected.provider, 'anthropic');
|
|
307
|
-
assert.equal(selected.id, 'cooling-model');
|
|
308
|
-
});
|
|
309
|
-
test('C3h — a cooling managed launch target boots model-less rather than falling back to a non-managed provider', () => {
|
|
310
|
-
// The managed anthropic target is registered + pool-authenticated but COOLING
|
|
311
|
-
// (rateLimitedUntil in the future). Because a managed provider IS authenticated,
|
|
312
|
-
// resolveLaunchModel's tier-2 refuses the non-managed c3prov/c3model fallback;
|
|
313
|
-
// the only managed target is cooling ⇒ tier-3 selects no model ⇒ the broker boots
|
|
314
|
-
// MODEL-LESS (the real SDK's unknown-stub) instead of throwing 'no viable launch
|
|
315
|
-
// model'. The title's intent — a cooling managed target does NOT drag in a
|
|
316
|
-
// non-managed provider — now holds by booting model-less.
|
|
317
|
-
const selected = runIsolatedManagedLaunch([
|
|
318
|
-
{ label: 'explicit', refresh: 'r', access: 'a', expires: Date.now() + 60_000, rateLimitedUntil: Date.now() + 60_000, lastAttemptAt: 0, lastRateLimitedAt: 0 },
|
|
319
|
-
]);
|
|
320
|
-
assert.equal(selected.provider, 'unknown');
|
|
321
|
-
assert.equal(selected.id, 'unknown');
|
|
322
|
-
});
|
|
323
|
-
// (C4 — project guidance now comes from the document substrate: crouter keeps
|
|
324
|
-
// `noContextFiles: true` in buildBrokerSession, and buildContextIntro's
|
|
325
|
-
// `<project_context>` block is environment-only. Covered by
|
|
326
|
-
// context-intro.test.ts's environment-only regression.)
|
|
327
|
-
// C2 — zero-writable dialogs resolve to deny/cancel IMMEDIATELY (noOp), never
|
|
328
|
-
// hanging the turn and never waiting on a per-dialog timeout. Drives the REAL
|
|
329
|
-
// makeBrokerUiContext (the exact ExtensionUIContext the SDK hands extensions),
|
|
330
|
-
// with a writable() snapshot that reports zero writable viewers.
|
|
331
|
-
test('C2 — zero-writable UI context resolves dialogs to deny/cancel immediately (noOp, no hang)', async () => {
|
|
332
|
-
const ctx = makeBrokerUiContext({
|
|
333
|
-
writable: () => [], // ZERO writable viewers attached
|
|
334
|
-
forward: () => {
|
|
335
|
-
throw new Error('C2: must NOT forward a dialog when no writable viewer is attached');
|
|
336
|
-
},
|
|
337
|
-
pending: new Map(),
|
|
338
|
-
broadcast: () => { },
|
|
339
|
-
});
|
|
340
|
-
// confirm() WITH a large timeout: the fix must resolve at once (deny), NOT after
|
|
341
|
-
// the timeout — the old timeout-reliant path would have waited 60s (or, with no
|
|
342
|
-
// timeout, hung forever). Race against a 2s "HANG" sentinel to make a regression
|
|
343
|
-
// a hard failure rather than a slow pass.
|
|
344
|
-
const start = Date.now();
|
|
345
|
-
const confirmed = await Promise.race([
|
|
346
|
-
ctx.confirm('proceed?', 'really?', { timeout: 60_000 }),
|
|
347
|
-
new Promise((r) => setTimeout(() => r('HANG'), 2_000)),
|
|
348
|
-
]);
|
|
349
|
-
assert.equal(confirmed, false, 'C2: confirm() denies (false) with zero viewers');
|
|
350
|
-
assert.ok(Date.now() - start < 1_000, 'C2: resolved immediately, not after the 60s timeout');
|
|
351
|
-
// The other blocking dialogs cancel to undefined — including editor(), which
|
|
352
|
-
// takes NO opts at all (so it could never carry a timeout to lean on).
|
|
353
|
-
assert.equal(await ctx.select('pick', ['a', 'b']), undefined, 'C2: select() cancels (undefined)');
|
|
354
|
-
assert.equal(await ctx.input('name'), undefined, 'C2: input() cancels (undefined)');
|
|
355
|
-
assert.equal(await ctx.editor('edit'), undefined, 'C2: editor() cancels (undefined)');
|
|
356
|
-
});
|
|
357
|
-
// M2 (review mq5wkqep / T4) — REPLACES the Wave-0 M-1 cancel-on-detach. A dialog
|
|
358
|
-
// forwarded to a writable viewer that then DETACHES must NOT be cancelled: it
|
|
359
|
-
// stays pending so a brief detach/reattach (or another writable viewer joining)
|
|
360
|
-
// does not lose an answerable dialog. The broker-side default timeout is the ONLY
|
|
361
|
-
// non-answer resolution (proven here with a short per-dialog timeout standing in
|
|
362
|
-
// for the 120s default). Guards against regressing to the over-eager cancel.
|
|
363
|
-
test('M2 — a forwarded dialog stays pending when its writable viewer detaches, resolving only on the broker-side timeout', async () => {
|
|
364
|
-
const pending = new Map();
|
|
365
|
-
let attached = true;
|
|
366
|
-
const ctx = makeBrokerUiContext({
|
|
367
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
368
|
-
writable: () => (attached ? [{ id: 'c1' }] : []),
|
|
369
|
-
forward: () => {
|
|
370
|
-
/* a real writable viewer would receive the request over its socket */
|
|
371
|
-
},
|
|
372
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
373
|
-
pending: pending,
|
|
374
|
-
broadcast: () => { },
|
|
375
|
-
});
|
|
376
|
-
// A writable viewer attached → confirm() forwards + registers a pending dialog
|
|
377
|
-
// (with the request retained for welcome.pending_dialog / replay, T4) and does
|
|
378
|
-
// NOT resolve yet. A short per-dialog timeout stands in for the 120s broker default.
|
|
379
|
-
const p = ctx.confirm('proceed?', 'really?', { timeout: 80 });
|
|
380
|
-
assert.equal(pending.size, 1, 'M2: a forwarded dialog is pending while a writable viewer is attached');
|
|
381
|
-
const entry = [...pending.values()][0];
|
|
382
|
-
assert.ok(entry.request, 'M2: the pending entry retains the request (welcome/re-route need it)');
|
|
383
|
-
assert.equal(entry.cancel, undefined, 'M2: there is no cancel-on-detach path anymore');
|
|
384
|
-
// The writable viewer detaches → the dialog STAYS pending (the broker no longer cancels it).
|
|
385
|
-
attached = false;
|
|
386
|
-
assert.equal(pending.size, 1, 'M2: writable-viewer detach does NOT cancel the in-flight dialog');
|
|
387
|
-
// Only the broker-side timeout resolves it, to the SAFE default (deny).
|
|
388
|
-
const resolved = await Promise.race([
|
|
389
|
-
p,
|
|
390
|
-
new Promise((r) => setTimeout(() => r('HANG'), 2_000)),
|
|
391
|
-
]);
|
|
392
|
-
assert.equal(resolved, false, 'M2: resolves to deny on the broker-side timeout, never hangs');
|
|
393
|
-
assert.equal(pending.size, 0, 'M2: the pending registry is drained after the timeout');
|
|
394
|
-
});
|
|
395
|
-
// C5 — exact leading engine-command suppression and hidden display:false
|
|
396
|
-
// guidance delivery ordering.
|
|
397
|
-
//
|
|
398
|
-
// REACHABILITY NOTE: broker.ts's `handleFrame`/`driveEngine` switches are
|
|
399
|
-
// private closures inside `runBroker`, so this serialized source suite does not
|
|
400
|
-
// boot a broker process to drive raw wire frames (that end-to-end plumbing lives
|
|
401
|
-
// in the compiled seam alongside the sibling `list_models` read-op). Instead every
|
|
402
|
-
// EXPORTED building block those closures call is driven directly — the pure
|
|
403
|
-
// decision functions (`isLeadingEngineCommand`, `chooseGuidanceDeliveryMode`,
|
|
404
|
-
// `engineLeadingCommandTokens`) AND the stateful delivery/export helpers
|
|
405
|
-
// (`promptWithNextTurnGuidance`, `stripHiddenEntriesFromJsonlExport` /
|
|
406
|
-
// `isHiddenJsonlBranchEntry`) — against a REAL SDK session or REAL exported
|
|
407
|
-
// JSONL bytes, including the exact interception/leak window (Major 1) and the
|
|
408
|
-
// actual exported file (Major 2). What remains untested here is only the
|
|
409
|
-
// one-line frame relay (`sendFrame(client, buildListMemoryRefsData(id))`), a
|
|
410
|
-
// verbatim sibling of the compiled-seam-covered `list_models` dispatch whose only
|
|
411
|
-
// non-trivial input, `engineLeadingCommandTokens(session)`, is proven below
|
|
412
|
-
// against a real session.
|
|
413
|
-
test('a streaming extension command uses prompt preflight instead of the rejecting steer queue', () => {
|
|
414
|
-
const session = { extensionRunner: { getCommand: (name) => (name === 'recap' ? { name: 'recap' } : undefined) } };
|
|
415
|
-
assert.equal(resolveSteerCall('/recap', session), 'prompt');
|
|
416
|
-
assert.equal(resolveSteerCall('new information', session), 'steer');
|
|
417
|
-
});
|
|
418
|
-
test('C5 — isLeadingEngineCommand against a REAL session (registered extension command)', async () => {
|
|
419
|
-
// Only the extension-command branch is driven against a REAL session here.
|
|
420
|
-
// Skill/prompt-template discovery requires `session.bindExtensions(...)`
|
|
421
|
-
// (the real broker's initial-boot step, which fires `resources_discover`) —
|
|
422
|
-
// not reachable from `buildBrokerSession` alone, and driving it directly
|
|
423
|
-
// pulls in this machine's full local pi resource corpus (slow, environment-
|
|
424
|
-
// dependent). The skill/prompt-template branches run the same accessor-
|
|
425
|
-
// guarded decision logic as the extension-command branch proven here.
|
|
426
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c5-cmd-'));
|
|
427
|
-
try {
|
|
428
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C3_EXT, C5_EXT], model: 'c3prov/c3model' }));
|
|
429
|
-
try {
|
|
430
|
-
assert.equal(isLeadingEngineCommand('/devcmd', session), true, 'a real registered extension command matches');
|
|
431
|
-
assert.equal(isLeadingEngineCommand('/devcmd extra args', session), true, 'space-separated still matches against a real session');
|
|
432
|
-
assert.equal(isLeadingEngineCommand('/nope', session), false, 'an unregistered command does not match against a real session');
|
|
433
|
-
}
|
|
434
|
-
finally {
|
|
435
|
-
session.dispose();
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
finally {
|
|
439
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
440
|
-
}
|
|
441
|
-
});
|
|
442
|
-
test('an advertised custom command persists its exact raw invocation without replacing expanded agent input', async () => {
|
|
443
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-advertised-command-'));
|
|
444
|
-
try {
|
|
445
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C5_EXT] }));
|
|
446
|
-
try {
|
|
447
|
-
const raw = '/gatewaycmd exact spacing ';
|
|
448
|
-
await promptWithAdvertisedCommandInvocation(session, raw, () => session.prompt(raw, {}));
|
|
449
|
-
const custom = session.sessionManager
|
|
450
|
-
.buildSessionContext()
|
|
451
|
-
.messages.find((message) => message.role === 'custom' && message.customType === 'fixture-output');
|
|
452
|
-
assert.deepEqual(custom, {
|
|
453
|
-
role: 'custom',
|
|
454
|
-
customType: 'fixture-output',
|
|
455
|
-
content: 'expanded agent input',
|
|
456
|
-
display: true,
|
|
457
|
-
details: { fixture: true },
|
|
458
|
-
crouterAdvertisedCommandInvocation: { raw },
|
|
459
|
-
timestamp: custom?.timestamp,
|
|
460
|
-
});
|
|
461
|
-
const welcome = snapshotMessages(session);
|
|
462
|
-
assert.ok(welcome);
|
|
463
|
-
const welcomeCustom = welcome.filter(({ message }) => message.role === 'custom' && message.customType === 'fixture-output');
|
|
464
|
-
assert.equal(welcomeCustom.length, 1, 'welcome reconstructs one advertised custom message');
|
|
465
|
-
assert.deepEqual(welcomeCustom[0].message
|
|
466
|
-
.crouterAdvertisedCommandInvocation, { raw }, 'welcome preserves the exact advertised invocation spacing');
|
|
467
|
-
const persisted = session.sessionManager
|
|
468
|
-
.getEntries()
|
|
469
|
-
.find((entry) => entry.type === 'custom_message' &&
|
|
470
|
-
entry.customType === 'fixture-output');
|
|
471
|
-
assert.equal(persisted?.type, 'custom_message');
|
|
472
|
-
if (persisted?.type !== 'custom_message')
|
|
473
|
-
assert.fail('custom message was not persisted');
|
|
474
|
-
assert.equal(persisted.content, 'expanded agent input');
|
|
475
|
-
assert.deepEqual(persisted.details, {
|
|
476
|
-
crouterPersistenceEnvelope: true,
|
|
477
|
-
crouterAdvertisedCommandInvocation: { raw },
|
|
478
|
-
extensionDetails: { fixture: true },
|
|
479
|
-
});
|
|
480
|
-
}
|
|
481
|
-
finally {
|
|
482
|
-
session.dispose();
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
|
-
finally {
|
|
486
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
487
|
-
}
|
|
488
|
-
});
|
|
489
|
-
test('advertised invocation metadata survives nextTurn delivery and null content normalization', async () => {
|
|
490
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-advertised-next-turn-'));
|
|
491
|
-
try {
|
|
492
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C5_EXT] }));
|
|
493
|
-
try {
|
|
494
|
-
const rawA = '/gatewaynext first exact text ';
|
|
495
|
-
const rawB = '/gatewaynext second exact text ';
|
|
496
|
-
for (const raw of [rawA, rawB]) {
|
|
497
|
-
await promptWithAdvertisedCommandInvocation(session, raw, () => session.prompt(raw, {}));
|
|
498
|
-
}
|
|
499
|
-
const pending = session._pendingNextTurnMessages;
|
|
500
|
-
assert.deepEqual(pending.map((queued) => ({
|
|
501
|
-
content: queued.content,
|
|
502
|
-
details: queued.details,
|
|
503
|
-
invocation: queued.crouterAdvertisedCommandInvocation,
|
|
504
|
-
})), [
|
|
505
|
-
{
|
|
506
|
-
content: [],
|
|
507
|
-
details: 'extension-details',
|
|
508
|
-
invocation: { raw: rawA },
|
|
509
|
-
},
|
|
510
|
-
{
|
|
511
|
-
content: [],
|
|
512
|
-
details: 'extension-details',
|
|
513
|
-
invocation: { raw: rawB },
|
|
514
|
-
},
|
|
515
|
-
]);
|
|
516
|
-
// Simulate a queue policy draining B before A. Payload equality cannot
|
|
517
|
-
// identify them; the app-message metadata must bind each persistence.
|
|
518
|
-
for (const queued of [pending[1], pending[0]]) {
|
|
519
|
-
prepareAdvertisedCommandPersistence(session, queued);
|
|
520
|
-
session.sessionManager.appendCustomMessageEntry(queued.customType, queued.content, queued.display, queued.details);
|
|
521
|
-
}
|
|
522
|
-
const restored = session.sessionManager
|
|
523
|
-
.buildSessionContext()
|
|
524
|
-
.messages.slice(-2);
|
|
525
|
-
assert.deepEqual(restored.map((message) => ({
|
|
526
|
-
details: message.details,
|
|
527
|
-
invocation: message.crouterAdvertisedCommandInvocation,
|
|
528
|
-
})), [
|
|
529
|
-
{ details: 'extension-details', invocation: { raw: rawB } },
|
|
530
|
-
{ details: 'extension-details', invocation: { raw: rawA } },
|
|
531
|
-
]);
|
|
532
|
-
}
|
|
533
|
-
finally {
|
|
534
|
-
session.dispose();
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
finally {
|
|
538
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
539
|
-
}
|
|
540
|
-
});
|
|
541
|
-
test('C5 — chooseGuidanceDeliveryMode truth table (pure)', () => {
|
|
542
|
-
// idle prompt (routeCall='prompt', not streaming) -> guidance precedes the
|
|
543
|
-
// human call, in the SAME turn.
|
|
544
|
-
assert.equal(chooseGuidanceDeliveryMode('prompt', 'prompt', false), 'nextTurn');
|
|
545
|
-
// idle follow_up escalated to a prompt route -> same as above.
|
|
546
|
-
assert.equal(chooseGuidanceDeliveryMode('follow_up', 'prompt', false), 'nextTurn');
|
|
547
|
-
// a TRUE mid-stream follow_up -> followUp, human call first.
|
|
548
|
-
assert.equal(chooseGuidanceDeliveryMode('follow_up', 'followUp', true), 'followUp');
|
|
549
|
-
// a steer frame -> steer, always, regardless of routeCall/isStreaming.
|
|
550
|
-
assert.equal(chooseGuidanceDeliveryMode('steer', undefined, false), 'steer');
|
|
551
|
-
assert.equal(chooseGuidanceDeliveryMode('steer', 'prompt', true), 'steer');
|
|
552
|
-
// a prompt frame arriving WHILE streaming (m-B steer-while-streaming) ->
|
|
553
|
-
// steer, never nextTurn (that would attach guidance to a later, unrelated turn).
|
|
554
|
-
assert.equal(chooseGuidanceDeliveryMode('prompt', 'prompt', true), 'steer');
|
|
555
|
-
});
|
|
556
|
-
test('C5 — fake-engine sendCustomMessage records the call in order without crashing', async () => {
|
|
557
|
-
const home = mkdtempSync(join(tmpdir(), 'crtr-c5-fake-home-'));
|
|
558
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-c5-fake-cwd-'));
|
|
559
|
-
const prevHome = process.env['CRTR_HOME'];
|
|
560
|
-
const prevNodeId = process.env['CRTR_NODE_ID'];
|
|
561
|
-
try {
|
|
562
|
-
process.env['CRTR_HOME'] = home;
|
|
563
|
-
process.env['CRTR_NODE_ID'] = 'crtr-c5-fake-node';
|
|
564
|
-
const fake = await import('.././fixtures/fake-engine.js');
|
|
565
|
-
const services = await fake.createAgentSessionServices({ cwd });
|
|
566
|
-
const sessionManager = fake.SessionManager.create(cwd);
|
|
567
|
-
const { session } = await fake.createAgentSessionFromServices({ services, sessionManager });
|
|
568
|
-
try {
|
|
569
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
570
|
-
const anySession = session;
|
|
571
|
-
await anySession.sendCustomMessage({ customType: 'crtr-memory-refs', content: 'guidance text', display: false }, { deliverAs: 'nextTurn' });
|
|
572
|
-
assert.deepEqual(anySession.customMessages, [
|
|
573
|
-
{ customType: 'crtr-memory-refs', content: 'guidance text', display: false, deliverAs: 'nextTurn' },
|
|
574
|
-
]);
|
|
575
|
-
}
|
|
576
|
-
finally {
|
|
577
|
-
session.dispose();
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
finally {
|
|
581
|
-
if (prevHome === undefined)
|
|
582
|
-
delete process.env['CRTR_HOME'];
|
|
583
|
-
else
|
|
584
|
-
process.env['CRTR_HOME'] = prevHome;
|
|
585
|
-
if (prevNodeId === undefined)
|
|
586
|
-
delete process.env['CRTR_NODE_ID'];
|
|
587
|
-
else
|
|
588
|
-
process.env['CRTR_NODE_ID'] = prevNodeId;
|
|
589
|
-
rmSync(home, { recursive: true, force: true });
|
|
590
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
591
|
-
}
|
|
592
|
-
});
|
|
593
|
-
// Review fix (Major 1) — promptWithNextTurnGuidance atomically clears its own
|
|
594
|
-
// pending nextTurn guidance if the prompt it rode alongside never reaches pi's
|
|
595
|
-
// internal drain point (agent-session.js `prompt()` step 8) — an extension-
|
|
596
|
-
// command interception (step 1, `_tryExecuteExtensionCommand`) is a genuine,
|
|
597
|
-
// fully offline SDK early-return that proves the exact leak window the review
|
|
598
|
-
// flagged, without touching model/auth/network.
|
|
599
|
-
test('Major 1 fix — promptWithNextTurnGuidance clears its own pending guidance when the human prompt is intercepted by an extension command (never reaches pi\'s drain)', async () => {
|
|
600
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-m1-atomic-'));
|
|
601
|
-
try {
|
|
602
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C5_EXT] }));
|
|
603
|
-
try {
|
|
604
|
-
// '/devcmd' is a REAL registered extension command (c5-command-boundary-
|
|
605
|
-
// ext.ts) — pi's own `_tryExecuteExtensionCommand` intercepts it at the
|
|
606
|
-
// FIRST await inside `prompt()`, well before the pending-nextTurn drain,
|
|
607
|
-
// and resolves the whole call successfully (handled=true) without ever
|
|
608
|
-
// reaching it. Pre-fix (`sendGuidance(...).then(() => session.prompt(...))`
|
|
609
|
-
// with no cleanup), this exact sequence stranded the guidance message in
|
|
610
|
-
// `_pendingNextTurnMessages` to leak into whatever LATER unrelated prompt
|
|
611
|
-
// happened to drain it next.
|
|
612
|
-
await promptWithNextTurnGuidance(session, 'crtr memory read dev', () => session.prompt('/devcmd', {}));
|
|
613
|
-
const pending = session._pendingNextTurnMessages;
|
|
614
|
-
assert.deepEqual(pending, [], 'Major 1: an intercepted prompt leaves NO stranded guidance — an unrelated later prompt would receive nothing');
|
|
615
|
-
}
|
|
616
|
-
finally {
|
|
617
|
-
session.dispose();
|
|
618
|
-
}
|
|
619
|
-
}
|
|
620
|
-
finally {
|
|
621
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
test('promptWithNextTurnGuidance uses a structured-clone-safe cleanup marker', async () => {
|
|
625
|
-
const pending = [];
|
|
626
|
-
const session = {
|
|
627
|
-
_pendingNextTurnMessages: pending,
|
|
628
|
-
async sendCustomMessage(message) {
|
|
629
|
-
// Pi structured-clones the queued custom message while assembling a real
|
|
630
|
-
// turn. A Symbol marker reaches this seam and aborts the prompt before
|
|
631
|
-
// the provider runs; clone here to keep that runtime failure covered.
|
|
632
|
-
pending.push(structuredClone(message));
|
|
633
|
-
},
|
|
634
|
-
};
|
|
635
|
-
await promptWithNextTurnGuidance(session, 'crtr memory read dev', async () => undefined);
|
|
636
|
-
assert.deepEqual(pending, [], 'clone-safe marker still identifies and clears exactly its own pending entry');
|
|
637
|
-
});
|
|
638
|
-
test('Major 1 fix — promptWithNextTurnGuidance leaves the queue drained (not doubly-cleared) on a normal successful prompt', async () => {
|
|
639
|
-
// Guards against the cleanup over-firing on the HAPPY path: a prompt that
|
|
640
|
-
// genuinely reaches pi's drain already empties `_pendingNextTurnMessages`
|
|
641
|
-
// itself (folding the guidance into the SAME turn) — the cleanup must be a
|
|
642
|
-
// no-op here, not remove something pi already consumed correctly. Uses the
|
|
643
|
-
// '/devcmd' extension-command interception again (offline, no model/auth
|
|
644
|
-
// needed) as the "prompt call that settles" — what matters for this
|
|
645
|
-
// assertion is only that the queue ends empty either way, proving the
|
|
646
|
-
// splice-by-marker never throws or misbehaves on an already-empty queue.
|
|
647
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-m1-happy-'));
|
|
648
|
-
try {
|
|
649
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C5_EXT] }));
|
|
650
|
-
try {
|
|
651
|
-
await promptWithNextTurnGuidance(session, 'crtr memory read dev', () => session.prompt('/devcmd', {}));
|
|
652
|
-
await promptWithNextTurnGuidance(session, 'crtr memory read dev', () => session.prompt('/devcmd', {}));
|
|
653
|
-
const pending = session._pendingNextTurnMessages;
|
|
654
|
-
assert.deepEqual(pending, [], 'Major 1: repeated calls never accumulate a stale entry');
|
|
655
|
-
}
|
|
656
|
-
finally {
|
|
657
|
-
session.dispose();
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
|
-
finally {
|
|
661
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
662
|
-
}
|
|
663
|
-
});
|
|
664
|
-
// Review fix (Major 2) — JSONL export (`session.exportToJsonl` via the broker
|
|
665
|
-
// `case 'export'` handler) must honor the general `display:false` boundary,
|
|
666
|
-
// not just `crtr-memory-refs` guidance. `stripHiddenEntriesFromJsonlExport`
|
|
667
|
-
// rewrites the exported file in place; covers ACTUAL exported JSONL bytes,
|
|
668
|
-
// not `transcriptMarkdown`.
|
|
669
|
-
test('Major 2 fix — isHiddenJsonlBranchEntry recognizes both persisted display:false shapes', () => {
|
|
670
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'custom_message', display: false }), true, 'a hidden custom_message entry matches');
|
|
671
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'custom_message', display: true }), false, 'a visible custom_message entry does not match');
|
|
672
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'custom_message' }), false, 'a custom_message entry with no display field does not match (only explicit false hides)');
|
|
673
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'message', message: { role: 'custom', display: false } }), true, 'a hidden role:custom message entry matches');
|
|
674
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'message', message: { role: 'custom', display: true } }), false, 'a visible role:custom message entry does not match');
|
|
675
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'message', message: { role: 'user', display: false } }), false, 'a non-custom role message entry never matches, even with display:false');
|
|
676
|
-
assert.equal(isHiddenJsonlBranchEntry({ type: 'model_change' }), false, 'an unrelated branch entry type never matches');
|
|
677
|
-
assert.equal(isHiddenJsonlBranchEntry(null), false, 'null degrades to false without throwing');
|
|
678
|
-
assert.equal(isHiddenJsonlBranchEntry('not-an-object'), false, 'a non-object degrades to false without throwing');
|
|
679
|
-
});
|
|
680
|
-
test('Major 2 fix — exportToJsonl (via the broker export path) strips display:false custom messages, re-chains a valid linear branch', async () => {
|
|
681
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-m2-jsonl-'));
|
|
682
|
-
try {
|
|
683
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [] }));
|
|
684
|
-
try {
|
|
685
|
-
// No deliverAs + not streaming ⇒ sendCustomMessage's synchronous
|
|
686
|
-
// "append directly to persisted state" branch (a type:'custom_message'
|
|
687
|
-
// entry) — no model/auth/network needed.
|
|
688
|
-
await session.sendCustomMessage({ customType: 'crtr-memory-refs', content: 'hidden guidance', display: false });
|
|
689
|
-
await session.sendCustomMessage({ customType: 'some-visible-thing', content: 'visible content', display: true });
|
|
690
|
-
const outPath = join(cwd, 'export-test.jsonl');
|
|
691
|
-
const resolved = session.exportToJsonl(outPath);
|
|
692
|
-
stripHiddenEntriesFromJsonlExport(resolved);
|
|
693
|
-
const lines = readFileSync(resolved, 'utf8').split('\n').filter((l) => l !== '');
|
|
694
|
-
const header = JSON.parse(lines[0]);
|
|
695
|
-
assert.equal(header.type, 'session', 'header line (line 1) is untouched');
|
|
696
|
-
const entries = lines.slice(1).map((l) => JSON.parse(l));
|
|
697
|
-
assert.ok(entries.every((e) => e.customType !== 'crtr-memory-refs'), 'the hidden guidance entry is stripped from the exported JSONL bytes');
|
|
698
|
-
assert.ok(entries.some((e) => e.customType === 'some-visible-thing'), 'a visible custom entry survives the export');
|
|
699
|
-
// Linear-branch invariant re-established around the stripped entry: the
|
|
700
|
-
// first surviving entry's parentId equals the LAST entry BEFORE it that
|
|
701
|
-
// survived (here, whatever preceded the hidden entry — unaffected since
|
|
702
|
-
// it comes first among our two custom entries), and each subsequent kept
|
|
703
|
-
// entry's parentId equals the prior kept entry's id.
|
|
704
|
-
let prevId = null;
|
|
705
|
-
for (const e of entries) {
|
|
706
|
-
assert.equal(e.parentId, prevId, 'parentId re-chains around the stripped entry, keeping a single valid linear branch');
|
|
707
|
-
prevId = e.id;
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
finally {
|
|
711
|
-
session.dispose();
|
|
712
|
-
}
|
|
713
|
-
}
|
|
714
|
-
finally {
|
|
715
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
716
|
-
}
|
|
717
|
-
});
|
|
718
|
-
// Review fix (Major 6, broker/protocol half) — the `list_memory_refs` read-op
|
|
719
|
-
// publishes `engineLeadingCommandNames` as metadata SEPARATE from `refs`
|
|
720
|
-
// (RefMeta rows), exactly matching `isLeadingEngineCommand`'s three sources,
|
|
721
|
-
// so viewers can combine it with their own locally-consumed commands.
|
|
722
|
-
test('Major 6 (broker half) — engineLeadingCommandTokens degrades to empty per-source without throwing, and never touches refs/RefMeta shape', () => {
|
|
723
|
-
assert.deepEqual(engineLeadingCommandTokens({}), [], 'a bare session with no accessors at all degrades to an empty enumeration');
|
|
724
|
-
const throwingExtButRealTemplate = {
|
|
725
|
-
extensionRunner: {
|
|
726
|
-
getRegisteredCommands: () => {
|
|
727
|
-
throw new Error('boom: no live extensionRunner');
|
|
728
|
-
},
|
|
729
|
-
},
|
|
730
|
-
promptTemplates: [{ name: 'mytemplate' }],
|
|
731
|
-
};
|
|
732
|
-
assert.deepEqual(engineLeadingCommandTokens(throwingExtButRealTemplate), ['mytemplate'], 'a throwing extensionRunner source degrades to none for ITSELF but does not abort the other independent sources');
|
|
733
|
-
});
|
|
734
|
-
test('Major 6 (broker half) — engineLeadingCommandTokens against a REAL session enumerates the real registered extension command', async () => {
|
|
735
|
-
const cwd = mkdtempSync(join(tmpdir(), 'crtr-m6-cmd-'));
|
|
736
|
-
try {
|
|
737
|
-
const { session } = await buildBrokerSession(realEngine, cfg(cwd, { extensionPaths: [C3_EXT, C5_EXT], model: 'c3prov/c3model' }));
|
|
738
|
-
try {
|
|
739
|
-
const tokens = engineLeadingCommandTokens(session);
|
|
740
|
-
assert.ok(tokens.includes('devcmd'), 'the real registered extension command name is present in the enumeration');
|
|
741
|
-
assert.equal(isLeadingEngineCommand('/devcmd', session), true, 'cross-check: the enumerated token independently round-trips through isLeadingEngineCommand against the SAME real session');
|
|
742
|
-
}
|
|
743
|
-
finally {
|
|
744
|
-
session.dispose();
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
finally {
|
|
748
|
-
rmSync(cwd, { recursive: true, force: true });
|
|
749
|
-
}
|
|
750
|
-
});
|