@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
package/dist/api/client.js
CHANGED
|
@@ -1,912 +1,2 @@
|
|
|
1
|
-
// CrtrClient — the typed HTTP+WS client over crtrd's API (spec §3.4).
|
|
2
|
-
|
|
3
|
-
// PURITY (spec §3.1): the ONLY runtime imports are Node built-ins
|
|
4
|
-
// (`node:http`, `node:https`, `node:os`, `node:path`) plus `src/api/*`. Never
|
|
5
|
-
// `core/*` / `node:sqlite` / TUI. The daemon-spawn logic lives in `core`/
|
|
6
|
-
// `daemon`, which this module may not import — so autostart is delegated to an
|
|
7
|
-
// injectable `onColdSocket` hook the CLI wires in (spec §7.1). A cold socket
|
|
8
|
-
// always gets one bounded availability observation; the hook only permits spawning.
|
|
9
|
-
//
|
|
10
|
-
// TRANSPORT (spec O-1): `node:http`/`node:https` `request()` — NO `undici`.
|
|
11
|
-
// unix socket via `{ socketPath }`; TCP/remote via a parsed `baseUrl`.
|
|
12
|
-
import { envHomeOverride } from '../shared/env.js';
|
|
13
|
-
import { request as httpRequest } from 'node:http';
|
|
14
|
-
import { request as httpsRequest } from 'node:https';
|
|
15
|
-
import { homedir } from 'node:os';
|
|
16
|
-
import { join } from 'node:path';
|
|
17
|
-
import { ApiError, isErrorBody } from './errors.js';
|
|
18
|
-
import { routes } from './routes.js';
|
|
19
|
-
import { isSafeNodeId } from './dto/common.js';
|
|
20
|
-
import { isSafeBashJobId } from './dto/bash-jobs.js';
|
|
21
|
-
import { isSafeCronId, } from './dto/crons.js';
|
|
22
|
-
/** Filesystem/scope constants mirrored from `core/types.ts` (`CRTR_DIR_NAME`)
|
|
23
|
-
* and `core/canvas/paths.ts` (`crtrHome`/`apiSocketPath`). Duplicated — not
|
|
24
|
-
* imported — to keep the exported `/api` contract dependency-light; the two
|
|
25
|
-
* MUST agree on the resolved socket path. */
|
|
26
|
-
const CRTR_DIR_NAME = '.crouter';
|
|
27
|
-
const SOCKET_BASENAME = 'crtrd.sock';
|
|
28
|
-
/** Resolve crtrd's default unix socket path the same way `apiSocketPath()` does,
|
|
29
|
-
* via Node built-ins only (no `core/canvas/paths.ts` import). */
|
|
30
|
-
function defaultSocketPath() {
|
|
31
|
-
const override = envHomeOverride();
|
|
32
|
-
const home = override !== undefined && override !== ''
|
|
33
|
-
? override
|
|
34
|
-
: join(homedir(), CRTR_DIR_NAME, 'canvas');
|
|
35
|
-
return join(home, SOCKET_BASENAME);
|
|
36
|
-
}
|
|
37
|
-
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
38
|
-
/** Default bounded window to wait for `/healthz` to come up after
|
|
39
|
-
* `onColdSocket`, when the caller does not pass `coldStartPollWindowMs`. */
|
|
40
|
-
const HEALTHZ_POLL_WINDOW_MS = 10_000;
|
|
41
|
-
const HEALTHZ_POLL_INTERVAL_MS = 200;
|
|
42
|
-
/** One strict wall-clock availability window shared by local API clients and
|
|
43
|
-
* daemon management. Each probe gets only the budget remaining at its start. */
|
|
44
|
-
export async function waitForDaemonAvailability({ windowMs, probe, initialError, pollIntervalMs = HEALTHZ_POLL_INTERVAL_MS, retry = () => true, now = Date.now, sleep = sleepMs, }) {
|
|
45
|
-
const deadline = now() + windowMs;
|
|
46
|
-
let lastError = initialError;
|
|
47
|
-
for (;;) {
|
|
48
|
-
const remaining = deadline - now();
|
|
49
|
-
if (remaining <= 0)
|
|
50
|
-
throw lastError ?? new Error('crtrd availability window expired without a probe failure');
|
|
51
|
-
try {
|
|
52
|
-
await probe(remaining);
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
lastError = error;
|
|
57
|
-
if (!retry(error))
|
|
58
|
-
throw error;
|
|
59
|
-
}
|
|
60
|
-
const afterProbe = deadline - now();
|
|
61
|
-
if (afterProbe <= 0)
|
|
62
|
-
throw lastError;
|
|
63
|
-
await sleep(Math.min(pollIntervalMs, afterProbe));
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
export class CrtrClient {
|
|
67
|
-
socketPath;
|
|
68
|
-
baseUrl;
|
|
69
|
-
headers;
|
|
70
|
-
autostart;
|
|
71
|
-
timeoutMs;
|
|
72
|
-
onColdSocket;
|
|
73
|
-
coldStartDiagnostic;
|
|
74
|
-
coldStartPollWindowMs;
|
|
75
|
-
/** Guards against invoking the daemon-start hook more than once per client. */
|
|
76
|
-
coldStartAttempted = false;
|
|
77
|
-
constructor(opts) {
|
|
78
|
-
const hasSocket = opts.socketPath !== undefined && opts.socketPath !== '';
|
|
79
|
-
const hasBaseUrl = opts.baseUrl !== undefined && opts.baseUrl !== '';
|
|
80
|
-
if (hasSocket === hasBaseUrl) {
|
|
81
|
-
throw new TypeError('CrtrClient requires exactly one of socketPath | baseUrl');
|
|
82
|
-
}
|
|
83
|
-
if (hasSocket)
|
|
84
|
-
this.socketPath = opts.socketPath;
|
|
85
|
-
if (hasBaseUrl)
|
|
86
|
-
this.baseUrl = new URL(opts.baseUrl);
|
|
87
|
-
this.headers = { ...opts.headers };
|
|
88
|
-
this.autostart = opts.autostart ?? hasSocket;
|
|
89
|
-
this.timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
90
|
-
if (opts.onColdSocket !== undefined)
|
|
91
|
-
this.onColdSocket = opts.onColdSocket;
|
|
92
|
-
if (opts.coldStartDiagnostic !== undefined)
|
|
93
|
-
this.coldStartDiagnostic = opts.coldStartDiagnostic;
|
|
94
|
-
this.coldStartPollWindowMs = opts.coldStartPollWindowMs ?? HEALTHZ_POLL_WINDOW_MS;
|
|
95
|
-
}
|
|
96
|
-
/** Construct a client bound to the default local socket with autostart on. Pass
|
|
97
|
-
* `onColdSocket` to enable the daemon-spawn hook (spec §7.1); without it a cold
|
|
98
|
-
* socket fails loud with `daemon_unavailable`. */
|
|
99
|
-
static forLocalSocket(opts) {
|
|
100
|
-
return new CrtrClient({ socketPath: defaultSocketPath(), autostart: true, ...opts });
|
|
101
|
-
}
|
|
102
|
-
// Health / status
|
|
103
|
-
healthz() {
|
|
104
|
-
return this.request('GET', routes.healthz());
|
|
105
|
-
}
|
|
106
|
-
/** One `/healthz` observation without cold-socket recovery. Availability
|
|
107
|
-
* waiters own retry policy and pass their remaining wall-clock budget here. */
|
|
108
|
-
async probeHealthz(timeoutMs) {
|
|
109
|
-
const response = await this.transport('GET', routes.healthz(), undefined, undefined, timeoutMs);
|
|
110
|
-
// A restricted daemon is alive and deliberately answers its health DTO with
|
|
111
|
-
// 503. Preserve that state for daemon startup management instead of treating
|
|
112
|
-
// the expected non-2xx status as a generic API failure.
|
|
113
|
-
if (response.status === 503) {
|
|
114
|
-
try {
|
|
115
|
-
const health = JSON.parse(response.text);
|
|
116
|
-
if (typeof health.startup_blocked === 'string')
|
|
117
|
-
return health;
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
// `parse` below reports malformed/non-health 503 responses normally.
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return parse(response);
|
|
124
|
-
}
|
|
125
|
-
status() {
|
|
126
|
-
return this.request('GET', routes.status());
|
|
127
|
-
}
|
|
128
|
-
/** Ask the daemon to replace itself with a successor running the currently
|
|
129
|
-
* selected runtime generation. Answers before the handover starts, so a
|
|
130
|
-
* caller living inside a node the handover will tear down still gets a
|
|
131
|
-
* settled result. */
|
|
132
|
-
restartDaemon() {
|
|
133
|
-
return this.request('POST', routes.daemonRestart());
|
|
134
|
-
}
|
|
135
|
-
admitDaemon() {
|
|
136
|
-
return this.request('POST', routes.daemonAdmit());
|
|
137
|
-
}
|
|
138
|
-
migrateState(req) {
|
|
139
|
-
return this.request('POST', routes.daemonMigrate(), req);
|
|
140
|
-
}
|
|
141
|
-
// Nodes
|
|
142
|
-
createNode(req) {
|
|
143
|
-
return this.request('POST', routes.nodes(), req);
|
|
144
|
-
}
|
|
145
|
-
/** List canvas nodes with composable row filters. `include: 'activity'` adds
|
|
146
|
-
* latest/canonical reports and pending-human counts in the same response. */
|
|
147
|
-
listNodes(q) {
|
|
148
|
-
return this.request('GET', withQuery(routes.nodes(), q));
|
|
149
|
-
}
|
|
150
|
-
getNode(id) {
|
|
151
|
-
return this.request('GET', routes.node(this.nodePath(id)));
|
|
152
|
-
}
|
|
153
|
-
/** Read a node outcome, optionally awaiting it for at most 25 seconds. This
|
|
154
|
-
* is a GET so the client can safely replay it across daemon handover. */
|
|
155
|
-
getNodeOutcome(id, { waitSeconds } = {}) {
|
|
156
|
-
if (waitSeconds !== undefined && (!Number.isInteger(waitSeconds) || waitSeconds < 0 || waitSeconds > 25)) {
|
|
157
|
-
throw new RangeError('waitSeconds must be an integer between 0 and 25');
|
|
158
|
-
}
|
|
159
|
-
return this.request('GET', withQuery(routes.nodeOutcome(this.nodePath(id)), { wait: waitSeconds }), undefined, (waitSeconds ?? 0) * 1_000 + this.timeoutMs);
|
|
160
|
-
}
|
|
161
|
-
/** Register or replace an armed target for terminal-outcome delivery. */
|
|
162
|
-
registerOutcomeDelivery(id, req) {
|
|
163
|
-
return this.request('PUT', routes.nodeOutcomeDelivery(this.nodePath(id)), req);
|
|
164
|
-
}
|
|
165
|
-
getOutcomeDelivery(id) {
|
|
166
|
-
return this.request('GET', routes.nodeOutcomeDelivery(this.nodePath(id)));
|
|
167
|
-
}
|
|
168
|
-
/** Disarm an unsettled outcome-delivery registration. */
|
|
169
|
-
async disarmOutcomeDelivery(id) {
|
|
170
|
-
await this.request('DELETE', routes.nodeOutcomeDelivery(this.nodePath(id)));
|
|
171
|
-
}
|
|
172
|
-
listBashJobs(id) {
|
|
173
|
-
return this.request('GET', routes.nodeJobs(this.nodePath(id)));
|
|
174
|
-
}
|
|
175
|
-
stopBashJob(id, jobId) {
|
|
176
|
-
return this.request('DELETE', routes.nodeJob(this.nodePath(id), this.jobPath(jobId)));
|
|
177
|
-
}
|
|
178
|
-
sendMessage(id, req) {
|
|
179
|
-
return this.request('POST', routes.nodeMessages(this.nodePath(id)), req);
|
|
180
|
-
}
|
|
181
|
-
/** First-class interrupt (the human Esc): cancels pending undelivered
|
|
182
|
-
* human-send inbox entries, then aborts a live in-flight turn. NEVER
|
|
183
|
-
* revives a dormant target. */
|
|
184
|
-
interruptNode(id) {
|
|
185
|
-
return this.request('POST', routes.nodeInterrupt(this.nodePath(id)), {});
|
|
186
|
-
}
|
|
187
|
-
pushReport(id, req) {
|
|
188
|
-
return this.request('POST', routes.nodeReports(this.nodePath(id)), req);
|
|
189
|
-
}
|
|
190
|
-
submitResult(id, req) {
|
|
191
|
-
return this.request('POST', routes.nodeResult(this.nodePath(id)), req);
|
|
192
|
-
}
|
|
193
|
-
forkNode(id) {
|
|
194
|
-
return this.request('POST', routes.nodeFork(this.nodePath(id)), {});
|
|
195
|
-
}
|
|
196
|
-
reviveNode(id, req) {
|
|
197
|
-
return this.request('POST', routes.nodeRevive(this.nodePath(id)), req ?? {});
|
|
198
|
-
}
|
|
199
|
-
relaunchRoot(id) {
|
|
200
|
-
return this.request('POST', routes.nodeRelaunchRoot(this.nodePath(id)), {});
|
|
201
|
-
}
|
|
202
|
-
bindBrokerSession(id, req) {
|
|
203
|
-
return this.request('POST', routes.nodeBrokerSessionBound(this.nodePath(id)), req);
|
|
204
|
-
}
|
|
205
|
-
settleBroker(id, req) {
|
|
206
|
-
return this.request('POST', routes.nodeBrokerSettle(this.nodePath(id)), req);
|
|
207
|
-
}
|
|
208
|
-
completeBrokerPark(id, req) {
|
|
209
|
-
return this.request('POST', routes.nodeBrokerParkComplete(this.nodePath(id)), req);
|
|
210
|
-
}
|
|
211
|
-
recordBrokerParkActivity(id, req) {
|
|
212
|
-
return this.request('POST', routes.nodeBrokerParkActivity(this.nodePath(id)), req);
|
|
213
|
-
}
|
|
214
|
-
claimNodeMail(id, req) {
|
|
215
|
-
return this.request('POST', routes.nodeMailClaim(this.nodePath(id)), req);
|
|
216
|
-
}
|
|
217
|
-
acknowledgeNodeMail(id, req) {
|
|
218
|
-
return this.request('POST', routes.nodeMailAcknowledge(this.nodePath(id)), req);
|
|
219
|
-
}
|
|
220
|
-
recordBrokerTurn(id, req) {
|
|
221
|
-
return this.request('POST', routes.brokerTurn(this.nodePath(id)), req);
|
|
222
|
-
}
|
|
223
|
-
mutateBrokerProviderRetry(id, req) {
|
|
224
|
-
return this.request('POST', routes.brokerProviderRetry(this.nodePath(id)), req);
|
|
225
|
-
}
|
|
226
|
-
mutateBrokerFault(id, req) {
|
|
227
|
-
return this.request('POST', routes.brokerFault(this.nodePath(id)), req);
|
|
228
|
-
}
|
|
229
|
-
getBrokerRecovery(id, expectedExecutionId) {
|
|
230
|
-
return this.request('GET', `${routes.brokerRecovery(this.nodePath(id))}?expected_execution_id=${encodeURIComponent(expectedExecutionId)}`);
|
|
231
|
-
}
|
|
232
|
-
recordNodeFault(id, req) {
|
|
233
|
-
return this.request('POST', routes.nodeFault(this.nodePath(id)), req);
|
|
234
|
-
}
|
|
235
|
-
clearNodeFault(id, opts = {}) {
|
|
236
|
-
const query = new URLSearchParams();
|
|
237
|
-
if (opts.link !== undefined)
|
|
238
|
-
query.set('link', opts.link);
|
|
239
|
-
if (opts.preserve_episode !== undefined)
|
|
240
|
-
query.set('preserve_episode', String(opts.preserve_episode));
|
|
241
|
-
const suffix = query.size === 0 ? '' : `?${query.toString()}`;
|
|
242
|
-
return this.request('DELETE', `${routes.nodeFault(this.nodePath(id))}${suffix}`);
|
|
243
|
-
}
|
|
244
|
-
commitBrokerModel(id, req) {
|
|
245
|
-
return this.request('POST', routes.nodeBrokerModel(this.nodePath(id)), req);
|
|
246
|
-
}
|
|
247
|
-
brokerExtensionState(id) {
|
|
248
|
-
return this.request('GET', routes.nodeBrokerExtensionState(this.nodePath(id)));
|
|
249
|
-
}
|
|
250
|
-
commitBrokerGeneratedName(id, req) {
|
|
251
|
-
return this.request('POST', routes.nodeBrokerGeneratedName(this.nodePath(id)), req);
|
|
252
|
-
}
|
|
253
|
-
commitBrokerPersonaAck(id, req) {
|
|
254
|
-
return this.request('POST', routes.nodeBrokerPersonaAck(this.nodePath(id)), req);
|
|
255
|
-
}
|
|
256
|
-
closeNode(id, req) {
|
|
257
|
-
return this.request('POST', routes.nodeClose(this.nodePath(id)), req ?? {});
|
|
258
|
-
}
|
|
259
|
-
recycleNode(id) {
|
|
260
|
-
return this.request('POST', routes.nodeRecycle(this.nodePath(id)), {});
|
|
261
|
-
}
|
|
262
|
-
demoteNode(id) {
|
|
263
|
-
return this.request('POST', routes.nodeDemote(this.nodePath(id)), {});
|
|
264
|
-
}
|
|
265
|
-
promoteNode(id, req) {
|
|
266
|
-
return this.request('POST', routes.nodePromote(this.nodePath(id)), req);
|
|
267
|
-
}
|
|
268
|
-
yieldNode(id, req) {
|
|
269
|
-
return this.request('POST', routes.nodeYield(this.nodePath(id)), req);
|
|
270
|
-
}
|
|
271
|
-
waitNode(id, req) {
|
|
272
|
-
return this.request('POST', routes.nodeWait(this.nodePath(id)), req);
|
|
273
|
-
}
|
|
274
|
-
patchConfig(id, patch) {
|
|
275
|
-
return this.request('PATCH', routes.nodeConfig(this.nodePath(id)), patch);
|
|
276
|
-
}
|
|
277
|
-
/** Land + close the node's managed git worktree (spec §6.2). Server-side
|
|
278
|
-
* because it interleaves a canvas WRITE with a git land transaction and
|
|
279
|
-
* crtrd is the repo host (same principle as spawnChild's creation git). */
|
|
280
|
-
closeWorktree(id) {
|
|
281
|
-
return this.request('POST', routes.nodeWorktreeClose(this.nodePath(id)), {});
|
|
282
|
-
}
|
|
283
|
-
abandonWorktree(id, req) {
|
|
284
|
-
return this.request('POST', routes.nodeWorktreeAbandon(this.nodePath(id)), req);
|
|
285
|
-
}
|
|
286
|
-
listQuarantinedWorktrees() {
|
|
287
|
-
return this.request('GET', routes.quarantinedWorktrees());
|
|
288
|
-
}
|
|
289
|
-
subscribe(id, req) {
|
|
290
|
-
return this.request('POST', routes.nodeSubscriptions(this.nodePath(id)), req);
|
|
291
|
-
}
|
|
292
|
-
// Focuses (viewer registry)
|
|
293
|
-
// The tmux verbs that open/move/close a viewer pane run LOCALLY in the
|
|
294
|
-
// caller's session (placement-tmux); only the canvas.db focus rows route here.
|
|
295
|
-
// Reads GC lazily server-side, so a returned row is always live; a `null` body
|
|
296
|
-
// is the normal "no viewer" answer, not a 404.
|
|
297
|
-
listFocuses() {
|
|
298
|
-
return this.request('GET', routes.focuses());
|
|
299
|
-
}
|
|
300
|
-
focusOf(nodeId) {
|
|
301
|
-
return this.request('GET', withQuery(routes.focusByNode(), { node_id: nodeId }));
|
|
302
|
-
}
|
|
303
|
-
focusByPane(pane) {
|
|
304
|
-
return this.request('GET', withQuery(routes.focusByPane(), { pane }));
|
|
305
|
-
}
|
|
306
|
-
registerFocus(req) {
|
|
307
|
-
return this.request('POST', routes.focuses(), req);
|
|
308
|
-
}
|
|
309
|
-
async setFocusPane(focusId, req) {
|
|
310
|
-
await this.request('PATCH', routes.focus(focusId), req);
|
|
311
|
-
}
|
|
312
|
-
async closeFocus(focusId) {
|
|
313
|
-
await this.request('DELETE', routes.focus(focusId));
|
|
314
|
-
}
|
|
315
|
-
async unsubscribe(id, target) {
|
|
316
|
-
await this.request('DELETE', routes.nodeSubscription(this.nodePath(id), this.nodePath(target)));
|
|
317
|
-
}
|
|
318
|
-
/** Arm one cron (`POST /v1/crons`) — the server mints the cron_id. */
|
|
319
|
-
armCron(req) {
|
|
320
|
-
return this.request('POST', routes.crons(), req);
|
|
321
|
-
}
|
|
322
|
-
/** Crons visible to the caller (`GET /v1/crons`). With `q.profile` that is
|
|
323
|
-
* that profile's crons plus every global one; omit it only for a
|
|
324
|
-
* canvas-home-wide provenance read ("which crons did node X arm"). */
|
|
325
|
-
listCrons(q) {
|
|
326
|
-
return this.request('GET', withQuery(routes.crons(), q));
|
|
327
|
-
}
|
|
328
|
-
/** One cron with its run-log ring (`GET /v1/crons/:cronId`). */
|
|
329
|
-
showCron(cronId, q) {
|
|
330
|
-
return this.request('GET', withQuery(routes.cron(this.cronPath(cronId)), q));
|
|
331
|
-
}
|
|
332
|
-
/** Pause one cron (`POST /v1/crons/:cronId/pause`) — stops firing, keeps config+history. */
|
|
333
|
-
pauseCron(cronId, q) {
|
|
334
|
-
return this.request('POST', withQuery(routes.cronPause(this.cronPath(cronId)), q), {});
|
|
335
|
-
}
|
|
336
|
-
/** Resume one paused cron (`POST /v1/crons/:cronId/resume`). */
|
|
337
|
-
resumeCron(cronId, q) {
|
|
338
|
-
return this.request('POST', withQuery(routes.cronResume(this.cronPath(cronId)), q), {});
|
|
339
|
-
}
|
|
340
|
-
/** Run one cron NOW, out of band (`POST /v1/crons/:cronId/run`) — synchronous:
|
|
341
|
-
* resolves with the settled run record after the subprocess closes. Does not
|
|
342
|
-
* advance the schedule or consume a one-shot; never escalates. */
|
|
343
|
-
runCron(cronId, q) {
|
|
344
|
-
return this.request('POST', withQuery(routes.cronRun(this.cronPath(cronId)), q), {});
|
|
345
|
-
}
|
|
346
|
-
/** Cancel one cron (`DELETE /v1/crons/:cronId`, idempotent). */
|
|
347
|
-
async cancelCron(cronId, q) {
|
|
348
|
-
await this.request('DELETE', withQuery(routes.cron(this.cronPath(cronId)), q));
|
|
349
|
-
}
|
|
350
|
-
/** Bare eligibility poke (`POST /v1/crons/poke`): re-dues every held active
|
|
351
|
-
* cron now — "something changed; re-check now". Canvas-wide, label-free,
|
|
352
|
-
* idempotent, and free when nothing is held. */
|
|
353
|
-
pokeCrons() {
|
|
354
|
-
return this.request('POST', routes.cronsPoke(), {});
|
|
355
|
-
}
|
|
356
|
-
ensureAttach(id, req) {
|
|
357
|
-
return this.request('POST', routes.nodeAttach(this.nodePath(id)), req ?? {});
|
|
358
|
-
}
|
|
359
|
-
// Reads / feed
|
|
360
|
-
getReports(id, q) {
|
|
361
|
-
return this.request('GET', withQuery(routes.nodeReports(this.nodePath(id)), q));
|
|
362
|
-
}
|
|
363
|
-
getTranscript(id, q) {
|
|
364
|
-
return this.request('GET', withQuery(routes.nodeTranscript(this.nodePath(id)), q));
|
|
365
|
-
}
|
|
366
|
-
getSnapshot(id) {
|
|
367
|
-
return this.request('GET', routes.nodeSnapshot(this.nodePath(id)));
|
|
368
|
-
}
|
|
369
|
-
/** The node-config subject substrate gates evaluate against. */
|
|
370
|
-
nodeSubject(id) {
|
|
371
|
-
return this.request('GET', routes.nodeSubject(this.nodePath(id)));
|
|
372
|
-
}
|
|
373
|
-
getNodeMessages(id, q) {
|
|
374
|
-
return this.request('GET', withQuery(routes.nodeMessages(this.nodePath(id)), q));
|
|
375
|
-
}
|
|
376
|
-
/** The node's conversation exactly as it ran — raw `.jsonl` bytes plus the
|
|
377
|
-
* assembled system prompt. For exports; `getSnapshot` is for renderers. */
|
|
378
|
-
getSession(id) {
|
|
379
|
-
return this.request('GET', routes.nodeSession(this.nodePath(id)));
|
|
380
|
-
}
|
|
381
|
-
/** What a non-terminal chat surface may offer for this node: the chat-capable
|
|
382
|
-
* slash commands its live engine registered, and the memory documents an
|
|
383
|
-
* inline `/name` token resolves to. Never revives — a node whose broker is
|
|
384
|
-
* not live answers `broker_live: false` with empty arrays. */
|
|
385
|
-
getChatInventory(id) {
|
|
386
|
-
return this.request('GET', routes.nodeChatInventory(this.nodePath(id)));
|
|
387
|
-
}
|
|
388
|
-
getProspectiveChatInventory(q) {
|
|
389
|
-
return this.request('GET', withQuery(routes.prospectiveChatInventory(), q));
|
|
390
|
-
}
|
|
391
|
-
getArtifacts(id, q) {
|
|
392
|
-
return this.request('GET', withQuery(routes.nodeArtifacts(this.nodePath(id)), q));
|
|
393
|
-
}
|
|
394
|
-
getContext(id) {
|
|
395
|
-
return this.request('GET', routes.nodeContext(this.nodePath(id)));
|
|
396
|
-
}
|
|
397
|
-
// Host file read
|
|
398
|
-
/** Read an absolute host path as UTF-8 (capped, `truncated` when clipped) for
|
|
399
|
-
* the browser file-peek panel. */
|
|
400
|
-
peekFile(path) {
|
|
401
|
-
return this.request('GET', withQuery(routes.filePeek(), { path }));
|
|
402
|
-
}
|
|
403
|
-
// Memory documents
|
|
404
|
-
/** Resolve an exact canonical `[[name]]` memory-document link to the winning
|
|
405
|
-
* document's physical origin for the given node — the node's own precedence
|
|
406
|
-
* chain, not this process's. Pair with `peekFile` to render the document. */
|
|
407
|
-
resolveMemoryDoc(name, nodeId) {
|
|
408
|
-
return this.request('GET', withQuery(routes.memoryResolve(), { name, node: nodeId }));
|
|
409
|
-
}
|
|
410
|
-
// Profiles
|
|
411
|
-
/** Create-or-return by name. Supplied `projects` are shape-checked even when
|
|
412
|
-
* the profile already exists; their directories are only required to exist
|
|
413
|
-
* when this call creates the profile. */
|
|
414
|
-
ensureProfile(name, req) {
|
|
415
|
-
return this.request('PUT', routes.profile(name), req ?? {});
|
|
416
|
-
}
|
|
417
|
-
listProfiles() {
|
|
418
|
-
return this.request('GET', routes.profiles());
|
|
419
|
-
}
|
|
420
|
-
getProfile(name) {
|
|
421
|
-
return this.request('GET', routes.profile(name));
|
|
422
|
-
}
|
|
423
|
-
pauseProfile(name) {
|
|
424
|
-
return this.request('POST', routes.profilePause(name), {});
|
|
425
|
-
}
|
|
426
|
-
resumeProfile(name) {
|
|
427
|
-
return this.request('POST', routes.profileResume(name), {});
|
|
428
|
-
}
|
|
429
|
-
/** Merge and remove entries in a profile's metadata map. */
|
|
430
|
-
updateProfileMetadata(name, req) {
|
|
431
|
-
return this.request('PATCH', routes.profileMetadata(name), req);
|
|
432
|
-
}
|
|
433
|
-
/** Force-delete or detach one profile by exact id or unique name. */
|
|
434
|
-
deleteProfile(name, req) {
|
|
435
|
-
return this.request('DELETE', routes.profile(name), req);
|
|
436
|
-
}
|
|
437
|
-
// Model auth
|
|
438
|
-
listModelAuth() {
|
|
439
|
-
return this.request('GET', routes.modelAuths());
|
|
440
|
-
}
|
|
441
|
-
installCredential(provider, req) {
|
|
442
|
-
return this.request('PUT', routes.modelAuth(provider), req);
|
|
443
|
-
}
|
|
444
|
-
removeCredential(provider) {
|
|
445
|
-
return this.request('DELETE', routes.modelAuth(provider));
|
|
446
|
-
}
|
|
447
|
-
// Daemon-owned document reviews and comments
|
|
448
|
-
createReview(req) {
|
|
449
|
-
return this.request('POST', routes.humanReviews(), req);
|
|
450
|
-
}
|
|
451
|
-
listReviews(query) {
|
|
452
|
-
return this.request('GET', withQuery(routes.humanReviews(), query));
|
|
453
|
-
}
|
|
454
|
-
getReview(reviewId) {
|
|
455
|
-
return this.request('GET', routes.humanReview(this.reviewPath(reviewId)));
|
|
456
|
-
}
|
|
457
|
-
submitReview(reviewId) {
|
|
458
|
-
return this.request('POST', routes.humanReviewSubmit(this.reviewPath(reviewId)), {});
|
|
459
|
-
}
|
|
460
|
-
cancelReview(reviewId, req = {}) {
|
|
461
|
-
return this.request('POST', routes.humanReviewCancel(this.reviewPath(reviewId)), req);
|
|
462
|
-
}
|
|
463
|
-
getReviewDocumentBase(reviewId) {
|
|
464
|
-
return this.request('GET', routes.humanReviewDocument(this.reviewPath(reviewId)));
|
|
465
|
-
}
|
|
466
|
-
createReviewComment(reviewId, req) {
|
|
467
|
-
const path = reviewId === undefined ? 'self' : this.reviewPath(reviewId);
|
|
468
|
-
return this.request('POST', routes.humanReviewComments(path), req);
|
|
469
|
-
}
|
|
470
|
-
listReviewComments(reviewId, query) {
|
|
471
|
-
const path = reviewId === undefined ? 'self' : this.reviewPath(reviewId);
|
|
472
|
-
return this.request('GET', withQuery(routes.humanReviewComments(path), query));
|
|
473
|
-
}
|
|
474
|
-
readReviewCommentEvents(reviewId, query) {
|
|
475
|
-
return this.request('GET', withQuery(routes.humanReviewCommentEvents(this.reviewPath(reviewId)), query));
|
|
476
|
-
}
|
|
477
|
-
updateReviewCommentRanges(reviewId, req) {
|
|
478
|
-
return this.request('POST', routes.humanReviewCommentRanges(this.reviewPath(reviewId)), req);
|
|
479
|
-
}
|
|
480
|
-
getReviewComment(commentId) {
|
|
481
|
-
return this.request('GET', routes.humanComment(this.commentPath(commentId)));
|
|
482
|
-
}
|
|
483
|
-
editReviewComment(commentId, req) {
|
|
484
|
-
return this.request('POST', routes.humanCommentEdit(this.commentPath(commentId)), req);
|
|
485
|
-
}
|
|
486
|
-
resolveReviewComment(commentId, req = {}) {
|
|
487
|
-
return this.request('POST', routes.humanCommentResolve(this.commentPath(commentId)), req);
|
|
488
|
-
}
|
|
489
|
-
reopenReviewComment(commentId, req = {}) {
|
|
490
|
-
return this.request('POST', routes.humanCommentReopen(this.commentPath(commentId)), req);
|
|
491
|
-
}
|
|
492
|
-
deleteReviewComment(commentId, req = {}) {
|
|
493
|
-
return this.request('POST', routes.humanCommentDelete(this.commentPath(commentId)), req);
|
|
494
|
-
}
|
|
495
|
-
// ---- Humanloop inbox (Northlight crouter-inbox v1, inbox-contract.md §A) --
|
|
496
|
-
/** Pending page/review tickets across every available crouter-owned
|
|
497
|
-
* humanloop root. */
|
|
498
|
-
listHumanInbox() {
|
|
499
|
-
return this.request('GET', routes.humanInbox());
|
|
500
|
-
}
|
|
501
|
-
/** Read one page ticket by its opaque ticket id (pending, resolved, or canceled). */
|
|
502
|
-
getHumanInboxPage(ticketId) {
|
|
503
|
-
return this.request('GET', routes.humanInboxTicket(this.ticketId(ticketId)));
|
|
504
|
-
}
|
|
505
|
-
/** All page tickets, oldest first (pending, resolved, or canceled) —
|
|
506
|
-
* home-wide, or narrowed to one raising node when `nodeId` is given. */
|
|
507
|
-
getInboxHistory(nodeId) {
|
|
508
|
-
if (nodeId === undefined) {
|
|
509
|
-
return this.request('GET', routes.humanInbox() + '/history');
|
|
510
|
-
}
|
|
511
|
-
if (typeof nodeId !== 'string' || nodeId === '') {
|
|
512
|
-
throw new TypeError(`invalid node id: ${JSON.stringify(nodeId)}`);
|
|
513
|
-
}
|
|
514
|
-
return this.request('GET', withQuery(routes.humanInbox() + '/history', { node_id: nodeId }));
|
|
515
|
-
}
|
|
516
|
-
/** Submit responses for a page ticket. Single-assignment server-side: a competing
|
|
517
|
-
* resolution races to `ticket_already_resolved`. */
|
|
518
|
-
respondHumanInboxPage(ticketId, request) {
|
|
519
|
-
return this.request('POST', routes.humanInboxRespond(this.ticketId(ticketId)), request);
|
|
520
|
-
}
|
|
521
|
-
/** Autosave partial page work. Omitted slots are permitted in progress updates. */
|
|
522
|
-
postInboxProgress(ticketId, responses) {
|
|
523
|
-
return this.request('POST', routes.humanInboxProgress(this.ticketId(ticketId)), { responses });
|
|
524
|
-
}
|
|
525
|
-
/** Get the published response for a resolved page ticket. 404 if pending or canceled. */
|
|
526
|
-
getInboxResponse(ticketId) {
|
|
527
|
-
return this.request('GET', routes.humanInboxResponse(this.ticketId(ticketId)));
|
|
528
|
-
}
|
|
529
|
-
/** Cancel a ticket (terminal response, never deletion). */
|
|
530
|
-
cancelHumanInboxTicket(ticketId, request) {
|
|
531
|
-
return this.request('POST', routes.humanInboxCancel(this.ticketId(ticketId)), request ?? {});
|
|
532
|
-
}
|
|
533
|
-
// Durable programmatic human requests
|
|
534
|
-
/** Create one durable human request. The minted `request_id` identifies the
|
|
535
|
-
* request; inbox presentation has its own ticket id. An unresolvable
|
|
536
|
-
* `action.name` is rejected before the page is published, leaving no inbox
|
|
537
|
-
* row behind. */
|
|
538
|
-
createHumanRequest(request) {
|
|
539
|
-
return this.request('POST', routes.humanRequests(), request);
|
|
540
|
-
}
|
|
541
|
-
/** Read one request: its current state, its answer when answered, and the
|
|
542
|
-
* delivery state of its completion action when it bound one. */
|
|
543
|
-
getHumanRequest(requestId) {
|
|
544
|
-
return this.request('GET', routes.humanRequest(this.requestPath(requestId)));
|
|
545
|
-
}
|
|
546
|
-
/** Revise a pending request's page in place. Identity, provenance, and the
|
|
547
|
-
* frozen action binding are preserved; a settled request refuses. */
|
|
548
|
-
replaceHumanRequest(requestId, request) {
|
|
549
|
-
return this.request('POST', routes.humanRequestReplace(this.requestPath(requestId)), request);
|
|
550
|
-
}
|
|
551
|
-
/** Settle a request `answered` programmatically. Races a human answer to the
|
|
552
|
-
* same first-writer-wins result. */
|
|
553
|
-
respondHumanRequest(requestId, request) {
|
|
554
|
-
return this.request('POST', routes.humanRequestRespond(this.requestPath(requestId)), request);
|
|
555
|
-
}
|
|
556
|
-
/** The recipient surface closing a request without answering. */
|
|
557
|
-
dismissHumanRequest(requestId, request = {}) {
|
|
558
|
-
return this.request('POST', routes.humanRequestDismiss(this.requestPath(requestId)), request);
|
|
559
|
-
}
|
|
560
|
-
/** The requester withdrawing its own request. */
|
|
561
|
-
cancelHumanRequest(requestId, request = {}) {
|
|
562
|
-
return this.request('POST', routes.humanRequestCancel(this.requestPath(requestId)), request);
|
|
563
|
-
}
|
|
564
|
-
/** Resolve one page feedback comment — the bound companion's report that it
|
|
565
|
-
* has been dealt with. `nodeId` names the caller; the daemon refuses any
|
|
566
|
-
* node but the ticket's companion. Terminal for the comment; appends no
|
|
567
|
-
* chat turn. */
|
|
568
|
-
resolvePageFeedbackComment(ticketId, commentId, nodeId) {
|
|
569
|
-
if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(commentId)) {
|
|
570
|
-
throw new TypeError(`invalid feedback comment id: ${JSON.stringify(commentId)}`);
|
|
571
|
-
}
|
|
572
|
-
return this.request('POST', routes.humanInboxFeedbackResolve(this.ticketId(ticketId), commentId), { node_id: nodeId });
|
|
573
|
-
}
|
|
574
|
-
// Canvas reads / maintenance
|
|
575
|
-
/** Composed client-side from `GET /v1/nodes` + `GET /v1/status` (spec §6.3 —
|
|
576
|
-
* the dashboard is absorbed into those two reads; there is no single route).
|
|
577
|
-
* `generated_at` is the client-side capture instant of the composition. */
|
|
578
|
-
async dashboard(q) {
|
|
579
|
-
const listQuery = q?.under !== undefined ? { under: q.under } : undefined;
|
|
580
|
-
const [nodes, status] = await Promise.all([this.listNodes(listQuery), this.status()]);
|
|
581
|
-
return { nodes, counts: status.node_counts, generated_at: new Date().toISOString() };
|
|
582
|
-
}
|
|
583
|
-
attention() {
|
|
584
|
-
return this.request('GET', routes.canvasAttention());
|
|
585
|
-
}
|
|
586
|
-
/** Per-node pending-ticket counts for a bounded viewer slice. */
|
|
587
|
-
attentionCounts(node_ids) {
|
|
588
|
-
const body = { node_ids };
|
|
589
|
-
return this.request('POST', routes.canvasAttentionCounts(), body);
|
|
590
|
-
}
|
|
591
|
-
/** Ranked/filtered content search over the per-cwd episodic corpus
|
|
592
|
-
* (`crtr canvas history search`). Optional query: ranked when present,
|
|
593
|
-
* recency browse when omitted. POST-bodied — the query carries arrays and
|
|
594
|
-
* free text; the whole search executes server-side (spec §6.3). */
|
|
595
|
-
historySearch(q) {
|
|
596
|
-
return this.request('POST', routes.canvasHistorySearch(), q);
|
|
597
|
-
}
|
|
598
|
-
/** Required-pattern line-hit search over the per-cwd episodic corpus
|
|
599
|
-
* (`crtr canvas history grep`). Distinct stable schema from `historySearch`
|
|
600
|
-
* — POST-bodied for the same reasons. */
|
|
601
|
-
historyGrep(q) {
|
|
602
|
-
return this.request('POST', routes.canvasHistoryGrep(), q);
|
|
603
|
-
}
|
|
604
|
-
/** Resolve one `<node-id>:<relpath>` history ref to its full body
|
|
605
|
-
* (`crtr canvas history read`). */
|
|
606
|
-
historyRead(q) {
|
|
607
|
-
return this.request('GET', withQuery(routes.canvasHistoryRead(), q));
|
|
608
|
-
}
|
|
609
|
-
/** Grouped-count projection over the per-cwd episodic corpus
|
|
610
|
-
* (`crtr canvas history stats`). Same filters as search/grep, aggregate
|
|
611
|
-
* result instead of a hit page — POST-bodied for the same reasons. */
|
|
612
|
-
historyStats(q) {
|
|
613
|
-
return this.request('POST', routes.canvasHistoryStats(), q);
|
|
614
|
-
}
|
|
615
|
-
/** The machine-readable browser canvas roster (`crtr canvas snapshot`) —
|
|
616
|
-
* distinct from the per-node `getSnapshot`. */
|
|
617
|
-
canvasSnapshot() {
|
|
618
|
-
return this.request('GET', routes.canvasSnapshot());
|
|
619
|
-
}
|
|
620
|
-
/** The lean, set-based topology roster (`GET /v1/canvas/roster`) — exactly
|
|
621
|
-
* two indexed queries server-side, no per-row enrichment. The recurring
|
|
622
|
-
* poll target for attach/browser topology; use `canvasSnapshot` for the
|
|
623
|
-
* enriched on-demand view. */
|
|
624
|
-
canvasRoster() {
|
|
625
|
-
return this.request('GET', routes.canvasRoster());
|
|
626
|
-
}
|
|
627
|
-
prune(req) {
|
|
628
|
-
return this.request('POST', routes.canvasPrune(), req);
|
|
629
|
-
}
|
|
630
|
-
// Escape hatch
|
|
631
|
-
/** Raw request for routes not yet method-wrapped. Applies the same
|
|
632
|
-
* autostart + error-mapping semantics. */
|
|
633
|
-
async request(method, path, body, timeoutMs) {
|
|
634
|
-
return parse(await this.send(method, path, body, undefined, timeoutMs));
|
|
635
|
-
}
|
|
636
|
-
/** The unparsed request: cold-socket and interrupted-response recovery, no
|
|
637
|
-
* JSON parse. Every wrapper goes through here; only non-JSON routes call it directly. */
|
|
638
|
-
async send(method, path, body, extraHeaders, timeoutMs) {
|
|
639
|
-
try {
|
|
640
|
-
return await this.transport(method, path, body, extraHeaders, timeoutMs);
|
|
641
|
-
}
|
|
642
|
-
catch (err) {
|
|
643
|
-
if (this.isColdSocketError(err)) {
|
|
644
|
-
try {
|
|
645
|
-
await this.handleColdSocket(err);
|
|
646
|
-
return await this.transport(method, path, body, extraHeaders, timeoutMs);
|
|
647
|
-
}
|
|
648
|
-
catch (recoveryError) {
|
|
649
|
-
throw toTransportApiError(recoveryError);
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
|
-
if (this.isInterruptedSocketError(err))
|
|
653
|
-
return await this.rideOutInterruptedRequest(method, path, body, extraHeaders, timeoutMs);
|
|
654
|
-
throw toTransportApiError(err);
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
// internals
|
|
658
|
-
nodePath(id) {
|
|
659
|
-
if (!isSafeNodeId(id)) {
|
|
660
|
-
throw new ApiError(400, 'invalid_node_id', `invalid node id: ${JSON.stringify(id)}`);
|
|
661
|
-
}
|
|
662
|
-
return id;
|
|
663
|
-
}
|
|
664
|
-
/** Validate a background job id before route construction. Job ids arrive
|
|
665
|
-
* from the daemon's file-backed roster and must remain one path segment. */
|
|
666
|
-
jobPath(id) {
|
|
667
|
-
if (!isSafeBashJobId(id)) {
|
|
668
|
-
throw new ApiError(400, 'invalid_job_id', `invalid background job id: ${JSON.stringify(id)}`);
|
|
669
|
-
}
|
|
670
|
-
return id;
|
|
671
|
-
}
|
|
672
|
-
/** Validate a cron id before route construction — `routes.ts` interpolates
|
|
673
|
-
* it raw, so a value carrying `/`, whitespace or `?` would corrupt the
|
|
674
|
-
* request line rather than 404 cleanly. Mirrors `nodePath`. */
|
|
675
|
-
cronPath(id) {
|
|
676
|
-
if (!isSafeCronId(id)) {
|
|
677
|
-
throw new ApiError(400, 'invalid_cron_id', `invalid cron id: ${JSON.stringify(id)}`);
|
|
678
|
-
}
|
|
679
|
-
return id;
|
|
680
|
-
}
|
|
681
|
-
/** Validate a request id before route construction. Requests use the daemon's
|
|
682
|
-
* node-id-shaped identifiers, while inbox presentation uses a separate ticket
|
|
683
|
-
* id. A malformed request id is a server-rejectable request. */
|
|
684
|
-
requestPath(id) {
|
|
685
|
-
if (!isSafeNodeId(id)) {
|
|
686
|
-
throw new ApiError(400, 'invalid_request_id', `invalid request id: ${JSON.stringify(id)}`);
|
|
687
|
-
}
|
|
688
|
-
return id;
|
|
689
|
-
}
|
|
690
|
-
/** Validate an opaque inbox ticket id before route construction. A local
|
|
691
|
-
* shape violation is a caller bug, not a server-rejectable request — throws
|
|
692
|
-
* `TypeError` (matching the existing safe-segment discipline of a local
|
|
693
|
-
* precondition, distinct from `nodePath`'s `ApiError` because that one IS a
|
|
694
|
-
* request the server could plausibly receive and reject itself). */
|
|
695
|
-
ticketId(id) {
|
|
696
|
-
if (!/^[a-f0-9]{64}$/.test(id)) {
|
|
697
|
-
throw new TypeError(`invalid inbox ticket id: ${JSON.stringify(id)}`);
|
|
698
|
-
}
|
|
699
|
-
return id;
|
|
700
|
-
}
|
|
701
|
-
/** Validate a review id before route construction (D-A6). Reviews are minted
|
|
702
|
-
* and addressed like node ids, but arrive from agent argv, so a malformed
|
|
703
|
-
* one is a plausible request the server would also reject — `ApiError`,
|
|
704
|
-
* not `TypeError`, matching `nodePath`. */
|
|
705
|
-
reviewPath(id) {
|
|
706
|
-
if (!isSafeNodeId(id)) {
|
|
707
|
-
throw new ApiError(400, 'invalid_review_id', `invalid review id: ${JSON.stringify(id)}`);
|
|
708
|
-
}
|
|
709
|
-
return id;
|
|
710
|
-
}
|
|
711
|
-
/** Validate a comment id before route construction (D-A6). Comment ids are
|
|
712
|
-
* daemon-minted 32-char lowercase hex, but — like `reviewPath` — arrive from
|
|
713
|
-
* agent argv, so a bad one is a plausible request the server would also
|
|
714
|
-
* reject, not a caller-bug `TypeError` like `ticketId`. */
|
|
715
|
-
commentPath(id) {
|
|
716
|
-
if (!/^[a-f0-9]{32}$/.test(id)) {
|
|
717
|
-
throw new ApiError(400, 'invalid_comment_id', `invalid comment id: ${JSON.stringify(id)}`);
|
|
718
|
-
}
|
|
719
|
-
return id;
|
|
720
|
-
}
|
|
721
|
-
transport(method, path, body, extraHeaders, timeoutMs = this.timeoutMs) {
|
|
722
|
-
const usingHttps = this.baseUrl?.protocol === 'https:';
|
|
723
|
-
const doRequest = usingHttps ? httpsRequest : httpRequest;
|
|
724
|
-
const payload = body === undefined ? undefined : JSON.stringify(body);
|
|
725
|
-
const headers = { accept: 'application/json', ...this.headers, ...extraHeaders };
|
|
726
|
-
if (payload !== undefined) {
|
|
727
|
-
headers['content-type'] = 'application/json';
|
|
728
|
-
headers['content-length'] = String(Buffer.byteLength(payload));
|
|
729
|
-
}
|
|
730
|
-
const options = {
|
|
731
|
-
method,
|
|
732
|
-
path,
|
|
733
|
-
headers,
|
|
734
|
-
timeout: timeoutMs,
|
|
735
|
-
};
|
|
736
|
-
if (this.socketPath !== undefined) {
|
|
737
|
-
options.socketPath = this.socketPath;
|
|
738
|
-
}
|
|
739
|
-
else if (this.baseUrl !== undefined) {
|
|
740
|
-
options.protocol = this.baseUrl.protocol;
|
|
741
|
-
options.hostname = this.baseUrl.hostname;
|
|
742
|
-
if (this.baseUrl.port !== '')
|
|
743
|
-
options.port = this.baseUrl.port;
|
|
744
|
-
}
|
|
745
|
-
return new Promise((resolve, reject) => {
|
|
746
|
-
const req = doRequest(options, (res) => {
|
|
747
|
-
const chunks = [];
|
|
748
|
-
res.on('data', (chunk) => chunks.push(chunk));
|
|
749
|
-
res.on('end', () => {
|
|
750
|
-
const received = {};
|
|
751
|
-
for (const [name, value] of Object.entries(res.headers)) {
|
|
752
|
-
if (value !== undefined)
|
|
753
|
-
received[name] = Array.isArray(value) ? value.join(', ') : value;
|
|
754
|
-
}
|
|
755
|
-
resolve({ status: res.statusCode ?? 0, text: Buffer.concat(chunks).toString('utf8'), headers: received });
|
|
756
|
-
});
|
|
757
|
-
res.on('error', reject);
|
|
758
|
-
});
|
|
759
|
-
req.on('error', reject);
|
|
760
|
-
req.on('timeout', () => {
|
|
761
|
-
req.destroy(Object.assign(new Error('request timed out'), { code: 'ETIMEDOUT' }));
|
|
762
|
-
});
|
|
763
|
-
if (payload !== undefined)
|
|
764
|
-
req.write(payload);
|
|
765
|
-
req.end();
|
|
766
|
-
});
|
|
767
|
-
}
|
|
768
|
-
isColdSocketError(err) {
|
|
769
|
-
if (this.socketPath === undefined)
|
|
770
|
-
return false;
|
|
771
|
-
const code = err?.code;
|
|
772
|
-
return code === 'ECONNREFUSED' || code === 'ENOENT' || code === 'ENOTSOCK';
|
|
773
|
-
}
|
|
774
|
-
/** A connection torn down MID-request (Node's "socket hang up" / a broken
|
|
775
|
-
* pipe). It establishes only that the response was interrupted, not why. */
|
|
776
|
-
isInterruptedSocketError(err) {
|
|
777
|
-
if (this.socketPath === undefined)
|
|
778
|
-
return false;
|
|
779
|
-
const code = err?.code;
|
|
780
|
-
return code === 'ECONNRESET' || code === 'EPIPE';
|
|
781
|
-
}
|
|
782
|
-
/** Wait for the local API after an interrupted response. GET/HEAD can retry
|
|
783
|
-
* because they are idempotent. A mutation may already have been applied, so
|
|
784
|
-
* it never replays. */
|
|
785
|
-
async rideOutInterruptedRequest(method, path, body, extraHeaders, timeoutMs) {
|
|
786
|
-
try {
|
|
787
|
-
await this.awaitAvailability();
|
|
788
|
-
}
|
|
789
|
-
catch (error) {
|
|
790
|
-
throw toTransportApiError(error);
|
|
791
|
-
}
|
|
792
|
-
if (method !== 'GET' && method !== 'HEAD') {
|
|
793
|
-
throw new ApiError(503, 'daemon_request_interrupted', `crtrd connection ended before this ${method} response; the request may or may not have been applied.`);
|
|
794
|
-
}
|
|
795
|
-
try {
|
|
796
|
-
return await this.transport(method, path, body, extraHeaders, timeoutMs);
|
|
797
|
-
}
|
|
798
|
-
catch (err) {
|
|
799
|
-
throw toTransportApiError(err);
|
|
800
|
-
}
|
|
801
|
-
}
|
|
802
|
-
async awaitAvailability(initialError) {
|
|
803
|
-
await waitForDaemonAvailability({
|
|
804
|
-
windowMs: this.coldStartPollWindowMs,
|
|
805
|
-
initialError,
|
|
806
|
-
probe: async (timeoutMs) => {
|
|
807
|
-
const response = await this.transport('GET', routes.healthz(), undefined, undefined, timeoutMs);
|
|
808
|
-
if (response.status >= 200 && response.status < 300)
|
|
809
|
-
return;
|
|
810
|
-
try {
|
|
811
|
-
const health = JSON.parse(response.text);
|
|
812
|
-
if (typeof health.startup_blocked === 'string')
|
|
813
|
-
return;
|
|
814
|
-
}
|
|
815
|
-
catch {
|
|
816
|
-
// The normal unavailable error below carries the response body.
|
|
817
|
-
}
|
|
818
|
-
throw new ApiError(response.status, 'daemon_health_unavailable', `crtrd health check returned HTTP ${response.status}: ${response.text.slice(0, 500)}`);
|
|
819
|
-
},
|
|
820
|
-
});
|
|
821
|
-
}
|
|
822
|
-
/** Optionally start the daemon, then observe availability before retrying the
|
|
823
|
-
* request. Waiting is independent from permission to spawn: externally
|
|
824
|
-
* managed daemons still get the same bounded readiness window. */
|
|
825
|
-
async handleColdSocket(initialError) {
|
|
826
|
-
const startedHere = this.autostart && this.onColdSocket !== undefined && !this.coldStartAttempted;
|
|
827
|
-
if (startedHere) {
|
|
828
|
-
this.coldStartAttempted = true;
|
|
829
|
-
await this.onColdSocket();
|
|
830
|
-
}
|
|
831
|
-
try {
|
|
832
|
-
await this.awaitAvailability(initialError);
|
|
833
|
-
}
|
|
834
|
-
catch (error) {
|
|
835
|
-
if (startedHere) {
|
|
836
|
-
const diagnostic = safeColdStartDiagnostic(this.coldStartDiagnostic);
|
|
837
|
-
if (diagnostic !== undefined) {
|
|
838
|
-
const transportError = toTransportApiError(error);
|
|
839
|
-
throw new ApiError(transportError.status, transportError.code, `${transportError.message}\n${diagnostic}`);
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
throw error;
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
/** Append defined query params to a path. Kept in the client (not `routes.ts`,
|
|
847
|
-
* which stays logic-free). Undefined/null values are skipped. */
|
|
848
|
-
function withQuery(base, query) {
|
|
849
|
-
if (query === undefined)
|
|
850
|
-
return base;
|
|
851
|
-
const params = new URLSearchParams();
|
|
852
|
-
for (const [key, value] of Object.entries(query)) {
|
|
853
|
-
if (value !== undefined && value !== null)
|
|
854
|
-
params.set(key, String(value));
|
|
855
|
-
}
|
|
856
|
-
const qs = params.toString();
|
|
857
|
-
return qs === '' ? base : `${base}?${qs}`;
|
|
858
|
-
}
|
|
859
|
-
/** Parse a raw response into `T`, or throw `ApiError` on non-2xx. A 204/empty
|
|
860
|
-
* body yields `undefined` (callers that type `void`/optional handle it). */
|
|
861
|
-
function parse(res) {
|
|
862
|
-
const ok = res.status >= 200 && res.status < 300;
|
|
863
|
-
const trimmed = res.text.trim();
|
|
864
|
-
let payload;
|
|
865
|
-
if (trimmed !== '') {
|
|
866
|
-
try {
|
|
867
|
-
payload = JSON.parse(trimmed);
|
|
868
|
-
}
|
|
869
|
-
catch {
|
|
870
|
-
if (ok)
|
|
871
|
-
return undefined;
|
|
872
|
-
throw new ApiError(res.status, 'invalid_response', res.text.slice(0, 500));
|
|
873
|
-
}
|
|
874
|
-
}
|
|
875
|
-
if (ok)
|
|
876
|
-
return payload;
|
|
877
|
-
if (isErrorBody(payload)) {
|
|
878
|
-
throw new ApiError(res.status, payload.error.code, payload.error.message, payload.error.details);
|
|
879
|
-
}
|
|
880
|
-
throw new ApiError(res.status, 'internal', `request failed with status ${res.status}`);
|
|
881
|
-
}
|
|
882
|
-
/** Map a transport-layer throw (never an HTTP status) to an `ApiError`. A
|
|
883
|
-
* connection refusal here means the daemon is unreachable and autostart could
|
|
884
|
-
* not recover it. */
|
|
885
|
-
function toTransportApiError(err) {
|
|
886
|
-
if (err instanceof ApiError)
|
|
887
|
-
return err;
|
|
888
|
-
const code = err?.code;
|
|
889
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
890
|
-
if (code === 'ECONNREFUSED' || code === 'ENOENT' || code === 'ENOTSOCK') {
|
|
891
|
-
return new ApiError(503, 'daemon_unavailable', `crtrd is not reachable: ${message}`);
|
|
892
|
-
}
|
|
893
|
-
if (code === 'ETIMEDOUT') {
|
|
894
|
-
// A per-request timeout against a REACHABLE daemon is not "crtrd not running"
|
|
895
|
-
// (§8 reserves daemon_unavailable for unreachable/autostart-failed).
|
|
896
|
-
return new ApiError(504, 'request_timeout', `crtrd request timed out: ${message}`);
|
|
897
|
-
}
|
|
898
|
-
return new ApiError(503, 'transport_error', message);
|
|
899
|
-
}
|
|
900
|
-
function sleepMs(ms) {
|
|
901
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
902
|
-
}
|
|
903
|
-
export function safeColdStartDiagnostic(hook) {
|
|
904
|
-
if (hook === undefined)
|
|
905
|
-
return undefined;
|
|
906
|
-
try {
|
|
907
|
-
return hook();
|
|
908
|
-
}
|
|
909
|
-
catch {
|
|
910
|
-
return undefined;
|
|
911
|
-
}
|
|
912
|
-
}
|
|
1
|
+
var b=Object.defineProperty;var d=(n,e)=>b(n,"name",{value:e,configurable:!0});import{envHomeOverride as C}from"../shared/env.js";import{request as G}from"node:http";import{request as N}from"node:https";import{homedir as _}from"node:os";import{join as k}from"node:path";import{ApiError as u,isErrorBody as A}from"./errors.js";import{routes as r}from"./routes.js";import{isSafeNodeId as p}from"./dto/common.js";import{isSafeBashJobId as D}from"./dto/bash-jobs.js";import{isSafeCronId as I}from"./dto/crons.js";const x=".crouter",M="crtrd.sock";function B(){const n=C(),e=n!==void 0&&n!==""?n:k(_(),x,"canvas");return k(e,M)}d(B,"defaultSocketPath");const H=3e4,$=1e4,U=200;async function L({windowMs:n,probe:e,initialError:t,pollIntervalMs:s=U,retry:o=d(()=>!0,"retry"),now:a=Date.now,sleep:h=F}){const P=a()+n;let c=t;for(;;){const m=P-a();if(m<=0)throw c??new Error("crtrd availability window expired without a probe failure");try{await e(m);return}catch(f){if(c=f,!o(f))throw f}const l=P-a();if(l<=0)throw c;await h(Math.min(s,l))}}d(L,"waitForDaemonAvailability");class R{static{d(this,"CrtrClient")}socketPath;baseUrl;headers;autostart;timeoutMs;onColdSocket;coldStartDiagnostic;coldStartPollWindowMs;coldStartAttempted=!1;constructor(e){const t=e.socketPath!==void 0&&e.socketPath!=="",s=e.baseUrl!==void 0&&e.baseUrl!=="";if(t===s)throw new TypeError("CrtrClient requires exactly one of socketPath | baseUrl");t&&(this.socketPath=e.socketPath),s&&(this.baseUrl=new URL(e.baseUrl)),this.headers={...e.headers},this.autostart=e.autostart??t,this.timeoutMs=e.timeoutMs??H,e.onColdSocket!==void 0&&(this.onColdSocket=e.onColdSocket),e.coldStartDiagnostic!==void 0&&(this.coldStartDiagnostic=e.coldStartDiagnostic),this.coldStartPollWindowMs=e.coldStartPollWindowMs??$}static forLocalSocket(e){return new R({socketPath:B(),autostart:!0,...e})}healthz(){return this.request("GET",r.healthz())}async probeHealthz(e){const t=await this.transport("GET",r.healthz(),void 0,void 0,e);if(t.status===503)try{const s=JSON.parse(t.text);if(typeof s.startup_blocked=="string")return s}catch{}return y(t)}status(){return this.request("GET",r.status())}restartDaemon(){return this.request("POST",r.daemonRestart())}admitDaemon(){return this.request("POST",r.daemonAdmit())}migrateState(e){return this.request("POST",r.daemonMigrate(),e)}createNode(e){return this.request("POST",r.nodes(),e)}listNodes(e){return this.request("GET",i(r.nodes(),e))}getNode(e){return this.request("GET",r.node(this.nodePath(e)))}getNodeOutcome(e,{waitSeconds:t}={}){if(t!==void 0&&(!Number.isInteger(t)||t<0||t>25))throw new RangeError("waitSeconds must be an integer between 0 and 25");return this.request("GET",i(r.nodeOutcome(this.nodePath(e)),{wait:t}),void 0,(t??0)*1e3+this.timeoutMs)}registerOutcomeDelivery(e,t){return this.request("PUT",r.nodeOutcomeDelivery(this.nodePath(e)),t)}getOutcomeDelivery(e){return this.request("GET",r.nodeOutcomeDelivery(this.nodePath(e)))}async disarmOutcomeDelivery(e){await this.request("DELETE",r.nodeOutcomeDelivery(this.nodePath(e)))}listBashJobs(e){return this.request("GET",r.nodeJobs(this.nodePath(e)))}stopBashJob(e,t){return this.request("DELETE",r.nodeJob(this.nodePath(e),this.jobPath(t)))}sendMessage(e,t){return this.request("POST",r.nodeMessages(this.nodePath(e)),t)}interruptNode(e){return this.request("POST",r.nodeInterrupt(this.nodePath(e)),{})}pushReport(e,t){return this.request("POST",r.nodeReports(this.nodePath(e)),t)}submitResult(e,t){return this.request("POST",r.nodeResult(this.nodePath(e)),t)}forkNode(e){return this.request("POST",r.nodeFork(this.nodePath(e)),{})}reviveNode(e,t){return this.request("POST",r.nodeRevive(this.nodePath(e)),t??{})}relaunchRoot(e){return this.request("POST",r.nodeRelaunchRoot(this.nodePath(e)),{})}bindBrokerSession(e,t){return this.request("POST",r.nodeBrokerSessionBound(this.nodePath(e)),t)}settleBroker(e,t){return this.request("POST",r.nodeBrokerSettle(this.nodePath(e)),t)}completeBrokerPark(e,t){return this.request("POST",r.nodeBrokerParkComplete(this.nodePath(e)),t)}recordBrokerParkActivity(e,t){return this.request("POST",r.nodeBrokerParkActivity(this.nodePath(e)),t)}claimNodeMail(e,t){return this.request("POST",r.nodeMailClaim(this.nodePath(e)),t)}acknowledgeNodeMail(e,t){return this.request("POST",r.nodeMailAcknowledge(this.nodePath(e)),t)}recordBrokerTurn(e,t){return this.request("POST",r.brokerTurn(this.nodePath(e)),t)}mutateBrokerProviderRetry(e,t){return this.request("POST",r.brokerProviderRetry(this.nodePath(e)),t)}mutateBrokerFault(e,t){return this.request("POST",r.brokerFault(this.nodePath(e)),t)}getBrokerRecovery(e,t){return this.request("GET",`${r.brokerRecovery(this.nodePath(e))}?expected_execution_id=${encodeURIComponent(t)}`)}recordNodeFault(e,t){return this.request("POST",r.nodeFault(this.nodePath(e)),t)}clearNodeFault(e,t={}){const s=new URLSearchParams;t.link!==void 0&&s.set("link",t.link),t.preserve_episode!==void 0&&s.set("preserve_episode",String(t.preserve_episode));const o=s.size===0?"":`?${s.toString()}`;return this.request("DELETE",`${r.nodeFault(this.nodePath(e))}${o}`)}commitBrokerModel(e,t){return this.request("POST",r.nodeBrokerModel(this.nodePath(e)),t)}brokerExtensionState(e){return this.request("GET",r.nodeBrokerExtensionState(this.nodePath(e)))}commitBrokerGeneratedName(e,t){return this.request("POST",r.nodeBrokerGeneratedName(this.nodePath(e)),t)}commitBrokerPersonaAck(e,t){return this.request("POST",r.nodeBrokerPersonaAck(this.nodePath(e)),t)}closeNode(e,t){return this.request("POST",r.nodeClose(this.nodePath(e)),t??{})}recycleNode(e){return this.request("POST",r.nodeRecycle(this.nodePath(e)),{})}demoteNode(e){return this.request("POST",r.nodeDemote(this.nodePath(e)),{})}promoteNode(e,t){return this.request("POST",r.nodePromote(this.nodePath(e)),t)}yieldNode(e,t){return this.request("POST",r.nodeYield(this.nodePath(e)),t)}waitNode(e,t){return this.request("POST",r.nodeWait(this.nodePath(e)),t)}patchConfig(e,t){return this.request("PATCH",r.nodeConfig(this.nodePath(e)),t)}closeWorktree(e){return this.request("POST",r.nodeWorktreeClose(this.nodePath(e)),{})}abandonWorktree(e,t){return this.request("POST",r.nodeWorktreeAbandon(this.nodePath(e)),t)}listQuarantinedWorktrees(){return this.request("GET",r.quarantinedWorktrees())}subscribe(e,t){return this.request("POST",r.nodeSubscriptions(this.nodePath(e)),t)}listFocuses(){return this.request("GET",r.focuses())}focusOf(e){return this.request("GET",i(r.focusByNode(),{node_id:e}))}focusByPane(e){return this.request("GET",i(r.focusByPane(),{pane:e}))}registerFocus(e){return this.request("POST",r.focuses(),e)}async setFocusPane(e,t){await this.request("PATCH",r.focus(e),t)}async closeFocus(e){await this.request("DELETE",r.focus(e))}async unsubscribe(e,t){await this.request("DELETE",r.nodeSubscription(this.nodePath(e),this.nodePath(t)))}armCron(e){return this.request("POST",r.crons(),e)}listCrons(e){return this.request("GET",i(r.crons(),e))}showCron(e,t){return this.request("GET",i(r.cron(this.cronPath(e)),t))}pauseCron(e,t){return this.request("POST",i(r.cronPause(this.cronPath(e)),t),{})}resumeCron(e,t){return this.request("POST",i(r.cronResume(this.cronPath(e)),t),{})}runCron(e,t){return this.request("POST",i(r.cronRun(this.cronPath(e)),t),{})}async cancelCron(e,t){await this.request("DELETE",i(r.cron(this.cronPath(e)),t))}pokeCrons(){return this.request("POST",r.cronsPoke(),{})}ensureAttach(e,t){return this.request("POST",r.nodeAttach(this.nodePath(e)),t??{})}getReports(e,t){return this.request("GET",i(r.nodeReports(this.nodePath(e)),t))}getTranscript(e,t){return this.request("GET",i(r.nodeTranscript(this.nodePath(e)),t))}getSnapshot(e){return this.request("GET",r.nodeSnapshot(this.nodePath(e)))}nodeSubject(e){return this.request("GET",r.nodeSubject(this.nodePath(e)))}getNodeMessages(e,t){return this.request("GET",i(r.nodeMessages(this.nodePath(e)),t))}getSession(e){return this.request("GET",r.nodeSession(this.nodePath(e)))}getChatInventory(e){return this.request("GET",r.nodeChatInventory(this.nodePath(e)))}getProspectiveChatInventory(e){return this.request("GET",i(r.prospectiveChatInventory(),e))}getArtifacts(e,t){return this.request("GET",i(r.nodeArtifacts(this.nodePath(e)),t))}getContext(e){return this.request("GET",r.nodeContext(this.nodePath(e)))}peekFile(e){return this.request("GET",i(r.filePeek(),{path:e}))}resolveMemoryDoc(e,t){return this.request("GET",i(r.memoryResolve(),{name:e,node:t}))}ensureProfile(e,t){return this.request("PUT",r.profile(e),t??{})}listProfiles(){return this.request("GET",r.profiles())}getProfile(e){return this.request("GET",r.profile(e))}pauseProfile(e){return this.request("POST",r.profilePause(e),{})}resumeProfile(e){return this.request("POST",r.profileResume(e),{})}updateProfileMetadata(e,t){return this.request("PATCH",r.profileMetadata(e),t)}deleteProfile(e,t){return this.request("DELETE",r.profile(e),t)}listModelAuth(){return this.request("GET",r.modelAuths())}installCredential(e,t){return this.request("PUT",r.modelAuth(e),t)}removeCredential(e){return this.request("DELETE",r.modelAuth(e))}createReview(e){return this.request("POST",r.humanReviews(),e)}listReviews(e){return this.request("GET",i(r.humanReviews(),e))}getReview(e){return this.request("GET",r.humanReview(this.reviewPath(e)))}submitReview(e){return this.request("POST",r.humanReviewSubmit(this.reviewPath(e)),{})}cancelReview(e,t={}){return this.request("POST",r.humanReviewCancel(this.reviewPath(e)),t)}getReviewDocumentBase(e){return this.request("GET",r.humanReviewDocument(this.reviewPath(e)))}createReviewComment(e,t){const s=e===void 0?"self":this.reviewPath(e);return this.request("POST",r.humanReviewComments(s),t)}listReviewComments(e,t){const s=e===void 0?"self":this.reviewPath(e);return this.request("GET",i(r.humanReviewComments(s),t))}readReviewCommentEvents(e,t){return this.request("GET",i(r.humanReviewCommentEvents(this.reviewPath(e)),t))}updateReviewCommentRanges(e,t){return this.request("POST",r.humanReviewCommentRanges(this.reviewPath(e)),t)}getReviewComment(e){return this.request("GET",r.humanComment(this.commentPath(e)))}editReviewComment(e,t){return this.request("POST",r.humanCommentEdit(this.commentPath(e)),t)}resolveReviewComment(e,t={}){return this.request("POST",r.humanCommentResolve(this.commentPath(e)),t)}reopenReviewComment(e,t={}){return this.request("POST",r.humanCommentReopen(this.commentPath(e)),t)}deleteReviewComment(e,t={}){return this.request("POST",r.humanCommentDelete(this.commentPath(e)),t)}listHumanInbox(){return this.request("GET",r.humanInbox())}getHumanInboxPage(e){return this.request("GET",r.humanInboxTicket(this.ticketId(e)))}getInboxHistory(e){if(e===void 0)return this.request("GET",r.humanInbox()+"/history");if(typeof e!="string"||e==="")throw new TypeError(`invalid node id: ${JSON.stringify(e)}`);return this.request("GET",i(r.humanInbox()+"/history",{node_id:e}))}respondHumanInboxPage(e,t){return this.request("POST",r.humanInboxRespond(this.ticketId(e)),t)}postInboxProgress(e,t){return this.request("POST",r.humanInboxProgress(this.ticketId(e)),{responses:t})}getInboxResponse(e){return this.request("GET",r.humanInboxResponse(this.ticketId(e)))}cancelHumanInboxTicket(e,t){return this.request("POST",r.humanInboxCancel(this.ticketId(e)),t??{})}createHumanRequest(e){return this.request("POST",r.humanRequests(),e)}getHumanRequest(e){return this.request("GET",r.humanRequest(this.requestPath(e)))}replaceHumanRequest(e,t){return this.request("POST",r.humanRequestReplace(this.requestPath(e)),t)}respondHumanRequest(e,t){return this.request("POST",r.humanRequestRespond(this.requestPath(e)),t)}dismissHumanRequest(e,t={}){return this.request("POST",r.humanRequestDismiss(this.requestPath(e)),t)}cancelHumanRequest(e,t={}){return this.request("POST",r.humanRequestCancel(this.requestPath(e)),t)}resolvePageFeedbackComment(e,t,s){if(!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(t))throw new TypeError(`invalid feedback comment id: ${JSON.stringify(t)}`);return this.request("POST",r.humanInboxFeedbackResolve(this.ticketId(e),t),{node_id:s})}async dashboard(e){const t=e?.under!==void 0?{under:e.under}:void 0,[s,o]=await Promise.all([this.listNodes(t),this.status()]);return{nodes:s,counts:o.node_counts,generated_at:new Date().toISOString()}}attention(){return this.request("GET",r.canvasAttention())}attentionCounts(e){const t={node_ids:e};return this.request("POST",r.canvasAttentionCounts(),t)}historySearch(e){return this.request("POST",r.canvasHistorySearch(),e)}historyGrep(e){return this.request("POST",r.canvasHistoryGrep(),e)}historyRead(e){return this.request("GET",i(r.canvasHistoryRead(),e))}historyStats(e){return this.request("POST",r.canvasHistoryStats(),e)}canvasSnapshot(){return this.request("GET",r.canvasSnapshot())}canvasRoster(){return this.request("GET",r.canvasRoster())}prune(e){return this.request("POST",r.canvasPrune(),e)}async request(e,t,s,o){return y(await this.send(e,t,s,void 0,o))}async send(e,t,s,o,a){try{return await this.transport(e,t,s,o,a)}catch(h){if(this.isColdSocketError(h))try{return await this.handleColdSocket(h),await this.transport(e,t,s,o,a)}catch(P){throw S(P)}if(this.isInterruptedSocketError(h))return await this.rideOutInterruptedRequest(e,t,s,o,a);throw S(h)}}nodePath(e){if(!p(e))throw new u(400,"invalid_node_id",`invalid node id: ${JSON.stringify(e)}`);return e}jobPath(e){if(!D(e))throw new u(400,"invalid_job_id",`invalid background job id: ${JSON.stringify(e)}`);return e}cronPath(e){if(!I(e))throw new u(400,"invalid_cron_id",`invalid cron id: ${JSON.stringify(e)}`);return e}requestPath(e){if(!p(e))throw new u(400,"invalid_request_id",`invalid request id: ${JSON.stringify(e)}`);return e}ticketId(e){if(!/^[a-f0-9]{64}$/.test(e))throw new TypeError(`invalid inbox ticket id: ${JSON.stringify(e)}`);return e}reviewPath(e){if(!p(e))throw new u(400,"invalid_review_id",`invalid review id: ${JSON.stringify(e)}`);return e}commentPath(e){if(!/^[a-f0-9]{32}$/.test(e))throw new u(400,"invalid_comment_id",`invalid comment id: ${JSON.stringify(e)}`);return e}transport(e,t,s,o,a=this.timeoutMs){const P=this.baseUrl?.protocol==="https:"?N:G,c=s===void 0?void 0:JSON.stringify(s),m={accept:"application/json",...this.headers,...o};c!==void 0&&(m["content-type"]="application/json",m["content-length"]=String(Buffer.byteLength(c)));const l={method:e,path:t,headers:m,timeout:a};return this.socketPath!==void 0?l.socketPath=this.socketPath:this.baseUrl!==void 0&&(l.protocol=this.baseUrl.protocol,l.hostname=this.baseUrl.hostname,this.baseUrl.port!==""&&(l.port=this.baseUrl.port)),new Promise((f,v)=>{const q=P(l,T=>{const O=[];T.on("data",E=>O.push(E)),T.on("end",()=>{const E={};for(const[g,w]of Object.entries(T.headers))w!==void 0&&(E[g]=Array.isArray(w)?w.join(", "):w);f({status:T.statusCode??0,text:Buffer.concat(O).toString("utf8"),headers:E})}),T.on("error",v)});q.on("error",v),q.on("timeout",()=>{q.destroy(Object.assign(new Error("request timed out"),{code:"ETIMEDOUT"}))}),c!==void 0&&q.write(c),q.end()})}isColdSocketError(e){if(this.socketPath===void 0)return!1;const t=e?.code;return t==="ECONNREFUSED"||t==="ENOENT"||t==="ENOTSOCK"}isInterruptedSocketError(e){if(this.socketPath===void 0)return!1;const t=e?.code;return t==="ECONNRESET"||t==="EPIPE"}async rideOutInterruptedRequest(e,t,s,o,a){try{await this.awaitAvailability()}catch(h){throw S(h)}if(e!=="GET"&&e!=="HEAD")throw new u(503,"daemon_request_interrupted",`crtrd connection ended before this ${e} response; the request may or may not have been applied.`);try{return await this.transport(e,t,s,o,a)}catch(h){throw S(h)}}async awaitAvailability(e){await L({windowMs:this.coldStartPollWindowMs,initialError:e,probe:d(async t=>{const s=await this.transport("GET",r.healthz(),void 0,void 0,t);if(!(s.status>=200&&s.status<300)){try{if(typeof JSON.parse(s.text).startup_blocked=="string")return}catch{}throw new u(s.status,"daemon_health_unavailable",`crtrd health check returned HTTP ${s.status}: ${s.text.slice(0,500)}`)}},"probe")})}async handleColdSocket(e){const t=this.autostart&&this.onColdSocket!==void 0&&!this.coldStartAttempted;t&&(this.coldStartAttempted=!0,await this.onColdSocket());try{await this.awaitAvailability(e)}catch(s){if(t){const o=J(this.coldStartDiagnostic);if(o!==void 0){const a=S(s);throw new u(a.status,a.code,`${a.message}
|
|
2
|
+
${o}`)}}throw s}}}function i(n,e){if(e===void 0)return n;const t=new URLSearchParams;for(const[o,a]of Object.entries(e))a!=null&&t.set(o,String(a));const s=t.toString();return s===""?n:`${n}?${s}`}d(i,"withQuery");function y(n){const e=n.status>=200&&n.status<300,t=n.text.trim();let s;if(t!=="")try{s=JSON.parse(t)}catch{if(e)return;throw new u(n.status,"invalid_response",n.text.slice(0,500))}if(e)return s;throw A(s)?new u(n.status,s.error.code,s.error.message,s.error.details):new u(n.status,"internal",`request failed with status ${n.status}`)}d(y,"parse");function S(n){if(n instanceof u)return n;const e=n?.code,t=n instanceof Error?n.message:String(n);return e==="ECONNREFUSED"||e==="ENOENT"||e==="ENOTSOCK"?new u(503,"daemon_unavailable",`crtrd is not reachable: ${t}`):e==="ETIMEDOUT"?new u(504,"request_timeout",`crtrd request timed out: ${t}`):new u(503,"transport_error",t)}d(S,"toTransportApiError");function F(n){return new Promise(e=>setTimeout(e,n))}d(F,"sleepMs");function J(n){if(n!==void 0)try{return n()}catch{return}}d(J,"safeColdStartDiagnostic");export{R as CrtrClient,J as safeColdStartDiagnostic,L as waitForDaemonAvailability};
|