@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,643 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
// Loaded into every canvas node's pi process via the node's launch.extensions
|
|
4
|
-
// list. INERT when CRTR_NODE_ID is absent (plain pi session or legacy job agent).
|
|
5
|
-
//
|
|
6
|
-
// In the canvas model each node owns a dedicated pi window (one-window-per-node),
|
|
7
|
-
// so the tmux pane-relocation swap-back guard of the legacy stophook is omitted —
|
|
8
|
-
// there are no shared pane slots to restore.
|
|
9
|
-
//
|
|
10
|
-
// Responsibilities:
|
|
11
|
-
//
|
|
12
|
-
// turn_end — accumulate token usage and flush telemetry.json under the node's
|
|
13
|
-
// job/ dir so the dashboard shows live counts.
|
|
14
|
-
//
|
|
15
|
-
// agent_end — stage the latest Pi attempt for Pi's settlement boundary.
|
|
16
|
-
//
|
|
17
|
-
// agent_settled — report Pi-only stop facts to crtrd, then enact its one
|
|
18
|
-
// returned directive: follow-up reprompt, stay dormant, or
|
|
19
|
-
// shut down. crtrd owns every stop-policy and canvas effect.
|
|
20
|
-
//
|
|
21
|
-
// Plain TS-with-types — no imports from @earendil-works/* so this compiles inside
|
|
22
|
-
// crouter's own tsc build without a dep on the pi packages.
|
|
23
|
-
import { envNodeId } from '../shared/env.js';
|
|
24
|
-
import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'node:fs';
|
|
25
|
-
import { join } from 'node:path';
|
|
26
|
-
import { contextDir, jobDir } from '../core/canvas/paths.js';
|
|
27
|
-
import { mutateBrokerFault, recordBrokerTurn } from '../core/runtime/broker/daemon-ops.js';
|
|
28
|
-
import { clearStopSignals, consumeStopSignals } from '../core/runtime/stop-signals.js';
|
|
29
|
-
import { bindBrokerSession, brokerExtensionState, relaunchBrokerRoot, settleBroker } from '../core/runtime/broker/daemon-ops.js';
|
|
30
|
-
import { emitEvent } from '../core/events/emit.js';
|
|
31
|
-
import { activeBackgroundBashJobs } from '../core/bash-jobs.js';
|
|
32
|
-
import { CONTEXT_NUDGE_CUSTOM_TYPE, formatCard } from '../shared/generated-context.js';
|
|
33
|
-
import { isReviewBoundary } from '../core/runtime/session-visibility.js';
|
|
34
|
-
import { clearRefusedTurn, refuseTurn, runRefreshAbort } from '../core/runtime/broker/extension-abort.js';
|
|
35
|
-
import { announceMessageOrigin } from '../core/runtime/stamp/channel.js';
|
|
36
|
-
/** Condense a tool call into one short line for the activity cue. Picks the most
|
|
37
|
-
* identifying arg (command / path / pattern / description), collapses whitespace,
|
|
38
|
-
* and hard-caps the length so a giant bash command can't bloat telemetry.json. */
|
|
39
|
-
const ACTIVITY_CAP = 80;
|
|
40
|
-
function summarizeActivity(toolName, args) {
|
|
41
|
-
const a = (args ?? {});
|
|
42
|
-
const pick = (v) => (typeof v === 'string' ? v : '');
|
|
43
|
-
const detail = pick(a['command']) || pick(a['path']) || pick(a['file_path']) || pick(a['pattern']) || pick(a['description']) || pick(a['prompt']);
|
|
44
|
-
const line = (detail !== '' ? `${toolName}: ${detail}` : toolName).replace(/\s+/g, ' ').trim();
|
|
45
|
-
return line.length > ACTIVITY_CAP ? line.slice(0, ACTIVITY_CAP) : line;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Merge accumulated token counts into nodes/<nodeId>/job/telemetry.json.
|
|
49
|
-
* Creates the directory when it doesn't yet exist. Best-effort; never throws.
|
|
50
|
-
* `contextTokens` is the live window gauge for THIS turn; when null (pi can't
|
|
51
|
-
* size the window yet) the last recorded value is preserved.
|
|
52
|
-
*/
|
|
53
|
-
function flushTelemetry(jobDirPath, tokensIn, tokensOut, model, contextTokens, activity) {
|
|
54
|
-
try {
|
|
55
|
-
if (!existsSync(jobDirPath))
|
|
56
|
-
mkdirSync(jobDirPath, { recursive: true });
|
|
57
|
-
const filePath = join(jobDirPath, 'telemetry.json');
|
|
58
|
-
// Merge with any existing record so concurrent readers always see a complete
|
|
59
|
-
// picture. Model name falls back to whatever was last recorded.
|
|
60
|
-
let existing = {};
|
|
61
|
-
if (existsSync(filePath)) {
|
|
62
|
-
try {
|
|
63
|
-
existing = JSON.parse(readFileSync(filePath, 'utf8'));
|
|
64
|
-
}
|
|
65
|
-
catch {
|
|
66
|
-
/* start fresh on a corrupt file */
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const record = {
|
|
70
|
-
tokens_in: tokensIn,
|
|
71
|
-
tokens_out: tokensOut,
|
|
72
|
-
context_tokens: contextTokens ?? existing.context_tokens,
|
|
73
|
-
last_activity: activity ?? existing.last_activity,
|
|
74
|
-
model: model !== '' ? model : (existing.model ?? ''),
|
|
75
|
-
updated_at: new Date().toISOString(),
|
|
76
|
-
};
|
|
77
|
-
writeFileSync(filePath, JSON.stringify(record, null, 2), 'utf8');
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
/* telemetry is best-effort; never surface */
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
// Message-extraction helpers
|
|
84
|
-
/** Walk backwards through the agent_end messages array to find the last
|
|
85
|
-
* assistant turn. */
|
|
86
|
-
function lastAssistantMessage(messages) {
|
|
87
|
-
for (let i = messages.length - 1; i >= 0; i--) {
|
|
88
|
-
if (messages[i]?.role === 'assistant')
|
|
89
|
-
return messages[i];
|
|
90
|
-
}
|
|
91
|
-
return undefined;
|
|
92
|
-
}
|
|
93
|
-
/** Review markers present in Pi's current branch. The broker reports only this
|
|
94
|
-
* Pi-owned fact; crtrd compares it with the node's daemon-owned review binding. */
|
|
95
|
-
function currentReviewBoundaryIds(ctx) {
|
|
96
|
-
try {
|
|
97
|
-
const entries = ctx?.sessionManager?.getBranch();
|
|
98
|
-
if (!Array.isArray(entries))
|
|
99
|
-
return [];
|
|
100
|
-
const ids = new Set();
|
|
101
|
-
for (const entry of entries) {
|
|
102
|
-
if (!isReviewBoundary(entry))
|
|
103
|
-
continue;
|
|
104
|
-
const reviewId = entry.details?.reviewId;
|
|
105
|
-
if (typeof reviewId === 'string')
|
|
106
|
-
ids.add(reviewId);
|
|
107
|
-
}
|
|
108
|
-
return [...ids];
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
return [];
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
// Context-size steering bands — a single shared schedule of thresholds that
|
|
115
|
-
// ESCALATE in tone as input context grows. The first band is a gentle
|
|
116
|
-
// "consider it"; a later band turns firm. The schedule TIGHTENS as it climbs:
|
|
117
|
-
// 130k, 150k, 170k, 185k, 200k, then every 10k (210k, 220k, …) so a long-lived
|
|
118
|
-
// node keeps getting reminded, more often the deeper it goes.
|
|
119
|
-
//
|
|
120
|
-
// The band schedule is shared across all node shapes; only the MESSAGE differs
|
|
121
|
-
// (steerNote), keyed on MODE first, then LIFECYCLE — three reachable personas:
|
|
122
|
-
// orchestrator (terminal OR resident): HAS a roadmap (promotion / orchestrator
|
|
123
|
-
// birth seeds context/roadmap.md), so it is steered to checkpoint +
|
|
124
|
-
// yield — 130k gentle (consider yielding) → 150k firm (do it now) →
|
|
125
|
-
// 185k+ pushy. Keyed on mode, NOT lifecycle: a terminal/orchestrator
|
|
126
|
-
// yields against its roadmap exactly like a resident one (the
|
|
127
|
-
// daemon's refresh-revive keys on intent='refresh', not lifecycle).
|
|
128
|
-
// resident/base (a root conversation): NO roadmap on disk yet, so it is not
|
|
129
|
-
// told to checkpoint one. `crtr node yield` is still its continue
|
|
130
|
-
// verb — mode-preserving, continuing fresh against its goal and its
|
|
131
|
-
// note — offered against wrap-up, since a root chat can simply end.
|
|
132
|
-
// `--promote` is mentioned only when worthwhile independent work
|
|
133
|
-
// can run in parallel and coordination should become primary. Gentle → firm → pushy.
|
|
134
|
-
// terminal/base (a worker): steered to `crtr node yield` to continue in a
|
|
135
|
-
// fresh window, mode-preserving, when work remains, or `push final`
|
|
136
|
-
// when close. Gentle → firm → pushy.
|
|
137
|
-
//
|
|
138
|
-
// Every persona's "keep going" verb is `crtr node yield` — NEVER a bare `node
|
|
139
|
-
// promote`, which framed promotion as a heavy "become an orchestrator" step and
|
|
140
|
-
// bred yield-avoidance. A plain yield is always mode-preserving — a base node's
|
|
141
|
-
// yield never auto-promotes, so the agent is never steered to decide about
|
|
142
|
-
// promotion at all; `--promote` is a separate opt-in mentioned only for
|
|
143
|
-
// worthwhile parallel work. Only a terminal node is ever told `push final` (a
|
|
144
|
-
// resident finishes by yielding or being closed); only an orchestrator already
|
|
145
|
-
// HAS a roadmap to checkpoint before it yields.
|
|
146
|
-
const STEER_STEP = 10_000;
|
|
147
|
-
// Shared escalation schedule (both lifecycles). Tightens as it climbs:
|
|
148
|
-
// 130k, 150k, 170k, 185k, 200k, then every 10k (210k, 220k, …).
|
|
149
|
-
const BANDS = [130_000, 150_000, 170_000, 185_000, 200_000];
|
|
150
|
-
/** The highest band threshold at or below `tokens`. Below the first band →
|
|
151
|
-
* null. At/past the last listed band, bands continue every STEER_STEP (so the
|
|
152
|
-
* firmest nudge keeps recurring). */
|
|
153
|
-
function steerBand(tokens) {
|
|
154
|
-
const first = BANDS[0];
|
|
155
|
-
const last = BANDS[BANDS.length - 1];
|
|
156
|
-
if (tokens < first)
|
|
157
|
-
return null;
|
|
158
|
-
if (tokens >= last)
|
|
159
|
-
return last + Math.floor((tokens - last) / STEER_STEP) * STEER_STEP;
|
|
160
|
-
let chosen = first;
|
|
161
|
-
for (const b of BANDS)
|
|
162
|
-
if (tokens >= b)
|
|
163
|
-
chosen = b;
|
|
164
|
-
return chosen;
|
|
165
|
-
}
|
|
166
|
-
/** The nudge text for a crossed band, specialized to the node's (mode,
|
|
167
|
-
* lifecycle) persona + how far along the escalation it is. `crtr node yield` is
|
|
168
|
-
* the single "keep going past this window" verb for every persona: it refreshes
|
|
169
|
-
* the node into a clean window, MODE-PRESERVING — a base node stays base,
|
|
170
|
-
* continuing fresh against its goal and its note. `--promote` is a separate,
|
|
171
|
-
* explicit opt-in (never steered here as auto-behavior) for when worthwhile
|
|
172
|
-
* independent work can run in parallel and coordination should become the
|
|
173
|
-
* node's primary job — so no persona is ever steered at a bare `node promote` (which framed promotion as a heavy
|
|
174
|
-
* "become an orchestrator" step and bred yield-avoidance).
|
|
175
|
-
*
|
|
176
|
-
* - orchestrator (terminal OR resident): checkpoint context/roadmap.md, then
|
|
177
|
-
* yield (it already has a roadmap to bring current first).
|
|
178
|
-
* - resident/base (root conversation): yield to continue fresh if the chat is
|
|
179
|
-
* growing into a job, else wrap up — a root can simply end.
|
|
180
|
-
* - terminal/base (worker): yield to continue if work remains, or `push final`
|
|
181
|
-
* when close.
|
|
182
|
-
*
|
|
183
|
-
* The wording strengthens with depth: gentle < 150k → firm < 185k → pushy at/
|
|
184
|
-
* past 185k, where drifting further risks an overflow. */
|
|
185
|
-
export function steerNote(at, lifecycle, mode) {
|
|
186
|
-
const k = Math.round(at / 1000);
|
|
187
|
-
const pushy = at >= 185_000;
|
|
188
|
-
// Keyed on MODE first: any orchestrator (terminal or resident) has a roadmap
|
|
189
|
-
// to checkpoint + yield against.
|
|
190
|
-
if (mode === 'orchestrator') {
|
|
191
|
-
if (at < 150_000) {
|
|
192
|
-
return `Context ~${k}k and growing. When you reach a good stopping point, consider updating context/roadmap.md and running \`crtr node yield\` to refresh against it — no rush yet.`;
|
|
193
|
-
}
|
|
194
|
-
if (!pushy) {
|
|
195
|
-
return `Context ~${k}k. Update context/roadmap.md so a fresh revive can continue, delegate any outstanding work, then \`crtr node yield\` to refresh.`;
|
|
196
|
-
}
|
|
197
|
-
return `Context ~${k}k — this is getting long. Stop taking on new work now: checkpoint context/roadmap.md, hand off anything outstanding, and \`crtr node yield\` immediately to refresh before this context overflows.`;
|
|
198
|
-
}
|
|
199
|
-
if (lifecycle === 'resident') {
|
|
200
|
-
// resident/base — a root conversation, mode-preserving `crtr node yield` is
|
|
201
|
-
// the natural "carry this forward" verb: it refreshes into a clean window
|
|
202
|
-
// and continues fresh against your goal and your note — no "become
|
|
203
|
-
// something" decision. Mention --promote only when worthwhile independent
|
|
204
|
-
// work can run in parallel and coordination should become primary. Offer
|
|
205
|
-
// wrap-up as the alternative — a root chat can simply end.
|
|
206
|
-
const grow = `If substantial work remains, \`crtr node yield\` to continue fresh against your goal and your note. Add --promote only when worthwhile independent work can run in parallel and coordinating it should become your primary job; \`crtr node yield -h\` has the boundary.`;
|
|
207
|
-
if (at < 150_000) {
|
|
208
|
-
return `Context ~${k}k and growing. ${grow} Otherwise no rush — wrap up when you reach a good stopping point.`;
|
|
209
|
-
}
|
|
210
|
-
if (!pushy) {
|
|
211
|
-
return `Context ~${k}k. ${grow} If you're near done, just finish here; if there's more open-ended work, \`crtr node yield\` rather than letting this context grow.`;
|
|
212
|
-
}
|
|
213
|
-
return `Context ~${k}k — this is getting long. Wrap up now before this context overflows: finish what's in hand, or \`crtr node yield\` immediately to continue fresh against your goal and your note if substantial work remains.`;
|
|
214
|
-
}
|
|
215
|
-
// terminal/base — a worker. The natural "keep going past this window" verb is
|
|
216
|
-
// `crtr node yield`: it refreshes into a clean window, mode-preserving, and
|
|
217
|
-
// continues fresh against your goal and your note. --promote is a separate
|
|
218
|
-
// opt-in for worthwhile parallel work, never steered as automatic. Steer it to
|
|
219
|
-
// yield-or-finish, never a bare promote.
|
|
220
|
-
if (at < 150_000) {
|
|
221
|
-
return `Context ~${k}k and growing. If you're near done, finish with \`crtr push final\`. If real work remains, \`crtr node yield\` to continue in a fresh window against your goal and your note — no rush yet.`;
|
|
222
|
-
}
|
|
223
|
-
if (!pushy) {
|
|
224
|
-
return `Context ~${k}k. If you're close, finish with \`crtr push final\`; otherwise \`crtr node yield\` now to refresh into a clean window and keep going against your goal and your note.`;
|
|
225
|
-
}
|
|
226
|
-
return `Context ~${k}k — this is getting long. Wrap up now before this context overflows: \`crtr push final\` if you're close, otherwise \`crtr node yield\` immediately to continue in a fresh window against your goal and your note.`;
|
|
227
|
-
}
|
|
228
|
-
// Extension
|
|
229
|
-
/**
|
|
230
|
-
* Register the canvas turn and settlement handlers on `pi`.
|
|
231
|
-
*
|
|
232
|
-
* Returns immediately when CRTR_NODE_ID is absent — the extension is fully
|
|
233
|
-
* inert in a non-canvas pi session. Safe to call multiple times (each call
|
|
234
|
-
* re-registers on the same `pi` instance, so it should only be called once
|
|
235
|
-
* per node lifecycle, matching how pi loads extensions).
|
|
236
|
-
*/
|
|
237
|
-
export function registerCanvasStophook(pi) {
|
|
238
|
-
const nodeId = envNodeId();
|
|
239
|
-
if (nodeId === undefined || nodeId.trim() === '')
|
|
240
|
-
return; // not a canvas node
|
|
241
|
-
const jobDirPath = jobDir(nodeId);
|
|
242
|
-
// Cumulative throughput across all turns in this pi session, for telemetry
|
|
243
|
-
// (job/telemetry.json) only — both turn_end and agent_end accumulate so tokens
|
|
244
|
-
// emitted in the final partial turn (if pi fires agent_end without a preceding
|
|
245
|
-
// turn_end for it) are captured. NOT used for context-size steering: that is a
|
|
246
|
-
// per-turn gauge (see contextTokens), not a running sum.
|
|
247
|
-
let totalIn = 0;
|
|
248
|
-
let totalOut = 0;
|
|
249
|
-
let model = '';
|
|
250
|
-
// Last live context-window gauge + last tool summary, tracked across handlers so
|
|
251
|
-
// a tool_execution_start flush (activity-only) preserves the latest token figure.
|
|
252
|
-
let lastContext = null;
|
|
253
|
-
let lastActivity = null;
|
|
254
|
-
// Context-size steering. As input context grows we nudge the node once per
|
|
255
|
-
// band on an escalating, persona-specific schedule (see steerBand/steerNote).
|
|
256
|
-
// The node's (lifecycle, mode) persona is read at fire time, since a terminal
|
|
257
|
-
// worker can promote mid-session: an orchestrator is steered to checkpoint
|
|
258
|
-
// its roadmap + yield; a resident base (root chat) to yield-or-wrap-up (or
|
|
259
|
-
// yield --promote only when worthwhile independent work can run in parallel);
|
|
260
|
-
// a terminal worker to yield-or-push-final.
|
|
261
|
-
const firedBands = new Set();
|
|
262
|
-
const backgroundJobsRunning = () => activeBackgroundBashJobs(contextDir(nodeId)).length > 0;
|
|
263
|
-
const emitDaemonOperationFailure = (operation, error) => {
|
|
264
|
-
emitEvent({
|
|
265
|
-
event: 'broker.daemon.operation.failed',
|
|
266
|
-
level: 'error',
|
|
267
|
-
node_id: nodeId,
|
|
268
|
-
error,
|
|
269
|
-
fields: { operation },
|
|
270
|
-
});
|
|
271
|
-
};
|
|
272
|
-
const enactSettleDirective = (directive, ctx) => {
|
|
273
|
-
if (directive.action === 'reprompt') {
|
|
274
|
-
announceMessageOrigin(directive.prompt, { type: 'runtime', kind: 'stop-guard' });
|
|
275
|
-
pi.sendUserMessage(directive.prompt, { deliverAs: 'followUp' });
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
if (directive.action === 'shutdown') {
|
|
279
|
-
try {
|
|
280
|
-
ctx?.shutdown?.();
|
|
281
|
-
}
|
|
282
|
-
catch { /* Pi shutdown is local best-effort */ }
|
|
283
|
-
}
|
|
284
|
-
};
|
|
285
|
-
// Streaming updates are rate-limited because daemon wedge grace is measured in minutes.
|
|
286
|
-
const HEARTBEAT_THROTTLE_MS = 3_000;
|
|
287
|
-
let lastHeartbeatAt = 0;
|
|
288
|
-
const heartbeat = () => {
|
|
289
|
-
const now = Date.now();
|
|
290
|
-
if (now - lastHeartbeatAt < HEARTBEAT_THROTTLE_MS)
|
|
291
|
-
return;
|
|
292
|
-
lastHeartbeatAt = now;
|
|
293
|
-
void Promise.all([
|
|
294
|
-
recordBrokerTurn(nodeId, { event: 'progress' }),
|
|
295
|
-
mutateBrokerFault(nodeId, { op: 'clear', link: 'daemon→node' }),
|
|
296
|
-
]).catch((error) => emitDaemonOperationFailure('turn_progress', error));
|
|
297
|
-
};
|
|
298
|
-
// session_start — capture pi's session id, and detect `/new`.
|
|
299
|
-
//
|
|
300
|
-
// pi tags each session_start with a `reason`: 'startup' on boot (a fresh
|
|
301
|
-
// launch or a daemon revive — both new processes), 'new' when the user runs
|
|
302
|
-
// `/new` (a brand-new conversation in the SAME process), and 'resume' /
|
|
303
|
-
// 'reload' / 'fork' for the in-place conversation swaps that keep the same
|
|
304
|
-
// node. We branch on that reason — NOT on a remembered session id.
|
|
305
|
-
//
|
|
306
|
-
// Why reason, not a closure flag: pi RE-ACTIVATES extensions on every session
|
|
307
|
-
// swap, so any id we stash on boot is reset to its initial value before the
|
|
308
|
-
// next session_start fires and can never observe the change — a `/new` then
|
|
309
|
-
// looks identical to a boot. The event reason is delivered fresh on every fire
|
|
310
|
-
// and is immune to the re-activation.
|
|
311
|
-
//
|
|
312
|
-
// `/new` splits by who ran it: crtrd derives rootness from the node row and
|
|
313
|
-
// either directs a root relaunch or resets a child's session coordinates.
|
|
314
|
-
pi.on('session_start', async (event, ctx) => {
|
|
315
|
-
try {
|
|
316
|
-
const id = ctx?.sessionManager?.getSessionId?.();
|
|
317
|
-
if (typeof id !== 'string' || id === '')
|
|
318
|
-
return;
|
|
319
|
-
// The absolute path to this session's .jsonl, captured alongside the id.
|
|
320
|
-
// Resuming by path is immune to a cwd discrepancy (pi opens it directly),
|
|
321
|
-
// whereas a bare id is resolved cwd-relative and forks across projects.
|
|
322
|
-
const filed = ctx?.sessionManager?.getSessionFile?.();
|
|
323
|
-
const sessionFile = typeof filed === 'string' && filed !== '' ? filed : null;
|
|
324
|
-
const reason = typeof event?.reason === 'string' ? event.reason : null;
|
|
325
|
-
// Pi has already swapped to the fresh conversation. Its local steering
|
|
326
|
-
// counters reset independently of the durable root/child consequence.
|
|
327
|
-
if (reason === 'new') {
|
|
328
|
-
totalIn = 0;
|
|
329
|
-
totalOut = 0;
|
|
330
|
-
firedBands.clear();
|
|
331
|
-
}
|
|
332
|
-
// crtrd validates the review binding and fork coordinates, derives whether
|
|
333
|
-
// this node is a root, and commits every durable session-start mutation.
|
|
334
|
-
const binding = await bindBrokerSession(nodeId, {
|
|
335
|
-
piSessionId: id,
|
|
336
|
-
sessionFile,
|
|
337
|
-
pid: process.pid,
|
|
338
|
-
reason,
|
|
339
|
-
reviewBoundaryIds: currentReviewBoundaryIds(ctx),
|
|
340
|
-
});
|
|
341
|
-
if (binding.action === 'shutdown') {
|
|
342
|
-
try {
|
|
343
|
-
ctx?.shutdown?.();
|
|
344
|
-
}
|
|
345
|
-
catch { /* best-effort */ }
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
if (binding.action === 'relaunch_root') {
|
|
349
|
-
// The session-bound handler selects this consequence but never calls
|
|
350
|
-
// back into its calling broker. Do not await the operation that tears
|
|
351
|
-
// this broker down from Pi's session-start dispatch.
|
|
352
|
-
void relaunchBrokerRoot(nodeId).catch((error) => {
|
|
353
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
354
|
-
ctx?.ui?.notify?.(`/new refused: ${message}`, 'error');
|
|
355
|
-
emitEvent({
|
|
356
|
-
event: 'broker.daemon.operation.failed',
|
|
357
|
-
level: 'error',
|
|
358
|
-
node_id: nodeId,
|
|
359
|
-
error,
|
|
360
|
-
fields: { operation: 'relaunch_root' },
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
catch (error) {
|
|
367
|
-
// Binding failure leaves Pi alive; crtrd remains the only process that
|
|
368
|
-
// can retry or reconcile the durable state.
|
|
369
|
-
emitEvent({
|
|
370
|
-
event: 'broker.daemon.operation.failed',
|
|
371
|
-
level: 'error',
|
|
372
|
-
node_id: nodeId,
|
|
373
|
-
error,
|
|
374
|
-
fields: { operation: 'session_bound' },
|
|
375
|
-
});
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
// agent_start — pi entered a turn. Mark the node mid-turn (busy) so a
|
|
379
|
-
// focus-away while it is genuinely working backstages it (Invariant F2)
|
|
380
|
-
// rather than reaping it. Cleared only after the whole run settles.
|
|
381
|
-
pi.on('agent_start', async (_event, ctx) => {
|
|
382
|
-
// A turn may not enter Pi until crtrd has fenced and recorded it. Otherwise
|
|
383
|
-
// a broker that lost daemon ownership can run work with no durable turn.
|
|
384
|
-
try {
|
|
385
|
-
const result = await recordBrokerTurn(nodeId, { event: 'started' });
|
|
386
|
-
if (!result.applied)
|
|
387
|
-
throw new Error('daemon refused turn open');
|
|
388
|
-
}
|
|
389
|
-
catch (error) {
|
|
390
|
-
emitDaemonOperationFailure('turn_open', error);
|
|
391
|
-
ctx?.ui?.notify?.('Turn refused: the broker no longer owns this node.', 'error');
|
|
392
|
-
refuseTurn(() => ctx?.abort?.());
|
|
393
|
-
}
|
|
394
|
-
});
|
|
395
|
-
// input — a new user-directed run is beginning. This is the ONLY place stop
|
|
396
|
-
// signals are cleared: `agent_start` re-fires for pi's automatic retries and
|
|
397
|
-
// post-compaction continuations within the SAME run, so clearing there would
|
|
398
|
-
// erase the `crtr human send` / `crtr push final` marker written earlier in the
|
|
399
|
-
// run and make the eventual settlement fall back to a canvas read (exactly the
|
|
400
|
-
// read the marker exists to avoid). One run's markers survive until the one
|
|
401
|
-
// `agent_settled` consumes them; a leftover from an errored or interrupted run
|
|
402
|
-
// of this same broker is discarded here, when the next prompt arrives (the pid
|
|
403
|
-
// stamp only rules out a PRIOR broker's markers, not this broker's own).
|
|
404
|
-
pi.on('input', () => {
|
|
405
|
-
clearRefusedTurn();
|
|
406
|
-
try {
|
|
407
|
-
clearStopSignals(nodeId);
|
|
408
|
-
}
|
|
409
|
-
catch { /* best-effort */ }
|
|
410
|
-
});
|
|
411
|
-
// tool_execution_start — capture the live "what is it doing" cue. Writes the
|
|
412
|
-
// one-line tool summary to telemetry.json so out-of-process readers (the nav
|
|
413
|
-
// chrome) show it inline without a second file or any extra read on their side.
|
|
414
|
-
pi.on('tool_execution_start', (event) => {
|
|
415
|
-
try {
|
|
416
|
-
lastActivity = summarizeActivity(String(event?.toolName ?? ''), event?.args);
|
|
417
|
-
flushTelemetry(jobDirPath, totalIn, totalOut, model, lastContext, lastActivity);
|
|
418
|
-
heartbeat(); // a fresh tool starting is a sign of life
|
|
419
|
-
}
|
|
420
|
-
catch { /* best-effort */ }
|
|
421
|
-
});
|
|
422
|
-
// tool_execution_update — wedge heartbeat + fault clear only. Fired with
|
|
423
|
-
// partial/streaming tool output (when a tool reports progress); throttled via
|
|
424
|
-
// `heartbeat()` since it can arrive many times per second. Most tools (e.g.
|
|
425
|
-
// bash) don't stream progress today, so this is currently a light-touch no-op
|
|
426
|
-
// for them — it exists so any tool that DOES stream partial output (now or in
|
|
427
|
-
// the future) counts as live progress instead of tripping the wedge detector,
|
|
428
|
-
// AND clears any wedge notice that already fired before this progress resumed.
|
|
429
|
-
pi.on('tool_execution_update', () => {
|
|
430
|
-
try {
|
|
431
|
-
heartbeat();
|
|
432
|
-
}
|
|
433
|
-
catch { /* best-effort */ }
|
|
434
|
-
});
|
|
435
|
-
// message_update — wedge heartbeat + fault clear only. Fired token-by-token
|
|
436
|
-
// while the assistant is actively streaming a reply — genuine progress,
|
|
437
|
-
// throttled the same way, and equally clears a stale wedge notice if streaming
|
|
438
|
-
// resumes before a coarser boundary. A node stuck streaming forever without
|
|
439
|
-
// ever firing this is exactly the daemon's busy+quiet wedge signature.
|
|
440
|
-
pi.on('message_update', () => {
|
|
441
|
-
try {
|
|
442
|
-
heartbeat();
|
|
443
|
-
}
|
|
444
|
-
catch { /* best-effort */ }
|
|
445
|
-
});
|
|
446
|
-
// tool_execution_end — IMMEDIATE refresh-yield. When a tool this turn set
|
|
447
|
-
// intent='refresh' (the node ran `crtr node yield`), shut the broker down NOW
|
|
448
|
-
// instead of letting the model keep burning its bloated context to the turn's
|
|
449
|
-
// natural end (the settlement backstop would only catch it there). The yield
|
|
450
|
-
// command persists the yield-message + any existing roadmap checkpoint BEFORE
|
|
451
|
-
// it returns, so by the time this fires nothing is lost. Abort the live turn,
|
|
452
|
-
// then request shutdown; the broker exits after pi's settle boundary. The
|
|
453
|
-
// daemon then sees the dead pid + intent='refresh' and revives the node FRESH
|
|
454
|
-
// against its roadmap if it has one, else its original goal.
|
|
455
|
-
// intent only flips to 'refresh' via `node yield`, so this can't false-fire.
|
|
456
|
-
// (A node that somehow boots already carrying intent='refresh' correctly
|
|
457
|
-
// refreshes on its first tool — the desired outcome.)
|
|
458
|
-
pi.on('tool_execution_end', async (_event, ctx) => {
|
|
459
|
-
try {
|
|
460
|
-
heartbeat(); // a tool that returned is a sign of life
|
|
461
|
-
if ((await brokerExtensionState(nodeId)).node.intent === 'refresh') {
|
|
462
|
-
// Stop this turn immediately so the large context does not keep running.
|
|
463
|
-
// The broker clears Pi's queued steering/follow-up messages inside this
|
|
464
|
-
// refresh scope; their durable inbox entries stay uncommitted and the
|
|
465
|
-
// fresh kickoff replays them. Leave the broker alive through
|
|
466
|
-
// agent_settled: only a successful daemon settle directive may request
|
|
467
|
-
// Pi shutdown.
|
|
468
|
-
try {
|
|
469
|
-
runRefreshAbort(() => ctx?.abort?.());
|
|
470
|
-
}
|
|
471
|
-
catch { /* ignore */ }
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
catch { /* best-effort */ }
|
|
475
|
-
});
|
|
476
|
-
// session_shutdown — Pi's clean /quit fact goes to crtrd, which owns the
|
|
477
|
-
// finish transition, focus teardown, presence clear, and fault clear. Other
|
|
478
|
-
// session swaps keep the same node and need no durable settlement.
|
|
479
|
-
pi.on('session_shutdown', async (event, ctx) => {
|
|
480
|
-
try {
|
|
481
|
-
await recordBrokerTurn(nodeId, { event: 'closed', end_reason: 'teardown-aborted' });
|
|
482
|
-
}
|
|
483
|
-
catch (error) {
|
|
484
|
-
emitDaemonOperationFailure('turn_close_teardown', error);
|
|
485
|
-
}
|
|
486
|
-
if (event?.reason !== 'quit')
|
|
487
|
-
return;
|
|
488
|
-
try {
|
|
489
|
-
const directive = await settleBroker(nodeId, {
|
|
490
|
-
stopReason: 'quit',
|
|
491
|
-
backgroundJobsRunning: backgroundJobsRunning(),
|
|
492
|
-
pushedFinal: false,
|
|
493
|
-
requestedHumanReply: false,
|
|
494
|
-
});
|
|
495
|
-
enactSettleDirective(directive, ctx);
|
|
496
|
-
}
|
|
497
|
-
catch (error) {
|
|
498
|
-
emitDaemonOperationFailure('settle_quit', error);
|
|
499
|
-
}
|
|
500
|
-
});
|
|
501
|
-
/** Absorb usage + model from any assistant message (turn or final batch). */
|
|
502
|
-
const accumulate = (msg) => {
|
|
503
|
-
if (msg?.role !== 'assistant' || msg.usage == null)
|
|
504
|
-
return;
|
|
505
|
-
totalIn += Number(msg.usage.input ?? 0) || 0;
|
|
506
|
-
totalOut += Number(msg.usage.output ?? 0) || 0;
|
|
507
|
-
if (typeof msg.model === 'string' && msg.model !== '')
|
|
508
|
-
model = msg.model;
|
|
509
|
-
};
|
|
510
|
-
// turn_end — live telemetry refresh.
|
|
511
|
-
// event shape: { message: AssistantMessage, ... }
|
|
512
|
-
pi.on('turn_end', async (event, ctx) => {
|
|
513
|
-
accumulate(event?.message);
|
|
514
|
-
// The CURRENT context size via ctx.getContextUsage() — the exact figure pi's
|
|
515
|
-
// footer shows. Captured once here for two consumers: the telemetry flush
|
|
516
|
-
// (so out-of-process readers like `crtr node new` can size this node) and
|
|
517
|
-
// the context-size steering below.
|
|
518
|
-
// .tokens is null/undefined only when pi can't know the size yet (no model,
|
|
519
|
-
// or right after a compaction before the next reply) — telemetry then keeps
|
|
520
|
-
// its last value and steering is skipped for the turn.
|
|
521
|
-
let contextTokens = null;
|
|
522
|
-
try {
|
|
523
|
-
const t = ctx.getContextUsage()?.tokens;
|
|
524
|
-
if (typeof t === 'number')
|
|
525
|
-
contextTokens = t;
|
|
526
|
-
}
|
|
527
|
-
catch { /* gauge unavailable this turn */ }
|
|
528
|
-
if (contextTokens !== null)
|
|
529
|
-
lastContext = contextTokens;
|
|
530
|
-
// Fire-and-forget: flushTelemetry uses synchronous fs writes and never throws.
|
|
531
|
-
flushTelemetry(jobDirPath, totalIn, totalOut, model, contextTokens, lastActivity);
|
|
532
|
-
heartbeat(); // reaching turn_end proves this turn was not wedged
|
|
533
|
-
try {
|
|
534
|
-
await Promise.all([
|
|
535
|
-
mutateBrokerFault(nodeId, { op: 'clear', link: 'daemon→node' }),
|
|
536
|
-
mutateBrokerFault(nodeId, { op: 'clear', link: 'pi→provider' }),
|
|
537
|
-
]);
|
|
538
|
-
}
|
|
539
|
-
catch (error) {
|
|
540
|
-
emitDaemonOperationFailure('turn_end_fault_clear', error);
|
|
541
|
-
}
|
|
542
|
-
// Will the agent run CONTINUE past this turn? Deterministic at turn_end:
|
|
543
|
-
// the loop keeps going exactly when this assistant message carried tool
|
|
544
|
-
// calls and the run wasn't aborted/errored (those end unconditionally,
|
|
545
|
-
// before tools execute). A tool-calling turn ends with stopReason
|
|
546
|
-
// 'toolUse' — or 'length' when truncation failed the calls, which still
|
|
547
|
-
// continues the loop — NEVER 'stop', so gate on the abort/error reasons,
|
|
548
|
-
// not on an allowlist that excludes 'toolUse'.
|
|
549
|
-
// This handler runs BEFORE the loop drains the steering queue, so the read
|
|
550
|
-
// is race-free: zero tool calls ⇒ this is the run's FINAL message, and a
|
|
551
|
-
// steer sent now would not redirect at a boundary — it would EXTEND the run
|
|
552
|
-
// past the agent's closing reply, burying the summary the human comes back
|
|
553
|
-
// to read once the conversation goes quiet.
|
|
554
|
-
const turnContent = Array.isArray(event?.message?.content) ? event.message.content : [];
|
|
555
|
-
const turnStopReason = event?.message?.stopReason ?? '';
|
|
556
|
-
const runContinues = turnStopReason !== 'error' &&
|
|
557
|
-
turnStopReason !== 'aborted' &&
|
|
558
|
-
turnContent.some((c) => c?.type === 'toolCall');
|
|
559
|
-
// Context-size steering: fire the current band once, with lifecycle-specific
|
|
560
|
-
// guidance (lifecycle is read live — a terminal worker may have promoted to
|
|
561
|
-
// resident since launch).
|
|
562
|
-
// Delivery splits on runContinues:
|
|
563
|
-
// • mid-run → STEER, not a followUp: guidance to become an orchestrator /
|
|
564
|
-
// delegate / yield must redirect the node at the turn boundary, not queue
|
|
565
|
-
// behind whatever it does next (where it rides along, easy to ignore).
|
|
566
|
-
// • final message → HOLD via pi's 'nextTurn' queue: it injects alongside
|
|
567
|
-
// the next user message without triggering a turn, so the nudge is read
|
|
568
|
-
// at the start of the next engagement instead of spawning a phantom
|
|
569
|
-
// continuation after the agent already said its piece.
|
|
570
|
-
// Never the cumulative totalIn: under prompt caching that never grows (input
|
|
571
|
-
// is a ~2-token uncached delta each turn), so the bands were unreachable and
|
|
572
|
-
// the nudge never fired.
|
|
573
|
-
try {
|
|
574
|
-
const state = await brokerExtensionState(nodeId);
|
|
575
|
-
const node = state.node;
|
|
576
|
-
const at = contextTokens !== null ? steerBand(contextTokens) : null;
|
|
577
|
-
if (at !== null && !firedBands.has(at)) {
|
|
578
|
-
firedBands.add(at);
|
|
579
|
-
const note = formatCard('context-nudge', {}, steerNote(at, node.lifecycle, node.mode));
|
|
580
|
-
if (runContinues) {
|
|
581
|
-
announceMessageOrigin(note, { type: 'runtime', kind: 'context-nudge' });
|
|
582
|
-
pi.sendUserMessage(note, { deliverAs: 'steer' });
|
|
583
|
-
}
|
|
584
|
-
else {
|
|
585
|
-
pi.sendMessage({ customType: CONTEXT_NUDGE_CUSTOM_TYPE, content: note, display: true }, { deliverAs: 'nextTurn' });
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
catch (error) {
|
|
590
|
-
emitDaemonOperationFailure('turn_boundary', error);
|
|
591
|
-
}
|
|
592
|
-
});
|
|
593
|
-
// Pi may emit several agent_end attempts while it compacts, retries, and
|
|
594
|
-
// drains queued continuations. Keep only the latest attempt here; no lifecycle
|
|
595
|
-
// effect is committed until Pi declares the whole run settled.
|
|
596
|
-
let stagedAgentEnd = null;
|
|
597
|
-
pi.on('agent_end', (event) => {
|
|
598
|
-
stagedAgentEnd = event;
|
|
599
|
-
try {
|
|
600
|
-
const messages = Array.isArray(event?.messages) ? event.messages : [];
|
|
601
|
-
for (const message of messages)
|
|
602
|
-
accumulate(message);
|
|
603
|
-
}
|
|
604
|
-
catch { /* best-effort */ }
|
|
605
|
-
});
|
|
606
|
-
// agent_settled — Pi supplies stop facts; crtrd commits every canvas effect
|
|
607
|
-
// and returns the one Pi-side consequence to enact.
|
|
608
|
-
pi.on('agent_settled', async (_event, ctx) => {
|
|
609
|
-
const event = stagedAgentEnd;
|
|
610
|
-
stagedAgentEnd = null;
|
|
611
|
-
// crtrd owns the durable turn close, fault marker, stop policy, lifecycle
|
|
612
|
-
// transition, focus, and mail decision even when Pi had no stageable final
|
|
613
|
-
// agent_end payload.
|
|
614
|
-
try {
|
|
615
|
-
await recordBrokerTurn(nodeId, { event: 'closed', end_reason: 'settled' });
|
|
616
|
-
}
|
|
617
|
-
catch (error) {
|
|
618
|
-
emitDaemonOperationFailure('turn_close', error);
|
|
619
|
-
return;
|
|
620
|
-
}
|
|
621
|
-
const messages = Array.isArray(event?.messages) ? event.messages : [];
|
|
622
|
-
const last = lastAssistantMessage(messages);
|
|
623
|
-
const stopReason = typeof last?.stopReason === 'string' ? last.stopReason : '';
|
|
624
|
-
const stopSignals = event === null
|
|
625
|
-
? { pushedFinal: false, requestedHumanReply: false }
|
|
626
|
-
: consumeStopSignals(nodeId);
|
|
627
|
-
try {
|
|
628
|
-
const directive = await settleBroker(nodeId, {
|
|
629
|
-
stopReason,
|
|
630
|
-
backgroundJobsRunning: backgroundJobsRunning(),
|
|
631
|
-
pushedFinal: stopSignals.pushedFinal,
|
|
632
|
-
requestedHumanReply: stopSignals.requestedHumanReply,
|
|
633
|
-
});
|
|
634
|
-
enactSettleDirective(directive, ctx);
|
|
635
|
-
}
|
|
636
|
-
catch (error) {
|
|
637
|
-
// A daemon failure is observable and leaves this broker alive; it must not
|
|
638
|
-
// masquerade as a completed release, teardown, or cursor settlement.
|
|
639
|
-
emitDaemonOperationFailure('settle', error);
|
|
640
|
-
}
|
|
641
|
-
});
|
|
642
|
-
}
|
|
643
|
-
export default registerCanvasStophook;
|
|
1
|
+
var H=Object.defineProperty;var u=(t,e)=>H(t,"name",{value:e,configurable:!0});import{envNodeId as U}from"../shared/env.js";import{writeFileSync as J,mkdirSync as P,existsSync as E,readFileSync as j}from"node:fs";import{join as W}from"node:path";import{contextDir as Y,jobDir as z}from"../core/canvas/paths.js";import{mutateBrokerFault as A,recordBrokerTurn as b}from"../core/runtime/broker/daemon-ops.js";import{clearStopSignals as G,consumeStopSignals as L}from"../core/runtime/stop-signals.js";import{bindBrokerSession as V,brokerExtensionState as $,relaunchBrokerRoot as X,settleBroker as M}from"../core/runtime/broker/daemon-ops.js";import{emitEvent as R}from"../core/events/emit.js";import{activeBackgroundBashJobs as K}from"../core/bash-jobs.js";import{CONTEXT_NUDGE_CUSTOM_TYPE as Q,formatCard as Z}from"../shared/generated-context.js";import{isReviewBoundary as ee}from"../core/runtime/session-visibility.js";import{clearRefusedTurn as te,refuseTurn as ne,runRefreshAbort as oe}from"../core/runtime/broker/extension-abort.js";import{announceMessageOrigin as F}from"../core/runtime/stamp/channel.js";const O=80;function re(t,e){const a=e??{},o=u(f=>typeof f=="string"?f:"","pick"),i=o(a.command)||o(a.path)||o(a.file_path)||o(a.pattern)||o(a.description)||o(a.prompt),l=(i!==""?`${t}: ${i}`:t).replace(/\s+/g," ").trim();return l.length>O?l.slice(0,O):l}u(re,"summarizeActivity");function N(t,e,a,o,i,l){try{E(t)||P(t,{recursive:!0});const f=W(t,"telemetry.json");let h={};if(E(f))try{h=JSON.parse(j(f,"utf8"))}catch{}const _={tokens_in:e,tokens_out:a,context_tokens:i??h.context_tokens,last_activity:l??h.last_activity,model:o!==""?o:h.model??"",updated_at:new Date().toISOString()};J(f,JSON.stringify(_,null,2),"utf8")}catch{}}u(N,"flushTelemetry");function se(t){for(let e=t.length-1;e>=0;e--)if(t[e]?.role==="assistant")return t[e]}u(se,"lastAssistantMessage");function ae(t){try{const e=t?.sessionManager?.getBranch();if(!Array.isArray(e))return[];const a=new Set;for(const o of e){if(!ee(o))continue;const i=o.details?.reviewId;typeof i=="string"&&a.add(i)}return[...a]}catch{return[]}}u(ae,"currentReviewBoundaryIds");const q=1e4,v=[13e4,15e4,17e4,185e3,2e5];function ie(t){const e=v[0],a=v[v.length-1];if(t<e)return null;if(t>=a)return a+Math.floor((t-a)/q)*q;let o=e;for(const i of v)t>=i&&(o=i);return o}u(ie,"steerBand");function ce(t,e,a){const o=Math.round(t/1e3),i=t>=185e3;if(a==="orchestrator")return t<15e4?`Context ~${o}k and growing. When you reach a good stopping point, consider updating context/roadmap.md and running \`crtr node yield\` to refresh against it \u2014 no rush yet.`:i?`Context ~${o}k \u2014 this is getting long. Stop taking on new work now: checkpoint context/roadmap.md, hand off anything outstanding, and \`crtr node yield\` immediately to refresh before this context overflows.`:`Context ~${o}k. Update context/roadmap.md so a fresh revive can continue, delegate any outstanding work, then \`crtr node yield\` to refresh.`;if(e==="resident"){const l="If substantial work remains, `crtr node yield` to continue fresh against your goal and your note. Add --promote only when worthwhile independent work can run in parallel and coordinating it should become your primary job; `crtr node yield -h` has the boundary.";return t<15e4?`Context ~${o}k and growing. ${l} Otherwise no rush \u2014 wrap up when you reach a good stopping point.`:i?`Context ~${o}k \u2014 this is getting long. Wrap up now before this context overflows: finish what's in hand, or \`crtr node yield\` immediately to continue fresh against your goal and your note if substantial work remains.`:`Context ~${o}k. ${l} If you're near done, just finish here; if there's more open-ended work, \`crtr node yield\` rather than letting this context grow.`}return t<15e4?`Context ~${o}k and growing. If you're near done, finish with \`crtr push final\`. If real work remains, \`crtr node yield\` to continue in a fresh window against your goal and your note \u2014 no rush yet.`:i?`Context ~${o}k \u2014 this is getting long. Wrap up now before this context overflows: \`crtr push final\` if you're close, otherwise \`crtr node yield\` immediately to continue in a fresh window against your goal and your note.`:`Context ~${o}k. If you're close, finish with \`crtr push final\`; otherwise \`crtr node yield\` now to refresh into a clean window and keep going against your goal and your note.`}u(ce,"steerNote");function ue(t){const e=U();if(e===void 0||e.trim()==="")return;const a=z(e);let o=0,i=0,l="",f=null,h=null;const _=new Set,T=u(()=>K(Y(e)).length>0,"backgroundJobsRunning"),y=u((n,s)=>{R({event:"broker.daemon.operation.failed",level:"error",node_id:e,error:s,fields:{operation:n}})},"emitDaemonOperationFailure"),C=u((n,s)=>{if(n.action==="reprompt"){F(n.prompt,{type:"runtime",kind:"stop-guard"}),t.sendUserMessage(n.prompt,{deliverAs:"followUp"});return}if(n.action==="shutdown")try{s?.shutdown?.()}catch{}},"enactSettleDirective"),D=3e3;let I=0;const k=u(()=>{const n=Date.now();n-I<D||(I=n,Promise.all([b(e,{event:"progress"}),A(e,{op:"clear",link:"daemon\u2192node"})]).catch(s=>y("turn_progress",s)))},"heartbeat");t.on("session_start",async(n,s)=>{try{const r=s?.sessionManager?.getSessionId?.();if(typeof r!="string"||r==="")return;const g=s?.sessionManager?.getSessionFile?.(),p=typeof g=="string"&&g!==""?g:null,m=typeof n?.reason=="string"?n.reason:null;m==="new"&&(o=0,i=0,_.clear());const c=await V(e,{piSessionId:r,sessionFile:p,pid:process.pid,reason:m,reviewBoundaryIds:ae(s)});if(c.action==="shutdown"){try{s?.shutdown?.()}catch{}return}if(c.action==="relaunch_root"){X(e).catch(d=>{const w=d instanceof Error?d.message:String(d);s?.ui?.notify?.(`/new refused: ${w}`,"error"),R({event:"broker.daemon.operation.failed",level:"error",node_id:e,error:d,fields:{operation:"relaunch_root"}})});return}}catch(r){R({event:"broker.daemon.operation.failed",level:"error",node_id:e,error:r,fields:{operation:"session_bound"}})}}),t.on("agent_start",async(n,s)=>{try{if(!(await b(e,{event:"started"})).applied)throw new Error("daemon refused turn open")}catch(r){y("turn_open",r),s?.ui?.notify?.("Turn refused: the broker no longer owns this node.","error"),ne(()=>s?.abort?.())}}),t.on("input",()=>{te();try{G(e)}catch{}}),t.on("tool_execution_start",n=>{try{h=re(String(n?.toolName??""),n?.args),N(a,o,i,l,f,h),k()}catch{}}),t.on("tool_execution_update",()=>{try{k()}catch{}}),t.on("message_update",()=>{try{k()}catch{}}),t.on("tool_execution_end",async(n,s)=>{try{if(k(),(await $(e)).node.intent==="refresh")try{oe(()=>s?.abort?.())}catch{}}catch{}}),t.on("session_shutdown",async(n,s)=>{try{await b(e,{event:"closed",end_reason:"teardown-aborted"})}catch(r){y("turn_close_teardown",r)}if(n?.reason==="quit")try{const r=await M(e,{stopReason:"quit",backgroundJobsRunning:T(),pushedFinal:!1,requestedHumanReply:!1});C(r,s)}catch(r){y("settle_quit",r)}});const B=u(n=>{n?.role!=="assistant"||n.usage==null||(o+=Number(n.usage.input??0)||0,i+=Number(n.usage.output??0)||0,typeof n.model=="string"&&n.model!==""&&(l=n.model))},"accumulate");t.on("turn_end",async(n,s)=>{B(n?.message);let r=null;try{const c=s.getContextUsage()?.tokens;typeof c=="number"&&(r=c)}catch{}r!==null&&(f=r),N(a,o,i,l,r,h),k();try{await Promise.all([A(e,{op:"clear",link:"daemon\u2192node"}),A(e,{op:"clear",link:"pi\u2192provider"})])}catch(c){y("turn_end_fault_clear",c)}const g=Array.isArray(n?.message?.content)?n.message.content:[],p=n?.message?.stopReason??"",m=p!=="error"&&p!=="aborted"&&g.some(c=>c?.type==="toolCall");try{const d=(await $(e)).node,w=r!==null?ie(r):null;if(w!==null&&!_.has(w)){_.add(w);const x=Z("context-nudge",{},ce(w,d.lifecycle,d.mode));m?(F(x,{type:"runtime",kind:"context-nudge"}),t.sendUserMessage(x,{deliverAs:"steer"})):t.sendMessage({customType:Q,content:x,display:!0},{deliverAs:"nextTurn"})}}catch(c){y("turn_boundary",c)}});let S=null;t.on("agent_end",n=>{S=n;try{const s=Array.isArray(n?.messages)?n.messages:[];for(const r of s)B(r)}catch{}}),t.on("agent_settled",async(n,s)=>{const r=S;S=null;try{await b(e,{event:"closed",end_reason:"settled"})}catch(d){y("turn_close",d);return}const g=Array.isArray(r?.messages)?r.messages:[],p=se(g),m=typeof p?.stopReason=="string"?p.stopReason:"",c=r===null?{pushedFinal:!1,requestedHumanReply:!1}:L(e);try{const d=await M(e,{stopReason:m,backgroundJobsRunning:T(),pushedFinal:c.pushedFinal,requestedHumanReply:c.requestedHumanReply});C(d,s)}catch(d){y("settle",d)}})}u(ue,"registerCanvasStophook");var xe=ue;export{xe as default,ue as registerCanvasStophook,ce as steerNote};
|