@north-light/crouter 0.3.318 → 0.3.320
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/dist/api/client.js +2 -912
- package/dist/api/dto/attach.js +0 -13
- package/dist/api/dto/bash-jobs.js +1 -9
- package/dist/api/dto/broker-ops.js +0 -6
- package/dist/api/dto/broker.js +0 -20
- package/dist/api/dto/canvas.js +0 -2
- package/dist/api/dto/chat-inventory.js +0 -11
- package/dist/api/dto/common.js +1 -15
- package/dist/api/dto/config.js +0 -3
- package/dist/api/dto/crons.js +1 -10
- package/dist/api/dto/files.js +0 -7
- package/dist/api/dto/focus.js +0 -10
- package/dist/api/dto/health.js +0 -2
- package/dist/api/dto/human-requests.js +0 -4
- package/dist/api/dto/human.js +0 -4
- package/dist/api/dto/inbox.js +0 -4
- package/dist/api/dto/lifecycle.js +0 -3
- package/dist/api/dto/mail.js +0 -1
- package/dist/api/dto/memory.js +0 -6
- package/dist/api/dto/messages.js +0 -2
- package/dist/api/dto/model-config.js +0 -1
- package/dist/api/dto/modelauth.js +0 -4
- package/dist/api/dto/node-outcomes.js +0 -2
- package/dist/api/dto/nodes.js +0 -3
- package/dist/api/dto/profiles.js +1 -4
- package/dist/api/dto/recovery.js +0 -1
- package/dist/api/dto/reports.js +0 -2
- package/dist/api/dto/review-comments.js +0 -5
- package/dist/api/dto/reviews.js +0 -5
- package/dist/api/dto/subscriptions.js +0 -2
- package/dist/api/dto/worktree.js +0 -6
- package/dist/api/errors.js +1 -40
- package/dist/api/index.js +1 -33
- package/dist/api/plugin-manifest-schema.js +0 -23
- package/dist/api/routes.js +1 -147
- package/dist/build-root.js +1 -198
- package/dist/cli.js +3 -99
- package/dist/clients/attach/ansi-cells.js +1 -137
- package/dist/clients/attach/chrome/bash-jobs.js +1 -31
- package/dist/clients/attach/chrome/canvas-panels.js +1 -194
- package/dist/clients/attach/chrome/completion-bell.js +1 -89
- package/dist/clients/attach/chrome/cron-wait.js +1 -34
- package/dist/clients/attach/chrome/git-info.js +2 -44
- package/dist/clients/attach/chrome/header.js +1 -30
- package/dist/clients/attach/chrome/inbox-strip.js +1 -199
- package/dist/clients/attach/chrome/recap.js +1 -19
- package/dist/clients/attach/chrome/review-wait.js +1 -22
- package/dist/clients/attach/chrome/roster.js +4 -275
- package/dist/clients/attach/chrome/status-line.js +1 -117
- package/dist/clients/attach/chrome/ticket-panel.js +1 -280
- package/dist/clients/attach/chrome/widgets.js +1 -51
- package/dist/clients/attach/command.js +1 -107
- package/dist/clients/attach/config.js +1 -274
- package/dist/clients/attach/input/capabilities.js +1 -104
- package/dist/clients/attach/input/clipboard-image.js +3 -220
- package/dist/clients/attach/input/completion-frecency.js +1 -141
- package/dist/clients/attach/input/controller.js +7 -377
- package/dist/clients/attach/input/overlay-owner.js +1 -199
- package/dist/clients/attach/input/ref-autocomplete.js +2 -176
- package/dist/clients/attach/input/titled-editor.js +4 -859
- package/dist/clients/attach/overlays/auth.js +2 -271
- package/dist/clients/attach/overlays/dialogs.js +2 -102
- package/dist/clients/attach/overlays/file-review.js +2 -128
- package/dist/clients/attach/overlays/graph.js +1 -661
- package/dist/clients/attach/overlays/help.js +1 -211
- package/dist/clients/attach/overlays/mcp.js +1 -302
- package/dist/clients/attach/overlays/pickers.js +1 -163
- package/dist/clients/attach/render/activity-slot.js +1 -13
- package/dist/clients/attach/render/assistant-message.js +1 -56
- package/dist/clients/attach/render/card-presentation.js +5 -218
- package/dist/clients/attach/render/chat-view.js +5 -1708
- package/dist/clients/attach/render/condensed-history.js +1 -60
- package/dist/clients/attach/render/context-message.js +1 -63
- package/dist/clients/attach/render/crtr-output.js +17 -905
- package/dist/clients/attach/render/diagram.js +7 -111
- package/dist/clients/attach/render/edit-diff.js +5 -304
- package/dist/clients/attach/render/glyph-codepoints.js +1 -42
- package/dist/clients/attach/render/group-activity.js +2 -263
- package/dist/clients/attach/render/group-recap.js +1 -152
- package/dist/clients/attach/render/markdown-source.js +5 -266
- package/dist/clients/attach/render/measured-container.js +1 -322
- package/dist/clients/attach/render/page-block.js +1 -183
- package/dist/clients/attach/render/scroll-animation.js +1 -80
- package/dist/clients/attach/render/tool-calls.js +3 -361
- package/dist/clients/attach/render/transcript-copy.js +2 -81
- package/dist/clients/attach/render/transcript-search.js +1 -152
- package/dist/clients/attach/render/viewport.js +1 -184
- package/dist/clients/attach/session/banner.js +1 -29
- package/dist/clients/attach/session/bindings.js +1 -71
- package/dist/clients/attach/session/chrome-refresh.js +1 -94
- package/dist/clients/attach/session/connection.js +1 -186
- package/dist/clients/attach/session/context.js +0 -16
- package/dist/clients/attach/session/editor-frame.js +1 -142
- package/dist/clients/attach/session/editor-inventory.js +6 -160
- package/dist/clients/attach/session/file-links.js +1 -68
- package/dist/clients/attach/session/focus-events.js +1 -12
- package/dist/clients/attach/session/frame.js +1 -214
- package/dist/clients/attach/session/frames.js +1 -188
- package/dist/clients/attach/session/identity.js +1 -26
- package/dist/clients/attach/session/input-wiring.js +1 -140
- package/dist/clients/attach/session/invariant.js +1 -15
- package/dist/clients/attach/session/keys.js +1 -77
- package/dist/clients/attach/session/layout.js +1 -59
- package/dist/clients/attach/session/mouse.js +1 -78
- package/dist/clients/attach/session/pane-focus.js +1 -42
- package/dist/clients/attach/session/pane-tag.js +1 -112
- package/dist/clients/attach/session/pi-assets.js +1 -24
- package/dist/clients/attach/session/pi-oauth-flows.js +1 -21
- package/dist/clients/attach/session/profile-files.js +1 -228
- package/dist/clients/attach/session/reconnect.js +1 -175
- package/dist/clients/attach/session/selection.js +3 -108
- package/dist/clients/attach/session/state-sync.js +1 -67
- package/dist/clients/attach/session/surface-frame.js +1 -73
- package/dist/clients/attach/session/surface-host.js +1 -255
- package/dist/clients/attach/session/teardown.js +5 -94
- package/dist/clients/attach/session/transcript-search.js +3 -151
- package/dist/clients/attach/session/whip-achievements.js +2 -145
- package/dist/clients/attach/session/whip.js +1 -362
- package/dist/clients/attach/slash/dispatch.js +1 -706
- package/dist/clients/attach/slash/prompt-preview.js +1 -121
- package/dist/clients/attach/viewer.js +441 -441
- package/dist/clients/conversation/projection.js +1 -324
- package/dist/clients/conversation/submit.js +1 -51
- package/dist/clients/inbox/controller.js +1 -701
- package/dist/clients/inbox/dto-adapt.js +1 -93
- package/dist/clients/inbox/layout.js +1 -9
- package/dist/clients/inbox/page-adapter.js +1 -55
- package/dist/clients/inbox/resolve.js +1 -35
- package/dist/clients/inbox/review/anchors.js +1 -89
- package/dist/clients/inbox/review/comments-client.js +1 -98
- package/dist/clients/inbox/review/companion-pane.js +1 -82
- package/dist/clients/inbox/review/document-surface.js +2 -1188
- package/dist/clients/inbox/review/frame.js +1 -216
- package/dist/clients/inbox/review/keys.js +1 -123
- package/dist/clients/inbox/review/launch.js +1 -151
- package/dist/clients/inbox/review/live-source.js +1 -160
- package/dist/clients/inbox/review/nvim.js +1 -44
- package/dist/clients/inbox/review/remap.js +1 -157
- package/dist/clients/inbox/review/review-client.js +1 -123
- package/dist/clients/inbox/review/roundtrip.js +3 -36
- package/dist/clients/inbox/review/state.js +4 -315
- package/dist/clients/inbox/review-adapter.js +1 -43
- package/dist/clients/inbox/surface.js +1 -152
- package/dist/clients/inbox/tui/ansi.js +3 -321
- package/dist/clients/inbox/tui/input.js +5 -392
- package/dist/clients/inbox/tui/keys.js +1 -104
- package/dist/clients/inbox/tui/page-body.js +1 -66
- package/dist/clients/inbox/tui/panel.js +1 -84
- package/dist/clients/inbox/tui/render.js +2 -368
- package/dist/clients/inbox/tui/slots.js +3 -134
- package/dist/clients/inbox/tui/types.js +0 -1
- package/dist/clients/inbox/tui.js +1 -86
- package/dist/clients/surfaces/host.js +0 -1
- package/dist/commands/api-client.js +4 -290
- package/dist/commands/attention.js +1 -215
- package/dist/commands/canvas-browse.js +1 -70
- package/dist/commands/canvas-config.js +2 -192
- package/dist/commands/canvas-history/grep.js +7 -85
- package/dist/commands/canvas-history/read.js +3 -50
- package/dist/commands/canvas-history/search.js +10 -99
- package/dist/commands/canvas-history/shared.js +1 -139
- package/dist/commands/canvas-history/stats.js +6 -68
- package/dist/commands/canvas-history.js +1 -32
- package/dist/commands/canvas-issue.js +14 -149
- package/dist/commands/canvas-prune.js +1 -108
- package/dist/commands/canvas-roster.js +1 -69
- package/dist/commands/canvas-snapshot.js +1 -34
- package/dist/commands/canvas-use.js +1 -61
- package/dist/commands/canvas.js +1 -49
- package/dist/commands/chord.js +1 -241
- package/dist/commands/cron.js +11 -534
- package/dist/commands/dashboard.js +1 -85
- package/dist/commands/human/components.js +3 -77
- package/dist/commands/human/feedback.js +1 -112
- package/dist/commands/human/prompts.js +1 -331
- package/dist/commands/human/queue.js +1 -191
- package/dist/commands/human/request.js +1 -266
- package/dist/commands/human/review.js +1 -288
- package/dist/commands/human/shared.js +1 -67
- package/dist/commands/human.js +4 -60
- package/dist/commands/memory/delete.js +1 -100
- package/dist/commands/memory/edit.js +21 -219
- package/dist/commands/memory/find.js +2 -244
- package/dist/commands/memory/history.js +5 -199
- package/dist/commands/memory/lint.js +1 -107
- package/dist/commands/memory/list.js +1 -142
- package/dist/commands/memory/move.js +1 -223
- package/dist/commands/memory/origin.js +1 -130
- package/dist/commands/memory/read.js +6 -232
- package/dist/commands/memory/shared.js +12 -802
- package/dist/commands/memory/write.js +13 -235
- package/dist/commands/memory.js +1 -30
- package/dist/commands/node/bash.js +5 -245
- package/dist/commands/node/create.js +3 -332
- package/dist/commands/node/inspect.js +12 -300
- package/dist/commands/node/lifecycle.js +2 -453
- package/dist/commands/node/message.js +1 -161
- package/dist/commands/node/outcome.js +4 -134
- package/dist/commands/node/pyramid.js +2 -79
- package/dist/commands/node/subscription.js +1 -78
- package/dist/commands/node/wait.js +7 -163
- package/dist/commands/node-context.js +2 -159
- package/dist/commands/node-inspect-artifacts.js +8 -109
- package/dist/commands/node-lifecycle-revive.js +1 -217
- package/dist/commands/node-snapshot.js +1 -37
- package/dist/commands/node-transcript.js +1 -62
- package/dist/commands/node-worktree.js +1 -138
- package/dist/commands/node.js +1 -29
- package/dist/commands/pkg/browse/actions.js +1 -198
- package/dist/commands/pkg/browse/catalog.js +1 -466
- package/dist/commands/pkg/browse/command-view.js +1 -191
- package/dist/commands/pkg/browse/detail-panel.js +1 -402
- package/dist/commands/pkg/browse/doc-view.js +1 -89
- package/dist/commands/pkg/browse/list-panel.js +2 -168
- package/dist/commands/pkg/browse/model.js +1 -36
- package/dist/commands/pkg/browse/shell.js +1 -640
- package/dist/commands/pkg/browse.js +1 -27
- package/dist/commands/pkg/market-inspect.js +1 -141
- package/dist/commands/pkg/market-manage.js +1 -327
- package/dist/commands/pkg/market.js +1 -14
- package/dist/commands/pkg/plugin-inspect.js +1 -168
- package/dist/commands/pkg/plugin-manage.js +17 -1109
- package/dist/commands/pkg/plugin.js +1 -14
- package/dist/commands/pkg/shared.js +1 -62
- package/dist/commands/pkg.js +1 -21
- package/dist/commands/profile/default.js +1 -139
- package/dist/commands/profile/delete.js +1 -66
- package/dist/commands/profile/env.js +3 -188
- package/dist/commands/profile/kind.js +2 -35
- package/dist/commands/profile/list.js +1 -43
- package/dist/commands/profile/meta.js +1 -67
- package/dist/commands/profile/new.js +1 -115
- package/dist/commands/profile/pause.js +1 -59
- package/dist/commands/profile/project.js +1 -113
- package/dist/commands/profile/rename.js +1 -38
- package/dist/commands/profile/show.js +1 -52
- package/dist/commands/profile.js +1 -35
- package/dist/commands/push.js +9 -265
- package/dist/commands/revive.js +10 -181
- package/dist/commands/surface/node/cycle.js +1 -83
- package/dist/commands/surface/node/focus.js +1 -81
- package/dist/commands/surface/node/id.js +1 -38
- package/dist/commands/surface/node/pin.js +1 -42
- package/dist/commands/surface/node/placement.js +1 -134
- package/dist/commands/surface-edit.js +1 -157
- package/dist/commands/surface-inbox.js +1 -98
- package/dist/commands/surface-inspect.js +1 -39
- package/dist/commands/surface-node.js +1 -19
- package/dist/commands/surface-reload.js +2 -134
- package/dist/commands/surface-tmux-spread.js +1 -214
- package/dist/commands/surface.js +1 -28
- package/dist/commands/sys/branch.js +1 -19
- package/dist/commands/sys/config.js +1 -353
- package/dist/commands/sys/context/admin/actions.js +2 -246
- package/dist/commands/sys/context/admin/detail-panel.js +1 -247
- package/dist/commands/sys/context/admin/docs-panel.js +1 -191
- package/dist/commands/sys/context/admin/list-view.js +1 -183
- package/dist/commands/sys/context/admin/model.js +1 -229
- package/dist/commands/sys/context/admin/rail-panel.js +1 -227
- package/dist/commands/sys/context/admin/read-view.js +2 -194
- package/dist/commands/sys/context/admin/shell.js +1 -910
- package/dist/commands/sys/context/admin.js +2 -126
- package/dist/commands/sys/context/doc.js +3 -197
- package/dist/commands/sys/context/prompt-review.js +11 -291
- package/dist/commands/sys/context/resolve.js +10 -489
- package/dist/commands/sys/context/sysprompt.js +5 -96
- package/dist/commands/sys/context.js +1 -20
- package/dist/commands/sys/daemon.js +1 -313
- package/dist/commands/sys/doctor.js +1 -617
- package/dist/commands/sys/feedback.js +7 -228
- package/dist/commands/sys/logs.js +3 -129
- package/dist/commands/sys/migrate.js +1 -94
- package/dist/commands/sys/panels/broker-limits-panel.js +2 -110
- package/dist/commands/sys/panels/dependencies-panel.js +1 -80
- package/dist/commands/sys/panels/keybindings-panel.js +1 -703
- package/dist/commands/sys/panels/models-panel.js +1 -1133
- package/dist/commands/sys/panels/plugins-panel.js +1 -80
- package/dist/commands/sys/panels/prefs-panel.js +1 -85
- package/dist/commands/sys/panels/profiles-panel.js +1 -601
- package/dist/commands/sys/panels/provider-panel.js +1 -538
- package/dist/commands/sys/settings-shell.js +1 -400
- package/dist/commands/sys/settings.js +1 -46
- package/dist/commands/sys/setup-core.js +6 -579
- package/dist/commands/sys/setup-settings-runner.js +1 -16
- package/dist/commands/sys/setup-wizard.js +1 -279
- package/dist/commands/sys/setup.js +1 -34
- package/dist/commands/sys/shared.js +1 -81
- package/dist/commands/sys/support/prepare.js +3 -239
- package/dist/commands/sys/support/submit.js +6 -524
- package/dist/commands/sys/support.js +1 -18
- package/dist/commands/sys/sync-deps.js +15 -498
- package/dist/commands/sys/sync-project-guidance.js +4 -481
- package/dist/commands/sys/sync-shared.js +1 -49
- package/dist/commands/sys/sync-skills.js +2 -311
- package/dist/commands/sys/sync.js +1 -18
- package/dist/commands/sys/update.js +1 -147
- package/dist/commands/sys/worktrees.js +5 -53
- package/dist/commands/sys.js +1 -18
- package/dist/core/activity-signal.js +2 -38
- package/dist/core/asset-root.js +1 -18
- package/dist/core/auth-file.js +2 -179
- package/dist/core/auth-interaction.js +3 -94
- package/dist/core/auto-update.js +4 -94
- package/dist/core/bash-guard.js +11 -393
- package/dist/core/bash-jobs.js +7 -411
- package/dist/core/bootstrap.js +2 -53
- package/dist/core/broker-client/client.js +1 -184
- package/dist/core/broker-client/index.js +1 -13
- package/dist/core/broker-client/transport-relay.js +1 -157
- package/dist/core/broker-client/transport-socket.js +1 -179
- package/dist/core/broker-client/transport.js +1 -26
- package/dist/core/canvas/attention.js +1 -47
- package/dist/core/canvas/boot-id.js +1 -26
- package/dist/core/canvas/boot.js +1 -186
- package/dist/core/canvas/browse/app.js +3 -919
- package/dist/core/canvas/browse/model.js +1 -477
- package/dist/core/canvas/browse/pins.js +1 -29
- package/dist/core/canvas/browse/render.js +3 -1055
- package/dist/core/canvas/canvas.js +15 -922
- package/dist/core/canvas/crons.js +11 -481
- package/dist/core/canvas/daemon-owner.js +2 -146
- package/dist/core/canvas/db.js +2 -100
- package/dist/core/canvas/deliveries.js +22 -283
- package/dist/core/canvas/delivery-contract.js +1 -8
- package/dist/core/canvas/executions.js +1 -68
- package/dist/core/canvas/extensions.js +1 -83
- package/dist/core/canvas/focuses.js +1 -77
- package/dist/core/canvas/history.js +24 -860
- package/dist/core/canvas/index.js +1 -15
- package/dist/core/canvas/install-id.js +1 -84
- package/dist/core/canvas/labels.js +1 -43
- package/dist/core/canvas/meta-file.js +1 -89
- package/dist/core/canvas/migrations.js +41 -1150
- package/dist/core/canvas/nav-model.js +1 -231
- package/dist/core/canvas/nav-render.js +1 -260
- package/dist/core/canvas/node-order.js +1 -37
- package/dist/core/canvas/node-recap.js +2 -67
- package/dist/core/canvas/node-sql-migration.js +2 -209
- package/dist/core/canvas/paths.js +1 -153
- package/dist/core/canvas/pid.js +4 -683
- package/dist/core/canvas/recovery.js +3 -565
- package/dist/core/canvas/remote-canvas-source.js +1 -288
- package/dist/core/canvas/remote-transport.js +1 -57
- package/dist/core/canvas/render-source.js +10 -635
- package/dist/core/canvas/sessions.js +1 -78
- package/dist/core/canvas/source.js +1 -47
- package/dist/core/canvas/status-glyph.js +1 -132
- package/dist/core/canvas/telemetry.js +1 -35
- package/dist/core/canvas/types.js +1 -6
- package/dist/core/canvas/waits.js +4 -68
- package/dist/core/canvas/worktrees.js +1 -93
- package/dist/core/clipboard-text.js +1 -57
- package/dist/core/command-hooks/artifact.js +1 -145
- package/dist/core/command-hooks/catalog.js +1 -38
- package/dist/core/command-hooks/compose.js +1 -99
- package/dist/core/command-hooks/discovery.js +1 -228
- package/dist/core/command-hooks/help.js +1 -18
- package/dist/core/command-hooks/index.js +1 -7
- package/dist/core/command-hooks/lifecycle-catalog.js +1 -9
- package/dist/core/command-hooks/lifecycle-create.js +1 -51
- package/dist/core/command-hooks/report.js +1 -28
- package/dist/core/command-hooks/schema.js +1 -157
- package/dist/core/command-hooks/transport/exec-invoke.js +1 -276
- package/dist/core/command-hooks/transport/exec-lifecycle.js +1 -211
- package/dist/core/command-manifests/manifest.js +1 -324
- package/dist/core/command-manifests/registry.js +1 -118
- package/dist/core/command-manifests/schema.js +1 -736
- package/dist/core/command-plugins/bundle.js +1 -261
- package/dist/core/command-plugins/compose.js +1 -65
- package/dist/core/command-plugins/discovery.js +1 -245
- package/dist/core/command-plugins/endpoint.js +1 -48
- package/dist/core/command-plugins/extensions.js +1 -166
- package/dist/core/command-plugins/help-addenda.js +1 -44
- package/dist/core/command-plugins/presence.js +1 -17
- package/dist/core/command-plugins/revalidate.js +2 -152
- package/dist/core/command-plugins/transport/exec-invoke.js +1 -215
- package/dist/core/command-plugins/transport/http-fetch.js +1 -68
- package/dist/core/command-plugins/transport/http-invoke.js +3 -546
- package/dist/core/command.js +10 -739
- package/dist/core/config.js +1 -1059
- package/dist/core/document-lines.js +3 -6
- package/dist/core/env-name.js +1 -9
- package/dist/core/errors.js +1 -52
- package/dist/core/events/emit.js +1 -17
- package/dist/core/events/envelope.js +1 -84
- package/dist/core/events/errors.js +1 -69
- package/dist/core/events/index.js +1 -4
- package/dist/core/events/operation-id.js +1 -24
- package/dist/core/events/read.js +1 -623
- package/dist/core/events/serialize.js +1 -199
- package/dist/core/events/source.js +1 -31
- package/dist/core/events/types.js +1 -11
- package/dist/core/exclusive-lock.js +1 -197
- package/dist/core/fault-classifier.js +1 -96
- package/dist/core/feed/feed.js +7 -202
- package/dist/core/feed/inbox-migrate.js +3 -135
- package/dist/core/feed/inbox.js +10 -122
- package/dist/core/feed/messages.js +6 -212
- package/dist/core/frontmatter.js +1 -35
- package/dist/core/fs-utils.js +3 -202
- package/dist/core/git.js +2 -103
- package/dist/core/help.js +9 -310
- package/dist/core/host-exports/builtins.js +9 -68
- package/dist/core/host-exports/export.js +3 -124
- package/dist/core/human/action-binding.js +1 -40
- package/dist/core/human/answer-text.js +5 -100
- package/dist/core/human/answer.js +1 -119
- package/dist/core/human/claim.js +3 -67
- package/dist/core/human/completion.js +1 -27
- package/dist/core/human/component-docs.js +78 -272
- package/dist/core/human/convention.js +2 -82
- package/dist/core/human/feedback-companion.js +1 -106
- package/dist/core/human/feedback.js +1 -88
- package/dist/core/human/page-authoring.js +1 -19
- package/dist/core/human/page-catalog.js +1 -172
- package/dist/core/human/page-errors.js +1 -7
- package/dist/core/human/page-eval.js +1 -125
- package/dist/core/human/page-html-markdown.js +8 -260
- package/dist/core/human/page-markdown.js +17 -295
- package/dist/core/human/page-schema.js +1 -373
- package/dist/core/human/page-synth.js +8 -27
- package/dist/core/human/page.js +1 -198
- package/dist/core/human/requests.js +15 -466
- package/dist/core/human/review-schema.js +1 -34
- package/dist/core/human/root.js +1 -11
- package/dist/core/human/scan.js +1 -69
- package/dist/core/human/summary.js +1 -5
- package/dist/core/human/tickets.js +1 -171
- package/dist/core/human/types.js +0 -1
- package/dist/core/human/visible-paths.js +1 -77
- package/dist/core/human-actions.js +1 -101
- package/dist/core/inspector/chrome.js +1 -14
- package/dist/core/inspector/contract.js +0 -1
- package/dist/core/inspector/core.js +2 -295
- package/dist/core/inspector/host.js +4 -538
- package/dist/core/inspector/model.js +2 -226
- package/dist/core/inspector/text.js +6 -45
- package/dist/core/inspector/transport.js +1 -36
- package/dist/core/inspector/tui.js +2 -295
- package/dist/core/installed-plugins.js +1 -78
- package/dist/core/io.js +7 -356
- package/dist/core/keybindings/attach-control.js +1 -42
- package/dist/core/keybindings/background-bash.js +1 -33
- package/dist/core/keybindings/catalog.js +1 -256
- package/dist/core/keybindings/inbox.js +1 -25
- package/dist/core/keybindings/index.js +1 -7
- package/dist/core/keybindings/match.js +1 -127
- package/dist/core/keybindings/persistence.js +1 -49
- package/dist/core/keybindings/resolve.js +1 -348
- package/dist/core/keybindings/types.js +0 -1
- package/dist/core/locked-file.js +1 -118
- package/dist/core/log.js +3 -27
- package/dist/core/manifest-recovery.js +1 -72
- package/dist/core/manifest-stale.js +1 -39
- package/dist/core/manifest.js +1 -20
- package/dist/core/memory/doc-link-grammar.js +2 -109
- package/dist/core/memory/extensions.js +1 -221
- package/dist/core/memory/history.js +6 -268
- package/dist/core/memory/identity.js +1 -181
- package/dist/core/memory/inline-ref-grammar.js +1 -98
- package/dist/core/memory/inline-ref-guidance.js +2 -35
- package/dist/core/memory/inline-ref-inventory.js +1 -59
- package/dist/core/memory/lint.js +2 -671
- package/dist/core/memory/project-namespace.js +2 -85
- package/dist/core/memory/repository-association.js +1 -129
- package/dist/core/memory/tree.js +1 -93
- package/dist/core/memory-resolver.js +2 -611
- package/dist/core/model-config.js +1 -107
- package/dist/core/model-routes.js +1 -201
- package/dist/core/nested-stores.js +2 -166
- package/dist/core/output.js +7 -99
- package/dist/core/pagination.js +1 -88
- package/dist/core/plugin-swap-lock.js +1 -31
- package/dist/core/pool-credential-store.js +1 -116
- package/dist/core/predicate.js +1 -191
- package/dist/core/preview-registry.js +2 -411
- package/dist/core/preview-result-path.js +1 -26
- package/dist/core/profiles/default-binding.js +1 -24
- package/dist/core/profiles/deletion-reservation.js +1 -42
- package/dist/core/profiles/env-store.js +2 -162
- package/dist/core/profiles/fuzzy-match.js +1 -92
- package/dist/core/profiles/manifest.js +1 -574
- package/dist/core/profiles/select.js +35 -741
- package/dist/core/profiles/state-block.js +3 -17
- package/dist/core/provider-error-recognition.js +1 -74
- package/dist/core/provider-failure.js +1 -86
- package/dist/core/provider-management.js +1 -22
- package/dist/core/remote-canvas-target.js +1 -30
- package/dist/core/render.js +18 -138
- package/dist/core/resolver.js +1 -111
- package/dist/core/review/birth.js +1 -52
- package/dist/core/review/comments.js +5 -279
- package/dist/core/review/companion.js +1 -215
- package/dist/core/review/document.js +2 -138
- package/dist/core/review/project.js +1 -36
- package/dist/core/review/realize.js +1 -71
- package/dist/core/review/remap.js +4 -141
- package/dist/core/review/signal.js +1 -12
- package/dist/core/review/stage.js +1 -184
- package/dist/core/review/store.js +1 -168
- package/dist/core/review/types.js +1 -23
- package/dist/core/runtime/advertised-command-invocation.js +1 -233
- package/dist/core/runtime/auth-reload.js +1 -67
- package/dist/core/runtime/banner.js +1 -51
- package/dist/core/runtime/bearings-render.js +18 -250
- package/dist/core/runtime/bearings.js +7 -194
- package/dist/core/runtime/bin-contributions.js +2 -186
- package/dist/core/runtime/boot-root.js +1 -107
- package/dist/core/runtime/branded-host.js +2 -264
- package/dist/core/runtime/broker/auth-reload.js +1 -157
- package/dist/core/runtime/broker/client-registry.js +1 -179
- package/dist/core/runtime/broker/daemon-ops.js +1 -88
- package/dist/core/runtime/broker/engine-drive.js +1 -354
- package/dist/core/runtime/broker/engine-routing.js +1 -211
- package/dist/core/runtime/broker/event-projection.js +1 -193
- package/dist/core/runtime/broker/extension-abort.js +1 -36
- package/dist/core/runtime/broker/fault-retry.js +1 -588
- package/dist/core/runtime/broker/frame-client.js +1 -132
- package/dist/core/runtime/broker/frame-dispatch.js +1 -183
- package/dist/core/runtime/broker/frame-engine-control.js +1 -231
- package/dist/core/runtime/broker/frame-memory-refs.js +1 -41
- package/dist/core/runtime/broker/frame-model-query.js +1 -69
- package/dist/core/runtime/broker/frame-read.js +1 -116
- package/dist/core/runtime/broker/frame-replies.js +1 -64
- package/dist/core/runtime/broker/frame-session.js +4 -203
- package/dist/core/runtime/broker/held-deferred-inbox.js +1 -13
- package/dist/core/runtime/broker/inbox.js +13 -163
- package/dist/core/runtime/broker/node-named.js +1 -27
- package/dist/core/runtime/broker/read-ops.js +1 -171
- package/dist/core/runtime/broker/rebind.js +1 -318
- package/dist/core/runtime/broker/tool-groups.js +1 -246
- package/dist/core/runtime/broker/turn-admission.js +1 -31
- package/dist/core/runtime/broker/turn-ignition.js +1 -84
- package/dist/core/runtime/broker-cli.js +3 -81
- package/dist/core/runtime/broker-extension-render.js +5 -135
- package/dist/core/runtime/broker-inventory.js +1 -116
- package/dist/core/runtime/broker-persona-guidance.js +4 -154
- package/dist/core/runtime/broker-protocol.js +3 -152
- package/dist/core/runtime/broker-request.js +1 -85
- package/dist/core/runtime/broker-sdk.js +1 -129
- package/dist/core/runtime/broker.js +1 -1214
- package/dist/core/runtime/canvas-extensions.js +1 -96
- package/dist/core/runtime/chat-inventory-rows.js +1 -105
- package/dist/core/runtime/close.js +1 -265
- package/dist/core/runtime/command-expansion.js +9 -104
- package/dist/core/runtime/command-surface.js +1 -117
- package/dist/core/runtime/connectivity.js +1 -73
- package/dist/core/runtime/deliver-live.js +1 -88
- package/dist/core/runtime/fault-recovery.js +1 -83
- package/dist/core/runtime/fault.js +1 -17
- package/dist/core/runtime/fleet.js +1 -58
- package/dist/core/runtime/front-door-env.js +1 -16
- package/dist/core/runtime/front-door.js +7 -183
- package/dist/core/runtime/headless-pi.js +1 -161
- package/dist/core/runtime/host.js +1 -457
- package/dist/core/runtime/interactive-deliver.js +1 -51
- package/dist/core/runtime/invocation.js +0 -10
- package/dist/core/runtime/kickoff.js +30 -327
- package/dist/core/runtime/launch-config-worker.js +1 -12
- package/dist/core/runtime/launch-prompt.js +4 -13
- package/dist/core/runtime/launch-target.js +1 -55
- package/dist/core/runtime/launch.js +1 -483
- package/dist/core/runtime/lifecycle.js +2 -213
- package/dist/core/runtime/managed-provider-cooling.js +1 -62
- package/dist/core/runtime/memory.js +1 -17
- package/dist/core/runtime/model-registry.js +1 -13
- package/dist/core/runtime/model-selection.js +1 -135
- package/dist/core/runtime/model-swap.js +1 -86
- package/dist/core/runtime/naming.js +14 -298
- package/dist/core/runtime/nerd-font.js +2 -127
- package/dist/core/runtime/node-read.js +2 -386
- package/dist/core/runtime/nodes.js +1 -331
- package/dist/core/runtime/outcome-document.js +1 -97
- package/dist/core/runtime/package-health.js +4 -99
- package/dist/core/runtime/persona.js +2 -55
- package/dist/core/runtime/pi-cli.js +1 -65
- package/dist/core/runtime/pi-vendored.js +1 -66
- package/dist/core/runtime/placement-tmux.js +1 -81
- package/dist/core/runtime/placement.js +1 -386
- package/dist/core/runtime/promote.js +1 -174
- package/dist/core/runtime/prospective-inventory-cli.js +3 -61
- package/dist/core/runtime/prospective-inventory.js +2 -88
- package/dist/core/runtime/recap.js +27 -103
- package/dist/core/runtime/recycle.js +1 -190
- package/dist/core/runtime/reopen.js +1 -138
- package/dist/core/runtime/reset.js +1 -245
- package/dist/core/runtime/resume-root.js +10 -290
- package/dist/core/runtime/revive-all.js +1 -107
- package/dist/core/runtime/revive.js +4 -544
- package/dist/core/runtime/roadmap.js +4 -38
- package/dist/core/runtime/session-branch.js +1 -46
- package/dist/core/runtime/session-cycles.js +1 -110
- package/dist/core/runtime/session-list-cache.js +1 -406
- package/dist/core/runtime/session-visibility.js +1 -99
- package/dist/core/runtime/shell-expansion.js +9 -100
- package/dist/core/runtime/situational-context.js +2 -67
- package/dist/core/runtime/situational-live.js +1 -41
- package/dist/core/runtime/spawn-env.js +1 -255
- package/dist/core/runtime/spawn.js +3 -577
- package/dist/core/runtime/stamp/channel.js +1 -76
- package/dist/core/runtime/stamp/protocol.js +1 -113
- package/dist/core/runtime/stop-guard.js +7 -116
- package/dist/core/runtime/stop-signals.js +1 -46
- package/dist/core/runtime/stream-watchdog.js +1 -134
- package/dist/core/runtime/structured-output.js +4 -156
- package/dist/core/runtime/surface-bg.js +1 -85
- package/dist/core/runtime/tmux-bindings.js +4 -730
- package/dist/core/runtime/tmux-chrome.js +1 -5
- package/dist/core/runtime/tmux-driver.js +7 -637
- package/dist/core/runtime/tool-group-summary.js +6 -85
- package/dist/core/runtime/turn-visibility.js +1 -31
- package/dist/core/runtime/view-socket.js +1 -83
- package/dist/core/runtime/warm-pool.js +1 -395
- package/dist/core/scope.js +1 -254
- package/dist/core/scoped-state/db.js +1 -135
- package/dist/core/scoped-state/migrate.js +3 -181
- package/dist/core/scoped-state/paths.js +1 -27
- package/dist/core/scoped-state/profiles.js +1 -62
- package/dist/core/scoped-state/providers.js +1 -8
- package/dist/core/scoped-state/schema.js +3 -16
- package/dist/core/scoped-state/settings.js +1 -82
- package/dist/core/secrets.js +2 -55
- package/dist/core/self-update.js +1 -71
- package/dist/core/session-model/session-state.js +1 -180
- package/dist/core/shell-segments.js +4 -169
- package/dist/core/spawn.js +1 -26
- package/dist/core/stdout-errors.js +1 -14
- package/dist/core/subscription-state.js +3 -193
- package/dist/core/substrate/frontmatter-validation.js +1 -105
- package/dist/core/substrate/gate-explain.js +1 -424
- package/dist/core/substrate/gate.js +1 -26
- package/dist/core/substrate/index.js +1 -30
- package/dist/core/substrate/injected-store.js +1 -249
- package/dist/core/substrate/listings.js +1 -115
- package/dist/core/substrate/on-read-node.js +1 -36
- package/dist/core/substrate/on-read.js +9 -315
- package/dist/core/substrate/plan.js +1 -266
- package/dist/core/substrate/render-node.js +1 -30
- package/dist/core/substrate/render.js +65 -689
- package/dist/core/substrate/schema.js +1 -186
- package/dist/core/substrate/session-cache.js +1 -83
- package/dist/core/substrate/subject-fields.js +1 -35
- package/dist/core/substrate/subject.js +1 -47
- package/dist/core/substrate/surface-match.js +1 -242
- package/dist/core/termrender/code-doc.js +5 -92
- package/dist/core/termrender/display.js +2 -56
- package/dist/core/termrender/termrender.js +14 -719
- package/dist/core/termrender/version.js +1 -1
- package/dist/core/timing.js +2 -94
- package/dist/core/tui/draw.js +2 -378
- package/dist/core/tui/fuzzy.js +1 -38
- package/dist/core/tui/markdown.js +3 -407
- package/dist/core/tui/page-host.js +1 -74
- package/dist/core/tui/panel.js +1 -137
- package/dist/core/tui/terminal.js +2 -100
- package/dist/core/user-settings.js +1 -454
- package/dist/core/wake.js +1 -296
- package/dist/core/worktree-close.js +6 -228
- package/dist/core/worktree-containment.js +3 -48
- package/dist/core/worktree-landing.js +4 -56
- package/dist/core/worktree-mutation-async.js +10 -280
- package/dist/core/worktree-quarantine.js +1 -54
- package/dist/core/worktree-sweep.js +6 -453
- package/dist/core/worktree.js +18 -899
- package/dist/daemon/api/bridge.js +8 -418
- package/dist/daemon/api/handlers/attach.js +1 -65
- package/dist/daemon/api/handlers/bash-jobs.js +2 -91
- package/dist/daemon/api/handlers/broker-ops.js +1 -447
- package/dist/daemon/api/handlers/broker-recovery.js +1 -251
- package/dist/daemon/api/handlers/canvas.js +6 -490
- package/dist/daemon/api/handlers/chat-inventory.js +1 -25
- package/dist/daemon/api/handlers/crons.js +1 -373
- package/dist/daemon/api/handlers/daemon.js +1 -76
- package/dist/daemon/api/handlers/feedback-comments.js +3 -199
- package/dist/daemon/api/handlers/files.js +1 -63
- package/dist/daemon/api/handlers/focus.js +1 -92
- package/dist/daemon/api/handlers/health.js +1 -76
- package/dist/daemon/api/handlers/human-requests.js +1 -379
- package/dist/daemon/api/handlers/human.js +1 -3
- package/dist/daemon/api/handlers/inbox-page.js +1 -89
- package/dist/daemon/api/handlers/inbox.js +1 -301
- package/dist/daemon/api/handlers/memory.js +1 -50
- package/dist/daemon/api/handlers/messages.js +2 -506
- package/dist/daemon/api/handlers/model-config.js +1 -44
- package/dist/daemon/api/handlers/modelauth.js +1 -165
- package/dist/daemon/api/handlers/node-outcomes.js +1 -181
- package/dist/daemon/api/handlers/nodes.js +1 -939
- package/dist/daemon/api/handlers/profiles.js +1 -140
- package/dist/daemon/api/handlers/prospective-chat-inventory.js +1 -59
- package/dist/daemon/api/handlers/reports.js +16 -332
- package/dist/daemon/api/handlers/review-comments.js +1 -465
- package/dist/daemon/api/handlers/reviews.js +1 -200
- package/dist/daemon/api/handlers/subscriptions.js +1 -53
- package/dist/daemon/api/handlers/validate.js +1 -58
- package/dist/daemon/api/handlers/worktree.js +1 -39
- package/dist/daemon/api/map.js +2 -735
- package/dist/daemon/api/router.js +1 -190
- package/dist/daemon/api/server.js +11 -408
- package/dist/daemon/boot-migrations.js +1 -31
- package/dist/daemon/companion-retire.js +1 -34
- package/dist/daemon/control.js +1 -22
- package/dist/daemon/cron/armed-context.js +1 -100
- package/dist/daemon/cron/capture.js +2 -45
- package/dist/daemon/cron/disposition.js +1 -55
- package/dist/daemon/cron/escalation.js +3 -124
- package/dist/daemon/cron/held.js +1 -20
- package/dist/daemon/cron/lease-recovery.js +1 -119
- package/dist/daemon/cron/live-runs.js +1 -23
- package/dist/daemon/cron/passes.js +1 -58
- package/dist/daemon/cron/settle.js +1 -61
- package/dist/daemon/cron/sinks.js +2 -59
- package/dist/daemon/cron-run.js +1 -405
- package/dist/daemon/crtrd-cli.js +1 -23
- package/dist/daemon/crtrd.js +8 -854
- package/dist/daemon/delivery/run-delivery.js +1 -164
- package/dist/daemon/fleet.js +17 -475
- package/dist/daemon/human/finish.js +10 -179
- package/dist/daemon/human/settle.js +1 -89
- package/dist/daemon/human/sweep.js +1 -66
- package/dist/daemon/manage.js +2 -595
- package/dist/daemon/messaging/node-message.js +1 -99
- package/dist/daemon/park-activity.js +1 -30
- package/dist/daemon/park-pending.js +1 -52
- package/dist/daemon/pidfile.js +1 -37
- package/dist/daemon/profile-delete.js +1 -306
- package/dist/daemon/reconcilers/bash-deadline.js +1 -80
- package/dist/daemon/reconcilers/broker-supervision.js +4 -761
- package/dist/daemon/reconcilers/controller-death.js +1 -14
- package/dist/daemon/reconcilers/cron-lane.js +1 -29
- package/dist/daemon/reconcilers/delivery-lane.js +1 -130
- package/dist/daemon/reconcilers/live-obligation.js +1 -87
- package/dist/daemon/reconcilers/managed-worktree-sweep.js +1 -202
- package/dist/daemon/reconcilers/node-deadline.js +1 -82
- package/dist/daemon/reconcilers/node-lifecycle/freeze-lane.js +1 -172
- package/dist/daemon/reconcilers/node-lifecycle/respawn-policy.js +1 -59
- package/dist/daemon/reconcilers/node-lifecycle/terminating.js +1 -12
- package/dist/daemon/reconcilers/node-lifecycle/tick.js +1 -146
- package/dist/daemon/reconcilers/node-lifecycle/wants-execution.js +1 -11
- package/dist/daemon/reconcilers/pending-review-submit.js +1 -36
- package/dist/daemon/reconcilers/storage-maintenance.js +1 -207
- package/dist/daemon/review/comment-notify.js +2 -109
- package/dist/daemon/review/companion.js +1 -29
- package/dist/daemon/review/deliver.js +3 -8
- package/dist/daemon/review/finish.js +1 -122
- package/dist/daemon/review/sweep.js +1 -18
- package/dist/daemon/startup-policy.js +1 -1
- package/dist/daemon/supervise-cadence.js +1 -6
- package/dist/hook-authoring.js +5 -447
- package/dist/hook-process.js +1 -34
- package/dist/index.js +1 -52
- package/dist/migrations/001-surfaces-frontmatter.js +1 -161
- package/dist/migrations/002-profile-project-memory.js +1 -72
- package/dist/migrations/003-repository-root-memory-identity/front-door.js +11 -231
- package/dist/migrations/003-repository-root-memory-identity/index.js +5 -513
- package/dist/migrations/003-repository-root-memory-identity/references.js +5 -469
- package/dist/migrations/003-repository-root-memory-identity/repository-facts.js +3 -349
- package/dist/migrations/activation.js +2 -89
- package/dist/migrations/convergent.js +2 -82
- package/dist/migrations/corpus.js +3 -483
- package/dist/migrations/frontmatter-splice.js +8 -176
- package/dist/migrations/profile-manifests.js +2 -70
- package/dist/migrations/registry.js +1 -42
- package/dist/migrations/runner.js +1 -85
- package/dist/migrations/types.js +0 -24
- package/dist/pi-extensions/broker-local.js +2 -106
- package/dist/pi-extensions/canvas-bash-valve.js +7 -461
- package/dist/pi-extensions/canvas-context-intro.js +2 -113
- package/dist/pi-extensions/canvas-doc-substrate.js +9 -178
- package/dist/pi-extensions/canvas-goal-capture.js +1 -83
- package/dist/pi-extensions/canvas-inbox-watcher.js +1 -1010
- package/dist/pi-extensions/canvas-passive-context.js +14 -203
- package/dist/pi-extensions/canvas-preview-result.js +2 -72
- package/dist/pi-extensions/canvas-prompt-scrub.js +2 -54
- package/dist/pi-extensions/canvas-recap.js +11 -405
- package/dist/pi-extensions/canvas-review-boundary.js +3 -63
- package/dist/pi-extensions/canvas-stamp.js +2 -77
- package/dist/pi-extensions/canvas-stophook.js +1 -643
- package/dist/pi-extensions/canvas-structured-output.js +13 -35
- package/dist/pi-extensions/canvas-tool-guide.js +9 -78
- package/dist/pi-extensions/envelope-merge.js +8 -29
- package/dist/prompts/review.js +20 -42
- package/dist/shared/birth-announcement.js +1 -25
- package/dist/shared/crtr-version.js +1 -18
- package/dist/shared/env.js +1 -214
- package/dist/shared/generated-context.js +11 -226
- package/dist/shared/predicates.js +1 -4
- package/dist/shared/shell-quote.js +1 -5
- package/dist/shared/tool-groups.js +1 -64
- package/dist/shared/working-activity.js +1 -27
- package/dist/suppress-experimental-warnings.js +1 -15
- package/dist/types.js +1 -185
- package/docs/public-api.md +10 -9
- package/package.json +6 -4
- package/runtime.lock.json +5 -5
- package/scripts/pack-minify.mjs +108 -0
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,418 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
//
|
|
10
|
-
// Attach implies revive, EXCEPT for an exact parked resident, which only
|
|
11
|
-
// `?wakeParked=1` wakes. Before opening WebSocket, the upgrade handler calls
|
|
12
|
-
// `decideAttachRevive(id, { resume: true }, wakeParked)` unless `?revive=0` or
|
|
13
|
-
// `X-Crtr-Attach-Revive: 0` opts out, then waits for `view.sock` to become
|
|
14
|
-
// listenable. A failed revive or an unready socket refuses the upgrade with 409.
|
|
15
|
-
// With revive opted out, a dormant node also refuses with 409. Pre-upgrade
|
|
16
|
-
// refusals send a plain HTTP error and destroy the raw socket; post-upgrade
|
|
17
|
-
// faults use WebSocket close codes (1008/1009/1011).
|
|
18
|
-
//
|
|
19
|
-
// Once open, the bridge only relays sockets. It never touches SessionManager,
|
|
20
|
-
// spawns `pi --session`, or writes a `.jsonl`; the revive boundary is its sole
|
|
21
|
-
// engine launch path. It records a fault only when the broker socket fails.
|
|
22
|
-
import { createConnection } from 'node:net';
|
|
23
|
-
import { WebSocketServer } from 'ws';
|
|
24
|
-
import { isSafeNodeId, viewSocketPath } from '../../core/canvas/paths.js';
|
|
25
|
-
import { getNode } from '../../core/canvas/index.js';
|
|
26
|
-
import { BROKER_READ_CAPS, CLIENT_READ_CAPS, FrameDecoder, FrameOverflowError, } from '../../core/runtime/broker-protocol.js';
|
|
27
|
-
import { classify } from '../../core/fault-classifier.js';
|
|
28
|
-
import { clearFault, recordFault } from '../../core/canvas/recovery.js';
|
|
29
|
-
import { decideAttachRevive } from '../../core/runtime/revive.js';
|
|
30
|
-
import { probeViewSocket, waitForBrokerViewSocket } from '../../core/runtime/view-socket.js';
|
|
31
|
-
/** Our own noServer WS server: A-9 routes matched attach upgrades to
|
|
32
|
-
* {@link handleAttachUpgrade}, which performs the handshake through this. Bounds
|
|
33
|
-
* the INBOUND remote→broker path to the broker's OWN read cap (not the generous
|
|
34
|
-
* client cap) so a remote peer cannot buffer 256MiB before the broker's 24MiB
|
|
35
|
-
* decoder rejects the message. */
|
|
36
|
-
const wss = new WebSocketServer({ noServer: true, maxPayload: BROKER_READ_CAPS.maxLineBytes });
|
|
37
|
-
/** Keep a RELAYING connection alive across a gap between frames, through common
|
|
38
|
-
* 60s proxy idle limits. A viewer only observes a broker, so a missed heartbeat
|
|
39
|
-
* may close this socket but must never affect the broker or its in-flight work. */
|
|
40
|
-
export const REMOTE_ATTACH_HEARTBEAT_MS = 25_000;
|
|
41
|
-
/** How long after the last relayed frame the heartbeat keeps pinging. Past this,
|
|
42
|
-
* the attach is carrying nothing — no viewer output, no streaming node — and the
|
|
43
|
-
* heartbeat goes silent so the network path underneath can reap the connection.
|
|
44
|
-
*
|
|
45
|
-
* This matters far beyond a socket: on a hosted guest (Blaxel) a connection that
|
|
46
|
-
* is pinged every 25s is never idle, so the host never suspends the sandbox. An
|
|
47
|
-
* unconditional heartbeat held whole fleets awake for 15h at a time. A drop on a
|
|
48
|
-
* quiet attach is a normal close the remote peer re-attaches from, and real work
|
|
49
|
-
* is anchored by its own keep-alive, not by this ping.
|
|
50
|
-
*
|
|
51
|
-
* The clock starts when the attach OPENS, not at its first relayed frame: a
|
|
52
|
-
* never-relaying attach still gets pings until this window elapses. The welcome
|
|
53
|
-
* frame lands in milliseconds, so this only pads the tail of the very first
|
|
54
|
-
* window.
|
|
55
|
-
*
|
|
56
|
-
* ROLLOUT ORDER — this half is only half the answer, and shipping it FIRST is
|
|
57
|
-
* strictly worse than shipping nothing. The host that owns the attach must also
|
|
58
|
-
* let go of a quiet one; Northlight Core does that at its own 60s quiesce
|
|
59
|
-
* (`CROUTER_FOLLOW_QUIESCE_MS`). Against a host that holds the attach forever,
|
|
60
|
-
* going quiet here only moves the drop to the network path, the host reports a
|
|
61
|
-
* detach, its client reconnects, and the box wakes again — the same pin, now
|
|
62
|
-
* with a full re-snapshot every couple of minutes. Ship the host's quiesce
|
|
63
|
-
* first, then roll the guest image. */
|
|
64
|
-
export const REMOTE_ATTACH_QUIET_MS = 60_000;
|
|
65
|
-
export function startRemoteAttachHeartbeat(ws, intervalMs = REMOTE_ATTACH_HEARTBEAT_MS, quietMs = REMOTE_ATTACH_QUIET_MS) {
|
|
66
|
-
let alive = true;
|
|
67
|
-
let stopped = false;
|
|
68
|
-
let lastActivityAt = Date.now();
|
|
69
|
-
const acknowledge = () => { alive = true; };
|
|
70
|
-
const stop = () => {
|
|
71
|
-
if (stopped)
|
|
72
|
-
return;
|
|
73
|
-
stopped = true;
|
|
74
|
-
clearInterval(timer);
|
|
75
|
-
ws.off('pong', acknowledge);
|
|
76
|
-
};
|
|
77
|
-
ws.on('pong', acknowledge);
|
|
78
|
-
const timer = setInterval(() => {
|
|
79
|
-
if (Date.now() - lastActivityAt > quietMs) {
|
|
80
|
-
// Nothing is flowing: send no ping and run no liveness check, so an idle
|
|
81
|
-
// attach puts zero packets on the wire. A dead peer here is closed by the
|
|
82
|
-
// network path or by teardown, not by us.
|
|
83
|
-
alive = true;
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
if (!alive) {
|
|
87
|
-
stop();
|
|
88
|
-
ws.terminate();
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
alive = false;
|
|
92
|
-
try {
|
|
93
|
-
ws.ping();
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
stop();
|
|
97
|
-
ws.terminate();
|
|
98
|
-
}
|
|
99
|
-
}, intervalMs);
|
|
100
|
-
timer.unref();
|
|
101
|
-
return {
|
|
102
|
-
stop,
|
|
103
|
-
// Frames are not liveness evidence: only a pong proves the peer is there.
|
|
104
|
-
// Marking a relayed frame alive would disable dead-peer detection for
|
|
105
|
-
// exactly as long as a turn streams — the one stretch it is for.
|
|
106
|
-
noteActivity: () => {
|
|
107
|
-
lastActivityAt = Date.now();
|
|
108
|
-
},
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
/** A WS close reason is capped at 123 UTF-8 bytes by the protocol. */
|
|
112
|
-
function clampReason(reason) {
|
|
113
|
-
const buf = Buffer.from(reason, 'utf8');
|
|
114
|
-
return buf.byteLength <= 123 ? reason : buf.subarray(0, 123).toString('utf8');
|
|
115
|
-
}
|
|
116
|
-
/** Refuse an upgrade PRE-handshake: write a plain HTTP error (uniform API
|
|
117
|
-
* `ErrorBody`, spec §8) to the raw socket and destroy it. Never throws — a
|
|
118
|
-
* reset peer is swallowed. */
|
|
119
|
-
function refuseUpgrade(socket, status, statusText, code, message) {
|
|
120
|
-
const body = JSON.stringify({ error: { code, message } });
|
|
121
|
-
const payload = `HTTP/1.1 ${status} ${statusText}\r\n` +
|
|
122
|
-
`content-type: application/json; charset=utf-8\r\n` +
|
|
123
|
-
`content-length: ${Buffer.byteLength(body)}\r\n` +
|
|
124
|
-
`connection: close\r\n\r\n` +
|
|
125
|
-
body;
|
|
126
|
-
// `end(payload)` flushes the full body THEN sends FIN — a bare
|
|
127
|
-
// `write`+`destroy` can truncate the body for a slow remote peer.
|
|
128
|
-
try {
|
|
129
|
-
socket.end(payload);
|
|
130
|
-
}
|
|
131
|
-
catch {
|
|
132
|
-
// peer reset mid-handshake — force it down.
|
|
133
|
-
try {
|
|
134
|
-
socket.destroy();
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
/* already gone */
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/** True when the caller opted OUT of attach-implies-revive: `?revive=0` OR header
|
|
142
|
-
* `X-Crtr-Attach-Revive: 0`. Default (absent/anything-else) = revive. */
|
|
143
|
-
function reviveOptedOut(req) {
|
|
144
|
-
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
145
|
-
if (url.searchParams.get('revive') === '0')
|
|
146
|
-
return true;
|
|
147
|
-
const header = req.headers['x-crtr-attach-revive'];
|
|
148
|
-
const value = Array.isArray(header) ? header[0] : header;
|
|
149
|
-
return value === '0';
|
|
150
|
-
}
|
|
151
|
-
/** `?wakeParked=1` — this attach is a person deliberately opening a node, so an
|
|
152
|
-
* exact parked resident should be woken for it, exactly as the LOCAL attach
|
|
153
|
-
* ensure does for a direct attach. crouter's own remote viewer
|
|
154
|
-
* (`RelayTransport`) sends it. Without it the caller is a viewport reconnecting
|
|
155
|
-
* — a product page re-dialling after its socket dropped — and a parked node
|
|
156
|
-
* stays parked. */
|
|
157
|
-
function wakeParkedRequested(req) {
|
|
158
|
-
const url = new URL(req.url ?? '/', 'http://127.0.0.1');
|
|
159
|
-
return url.searchParams.get('wakeParked') === '1';
|
|
160
|
-
}
|
|
161
|
-
/** Relay one remote WS ⇄ one node broker `view.sock`. Opens the socket on
|
|
162
|
-
* connect; forwards each complete frame socket→WS (bounded decode, one WS
|
|
163
|
-
* message per frame) and re-frames each WS message WS→socket (trailing
|
|
164
|
-
* newline). The relay is semantically verbatim — it never INTERPRETS a frame
|
|
165
|
-
* (it only splits/joins the newline framing). Closes the WS on socket
|
|
166
|
-
* gone/no-broker, destroys the socket on WS close; idempotent teardown, no
|
|
167
|
-
* leaks. Validates the node id first (path-safety + existence) as belt-and-
|
|
168
|
-
* suspenders — the upgrade handler already guarded both. */
|
|
169
|
-
function bridgeConnection(ws, nodeId) {
|
|
170
|
-
if (!isSafeNodeId(nodeId)) {
|
|
171
|
-
try {
|
|
172
|
-
ws.close(1008, clampReason(`invalid node id: ${nodeId}`));
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
/* ignore */
|
|
176
|
-
}
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
if (getNode(nodeId) === null) {
|
|
180
|
-
try {
|
|
181
|
-
ws.close(1011, clampReason(`no node ${nodeId}`));
|
|
182
|
-
}
|
|
183
|
-
catch {
|
|
184
|
-
/* ignore */
|
|
185
|
-
}
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
clearFault(nodeId, { link: 'viewer↔crtrd' });
|
|
189
|
-
const sockPath = viewSocketPath(nodeId);
|
|
190
|
-
const socket = createConnection(sockPath);
|
|
191
|
-
const decoder = new FrameDecoder(CLIENT_READ_CAPS);
|
|
192
|
-
let closed = false;
|
|
193
|
-
let viewerFaultRecorded = false;
|
|
194
|
-
let heartbeat;
|
|
195
|
-
socket.on('connect', () => {
|
|
196
|
-
clearFault(nodeId, { link: 'relay↔broker' });
|
|
197
|
-
});
|
|
198
|
-
const teardown = (wsCode, reason) => {
|
|
199
|
-
if (closed)
|
|
200
|
-
return;
|
|
201
|
-
closed = true;
|
|
202
|
-
heartbeat?.stop();
|
|
203
|
-
if (!socket.destroyed) {
|
|
204
|
-
try {
|
|
205
|
-
socket.destroy();
|
|
206
|
-
}
|
|
207
|
-
catch {
|
|
208
|
-
/* ignore */
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
try {
|
|
212
|
-
ws.close(wsCode, clampReason(reason));
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
/* ignore */
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
heartbeat = startRemoteAttachHeartbeat(ws);
|
|
219
|
-
// socket → WS: bounded decode, one WS text message per complete frame.
|
|
220
|
-
socket.on('data', (chunk) => {
|
|
221
|
-
heartbeat?.noteActivity();
|
|
222
|
-
let frames;
|
|
223
|
-
try {
|
|
224
|
-
frames = decoder.push(chunk);
|
|
225
|
-
}
|
|
226
|
-
catch (err) {
|
|
227
|
-
const msg = err instanceof FrameOverflowError
|
|
228
|
-
? `broker sent an oversized frame (${err.message})`
|
|
229
|
-
: `failed to decode a broker frame for ${nodeId}`;
|
|
230
|
-
teardown(1009, msg);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
for (const frame of frames) {
|
|
234
|
-
if (ws.readyState === ws.OPEN)
|
|
235
|
-
ws.send(JSON.stringify(frame));
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
socket.on('error', (err) => {
|
|
239
|
-
const classification = classify('relay↔broker', err);
|
|
240
|
-
recordFault(nodeId, {
|
|
241
|
-
link: 'relay↔broker',
|
|
242
|
-
op: 'bridge socket',
|
|
243
|
-
kind: classification.kind,
|
|
244
|
-
retry: { disposition: 'manual' },
|
|
245
|
-
message: err.message,
|
|
246
|
-
});
|
|
247
|
-
const reason = err.code === 'ECONNREFUSED' || err.code === 'ENOENT'
|
|
248
|
-
? `no running broker for ${nodeId}`
|
|
249
|
-
: `view socket error for ${nodeId}: ${err.message}`;
|
|
250
|
-
teardown(1011, reason);
|
|
251
|
-
});
|
|
252
|
-
socket.on('close', (hadError) => {
|
|
253
|
-
if (closed || hadError)
|
|
254
|
-
return;
|
|
255
|
-
clearFault(nodeId, { link: 'relay↔broker' });
|
|
256
|
-
teardown(1000, 'broker socket closed');
|
|
257
|
-
});
|
|
258
|
-
ws.on('close', (code, reason) => {
|
|
259
|
-
const reasonText = reason.toString('utf8');
|
|
260
|
-
if (closed) {
|
|
261
|
-
if (code === 1000)
|
|
262
|
-
clearFault(nodeId, { link: 'viewer↔crtrd' });
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
if (code === 1000) {
|
|
266
|
-
clearFault(nodeId, { link: 'viewer↔crtrd' });
|
|
267
|
-
}
|
|
268
|
-
else if (!viewerFaultRecorded) {
|
|
269
|
-
viewerFaultRecorded = true;
|
|
270
|
-
const classification = classify('viewer↔crtrd', { code, reason: reasonText });
|
|
271
|
-
recordFault(nodeId, {
|
|
272
|
-
link: 'viewer↔crtrd',
|
|
273
|
-
op: 'remote attach websocket',
|
|
274
|
-
kind: classification.kind,
|
|
275
|
-
retry: { disposition: 'auto' },
|
|
276
|
-
message: reasonText || `remote attach closed (${code})`,
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
teardown(code, reasonText || `remote attach closed (${code})`);
|
|
280
|
-
});
|
|
281
|
-
ws.on('error', () => {
|
|
282
|
-
if (!viewerFaultRecorded) {
|
|
283
|
-
viewerFaultRecorded = true;
|
|
284
|
-
const classification = classify('viewer↔crtrd', { code: 1006, reason: 'remote attach websocket error' });
|
|
285
|
-
recordFault(nodeId, {
|
|
286
|
-
link: 'viewer↔crtrd',
|
|
287
|
-
op: 'remote attach websocket',
|
|
288
|
-
kind: classification.kind,
|
|
289
|
-
retry: { disposition: 'auto' },
|
|
290
|
-
message: 'remote attach websocket error',
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
teardown(1011, 'remote attach websocket error');
|
|
294
|
-
});
|
|
295
|
-
// WS → socket: re-frame each message as one newline-terminated JSON line.
|
|
296
|
-
// VERBATIM (no parse) — the broker validates and bounds its own reads.
|
|
297
|
-
ws.on('message', (data) => {
|
|
298
|
-
if (closed || socket.destroyed)
|
|
299
|
-
return;
|
|
300
|
-
heartbeat?.noteActivity();
|
|
301
|
-
const buf = Array.isArray(data)
|
|
302
|
-
? Buffer.concat(data)
|
|
303
|
-
: Buffer.isBuffer(data)
|
|
304
|
-
? data
|
|
305
|
-
: Buffer.from(new Uint8Array(data));
|
|
306
|
-
const text = buf.toString('utf8');
|
|
307
|
-
const line = text.endsWith('\n') ? text : text + '\n';
|
|
308
|
-
try {
|
|
309
|
-
socket.write(line);
|
|
310
|
-
}
|
|
311
|
-
catch {
|
|
312
|
-
/* dead socket — its 'close' drives teardown */
|
|
313
|
-
}
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
/** Handle the HTTP upgrade for `GET /v1/nodes/{id}/attach`. A-9 matches the
|
|
317
|
-
* route, extracts `{id}`, and calls this with the raw upgrade triplet; this
|
|
318
|
-
* owns the WS handshake (its own noServer `wss` above) AND the spec §5.3
|
|
319
|
-
* attach-implies-revive semantics. Never throws — every failure path either
|
|
320
|
-
* refuses the upgrade (plain HTTP error + socket destroy) or, post-handshake,
|
|
321
|
-
* closes the WS with a code. So A-9's upgrade router needs no try/catch around
|
|
322
|
-
* this call beyond its own top-level safety net.
|
|
323
|
-
*
|
|
324
|
-
* Flow:
|
|
325
|
-
* 1. Guard `isSafeNodeId` (→ 400) and existence (→ 404) BEFORE building any
|
|
326
|
-
* fs path or reviving — an unsafe id must never reach `viewSocketPath`.
|
|
327
|
-
* 2. Unless revive is opted out (`?revive=0` / `X-Crtr-Attach-Revive: 0`):
|
|
328
|
-
* `decideAttachRevive(id, { resume:true }, wakeParked)` then
|
|
329
|
-
* `waitForBrokerViewSocket` (bounded). Revive throw OR socket-not-listenable
|
|
330
|
-
* → refuse 409, WS never opens. Without `?wakeParked=1` an exact parked
|
|
331
|
-
* resident is left parked and refused 409 `node_dormant` — see the call site.
|
|
332
|
-
* 3. Revive opted out: a single connect probe. Dormant (socket refuses) →
|
|
333
|
-
* refuse 409 (spec §5.3 asymmetry: a dead broker can't stream over WS).
|
|
334
|
-
* 4. Only then upgrade and hand the live WS to {@link bridgeConnection}. */
|
|
335
|
-
export async function handleAttachUpgrade(req, socket, head, nodeId) {
|
|
336
|
-
// A raw upgrade socket with no 'error' listener throws on a write to a reset
|
|
337
|
-
// peer — attach one defensively so an async gap here can never crash the
|
|
338
|
-
// daemon (idempotent with any listener A-9 also attached).
|
|
339
|
-
socket.on('error', () => {
|
|
340
|
-
/* peer reset mid-handshake — refuseUpgrade/destroy handles the rest */
|
|
341
|
-
});
|
|
342
|
-
try {
|
|
343
|
-
// (1) Path-safety + existence, PRE-revive: never build an fs path from an
|
|
344
|
-
// unsafe id, and never revive a nonexistent node.
|
|
345
|
-
if (!isSafeNodeId(nodeId)) {
|
|
346
|
-
refuseUpgrade(socket, 400, 'Bad Request', 'invalid_node_id', `invalid node id: ${nodeId}`);
|
|
347
|
-
return;
|
|
348
|
-
}
|
|
349
|
-
if (getNode(nodeId) === null) {
|
|
350
|
-
refuseUpgrade(socket, 404, 'Not Found', 'node_not_found', `no node ${nodeId}`);
|
|
351
|
-
return;
|
|
352
|
-
}
|
|
353
|
-
if (reviveOptedOut(req)) {
|
|
354
|
-
// (3) Revive opted out: the socket must already be live. A dormant node's
|
|
355
|
-
// socket can't stream, so refuse 409 rather than open a WS that would
|
|
356
|
-
// immediately 1011 (spec §5.3 named asymmetry).
|
|
357
|
-
if (!(await probeViewSocket(viewSocketPath(nodeId), 250))) {
|
|
358
|
-
refuseUpgrade(socket, 409, 'Conflict', 'node_dormant', `node ${nodeId} is dormant and revive was opted out (?revive=0)`);
|
|
359
|
-
return;
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
else {
|
|
363
|
-
// (2) Attach implies revive: wake BEFORE opening the socket so it exists
|
|
364
|
-
// when the bridge connects.
|
|
365
|
-
// NOTE (deviation from spec §5.3 pseudocode): `wakeReason: 'attach'` does
|
|
366
|
-
// NOT typecheck — `WakeOrigin` is structured cron-birth provenance, not a
|
|
367
|
-
// string, and per the runtime contract `wakeReason` is a DAEMON-only
|
|
368
|
-
// injection seam. An attach-driven revive has no cron provenance, so we
|
|
369
|
-
// omit it — matching every other
|
|
370
|
-
// non-daemon caller (`revive-all`, `resume.ts`, the revive command), which
|
|
371
|
-
// pass only `{ resume }`.
|
|
372
|
-
let launchExited;
|
|
373
|
-
try {
|
|
374
|
-
// The bridge upgrade waits on this node's view socket, which only a
|
|
375
|
-
// live broker publishes: at the cap, refuse the upgrade with the real
|
|
376
|
-
// reason instead of freezing and then timing out on a socket that was
|
|
377
|
-
// never going to appear.
|
|
378
|
-
//
|
|
379
|
-
// An unqualified remote attach is a viewport, not a reason to run.
|
|
380
|
-
// Waking an exact parked resident here restarted its park clock on
|
|
381
|
-
// every browser reconnect, so a watched conversation churned park →
|
|
382
|
-
// revive → park. Nothing observes a parked node in the meantime: it has
|
|
383
|
-
// no engine and appends nothing, so a transcript served from the
|
|
384
|
-
// offline messages route cannot go stale, and a message sent to the
|
|
385
|
-
// node still revives it by the ordinary path. A person attaching
|
|
386
|
-
// deliberately says so with `?wakeParked=1`.
|
|
387
|
-
const decision = await decideAttachRevive(nodeId, { resume: true, capacity: 'refuse' }, wakeParkedRequested(req));
|
|
388
|
-
if (decision.parked) {
|
|
389
|
-
refuseUpgrade(socket, 409, 'Conflict', 'node_dormant', `node ${nodeId} is parked; attach with ?wakeParked=1 to wake it`);
|
|
390
|
-
return;
|
|
391
|
-
}
|
|
392
|
-
launchExited = decision.result.launch?.exited;
|
|
393
|
-
}
|
|
394
|
-
catch (err) {
|
|
395
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
396
|
-
refuseUpgrade(socket, 409, 'Conflict', 'attach_revive_failed', `attach revive failed: ${message}`);
|
|
397
|
-
return;
|
|
398
|
-
}
|
|
399
|
-
// Bounded wait for `view.sock` to be listenable (broker startup is async);
|
|
400
|
-
// fails fast on the broker's real exit. Not-ready → refuse 409.
|
|
401
|
-
if (!(await waitForBrokerViewSocket(nodeId, launchExited))) {
|
|
402
|
-
refuseUpgrade(socket, 409, 'Conflict', 'broker_not_ready', `broker view socket for ${nodeId} did not become listenable after revive`);
|
|
403
|
-
return;
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
// (4) Ready: complete the WS handshake and relay verbatim. If the raw socket
|
|
407
|
-
// died during the async revive/wait above, handleUpgrade is a no-op.
|
|
408
|
-
if (socket.destroyed)
|
|
409
|
-
return;
|
|
410
|
-
wss.handleUpgrade(req, socket, head, (ws) => bridgeConnection(ws, nodeId));
|
|
411
|
-
}
|
|
412
|
-
catch (err) {
|
|
413
|
-
// Belt-and-suspenders: nothing above should throw, but never let an
|
|
414
|
-
// upgrade-handler throw escape and crash the daemon.
|
|
415
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
416
|
-
refuseUpgrade(socket, 500, 'Internal Server Error', 'internal', `attach upgrade failed: ${message}`);
|
|
417
|
-
}
|
|
418
|
-
}
|
|
1
|
+
var A=Object.defineProperty;var c=(r,e)=>A(r,"name",{value:e,configurable:!0});import{createConnection as E}from"node:net";import{WebSocketServer as _}from"ws";import{isSafeNodeId as g,viewSocketPath as b}from"../../core/canvas/paths.js";import{getNode as w}from"../../core/canvas/index.js";import{BROKER_READ_CAPS as S,CLIENT_READ_CAPS as $,FrameDecoder as R,FrameOverflowError as T}from"../../core/runtime/broker-protocol.js";import{classify as v}from"../../core/fault-classifier.js";import{clearFault as h,recordFault as p}from"../../core/canvas/recovery.js";import{decideAttachRevive as C}from"../../core/runtime/revive.js";import{probeViewSocket as P,waitForBrokerViewSocket as x}from"../../core/runtime/view-socket.js";const B=new _({noServer:!0,maxPayload:S.maxLineBytes}),N=25e3,O=6e4;function F(r,e=N,s=O){let t=!0,a=!1,n=Date.now();const f=c(()=>{t=!0},"acknowledge"),u=c(()=>{a||(a=!0,clearInterval(m),r.off("pong",f))},"stop");r.on("pong",f);const m=setInterval(()=>{if(Date.now()-n>s){t=!0;return}if(!t){u(),r.terminate();return}t=!1;try{r.ping()}catch{u(),r.terminate()}},e);return m.unref(),{stop:u,noteActivity:c(()=>{n=Date.now()},"noteActivity")}}c(F,"startRemoteAttachHeartbeat");function k(r){const e=Buffer.from(r,"utf8");return e.byteLength<=123?r:e.subarray(0,123).toString("utf8")}c(k,"clampReason");function d(r,e,s,t,a){const n=JSON.stringify({error:{code:t,message:a}}),f=`HTTP/1.1 ${e} ${s}\r
|
|
2
|
+
content-type: application/json; charset=utf-8\r
|
|
3
|
+
content-length: ${Buffer.byteLength(n)}\r
|
|
4
|
+
connection: close\r
|
|
5
|
+
\r
|
|
6
|
+
`+n;try{r.end(f)}catch{try{r.destroy()}catch{}}}c(d,"refuseUpgrade");function U(r){if(new URL(r.url??"/","http://127.0.0.1").searchParams.get("revive")==="0")return!0;const s=r.headers["x-crtr-attach-revive"];return(Array.isArray(s)?s[0]:s)==="0"}c(U,"reviveOptedOut");function D(r){return new URL(r.url??"/","http://127.0.0.1").searchParams.get("wakeParked")==="1"}c(D,"wakeParkedRequested");function L(r,e){if(!g(e)){try{r.close(1008,k(`invalid node id: ${e}`))}catch{}return}if(w(e)===null){try{r.close(1011,k(`no node ${e}`))}catch{}return}h(e,{link:"viewer\u2194crtrd"});const s=b(e),t=E(s),a=new R($);let n=!1,f=!1,u;t.on("connect",()=>{h(e,{link:"relay\u2194broker"})});const m=c((o,l)=>{if(!n){if(n=!0,u?.stop(),!t.destroyed)try{t.destroy()}catch{}try{r.close(o,k(l))}catch{}}},"teardown");u=F(r),t.on("data",o=>{u?.noteActivity();let l;try{l=a.push(o)}catch(i){const y=i instanceof T?`broker sent an oversized frame (${i.message})`:`failed to decode a broker frame for ${e}`;m(1009,y);return}for(const i of l)r.readyState===r.OPEN&&r.send(JSON.stringify(i))}),t.on("error",o=>{const l=v("relay\u2194broker",o);p(e,{link:"relay\u2194broker",op:"bridge socket",kind:l.kind,retry:{disposition:"manual"},message:o.message});const i=o.code==="ECONNREFUSED"||o.code==="ENOENT"?`no running broker for ${e}`:`view socket error for ${e}: ${o.message}`;m(1011,i)}),t.on("close",o=>{n||o||(h(e,{link:"relay\u2194broker"}),m(1e3,"broker socket closed"))}),r.on("close",(o,l)=>{const i=l.toString("utf8");if(n){o===1e3&&h(e,{link:"viewer\u2194crtrd"});return}if(o===1e3)h(e,{link:"viewer\u2194crtrd"});else if(!f){f=!0;const y=v("viewer\u2194crtrd",{code:o,reason:i});p(e,{link:"viewer\u2194crtrd",op:"remote attach websocket",kind:y.kind,retry:{disposition:"auto"},message:i||`remote attach closed (${o})`})}m(o,i||`remote attach closed (${o})`)}),r.on("error",()=>{if(!f){f=!0;const o=v("viewer\u2194crtrd",{code:1006,reason:"remote attach websocket error"});p(e,{link:"viewer\u2194crtrd",op:"remote attach websocket",kind:o.kind,retry:{disposition:"auto"},message:"remote attach websocket error"})}m(1011,"remote attach websocket error")}),r.on("message",o=>{if(n||t.destroyed)return;u?.noteActivity();const i=(Array.isArray(o)?Buffer.concat(o):Buffer.isBuffer(o)?o:Buffer.from(new Uint8Array(o))).toString("utf8"),y=i.endsWith(`
|
|
7
|
+
`)?i:i+`
|
|
8
|
+
`;try{t.write(y)}catch{}})}c(L,"bridgeConnection");async function X(r,e,s,t){e.on("error",()=>{});try{if(!g(t)){d(e,400,"Bad Request","invalid_node_id",`invalid node id: ${t}`);return}if(w(t)===null){d(e,404,"Not Found","node_not_found",`no node ${t}`);return}if(U(r)){if(!await P(b(t),250)){d(e,409,"Conflict","node_dormant",`node ${t} is dormant and revive was opted out (?revive=0)`);return}}else{let a;try{const n=await C(t,{resume:!0,capacity:"refuse"},D(r));if(n.parked){d(e,409,"Conflict","node_dormant",`node ${t} is parked; attach with ?wakeParked=1 to wake it`);return}a=n.result.launch?.exited}catch(n){const f=n instanceof Error?n.message:String(n);d(e,409,"Conflict","attach_revive_failed",`attach revive failed: ${f}`);return}if(!await x(t,a)){d(e,409,"Conflict","broker_not_ready",`broker view socket for ${t} did not become listenable after revive`);return}}if(e.destroyed)return;B.handleUpgrade(r,e,s,a=>L(a,t))}catch(a){const n=a instanceof Error?a.message:String(a);d(e,500,"Internal Server Error","internal",`attach upgrade failed: ${n}`)}}c(X,"handleAttachUpgrade");export{N as REMOTE_ATTACH_HEARTBEAT_MS,O as REMOTE_ATTACH_QUIET_MS,X as handleAttachUpgrade,F as startRemoteAttachHeartbeat};
|
|
@@ -1,65 +1 @@
|
|
|
1
|
-
|
|
2
|
-
// crtrd revives the node (unless opted out) and returns the host-local path to
|
|
3
|
-
// its broker `view.sock`, which the local viewer then connects to directly with
|
|
4
|
-
// the existing `ViewSocketClient`. The REMOTE `GET .../attach` websocket upgrade
|
|
5
|
-
// is bridge.ts's (A-8) — NOT routed here.
|
|
6
|
-
//
|
|
7
|
-
// `{id}` is the target node being attached to.
|
|
8
|
-
import { getNode } from '../../../core/canvas/canvas.js';
|
|
9
|
-
import { decideAttachRevive } from '../../../core/runtime/revive.js';
|
|
10
|
-
import { viewSocketPath } from '../../../core/canvas/paths.js';
|
|
11
|
-
import { waitForBrokerViewSocket } from '../../../core/runtime/placement-tmux.js';
|
|
12
|
-
import { notFound, usage } from '../../../core/errors.js';
|
|
13
|
-
/** Validate + narrow the attach-ensure body (all fields optional, default true). */
|
|
14
|
-
function parseAttachBody(body) {
|
|
15
|
-
if (body === undefined || body === null)
|
|
16
|
-
return { resume: true, revive: true, wakeParked: true };
|
|
17
|
-
if (typeof body !== 'object') {
|
|
18
|
-
throw usage('attach body must be a JSON object { resume?, revive?, wakeParked? }');
|
|
19
|
-
}
|
|
20
|
-
const resume = body.resume;
|
|
21
|
-
const revive = body.revive;
|
|
22
|
-
const wakeParked = body.wakeParked;
|
|
23
|
-
if (resume !== undefined && typeof resume !== 'boolean')
|
|
24
|
-
throw usage('resume must be a boolean');
|
|
25
|
-
if (revive !== undefined && typeof revive !== 'boolean')
|
|
26
|
-
throw usage('revive must be a boolean');
|
|
27
|
-
if (wakeParked !== undefined && typeof wakeParked !== 'boolean')
|
|
28
|
-
throw usage('wakeParked must be a boolean');
|
|
29
|
-
return { resume: resume ?? true, revive: revive ?? true, wakeParked: wakeParked ?? true };
|
|
30
|
-
}
|
|
31
|
-
async function handleAttach(ctx) {
|
|
32
|
-
const id = ctx.params['id'];
|
|
33
|
-
if (getNode(id) === null)
|
|
34
|
-
throw notFound(`unknown node: ${id}`, { received: id });
|
|
35
|
-
const { resume, revive, wakeParked } = parseAttachBody(ctx.body);
|
|
36
|
-
let revived = false;
|
|
37
|
-
let resumed = false;
|
|
38
|
-
let parked = false;
|
|
39
|
-
if (revive) {
|
|
40
|
-
// This decision and reviveNode's fleet claim share one launch boundary.
|
|
41
|
-
// Focus may stop at an exact parked resident; ordinary/direct attach keeps
|
|
42
|
-
// wakeParked=true and preserves attach-implies-revive.
|
|
43
|
-
const decision = await decideAttachRevive(id, { resume, capacity: 'refuse' }, wakeParked);
|
|
44
|
-
parked = decision.parked;
|
|
45
|
-
if (!decision.parked) {
|
|
46
|
-
revived = decision.result.launch !== undefined;
|
|
47
|
-
resumed = decision.result.resumed;
|
|
48
|
-
// If we launched, let the broker publish its view socket so the local
|
|
49
|
-
// viewer's immediate connect finds it (bounded wait; best-effort).
|
|
50
|
-
if (revived)
|
|
51
|
-
await waitForBrokerViewSocket(id);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const body = {
|
|
55
|
-
node_id: id,
|
|
56
|
-
socket_path: viewSocketPath(id),
|
|
57
|
-
revived,
|
|
58
|
-
resumed,
|
|
59
|
-
parked,
|
|
60
|
-
};
|
|
61
|
-
return { status: 200, body };
|
|
62
|
-
}
|
|
63
|
-
export const attachRoutes = [
|
|
64
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/attach', handler: handleAttach },
|
|
65
|
-
];
|
|
1
|
+
var c=Object.defineProperty;var u=(t,e)=>c(t,"name",{value:e,configurable:!0});import{getNode as m}from"../../../core/canvas/canvas.js";import{decideAttachRevive as k}from"../../../core/runtime/revive.js";import{viewSocketPath as l}from"../../../core/canvas/paths.js";import{waitForBrokerViewSocket as v}from"../../../core/runtime/placement-tmux.js";import{notFound as p,usage as n}from"../../../core/errors.js";function w(t){if(t==null)return{resume:!0,revive:!0,wakeParked:!0};if(typeof t!="object")throw n("attach body must be a JSON object { resume?, revive?, wakeParked? }");const e=t.resume,r=t.revive,o=t.wakeParked;if(e!==void 0&&typeof e!="boolean")throw n("resume must be a boolean");if(r!==void 0&&typeof r!="boolean")throw n("revive must be a boolean");if(o!==void 0&&typeof o!="boolean")throw n("wakeParked must be a boolean");return{resume:e??!0,revive:r??!0,wakeParked:o??!0}}u(w,"parseAttachBody");async function h(t){const e=t.params.id;if(m(e)===null)throw p(`unknown node: ${e}`,{received:e});const{resume:r,revive:o,wakeParked:f}=w(t.body);let i=!1,d=!1,s=!1;if(o){const a=await k(e,{resume:r,capacity:"refuse"},f);s=a.parked,a.parked||(i=a.result.launch!==void 0,d=a.result.resumed,i&&await v(e))}return{status:200,body:{node_id:e,socket_path:l(e),revived:i,resumed:d,parked:s}}}u(h,"handleAttach");const B=[{method:"POST",pattern:"/v1/nodes/:id/attach",handler:h}];export{B as attachRoutes};
|
|
@@ -1,91 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// these routes exist for remote presenters that cannot see the node host.
|
|
4
|
-
import { enqueueNodeMail } from '../../../core/feed/messages.js';
|
|
5
|
-
import { contextDir, isSafeNodeId } from '../../../core/canvas/paths.js';
|
|
6
|
-
import { getNode } from '../../../core/canvas/canvas.js';
|
|
7
|
-
import { isBrokerLive } from '../../../core/runtime/model-swap.js';
|
|
8
|
-
import { assertNotFinalized } from '../../../core/runtime/reopen.js';
|
|
9
|
-
import { reviveNode } from '../../../core/runtime/revive.js';
|
|
10
|
-
import { activeBackgroundBashJobs, bashJobPaths, isBashJobProcessGroupAlive, readJobPgid, isSafeBashJobId as isSafeCoreBashJobId, stopBackgroundBashJob, } from '../../../core/bash-jobs.js';
|
|
11
|
-
import { ApiError } from '../../../api/index.js';
|
|
12
|
-
import { notFound } from '../../../core/errors.js';
|
|
13
|
-
function requireTarget(ctx) {
|
|
14
|
-
const nodeId = ctx.params['id'];
|
|
15
|
-
if (nodeId === undefined || !isSafeNodeId(nodeId)) {
|
|
16
|
-
throw new ApiError(400, 'invalid_node_id', `invalid node id: ${JSON.stringify(nodeId)}`);
|
|
17
|
-
}
|
|
18
|
-
const node = getNode(nodeId);
|
|
19
|
-
if (node === null)
|
|
20
|
-
throw notFound(`unknown node: ${nodeId}`, { received: nodeId });
|
|
21
|
-
const rawJobId = ctx.params['jobId'];
|
|
22
|
-
if (rawJobId !== undefined) {
|
|
23
|
-
if (!isSafeCoreBashJobId(rawJobId)) {
|
|
24
|
-
throw new ApiError(400, 'invalid_job_id', `invalid background job id: ${JSON.stringify(rawJobId)}`);
|
|
25
|
-
}
|
|
26
|
-
return { nodeId, jobId: rawJobId, dir: contextDir(nodeId) };
|
|
27
|
-
}
|
|
28
|
-
return { nodeId, dir: contextDir(nodeId) };
|
|
29
|
-
}
|
|
30
|
-
function handleList(ctx) {
|
|
31
|
-
const { nodeId, dir } = requireTarget(ctx);
|
|
32
|
-
const now = Date.now();
|
|
33
|
-
const body = activeBackgroundBashJobs(dir).map((job) => {
|
|
34
|
-
const pgid = readJobPgid(dir, job.jobId) ?? null;
|
|
35
|
-
return {
|
|
36
|
-
job_id: job.jobId,
|
|
37
|
-
command: job.command,
|
|
38
|
-
purpose: job.purpose,
|
|
39
|
-
started_at: new Date(job.startedAtMs).toISOString(),
|
|
40
|
-
elapsed_ms: Math.max(0, now - job.startedAtMs),
|
|
41
|
-
pgid,
|
|
42
|
-
pgid_alive: pgid !== null && isBashJobProcessGroupAlive(pgid),
|
|
43
|
-
};
|
|
44
|
-
});
|
|
45
|
-
return { status: 200, body };
|
|
46
|
-
}
|
|
47
|
-
async function handleStop(ctx) {
|
|
48
|
-
const { nodeId, jobId, dir } = requireTarget(ctx);
|
|
49
|
-
if (jobId === undefined)
|
|
50
|
-
throw new ApiError(400, 'invalid_request', 'a job id is required');
|
|
51
|
-
const stopped = await stopBackgroundBashJob(dir, jobId);
|
|
52
|
-
if (stopped.kind === 'missing') {
|
|
53
|
-
throw new ApiError(404, 'job_not_found', `no background job ${jobId} for ${nodeId}`);
|
|
54
|
-
}
|
|
55
|
-
// A presenter's roster can be a snapshot; a row whose job has since finished
|
|
56
|
-
// (or was already stopped) is gone, not stoppable.
|
|
57
|
-
if (stopped.kind === 'retired') {
|
|
58
|
-
throw new ApiError(404, 'job_not_found', `background job ${jobId} for ${nodeId} is no longer running`, { log_path: stopped.logPath });
|
|
59
|
-
}
|
|
60
|
-
if (stopped.kind === 'not-stoppable') {
|
|
61
|
-
throw new ApiError(409, 'job_not_stoppable', `job ${jobId} recorded no trusted process identity`, { log_path: stopped.logPath });
|
|
62
|
-
}
|
|
63
|
-
// Match `crtr node bash kill`: retire the job, then send an urgent durable
|
|
64
|
-
// notice to the owning node. The terminal path sends that notice through the
|
|
65
|
-
// message endpoint, whose finalized-node gate runs before append; preserve
|
|
66
|
-
// that same fail-loud behavior here after the job control-plane mutation.
|
|
67
|
-
assertNotFinalized(nodeId);
|
|
68
|
-
const paths = bashJobPaths(dir, jobId);
|
|
69
|
-
const body = `Background bash job ${jobId} was stopped by the user before it finished. Log: ${paths.jobLog} Command: ${paths.cmdSh}`;
|
|
70
|
-
enqueueNodeMail(nodeId, {
|
|
71
|
-
senderNodeId: null,
|
|
72
|
-
urgency: 'urgent',
|
|
73
|
-
wake: 1,
|
|
74
|
-
kind: 'message',
|
|
75
|
-
label: body.split('\n')[0].slice(0, 120),
|
|
76
|
-
bodyJson: { body },
|
|
77
|
-
});
|
|
78
|
-
const node = getNode(nodeId);
|
|
79
|
-
if (node !== null && !isBrokerLive(node)) {
|
|
80
|
-
try {
|
|
81
|
-
await reviveNode(nodeId, { resume: true, capacity: 'freeze' });
|
|
82
|
-
}
|
|
83
|
-
catch { /* the notice remains durable */ }
|
|
84
|
-
}
|
|
85
|
-
const result = { node_id: nodeId, job_id: jobId, signaled: stopped.signaled };
|
|
86
|
-
return { status: 200, body: result };
|
|
87
|
-
}
|
|
88
|
-
export const bashJobRoutes = [
|
|
89
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/jobs', handler: handleList },
|
|
90
|
-
{ method: 'DELETE', pattern: '/v1/nodes/:id/jobs/:jobId', handler: handleStop },
|
|
91
|
-
];
|
|
1
|
+
var c=Object.defineProperty;var a=(d,o)=>c(d,"name",{value:o,configurable:!0});import{enqueueNodeMail as f}from"../../../core/feed/messages.js";import{contextDir as b,isSafeNodeId as m}from"../../../core/canvas/paths.js";import{getNode as p}from"../../../core/canvas/canvas.js";import{isBrokerLive as h}from"../../../core/runtime/model-swap.js";import{assertNotFinalized as g}from"../../../core/runtime/reopen.js";import{reviveNode as w}from"../../../core/runtime/revive.js";import{activeBackgroundBashJobs as _,bashJobPaths as j,isBashJobProcessGroupAlive as I,readJobPgid as v,isSafeBashJobId as k,stopBackgroundBashJob as y}from"../../../core/bash-jobs.js";import{ApiError as s}from"../../../api/index.js";import{notFound as J}from"../../../core/errors.js";function l(d){const o=d.params.id;if(o===void 0||!m(o))throw new s(400,"invalid_node_id",`invalid node id: ${JSON.stringify(o)}`);if(p(o)===null)throw J(`unknown node: ${o}`,{received:o});const n=d.params.jobId;if(n!==void 0){if(!k(n))throw new s(400,"invalid_job_id",`invalid background job id: ${JSON.stringify(n)}`);return{nodeId:o,jobId:n,dir:b(o)}}return{nodeId:o,dir:b(o)}}a(l,"requireTarget");function $(d){const{nodeId:o,dir:e}=l(d),n=Date.now();return{status:200,body:_(e).map(t=>{const i=v(e,t.jobId)??null;return{job_id:t.jobId,command:t.command,purpose:t.purpose,started_at:new Date(t.startedAtMs).toISOString(),elapsed_ms:Math.max(0,n-t.startedAtMs),pgid:i,pgid_alive:i!==null&&I(i)}})}}a($,"handleList");async function B(d){const{nodeId:o,jobId:e,dir:n}=l(d);if(e===void 0)throw new s(400,"invalid_request","a job id is required");const r=await y(n,e);if(r.kind==="missing")throw new s(404,"job_not_found",`no background job ${e} for ${o}`);if(r.kind==="retired")throw new s(404,"job_not_found",`background job ${e} for ${o} is no longer running`,{log_path:r.logPath});if(r.kind==="not-stoppable")throw new s(409,"job_not_stoppable",`job ${e} recorded no trusted process identity`,{log_path:r.logPath});g(o);const t=j(n,e),i=`Background bash job ${e} was stopped by the user before it finished. Log: ${t.jobLog} Command: ${t.cmdSh}`;f(o,{senderNodeId:null,urgency:"urgent",wake:1,kind:"message",label:i.split(`
|
|
2
|
+
`)[0].slice(0,120),bodyJson:{body:i}});const u=p(o);if(u!==null&&!h(u))try{await w(o,{resume:!0,capacity:"freeze"})}catch{}return{status:200,body:{node_id:o,job_id:e,signaled:r.signaled}}}a(B,"handleStop");const x=[{method:"GET",pattern:"/v1/nodes/:id/jobs",handler:$},{method:"DELETE",pattern:"/v1/nodes/:id/jobs/:jobId",handler:B}];export{x as bashJobRoutes};
|