@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,939 +1 @@
|
|
|
1
|
-
// Node resource + lifecycle handlers (spec §6.2, §7.7). Create, list, detail,
|
|
2
|
-
// the read endpoints (snapshot/transcript/context/artifacts), the lifecycle
|
|
3
|
-
// verbs (revive/close/recycle/demote/promote/yield/wait + revive-all), and the
|
|
4
|
-
// config PATCH. Each relocates the sanctioned core primitive behind the API
|
|
5
|
-
// caller and projects through map.ts (or an inlined server-side projection where
|
|
6
|
-
// map.ts carries no projector — it is frozen under concurrency).
|
|
7
|
-
//
|
|
8
|
-
// `{id}` is the target node.
|
|
9
|
-
import { envProfileId } from '../../../shared/env.js';
|
|
10
|
-
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
11
|
-
import { basename, isAbsolute, resolve } from 'node:path';
|
|
12
|
-
import { appendSituationalContext, formatSituationalProse } from '../../../core/runtime/situational-context.js';
|
|
13
|
-
import { closeNode } from '../../../core/runtime/close.js';
|
|
14
|
-
import { reviveNode } from '../../../core/runtime/revive.js';
|
|
15
|
-
import { nowIso } from '../../../core/fs-utils.js';
|
|
16
|
-
import { assertLaunchModelRegistered, forkNode, spawnChildPrepared } from '../../../core/runtime/spawn.js';
|
|
17
|
-
import { childrenOf, getNode, listNodes, subscribersOf, subscriptionsOf, setMessageWait, updateNode } from '../../../core/canvas/canvas.js';
|
|
18
|
-
import { subtreeIds } from '../../../core/canvas/nav-model.js';
|
|
19
|
-
import { withCanvasWrite } from '../../../core/canvas/db.js';
|
|
20
|
-
import { unbindSession } from '../../../core/canvas/sessions.js';
|
|
21
|
-
import { ticketCountsForNodes } from '../../../core/canvas/attention.js';
|
|
22
|
-
import { contextDir, reportsDir } from '../../../core/canvas/paths.js';
|
|
23
|
-
import { nodeArtifacts } from '../../../core/canvas/history.js';
|
|
24
|
-
import { readNodeMessagesPage, readNodeSession, readNodeSnapshot, transcriptMarkdown } from '../../../core/runtime/node-read.js';
|
|
25
|
-
import { assembleNodeSubject } from '../../../core/substrate/subject.js';
|
|
26
|
-
import { reviveAll } from '../../../core/runtime/revive-all.js';
|
|
27
|
-
import { promoteAsync, requestYieldAsync, reshapeNodeAsync } from '../../../core/runtime/promote.js';
|
|
28
|
-
import { recycleNode } from '../../../core/runtime/recycle.js';
|
|
29
|
-
import { relaunchRoot } from '../../../core/runtime/reset.js';
|
|
30
|
-
import { assertReopenGate } from '../../../core/runtime/reopen.js';
|
|
31
|
-
import { writeYieldMessage, readGoal } from '../../../core/runtime/kickoff.js';
|
|
32
|
-
import { hasRoadmap, seedRoadmap } from '../../../core/runtime/roadmap.js';
|
|
33
|
-
import { renameWindow } from '../../../core/runtime/placement.js';
|
|
34
|
-
import { buildLaunchSpecAsync, isProviderPinnedModelToken, normalizeModel, readMergedLaunchConfigAsync } from '../../../core/runtime/launch.js';
|
|
35
|
-
import { modelRequestFromConfig } from '../../../core/model-routes.js';
|
|
36
|
-
import { BrokerUnreachableError } from '../../../core/runtime/broker-request.js';
|
|
37
|
-
import { isBrokerLive, persistDormantModel, setModelLive } from '../../../core/runtime/model-swap.js';
|
|
38
|
-
import { boundFleet } from '../../../core/runtime/fleet.js';
|
|
39
|
-
import { writeOutputSchema } from '../../../core/runtime/structured-output.js';
|
|
40
|
-
import { OUTCOME_PAYLOAD_MAX_BYTES } from '../../../core/canvas/types.js';
|
|
41
|
-
import { HUMAN_ACTION_NAME_PATTERN } from '../../../core/human/action-binding.js';
|
|
42
|
-
import { resolveHumanAction } from '../../../core/human-actions.js';
|
|
43
|
-
import { parseDurationMs } from '../../../core/wake.js';
|
|
44
|
-
import { claimWarmNode, refillWarmPool, warmPoolEnabled } from '../../../core/runtime/warm-pool.js';
|
|
45
|
-
import { resolveLaunchTarget } from '../../../core/runtime/launch-target.js';
|
|
46
|
-
import { fullName } from '../../../core/canvas/labels.js';
|
|
47
|
-
import { reportsForNode } from './reports.js';
|
|
48
|
-
import { getCron } from '../../../core/canvas/crons.js';
|
|
49
|
-
import { cronWakeOrigin } from '../../../core/runtime/bearings.js';
|
|
50
|
-
import { boundDaemonControl } from '../../control.js';
|
|
51
|
-
import { notFound, usage } from '../../../core/errors.js';
|
|
52
|
-
import { toCloseResultDTO, toNodeDetailDTO, toNodeSummaryDTO, toReviveResultDTO } from '../map.js';
|
|
53
|
-
import { ApiError } from '../../../api/index.js';
|
|
54
|
-
import { InputError } from '../../../core/io.js';
|
|
55
|
-
// Shared helpers
|
|
56
|
-
function requireMeta(id) {
|
|
57
|
-
const meta = getNode(id);
|
|
58
|
-
if (meta === null)
|
|
59
|
-
throw notFound(`unknown node: ${id}`, { received: id });
|
|
60
|
-
return meta;
|
|
61
|
-
}
|
|
62
|
-
/** Gather a node's spine + subscription edges (map.ts stays a pure projection,
|
|
63
|
-
* so the db reach lives here). Children = rows whose parent is this node,
|
|
64
|
-
* read via the indexed `idx_nodes_parent` point query — never a full scan. */
|
|
65
|
-
function edgesFor(id) {
|
|
66
|
-
return {
|
|
67
|
-
subscribesTo: subscriptionsOf(id),
|
|
68
|
-
subscribers: subscribersOf(id),
|
|
69
|
-
children: childrenOf(id),
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
/** Re-read a node fresh and project its detail DTO (post-action response). */
|
|
73
|
-
function detailOf(id) {
|
|
74
|
-
const meta = requireMeta(id);
|
|
75
|
-
return toNodeDetailDTO(meta, edgesFor(id));
|
|
76
|
-
}
|
|
77
|
-
/** Count context + report files under a node (the context-roster `files`). */
|
|
78
|
-
function countFiles(id) {
|
|
79
|
-
let n = 0;
|
|
80
|
-
for (const dir of [contextDir(id), reportsDir(id)]) {
|
|
81
|
-
try {
|
|
82
|
-
n += readdirSync(dir).length;
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
/* dir absent — zero */
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return n;
|
|
89
|
-
}
|
|
90
|
-
// POST /v1/nodes — create immediately (201)
|
|
91
|
-
/** Validate + narrow the create body (spec §6.2). */
|
|
92
|
-
function parseCreateBody(body) {
|
|
93
|
-
if (typeof body !== 'object' || body === null) {
|
|
94
|
-
throw usage('a node create requires a JSON body');
|
|
95
|
-
}
|
|
96
|
-
const b = body;
|
|
97
|
-
if (b['kind'] !== undefined && (typeof b['kind'] !== 'string' || b['kind'].trim() === '')) {
|
|
98
|
-
throw usage('kind must be a non-empty string when provided');
|
|
99
|
-
}
|
|
100
|
-
if (b['description'] !== undefined && (typeof b['description'] !== 'string' || b['description'].trim() === '')) {
|
|
101
|
-
throw usage('description must be a non-empty string when provided');
|
|
102
|
-
}
|
|
103
|
-
if (b['creator'] !== undefined && (typeof b['creator'] !== 'string' || b['creator'].trim() === '')) {
|
|
104
|
-
throw usage('creator must be a non-empty node id when provided');
|
|
105
|
-
}
|
|
106
|
-
const rootLifecycle = b['root_lifecycle'];
|
|
107
|
-
if (rootLifecycle !== undefined &&
|
|
108
|
-
rootLifecycle !== 'resident' &&
|
|
109
|
-
rootLifecycle !== 'terminal') {
|
|
110
|
-
throw usage("root_lifecycle must be 'resident' or 'terminal'");
|
|
111
|
-
}
|
|
112
|
-
return b;
|
|
113
|
-
}
|
|
114
|
-
function parseDeadline(raw) {
|
|
115
|
-
if (raw === undefined)
|
|
116
|
-
return undefined;
|
|
117
|
-
const durationMs = parseDurationMs(raw);
|
|
118
|
-
const deadlineAt = durationMs === null ? null : new Date(Date.now() + durationMs);
|
|
119
|
-
if (durationMs === null || !Number.isFinite(durationMs) || durationMs <= 0 || deadlineAt === null || !Number.isFinite(deadlineAt.getTime())) {
|
|
120
|
-
throw new ApiError(422, 'invalid_deadline', '`deadline` must be a positive representable duration');
|
|
121
|
-
}
|
|
122
|
-
return deadlineAt.toISOString();
|
|
123
|
-
}
|
|
124
|
-
function parseOutcomeDelivery(raw) {
|
|
125
|
-
if (raw === undefined)
|
|
126
|
-
return undefined;
|
|
127
|
-
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
128
|
-
throw new ApiError(400, 'invalid_request', '`outcome_delivery` must be an object');
|
|
129
|
-
}
|
|
130
|
-
if (typeof raw.action !== 'string' || !HUMAN_ACTION_NAME_PATTERN.test(raw.action)) {
|
|
131
|
-
throw new ApiError(400, 'invalid_request', '`outcome_delivery.action` must be a declared action name');
|
|
132
|
-
}
|
|
133
|
-
if (raw.payload !== undefined) {
|
|
134
|
-
let serialized;
|
|
135
|
-
try {
|
|
136
|
-
serialized = JSON.stringify(raw.payload);
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
throw new ApiError(400, 'invalid_request', '`outcome_delivery.payload` must be JSON-serializable');
|
|
140
|
-
}
|
|
141
|
-
if (serialized === undefined) {
|
|
142
|
-
throw new ApiError(400, 'invalid_request', '`outcome_delivery.payload` must be JSON-serializable');
|
|
143
|
-
}
|
|
144
|
-
if (Buffer.byteLength(serialized, 'utf8') > OUTCOME_PAYLOAD_MAX_BYTES) {
|
|
145
|
-
throw new ApiError(413, 'payload_too_large', `serialized payload exceeds ${OUTCOME_PAYLOAD_MAX_BYTES} bytes`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return raw;
|
|
149
|
-
}
|
|
150
|
-
function resolveOutcomeDelivery(request, cwd) {
|
|
151
|
-
const resolution = resolveHumanAction(request.action, cwd);
|
|
152
|
-
if (!('kind' in resolution)) {
|
|
153
|
-
return {
|
|
154
|
-
actionName: request.action,
|
|
155
|
-
argv: resolution.argv,
|
|
156
|
-
cwd: resolution.cwd,
|
|
157
|
-
configOrigin: resolution.configOrigin,
|
|
158
|
-
...(request.payload === undefined ? {} : { payload: request.payload }),
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
if (resolution.kind === 'unknown_action') {
|
|
162
|
-
throw new ApiError(422, 'unknown_action', `no action named ${request.action} is declared from ${cwd}`);
|
|
163
|
-
}
|
|
164
|
-
throw new ApiError(422, 'invalid_action', `${request.action} is declared in ${resolution.configOrigin} but unusable: ${resolution.reason}`, { reason: resolution.reason, configOrigin: resolution.configOrigin });
|
|
165
|
-
}
|
|
166
|
-
/** Build the immediate spawn recipe. */
|
|
167
|
-
function buildRecipe(req, parent, cwd) {
|
|
168
|
-
const recipe = {
|
|
169
|
-
kind: req.kind,
|
|
170
|
-
cwd,
|
|
171
|
-
prompt: req.prompt ?? '',
|
|
172
|
-
};
|
|
173
|
-
if (req.mode !== undefined)
|
|
174
|
-
recipe.mode = req.mode;
|
|
175
|
-
if (req.name !== undefined)
|
|
176
|
-
recipe.name = req.name;
|
|
177
|
-
if (req.description !== undefined)
|
|
178
|
-
recipe.description = req.description;
|
|
179
|
-
if (parent !== undefined)
|
|
180
|
-
recipe.parent = parent;
|
|
181
|
-
if (req.creator !== undefined)
|
|
182
|
-
recipe.creator = req.creator;
|
|
183
|
-
if (req.root === true)
|
|
184
|
-
recipe.root = true;
|
|
185
|
-
if (req.root_lifecycle !== undefined) {
|
|
186
|
-
recipe.rootLifecycle = req.root_lifecycle;
|
|
187
|
-
}
|
|
188
|
-
if (req.worktree === true || typeof req.worktree === 'string')
|
|
189
|
-
recipe.worktree = true;
|
|
190
|
-
if (typeof req.worktree === 'string')
|
|
191
|
-
recipe.worktreeBase = req.worktree;
|
|
192
|
-
if (req.worktree !== undefined)
|
|
193
|
-
recipe.worktreeCwd = resolve(req.pin_cwd ?? req.cwd ?? cwd);
|
|
194
|
-
if (req.fork_from !== undefined)
|
|
195
|
-
recipe.forkFrom = req.fork_from;
|
|
196
|
-
if (req.model !== undefined)
|
|
197
|
-
recipe.model = req.model;
|
|
198
|
-
if (req.profile !== undefined)
|
|
199
|
-
recipe.profile = req.profile;
|
|
200
|
-
if (req.situational_context !== undefined)
|
|
201
|
-
recipe.situationalContext = req.situational_context;
|
|
202
|
-
if (req.node_id !== undefined)
|
|
203
|
-
recipe.nodeId = req.node_id;
|
|
204
|
-
return recipe;
|
|
205
|
-
}
|
|
206
|
-
/** The warm-pool request this create is asking for, or null when it carries
|
|
207
|
-
* something a pre-booted spare cannot honor. A spare is a bare root with no
|
|
208
|
-
* kickoff, so anything that shapes the node AT BIRTH — a prompt to run, a
|
|
209
|
-
* forked conversation, a managed worktree, a model override, a caller-pinned
|
|
210
|
-
* node id, a spine parent — disqualifies it. `kind`, `mode`, `name`,
|
|
211
|
-
* `situational_context` and `output_schema` are all applied at claim time and
|
|
212
|
-
* so do not. A terminal
|
|
213
|
-
* root is not warm-compatible: every spare is resident. */
|
|
214
|
-
function warmRequestFor(req, cwd, profileId) {
|
|
215
|
-
if (!warmPoolEnabled())
|
|
216
|
-
return null;
|
|
217
|
-
if (req.prefer_warm !== true)
|
|
218
|
-
return null;
|
|
219
|
-
if (req.root !== true || req.parent != null)
|
|
220
|
-
return null;
|
|
221
|
-
if (req.root_lifecycle === 'terminal')
|
|
222
|
-
return null;
|
|
223
|
-
if ((req.prompt ?? '') !== '')
|
|
224
|
-
return null;
|
|
225
|
-
// An explicit override freezes the requested model before the first turn;
|
|
226
|
-
// applying it to a live spare would switch models after its broker already
|
|
227
|
-
// launched its default route.
|
|
228
|
-
if (req.model !== undefined)
|
|
229
|
-
return null;
|
|
230
|
-
if (req.fork_from !== undefined || req.worktree !== undefined || req.node_id !== undefined)
|
|
231
|
-
return null;
|
|
232
|
-
return {
|
|
233
|
-
kind: req.kind,
|
|
234
|
-
mode: (req.mode ?? 'base'),
|
|
235
|
-
cwd,
|
|
236
|
-
profileId,
|
|
237
|
-
model: req.model ?? null,
|
|
238
|
-
situationalContext: req.situational_context ?? null,
|
|
239
|
-
name: req.name ?? null,
|
|
240
|
-
creator: req.creator ?? null,
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
export { resolveCreateKind } from '../../../core/runtime/launch-target.js';
|
|
244
|
-
function requestFromLaunch(launch) {
|
|
245
|
-
const intent = launch.modelIntent === undefined
|
|
246
|
-
? undefined
|
|
247
|
-
: `${launch.modelIntent.family}/${launch.modelIntent.strength}`;
|
|
248
|
-
return modelRequestFromConfig(launch.model, intent, launch.modelExact === true);
|
|
249
|
-
}
|
|
250
|
-
async function assertNodeModelChangeRegistered(meta, target, registry) {
|
|
251
|
-
const launch = (await buildLaunchSpecAsync(target.kind, target.mode, {
|
|
252
|
-
lifecycle: target.lifecycle,
|
|
253
|
-
hasManager: meta.parent !== null,
|
|
254
|
-
model: target.model,
|
|
255
|
-
modelOverride: true,
|
|
256
|
-
cwd: meta.cwd,
|
|
257
|
-
profileId: meta.profile_id ?? null,
|
|
258
|
-
})).launch;
|
|
259
|
-
await assertLaunchModelRegistered(requestFromLaunch(launch), { cwd: meta.cwd, profileId: meta.profile_id ?? null }, registry);
|
|
260
|
-
}
|
|
261
|
-
export async function handleCreate(ctx, deps = {}) {
|
|
262
|
-
const req = parseCreateBody(ctx.body);
|
|
263
|
-
const deadline = parseDeadline(req.deadline);
|
|
264
|
-
const outcomeDelivery = parseOutcomeDelivery(req.outcome_delivery);
|
|
265
|
-
// `no_kickoff` needs no dedicated recipe field: an empty prompt IS the
|
|
266
|
-
// no-kickoff mechanism (spawnChild runs no launch turn on prompt===''), and
|
|
267
|
-
// buildRecipe already defaults `prompt` to ''. The CLI keeps every no_kickoff
|
|
268
|
-
// guards (root-only / no-prompt / no-orchestrator).
|
|
269
|
-
const parent = req.parent ?? undefined;
|
|
270
|
-
// Immediate spawn (201). A managed child needs a parent; a root does not.
|
|
271
|
-
if (parent == null && req.root !== true) {
|
|
272
|
-
throw usage('a node create requires a parent (or root: true for an independent root)');
|
|
273
|
-
}
|
|
274
|
-
// Parse BEFORE spawning: a malformed schema must not leave behind a live,
|
|
275
|
-
// schema-less node that was told to submit a structured result.
|
|
276
|
-
let schema = null;
|
|
277
|
-
if (req.output_schema !== undefined) {
|
|
278
|
-
try {
|
|
279
|
-
schema = JSON.parse(req.output_schema);
|
|
280
|
-
}
|
|
281
|
-
catch {
|
|
282
|
-
throw usage('output_schema must be a JSON schema string');
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
// Resolve and validate the exact launch recipe before the warm pool can claim
|
|
286
|
-
// a spare (or the cold path can create a worktree/node). The registry belongs
|
|
287
|
-
// to this daemon, never to the possibly-remote CLI caller.
|
|
288
|
-
const { profileId, kind, cwd, launch } = await resolveLaunchTarget(req, { validateKind: assertKindServer });
|
|
289
|
-
const resolvedReq = { ...req, kind };
|
|
290
|
-
const resolvedOutcomeDelivery = outcomeDelivery === undefined ? undefined : resolveOutcomeDelivery(outcomeDelivery, cwd);
|
|
291
|
-
await assertLaunchModelRegistered(requestFromLaunch(launch), { cwd, profileId }, deps.modelRegistry);
|
|
292
|
-
let warmRefill = null;
|
|
293
|
-
{
|
|
294
|
-
// --- Warm path: hand out an already-booted spare instead of paying a full
|
|
295
|
-
// engine boot. A miss is not a failure — it falls through to the cold
|
|
296
|
-
// spawn below and mints the spare that serves the NEXT create. ---
|
|
297
|
-
const warm = warmRequestFor(resolvedReq, cwd, profileId);
|
|
298
|
-
if (warm !== null) {
|
|
299
|
-
const claimed = await claimWarmNode(warm, {
|
|
300
|
-
...(deadline === undefined ? {} : { deadlineAt: deadline }),
|
|
301
|
-
...(resolvedOutcomeDelivery === undefined ? {} : { outcomeDelivery: resolvedOutcomeDelivery }),
|
|
302
|
-
}, schema === null ? undefined : (nodeId) => writeOutputSchema(nodeId, 'terminal', schema));
|
|
303
|
-
if (claimed !== null) {
|
|
304
|
-
refillWarmPool(warm);
|
|
305
|
-
return { status: 201, body: detailOf(claimed) };
|
|
306
|
-
}
|
|
307
|
-
warmRefill = warm;
|
|
308
|
-
}
|
|
309
|
-
const recipe = buildRecipe(resolvedReq, parent, cwd);
|
|
310
|
-
if (deadline !== undefined)
|
|
311
|
-
recipe.deadlineAt = deadline;
|
|
312
|
-
if (resolvedOutcomeDelivery !== undefined)
|
|
313
|
-
recipe.outcomeDelivery = resolvedOutcomeDelivery;
|
|
314
|
-
recipe.readiness = req.root === true ? 'await' : 'launch';
|
|
315
|
-
const result = await spawnChildPrepared(recipe, schema === null ? undefined : (nodeId) => writeOutputSchema(nodeId, 'terminal', schema), () => {
|
|
316
|
-
if (warmRefill !== null)
|
|
317
|
-
refillWarmPool(warmRefill);
|
|
318
|
-
});
|
|
319
|
-
return { status: 201, body: detailOf(result.node.node_id) };
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
// GET /v1/nodes — list (filters) ; GET /v1/nodes/{id} — detail
|
|
323
|
-
function singleQueryValue(ctx, name) {
|
|
324
|
-
const values = ctx.query.getAll(name);
|
|
325
|
-
if (values.length > 1)
|
|
326
|
-
throw usage(`${name} must appear at most once`);
|
|
327
|
-
return values[0];
|
|
328
|
-
}
|
|
329
|
-
function optionalBoolean(value, name) {
|
|
330
|
-
if (value === undefined)
|
|
331
|
-
return undefined;
|
|
332
|
-
if (value === '1' || value === 'true')
|
|
333
|
-
return true;
|
|
334
|
-
if (value === '0' || value === 'false')
|
|
335
|
-
return false;
|
|
336
|
-
throw usage(`${name} must be true or false`);
|
|
337
|
-
}
|
|
338
|
-
function oneOf(value, name, allowed) {
|
|
339
|
-
if (value === undefined)
|
|
340
|
-
return undefined;
|
|
341
|
-
if (allowed.includes(value))
|
|
342
|
-
return value;
|
|
343
|
-
throw usage(`${name} must be one of: ${allowed.join(', ')}`);
|
|
344
|
-
}
|
|
345
|
-
function parseListQuery(ctx) {
|
|
346
|
-
const allowed = new Set([
|
|
347
|
-
'status', 'lifecycle', 'kind', 'mode', 'profile_id', 'profile_prefix',
|
|
348
|
-
'parent', 'top_level', 'under', 'hanging', 'include',
|
|
349
|
-
]);
|
|
350
|
-
for (const [name] of ctx.query) {
|
|
351
|
-
if (!allowed.has(name))
|
|
352
|
-
throw usage(`unknown nodes query parameter: ${name}`);
|
|
353
|
-
}
|
|
354
|
-
const status = oneOf(singleQueryValue(ctx, 'status'), 'status', ['active', 'idle', 'done', 'dead', 'canceled']);
|
|
355
|
-
const lifecycle = oneOf(singleQueryValue(ctx, 'lifecycle'), 'lifecycle', ['terminal', 'resident']);
|
|
356
|
-
const kind = singleQueryValue(ctx, 'kind');
|
|
357
|
-
const mode = oneOf(singleQueryValue(ctx, 'mode'), 'mode', ['base', 'orchestrator']);
|
|
358
|
-
const profileId = singleQueryValue(ctx, 'profile_id');
|
|
359
|
-
const profilePrefix = singleQueryValue(ctx, 'profile_prefix');
|
|
360
|
-
const parent = singleQueryValue(ctx, 'parent');
|
|
361
|
-
const topLevel = optionalBoolean(singleQueryValue(ctx, 'top_level'), 'top_level');
|
|
362
|
-
const under = singleQueryValue(ctx, 'under');
|
|
363
|
-
const hanging = optionalBoolean(singleQueryValue(ctx, 'hanging'), 'hanging');
|
|
364
|
-
const include = oneOf(singleQueryValue(ctx, 'include'), 'include', ['activity']);
|
|
365
|
-
if (parent !== undefined && topLevel === true) {
|
|
366
|
-
throw usage('parent and top_level=true cannot be combined');
|
|
367
|
-
}
|
|
368
|
-
return {
|
|
369
|
-
...(status !== undefined ? { status } : {}),
|
|
370
|
-
...(lifecycle !== undefined ? { lifecycle } : {}),
|
|
371
|
-
...(kind !== undefined ? { kind } : {}),
|
|
372
|
-
...(mode !== undefined ? { mode } : {}),
|
|
373
|
-
...(profileId !== undefined ? { profile_id: profileId } : {}),
|
|
374
|
-
...(profilePrefix !== undefined ? { profile_prefix: profilePrefix } : {}),
|
|
375
|
-
...(parent !== undefined ? { parent } : {}),
|
|
376
|
-
...(topLevel !== undefined ? { top_level: topLevel } : {}),
|
|
377
|
-
...(under !== undefined ? { under } : {}),
|
|
378
|
-
...(hanging !== undefined ? { hanging } : {}),
|
|
379
|
-
...(include !== undefined ? { include: include } : {}),
|
|
380
|
-
};
|
|
381
|
-
}
|
|
382
|
-
export function handleList(ctx) {
|
|
383
|
-
const query = parseListQuery(ctx);
|
|
384
|
-
let rows = query.status !== undefined ? listNodes({ status: query.status }) : listNodes();
|
|
385
|
-
if (query.lifecycle !== undefined)
|
|
386
|
-
rows = rows.filter((row) => row.lifecycle === query.lifecycle);
|
|
387
|
-
if (query.kind !== undefined)
|
|
388
|
-
rows = rows.filter((row) => row.kind === query.kind);
|
|
389
|
-
if (query.mode !== undefined)
|
|
390
|
-
rows = rows.filter((row) => row.mode === query.mode);
|
|
391
|
-
if (query.profile_id !== undefined)
|
|
392
|
-
rows = rows.filter((row) => row.profile_id === query.profile_id);
|
|
393
|
-
if (query.profile_prefix !== undefined)
|
|
394
|
-
rows = rows.filter((row) => row.profile_id?.startsWith(query.profile_prefix));
|
|
395
|
-
if (query.parent !== undefined)
|
|
396
|
-
rows = rows.filter((row) => row.parent === query.parent);
|
|
397
|
-
if (query.top_level === true)
|
|
398
|
-
rows = rows.filter((row) => row.parent === null);
|
|
399
|
-
if (query.under !== undefined) {
|
|
400
|
-
const scope = new Set(subtreeIds(query.under));
|
|
401
|
-
rows = rows.filter((row) => scope.has(row.node_id));
|
|
402
|
-
}
|
|
403
|
-
if (query.hanging === true) {
|
|
404
|
-
rows = rows.filter((row) => row.parent !== null && getNode(row.parent) === null);
|
|
405
|
-
}
|
|
406
|
-
const counts = query.include === 'activity'
|
|
407
|
-
? ticketCountsForNodes(rows.map((row) => row.node_id))
|
|
408
|
-
: null;
|
|
409
|
-
const body = rows.map((row) => {
|
|
410
|
-
const node = toNodeSummaryDTO(row);
|
|
411
|
-
if (counts !== null) {
|
|
412
|
-
const reports = reportsForNode(row.node_id);
|
|
413
|
-
node.activity = {
|
|
414
|
-
latest_report: reports[0] ?? null,
|
|
415
|
-
final_report: row.final_report === null
|
|
416
|
-
? null
|
|
417
|
-
: reports.find((report) => basename(report.path) === row.final_report) ?? null,
|
|
418
|
-
pending_human_count: counts[row.node_id] ?? 0,
|
|
419
|
-
};
|
|
420
|
-
}
|
|
421
|
-
return node;
|
|
422
|
-
});
|
|
423
|
-
return { status: 200, body };
|
|
424
|
-
}
|
|
425
|
-
function handleDetail(ctx) {
|
|
426
|
-
const id = ctx.params['id'];
|
|
427
|
-
requireMeta(id);
|
|
428
|
-
return { status: 200, body: detailOf(id) };
|
|
429
|
-
}
|
|
430
|
-
// Read endpoints (snapshot / transcript / context / artifacts)
|
|
431
|
-
async function handleSnapshot(ctx) {
|
|
432
|
-
const id = ctx.params['id'];
|
|
433
|
-
requireMeta(id);
|
|
434
|
-
const read = await readNodeSnapshot(id);
|
|
435
|
-
const body = {
|
|
436
|
-
node_id: id,
|
|
437
|
-
snapshot: {
|
|
438
|
-
messages: read.snapshot.messages,
|
|
439
|
-
...(read.snapshot.messageIds === undefined ? {} : { messageIds: read.snapshot.messageIds }),
|
|
440
|
-
messageVisibility: read.snapshot.messageVisibility,
|
|
441
|
-
turnVisibility: read.snapshot.turnVisibility,
|
|
442
|
-
stats: read.snapshot.stats,
|
|
443
|
-
state: read.snapshot.state,
|
|
444
|
-
display: read.snapshot.display,
|
|
445
|
-
...(read.snapshot.queued === undefined ? {} : { queued: read.snapshot.queued }),
|
|
446
|
-
...(read.snapshot.toolGroupSummaries === undefined
|
|
447
|
-
? {}
|
|
448
|
-
: { toolGroupSummaries: read.snapshot.toolGroupSummaries }),
|
|
449
|
-
...(read.snapshot.workingActivity === undefined ? {} : { workingActivity: read.snapshot.workingActivity }),
|
|
450
|
-
},
|
|
451
|
-
commands: read.commands.map((c) => ({ name: c.name, description: c.description, source: c.source })),
|
|
452
|
-
captured_at: nowIso(),
|
|
453
|
-
};
|
|
454
|
-
return { status: 200, body };
|
|
455
|
-
}
|
|
456
|
-
async function handleSubject(ctx) {
|
|
457
|
-
const id = ctx.params['id'];
|
|
458
|
-
const subject = assembleNodeSubject(id);
|
|
459
|
-
if (subject === null)
|
|
460
|
-
throw notFound(`unknown node: ${id}`, { received: id });
|
|
461
|
-
return { status: 200, body: subject };
|
|
462
|
-
}
|
|
463
|
-
function parseMessagesQuery(ctx) {
|
|
464
|
-
for (const [field] of ctx.query) {
|
|
465
|
-
if (field !== 'cursor' && field !== 'limit')
|
|
466
|
-
throw usage(`unknown messages query parameter: ${field}`);
|
|
467
|
-
}
|
|
468
|
-
const cursors = ctx.query.getAll('cursor');
|
|
469
|
-
const limits = ctx.query.getAll('limit');
|
|
470
|
-
if (cursors.length > 1)
|
|
471
|
-
throw usage('cursor must appear at most once');
|
|
472
|
-
if (limits.length > 1)
|
|
473
|
-
throw usage('limit must appear at most once');
|
|
474
|
-
if (limits.length === 0)
|
|
475
|
-
return cursors.length === 0 ? {} : { cursor: cursors[0] };
|
|
476
|
-
const rawLimit = limits[0];
|
|
477
|
-
const limit = Number(rawLimit);
|
|
478
|
-
if (!Number.isSafeInteger(limit) || rawLimit === '') {
|
|
479
|
-
throw usage('limit must be an integer from 1 through 500');
|
|
480
|
-
}
|
|
481
|
-
return cursors.length === 0 ? { limit } : { cursor: cursors[0], limit };
|
|
482
|
-
}
|
|
483
|
-
/** Offline, backward-paged read of the cycle-flattened visible history. */
|
|
484
|
-
async function handleMessages(ctx) {
|
|
485
|
-
const id = ctx.params['id'];
|
|
486
|
-
const read = await readNodeMessagesPage(id, parseMessagesQuery(ctx));
|
|
487
|
-
const body = {
|
|
488
|
-
node_id: id,
|
|
489
|
-
messages: read.messages,
|
|
490
|
-
...(read.messageIds === undefined ? {} : { message_ids: read.messageIds }),
|
|
491
|
-
message_visibility: read.messageVisibility,
|
|
492
|
-
next_cursor: read.nextCursor,
|
|
493
|
-
captured_at: nowIso(),
|
|
494
|
-
};
|
|
495
|
-
return { status: 200, body };
|
|
496
|
-
}
|
|
497
|
-
/** The faithful export read: raw `.jsonl` bytes + assembled system prompt.
|
|
498
|
-
* `/snapshot` reconstructs a cycle-flattened `AgentMessage[]` for renderers and
|
|
499
|
-
* drops what a renderer cannot show; this drops nothing. */
|
|
500
|
-
function handleSession(ctx) {
|
|
501
|
-
const id = ctx.params['id'];
|
|
502
|
-
requireMeta(id);
|
|
503
|
-
const read = readNodeSession(id);
|
|
504
|
-
const body = {
|
|
505
|
-
node_id: id,
|
|
506
|
-
session_file: read.sessionFile,
|
|
507
|
-
session_jsonl: read.sessionJsonl,
|
|
508
|
-
system_prompt: read.systemPrompt,
|
|
509
|
-
captured_at: nowIso(),
|
|
510
|
-
};
|
|
511
|
-
return { status: 200, body };
|
|
512
|
-
}
|
|
513
|
-
async function handleTranscript(ctx) {
|
|
514
|
-
const id = ctx.params['id'];
|
|
515
|
-
requireMeta(id);
|
|
516
|
-
const body = { node_id: id, markdown: await transcriptMarkdown(id) };
|
|
517
|
-
return { status: 200, body };
|
|
518
|
-
}
|
|
519
|
-
function handleContext(ctx) {
|
|
520
|
-
const id = ctx.params['id'];
|
|
521
|
-
requireMeta(id);
|
|
522
|
-
// The roster of context roots this node can read: its own dir plus each
|
|
523
|
-
// publisher it subscribes to (the shared-document store, spec §Reports).
|
|
524
|
-
const roots = [
|
|
525
|
-
{ node_id: id, label: getNode(id)?.name ?? id, dir: contextDir(id), self: true, files: countFiles(id) },
|
|
526
|
-
];
|
|
527
|
-
for (const ref of subscriptionsOf(id)) {
|
|
528
|
-
roots.push({
|
|
529
|
-
node_id: ref.node_id,
|
|
530
|
-
label: getNode(ref.node_id)?.name ?? ref.node_id,
|
|
531
|
-
dir: contextDir(ref.node_id),
|
|
532
|
-
self: false,
|
|
533
|
-
files: countFiles(ref.node_id),
|
|
534
|
-
});
|
|
535
|
-
}
|
|
536
|
-
return { status: 200, body: { node_id: id, roots } };
|
|
537
|
-
}
|
|
538
|
-
function handleArtifacts(ctx) {
|
|
539
|
-
const id = ctx.params['id'];
|
|
540
|
-
requireMeta(id);
|
|
541
|
-
// Optional corpus narrowing (spec §6.2). Absent → the default report/doc/
|
|
542
|
-
// roadmap set; `inbox` is opt-in and only reachable via an explicit type.
|
|
543
|
-
const type = ctx.query.get('type');
|
|
544
|
-
const artifacts = nodeArtifacts(id, type !== null ? [type] : undefined).map((a) => ({
|
|
545
|
-
ref: a.ref,
|
|
546
|
-
source: a.source === 'report' && a.reportKind !== undefined ? `report:${a.reportKind}` : a.source,
|
|
547
|
-
ts: a.ts,
|
|
548
|
-
title: a.title,
|
|
549
|
-
}));
|
|
550
|
-
const body = { node_id: id, artifacts };
|
|
551
|
-
return { status: 200, body };
|
|
552
|
-
}
|
|
553
|
-
// Lifecycle verbs
|
|
554
|
-
export async function handleFork(ctx) {
|
|
555
|
-
const result = await forkNode(ctx.params['id']);
|
|
556
|
-
return { status: 201, body: detailOf(result.node.node_id) };
|
|
557
|
-
}
|
|
558
|
-
async function handleRevive(ctx) {
|
|
559
|
-
const id = ctx.params['id'];
|
|
560
|
-
requireMeta(id);
|
|
561
|
-
const body = ctx.body;
|
|
562
|
-
const resume = body?.resume ?? true;
|
|
563
|
-
const reopen = body?.reopen ?? false;
|
|
564
|
-
// Reopen gate, enforced server-side (the latch clear is a canvas write the CLI
|
|
565
|
-
// caller cannot reach): --reopen CAS-clears a spent `final_report`; the
|
|
566
|
-
// no-reopen path refuses a still-latched node (`node_finalized`). reviveNode
|
|
567
|
-
// keeps its own belt-and-suspenders latch guard under the launch lock.
|
|
568
|
-
assertReopenGate(id, reopen);
|
|
569
|
-
// Wake provenance (only a FRESH revive has a kickoff to carry it): a cron run
|
|
570
|
-
// forwards its `CRTR_CRON_ID`, so the revived node is told a CLOCK woke it
|
|
571
|
-
// rather than a message. A cron id that no longer resolves (canceled or
|
|
572
|
-
// consumed mid-run) simply yields no block — prose, never an error.
|
|
573
|
-
const cron = !resume && body?.cron_id !== undefined ? getCron(body.cron_id) : null;
|
|
574
|
-
const result = await reviveNode(id, {
|
|
575
|
-
resume,
|
|
576
|
-
// An explicit revive is a caller asking for this node NOW; at the cap it
|
|
577
|
-
// gets the refusal naming it rather than a silent nothing-happened.
|
|
578
|
-
capacity: 'refuse',
|
|
579
|
-
...(cron !== null ? { wakeReason: cronWakeOrigin(cron, 'schedule_revive') } : {}),
|
|
580
|
-
});
|
|
581
|
-
const status = (getNode(id)?.status ?? 'active');
|
|
582
|
-
return { status: 200, body: toReviveResultDTO(id, result, status) };
|
|
583
|
-
}
|
|
584
|
-
async function handleRelaunchRoot(ctx) {
|
|
585
|
-
const id = ctx.params['id'];
|
|
586
|
-
const result = await relaunchRoot(id);
|
|
587
|
-
return { status: 200, body: { newNodeId: result?.newNodeId ?? null } };
|
|
588
|
-
}
|
|
589
|
-
function handleClose(ctx) {
|
|
590
|
-
const id = ctx.params['id'];
|
|
591
|
-
requireMeta(id);
|
|
592
|
-
// closeNode always computes the cascade + spared set itself; the DTO `cascade`
|
|
593
|
-
// opt-out has no primitive knob in this version (documented Stage-A limit).
|
|
594
|
-
// `finish` selects the root disposition: finalize to `done` (browse `x`) vs the
|
|
595
|
-
// default cancel.
|
|
596
|
-
const body = ctx.body;
|
|
597
|
-
if (body?.caller_pid !== undefined && (!Number.isInteger(body.caller_pid) || body.caller_pid <= 0)) {
|
|
598
|
-
throw usage('caller_pid must be a positive integer when provided');
|
|
599
|
-
}
|
|
600
|
-
const daemon = boundDaemonControl();
|
|
601
|
-
const result = closeNode(id, {
|
|
602
|
-
rootEvent: body?.finish === true ? 'finish' : 'cancel',
|
|
603
|
-
callerPid: body?.caller_pid,
|
|
604
|
-
...(daemon === null ? {} : { registerDetached: daemon.registerDetached }),
|
|
605
|
-
});
|
|
606
|
-
return { status: 200, body: toCloseResultDTO(result) };
|
|
607
|
-
}
|
|
608
|
-
async function handleRecycle(ctx) {
|
|
609
|
-
const id = ctx.params['id'];
|
|
610
|
-
requireMeta(id);
|
|
611
|
-
// The server has no tmux pane, so recycle's destructive pane re-exec is a
|
|
612
|
-
// Stage-B local concern; the server half runs pane-less and returns
|
|
613
|
-
// `recycled:false` without a destructive op.
|
|
614
|
-
const result = await recycleNode(id);
|
|
615
|
-
return {
|
|
616
|
-
status: 200,
|
|
617
|
-
body: {
|
|
618
|
-
recycled: result.recycled,
|
|
619
|
-
finalized: result.finalized,
|
|
620
|
-
new_root: result.newRoot,
|
|
621
|
-
delivered: result.delivered,
|
|
622
|
-
},
|
|
623
|
-
};
|
|
624
|
-
}
|
|
625
|
-
async function handleDemote(ctx) {
|
|
626
|
-
const id = ctx.params['id'];
|
|
627
|
-
requireMeta(id);
|
|
628
|
-
// Use the canonical reshape primitive to ensure modelExact, provider
|
|
629
|
-
// pin/intent, and default-name migration are all preserved.
|
|
630
|
-
await reshapeNodeAsync(id, { lifecycle: 'terminal' });
|
|
631
|
-
return { status: 200, body: detailOf(id) };
|
|
632
|
-
}
|
|
633
|
-
export async function handlePromote(ctx, deps = {}) {
|
|
634
|
-
const id = ctx.params['id'];
|
|
635
|
-
const meta = requireMeta(id);
|
|
636
|
-
const req = ctx.body ?? {};
|
|
637
|
-
if (req.model !== undefined) {
|
|
638
|
-
await assertNodeModelChangeRegistered(meta, {
|
|
639
|
-
kind: req.kind ?? meta.kind,
|
|
640
|
-
mode: 'orchestrator',
|
|
641
|
-
lifecycle: req.resident === true ? 'resident' : meta.lifecycle,
|
|
642
|
-
model: req.model,
|
|
643
|
-
}, deps.modelRegistry);
|
|
644
|
-
}
|
|
645
|
-
const result = await promoteAsync(id, {
|
|
646
|
-
...(req.kind !== undefined ? { kind: req.kind } : {}),
|
|
647
|
-
...(req.resident === true ? { resident: true } : {}),
|
|
648
|
-
...(req.model !== undefined ? { model: req.model } : {}),
|
|
649
|
-
});
|
|
650
|
-
const dto = toNodeDetailDTO(result.meta, edgesFor(id));
|
|
651
|
-
// Surface the promote-only roadmap/goal facts the primitive returns beyond the
|
|
652
|
-
// node meta (the CLI renders roadmap_written/roadmap_path/goal_path).
|
|
653
|
-
dto.roadmap_written = result.roadmapWritten;
|
|
654
|
-
dto.roadmap_path = result.roadmapPath;
|
|
655
|
-
dto.goal_path = result.goalPath;
|
|
656
|
-
return { status: 200, body: dto };
|
|
657
|
-
}
|
|
658
|
-
export async function handleYield(ctx, deps = {}) {
|
|
659
|
-
const id = ctx.params['id'];
|
|
660
|
-
const meta = requireMeta(id);
|
|
661
|
-
const req = ctx.body ?? {};
|
|
662
|
-
if (req.model !== undefined) {
|
|
663
|
-
await assertNodeModelChangeRegistered(meta, {
|
|
664
|
-
kind: req.kind ?? meta.kind,
|
|
665
|
-
mode: req.promote === true ? 'orchestrator' : meta.mode,
|
|
666
|
-
lifecycle: meta.lifecycle,
|
|
667
|
-
model: req.model,
|
|
668
|
-
}, deps.modelRegistry);
|
|
669
|
-
}
|
|
670
|
-
const note = req.note ?? 'Refresh: continue against your roadmap or goal.';
|
|
671
|
-
writeYieldMessage(id, note);
|
|
672
|
-
const result = await requestYieldAsync(id, {
|
|
673
|
-
...(req.promote === true ? { promote: true } : {}),
|
|
674
|
-
...(req.kind !== undefined ? { kind: req.kind } : {}),
|
|
675
|
-
...(req.model !== undefined ? { model: req.model } : {}),
|
|
676
|
-
});
|
|
677
|
-
return { status: 200, body: toNodeDetailDTO(result.meta, edgesFor(id)) };
|
|
678
|
-
}
|
|
679
|
-
function handleWait(ctx) {
|
|
680
|
-
const id = ctx.params['id'];
|
|
681
|
-
requireMeta(id);
|
|
682
|
-
const req = ctx.body;
|
|
683
|
-
if (req === undefined || typeof req.controller !== 'string' || req.controller.trim() === '') {
|
|
684
|
-
throw usage('a wait requires a controller node id');
|
|
685
|
-
}
|
|
686
|
-
const controller = getNode(req.controller);
|
|
687
|
-
if (controller === null)
|
|
688
|
-
throw notFound(`unknown controller: ${req.controller}`, { received: req.controller });
|
|
689
|
-
if (controller.status !== 'active' && controller.status !== 'idle') {
|
|
690
|
-
// A dead controller can never settle the wait — reject as unprocessable.
|
|
691
|
-
// ApiError (not a plain literal) so its message survives `toErrorBody`'s
|
|
692
|
-
// String(err) on the wire.
|
|
693
|
-
throw new ApiError(422, 'unprocessable', `controller ${req.controller} is ${controller.status}`);
|
|
694
|
-
}
|
|
695
|
-
setMessageWait(id, req.controller);
|
|
696
|
-
return { status: 200, body: detailOf(id) };
|
|
697
|
-
}
|
|
698
|
-
async function handleReviveAll() {
|
|
699
|
-
const result = await reviveAll();
|
|
700
|
-
const body = {
|
|
701
|
-
revived: [...result.revived],
|
|
702
|
-
failed: [...result.failed],
|
|
703
|
-
frozen: [...result.frozen],
|
|
704
|
-
};
|
|
705
|
-
return { status: 200, body };
|
|
706
|
-
}
|
|
707
|
-
// PATCH /v1/nodes/{id}/config — durable config and repair-only cwd (spec §6.2)
|
|
708
|
-
export async function handleConfig(ctx, deps = {}) {
|
|
709
|
-
const id = ctx.params['id'];
|
|
710
|
-
const body = ctx.body;
|
|
711
|
-
let patch;
|
|
712
|
-
if (body === undefined) {
|
|
713
|
-
patch = {};
|
|
714
|
-
}
|
|
715
|
-
else if (typeof body === 'object' && body !== null && !Array.isArray(body)) {
|
|
716
|
-
patch = body;
|
|
717
|
-
}
|
|
718
|
-
else {
|
|
719
|
-
throw new InputError({
|
|
720
|
-
error: 'cwd_invalid',
|
|
721
|
-
message: 'cwd repair requires a non-null object with a non-empty cwd string',
|
|
722
|
-
received: body,
|
|
723
|
-
field: 'cwd',
|
|
724
|
-
next: 'Send a config patch with a non-empty absolute cwd string.',
|
|
725
|
-
});
|
|
726
|
-
}
|
|
727
|
-
if (Object.prototype.hasOwnProperty.call(patch, 'cwd')) {
|
|
728
|
-
const cwd = patch.cwd;
|
|
729
|
-
if (typeof cwd !== 'string' || cwd === '') {
|
|
730
|
-
throw new InputError({
|
|
731
|
-
error: 'cwd_invalid',
|
|
732
|
-
message: 'cwd must be a non-empty string',
|
|
733
|
-
received: cwd,
|
|
734
|
-
field: 'cwd',
|
|
735
|
-
next: 'Send a non-empty absolute cwd string.',
|
|
736
|
-
});
|
|
737
|
-
}
|
|
738
|
-
if (Object.keys(patch).some((key) => key !== 'cwd' && patch[key] !== undefined)) {
|
|
739
|
-
throw new InputError({
|
|
740
|
-
error: 'cwd_not_exclusive',
|
|
741
|
-
message: 'cwd repair cannot be combined with another config field',
|
|
742
|
-
received: patch,
|
|
743
|
-
field: 'cwd',
|
|
744
|
-
next: 'Send cwd as the only config field.',
|
|
745
|
-
});
|
|
746
|
-
}
|
|
747
|
-
const meta = requireMeta(id);
|
|
748
|
-
if (boundFleet().has(id)) {
|
|
749
|
-
const message = `${id} cannot repair its cwd while its broker is live`;
|
|
750
|
-
throw new ApiError(409, 'cwd_node_live', message, {
|
|
751
|
-
error: 'cwd_node_live',
|
|
752
|
-
message,
|
|
753
|
-
received: cwd,
|
|
754
|
-
field: 'cwd',
|
|
755
|
-
next: 'Let the node become dormant, then retry the cwd repair.',
|
|
756
|
-
});
|
|
757
|
-
}
|
|
758
|
-
if (meta.fork_from != null) {
|
|
759
|
-
throw new InputError({
|
|
760
|
-
error: 'cwd_node_forked',
|
|
761
|
-
message: `${id} is a fork and cannot repair its cwd; recorded cwd: ${meta.cwd}`,
|
|
762
|
-
received: cwd,
|
|
763
|
-
field: 'cwd',
|
|
764
|
-
next: `Restore ${meta.cwd}, then revive the fork normally.`,
|
|
765
|
-
});
|
|
766
|
-
}
|
|
767
|
-
if (meta.managed_worktree?.state === 'open') {
|
|
768
|
-
throw new InputError({
|
|
769
|
-
error: 'cwd_node_managed_worktree_open',
|
|
770
|
-
message: `${id} owns an open managed worktree and cannot repair its cwd`,
|
|
771
|
-
received: cwd,
|
|
772
|
-
field: 'cwd',
|
|
773
|
-
next: 'Restore or reconcile the recorded checkout, then use the managed-worktree close or abandon flow.',
|
|
774
|
-
});
|
|
775
|
-
}
|
|
776
|
-
if (existsSync(meta.cwd)) {
|
|
777
|
-
throw new InputError({
|
|
778
|
-
error: 'cwd_still_present',
|
|
779
|
-
message: `${id} recorded cwd still exists: ${meta.cwd}; cwd repair is not a relocation command`,
|
|
780
|
-
received: cwd,
|
|
781
|
-
field: 'cwd',
|
|
782
|
-
next: 'This command only repairs a node whose recorded cwd is gone.',
|
|
783
|
-
});
|
|
784
|
-
}
|
|
785
|
-
if (!isAbsolute(cwd)) {
|
|
786
|
-
throw new InputError({
|
|
787
|
-
error: 'cwd_not_absolute',
|
|
788
|
-
message: `cwd must be an absolute path: ${cwd}`,
|
|
789
|
-
received: cwd,
|
|
790
|
-
field: 'cwd',
|
|
791
|
-
next: 'Send an absolute path.',
|
|
792
|
-
});
|
|
793
|
-
}
|
|
794
|
-
const resolved = resolve(cwd);
|
|
795
|
-
if (!existsSync(resolved)) {
|
|
796
|
-
throw new InputError({
|
|
797
|
-
error: 'cwd_missing',
|
|
798
|
-
message: `cwd does not exist: ${resolved}`,
|
|
799
|
-
received: cwd,
|
|
800
|
-
field: 'cwd',
|
|
801
|
-
next: 'Create the replacement directory or send an existing absolute directory.',
|
|
802
|
-
});
|
|
803
|
-
}
|
|
804
|
-
try {
|
|
805
|
-
if (!statSync(resolved).isDirectory()) {
|
|
806
|
-
throw new InputError({
|
|
807
|
-
error: 'cwd_not_a_directory',
|
|
808
|
-
message: `cwd is not a directory: ${resolved}`,
|
|
809
|
-
received: cwd,
|
|
810
|
-
field: 'cwd',
|
|
811
|
-
next: 'Send an existing absolute directory.',
|
|
812
|
-
});
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
catch (error) {
|
|
816
|
-
if (error instanceof InputError)
|
|
817
|
-
throw error;
|
|
818
|
-
throw new InputError({
|
|
819
|
-
error: 'cwd_missing',
|
|
820
|
-
message: `cwd does not exist: ${resolved}`,
|
|
821
|
-
received: cwd,
|
|
822
|
-
field: 'cwd',
|
|
823
|
-
next: 'Create the replacement directory or send an existing absolute directory.',
|
|
824
|
-
});
|
|
825
|
-
}
|
|
826
|
-
withCanvasWrite(() => {
|
|
827
|
-
updateNode(id, { cwd: resolved });
|
|
828
|
-
unbindSession(id);
|
|
829
|
-
});
|
|
830
|
-
return { status: 200, body: detailOf(id) };
|
|
831
|
-
}
|
|
832
|
-
let meta = requireMeta(id);
|
|
833
|
-
if (patch.situational_context !== undefined) {
|
|
834
|
-
appendSituationalContext(id, formatSituationalProse(patch.situational_context));
|
|
835
|
-
}
|
|
836
|
-
if (patch.model !== undefined) {
|
|
837
|
-
const pinned = isProviderPinnedModelToken(patch.model);
|
|
838
|
-
const ladders = (await readMergedLaunchConfigAsync(meta.cwd, meta.profile_id ?? null)).modelLadders;
|
|
839
|
-
const spec = normalizeModel(patch.model, ladders);
|
|
840
|
-
await assertLaunchModelRegistered({ kind: 'concrete', spec }, { cwd: meta.cwd, profileId: meta.profile_id ?? null }, deps.modelRegistry);
|
|
841
|
-
const persistDormant = () => {
|
|
842
|
-
// Dormant: persist a fully-qualified `provider/id` spec to the row.
|
|
843
|
-
if (!spec.includes('/'))
|
|
844
|
-
throw usage(`model must resolve to a provider/id spec: ${patch.model}`);
|
|
845
|
-
persistDormantModel(id, spec, pinned);
|
|
846
|
-
};
|
|
847
|
-
if (isBrokerLive(meta)) {
|
|
848
|
-
// Live broker: swap the model over its view socket (spec §6.2). The
|
|
849
|
-
// liveness heuristic (pid alive + socket present) can win the race against
|
|
850
|
-
// a broker that is mid-revive: the socket file exists but the connection
|
|
851
|
-
// is refused/closed before any frame. That surfaces as a
|
|
852
|
-
// BrokerUnreachableError — fall back to the durable dormant persist (the
|
|
853
|
-
// next revive applies it, the same guarantee the dormant branch gives)
|
|
854
|
-
// rather than 500ing. A genuine broker rejection (e.g. an invalid model)
|
|
855
|
-
// rejects with a plain Error and still surfaces.
|
|
856
|
-
try {
|
|
857
|
-
await setModelLive(id, spec, pinned);
|
|
858
|
-
}
|
|
859
|
-
catch (err) {
|
|
860
|
-
if (!(err instanceof BrokerUnreachableError))
|
|
861
|
-
throw err;
|
|
862
|
-
persistDormant();
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
else {
|
|
866
|
-
persistDormant();
|
|
867
|
-
}
|
|
868
|
-
// Re-read so the launch-spec rebuild below sees the fresh model pin.
|
|
869
|
-
meta = requireMeta(id);
|
|
870
|
-
}
|
|
871
|
-
// kind / mode / lifecycle: reshape via canonical primitive (CLI parity).
|
|
872
|
-
if (patch.kind !== undefined || patch.mode !== undefined || patch.lifecycle !== undefined) {
|
|
873
|
-
if (patch.kind !== undefined)
|
|
874
|
-
await assertKindServer(patch.kind);
|
|
875
|
-
const newKind = patch.kind ?? meta.kind;
|
|
876
|
-
const newMode = (patch.mode ?? meta.mode);
|
|
877
|
-
const newLifecycle = patch.lifecycle ?? meta.lifecycle;
|
|
878
|
-
// Setting orchestrator seeds a roadmap scaffold if absent (from the goal).
|
|
879
|
-
// Pass as beforePersist callback so roadmap seeding is atomic with the
|
|
880
|
-
// launch spec rebuild.
|
|
881
|
-
let beforePersist;
|
|
882
|
-
if (newMode === 'orchestrator' && !hasRoadmap(id)) {
|
|
883
|
-
beforePersist = () => {
|
|
884
|
-
const goal = readGoal(id);
|
|
885
|
-
seedRoadmap(id, goal !== null && goal.trim() !== '' ? { goal: goal.trim() } : {});
|
|
886
|
-
};
|
|
887
|
-
}
|
|
888
|
-
// Use canonical reshape primitive to preserve modelExact, provider pin/intent,
|
|
889
|
-
// and default-name migration.
|
|
890
|
-
meta = await reshapeNodeAsync(id, {
|
|
891
|
-
...(patch.kind !== undefined ? { kind: newKind } : {}),
|
|
892
|
-
...(patch.mode !== undefined ? { mode: newMode } : {}),
|
|
893
|
-
...(patch.lifecycle !== undefined ? { lifecycle: newLifecycle } : {}),
|
|
894
|
-
}, beforePersist);
|
|
895
|
-
}
|
|
896
|
-
// name: rename the row and, when it has a live viewer window, that window.
|
|
897
|
-
if (patch.name !== undefined) {
|
|
898
|
-
meta = updateNode(id, { name: patch.name });
|
|
899
|
-
if (meta.window)
|
|
900
|
-
renameWindow(meta.window, fullName(meta));
|
|
901
|
-
}
|
|
902
|
-
// `thinking` is a live-only frame (set_thinking); a dormant node has no broker
|
|
903
|
-
// to receive it, so it is a documented Stage-A no-op here.
|
|
904
|
-
return { status: 200, body: detailOf(id) };
|
|
905
|
-
}
|
|
906
|
-
/** POST /v1/nodes and PATCH /v1/nodes/:id/config validate kinds in the daemon's
|
|
907
|
-
* ambient configuration; prospective reads validate their resolved target. The
|
|
908
|
-
* read is subprocess-isolated — crtrd must never resolve config on its own loop. */
|
|
909
|
-
async function assertKindServer(kind) {
|
|
910
|
-
const kinds = Object.keys((await readMergedLaunchConfigAsync(process.cwd(), envProfileId() || null)).kinds);
|
|
911
|
-
if (!kinds.includes(kind)) {
|
|
912
|
-
throw usage(`unknown kind: ${kind}`, { received: kind, next: `Valid kinds: ${kinds.sort().join(', ')}.` });
|
|
913
|
-
}
|
|
914
|
-
}
|
|
915
|
-
// Route table (revive-all registered before `:id` collisions are impossible —
|
|
916
|
-
// different methods — but ordered defensively).
|
|
917
|
-
export const nodeRoutes = [
|
|
918
|
-
{ method: 'POST', pattern: '/v1/nodes', handler: handleCreate },
|
|
919
|
-
{ method: 'GET', pattern: '/v1/nodes', handler: handleList },
|
|
920
|
-
{ method: 'POST', pattern: '/v1/nodes/revive-all', handler: () => handleReviveAll() },
|
|
921
|
-
{ method: 'GET', pattern: '/v1/nodes/:id', handler: handleDetail },
|
|
922
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/snapshot', handler: handleSnapshot },
|
|
923
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/subject', handler: handleSubject },
|
|
924
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/messages', handler: handleMessages },
|
|
925
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/session', handler: handleSession },
|
|
926
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/transcript', handler: handleTranscript },
|
|
927
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/context', handler: handleContext },
|
|
928
|
-
{ method: 'GET', pattern: '/v1/nodes/:id/artifacts', handler: handleArtifacts },
|
|
929
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/fork', handler: handleFork },
|
|
930
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/revive', handler: handleRevive },
|
|
931
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/relaunch-root', handler: handleRelaunchRoot },
|
|
932
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/close', handler: handleClose },
|
|
933
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/recycle', handler: handleRecycle },
|
|
934
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/demote', handler: handleDemote },
|
|
935
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/promote', handler: handlePromote },
|
|
936
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/yield', handler: handleYield },
|
|
937
|
-
{ method: 'POST', pattern: '/v1/nodes/:id/wait', handler: handleWait },
|
|
938
|
-
{ method: 'PATCH', pattern: '/v1/nodes/:id/config', handler: handleConfig },
|
|
939
|
-
];
|
|
1
|
+
var Q=Object.defineProperty;var d=(e,t)=>Q(e,"name",{value:t,configurable:!0});import{envProfileId as U}from"../../../shared/env.js";import{existsSync as D,readdirSync as X,statSync as Z}from"node:fs";import{basename as q,isAbsolute as ee,resolve as C}from"node:path";import{appendSituationalContext as ne,formatSituationalProse as te}from"../../../core/runtime/situational-context.js";import{closeNode as oe}from"../../../core/runtime/close.js";import{reviveNode as ie}from"../../../core/runtime/revive.js";import{nowIso as T}from"../../../core/fs-utils.js";import{assertLaunchModelRegistered as $,forkNode as re,spawnChildPrepared as de}from"../../../core/runtime/spawn.js";import{childrenOf as se,getNode as b,listNodes as I,subscribersOf as ae,subscriptionsOf as M,setMessageWait as le,updateNode as E}from"../../../core/canvas/canvas.js";import{subtreeIds as ce}from"../../../core/canvas/nav-model.js";import{withCanvasWrite as ue}from"../../../core/canvas/db.js";import{unbindSession as fe}from"../../../core/canvas/sessions.js";import{ticketCountsForNodes as me}from"../../../core/canvas/attention.js";import{contextDir as A,reportsDir as pe}from"../../../core/canvas/paths.js";import{nodeArtifacts as he}from"../../../core/canvas/history.js";import{readNodeMessagesPage as we,readNodeSession as ye,readNodeSnapshot as _e,transcriptMarkdown as ge}from"../../../core/runtime/node-read.js";import{assembleNodeSubject as be}from"../../../core/substrate/subject.js";import{reviveAll as ve}from"../../../core/runtime/revive-all.js";import{promoteAsync as ke,requestYieldAsync as Se,reshapeNodeAsync as L}from"../../../core/runtime/promote.js";import{recycleNode as Oe}from"../../../core/runtime/recycle.js";import{relaunchRoot as Ne}from"../../../core/runtime/reset.js";import{assertReopenGate as Te}from"../../../core/runtime/reopen.js";import{writeYieldMessage as $e,readGoal as Ae}from"../../../core/runtime/kickoff.js";import{hasRoadmap as Pe,seedRoadmap as Re}from"../../../core/runtime/roadmap.js";import{renameWindow as xe}from"../../../core/runtime/placement.js";import{buildLaunchSpecAsync as De,isProviderPinnedModelToken as Ce,normalizeModel as Ie,readMergedLaunchConfigAsync as j}from"../../../core/runtime/launch.js";import{modelRequestFromConfig as Me}from"../../../core/model-routes.js";import{BrokerUnreachableError as Ee}from"../../../core/runtime/broker-request.js";import{isBrokerLive as Le,persistDormantModel as je,setModelLive as Fe}from"../../../core/runtime/model-swap.js";import{boundFleet as Ge}from"../../../core/runtime/fleet.js";import{writeOutputSchema as F}from"../../../core/runtime/structured-output.js";import{OUTCOME_PAYLOAD_MAX_BYTES as G}from"../../../core/canvas/types.js";import{HUMAN_ACTION_NAME_PATTERN as ze}from"../../../core/human/action-binding.js";import{resolveHumanAction as We}from"../../../core/human-actions.js";import{parseDurationMs as Be}from"../../../core/wake.js";import{claimWarmNode as Je,refillWarmPool as z,warmPoolEnabled as Ve}from"../../../core/runtime/warm-pool.js";import{resolveLaunchTarget as Ke}from"../../../core/runtime/launch-target.js";import{fullName as Ye}from"../../../core/canvas/labels.js";import{reportsForNode as He}from"./reports.js";import{getCron as Qe}from"../../../core/canvas/crons.js";import{cronWakeOrigin as Ue}from"../../../core/runtime/bearings.js";import{boundDaemonControl as Xe}from"../../control.js";import{notFound as P,usage as u}from"../../../core/errors.js";import{toCloseResultDTO as Ze,toNodeDetailDTO as R,toNodeSummaryDTO as qe,toReviveResultDTO as en}from"../map.js";import{ApiError as w}from"../../../api/index.js";import{InputError as p}from"../../../core/io.js";function f(e){const t=b(e);if(t===null)throw P(`unknown node: ${e}`,{received:e});return t}d(f,"requireMeta");function x(e){return{subscribesTo:M(e),subscribers:ae(e),children:se(e)}}d(x,"edgesFor");function y(e){const t=f(e);return R(t,x(e))}d(y,"detailOf");function W(e){let t=0;for(const n of[A(e),pe(e)])try{t+=X(n).length}catch{}return t}d(W,"countFiles");function nn(e){if(typeof e!="object"||e===null)throw u("a node create requires a JSON body");const t=e;if(t.kind!==void 0&&(typeof t.kind!="string"||t.kind.trim()===""))throw u("kind must be a non-empty string when provided");if(t.description!==void 0&&(typeof t.description!="string"||t.description.trim()===""))throw u("description must be a non-empty string when provided");if(t.creator!==void 0&&(typeof t.creator!="string"||t.creator.trim()===""))throw u("creator must be a non-empty node id when provided");const n=t.root_lifecycle;if(n!==void 0&&n!=="resident"&&n!=="terminal")throw u("root_lifecycle must be 'resident' or 'terminal'");return t}d(nn,"parseCreateBody");function tn(e){if(e===void 0)return;const t=Be(e),n=t===null?null:new Date(Date.now()+t);if(t===null||!Number.isFinite(t)||t<=0||n===null||!Number.isFinite(n.getTime()))throw new w(422,"invalid_deadline","`deadline` must be a positive representable duration");return n.toISOString()}d(tn,"parseDeadline");function on(e){if(e!==void 0){if(typeof e!="object"||e===null||Array.isArray(e))throw new w(400,"invalid_request","`outcome_delivery` must be an object");if(typeof e.action!="string"||!ze.test(e.action))throw new w(400,"invalid_request","`outcome_delivery.action` must be a declared action name");if(e.payload!==void 0){let t;try{t=JSON.stringify(e.payload)}catch{throw new w(400,"invalid_request","`outcome_delivery.payload` must be JSON-serializable")}if(t===void 0)throw new w(400,"invalid_request","`outcome_delivery.payload` must be JSON-serializable");if(Buffer.byteLength(t,"utf8")>G)throw new w(413,"payload_too_large",`serialized payload exceeds ${G} bytes`)}return e}}d(on,"parseOutcomeDelivery");function rn(e,t){const n=We(e.action,t);if(!("kind"in n))return{actionName:e.action,argv:n.argv,cwd:n.cwd,configOrigin:n.configOrigin,...e.payload===void 0?{}:{payload:e.payload}};throw n.kind==="unknown_action"?new w(422,"unknown_action",`no action named ${e.action} is declared from ${t}`):new w(422,"invalid_action",`${e.action} is declared in ${n.configOrigin} but unusable: ${n.reason}`,{reason:n.reason,configOrigin:n.configOrigin})}d(rn,"resolveOutcomeDelivery");function dn(e,t,n){const o={kind:e.kind,cwd:n,prompt:e.prompt??""};return e.mode!==void 0&&(o.mode=e.mode),e.name!==void 0&&(o.name=e.name),e.description!==void 0&&(o.description=e.description),t!==void 0&&(o.parent=t),e.creator!==void 0&&(o.creator=e.creator),e.root===!0&&(o.root=!0),e.root_lifecycle!==void 0&&(o.rootLifecycle=e.root_lifecycle),(e.worktree===!0||typeof e.worktree=="string")&&(o.worktree=!0),typeof e.worktree=="string"&&(o.worktreeBase=e.worktree),e.worktree!==void 0&&(o.worktreeCwd=C(e.pin_cwd??e.cwd??n)),e.fork_from!==void 0&&(o.forkFrom=e.fork_from),e.model!==void 0&&(o.model=e.model),e.profile!==void 0&&(o.profile=e.profile),e.situational_context!==void 0&&(o.situationalContext=e.situational_context),e.node_id!==void 0&&(o.nodeId=e.node_id),o}d(dn,"buildRecipe");function sn(e,t,n){return!Ve()||e.prefer_warm!==!0||e.root!==!0||e.parent!=null||e.root_lifecycle==="terminal"||(e.prompt??"")!==""||e.model!==void 0||e.fork_from!==void 0||e.worktree!==void 0||e.node_id!==void 0?null:{kind:e.kind,mode:e.mode??"base",cwd:t,profileId:n,model:e.model??null,situationalContext:e.situational_context??null,name:e.name??null,creator:e.creator??null}}d(sn,"warmRequestFor");import{resolveCreateKind as $t}from"../../../core/runtime/launch-target.js";function B(e){const t=e.modelIntent===void 0?void 0:`${e.modelIntent.family}/${e.modelIntent.strength}`;return Me(e.model,t,e.modelExact===!0)}d(B,"requestFromLaunch");async function J(e,t,n){const o=(await De(t.kind,t.mode,{lifecycle:t.lifecycle,hasManager:e.parent!==null,model:t.model,modelOverride:!0,cwd:e.cwd,profileId:e.profile_id??null})).launch;await $(B(o),{cwd:e.cwd,profileId:e.profile_id??null},n)}d(J,"assertNodeModelChangeRegistered");async function an(e,t={}){const n=nn(e.body),o=tn(n.deadline),r=on(n.outcome_delivery),i=n.parent??void 0;if(i==null&&n.root!==!0)throw u("a node create requires a parent (or root: true for an independent root)");let s=null;if(n.output_schema!==void 0)try{s=JSON.parse(n.output_schema)}catch{throw u("output_schema must be a JSON schema string")}const{profileId:l,kind:c,cwd:a,launch:m}=await Ke(n,{validateKind:K}),v={...n,kind:c},_=r===void 0?void 0:rn(r,a);await $(B(m),{cwd:a,profileId:l},t.modelRegistry);let g=null;{const k=sn(v,a,l);if(k!==null){const O=await Je(k,{...o===void 0?{}:{deadlineAt:o},..._===void 0?{}:{outcomeDelivery:_}},s===null?void 0:H=>F(H,"terminal",s));if(O!==null)return z(k),{status:201,body:y(O)};g=k}const S=dn(v,i,a);o!==void 0&&(S.deadlineAt=o),_!==void 0&&(S.outcomeDelivery=_),S.readiness=n.root===!0?"await":"launch";const Y=await de(S,s===null?void 0:O=>F(O,"terminal",s),()=>{g!==null&&z(g)});return{status:201,body:y(Y.node.node_id)}}}d(an,"handleCreate");function h(e,t){const n=e.query.getAll(t);if(n.length>1)throw u(`${t} must appear at most once`);return n[0]}d(h,"singleQueryValue");function V(e,t){if(e!==void 0){if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;throw u(`${t} must be true or false`)}}d(V,"optionalBoolean");function N(e,t,n){if(e!==void 0){if(n.includes(e))return e;throw u(`${t} must be one of: ${n.join(", ")}`)}}d(N,"oneOf");function ln(e){const t=new Set(["status","lifecycle","kind","mode","profile_id","profile_prefix","parent","top_level","under","hanging","include"]);for(const[g]of e.query)if(!t.has(g))throw u(`unknown nodes query parameter: ${g}`);const n=N(h(e,"status"),"status",["active","idle","done","dead","canceled"]),o=N(h(e,"lifecycle"),"lifecycle",["terminal","resident"]),r=h(e,"kind"),i=N(h(e,"mode"),"mode",["base","orchestrator"]),s=h(e,"profile_id"),l=h(e,"profile_prefix"),c=h(e,"parent"),a=V(h(e,"top_level"),"top_level"),m=h(e,"under"),v=V(h(e,"hanging"),"hanging"),_=N(h(e,"include"),"include",["activity"]);if(c!==void 0&&a===!0)throw u("parent and top_level=true cannot be combined");return{...n!==void 0?{status:n}:{},...o!==void 0?{lifecycle:o}:{},...r!==void 0?{kind:r}:{},...i!==void 0?{mode:i}:{},...s!==void 0?{profile_id:s}:{},...l!==void 0?{profile_prefix:l}:{},...c!==void 0?{parent:c}:{},...a!==void 0?{top_level:a}:{},...m!==void 0?{under:m}:{},...v!==void 0?{hanging:v}:{},..._!==void 0?{include:_}:{}}}d(ln,"parseListQuery");function cn(e){const t=ln(e);let n=t.status!==void 0?I({status:t.status}):I();if(t.lifecycle!==void 0&&(n=n.filter(i=>i.lifecycle===t.lifecycle)),t.kind!==void 0&&(n=n.filter(i=>i.kind===t.kind)),t.mode!==void 0&&(n=n.filter(i=>i.mode===t.mode)),t.profile_id!==void 0&&(n=n.filter(i=>i.profile_id===t.profile_id)),t.profile_prefix!==void 0&&(n=n.filter(i=>i.profile_id?.startsWith(t.profile_prefix))),t.parent!==void 0&&(n=n.filter(i=>i.parent===t.parent)),t.top_level===!0&&(n=n.filter(i=>i.parent===null)),t.under!==void 0){const i=new Set(ce(t.under));n=n.filter(s=>i.has(s.node_id))}t.hanging===!0&&(n=n.filter(i=>i.parent!==null&&b(i.parent)===null));const o=t.include==="activity"?me(n.map(i=>i.node_id)):null;return{status:200,body:n.map(i=>{const s=qe(i);if(o!==null){const l=He(i.node_id);s.activity={latest_report:l[0]??null,final_report:i.final_report===null?null:l.find(c=>q(c.path)===i.final_report)??null,pending_human_count:o[i.node_id]??0}}return s})}}d(cn,"handleList");function un(e){const t=e.params.id;return f(t),{status:200,body:y(t)}}d(un,"handleDetail");async function fn(e){const t=e.params.id;f(t);const n=await _e(t);return{status:200,body:{node_id:t,snapshot:{messages:n.snapshot.messages,...n.snapshot.messageIds===void 0?{}:{messageIds:n.snapshot.messageIds},messageVisibility:n.snapshot.messageVisibility,turnVisibility:n.snapshot.turnVisibility,stats:n.snapshot.stats,state:n.snapshot.state,display:n.snapshot.display,...n.snapshot.queued===void 0?{}:{queued:n.snapshot.queued},...n.snapshot.toolGroupSummaries===void 0?{}:{toolGroupSummaries:n.snapshot.toolGroupSummaries},...n.snapshot.workingActivity===void 0?{}:{workingActivity:n.snapshot.workingActivity}},commands:n.commands.map(r=>({name:r.name,description:r.description,source:r.source})),captured_at:T()}}}d(fn,"handleSnapshot");async function mn(e){const t=e.params.id,n=be(t);if(n===null)throw P(`unknown node: ${t}`,{received:t});return{status:200,body:n}}d(mn,"handleSubject");function pn(e){for(const[i]of e.query)if(i!=="cursor"&&i!=="limit")throw u(`unknown messages query parameter: ${i}`);const t=e.query.getAll("cursor"),n=e.query.getAll("limit");if(t.length>1)throw u("cursor must appear at most once");if(n.length>1)throw u("limit must appear at most once");if(n.length===0)return t.length===0?{}:{cursor:t[0]};const o=n[0],r=Number(o);if(!Number.isSafeInteger(r)||o==="")throw u("limit must be an integer from 1 through 500");return t.length===0?{limit:r}:{cursor:t[0],limit:r}}d(pn,"parseMessagesQuery");async function hn(e){const t=e.params.id,n=await we(t,pn(e));return{status:200,body:{node_id:t,messages:n.messages,...n.messageIds===void 0?{}:{message_ids:n.messageIds},message_visibility:n.messageVisibility,next_cursor:n.nextCursor,captured_at:T()}}}d(hn,"handleMessages");function wn(e){const t=e.params.id;f(t);const n=ye(t);return{status:200,body:{node_id:t,session_file:n.sessionFile,session_jsonl:n.sessionJsonl,system_prompt:n.systemPrompt,captured_at:T()}}}d(wn,"handleSession");async function yn(e){const t=e.params.id;return f(t),{status:200,body:{node_id:t,markdown:await ge(t)}}}d(yn,"handleTranscript");function _n(e){const t=e.params.id;f(t);const n=[{node_id:t,label:b(t)?.name??t,dir:A(t),self:!0,files:W(t)}];for(const o of M(t))n.push({node_id:o.node_id,label:b(o.node_id)?.name??o.node_id,dir:A(o.node_id),self:!1,files:W(o.node_id)});return{status:200,body:{node_id:t,roots:n}}}d(_n,"handleContext");function gn(e){const t=e.params.id;f(t);const n=e.query.get("type"),o=he(t,n!==null?[n]:void 0).map(i=>({ref:i.ref,source:i.source==="report"&&i.reportKind!==void 0?`report:${i.reportKind}`:i.source,ts:i.ts,title:i.title}));return{status:200,body:{node_id:t,artifacts:o}}}d(gn,"handleArtifacts");async function bn(e){const t=await re(e.params.id);return{status:201,body:y(t.node.node_id)}}d(bn,"handleFork");async function vn(e){const t=e.params.id;f(t);const n=e.body,o=n?.resume??!0,r=n?.reopen??!1;Te(t,r);const i=!o&&n?.cron_id!==void 0?Qe(n.cron_id):null,s=await ie(t,{resume:o,capacity:"refuse",...i!==null?{wakeReason:Ue(i,"schedule_revive")}:{}}),l=b(t)?.status??"active";return{status:200,body:en(t,s,l)}}d(vn,"handleRevive");async function kn(e){const t=e.params.id;return{status:200,body:{newNodeId:(await Ne(t))?.newNodeId??null}}}d(kn,"handleRelaunchRoot");function Sn(e){const t=e.params.id;f(t);const n=e.body;if(n?.caller_pid!==void 0&&(!Number.isInteger(n.caller_pid)||n.caller_pid<=0))throw u("caller_pid must be a positive integer when provided");const o=Xe(),r=oe(t,{rootEvent:n?.finish===!0?"finish":"cancel",callerPid:n?.caller_pid,...o===null?{}:{registerDetached:o.registerDetached}});return{status:200,body:Ze(r)}}d(Sn,"handleClose");async function On(e){const t=e.params.id;f(t);const n=await Oe(t);return{status:200,body:{recycled:n.recycled,finalized:n.finalized,new_root:n.newRoot,delivered:n.delivered}}}d(On,"handleRecycle");async function Nn(e){const t=e.params.id;return f(t),await L(t,{lifecycle:"terminal"}),{status:200,body:y(t)}}d(Nn,"handleDemote");async function Tn(e,t={}){const n=e.params.id,o=f(n),r=e.body??{};r.model!==void 0&&await J(o,{kind:r.kind??o.kind,mode:"orchestrator",lifecycle:r.resident===!0?"resident":o.lifecycle,model:r.model},t.modelRegistry);const i=await ke(n,{...r.kind!==void 0?{kind:r.kind}:{},...r.resident===!0?{resident:!0}:{},...r.model!==void 0?{model:r.model}:{}}),s=R(i.meta,x(n));return s.roadmap_written=i.roadmapWritten,s.roadmap_path=i.roadmapPath,s.goal_path=i.goalPath,{status:200,body:s}}d(Tn,"handlePromote");async function $n(e,t={}){const n=e.params.id,o=f(n),r=e.body??{};r.model!==void 0&&await J(o,{kind:r.kind??o.kind,mode:r.promote===!0?"orchestrator":o.mode,lifecycle:o.lifecycle,model:r.model},t.modelRegistry);const i=r.note??"Refresh: continue against your roadmap or goal.";$e(n,i);const s=await Se(n,{...r.promote===!0?{promote:!0}:{},...r.kind!==void 0?{kind:r.kind}:{},...r.model!==void 0?{model:r.model}:{}});return{status:200,body:R(s.meta,x(n))}}d($n,"handleYield");function An(e){const t=e.params.id;f(t);const n=e.body;if(n===void 0||typeof n.controller!="string"||n.controller.trim()==="")throw u("a wait requires a controller node id");const o=b(n.controller);if(o===null)throw P(`unknown controller: ${n.controller}`,{received:n.controller});if(o.status!=="active"&&o.status!=="idle")throw new w(422,"unprocessable",`controller ${n.controller} is ${o.status}`);return le(t,n.controller),{status:200,body:y(t)}}d(An,"handleWait");async function Pn(){const e=await ve();return{status:200,body:{revived:[...e.revived],failed:[...e.failed],frozen:[...e.frozen]}}}d(Pn,"handleReviveAll");async function Rn(e,t={}){const n=e.params.id,o=e.body;let r;if(o===void 0)r={};else if(typeof o=="object"&&o!==null&&!Array.isArray(o))r=o;else throw new p({error:"cwd_invalid",message:"cwd repair requires a non-null object with a non-empty cwd string",received:o,field:"cwd",next:"Send a config patch with a non-empty absolute cwd string."});if(Object.prototype.hasOwnProperty.call(r,"cwd")){const s=r.cwd;if(typeof s!="string"||s==="")throw new p({error:"cwd_invalid",message:"cwd must be a non-empty string",received:s,field:"cwd",next:"Send a non-empty absolute cwd string."});if(Object.keys(r).some(a=>a!=="cwd"&&r[a]!==void 0))throw new p({error:"cwd_not_exclusive",message:"cwd repair cannot be combined with another config field",received:r,field:"cwd",next:"Send cwd as the only config field."});const l=f(n);if(Ge().has(n)){const a=`${n} cannot repair its cwd while its broker is live`;throw new w(409,"cwd_node_live",a,{error:"cwd_node_live",message:a,received:s,field:"cwd",next:"Let the node become dormant, then retry the cwd repair."})}if(l.fork_from!=null)throw new p({error:"cwd_node_forked",message:`${n} is a fork and cannot repair its cwd; recorded cwd: ${l.cwd}`,received:s,field:"cwd",next:`Restore ${l.cwd}, then revive the fork normally.`});if(l.managed_worktree?.state==="open")throw new p({error:"cwd_node_managed_worktree_open",message:`${n} owns an open managed worktree and cannot repair its cwd`,received:s,field:"cwd",next:"Restore or reconcile the recorded checkout, then use the managed-worktree close or abandon flow."});if(D(l.cwd))throw new p({error:"cwd_still_present",message:`${n} recorded cwd still exists: ${l.cwd}; cwd repair is not a relocation command`,received:s,field:"cwd",next:"This command only repairs a node whose recorded cwd is gone."});if(!ee(s))throw new p({error:"cwd_not_absolute",message:`cwd must be an absolute path: ${s}`,received:s,field:"cwd",next:"Send an absolute path."});const c=C(s);if(!D(c))throw new p({error:"cwd_missing",message:`cwd does not exist: ${c}`,received:s,field:"cwd",next:"Create the replacement directory or send an existing absolute directory."});try{if(!Z(c).isDirectory())throw new p({error:"cwd_not_a_directory",message:`cwd is not a directory: ${c}`,received:s,field:"cwd",next:"Send an existing absolute directory."})}catch(a){throw a instanceof p?a:new p({error:"cwd_missing",message:`cwd does not exist: ${c}`,received:s,field:"cwd",next:"Create the replacement directory or send an existing absolute directory."})}return ue(()=>{E(n,{cwd:c}),fe(n)}),{status:200,body:y(n)}}let i=f(n);if(r.situational_context!==void 0&&ne(n,te(r.situational_context)),r.model!==void 0){const s=Ce(r.model),l=(await j(i.cwd,i.profile_id??null)).modelLadders,c=Ie(r.model,l);await $({kind:"concrete",spec:c},{cwd:i.cwd,profileId:i.profile_id??null},t.modelRegistry);const a=d(()=>{if(!c.includes("/"))throw u(`model must resolve to a provider/id spec: ${r.model}`);je(n,c,s)},"persistDormant");if(Le(i))try{await Fe(n,c,s)}catch(m){if(!(m instanceof Ee))throw m;a()}else a();i=f(n)}if(r.kind!==void 0||r.mode!==void 0||r.lifecycle!==void 0){r.kind!==void 0&&await K(r.kind);const s=r.kind??i.kind,l=r.mode??i.mode,c=r.lifecycle??i.lifecycle;let a;l==="orchestrator"&&!Pe(n)&&(a=d(()=>{const m=Ae(n);Re(n,m!==null&&m.trim()!==""?{goal:m.trim()}:{})},"beforePersist")),i=await L(n,{...r.kind!==void 0?{kind:s}:{},...r.mode!==void 0?{mode:l}:{},...r.lifecycle!==void 0?{lifecycle:c}:{}},a)}return r.name!==void 0&&(i=E(n,{name:r.name}),i.window&&xe(i.window,Ye(i))),{status:200,body:y(n)}}d(Rn,"handleConfig");async function K(e){const t=Object.keys((await j(process.cwd(),U()||null)).kinds);if(!t.includes(e))throw u(`unknown kind: ${e}`,{received:e,next:`Valid kinds: ${t.sort().join(", ")}.`})}d(K,"assertKindServer");const Ot=[{method:"POST",pattern:"/v1/nodes",handler:an},{method:"GET",pattern:"/v1/nodes",handler:cn},{method:"POST",pattern:"/v1/nodes/revive-all",handler:d(()=>Pn(),"handler")},{method:"GET",pattern:"/v1/nodes/:id",handler:un},{method:"GET",pattern:"/v1/nodes/:id/snapshot",handler:fn},{method:"GET",pattern:"/v1/nodes/:id/subject",handler:mn},{method:"GET",pattern:"/v1/nodes/:id/messages",handler:hn},{method:"GET",pattern:"/v1/nodes/:id/session",handler:wn},{method:"GET",pattern:"/v1/nodes/:id/transcript",handler:yn},{method:"GET",pattern:"/v1/nodes/:id/context",handler:_n},{method:"GET",pattern:"/v1/nodes/:id/artifacts",handler:gn},{method:"POST",pattern:"/v1/nodes/:id/fork",handler:bn},{method:"POST",pattern:"/v1/nodes/:id/revive",handler:vn},{method:"POST",pattern:"/v1/nodes/:id/relaunch-root",handler:kn},{method:"POST",pattern:"/v1/nodes/:id/close",handler:Sn},{method:"POST",pattern:"/v1/nodes/:id/recycle",handler:On},{method:"POST",pattern:"/v1/nodes/:id/demote",handler:Nn},{method:"POST",pattern:"/v1/nodes/:id/promote",handler:Tn},{method:"POST",pattern:"/v1/nodes/:id/yield",handler:$n},{method:"POST",pattern:"/v1/nodes/:id/wait",handler:An},{method:"PATCH",pattern:"/v1/nodes/:id/config",handler:Rn}];export{Rn as handleConfig,an as handleCreate,bn as handleFork,cn as handleList,Tn as handlePromote,$n as handleYield,Ot as nodeRoutes,$t as resolveCreateKind};
|