@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,190 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
// Recycle FINALIZES the agent occupying a tmux pane and recycles that pane for
|
|
4
|
-
// fresh work, in three steps:
|
|
5
|
-
//
|
|
6
|
-
// 1. Finalize — push the agent's last surfaced message as a `final` report so
|
|
7
|
-
// every subscriber/manager waiting on it is unblocked, and mark it done.
|
|
8
|
-
// 2. Recycle — boot a fresh resident broker root and prove it accepts viewers.
|
|
9
|
-
// 3. Close — tear the finalized broker down, then re-attach the pane to the replacement.
|
|
10
|
-
//
|
|
11
|
-
// NOT to be confused with `node lifecycle demote` (flip-to-terminal IN PLACE, which keeps
|
|
12
|
-
// the agent focused and running): recycle ENDS this agent and boots a brand-new
|
|
13
|
-
// resident root here.
|
|
14
|
-
//
|
|
15
|
-
// The agent's real conversation lives inside pi (not on disk), so the final
|
|
16
|
-
// body is its newest report (which, on a natural stop, IS its last assistant
|
|
17
|
-
// message) — falling back to a short note when it never reported.
|
|
18
|
-
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
19
|
-
import { join } from 'node:path';
|
|
20
|
-
import { abortExecution, beginExecution, getNode, setPresence, setFocusOccupant, fullName, recordExecutionPid, recordLaunch } from '../canvas/index.js';
|
|
21
|
-
import { reportsDir } from '../canvas/paths.js';
|
|
22
|
-
import { pushFinal } from '../feed/feed.js';
|
|
23
|
-
import { spawnNode, rootOfSpine } from './nodes.js';
|
|
24
|
-
import { buildLaunchSpecAsync, buildPiArgv } from './launch.js';
|
|
25
|
-
import { focusOf, respawnPaneSync, setPaneOption } from './placement.js';
|
|
26
|
-
import { waitForBrokerViewSocket, viewerSplitEnv } from './placement-tmux.js';
|
|
27
|
-
import { headlessBrokerHost } from './host.js';
|
|
28
|
-
import { boundFleet } from './fleet.js';
|
|
29
|
-
import { transition } from './lifecycle.js';
|
|
30
|
-
import { ensureDaemon } from '../../daemon/manage.js';
|
|
31
|
-
import { invokeBirthLifecycleHooks } from './spawn.js';
|
|
32
|
-
/** The agent's most recent surfaced message: the newest reports/*.md body with
|
|
33
|
-
* its YAML frontmatter stripped. Empty string when the node never reported. */
|
|
34
|
-
function lastReportBody(nodeId) {
|
|
35
|
-
try {
|
|
36
|
-
const dir = reportsDir(nodeId);
|
|
37
|
-
const files = readdirSync(dir).filter((f) => f.endsWith('.md'));
|
|
38
|
-
if (files.length === 0)
|
|
39
|
-
return '';
|
|
40
|
-
let newest = '';
|
|
41
|
-
let newestMs = -1;
|
|
42
|
-
for (const f of files) {
|
|
43
|
-
const ms = statSync(join(dir, f)).mtimeMs;
|
|
44
|
-
if (ms > newestMs) {
|
|
45
|
-
newestMs = ms;
|
|
46
|
-
newest = f;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
const raw = readFileSync(join(dir, newest), 'utf8');
|
|
50
|
-
// Strip leading YAML frontmatter: ---\n …\n---\n<body>
|
|
51
|
-
const m = /^---\n[\s\S]*?\n---\n/.exec(raw);
|
|
52
|
-
return (m !== null ? raw.slice(m[0].length) : raw).trim();
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return '';
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/** Finish `nodeId` and recycle its pane into a fresh root. `callerPane` is the
|
|
59
|
-
* tmux pane the agent occupies (the Alt+C menu passes it as `#{pane_id}`).
|
|
60
|
-
* Best-effort; `recycled:false` when there is no pane to act on. */
|
|
61
|
-
export async function recycleNode(nodeId, callerPane) {
|
|
62
|
-
const meta = getNode(nodeId);
|
|
63
|
-
if (meta === null)
|
|
64
|
-
return { recycled: false, finalized: false, newRoot: null, delivered: [] };
|
|
65
|
-
const pane = callerPane ?? process.env['TMUX_PANE'];
|
|
66
|
-
if (pane === undefined || pane === '') {
|
|
67
|
-
return { recycled: false, finalized: false, newRoot: null, delivered: [] };
|
|
68
|
-
}
|
|
69
|
-
// Capture M's focus viewport (if any) before booting its replacement. The
|
|
70
|
-
// old broker remains live until the new broker proves it can accept a viewer;
|
|
71
|
-
// a failed replacement must not strand this finished conversation without an
|
|
72
|
-
// engine.
|
|
73
|
-
const f = focusOf(nodeId);
|
|
74
|
-
// 2 + 3. Recycle — boot a fresh resident BROKER root for the SAME pane: the
|
|
75
|
-
// viewer pane re-attaches to the fresh broker (broker-is-the-host — the viewer
|
|
76
|
-
// pane stays a viewer, never becomes an engine pane).
|
|
77
|
-
try {
|
|
78
|
-
ensureDaemon();
|
|
79
|
-
}
|
|
80
|
-
catch { /* daemon is best-effort */ }
|
|
81
|
-
// Resolve against the RECYCLED node's cwd + profile (not this process's
|
|
82
|
-
// ambient scope) and carry the profile onto the fresh root — it is the same
|
|
83
|
-
// person's seat, so profile-scope defaults (e.g. a persisted /model default)
|
|
84
|
-
// must keep applying.
|
|
85
|
-
const { launch } = await buildLaunchSpecAsync('general', 'base', { lifecycle: 'resident', hasManager: false, cwd: meta.cwd, profileId: meta.profile_id });
|
|
86
|
-
const body = lastReportBody(nodeId) ||
|
|
87
|
-
`Closed via recycle — no final summary was authored by ${meta.name}.`;
|
|
88
|
-
let delivered = [];
|
|
89
|
-
let finalized = false;
|
|
90
|
-
const root = await spawnNode({
|
|
91
|
-
kind: 'general',
|
|
92
|
-
mode: 'base',
|
|
93
|
-
lifecycle: 'resident',
|
|
94
|
-
cwd: meta.cwd,
|
|
95
|
-
name: 'general',
|
|
96
|
-
parent: null,
|
|
97
|
-
replaces: nodeId,
|
|
98
|
-
profile_id: meta.profile_id,
|
|
99
|
-
launch,
|
|
100
|
-
beforeCreate: async () => {
|
|
101
|
-
try {
|
|
102
|
-
const res = await pushFinal(nodeId, body);
|
|
103
|
-
delivered = res.deliveredTo;
|
|
104
|
-
finalized = true;
|
|
105
|
-
}
|
|
106
|
-
catch { /* recycle the pane even if the report failed */ }
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
const fresh = getNode(root.node_id);
|
|
110
|
-
await invokeBirthLifecycleHooks(fresh);
|
|
111
|
-
const inv = buildPiArgv(fresh);
|
|
112
|
-
// CRTR_SUBTREE groups the fresh root's subtree; FRONT_DOOR is set by the broker
|
|
113
|
-
// host itself, so it is not added here.
|
|
114
|
-
inv.env = { ...inv.env, CRTR_SUBTREE: rootOfSpine(root.node_id) };
|
|
115
|
-
if (!(await launchRecycledBroker(fresh, inv))) {
|
|
116
|
-
return { recycled: false, finalized, newRoot: root.node_id, delivered };
|
|
117
|
-
}
|
|
118
|
-
// COMMIT after replacement readiness: the node's pane is a VIEWER, so tear
|
|
119
|
-
// down the old detached broker only now that the fresh broker can serve it.
|
|
120
|
-
try {
|
|
121
|
-
headlessBrokerHost.teardown(nodeId);
|
|
122
|
-
}
|
|
123
|
-
catch { /* best-effort */ }
|
|
124
|
-
try {
|
|
125
|
-
setPresence(nodeId, { pane: null, window: null, tmux_session: null });
|
|
126
|
-
}
|
|
127
|
-
catch { /* best-effort */ }
|
|
128
|
-
if (f !== null) {
|
|
129
|
-
try {
|
|
130
|
-
setFocusOccupant(f.focus_id, root.node_id);
|
|
131
|
-
}
|
|
132
|
-
catch { /* best-effort */ }
|
|
133
|
-
}
|
|
134
|
-
const ok = respawnRecycledViewer(fresh, pane);
|
|
135
|
-
return { recycled: ok, finalized, newRoot: root.node_id, delivered };
|
|
136
|
-
}
|
|
137
|
-
/** Launch a recycled root and prove its viewer socket before recycling the old
|
|
138
|
-
* broker. This direct birth path writes the same launch/pid coordinates as
|
|
139
|
-
* reviveNode, and a failed readiness probe terminalizes and tears it down. */
|
|
140
|
-
async function launchRecycledBroker(fresh, inv) {
|
|
141
|
-
const executionId = beginExecution(fresh.node_id, { daemonEpoch: boundFleet().epoch() });
|
|
142
|
-
inv.env = { ...inv.env, CRTR_EXECUTION_ID: executionId };
|
|
143
|
-
let placed;
|
|
144
|
-
try {
|
|
145
|
-
placed = headlessBrokerHost.launch(fresh.node_id, inv, { cwd: fresh.cwd, name: fullName(fresh), resuming: false });
|
|
146
|
-
if (placed.pid === null)
|
|
147
|
-
throw new Error('broker host returned no pid');
|
|
148
|
-
recordLaunch(fresh.node_id, new Date().toISOString());
|
|
149
|
-
if (recordExecutionPid(executionId, fresh.node_id, placed.pid) === 'shutdown') {
|
|
150
|
-
throw new Error('broker execution was superseded');
|
|
151
|
-
}
|
|
152
|
-
if (await waitForBrokerViewSocket(fresh.node_id, placed.exited))
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
catch {
|
|
156
|
-
abortExecution(executionId, { reason: 'launch_failed' });
|
|
157
|
-
// The replacement never became usable; the finished root's broker remains
|
|
158
|
-
// intact and this half-born row cannot remain active without a fleet handle.
|
|
159
|
-
}
|
|
160
|
-
try {
|
|
161
|
-
transitionReplacementToDead(fresh.node_id);
|
|
162
|
-
}
|
|
163
|
-
catch { /* best-effort */ }
|
|
164
|
-
try {
|
|
165
|
-
headlessBrokerHost.teardown(fresh.node_id);
|
|
166
|
-
}
|
|
167
|
-
catch { /* best-effort */ }
|
|
168
|
-
return false;
|
|
169
|
-
}
|
|
170
|
-
function transitionReplacementToDead(nodeId) {
|
|
171
|
-
// spawnNode births active rows, so crash is the authoritative failed-launch
|
|
172
|
-
// outcome whether the host returned no pid or exited before readiness.
|
|
173
|
-
const replacement = getNode(nodeId);
|
|
174
|
-
if (replacement?.status === 'active' || replacement?.status === 'idle')
|
|
175
|
-
transition(nodeId, 'crash');
|
|
176
|
-
}
|
|
177
|
-
function respawnRecycledViewer(fresh, pane) {
|
|
178
|
-
// Clear the finalized node's stale `@crtr_node` tag before respawn so the tag
|
|
179
|
-
// never names a done node during the gap before the new `crtr surface attach` re-tags
|
|
180
|
-
// on connect. Node ids are shell-safe identifiers; no quoting needed.
|
|
181
|
-
try {
|
|
182
|
-
setPaneOption(pane, '@crtr_node', '');
|
|
183
|
-
}
|
|
184
|
-
catch { /* best-effort */ }
|
|
185
|
-
// SYNC respawn: the recycle command runs as a SEPARATE CLI process (the viewer
|
|
186
|
-
// runs `crtr surface attach`, a TUI — it never execs recycle), so we are NOT respawning
|
|
187
|
-
// our own pane and can confirm the respawn actually landed (the honest exit
|
|
188
|
-
// status), unlike the tmux path which often recycles the caller's own pane.
|
|
189
|
-
return respawnPaneSync({ pane, cwd: fresh.cwd, env: viewerSplitEnv(), command: `crtr surface attach to ${fresh.node_id}` });
|
|
190
|
-
}
|
|
1
|
+
var y=Object.defineProperty;var i=(e,t)=>y(e,"name",{value:t,configurable:!0});import{readdirSync as h,readFileSync as _,statSync as v}from"node:fs";import{join as w}from"node:path";import{abortExecution as R,beginExecution as b,getNode as m,setPresence as E,setFocusOccupant as S,fullName as g,recordExecutionPid as k,recordLaunch as x}from"../canvas/index.js";import{reportsDir as T}from"../canvas/paths.js";import{pushFinal as B}from"../feed/feed.js";import{spawnNode as N,rootOfSpine as O}from"./nodes.js";import{buildLaunchSpecAsync as P,buildPiArgv as C}from"./launch.js";import{focusOf as D,respawnPaneSync as F,setPaneOption as M}from"./placement.js";import{waitForBrokerViewSocket as z,viewerSplitEnv as A}from"./placement-tmux.js";import{headlessBrokerHost as p}from"./host.js";import{boundFleet as L}from"./fleet.js";import{transition as U}from"./lifecycle.js";import{ensureDaemon as H}from"../../daemon/manage.js";import{invokeBirthLifecycleHooks as V}from"./spawn.js";function X(e){try{const t=T(e),n=h(t).filter(o=>o.endsWith(".md"));if(n.length===0)return"";let r="",a=-1;for(const o of n){const c=v(w(t,o)).mtimeMs;c>a&&(a=c,r=o)}const l=_(w(t,r),"utf8"),s=/^---\n[\s\S]*?\n---\n/.exec(l);return(s!==null?l.slice(s[0].length):l).trim()}catch{return""}}i(X,"lastReportBody");async function de(e,t){const n=m(e);if(n===null)return{recycled:!1,finalized:!1,newRoot:null,delivered:[]};const r=t??process.env.TMUX_PANE;if(r===void 0||r==="")return{recycled:!1,finalized:!1,newRoot:null,delivered:[]};const a=D(e);try{H()}catch{}const{launch:l}=await P("general","base",{lifecycle:"resident",hasManager:!1,cwd:n.cwd,profileId:n.profile_id}),s=X(e)||`Closed via recycle \u2014 no final summary was authored by ${n.name}.`;let o=[],c=!1;const d=await N({kind:"general",mode:"base",lifecycle:"resident",cwd:n.cwd,name:"general",parent:null,replaces:e,profile_id:n.profile_id,launch:l,beforeCreate:i(async()=>{try{o=(await B(e,s)).deliveredTo,c=!0}catch{}},"beforeCreate")}),u=m(d.node_id);await V(u);const f=C(u);if(f.env={...f.env,CRTR_SUBTREE:O(d.node_id)},!await $(u,f))return{recycled:!1,finalized:c,newRoot:d.node_id,delivered:o};try{p.teardown(e)}catch{}try{E(e,{pane:null,window:null,tmux_session:null})}catch{}if(a!==null)try{S(a.focus_id,d.node_id)}catch{}return{recycled:W(u,r),finalized:c,newRoot:d.node_id,delivered:o}}i(de,"recycleNode");async function $(e,t){const n=b(e.node_id,{daemonEpoch:L().epoch()});t.env={...t.env,CRTR_EXECUTION_ID:n};let r;try{if(r=p.launch(e.node_id,t,{cwd:e.cwd,name:g(e),resuming:!1}),r.pid===null)throw new Error("broker host returned no pid");if(x(e.node_id,new Date().toISOString()),k(n,e.node_id,r.pid)==="shutdown")throw new Error("broker execution was superseded");if(await z(e.node_id,r.exited))return!0}catch{R(n,{reason:"launch_failed"})}try{j(e.node_id)}catch{}try{p.teardown(e.node_id)}catch{}return!1}i($,"launchRecycledBroker");function j(e){const t=m(e);(t?.status==="active"||t?.status==="idle")&&U(e,"crash")}i(j,"transitionReplacementToDead");function W(e,t){try{M(t,"@crtr_node","")}catch{}return F({pane:t,cwd:e.cwd,env:A(),command:`crtr surface attach to ${e.node_id}`})}i(W,"respawnRecycledViewer");export{de as recycleNode};
|
|
@@ -1,138 +1 @@
|
|
|
1
|
-
|
|
2
|
-
// node: `node message send` immediate delivery, `node wait deadline`, and
|
|
3
|
-
// `node lifecycle revive`.
|
|
4
|
-
//
|
|
5
|
-
// `final_report` is a write-once latch (`feed.ts`'s `commitCanonicalFinal`);
|
|
6
|
-
// nothing else ever clears it. Reviving a latched node without reconciling
|
|
7
|
-
// that latch hands it a mandate whose only completion verb — `push final` —
|
|
8
|
-
// is guaranteed to error against the still-set column. So every doorway
|
|
9
|
-
// refuses instead of silently reviving; the refusal names the one remedy,
|
|
10
|
-
// `--reopen`, which clears ONLY the live pointer (retract-pointer-only — the
|
|
11
|
-
// report file on disk and every already-delivered feed event are untouched)
|
|
12
|
-
// so the node's next real `push final` re-latches through the normal
|
|
13
|
-
// `WHERE final_report IS NULL` guard.
|
|
14
|
-
//
|
|
15
|
-
// Concurrency: every check here reads `final_report` FRESH from
|
|
16
|
-
// the DB — never a caller-cached snapshot from an earlier point in the
|
|
17
|
-
// command — and the actual clear is a compare-and-swap (`UPDATE ... WHERE
|
|
18
|
-
// final_report = <the exact value just observed>`), mirroring the CAS
|
|
19
|
-
// `commitCanonicalFinal` already uses in feed.ts and the `BEGIN
|
|
20
|
-
// IMMEDIATE`-guarded critical section `reviveNode` already uses in revive.ts.
|
|
21
|
-
// This closes two races a stale-snapshot + unconditional clear left open:
|
|
22
|
-
// 1. Two concurrent `--reopen` calls both observe final A. The first clears
|
|
23
|
-
// and revives; the node produces a NEW final B. The second (delayed)
|
|
24
|
-
// call's clear, if unconditional, would erase B. CAS-conditioning the
|
|
25
|
-
// UPDATE on the specific value each caller observed makes the second
|
|
26
|
-
// call's compare fail (0 rows) instead of clobbering B — it throws
|
|
27
|
-
// `reopen_latch_changed` and must NOT proceed to revive/deliver.
|
|
28
|
-
// 2. A target finalizes AFTER a NO-reopen caller's gate check but BEFORE its
|
|
29
|
-
// delivery/revive actually runs — reviveNode's own belt-and-suspenders
|
|
30
|
-
// check (revive.ts, same `BEGIN IMMEDIATE` section as the double-launch
|
|
31
|
-
// guard) refuses to revive a node whose `final_report` is set, closing
|
|
32
|
-
// the remaining window as close to the true side effect as the codebase
|
|
33
|
-
// already gets for the double-launch race this pattern was modeled on.
|
|
34
|
-
//
|
|
35
|
-
// `assertFinalizedForReopen`/`commitReopen` are deliberately split (not one
|
|
36
|
-
// check-and-clear call) so a caller with an intervening fallible precondition
|
|
37
|
-
// (such as fresh-revive's recoverable-state check) can validate BEFORE
|
|
38
|
-
// mutating the live pointer — the explicit operation must not retract a
|
|
39
|
-
// canonical final unless it can actually enact the requested re-task.
|
|
40
|
-
import { join } from 'node:path';
|
|
41
|
-
import { clearFinalReportIfMatches, getFinalReport, getNode, reportsDir, updateNode } from '../canvas/index.js';
|
|
42
|
-
import { InputError } from '../io.js';
|
|
43
|
-
import { transition } from './lifecycle.js';
|
|
44
|
-
function currentFinalReport(nodeId) {
|
|
45
|
-
return getFinalReport(nodeId);
|
|
46
|
-
}
|
|
47
|
-
function throwNodeFinalized(nodeId, finalReport) {
|
|
48
|
-
const reportPath = join(reportsDir(nodeId), finalReport);
|
|
49
|
-
throw new InputError({
|
|
50
|
-
error: 'node_finalized',
|
|
51
|
-
message: `${nodeId} already submitted its canonical final result (${reportPath}) — reviving it now would hand it a mandate it can never finish, since a second \`push final\` always errors against an already-latched node.`,
|
|
52
|
-
next: `Re-run this exact command with --reopen to clear ${nodeId}'s spent latch and re-task it in place.`,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
function throwNotFinalized(nodeId) {
|
|
56
|
-
throw new InputError({
|
|
57
|
-
error: 'not_finalized',
|
|
58
|
-
message: `${nodeId} is not finalized — --reopen has nothing to clear.`,
|
|
59
|
-
next: 'Drop --reopen.',
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
/** Validate a target is NOT latched (the ordinary, non-reopen doorway). Reads
|
|
63
|
-
* `final_report` fresh — never a caller-supplied snapshot. Throws
|
|
64
|
-
* `node_finalized` when latched; otherwise a no-op (the common case). No
|
|
65
|
-
* side effect either way. */
|
|
66
|
-
export function assertNotFinalized(nodeId) {
|
|
67
|
-
const finalReport = currentFinalReport(nodeId);
|
|
68
|
-
if (finalReport !== null)
|
|
69
|
-
throwNodeFinalized(nodeId, finalReport);
|
|
70
|
-
}
|
|
71
|
-
/** Validate a target IS latched (the `--reopen` doorway) and return the exact
|
|
72
|
-
* `final_report` value observed, so the caller can CAS-clear it later via
|
|
73
|
-
* `commitReopen` — once every OTHER fallible precondition the requested
|
|
74
|
-
* operation needs has already passed (e.g. `--fresh`'s recoverable-state
|
|
75
|
-
* check). Throws `not_finalized` when the target has nothing to clear. Pure
|
|
76
|
-
* read — never mutates. */
|
|
77
|
-
export function assertFinalizedForReopen(nodeId) {
|
|
78
|
-
const finalReport = currentFinalReport(nodeId);
|
|
79
|
-
if (finalReport === null)
|
|
80
|
-
throwNotFinalized(nodeId);
|
|
81
|
-
return finalReport;
|
|
82
|
-
}
|
|
83
|
-
/** Clear `nodeId`'s finalization latch — retract-pointer-only (only
|
|
84
|
-
* `final_report`/`finalized_at`; the report file and every delivered feed
|
|
85
|
-
* event are untouched). CAS'd against `expectedFinalReport` (the value the
|
|
86
|
-
* caller observed via `assertFinalizedForReopen`): if the row no longer
|
|
87
|
-
* matches — a concurrent `--reopen` already cleared it, or (impossible
|
|
88
|
-
* without a reopen in between, but defended anyway) a fresh final landed —
|
|
89
|
-
* this throws `reopen_latch_changed` instead of silently clobbering a newer
|
|
90
|
-
* canonical result. Callers MUST NOT proceed to revive/deliver when this
|
|
91
|
-
* throws. */
|
|
92
|
-
export function commitReopen(nodeId, expectedFinalReport) {
|
|
93
|
-
const cleared = clearFinalReportIfMatches(nodeId, expectedFinalReport);
|
|
94
|
-
if (!cleared) {
|
|
95
|
-
throw new InputError({
|
|
96
|
-
error: 'reopen_latch_changed',
|
|
97
|
-
message: `${nodeId}'s finalization latch changed since it was last inspected — a concurrent --reopen (or a fresh push final) already moved it, so clearing it now would risk erasing a newer canonical result.`,
|
|
98
|
-
next: 'Re-run this exact command — it will re-inspect the current state before acting.',
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/** Commit the wider message-delivery reopen: make the node resident, then
|
|
103
|
-
* retract a final latch when one exists. Unlike the revive/fresh gate, an
|
|
104
|
-
* unlatched node is valid here — it still becomes resident. Writing lifecycle
|
|
105
|
-
* first leaves a failed latch CAS with the canonical-final pointer intact.
|
|
106
|
-
* Both writes finish before either delivery channel begins. */
|
|
107
|
-
export function commitReopenResident(nodeId, expectedFinalReport) {
|
|
108
|
-
const finalReport = currentFinalReport(nodeId);
|
|
109
|
-
updateNode(nodeId, { lifecycle: 'resident' });
|
|
110
|
-
// A reopened node that is still parked in a terminal status has to come back
|
|
111
|
-
// to `active`, or its row keeps claiming it is finished while a broker runs
|
|
112
|
-
// its new mandate. Gated on terminal so a message landing on a live node
|
|
113
|
-
// never rewrites the intent it is working under.
|
|
114
|
-
const meta = getNode(nodeId);
|
|
115
|
-
if (meta !== null && (meta.status === 'done' || meta.status === 'canceled' || meta.status === 'dead')) {
|
|
116
|
-
transition(nodeId, 'revive');
|
|
117
|
-
}
|
|
118
|
-
if (finalReport !== null)
|
|
119
|
-
commitReopen(nodeId, expectedFinalReport ?? finalReport);
|
|
120
|
-
return finalReport;
|
|
121
|
-
}
|
|
122
|
-
/** Convenience wrapper for a doorway with NO intervening fallible step between
|
|
123
|
-
* the gate check and the reopen clear (`node lifecycle revive` has nothing
|
|
124
|
-
* fallible between the gate and `reviveNode`). Validates and, when `reopen`,
|
|
125
|
-
* clears in one call.
|
|
126
|
-
*
|
|
127
|
-
* - `reopen` false + latched → throws `node_finalized`.
|
|
128
|
-
* - `reopen` true + latched → makes the node resident and CAS-clears the latch (side effect) and returns.
|
|
129
|
-
* - `reopen` true + not latched → throws `not_finalized`.
|
|
130
|
-
* - `reopen` false + not latched → no-op (the common case). */
|
|
131
|
-
export function assertReopenGate(nodeId, reopen) {
|
|
132
|
-
if (reopen) {
|
|
133
|
-
const expectedFinalReport = assertFinalizedForReopen(nodeId);
|
|
134
|
-
commitReopenResident(nodeId, expectedFinalReport);
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
assertNotFinalized(nodeId);
|
|
138
|
-
}
|
|
1
|
+
var s=Object.defineProperty;var n=(e,t)=>s(e,"name",{value:t,configurable:!0});import{join as c}from"node:path";import{clearFinalReportIfMatches as l,getFinalReport as p,getNode as f,reportsDir as u,updateNode as h}from"../canvas/index.js";import{InputError as a}from"../io.js";import{transition as m}from"./lifecycle.js";function o(e){return p(e)}n(o,"currentFinalReport");function d(e,t){const r=c(u(e),t);throw new a({error:"node_finalized",message:`${e} already submitted its canonical final result (${r}) \u2014 reviving it now would hand it a mandate it can never finish, since a second \`push final\` always errors against an already-latched node.`,next:`Re-run this exact command with --reopen to clear ${e}'s spent latch and re-task it in place.`})}n(d,"throwNodeFinalized");function w(e){throw new a({error:"not_finalized",message:`${e} is not finalized \u2014 --reopen has nothing to clear.`,next:"Drop --reopen."})}n(w,"throwNotFinalized");function R(e){const t=o(e);t!==null&&d(e,t)}n(R,"assertNotFinalized");function g(e){const t=o(e);return t===null&&w(e),t}n(g,"assertFinalizedForReopen");function x(e,t){if(!l(e,t))throw new a({error:"reopen_latch_changed",message:`${e}'s finalization latch changed since it was last inspected \u2014 a concurrent --reopen (or a fresh push final) already moved it, so clearing it now would risk erasing a newer canonical result.`,next:"Re-run this exact command \u2014 it will re-inspect the current state before acting."})}n(x,"commitReopen");function F(e,t){const r=o(e);h(e,{lifecycle:"resident"});const i=f(e);return i!==null&&(i.status==="done"||i.status==="canceled"||i.status==="dead")&&m(e,"revive"),r!==null&&x(e,t??r),r}n(F,"commitReopenResident");function _(e,t){if(t){const r=g(e);F(e,r);return}R(e)}n(_,"assertReopenGate");export{g as assertFinalizedForReopen,R as assertNotFinalized,_ as assertReopenGate,x as commitReopen,F as commitReopenResident};
|
|
@@ -1,245 +1 @@
|
|
|
1
|
-
|
|
2
|
-
// termination.
|
|
3
|
-
//
|
|
4
|
-
// A node's engine is a detached broker process bound to one CRTR_NODE_ID, and
|
|
5
|
-
// its on-screen viewer is a SEPARATE `crtr surface attach` pane. `/new` splits by who
|
|
6
|
-
// ran it:
|
|
7
|
-
//
|
|
8
|
-
// • relaunchRoot — a `/new` on a ROOT starts a genuinely new node: the old
|
|
9
|
-
// root is parked `done` (kept as history), a fresh node id + broker is
|
|
10
|
-
// minted in the same pane/cwd, and the viewer pane is re-pointed at the new
|
|
11
|
-
// broker. The new broker is booted FIRST, so any failure before the commit
|
|
12
|
-
// point leaves the old root fully intact.
|
|
13
|
-
// • resetRoot — a `/new` on a non-root child refreshes its session id only, so
|
|
14
|
-
// a later `--session <id>` wakes the right conversation.
|
|
15
|
-
//
|
|
16
|
-
// Termination semantics: a pi that ends cleanly resolves its node to `done`
|
|
17
|
-
// (markCleanExitDone); only a true crash leaves it `dead`. A force-kill fires NO
|
|
18
|
-
// clean session_shutdown, so reaped descendants are marked `canceled` explicitly
|
|
19
|
-
// here (A5: an externally-reaped node did not finish its own work — done is
|
|
20
|
-
// reserved for finish).
|
|
21
|
-
//
|
|
22
|
-
// Best-effort throughout: a tmux/fs failure on one node never aborts the reap.
|
|
23
|
-
import { getNode, beginExecution, recordExecutionPid, abortExecution, bindSession, recordLaunch, fullName, liveExecutionForNode, closeFocusRow, view, } from '../canvas/index.js';
|
|
24
|
-
import { transition } from './lifecycle.js';
|
|
25
|
-
import { headlessBrokerHost, requestBrokerTeardown } from './host.js';
|
|
26
|
-
import { boundFleet } from './fleet.js';
|
|
27
|
-
import { tearDownNode, focusOf, registerViewerFocus, respawnPaneSync, windowOfPane, renameWindow, } from './placement.js';
|
|
28
|
-
import { viewerSplitEnv, waitForBrokerViewSocket } from './placement-tmux.js';
|
|
29
|
-
import { buildLaunchSpecAsync, buildPiArgv } from './launch.js';
|
|
30
|
-
import { spawnNode, rootOfSpine } from './nodes.js';
|
|
31
|
-
import { invokeBirthLifecycleHooks } from './spawn.js';
|
|
32
|
-
// reapDescendants — tear down a root's descendant sub-DAG (shared helper)
|
|
33
|
-
/** Reap the descendant sub-DAG of `rootId`: mark each **canceled** (the user
|
|
34
|
-
* moved on — a clean teardown, NOT a fault) + clear intent FIRST, then kill its
|
|
35
|
-
* window (closes the daemon revive race). Edges are LEFT INTACT — descendants
|
|
36
|
-
* keep parent=rootId. No wipe. Returns the reaped ids.
|
|
37
|
-
*
|
|
38
|
-
* Why `canceled` (A5, human-confirmed 2026-06-06): an externally-reaped node —
|
|
39
|
-
* whether via `node lifecycle close` OR a root reset — did not finish its OWN work, so it
|
|
40
|
-
* unifies on `canceled`; `done` is reserved for finish. Why marking is STILL
|
|
41
|
-
* explicit: an abrupt broker teardown fires NO clean `session_shutdown`, so the
|
|
42
|
-
* general quit→done rule does NOT auto-resolve a force-killed descendant — we
|
|
43
|
-
* mark it `canceled` here via the same `cancel` event the close cascade uses. */
|
|
44
|
-
export function reapDescendants(rootId) {
|
|
45
|
-
const reaped = [];
|
|
46
|
-
for (const id of view(rootId)) {
|
|
47
|
-
try {
|
|
48
|
-
// Reap BEFORE tearing down the engine (the crash-safety invariant the
|
|
49
|
-
// `cancel` event encodes): a non-supervised status + cleared intent first,
|
|
50
|
-
// so the daemon can't revive a descendant mid-teardown. Teardown then sends
|
|
51
|
-
// the broker the `shutdown` frame so its PROCESS exits and releases the
|
|
52
|
-
// sole .jsonl writer; tearDownNode then proactively closes the on-screen
|
|
53
|
-
// viewer pane + registry row (attach auto-reconnects, so the viewer must be
|
|
54
|
-
// closed here or it lingers ~30s in a misleading "reconnecting…" state).
|
|
55
|
-
transition(id, 'cancel', { reason: 'closed' });
|
|
56
|
-
requestBrokerTeardown(id);
|
|
57
|
-
tearDownNode(id);
|
|
58
|
-
reaped.push(id);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
/* one bad node never aborts the reap */
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return reaped;
|
|
65
|
-
}
|
|
66
|
-
/** Relaunch a ROOT on `/new`: park the old root `done` (kept as history) and
|
|
67
|
-
* mint a fresh node id + broker in the same pane/cwd, re-pointing the viewer at
|
|
68
|
-
* it. The new broker is booted FIRST and its pid confirmed BEFORE the old root
|
|
69
|
-
* is touched, so any pre-commit failure leaves the old root fully intact and
|
|
70
|
-
* live. Returns null when `oldId` is not a relaunchable root (unknown, a child,
|
|
71
|
-
* or already parked), or when the new broker failed to launch. */
|
|
72
|
-
export async function relaunchRoot(oldId, deps = {}) {
|
|
73
|
-
const launchBroker = deps.launchBroker ?? headlessBrokerHost.launch;
|
|
74
|
-
const waitForViewSocket = deps.waitForViewSocket ?? waitForBrokerViewSocket;
|
|
75
|
-
const respawnViewer = deps.respawnViewer ?? respawnPaneSync;
|
|
76
|
-
const teardownBroker = deps.teardownBroker ?? headlessBrokerHost.teardown;
|
|
77
|
-
const old = getNode(oldId);
|
|
78
|
-
if (old === null || old.parent != null)
|
|
79
|
-
return null; // roots only
|
|
80
|
-
if (old.status === 'done')
|
|
81
|
-
return null; // defensive: a double `/new`
|
|
82
|
-
const oldFocus = focusOf(oldId); // capture the viewer BEFORE any teardown
|
|
83
|
-
// --- mint + boot the NEW broker FIRST (a failure here leaves the old root
|
|
84
|
-
// untouched) ---
|
|
85
|
-
// A relaunched root is a fresh resident base, exactly like the front door.
|
|
86
|
-
const { launch } = await buildLaunchSpecAsync(old.kind, 'base', {
|
|
87
|
-
lifecycle: 'resident',
|
|
88
|
-
hasManager: false,
|
|
89
|
-
model: old.model_override ?? undefined,
|
|
90
|
-
// A `/new` relaunch carries no new --model — preserve the old root's routing
|
|
91
|
-
// contract verbatim rather than re-deriving it from model_override's shape.
|
|
92
|
-
modelProviderPinned: old.launch?.modelProviderPinned,
|
|
93
|
-
modelIntent: old.launch?.modelIntent,
|
|
94
|
-
modelExact: old.launch?.modelExact,
|
|
95
|
-
// The OLD root's cwd + profile, not this process's ambient scope — the
|
|
96
|
-
// relaunch is the same seat, so profile-scope kind defaults keep applying.
|
|
97
|
-
cwd: old.cwd,
|
|
98
|
-
profileId: old.profile_id,
|
|
99
|
-
});
|
|
100
|
-
const newMeta = await spawnNode({
|
|
101
|
-
kind: old.kind,
|
|
102
|
-
mode: 'base',
|
|
103
|
-
lifecycle: 'resident',
|
|
104
|
-
cwd: old.cwd,
|
|
105
|
-
name: old.kind,
|
|
106
|
-
parent: null,
|
|
107
|
-
replaces: oldId,
|
|
108
|
-
profile_id: old.profile_id,
|
|
109
|
-
launch,
|
|
110
|
-
modelOverride: old.model_override ?? undefined,
|
|
111
|
-
});
|
|
112
|
-
await invokeBirthLifecycleHooks(newMeta);
|
|
113
|
-
const inv = buildPiArgv(newMeta, {});
|
|
114
|
-
// Mirror bootRoot's subtree routing on inv.env (the broker host merges it; it
|
|
115
|
-
// sets CRTR_FRONT_DOOR itself).
|
|
116
|
-
inv.env = {
|
|
117
|
-
...inv.env,
|
|
118
|
-
CRTR_SUBTREE: rootOfSpine(newMeta.node_id),
|
|
119
|
-
};
|
|
120
|
-
const executionId = beginExecution(newMeta.node_id, { daemonEpoch: boundFleet().epoch() });
|
|
121
|
-
inv.env = { ...inv.env, CRTR_EXECUTION_ID: executionId };
|
|
122
|
-
let placed;
|
|
123
|
-
try {
|
|
124
|
-
placed = launchBroker(newMeta.node_id, inv, {
|
|
125
|
-
cwd: old.cwd,
|
|
126
|
-
name: fullName(newMeta),
|
|
127
|
-
resuming: false,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
abortExecution(executionId, { reason: 'launch_failed' });
|
|
132
|
-
transition(newMeta.node_id, 'crash');
|
|
133
|
-
throw error;
|
|
134
|
-
}
|
|
135
|
-
if (placed.pid == null) {
|
|
136
|
-
abortExecution(executionId, { reason: 'launch_failed' });
|
|
137
|
-
// The new broker never started — crash the half-born node and BAIL. The old
|
|
138
|
-
// root is still live and untouched (nothing below this point has run).
|
|
139
|
-
transition(newMeta.node_id, 'crash');
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
|
-
// A replacement is a managed broker just like a revive: the fleet owns its
|
|
143
|
-
// real exit, while the row gets the matching launch and pid coordinates before
|
|
144
|
-
// readiness can observe an early exit.
|
|
145
|
-
recordLaunch(newMeta.node_id, new Date().toISOString());
|
|
146
|
-
if (recordExecutionPid(executionId, newMeta.node_id, placed.pid) === 'shutdown') {
|
|
147
|
-
abortExecution(executionId, { reason: 'superseded' });
|
|
148
|
-
try {
|
|
149
|
-
teardownBroker(newMeta.node_id);
|
|
150
|
-
}
|
|
151
|
-
catch { /* best-effort */ }
|
|
152
|
-
transition(newMeta.node_id, 'crash');
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
let ready = false;
|
|
156
|
-
try {
|
|
157
|
-
ready = await waitForViewSocket(newMeta.node_id, placed.exited);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// A readiness probe error means the replacement is not proven usable.
|
|
161
|
-
}
|
|
162
|
-
if (!ready) {
|
|
163
|
-
// Do not let a broker that can still bind later sit behind a dead row, and
|
|
164
|
-
// do not commit any old-root teardown without a usable replacement.
|
|
165
|
-
const replacement = getNode(newMeta.node_id);
|
|
166
|
-
if (replacement?.status === 'active' || replacement?.status === 'idle')
|
|
167
|
-
transition(newMeta.node_id, 'crash');
|
|
168
|
-
try {
|
|
169
|
-
teardownBroker(newMeta.node_id);
|
|
170
|
-
}
|
|
171
|
-
catch { /* best-effort */ }
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
// --- COMMIT: park + reap the old root, re-point the viewer, kill the old
|
|
175
|
-
// broker. Past this point the new node is the live root. ---
|
|
176
|
-
reapDescendants(oldId); // old workers → canceled + torn down
|
|
177
|
-
// Park the old root DONE (kept as history; NOT canceled — a relaunched root
|
|
178
|
-
// finished cleanly, the user just started fresh). Its reports/inbox/roadmap
|
|
179
|
-
// are left on disk as the record of that session.
|
|
180
|
-
transition(oldId, 'finish');
|
|
181
|
-
if (oldFocus?.pane != null) {
|
|
182
|
-
closeFocusRow(oldFocus.focus_id);
|
|
183
|
-
respawnViewer({
|
|
184
|
-
pane: oldFocus.pane,
|
|
185
|
-
cwd: old.cwd,
|
|
186
|
-
env: viewerSplitEnv(),
|
|
187
|
-
command: `crtr surface attach to ${newMeta.node_id}`,
|
|
188
|
-
});
|
|
189
|
-
const window = windowOfPane(oldFocus.pane);
|
|
190
|
-
if (window !== null)
|
|
191
|
-
renameWindow(window, fullName(newMeta));
|
|
192
|
-
registerViewerFocus(newMeta.node_id, oldFocus.pane, oldFocus.session, window);
|
|
193
|
-
}
|
|
194
|
-
teardownBroker(oldId); // old broker exits cleanly (its /new work is discarded)
|
|
195
|
-
return { newNodeId: newMeta.node_id };
|
|
196
|
-
}
|
|
197
|
-
/** Refresh a non-root child's pi session id on `/new`, so a later
|
|
198
|
-
* `--session <id>` wakes the right conversation. A `/new` on a child is NOT a
|
|
199
|
-
* graph reset — a root's `/new` is handled by relaunchRoot, never here; a root
|
|
200
|
-
* that reaches this is a no-op. */
|
|
201
|
-
export function resetRoot(nodeId, newSessionId, newSessionFile) {
|
|
202
|
-
const meta = getNode(nodeId);
|
|
203
|
-
const empty = { reaped: [], detached: [], reset: false };
|
|
204
|
-
if (meta === null || meta.parent == null)
|
|
205
|
-
return empty; // unknown or a root
|
|
206
|
-
if (newSessionId !== undefined) {
|
|
207
|
-
const execution = liveExecutionForNode(nodeId);
|
|
208
|
-
if (execution !== null)
|
|
209
|
-
bindSession(nodeId, {
|
|
210
|
-
executionId: execution.executionId,
|
|
211
|
-
sessionId: newSessionId,
|
|
212
|
-
transcriptPath: newSessionFile ?? null,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
return empty;
|
|
216
|
-
}
|
|
217
|
-
/** The child-side `/new` entry the stophook calls (the root side goes to
|
|
218
|
-
* relaunchRoot directly). The broker already drove the engine-side new_session;
|
|
219
|
-
* this only refreshes the child's session id on the SAME node id. */
|
|
220
|
-
export function handleNewSession(nodeId, newSessionId, newSessionFile) {
|
|
221
|
-
const meta = getNode(nodeId);
|
|
222
|
-
if (meta === null)
|
|
223
|
-
return { path: 'noop' };
|
|
224
|
-
resetRoot(nodeId, newSessionId, newSessionFile);
|
|
225
|
-
return { path: 'reset-child' };
|
|
226
|
-
}
|
|
227
|
-
// markCleanExitDone — the clean-exit→done termination guard
|
|
228
|
-
/** Resolve a cleanly-exiting node to `done`. Returns true iff it transitioned.
|
|
229
|
-
* Guard: only a real quit, and only a node still active|idle with no pending
|
|
230
|
-
* intent — so it never clobbers a node already routed by agent_end to done
|
|
231
|
-
* (push final), refresh (yield), or idle-release. Pure/DB-only (no pi/tmux) so
|
|
232
|
-
* the guard is unit-testable without a live pi. */
|
|
233
|
-
export function markCleanExitDone(nodeId, reason) {
|
|
234
|
-
if (reason !== 'quit')
|
|
235
|
-
return false; // new/reload/resume/fork → no-op
|
|
236
|
-
const meta = getNode(nodeId);
|
|
237
|
-
if (meta === null)
|
|
238
|
-
return false;
|
|
239
|
-
if (meta.status !== 'active' && meta.status !== 'idle')
|
|
240
|
-
return false; // already done/dead/canceled
|
|
241
|
-
if (meta.intent != null)
|
|
242
|
-
return false; // refresh / idle-release in flight
|
|
243
|
-
transition(nodeId, 'finish');
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
1
|
+
var y=Object.defineProperty;var l=(e,t)=>y(e,"name",{value:t,configurable:!0});import{getNode as p,beginExecution as E,recordExecutionPid as S,abortExecution as h,bindSession as B,recordLaunch as P,fullName as v,liveExecutionForNode as b,closeFocusRow as F,view as N}from"../canvas/index.js";import{transition as a}from"./lifecycle.js";import{headlessBrokerHost as k,requestBrokerTeardown as R}from"./host.js";import{boundFleet as g}from"./fleet.js";import{tearDownNode as O,focusOf as V,registerViewerFocus as D,respawnPaneSync as T,windowOfPane as C,renameWindow as L}from"./placement.js";import{viewerSplitEnv as q,waitForBrokerViewSocket as A}from"./placement-tmux.js";import{buildLaunchSpecAsync as H,buildPiArgv as M}from"./launch.js";import{spawnNode as U,rootOfSpine as I}from"./nodes.js";import{invokeBirthLifecycleHooks as W}from"./spawn.js";function X(e){const t=[];for(const o of N(e))try{a(o,"cancel",{reason:"closed"}),R(o),O(o),t.push(o)}catch{}return t}l(X,"reapDescendants");async function re(e,t={}){const o=t.launchBroker??k.launch,s=t.waitForViewSocket??A,m=t.respawnViewer??T,c=t.teardownBroker??k.teardown,r=p(e);if(r===null||r.parent!=null||r.status==="done")return null;const d=V(e),{launch:x}=await H(r.kind,"base",{lifecycle:"resident",hasManager:!1,model:r.model_override??void 0,modelProviderPinned:r.launch?.modelProviderPinned,modelIntent:r.launch?.modelIntent,modelExact:r.launch?.modelExact,cwd:r.cwd,profileId:r.profile_id}),n=await U({kind:r.kind,mode:"base",lifecycle:"resident",cwd:r.cwd,name:r.kind,parent:null,replaces:e,profile_id:r.profile_id,launch:x,modelOverride:r.model_override??void 0});await W(n);const u=M(n,{});u.env={...u.env,CRTR_SUBTREE:I(n.node_id)};const f=E(n.node_id,{daemonEpoch:g().epoch()});u.env={...u.env,CRTR_EXECUTION_ID:f};let w;try{w=o(n.node_id,u,{cwd:r.cwd,name:v(n),resuming:!1})}catch(i){throw h(f,{reason:"launch_failed"}),a(n.node_id,"crash"),i}if(w.pid==null)return h(f,{reason:"launch_failed"}),a(n.node_id,"crash"),null;if(P(n.node_id,new Date().toISOString()),S(f,n.node_id,w.pid)==="shutdown"){h(f,{reason:"superseded"});try{c(n.node_id)}catch{}return a(n.node_id,"crash"),null}let _=!1;try{_=await s(n.node_id,w.exited)}catch{}if(!_){const i=p(n.node_id);(i?.status==="active"||i?.status==="idle")&&a(n.node_id,"crash");try{c(n.node_id)}catch{}return null}if(X(e),a(e,"finish"),d?.pane!=null){F(d.focus_id),m({pane:d.pane,cwd:r.cwd,env:q(),command:`crtr surface attach to ${n.node_id}`});const i=C(d.pane);i!==null&&L(i,v(n)),D(n.node_id,d.pane,d.session,i)}return c(e),{newNodeId:n.node_id}}l(re,"relaunchRoot");function $(e,t,o){const s=p(e),m={reaped:[],detached:[],reset:!1};if(s===null||s.parent==null)return m;if(t!==void 0){const c=b(e);c!==null&&B(e,{executionId:c.executionId,sessionId:t,transcriptPath:o??null})}return m}l($,"resetRoot");function te(e,t,o){return p(e)===null?{path:"noop"}:($(e,t,o),{path:"reset-child"})}l(te,"handleNewSession");function oe(e,t){if(t!=="quit")return!1;const o=p(e);return o===null||o.status!=="active"&&o.status!=="idle"||o.intent!=null?!1:(a(e,"finish"),!0)}l(oe,"markCleanExitDone");export{te as handleNewSession,oe as markCleanExitDone,X as reapDescendants,re as relaunchRoot,$ as resetRoot};
|