@north-light/crouter 0.3.317 → 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.d.ts +1 -1
- 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 +1 -1
- 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.d.ts +3 -2
- package/dist/core/runtime/warm-pool.js +1 -385
- 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 -943
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +6 -5
- 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 -107
- 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,637 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import { bundledPiCommandForShell } from './pi-cli.js';
|
|
9
|
-
import { shellQuote } from '../../shared/shell-quote.js';
|
|
10
|
-
import { envPiBinaryOverride } from '../../shared/env.js';
|
|
11
|
-
// tmux invocation
|
|
12
|
-
export { shellQuote };
|
|
13
|
-
function tmux(args) {
|
|
14
|
-
const r = spawnSync('tmux', args, { encoding: 'utf8' });
|
|
15
|
-
return {
|
|
16
|
-
ok: r.status === 0,
|
|
17
|
-
stdout: (r.stdout ?? '').trim(),
|
|
18
|
-
stderr: (r.stderr ?? '').trim(),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
function tmuxOnSocket(socket, args) {
|
|
22
|
-
return socket === undefined || socket === '' ? tmux(args) : tmux(['-S', socket, ...args]);
|
|
23
|
-
}
|
|
24
|
-
export function inTmux() {
|
|
25
|
-
return process.env['TMUX'] !== undefined && process.env['TMUX'] !== '';
|
|
26
|
-
}
|
|
27
|
-
/** Is any tmux SESSION currently up? `tmux list-sessions` exits 0 iff a server
|
|
28
|
-
* is running with at least one session, non-zero otherwise (including "no
|
|
29
|
-
* server"). This is the boot-time/bash-tooling probe — distinct from
|
|
30
|
-
* `tmuxClientsReachable`, which asks whether a server is reachable at all
|
|
31
|
-
* regardless of session count and is the human-surface gate. */
|
|
32
|
-
export function tmuxSessionsReachable() {
|
|
33
|
-
return spawnSync('tmux', ['list-sessions'], { encoding: 'utf8', stdio: 'ignore' }).status === 0;
|
|
34
|
-
}
|
|
35
|
-
/** Is the tmux SERVER reachable at all? `tmux list-clients` exits 0 whenever a
|
|
36
|
-
* server is up (even with zero attached clients), non-zero when no server is
|
|
37
|
-
* running. This is the human-surface gate (core/spawn.ts's
|
|
38
|
-
* `tmuxServerReachable`) — distinct from `tmuxSessionsReachable`, which
|
|
39
|
-
* additionally requires a session to exist. */
|
|
40
|
-
export function tmuxClientsReachable() {
|
|
41
|
-
return spawnSync('tmux', ['list-clients', '-F', '#{client_name}'], { encoding: 'utf8' }).status === 0;
|
|
42
|
-
}
|
|
43
|
-
/** The pane currently displaying `nodeId`, found by the authoritative `@crtr_node`
|
|
44
|
-
* pane tag — set by EVERY viewer (a bare `surface attach`, a focus split, a
|
|
45
|
-
* spawned viewer) on connect. Scans all panes (`list-panes -a`); the reverse of
|
|
46
|
-
* `nodeInPane`. Unlike the focus TABLE (which only `registerViewerFocus` writes,
|
|
47
|
-
* so it misses attach-viewed nodes), the tag is on any pane showing the node.
|
|
48
|
-
* Returns the pane id, or null when no pane shows it. Works headless (no $TMUX). */
|
|
49
|
-
export function paneOfNode(nodeId) {
|
|
50
|
-
if (nodeId === '')
|
|
51
|
-
return null;
|
|
52
|
-
const r = tmux(['list-panes', '-a', '-F', '#{pane_id}\t#{@crtr_node}']);
|
|
53
|
-
if (!r.ok)
|
|
54
|
-
return null;
|
|
55
|
-
for (const line of r.stdout.split('\n')) {
|
|
56
|
-
const tab = line.indexOf('\t');
|
|
57
|
-
if (tab < 0)
|
|
58
|
-
continue;
|
|
59
|
-
if (line.slice(tab + 1) === nodeId) {
|
|
60
|
-
const pane = line.slice(0, tab);
|
|
61
|
-
if (pane !== '')
|
|
62
|
-
return pane;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
/** Where the caller currently is, or null if not inside tmux. */
|
|
68
|
-
export function currentTmux() {
|
|
69
|
-
if (!inTmux())
|
|
70
|
-
return null;
|
|
71
|
-
const r = tmux([
|
|
72
|
-
'display-message',
|
|
73
|
-
'-p',
|
|
74
|
-
'#{session_name}\t#{window_id}\t#{pane_id}',
|
|
75
|
-
]);
|
|
76
|
-
if (!r.ok)
|
|
77
|
-
return null;
|
|
78
|
-
const [session, window, pane] = r.stdout.split('\t');
|
|
79
|
-
return { session, window, pane };
|
|
80
|
-
}
|
|
81
|
-
// Sessions + windows
|
|
82
|
-
export function sessionExists(name) {
|
|
83
|
-
return tmux(['has-session', '-t', name]).ok;
|
|
84
|
-
}
|
|
85
|
-
/** Force bracketed-paste capabilities on for every terminal on this tmux server.
|
|
86
|
-
*
|
|
87
|
-
* Many terminfo entries lack the Enbp/Dsbp (enable/disable bracketed paste)
|
|
88
|
-
* capabilities. Without them tmux never asks the outer terminal to wrap pastes,
|
|
89
|
-
* so a multi-line paste arrives as raw `\r` and the inner app (pi, zsh, …)
|
|
90
|
-
* submits on the first newline — i.e. one paste lands as several messages.
|
|
91
|
-
* Declaring the caps for `*` restores bracketed paste so pastes stay atomic.
|
|
92
|
-
*
|
|
93
|
-
* `terminal-overrides` is a server option, so this is set once per server and
|
|
94
|
-
* is idempotent when a valid escaped Enbp capability is already present,
|
|
95
|
-
* including a user's own override. Must run only once a server exists —
|
|
96
|
-
* set-option errors out with no server running — so callers invoke it AFTER
|
|
97
|
-
* ensuring a session. */
|
|
98
|
-
function ensureBracketedPaste() {
|
|
99
|
-
const current = tmux(['show-options', '-s', 'terminal-overrides']).stdout;
|
|
100
|
-
if (/Enbp=\\+E/.test(current))
|
|
101
|
-
return;
|
|
102
|
-
// Emit a LITERAL backslash-E (`\\E`) so tmux's option parser resolves it to ESC.
|
|
103
|
-
// A single `\E` in this JS source collapses to the letter `E`, which stores a
|
|
104
|
-
// broken `Enbp=E[?2004h` (no ESC) and silently disables bracketed paste.
|
|
105
|
-
tmux(['set-option', '-sga', 'terminal-overrides', '*:Enbp=\\E[?2004h:Dsbp=\\E[?2004l']);
|
|
106
|
-
}
|
|
107
|
-
/** Server-level tmux prerequisites for crtr's viewer surfaces, applied once a
|
|
108
|
-
* server exists (callers invoke via ensureSession). Currently: bracketed paste
|
|
109
|
-
* capability (above) and `focus-events on`, which forwards terminal focus
|
|
110
|
-
* in/out (DECSET 1004) to the program in each pane — the attach viewer uses it
|
|
111
|
-
* to hollow out the editor cursor in blurred panes. */
|
|
112
|
-
function ensureServerOptions() {
|
|
113
|
-
ensureBracketedPaste();
|
|
114
|
-
tmux(['set-option', '-s', 'focus-events', 'on']);
|
|
115
|
-
}
|
|
116
|
-
/** Create a detached session rooted at `cwd` if it doesn't exist. The session
|
|
117
|
-
* name is a root's tmux home; every node under that root is a window in it. */
|
|
118
|
-
export function ensureSession(name, cwd) {
|
|
119
|
-
if (!sessionExists(name)) {
|
|
120
|
-
tmux(['new-session', '-d', '-s', name, '-c', cwd]);
|
|
121
|
-
}
|
|
122
|
-
ensureServerOptions();
|
|
123
|
-
}
|
|
124
|
-
function envFlags(env) {
|
|
125
|
-
const out = [];
|
|
126
|
-
for (const [k, v] of Object.entries(env))
|
|
127
|
-
out.push('-e', `${k}=${v}`);
|
|
128
|
-
return out;
|
|
129
|
-
}
|
|
130
|
-
/** Open a background window for a node and run `command` in it. `-d` keeps it
|
|
131
|
-
* detached so it doesn't steal focus or become the current window. Returns the
|
|
132
|
-
* new window id AND the pane id it created (the durable `%pane_id`, LOCATION's
|
|
133
|
-
* anchor) — callers that only need the window destructure `.window`.
|
|
134
|
-
*
|
|
135
|
-
* Target is `${session}:` (trailing colon = the session, no window index) plus
|
|
136
|
-
* `-a` (insert after the current window) so tmux allocates the next free index.
|
|
137
|
-
* Passing a bare session name resolves to the session's *active window*, which
|
|
138
|
-
* makes new-window try to create AT that occupied index and fail with
|
|
139
|
-
* "create window failed: index N in use" whenever the active window is not the
|
|
140
|
-
* last one (common when base-index is 0 but the live window sits at index 1).
|
|
141
|
-
* `-a` also keeps node windows off index 0, which is reserved for the optional
|
|
142
|
-
* dashboard. The explicit `-t ${session}:` target is the §2.2 HARD DRIVER
|
|
143
|
-
* INVARIANT — never let new-window fall back to tmux's global current session. */
|
|
144
|
-
export function openNodeWindow(opts) {
|
|
145
|
-
const r = tmux([
|
|
146
|
-
'new-window',
|
|
147
|
-
'-d',
|
|
148
|
-
'-a',
|
|
149
|
-
'-P',
|
|
150
|
-
'-F',
|
|
151
|
-
'#{window_id}\t#{pane_id}',
|
|
152
|
-
'-t',
|
|
153
|
-
`${opts.session}:`,
|
|
154
|
-
'-n',
|
|
155
|
-
opts.name,
|
|
156
|
-
'-c',
|
|
157
|
-
opts.cwd,
|
|
158
|
-
...envFlags(opts.env),
|
|
159
|
-
opts.command,
|
|
160
|
-
]);
|
|
161
|
-
if (!r.ok)
|
|
162
|
-
return null;
|
|
163
|
-
const [window, pane] = r.stdout.split('\t');
|
|
164
|
-
if (window === undefined || window === '' || pane === undefined || pane === '') {
|
|
165
|
-
return null;
|
|
166
|
-
}
|
|
167
|
-
return { window, pane };
|
|
168
|
-
}
|
|
169
|
-
/** Split `targetPane`'s window, opening a NEW pane beside it running `command`,
|
|
170
|
-
* and return the new pane id (the durable `%id`). The ONLY new-pane-beside verb
|
|
171
|
-
* (Q3: a focus opened side-by-side). `-d` keeps the caller's pane active; `-h`
|
|
172
|
-
* makes the split side-by-side (left/right), the default for a focus viewport.
|
|
173
|
-
*
|
|
174
|
-
* §2.2 HARD DRIVER INVARIANT: `targetPane` is REQUIRED — a bare `split-window`
|
|
175
|
-
* would split tmux's global current pane, which can leak a pane into an
|
|
176
|
-
* unrelated user session (the exact bug this design kills). The explicit
|
|
177
|
-
* `-t <targetPane>` makes the destination structurally un-leakable. Returns
|
|
178
|
-
* null if tmux fails. */
|
|
179
|
-
export function splitWindow(targetPane, opts) {
|
|
180
|
-
const r = tmux([
|
|
181
|
-
'split-window',
|
|
182
|
-
'-d',
|
|
183
|
-
...(opts.vertical === true ? [] : ['-h']),
|
|
184
|
-
...(opts.before === true ? ['-b'] : []),
|
|
185
|
-
...(opts.size !== undefined ? ['-l', String(opts.size)] : []),
|
|
186
|
-
'-P',
|
|
187
|
-
'-F',
|
|
188
|
-
'#{pane_id}',
|
|
189
|
-
'-t',
|
|
190
|
-
targetPane,
|
|
191
|
-
'-c',
|
|
192
|
-
opts.cwd,
|
|
193
|
-
...envFlags(opts.env),
|
|
194
|
-
opts.command,
|
|
195
|
-
]);
|
|
196
|
-
return r.ok && r.stdout !== '' ? r.stdout : null;
|
|
197
|
-
}
|
|
198
|
-
/** Bring a node's window forefront. Switches client across roots when needed. */
|
|
199
|
-
export function focusWindow(session, window) {
|
|
200
|
-
const here = currentTmux();
|
|
201
|
-
const sameRoot = here?.session === session;
|
|
202
|
-
if (!sameRoot) {
|
|
203
|
-
if (!tmux(['switch-client', '-t', session]).ok)
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
return tmux(['select-window', '-t', window]).ok;
|
|
207
|
-
}
|
|
208
|
-
/** Close a node's window (drop it from the UI). */
|
|
209
|
-
export function closeWindow(window) {
|
|
210
|
-
return tmux(['kill-window', '-t', window]).ok;
|
|
211
|
-
}
|
|
212
|
-
/** Rename a window (`tmux rename-window -t <window> <name>`). Used by the
|
|
213
|
-
* root relaunch to re-title the viewer window when its pane is re-pointed at
|
|
214
|
-
* the freshly-minted node. Best-effort; false if tmux fails. */
|
|
215
|
-
export function renameWindow(window, name) {
|
|
216
|
-
return tmux(['rename-window', '-t', window, name]).ok;
|
|
217
|
-
}
|
|
218
|
-
/** Break a single PANE out into a BRAND-NEW window of its own (`tmux break-pane
|
|
219
|
-
* -d`). `-d` keeps the new window in the background (does not switch the client
|
|
220
|
-
* to it); `-s <pane>` names the source pane — the §2.2 HARD DRIVER INVARIANT, so
|
|
221
|
-
* the break never falls back to tmux's global current pane. The pane keeps its
|
|
222
|
-
* durable `%id` across the move (only its window changes), so callers can keep
|
|
223
|
-
* using the same pane handle. Returns the new `{window, pane}` location, or null
|
|
224
|
-
* if tmux fails. Used by `surface tmux-spread` to lift the caller's viewer into a
|
|
225
|
-
* fresh window before tiling sibling viewers beside it. */
|
|
226
|
-
export function breakPane(pane) {
|
|
227
|
-
const r = tmux([
|
|
228
|
-
'break-pane',
|
|
229
|
-
'-d',
|
|
230
|
-
'-P',
|
|
231
|
-
'-F',
|
|
232
|
-
'#{window_id}\t#{pane_id}',
|
|
233
|
-
'-s',
|
|
234
|
-
pane,
|
|
235
|
-
]);
|
|
236
|
-
if (!r.ok)
|
|
237
|
-
return null;
|
|
238
|
-
const [window, p] = r.stdout.split('\t');
|
|
239
|
-
if (window === undefined || window === '' || p === undefined || p === '')
|
|
240
|
-
return null;
|
|
241
|
-
return { window, pane: p };
|
|
242
|
-
}
|
|
243
|
-
/** Close a single PANE. Its window closes automatically once this was the last
|
|
244
|
-
* pane, but sibling panes survive — so co-located nodes (several agents sharing
|
|
245
|
-
* one window via swap-pane focus) are torn down one at a time instead of all
|
|
246
|
-
* at once by a window kill. Pane ids are the stable vehicle handle; windows
|
|
247
|
-
* shift under swap-pane focus, so pane-granular teardown is the correct unit. */
|
|
248
|
-
export function closePane(pane) {
|
|
249
|
-
return tmux(['kill-pane', '-t', pane]).ok;
|
|
250
|
-
}
|
|
251
|
-
/** Open a command in a tmux popup anchored to a pane. The command is a shell
|
|
252
|
-
* string because tmux executes popup payloads through the user's shell. */
|
|
253
|
-
export function displayPopup(pane, cwd, command) {
|
|
254
|
-
return tmux(['display-popup', '-E', '-t', pane, '-d', cwd, '-w', '90%', '-h', '90%', command]).ok;
|
|
255
|
-
}
|
|
256
|
-
/** The active pane id of a window. Node windows are single-pane, so this is the
|
|
257
|
-
* node's pane. Returns null if the window is gone or tmux fails. */
|
|
258
|
-
export function paneOfWindow(session, window) {
|
|
259
|
-
const r = tmux(['display-message', '-p', '-t', `${session}:${window}`, '#{pane_id}']);
|
|
260
|
-
return r.ok && r.stdout !== '' ? r.stdout : null;
|
|
261
|
-
}
|
|
262
|
-
/** The window a pane currently lives in. Used after a swap-pane to learn which
|
|
263
|
-
* slot the caller's pane occupied — pane ids are stable across swaps, windows
|
|
264
|
-
* are not, so the node→window mapping must be re-derived from the pane. Returns
|
|
265
|
-
* null if the pane is gone or tmux fails. */
|
|
266
|
-
export function windowOfPane(pane) {
|
|
267
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{window_id}']);
|
|
268
|
-
return r.ok && r.stdout !== '' ? r.stdout : null;
|
|
269
|
-
}
|
|
270
|
-
/** The session + window a pane currently lives in (`display-message -p -t %id`).
|
|
271
|
-
* The §2.4 reconciliation read-back: resolve a node's/focus's CURRENT
|
|
272
|
-
* window/session from its durable pane id before any act, so crtr follows a
|
|
273
|
-
* manual `move-pane`/`join-pane`/`break-pane` instead of fighting it. Null if
|
|
274
|
-
* the pane is gone or tmux fails. */
|
|
275
|
-
export function paneLocation(pane) {
|
|
276
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{session_name}\t#{window_id}']);
|
|
277
|
-
if (!r.ok)
|
|
278
|
-
return null;
|
|
279
|
-
const [session, window] = r.stdout.split('\t');
|
|
280
|
-
if (session === undefined || session === '' || window === undefined || window === '')
|
|
281
|
-
return null;
|
|
282
|
-
return { session, window };
|
|
283
|
-
}
|
|
284
|
-
/** Does this pane id still exist? A `display-message` probe on the `%id` — the
|
|
285
|
-
* v3 PRIMARY liveness probe (§1.2/§2.2), replacing window-existence so a user
|
|
286
|
-
* moving a pane to another window/session never reads as "gone". True iff tmux
|
|
287
|
-
* knows the pane.
|
|
288
|
-
*
|
|
289
|
-
* NOTE: `display-message -p -t <gone-pane>` EXITS 0 with EMPTY output (it does
|
|
290
|
-
* not error on an unresolvable pane target) — so an `.ok` check alone would
|
|
291
|
-
* report a dead pane as alive, defeating the whole point of pane-existence
|
|
292
|
-
* liveness. We therefore require the echoed `#{pane_id}` to equal the requested
|
|
293
|
-
* pane: a live pane echoes its own id, a gone/bogus one yields empty. */
|
|
294
|
-
export function paneExists(pane) {
|
|
295
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{pane_id}']);
|
|
296
|
-
return r.ok && r.stdout === pane;
|
|
297
|
-
}
|
|
298
|
-
/** Does this pane exist AND have its command still RUNNING (`#{pane_dead}` = 0)?
|
|
299
|
-
* Distinguishes a pane genuinely hosting a live process from a remain-on-exit
|
|
300
|
-
* corpse frozen after exit (`pane_dead` = 1). Node viewer panes run `crtr surface attach`
|
|
301
|
-
* as the pane command, so pane-running ⟹ a live viewer occupies it. */
|
|
302
|
-
export function paneRunning(pane) {
|
|
303
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{pane_id}\t#{pane_dead}']);
|
|
304
|
-
return r.ok && r.stdout === `${pane}\t0`;
|
|
305
|
-
}
|
|
306
|
-
/** Every live pane id on the server (`list-panes -a`), as a Set for membership
|
|
307
|
-
* probes. Returns null when tmux is unreachable (no server / transient failure)
|
|
308
|
-
* so callers can tell "no panes" apart from "can't tell" — a GC pass must skip,
|
|
309
|
-
* never mass-delete, on a failed probe. One subprocess call total, so batch
|
|
310
|
-
* liveness sweeps (e.g. the daemon's stale-focus GC) don't pay a per-pane
|
|
311
|
-
* display-message each. */
|
|
312
|
-
export function listLivePanes() {
|
|
313
|
-
const r = tmux(['list-panes', '-a', '-F', '#{pane_id}']);
|
|
314
|
-
if (!r.ok)
|
|
315
|
-
return null;
|
|
316
|
-
return new Set(r.stdout.split('\n').filter((p) => p !== ''));
|
|
317
|
-
}
|
|
318
|
-
const PANE_PROBE_TIMEOUT_MS = 2000;
|
|
319
|
-
/** The same probe without blocking the event loop, for callers running inside
|
|
320
|
-
* crtrd's detached work. The daemon runs this sweep on every supervision tick,
|
|
321
|
-
* and a blocking fork/exec there freezes the API socket — which every CLI
|
|
322
|
-
* command and every live broker's inbox poll shares — for its full duration.
|
|
323
|
-
* Identical contract to `listLivePanes`: null means the probe failed (no
|
|
324
|
-
* server, timeout), which a GC pass must treat as "can't tell" and skip. */
|
|
325
|
-
export async function listLivePanesAsync() {
|
|
326
|
-
const stdout = await new Promise((resolve) => {
|
|
327
|
-
try {
|
|
328
|
-
execFile('tmux', ['list-panes', '-a', '-F', '#{pane_id}'], { encoding: 'utf8', timeout: PANE_PROBE_TIMEOUT_MS, maxBuffer: 4 * 1024 * 1024 }, (err, out) => resolve(err ? null : out));
|
|
329
|
-
}
|
|
330
|
-
catch {
|
|
331
|
-
resolve(null);
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
if (stdout === null)
|
|
335
|
-
return null;
|
|
336
|
-
return new Set(stdout.trim().split('\n').filter((p) => p !== ''));
|
|
337
|
-
}
|
|
338
|
-
/** The working directory of a pane (`display-message -p -t <pane>
|
|
339
|
-
* '#{pane_current_path}'`). Null if tmux fails. */
|
|
340
|
-
export function paneCurrentPath(pane) {
|
|
341
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{pane_current_path}']);
|
|
342
|
-
return r.ok && r.stdout !== '' ? r.stdout : null;
|
|
343
|
-
}
|
|
344
|
-
/** The pane's current cell dimensions, or null when tmux cannot describe it. */
|
|
345
|
-
export function paneSize(pane) {
|
|
346
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{pane_width}\t#{pane_height}']);
|
|
347
|
-
if (!r.ok)
|
|
348
|
-
return null;
|
|
349
|
-
const [colsStr, rowsStr] = r.stdout.split('\t');
|
|
350
|
-
const cols = Number.parseInt(colsStr, 10);
|
|
351
|
-
const rows = Number.parseInt(rowsStr, 10);
|
|
352
|
-
if (Number.isInteger(cols) && cols > 0 && Number.isInteger(rows) && rows > 0) {
|
|
353
|
-
return { cols, rows };
|
|
354
|
-
}
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
357
|
-
/** Flash a transient status-line toast on the client showing `pane` (or the
|
|
358
|
-
* current client when `pane` is omitted). `ms` sets the display duration. Used
|
|
359
|
-
* by `crtr canvas issue new` to confirm a capture from inside its popup.
|
|
360
|
-
* Best-effort; never throws. */
|
|
361
|
-
/** Show a transient toast in the target client's status line.
|
|
362
|
-
*
|
|
363
|
-
* `-C` is load-bearing, not decoration: without it tmux STOPS painting that
|
|
364
|
-
* client's panes for the whole delay, so every crtr toast freezes a live
|
|
365
|
-
* viewer mid-turn until the message expires or a keypress dismisses it. The
|
|
366
|
-
* flag is newer than the tmux versions crouter still runs on, and a tmux that
|
|
367
|
-
* rejects it prints usage and shows nothing — so a rejected call retries in
|
|
368
|
-
* the plain form, where the toast is worth more than the paint stall. */
|
|
369
|
-
export function displayMessage(message, pane, ms = 4000) {
|
|
370
|
-
const args = (paneKeepsPainting) => {
|
|
371
|
-
const argv = ['display-message', ...(paneKeepsPainting ? ['-C'] : []), '-d', String(ms)];
|
|
372
|
-
if (pane !== undefined && pane !== '')
|
|
373
|
-
argv.push('-t', pane);
|
|
374
|
-
argv.push(message);
|
|
375
|
-
return argv;
|
|
376
|
-
};
|
|
377
|
-
return tmux(args(true)).ok || tmux(args(false)).ok;
|
|
378
|
-
}
|
|
379
|
-
/** Set a PANE-scoped tmux option (`tmux set-option -p -t <pane> <name> <value>`).
|
|
380
|
-
* Best-effort; never throws. */
|
|
381
|
-
export function setPaneOption(pane, name, value) {
|
|
382
|
-
return tmux(['set-option', '-p', '-t', pane, name, value]).ok;
|
|
383
|
-
}
|
|
384
|
-
/** Read a PANE-scoped tmux option value (`tmux show-options -p -t <pane> -q -v
|
|
385
|
-
* <name>`): `-v` prints only the value, `-q` suppresses the unknown-option
|
|
386
|
-
* error so an unset option yields an empty string. undefined if tmux fails. */
|
|
387
|
-
export function getPaneOption(pane, name) {
|
|
388
|
-
const r = tmux(['show-options', '-p', '-t', pane, '-q', '-v', name]);
|
|
389
|
-
return r.ok ? r.stdout : undefined;
|
|
390
|
-
}
|
|
391
|
-
/** Pane option recording when an attach viewer was last started or focused.
|
|
392
|
-
* `liveViewerPanes` uses it to select the most recently used viewer. */
|
|
393
|
-
export const VIEWER_STAMP_OPTION = '@crtr_viewer_at';
|
|
394
|
-
let lastViewerStampMs = 0;
|
|
395
|
-
let viewerStampQueue = Promise.resolve();
|
|
396
|
-
/** Stamp a viewer pane without blocking the input path that observed focus.
|
|
397
|
-
* Stamps are monotonically increasing and their tmux writes are serialized, so
|
|
398
|
-
* two rapid focus events cannot leave an older pane with the newer stamp. */
|
|
399
|
-
export function stampViewerPaneAsync(pane) {
|
|
400
|
-
if (pane === '')
|
|
401
|
-
return;
|
|
402
|
-
const stampMs = Math.max(Date.now(), lastViewerStampMs + 1);
|
|
403
|
-
lastViewerStampMs = stampMs;
|
|
404
|
-
viewerStampQueue = viewerStampQueue.then(() => new Promise((resolve) => {
|
|
405
|
-
try {
|
|
406
|
-
execFile('tmux', ['set-option', '-p', '-t', pane, VIEWER_STAMP_OPTION, String(stampMs)], () => resolve());
|
|
407
|
-
}
|
|
408
|
-
catch {
|
|
409
|
-
resolve();
|
|
410
|
-
}
|
|
411
|
-
}));
|
|
412
|
-
}
|
|
413
|
-
function escapeRegex(text) {
|
|
414
|
-
return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
415
|
-
}
|
|
416
|
-
function looksLikeViewerCommand(command, nodeId) {
|
|
417
|
-
const unquoted = command.replace(/^"|"$/g, '');
|
|
418
|
-
return new RegExp(`(?:^|\\s)surface\\s+attach\\s+to\\s+${escapeRegex(nodeId)}(?:\\s|$)`).test(unquoted);
|
|
419
|
-
}
|
|
420
|
-
function readProcessTree() {
|
|
421
|
-
const result = spawnSync('ps', ['-ax', '-o', 'pid=,ppid=,command='], { encoding: 'utf8' });
|
|
422
|
-
if (result.status !== 0 || typeof result.stdout !== 'string')
|
|
423
|
-
return null;
|
|
424
|
-
const childrenOf = new Map();
|
|
425
|
-
const commandOf = new Map();
|
|
426
|
-
for (const line of result.stdout.split('\n')) {
|
|
427
|
-
const match = /^\s*(\d+)\s+(\d+)\s+(.*)$/.exec(line);
|
|
428
|
-
if (match === null)
|
|
429
|
-
continue;
|
|
430
|
-
const pid = Number(match[1]);
|
|
431
|
-
const parentPid = Number(match[2]);
|
|
432
|
-
commandOf.set(pid, match[3]);
|
|
433
|
-
const children = childrenOf.get(parentPid) ?? [];
|
|
434
|
-
children.push(pid);
|
|
435
|
-
childrenOf.set(parentPid, children);
|
|
436
|
-
}
|
|
437
|
-
return { childrenOf, commandOf };
|
|
438
|
-
}
|
|
439
|
-
function processTreeHasViewer(tree, rootPid, nodeId) {
|
|
440
|
-
const pending = [rootPid];
|
|
441
|
-
while (pending.length > 0) {
|
|
442
|
-
const pid = pending.pop();
|
|
443
|
-
if (looksLikeViewerCommand(tree.commandOf.get(pid) ?? '', nodeId))
|
|
444
|
-
return true;
|
|
445
|
-
const children = tree.childrenOf.get(pid);
|
|
446
|
-
if (children !== undefined)
|
|
447
|
-
pending.push(...children);
|
|
448
|
-
}
|
|
449
|
-
return false;
|
|
450
|
-
}
|
|
451
|
-
/** List viewer panes tagged by a running local attach viewer. Pane tags can
|
|
452
|
-
* survive a killed process, so every tag must match a viewer for the same node.
|
|
453
|
-
* Shell-hosted viewers are recognized through their live child process. Unstamped
|
|
454
|
-
* valid viewers remain eligible at stamp zero while an older viewer rolls forward. */
|
|
455
|
-
export function liveViewerPanes(socket) {
|
|
456
|
-
const listed = tmuxOnSocket(socket, [
|
|
457
|
-
'list-panes', '-a', '-F',
|
|
458
|
-
'#{pane_id}\t#{session_name}\t#{@crtr_node}\t#{@crtr_viewer_at}',
|
|
459
|
-
]);
|
|
460
|
-
if (!listed.ok || listed.stdout === '')
|
|
461
|
-
return [];
|
|
462
|
-
const viewers = [];
|
|
463
|
-
let processTree;
|
|
464
|
-
for (const line of listed.stdout.split('\n')) {
|
|
465
|
-
const [pane, session, nodeId, stamp] = line.split('\t');
|
|
466
|
-
if (pane === undefined || pane === '' || session === undefined || session === '' || nodeId === undefined || nodeId === '')
|
|
467
|
-
continue;
|
|
468
|
-
const command = tmuxOnSocket(socket, [
|
|
469
|
-
'display-message', '-p', '-t', pane,
|
|
470
|
-
'#{pane_current_command}\t#{pane_start_command}\t#{pane_pid}',
|
|
471
|
-
]);
|
|
472
|
-
if (!command.ok)
|
|
473
|
-
continue;
|
|
474
|
-
const [currentCommand = '', startCommand = '', pid] = command.stdout.split('\t');
|
|
475
|
-
const directViewer = looksLikeViewerCommand(currentCommand, nodeId) || looksLikeViewerCommand(startCommand, nodeId);
|
|
476
|
-
if (!directViewer) {
|
|
477
|
-
processTree ??= readProcessTree();
|
|
478
|
-
const rootPid = Number.parseInt(pid, 10);
|
|
479
|
-
if (processTree === null || !Number.isInteger(rootPid) || rootPid <= 0 || !processTreeHasViewer(processTree, rootPid, nodeId))
|
|
480
|
-
continue;
|
|
481
|
-
}
|
|
482
|
-
const parsedStamp = Number.parseInt(stamp ?? '', 10);
|
|
483
|
-
viewers.push({
|
|
484
|
-
pane,
|
|
485
|
-
session,
|
|
486
|
-
nodeId,
|
|
487
|
-
stampMs: Number.isSafeInteger(parsedStamp) && parsedStamp >= 0 ? parsedStamp : 0,
|
|
488
|
-
});
|
|
489
|
-
}
|
|
490
|
-
return viewers;
|
|
491
|
-
}
|
|
492
|
-
/** Deliver one private attach-control sequence literally into a viewer pane.
|
|
493
|
-
* `-l` bypasses tmux key-table lookup, so delivery cannot re-trigger a root
|
|
494
|
-
* binding that initiated it. */
|
|
495
|
-
export function sendAttachControl(socket, pane, actionId) {
|
|
496
|
-
return tmuxOnSocket(socket, ['send-keys', '-l', '-t', pane, encodeAttachControlInput(actionId)]).ok;
|
|
497
|
-
}
|
|
498
|
-
/** Show a tmux status-line message on a specific client when one is known.
|
|
499
|
-
* `-C` for the same reason as `displayMessage`: the client's panes must keep
|
|
500
|
-
* painting while the message sits in its status line. */
|
|
501
|
-
export function displayClientMessage(socket, client, text) {
|
|
502
|
-
const args = (paneKeepsPainting) => {
|
|
503
|
-
const argv = ['display-message', ...(paneKeepsPainting ? ['-C'] : [])];
|
|
504
|
-
if (client !== undefined && client !== '')
|
|
505
|
-
argv.push('-c', client);
|
|
506
|
-
argv.push(text);
|
|
507
|
-
return argv;
|
|
508
|
-
};
|
|
509
|
-
return tmuxOnSocket(socket, args(true)).ok || tmuxOnSocket(socket, args(false)).ok;
|
|
510
|
-
}
|
|
511
|
-
/** The `respawn-pane -k` argv for `opts`. `-k` kills the pane's current process
|
|
512
|
-
* (e.g. a yielding pi) and re-execs `command` in the SAME pane, preserving its
|
|
513
|
-
* `%id` (§1.5 F3: a frozen focus pane resumes in place, no new window). The
|
|
514
|
-
* explicit `-t opts.pane` is the §2.2 HARD DRIVER INVARIANT — respawn must name
|
|
515
|
-
* its target pane, never tmux's global current pane. */
|
|
516
|
-
function respawnPaneArgs(opts) {
|
|
517
|
-
return [
|
|
518
|
-
'respawn-pane',
|
|
519
|
-
'-k',
|
|
520
|
-
'-c',
|
|
521
|
-
opts.cwd,
|
|
522
|
-
...envFlags(opts.env),
|
|
523
|
-
'-t',
|
|
524
|
-
opts.pane,
|
|
525
|
-
opts.command,
|
|
526
|
-
];
|
|
527
|
-
}
|
|
528
|
-
/** Re-exec a command in an EXISTING pane, in place — SYNCHRONOUS. Runs the
|
|
529
|
-
* `respawn-pane` to completion and reports the real exit status. Used when the
|
|
530
|
-
* caller is NOT the pane being respawned (e.g. the daemon resuming a frozen
|
|
531
|
-
* focus pane), so it can confirm the respawn landed. Returns true on success. */
|
|
532
|
-
export function respawnPaneSync(opts) {
|
|
533
|
-
return tmux(respawnPaneArgs(opts)).ok;
|
|
534
|
-
}
|
|
535
|
-
/** Queue an in-place respawn through the tmux server. A program running IN the
|
|
536
|
-
* target pane must use this instead of `respawnPaneSync`: `respawn-pane -k`
|
|
537
|
-
* terminates that program, while this server-owned shell outlives the pane
|
|
538
|
-
* process long enough to run the respawn. The returned status only confirms
|
|
539
|
-
* tmux accepted the queued command. */
|
|
540
|
-
export function respawnPaneInBackground(opts) {
|
|
541
|
-
const command = `tmux ${respawnPaneArgs(opts).map(shellQuote).join(' ')} >/dev/null 2>&1`;
|
|
542
|
-
return tmux(['run-shell', '-b', command]).ok;
|
|
543
|
-
}
|
|
544
|
-
/** The command line a pane was originally started with (`#{pane_start_command}`)
|
|
545
|
-
* — the exact command `respawn-pane` with no argument re-runs. undefined when
|
|
546
|
-
* tmux is unreachable or the pane is gone. */
|
|
547
|
-
export function paneStartCommand(pane) {
|
|
548
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{pane_start_command}']);
|
|
549
|
-
return r.ok ? r.stdout : undefined;
|
|
550
|
-
}
|
|
551
|
-
/** The pane's root process pid (`#{pane_pid}`) — the process tmux launched in
|
|
552
|
-
* the pane (the viewer itself, or the login shell hosting it). undefined when
|
|
553
|
-
* tmux is unreachable or the pane is gone. */
|
|
554
|
-
export function panePid(pane) {
|
|
555
|
-
const r = tmux(['display-message', '-p', '-t', pane, '#{pane_pid}']);
|
|
556
|
-
if (!r.ok)
|
|
557
|
-
return undefined;
|
|
558
|
-
const pid = Number.parseInt(r.stdout, 10);
|
|
559
|
-
return Number.isInteger(pid) && pid > 0 ? pid : undefined;
|
|
560
|
-
}
|
|
561
|
-
/** Kill a pane's current process and re-run the SAME command line it was
|
|
562
|
-
* started with (`respawn-pane -k` with no command reuses the pane's original
|
|
563
|
-
* command). Used to hot-reload a viewer pane in place: the fresh process
|
|
564
|
-
* re-resolves `crtr` and picks up the currently selected runtime generation,
|
|
565
|
-
* while the pane id, geometry, and the node's broker are untouched. */
|
|
566
|
-
export function respawnPaneInPlace(pane) {
|
|
567
|
-
return tmux(['respawn-pane', '-k', '-t', pane]).ok;
|
|
568
|
-
}
|
|
569
|
-
// pi command assembly
|
|
570
|
-
/** Turn a pi argv array into a single shell command string.
|
|
571
|
-
*
|
|
572
|
-
* The binary defaults to `CRTR_PI_BINARY` when that env var is set, else the
|
|
573
|
-
* bundled pi CLI launched with the current Node binary. CRTR_PI_BINARY is a
|
|
574
|
-
* TEST-ONLY substitution seam: the integration-test harness points it at a
|
|
575
|
-
* deterministic fake-pi vehicle so a real `crtr node new` reaches the fake
|
|
576
|
-
* instead of the LLM pi, without depending on tmux/shell PATH inheritance. An
|
|
577
|
-
* explicit `binary` arg still overrides the env. The value may be a multi-word
|
|
578
|
-
* launcher (e.g. `node --import tsx/esm host.ts`); only argv entries are
|
|
579
|
-
* shell-quoted, so a multi-word binary is spliced verbatim ahead of them. */
|
|
580
|
-
export function piCommand(argv, binary = envPiBinaryOverride() ?? bundledPiCommandForShell(shellQuote)) {
|
|
581
|
-
return [binary, ...argv.map(shellQuote)].join(' ');
|
|
582
|
-
}
|
|
583
|
-
// Window liveness helpers (used by the supervisor daemon)
|
|
584
|
-
/** List all window ids present in `session`. Returns [] if the session does
|
|
585
|
-
* not exist or tmux fails for any reason. Each entry is the raw window id
|
|
586
|
-
* string reported by tmux (e.g. `@1`, `@2`, …). */
|
|
587
|
-
export function listWindowIds(session) {
|
|
588
|
-
const r = tmux(['list-windows', '-t', session, '-F', '#{window_id}']);
|
|
589
|
-
if (!r.ok || r.stdout === '')
|
|
590
|
-
return [];
|
|
591
|
-
return r.stdout.split('\n').filter((s) => s !== '');
|
|
592
|
-
}
|
|
593
|
-
/** True when both `session` and `window` are present (non-null/undefined) and
|
|
594
|
-
* the window currently exists inside the session. False whenever either arg
|
|
595
|
-
* is absent, the session is gone, or tmux does not know the window. */
|
|
596
|
-
export function windowAlive(session, window) {
|
|
597
|
-
if (session == null || window == null)
|
|
598
|
-
return false;
|
|
599
|
-
return listWindowIds(session).includes(window);
|
|
600
|
-
}
|
|
601
|
-
// Focus helpers (used by the placement layer)
|
|
602
|
-
/** Activate a window within its session (same-session navigation). Equivalent
|
|
603
|
-
* to `tmux select-window -t <session>:<window>`. Best-effort; never throws. */
|
|
604
|
-
export function selectWindow(session, window) {
|
|
605
|
-
return tmux(['select-window', '-t', `${session}:${window}`]).ok;
|
|
606
|
-
}
|
|
607
|
-
/** Apply a named tmux layout to a window (`tmux select-layout -t <window>
|
|
608
|
-
* <layout>`). `surface tmux-spread` calls it with `tiled` to evenly grid every
|
|
609
|
-
* viewer pane in the spread window (and between splits, to redistribute space so
|
|
610
|
-
* the next split has room). Best-effort; false if tmux fails. */
|
|
611
|
-
export function selectLayout(window, layout) {
|
|
612
|
-
return tmux(['select-layout', '-t', window, layout]).ok;
|
|
613
|
-
}
|
|
614
|
-
/** Make a pane the ACTIVE pane in its window (`tmux select-pane -t <pane>`). A
|
|
615
|
-
* `split-window -d` keeps the CALLER active, so a freshly-opened viewer pane is
|
|
616
|
-
* not focused until this runs — `focus` calls it so picking a node (e.g. from the
|
|
617
|
-
* alt+g graph) lands the keyboard on the new viewer. Best-effort; false if tmux
|
|
618
|
-
* fails. */
|
|
619
|
-
export function selectPane(pane) {
|
|
620
|
-
return tmux(['select-pane', '-t', pane]).ok;
|
|
621
|
-
}
|
|
622
|
-
/** Switch the tmux client to a different session (cross-session focus). Runs
|
|
623
|
-
* `tmux switch-client -t <session>`. Best-effort; never throws. The caller is
|
|
624
|
-
* responsible for following up with selectWindow to land on the right window. */
|
|
625
|
-
export function switchClient(session) {
|
|
626
|
-
return tmux(['switch-client', '-t', session]).ok;
|
|
627
|
-
}
|
|
628
|
-
// send-keys (chrome — used by the prefix menu + nav bindings)
|
|
629
|
-
/** Type a literal (e.g. a `/graph` slash command) into a pane and press Enter
|
|
630
|
-
* (`tmux send-keys -t <pane> '<text>' Enter`). Requires the pane's editor be
|
|
631
|
-
* empty, same limitation as the menu's `/promote` item. Best-effort. */
|
|
632
|
-
export function sendKeysEnter(pane, text) {
|
|
633
|
-
return tmux(['send-keys', '-t', pane, text, 'Enter']).ok;
|
|
634
|
-
}
|
|
635
|
-
// Binding reconciliation needs the raw tmux invocation primitive but no other
|
|
636
|
-
// module may reach around the driver boundary.
|
|
637
|
-
export { tmux as runTmux };
|
|
1
|
+
var O=Object.defineProperty;var r=(n,t)=>O(n,"name",{value:t,configurable:!0});import{execFile as g,spawnSync as p}from"node:child_process";import{encodeAttachControlInput as I}from"../keybindings/index.js";import{bundledPiCommandForShell as E}from"./pi-cli.js";import{shellQuote as l}from"../../shared/shell-quote.js";import{envPiBinaryOverride as N}from"../../shared/env.js";function o(n){const t=p("tmux",n,{encoding:"utf8"});return{ok:t.status===0,stdout:(t.stdout??"").trim(),stderr:(t.stderr??"").trim()}}r(o,"tmux");function a(n,t){return o(n===void 0||n===""?t:["-S",n,...t])}r(a,"tmuxOnSocket");function $(){return process.env.TMUX!==void 0&&process.env.TMUX!==""}r($,"inTmux");function H(){return p("tmux",["list-sessions"],{encoding:"utf8",stdio:"ignore"}).status===0}r(H,"tmuxSessionsReachable");function K(){return p("tmux",["list-clients","-F","#{client_name}"],{encoding:"utf8"}).status===0}r(K,"tmuxClientsReachable");function G(n){if(n==="")return null;const t=o(["list-panes","-a","-F","#{pane_id} #{@crtr_node}"]);if(!t.ok)return null;for(const e of t.stdout.split(`
|
|
2
|
+
`)){const s=e.indexOf(" ");if(!(s<0)&&e.slice(s+1)===n){const u=e.slice(0,s);if(u!=="")return u}}return null}r(G,"paneOfNode");function C(){if(!$())return null;const n=o(["display-message","-p","#{session_name} #{window_id} #{pane_id}"]);if(!n.ok)return null;const[t,e,s]=n.stdout.split(" ");return{session:t,window:e,pane:s}}r(C,"currentTmux");function M(n){return o(["has-session","-t",n]).ok}r(M,"sessionExists");function F(){const n=o(["show-options","-s","terminal-overrides"]).stdout;/Enbp=\\+E/.test(n)||o(["set-option","-sga","terminal-overrides","*:Enbp=\\E[?2004h:Dsbp=\\E[?2004l"])}r(F,"ensureBracketedPaste");function T(){F(),o(["set-option","-s","focus-events","on"])}r(T,"ensureServerOptions");function J(n,t){M(n)||o(["new-session","-d","-s",n,"-c",t]),T()}r(J,"ensureSession");function w(n){const t=[];for(const[e,s]of Object.entries(n))t.push("-e",`${e}=${s}`);return t}r(w,"envFlags");function Y(n){const t=o(["new-window","-d","-a","-P","-F","#{window_id} #{pane_id}","-t",`${n.session}:`,"-n",n.name,"-c",n.cwd,...w(n.env),n.command]);if(!t.ok)return null;const[e,s]=t.stdout.split(" ");return e===void 0||e===""||s===void 0||s===""?null:{window:e,pane:s}}r(Y,"openNodeWindow");function Z(n,t){const e=o(["split-window","-d",...t.vertical===!0?[]:["-h"],...t.before===!0?["-b"]:[],...t.size!==void 0?["-l",String(t.size)]:[],"-P","-F","#{pane_id}","-t",n,"-c",t.cwd,...w(t.env),t.command]);return e.ok&&e.stdout!==""?e.stdout:null}r(Z,"splitWindow");function nn(n,t){return!(C()?.session===n)&&!o(["switch-client","-t",n]).ok?!1:o(["select-window","-t",t]).ok}r(nn,"focusWindow");function tn(n){return o(["kill-window","-t",n]).ok}r(tn,"closeWindow");function en(n,t){return o(["rename-window","-t",n,t]).ok}r(en,"renameWindow");function rn(n){const t=o(["break-pane","-d","-P","-F","#{window_id} #{pane_id}","-s",n]);if(!t.ok)return null;const[e,s]=t.stdout.split(" ");return e===void 0||e===""||s===void 0||s===""?null:{window:e,pane:s}}r(rn,"breakPane");function on(n){return o(["kill-pane","-t",n]).ok}r(on,"closePane");function sn(n,t,e){return o(["display-popup","-E","-t",n,"-d",t,"-w","90%","-h","90%",e]).ok}r(sn,"displayPopup");function un(n,t){const e=o(["display-message","-p","-t",`${n}:${t}`,"#{pane_id}"]);return e.ok&&e.stdout!==""?e.stdout:null}r(un,"paneOfWindow");function cn(n){const t=o(["display-message","-p","-t",n,"#{window_id}"]);return t.ok&&t.stdout!==""?t.stdout:null}r(cn,"windowOfPane");function dn(n){const t=o(["display-message","-p","-t",n,"#{session_name} #{window_id}"]);if(!t.ok)return null;const[e,s]=t.stdout.split(" ");return e===void 0||e===""||s===void 0||s===""?null:{session:e,window:s}}r(dn,"paneLocation");function an(n){const t=o(["display-message","-p","-t",n,"#{pane_id}"]);return t.ok&&t.stdout===n}r(an,"paneExists");function pn(n){const t=o(["display-message","-p","-t",n,"#{pane_id} #{pane_dead}"]);return t.ok&&t.stdout===`${n} 0`}r(pn,"paneRunning");function ln(){const n=o(["list-panes","-a","-F","#{pane_id}"]);return n.ok?new Set(n.stdout.split(`
|
|
3
|
+
`).filter(t=>t!=="")):null}r(ln,"listLivePanes");const R=2e3;async function fn(){const n=await new Promise(t=>{try{g("tmux",["list-panes","-a","-F","#{pane_id}"],{encoding:"utf8",timeout:R,maxBuffer:4194304},(e,s)=>t(e?null:s))}catch{t(null)}});return n===null?null:new Set(n.trim().split(`
|
|
4
|
+
`).filter(t=>t!==""))}r(fn,"listLivePanesAsync");function mn(n){const t=o(["display-message","-p","-t",n,"#{pane_current_path}"]);return t.ok&&t.stdout!==""?t.stdout:null}r(mn,"paneCurrentPath");function wn(n){const t=o(["display-message","-p","-t",n,"#{pane_width} #{pane_height}"]);if(!t.ok)return null;const[e,s]=t.stdout.split(" "),u=Number.parseInt(e,10),i=Number.parseInt(s,10);return Number.isInteger(u)&&u>0&&Number.isInteger(i)&&i>0?{cols:u,rows:i}:null}r(wn,"paneSize");function xn(n,t,e=4e3){const s=r(u=>{const i=["display-message",...u?["-C"]:[],"-d",String(e)];return t!==void 0&&t!==""&&i.push("-t",t),i.push(n),i},"args");return o(s(!0)).ok||o(s(!1)).ok}r(xn,"displayMessage");function kn(n,t,e){return o(["set-option","-p","-t",n,t,e]).ok}r(kn,"setPaneOption");function gn(n,t){const e=o(["show-options","-p","-t",n,"-q","-v",t]);return e.ok?e.stdout:void 0}r(gn,"getPaneOption");const W="@crtr_viewer_at";let _=0,h=Promise.resolve();function _n(n){if(n==="")return;const t=Math.max(Date.now(),_+1);_=t,h=h.then(()=>new Promise(e=>{try{g("tmux",["set-option","-p","-t",n,W,String(t)],()=>e())}catch{e()}}))}r(_n,"stampViewerPaneAsync");function A(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}r(A,"escapeRegex");function x(n,t){const e=n.replace(/^"|"$/g,"");return new RegExp(`(?:^|\\s)surface\\s+attach\\s+to\\s+${A(t)}(?:\\s|$)`).test(e)}r(x,"looksLikeViewerCommand");function V(){const n=p("ps",["-ax","-o","pid=,ppid=,command="],{encoding:"utf8"});if(n.status!==0||typeof n.stdout!="string")return null;const t=new Map,e=new Map;for(const s of n.stdout.split(`
|
|
5
|
+
`)){const u=/^\s*(\d+)\s+(\d+)\s+(.*)$/.exec(s);if(u===null)continue;const i=Number(u[1]),d=Number(u[2]);e.set(i,u[3]);const c=t.get(d)??[];c.push(i),t.set(d,c)}return{childrenOf:t,commandOf:e}}r(V,"readProcessTree");function B(n,t,e){const s=[t];for(;s.length>0;){const u=s.pop();if(x(n.commandOf.get(u)??"",e))return!0;const i=n.childrenOf.get(u);i!==void 0&&s.push(...i)}return!1}r(B,"processTreeHasViewer");function hn(n){const t=a(n,["list-panes","-a","-F","#{pane_id} #{session_name} #{@crtr_node} #{@crtr_viewer_at}"]);if(!t.ok||t.stdout==="")return[];const e=[];let s;for(const u of t.stdout.split(`
|
|
6
|
+
`)){const[i,d,c,y]=u.split(" ");if(i===void 0||i===""||d===void 0||d===""||c===void 0||c==="")continue;const k=a(n,["display-message","-p","-t",i,"#{pane_current_command} #{pane_start_command} #{pane_pid}"]);if(!k.ok)continue;const[b="",v="",S]=k.stdout.split(" ");if(!(x(b,c)||x(v,c))){s??=V();const m=Number.parseInt(S,10);if(s===null||!Number.isInteger(m)||m<=0||!B(s,m,c))continue}const f=Number.parseInt(y??"",10);e.push({pane:i,session:d,nodeId:c,stampMs:Number.isSafeInteger(f)&&f>=0?f:0})}return e}r(hn,"liveViewerPanes");function Pn(n,t,e){return a(n,["send-keys","-l","-t",t,I(e)]).ok}r(Pn,"sendAttachControl");function yn(n,t,e){const s=r(u=>{const i=["display-message",...u?["-C"]:[]];return t!==void 0&&t!==""&&i.push("-c",t),i.push(e),i},"args");return a(n,s(!0)).ok||a(n,s(!1)).ok}r(yn,"displayClientMessage");function P(n){return["respawn-pane","-k","-c",n.cwd,...w(n.env),"-t",n.pane,n.command]}r(P,"respawnPaneArgs");function bn(n){return o(P(n)).ok}r(bn,"respawnPaneSync");function vn(n){const t=`tmux ${P(n).map(l).join(" ")} >/dev/null 2>&1`;return o(["run-shell","-b",t]).ok}r(vn,"respawnPaneInBackground");function Sn(n){const t=o(["display-message","-p","-t",n,"#{pane_start_command}"]);return t.ok?t.stdout:void 0}r(Sn,"paneStartCommand");function On(n){const t=o(["display-message","-p","-t",n,"#{pane_pid}"]);if(!t.ok)return;const e=Number.parseInt(t.stdout,10);return Number.isInteger(e)&&e>0?e:void 0}r(On,"panePid");function In(n){return o(["respawn-pane","-k","-t",n]).ok}r(In,"respawnPaneInPlace");function En(n,t=N()??E(l)){return[t,...n.map(l)].join(" ")}r(En,"piCommand");function L(n){const t=o(["list-windows","-t",n,"-F","#{window_id}"]);return!t.ok||t.stdout===""?[]:t.stdout.split(`
|
|
7
|
+
`).filter(e=>e!=="")}r(L,"listWindowIds");function Nn(n,t){return n==null||t==null?!1:L(n).includes(t)}r(Nn,"windowAlive");function $n(n,t){return o(["select-window","-t",`${n}:${t}`]).ok}r($n,"selectWindow");function Cn(n,t){return o(["select-layout","-t",n,t]).ok}r(Cn,"selectLayout");function Mn(n){return o(["select-pane","-t",n]).ok}r(Mn,"selectPane");function Fn(n){return o(["switch-client","-t",n]).ok}r(Fn,"switchClient");function Tn(n,t){return o(["send-keys","-t",n,t,"Enter"]).ok}r(Tn,"sendKeysEnter");export{W as VIEWER_STAMP_OPTION,rn as breakPane,on as closePane,tn as closeWindow,C as currentTmux,yn as displayClientMessage,xn as displayMessage,sn as displayPopup,J as ensureSession,nn as focusWindow,gn as getPaneOption,$ as inTmux,ln as listLivePanes,fn as listLivePanesAsync,L as listWindowIds,hn as liveViewerPanes,Y as openNodeWindow,mn as paneCurrentPath,an as paneExists,dn as paneLocation,G as paneOfNode,un as paneOfWindow,On as panePid,pn as paneRunning,wn as paneSize,Sn as paneStartCommand,En as piCommand,en as renameWindow,vn as respawnPaneInBackground,In as respawnPaneInPlace,bn as respawnPaneSync,o as runTmux,Cn as selectLayout,Mn as selectPane,$n as selectWindow,Pn as sendAttachControl,Tn as sendKeysEnter,M as sessionExists,kn as setPaneOption,l as shellQuote,Z as splitWindow,_n as stampViewerPaneAsync,Fn as switchClient,K as tmuxClientsReachable,H as tmuxSessionsReachable,Nn as windowAlive,cn as windowOfPane};
|