@north-light/crouter 0.3.318 → 0.3.319
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 +5 -4
- package/runtime.lock.json +5 -5
- package/dist/api/__tests__/integration/client.test.d.ts +0 -1
- package/dist/api/__tests__/integration/client.test.js +0 -163
- package/dist/builtin-pi-packages/pi-crtr-extensions/__tests__/insights-active-init.test.ts +0 -98
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/crtr-commands.test.ts +0 -93
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/integration/provider-rotation.test.ts +0 -2530
- package/dist/clients/__tests__/helpers/human-daemon.d.ts +0 -11
- package/dist/clients/__tests__/helpers/human-daemon.js +0 -60
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/attach-remote-readonly.test.js +0 -97
- package/dist/clients/attach/__tests__/bash-call-width.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/bash-call-width.test.js +0 -38
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/chat-view-snapshot-ordering.test.js +0 -175
- package/dist/clients/attach/__tests__/completion-frecency.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/completion-frecency.test.js +0 -35
- package/dist/clients/attach/__tests__/context-message.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/context-message.test.js +0 -130
- package/dist/clients/attach/__tests__/crtr-output.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/crtr-output.test.js +0 -68
- package/dist/clients/attach/__tests__/diagram.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/diagram.test.js +0 -42
- package/dist/clients/attach/__tests__/edit-diff.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/edit-diff.test.js +0 -31
- package/dist/clients/attach/__tests__/frame-selection.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/frame-selection.test.js +0 -84
- package/dist/clients/attach/__tests__/group-activity.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/group-activity.test.js +0 -165
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/oauth-dialog-lifecycle.test.js +0 -83
- package/dist/clients/attach/__tests__/pane-tag-successor.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/pane-tag-successor.test.js +0 -56
- package/dist/clients/attach/__tests__/profile-files.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/profile-files.test.js +0 -21
- package/dist/clients/attach/__tests__/prompt-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/prompt-preview.test.js +0 -21
- package/dist/clients/attach/__tests__/ref-autocomplete.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/ref-autocomplete.test.js +0 -64
- package/dist/clients/attach/__tests__/titled-editor-paste.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-paste.test.js +0 -114
- package/dist/clients/attach/__tests__/titled-editor-preview.test.d.ts +0 -1
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +0 -83
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/inbox-controller.test.js +0 -81
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/mount-panel.test.js +0 -135
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.d.ts +0 -1
- package/dist/clients/inbox/__tests__/integration/stale-row-activation.test.js +0 -66
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +0 -35
- package/dist/clients/inbox/review/__tests__/review-core.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/review-core.test.js +0 -52
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.d.ts +0 -1
- package/dist/clients/inbox/review/__tests__/teardown-notice.test.js +0 -100
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.d.ts +0 -1
- package/dist/commands/__tests__/api-client-cold-start-diagnostic.test.js +0 -69
- package/dist/commands/__tests__/human.test.d.ts +0 -1
- package/dist/commands/__tests__/human.test.js +0 -172
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/dashboard-snapshot.test.js +0 -237
- package/dist/commands/__tests__/integration/migrate.test.d.ts +0 -1
- package/dist/commands/__tests__/integration/migrate.test.js +0 -1330
- package/dist/commands/__tests__/node-message.test.d.ts +0 -1
- package/dist/commands/__tests__/node-message.test.js +0 -112
- package/dist/commands/__tests__/node-new.test.d.ts +0 -1
- package/dist/commands/__tests__/node-new.test.js +0 -58
- package/dist/commands/__tests__/revive-now-gate.test.d.ts +0 -1
- package/dist/commands/__tests__/revive-now-gate.test.js +0 -62
- package/dist/commands/__tests__/seam/daemon-status.test.d.ts +0 -1
- package/dist/commands/__tests__/seam/daemon-status.test.js +0 -29
- package/dist/commands/__tests__/surface-reload-target.test.d.ts +0 -1
- package/dist/commands/__tests__/surface-reload-target.test.js +0 -21
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/command-selector-and-mutation-guards.test.js +0 -379
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/memory-list-and-lint-ignore.test.js +0 -124
- package/dist/commands/memory/__tests__/repository-root-lint.test.d.ts +0 -1
- package/dist/commands/memory/__tests__/repository-root-lint.test.js +0 -148
- package/dist/commands/sys/__tests__/config-model-ladders.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/config-model-ladders.test.js +0 -114
- package/dist/commands/sys/__tests__/setup-core.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/setup-core.test.js +0 -45
- package/dist/commands/sys/__tests__/sync-project-guidance.test.d.ts +0 -1
- package/dist/commands/sys/__tests__/sync-project-guidance.test.js +0 -244
- package/dist/core/__tests__/bash-guard.test.d.ts +0 -1
- package/dist/core/__tests__/bash-guard.test.js +0 -190
- package/dist/core/__tests__/boot-fault-attempt.test.d.ts +0 -1
- package/dist/core/__tests__/boot-fault-attempt.test.js +0 -105
- package/dist/core/__tests__/boot.test.d.ts +0 -1
- package/dist/core/__tests__/boot.test.js +0 -274
- package/dist/core/__tests__/branded-host-concurrency.test.d.ts +0 -1
- package/dist/core/__tests__/branded-host-concurrency.test.js +0 -72
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/broker-extension-canvas-db-boundary.test.js +0 -75
- package/dist/core/__tests__/broker-launch-candidates.test.d.ts +0 -1
- package/dist/core/__tests__/broker-launch-candidates.test.js +0 -311
- package/dist/core/__tests__/broker-preflight.test.d.ts +0 -1
- package/dist/core/__tests__/broker-preflight.test.js +0 -95
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.d.ts +0 -1
- package/dist/core/__tests__/broker-stream-watchdog-floor.test.js +0 -82
- package/dist/core/__tests__/broker-turn-admission.test.d.ts +0 -1
- package/dist/core/__tests__/broker-turn-admission.test.js +0 -44
- package/dist/core/__tests__/canvas-db-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-db-boundary.test.js +0 -46
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-hold.test.js +0 -710
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher-naming.test.js +0 -310
- package/dist/core/__tests__/canvas-inbox-watcher.test.d.ts +0 -1
- package/dist/core/__tests__/canvas-inbox-watcher.test.js +0 -397
- package/dist/core/__tests__/canvas.test.d.ts +0 -1
- package/dist/core/__tests__/canvas.test.js +0 -138
- package/dist/core/__tests__/child-death-wake.test.d.ts +0 -1
- package/dist/core/__tests__/child-death-wake.test.js +0 -153
- package/dist/core/__tests__/cli-help-contract.test.d.ts +0 -1
- package/dist/core/__tests__/cli-help-contract.test.js +0 -152
- package/dist/core/__tests__/close.test.d.ts +0 -1
- package/dist/core/__tests__/close.test.js +0 -284
- package/dist/core/__tests__/collectible.test.d.ts +0 -1
- package/dist/core/__tests__/collectible.test.js +0 -89
- package/dist/core/__tests__/config-change-delta.test.d.ts +0 -1
- package/dist/core/__tests__/config-change-delta.test.js +0 -108
- package/dist/core/__tests__/context-intro.test.d.ts +0 -1
- package/dist/core/__tests__/context-intro.test.js +0 -123
- package/dist/core/__tests__/cron-armed-context-failure.test.d.ts +0 -1
- package/dist/core/__tests__/cron-armed-context-failure.test.js +0 -150
- package/dist/core/__tests__/cron-held-settlement.test.d.ts +0 -1
- package/dist/core/__tests__/cron-held-settlement.test.js +0 -240
- package/dist/core/__tests__/cron-node-sink-parked-root.test.d.ts +0 -1
- package/dist/core/__tests__/cron-node-sink-parked-root.test.js +0 -166
- package/dist/core/__tests__/cron-self-cancel-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/cron-self-cancel-delivery.test.js +0 -84
- package/dist/core/__tests__/cron-timeout-descendants.test.d.ts +0 -1
- package/dist/core/__tests__/cron-timeout-descendants.test.js +0 -114
- package/dist/core/__tests__/daemon-boot.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-boot.test.js +0 -422
- package/dist/core/__tests__/daemon-wedge.test.d.ts +0 -1
- package/dist/core/__tests__/daemon-wedge.test.js +0 -106
- package/dist/core/__tests__/dead-node-policy-table.test.d.ts +0 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +0 -77
- package/dist/core/__tests__/events-contract.test.d.ts +0 -1
- package/dist/core/__tests__/events-contract.test.js +0 -76
- package/dist/core/__tests__/extension-abort.test.d.ts +0 -1
- package/dist/core/__tests__/extension-abort.test.js +0 -21
- package/dist/core/__tests__/fault-classifier.test.d.ts +0 -1
- package/dist/core/__tests__/fault-classifier.test.js +0 -138
- package/dist/core/__tests__/fixtures/api-server-host.d.ts +0 -1
- package/dist/core/__tests__/fixtures/api-server-host.js +0 -47
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c3-custom-provider-ext.js +0 -34
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.d.ts +0 -2
- package/dist/core/__tests__/fixtures/c5-command-boundary-ext.js +0 -32
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +0 -347
- package/dist/core/__tests__/fixtures/fake-engine.js +0 -1509
- package/dist/core/__tests__/fixtures/fake-pi-host.d.ts +0 -2
- package/dist/core/__tests__/fixtures/fake-pi-host.js +0 -311
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.d.ts +0 -1
- package/dist/core/__tests__/fixtures/memory-slash-live-probe.js +0 -75
- package/dist/core/__tests__/fixtures/metadata-migration-race.d.ts +0 -1
- package/dist/core/__tests__/fixtures/metadata-migration-race.js +0 -49
- package/dist/core/__tests__/focuses.test.d.ts +0 -1
- package/dist/core/__tests__/focuses.test.js +0 -113
- package/dist/core/__tests__/fs-utils.test.d.ts +0 -1
- package/dist/core/__tests__/fs-utils.test.js +0 -50
- package/dist/core/__tests__/helpers/broker-clients.d.ts +0 -43
- package/dist/core/__tests__/helpers/broker-clients.js +0 -174
- package/dist/core/__tests__/helpers/fleet.d.ts +0 -12
- package/dist/core/__tests__/helpers/fleet.js +0 -50
- package/dist/core/__tests__/helpers/harness.d.ts +0 -124
- package/dist/core/__tests__/helpers/harness.js +0 -806
- package/dist/core/__tests__/helpers/viewer-panes.d.ts +0 -12
- package/dist/core/__tests__/helpers/viewer-panes.js +0 -133
- package/dist/core/__tests__/history-inbox.test.d.ts +0 -1
- package/dist/core/__tests__/history-inbox.test.js +0 -121
- package/dist/core/__tests__/human-action-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/human-action-delivery.test.js +0 -162
- package/dist/core/__tests__/human-actions.test.d.ts +0 -1
- package/dist/core/__tests__/human-actions.test.js +0 -120
- package/dist/core/__tests__/inline-memory-refs.test.d.ts +0 -1
- package/dist/core/__tests__/inline-memory-refs.test.js +0 -225
- package/dist/core/__tests__/integration/broker-fork-seam.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-fork-seam.test.js +0 -193
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-sdk-wiring.test.js +0 -750
- package/dist/core/__tests__/integration/broker-snapshot-history.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-snapshot-history.test.js +0 -288
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.d.ts +0 -1
- package/dist/core/__tests__/integration/broker-wedge-supervision.test.js +0 -103
- package/dist/core/__tests__/integration/command-plugins.test.d.ts +0 -1
- package/dist/core/__tests__/integration/command-plugins.test.js +0 -1200
- package/dist/core/__tests__/integration/deferred-no-wake.test.d.ts +0 -1
- package/dist/core/__tests__/integration/deferred-no-wake.test.js +0 -610
- package/dist/core/__tests__/integration/flagship-lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/flagship-lifecycle.test.js +0 -264
- package/dist/core/__tests__/integration/fresh-home-commands.test.d.ts +0 -1
- package/dist/core/__tests__/integration/fresh-home-commands.test.js +0 -49
- package/dist/core/__tests__/integration/git-optional-locks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/git-optional-locks.test.js +0 -81
- package/dist/core/__tests__/integration/host-teardown-process-group.test.d.ts +0 -1
- package/dist/core/__tests__/integration/host-teardown-process-group.test.js +0 -480
- package/dist/core/__tests__/integration/lifecycle-hooks.test.d.ts +0 -1
- package/dist/core/__tests__/integration/lifecycle-hooks.test.js +0 -498
- package/dist/core/__tests__/integration/live-mutation-verbs.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation-verbs.test.js +0 -180
- package/dist/core/__tests__/integration/live-mutation.test.d.ts +0 -1
- package/dist/core/__tests__/integration/live-mutation.test.js +0 -173
- package/dist/core/__tests__/integration/plugin-revalidate.test.d.ts +0 -1
- package/dist/core/__tests__/integration/plugin-revalidate.test.js +0 -359
- package/dist/core/__tests__/integration/profile-pause.test.d.ts +0 -1
- package/dist/core/__tests__/integration/profile-pause.test.js +0 -115
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.d.ts +0 -1
- package/dist/core/__tests__/integration/refresh-stall-recycle.test.js +0 -151
- package/dist/core/__tests__/integration/revive.test.d.ts +0 -1
- package/dist/core/__tests__/integration/revive.test.js +0 -615
- package/dist/core/__tests__/integration/spawn-root.test.d.ts +0 -1
- package/dist/core/__tests__/integration/spawn-root.test.js +0 -536
- package/dist/core/__tests__/integration/subscription-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/integration/subscription-delivery.test.js +0 -132
- package/dist/core/__tests__/integration/tmux-surface.test.d.ts +0 -1
- package/dist/core/__tests__/integration/tmux-surface.test.js +0 -330
- package/dist/core/__tests__/integration/worktree-land.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-land.test.js +0 -607
- package/dist/core/__tests__/integration/worktree-reap.test.d.ts +0 -1
- package/dist/core/__tests__/integration/worktree-reap.test.js +0 -842
- package/dist/core/__tests__/kickoff.test.d.ts +0 -1
- package/dist/core/__tests__/kickoff.test.js +0 -196
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle-terminal-reasons.test.js +0 -62
- package/dist/core/__tests__/lifecycle.test.d.ts +0 -1
- package/dist/core/__tests__/lifecycle.test.js +0 -176
- package/dist/core/__tests__/live-lifecycle-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/live-lifecycle-prompt.test.js +0 -63
- package/dist/core/__tests__/memory-resolver-precedence.test.d.ts +0 -1
- package/dist/core/__tests__/memory-resolver-precedence.test.js +0 -228
- package/dist/core/__tests__/migration.test.d.ts +0 -1
- package/dist/core/__tests__/migration.test.js +0 -946
- package/dist/core/__tests__/model-pin-durability.test.d.ts +0 -1
- package/dist/core/__tests__/model-pin-durability.test.js +0 -195
- package/dist/core/__tests__/model-routes-config.test.d.ts +0 -1
- package/dist/core/__tests__/model-routes-config.test.js +0 -150
- package/dist/core/__tests__/nested-store-discovery.test.d.ts +0 -1
- package/dist/core/__tests__/nested-store-discovery.test.js +0 -89
- package/dist/core/__tests__/node-outcome.test.d.ts +0 -1
- package/dist/core/__tests__/node-outcome.test.js +0 -246
- package/dist/core/__tests__/on-read-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-crouter-home-fence.test.js +0 -66
- package/dist/core/__tests__/on-read-dedup-resume.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-dedup-resume.test.js +0 -132
- package/dist/core/__tests__/on-read-nested-store.test.d.ts +0 -1
- package/dist/core/__tests__/on-read-nested-store.test.js +0 -135
- package/dist/core/__tests__/parse-argv-stdin-secret.test.d.ts +0 -1
- package/dist/core/__tests__/parse-argv-stdin-secret.test.js +0 -68
- package/dist/core/__tests__/passive-subscription.test.d.ts +0 -1
- package/dist/core/__tests__/passive-subscription.test.js +0 -120
- package/dist/core/__tests__/pid-identity-match.test.d.ts +0 -1
- package/dist/core/__tests__/pid-identity-match.test.js +0 -145
- package/dist/core/__tests__/pid-zombie.test.d.ts +0 -1
- package/dist/core/__tests__/pid-zombie.test.js +0 -42
- package/dist/core/__tests__/plugin-kinds.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-kinds.test.js +0 -182
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-link-symlinked-scope-root.test.js +0 -43
- package/dist/core/__tests__/plugin-page-components.test.d.ts +0 -1
- package/dist/core/__tests__/plugin-page-components.test.js +0 -159
- package/dist/core/__tests__/preview-mirror-cap.test.d.ts +0 -1
- package/dist/core/__tests__/preview-mirror-cap.test.js +0 -53
- package/dist/core/__tests__/preview-registry-sync.test.d.ts +0 -1
- package/dist/core/__tests__/preview-registry-sync.test.js +0 -107
- package/dist/core/__tests__/profile-project-memory-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/profile-project-memory-delivery.test.js +0 -644
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.d.ts +0 -1
- package/dist/core/__tests__/prospective-inventory-capability-parity.test.js +0 -91
- package/dist/core/__tests__/prune.test.d.ts +0 -1
- package/dist/core/__tests__/prune.test.js +0 -243
- package/dist/core/__tests__/push-final-guard.test.d.ts +0 -1
- package/dist/core/__tests__/push-final-guard.test.js +0 -191
- package/dist/core/__tests__/relaunch-root.test.d.ts +0 -1
- package/dist/core/__tests__/relaunch-root.test.js +0 -249
- package/dist/core/__tests__/remote-canvas-target.test.d.ts +0 -1
- package/dist/core/__tests__/remote-canvas-target.test.js +0 -93
- package/dist/core/__tests__/repository-association.test.d.ts +0 -1
- package/dist/core/__tests__/repository-association.test.js +0 -153
- package/dist/core/__tests__/repository-root-identity.test.d.ts +0 -1
- package/dist/core/__tests__/repository-root-identity.test.js +0 -223
- package/dist/core/__tests__/respawn-throttle.test.d.ts +0 -1
- package/dist/core/__tests__/respawn-throttle.test.js +0 -20
- package/dist/core/__tests__/review-model-floor.test.d.ts +0 -1
- package/dist/core/__tests__/review-model-floor.test.js +0 -83
- package/dist/core/__tests__/revive-all.test.d.ts +0 -1
- package/dist/core/__tests__/revive-all.test.js +0 -157
- package/dist/core/__tests__/revive-capacity.test.d.ts +0 -1
- package/dist/core/__tests__/revive-capacity.test.js +0 -184
- package/dist/core/__tests__/revive-parked-fresh.test.d.ts +0 -1
- package/dist/core/__tests__/revive-parked-fresh.test.js +0 -176
- package/dist/core/__tests__/scope-crouter-home-fence.test.d.ts +0 -1
- package/dist/core/__tests__/scope-crouter-home-fence.test.js +0 -55
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-multiclient.test.js +0 -262
- package/dist/core/__tests__/seam/broker-attach-stream.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-attach-stream.test.js +0 -176
- package/dist/core/__tests__/seam/broker-cap-freeze.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-cap-freeze.test.js +0 -155
- package/dist/core/__tests__/seam/broker-crash-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-crash-teardown.test.js +0 -131
- package/dist/core/__tests__/seam/broker-pane-resolution.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-pane-resolution.test.js +0 -204
- package/dist/core/__tests__/seam/broker-provider-retry.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-provider-retry.test.js +0 -686
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-startup-diagnostics.test.js +0 -82
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/broker-whip-interrupt.test.js +0 -50
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/deadline-wake-delivery.test.js +0 -138
- package/dist/core/__tests__/seam/dormancy-release.test.d.ts +0 -1
- package/dist/core/__tests__/seam/dormancy-release.test.js +0 -516
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.d.ts +0 -1
- package/dist/core/__tests__/seam/held-deferred-human-prompt.test.js +0 -65
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.d.ts +0 -1
- package/dist/core/__tests__/seam/inbox-reference-guidance.test.js +0 -84
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.d.ts +0 -1
- package/dist/core/__tests__/seam/memory-slash-node-relative-inventory.test.js +0 -160
- package/dist/core/__tests__/seam/node-outcome-delivery.test.d.ts +0 -1
- package/dist/core/__tests__/seam/node-outcome-delivery.test.js +0 -177
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.d.ts +0 -1
- package/dist/core/__tests__/seam/prospective-inventory-stdout.test.js +0 -31
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.d.ts +0 -1
- package/dist/core/__tests__/seam/reopen-invalidated-worktree.test.js +0 -60
- package/dist/core/__tests__/seam/self-close-teardown.test.d.ts +0 -1
- package/dist/core/__tests__/seam/self-close-teardown.test.js +0 -49
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.d.ts +0 -1
- package/dist/core/__tests__/seam/yield-refresh-transaction.test.js +0 -100
- package/dist/core/__tests__/secrets.test.d.ts +0 -1
- package/dist/core/__tests__/secrets.test.js +0 -49
- package/dist/core/__tests__/self-update.test.d.ts +0 -1
- package/dist/core/__tests__/self-update.test.js +0 -46
- package/dist/core/__tests__/session-branch.test.d.ts +0 -1
- package/dist/core/__tests__/session-branch.test.js +0 -61
- package/dist/core/__tests__/session-cycles.test.d.ts +0 -1
- package/dist/core/__tests__/session-cycles.test.js +0 -133
- package/dist/core/__tests__/session-model.test.d.ts +0 -1
- package/dist/core/__tests__/session-model.test.js +0 -111
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.d.ts +0 -1
- package/dist/core/__tests__/spawn-worktree-id-conflict.test.js +0 -71
- package/dist/core/__tests__/stdin-body-no-discard.test.d.ts +0 -1
- package/dist/core/__tests__/stdin-body-no-discard.test.js +0 -33
- package/dist/core/__tests__/stdout-errors.test.d.ts +0 -1
- package/dist/core/__tests__/stdout-errors.test.js +0 -16
- package/dist/core/__tests__/stop-guard.test.d.ts +0 -1
- package/dist/core/__tests__/stop-guard.test.js +0 -237
- package/dist/core/__tests__/stream-watchdog.test.d.ts +0 -1
- package/dist/core/__tests__/stream-watchdog.test.js +0 -154
- package/dist/core/__tests__/subscription-pool-credential-guard.test.d.ts +0 -1
- package/dist/core/__tests__/subscription-pool-credential-guard.test.js +0 -95
- package/dist/core/__tests__/tmux-driver-boundary.test.d.ts +0 -1
- package/dist/core/__tests__/tmux-driver-boundary.test.js +0 -50
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.d.ts +0 -1
- package/dist/core/__tests__/warm-claim-preference-snapshot.test.js +0 -54
- package/dist/core/__tests__/worktree-landing.test.d.ts +0 -1
- package/dist/core/__tests__/worktree-landing.test.js +0 -11
- package/dist/core/__tests__/yield-ensures-daemon.test.d.ts +0 -1
- package/dist/core/__tests__/yield-ensures-daemon.test.js +0 -55
- package/dist/core/broker-client/__tests__/transport-relay.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-relay.test.js +0 -214
- package/dist/core/broker-client/__tests__/transport-socket.test.d.ts +0 -1
- package/dist/core/broker-client/__tests__/transport-socket.test.js +0 -73
- package/dist/core/canvas/__tests__/attention.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/attention.test.js +0 -83
- package/dist/core/canvas/__tests__/history-transcript.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/history-transcript.test.js +0 -102
- package/dist/core/canvas/__tests__/remote-canvas-source.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +0 -328
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/remote-transport.test.js +0 -97
- package/dist/core/canvas/__tests__/render-remote.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/render-remote.test.js +0 -243
- package/dist/core/canvas/__tests__/session-window.test.d.ts +0 -1
- package/dist/core/canvas/__tests__/session-window.test.js +0 -70
- package/dist/core/feed/__tests__/inbox-migrate.test.d.ts +0 -1
- package/dist/core/feed/__tests__/inbox-migrate.test.js +0 -49
- package/dist/core/human/__tests__/page-catalog.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-catalog.test.js +0 -20
- package/dist/core/human/__tests__/page-html-markdown.test.d.ts +0 -1
- package/dist/core/human/__tests__/page-html-markdown.test.js +0 -48
- package/dist/core/human/__tests__/page.test.d.ts +0 -1
- package/dist/core/human/__tests__/page.test.js +0 -92
- package/dist/core/keybindings/__tests__/resolve.test.d.ts +0 -1
- package/dist/core/keybindings/__tests__/resolve.test.js +0 -171
- package/dist/core/profiles/__tests__/env-store.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/env-store.test.js +0 -99
- package/dist/core/profiles/__tests__/fuzzy-match.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/fuzzy-match.test.js +0 -51
- package/dist/core/profiles/__tests__/root-profile.test.d.ts +0 -1
- package/dist/core/profiles/__tests__/root-profile.test.js +0 -59
- package/dist/core/review/__tests__/capture-origin.test.d.ts +0 -1
- package/dist/core/review/__tests__/capture-origin.test.js +0 -150
- package/dist/core/review/__tests__/comments.test.d.ts +0 -1
- package/dist/core/review/__tests__/comments.test.js +0 -116
- package/dist/core/review/__tests__/remap.test.d.ts +0 -1
- package/dist/core/review/__tests__/remap.test.js +0 -177
- package/dist/core/review/__tests__/stage-identity.test.d.ts +0 -1
- package/dist/core/review/__tests__/stage-identity.test.js +0 -150
- package/dist/core/runtime/__tests__/engine-route.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/engine-route.test.js +0 -36
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/install-id-cache-scoping.test.js +0 -45
- package/dist/core/runtime/__tests__/node-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/node-env.test.js +0 -73
- package/dist/core/runtime/__tests__/spawn-env.test.d.ts +0 -1
- package/dist/core/runtime/__tests__/spawn-env.test.js +0 -259
- package/dist/core/substrate/__tests__/surface-match-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-command.test.js +0 -89
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-memory-read.test.js +0 -28
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.d.ts +0 -1
- package/dist/core/substrate/__tests__/surface-match-pre-command.test.js +0 -92
- package/dist/daemon/__tests__/autostart-storm.test.d.ts +0 -1
- package/dist/daemon/__tests__/autostart-storm.test.js +0 -128
- package/dist/daemon/__tests__/broker-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/broker-ownership.test.js +0 -25
- package/dist/daemon/__tests__/daemon-ownership.test.d.ts +0 -1
- package/dist/daemon/__tests__/daemon-ownership.test.js +0 -27
- package/dist/daemon/__tests__/helpers/source-daemon.d.ts +0 -30
- package/dist/daemon/__tests__/helpers/source-daemon.js +0 -176
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/api-startup-readiness.test.js +0 -83
- package/dist/daemon/__tests__/integration/migration-startup.test.d.ts +0 -1
- package/dist/daemon/__tests__/integration/migration-startup.test.js +0 -127
- package/dist/daemon/__tests__/node-deadline-lane.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-deadline-lane.test.js +0 -77
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-birth-invariants.test.js +0 -146
- package/dist/daemon/__tests__/node-outcome-delivery.test.d.ts +0 -1
- package/dist/daemon/__tests__/node-outcome-delivery.test.js +0 -116
- package/dist/daemon/__tests__/reconciler-signature.test.d.ts +0 -1
- package/dist/daemon/__tests__/reconciler-signature.test.js +0 -37
- package/dist/daemon/__tests__/subtree-filter-freshness.test.d.ts +0 -1
- package/dist/daemon/__tests__/subtree-filter-freshness.test.js +0 -63
- package/dist/daemon/__tests__/thaw-order.test.d.ts +0 -1
- package/dist/daemon/__tests__/thaw-order.test.js +0 -55
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/bridge-heartbeat.test.js +0 -58
- package/dist/daemon/api/__tests__/broker-settle-park.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/broker-settle-park.test.js +0 -175
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/canvas-snapshot-fields.test.js +0 -216
- package/dist/daemon/api/__tests__/error-seam.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/error-seam.test.js +0 -83
- package/dist/daemon/api/__tests__/model-config.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/model-config.test.js +0 -73
- package/dist/daemon/api/__tests__/node-create-description.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-create-description.test.js +0 -127
- package/dist/daemon/api/__tests__/node-model-validation.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/node-model-validation.test.js +0 -183
- package/dist/daemon/api/__tests__/nodes-activity-query.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/nodes-activity-query.test.js +0 -99
- package/dist/daemon/api/__tests__/profile-launch-gates.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-launch-gates.test.js +0 -172
- package/dist/daemon/api/__tests__/profile-metadata-route.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/profile-metadata-route.test.js +0 -95
- package/dist/daemon/api/__tests__/reopen-delivery.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/reopen-delivery.test.js +0 -260
- package/dist/daemon/api/__tests__/seam/api-server.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/api-server.test.js +0 -442
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/b10-attach-modelauth.test.js +0 -310
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/leaf-api-parity.test.js +0 -351
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/node-outcome-api.test.js +0 -159
- package/dist/daemon/api/__tests__/seam/profile-delete.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/seam/profile-delete.test.js +0 -372
- package/dist/daemon/api/__tests__/submit-result.test.d.ts +0 -1
- package/dist/daemon/api/__tests__/submit-result.test.js +0 -215
- package/dist/migrations/__tests__/activation-concurrency.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation-concurrency.test.js +0 -146
- package/dist/migrations/__tests__/activation.test.d.ts +0 -1
- package/dist/migrations/__tests__/activation.test.js +0 -152
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.d.ts +0 -1
- package/dist/migrations/__tests__/deletion-and-root-declaration.test.js +0 -149
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-bash-valve.test.js +0 -86
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +0 -364
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-goal-capture-envelope.test.js +0 -106
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +0 -62
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +0 -432
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-stophook-context-nudge.test.js +0 -152
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +0 -88
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/canvas-tool-guide.test.js +0 -96
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/integration/canvas-bash-valve.test.js +0 -133
- package/dist/pi-extensions/__tests__/pre-command-gate.test.d.ts +0 -1
- package/dist/pi-extensions/__tests__/pre-command-gate.test.js +0 -232
- package/dist/shared/__tests__/env-boundary.test.d.ts +0 -1
- package/dist/shared/__tests__/env-boundary.test.js +0 -95
- package/dist/shared/__tests__/generated-context-grammar.test.d.ts +0 -1
- package/dist/shared/__tests__/generated-context-grammar.test.js +0 -80
- package/docs/compat/hearth-crtr-v1.md +0 -179
- package/docs/compat/hearth-crtr-v2.md +0 -177
- package/docs/compat/hearth-crtr-v3.md +0 -176
- package/docs/compat/hearth-crtr-v4.md +0 -182
- package/docs/compat/hearth-crtr-v5.md +0 -169
|
@@ -1,186 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// them and the agent.
|
|
4
|
-
//
|
|
5
|
-
// A plugin declares them in its manifest (`bin`), a user or project scope in
|
|
6
|
-
// its own `config.json` (`bin`); both are a small name → root-relative-path
|
|
7
|
-
// map. This module resolves those declarations across the same layering the
|
|
8
|
-
// rest of the config uses (project stack > user, and within one root: that
|
|
9
|
-
// root's own config > its enabled plugins), materializes one crouter-owned
|
|
10
|
-
// shim directory of symlinks, and hands its path to the spawn-env boundary
|
|
11
|
-
// (`spawn-env.ts`), which PREPENDS it to every broker child's PATH while
|
|
12
|
-
// leaving the host PATH intact behind it.
|
|
13
|
-
//
|
|
14
|
-
// The shim directory exists so the declaration stays a per-name grant: crouter
|
|
15
|
-
// links exactly the names that were declared, rather than putting a
|
|
16
|
-
// contributor's whole `bin/` directory on the agent's PATH and admitting every
|
|
17
|
-
// sibling file in it.
|
|
18
|
-
//
|
|
19
|
-
// These binaries are trusted local code running with the caller's authority —
|
|
20
|
-
// the same authority the agent's bash tool already has. There is no sandbox,
|
|
21
|
-
// no install hook, and no shell evaluation anywhere in this path. Containment
|
|
22
|
-
// is checked while resolving the effective set; a contributor can change later
|
|
23
|
-
// because it is trusted local code, not a sandboxed artifact.
|
|
24
|
-
import { createHash } from 'node:crypto';
|
|
25
|
-
import { existsSync, mkdirSync, realpathSync, renameSync, rmSync, statSync, symlinkSync } from 'node:fs';
|
|
26
|
-
import { dirname, join, resolve, sep } from 'node:path';
|
|
27
|
-
import { binDeclarationIssues, normalizeBin, readRawConfigAtRoot } from '../config.js';
|
|
28
|
-
import { listInstalledPluginsInRoot } from '../installed-plugins.js';
|
|
29
|
-
import { crtrHome } from '../canvas/paths.js';
|
|
30
|
-
import { findProjectScopeRoots, scopeRoot } from '../scope.js';
|
|
31
|
-
function contributorIssues(origin, scope, raw) {
|
|
32
|
-
return binDeclarationIssues(raw).map((issue) => ({ name: issue.name, origin, scope, message: issue.message }));
|
|
33
|
-
}
|
|
34
|
-
function pluginContributors(scope, root) {
|
|
35
|
-
return listInstalledPluginsInRoot(scope, root)
|
|
36
|
-
.filter((plugin) => plugin.enabled && plugin.manifest.bin !== undefined)
|
|
37
|
-
.sort((a, b) => a.name.localeCompare(b.name))
|
|
38
|
-
.map((plugin) => {
|
|
39
|
-
const origin = `plugin "${plugin.name}"`;
|
|
40
|
-
return { origin, scope, root: plugin.root, bin: normalizeBin(plugin.manifest.bin), issues: contributorIssues(origin, scope, plugin.manifest.bin) };
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/** A scope's own `config.json` contributions. Paths resolve against the scope's
|
|
44
|
-
* AUTHORING root: the project directory for a project scope (so a repo writes
|
|
45
|
-
* `tools/repoctl`, where its tools actually live, not `../tools/repoctl` out
|
|
46
|
-
* of `.crouter/`), and `~/.crouter` itself for the user scope, which has no
|
|
47
|
-
* enclosing project. */
|
|
48
|
-
function configContributor(scope, scopeRootPath) {
|
|
49
|
-
const raw = readRawConfigAtRoot(scopeRootPath)?.bin;
|
|
50
|
-
if (raw === undefined)
|
|
51
|
-
return [];
|
|
52
|
-
const origin = `config.json (${scopeRootPath})`;
|
|
53
|
-
const bin = normalizeBin(raw);
|
|
54
|
-
const root = scope === 'project' ? dirname(scopeRootPath) : scopeRootPath;
|
|
55
|
-
return [{ origin, scope, root, bin, issues: contributorIssues(origin, scope, raw) }];
|
|
56
|
-
}
|
|
57
|
-
/** The contribution LAYERS in ascending precedence: a later layer's entry
|
|
58
|
-
* replaces an earlier layer's same name. Within one root the root's own
|
|
59
|
-
* `config.json` outranks its plugins (the rule `layerPluginKinds` follows for
|
|
60
|
-
* `kinds`), and the project stack — nearest root last — outranks the user
|
|
61
|
-
* scope entirely. Contributors WITHIN one layer never outrank each other:
|
|
62
|
-
* two of them claiming one name is a collision, not a precedence question. */
|
|
63
|
-
function contributionLayers(targetCwd, targetProfileId) {
|
|
64
|
-
const layers = [];
|
|
65
|
-
const userRoot = scopeRoot('user');
|
|
66
|
-
if (userRoot !== null) {
|
|
67
|
-
layers.push(pluginContributors('user', userRoot), configContributor('user', userRoot));
|
|
68
|
-
}
|
|
69
|
-
const projectRootsNearestFirst = findProjectScopeRoots(targetCwd, targetProfileId);
|
|
70
|
-
for (const root of [...projectRootsNearestFirst].reverse()) {
|
|
71
|
-
layers.push(pluginContributors('project', root), configContributor('project', root));
|
|
72
|
-
}
|
|
73
|
-
return layers.filter((layer) => layer.length > 0);
|
|
74
|
-
}
|
|
75
|
-
/** Resolve one declared path against its contributing root: it must stay
|
|
76
|
-
* inside that root, be a regular file, and carry a POSIX exec bit when the
|
|
77
|
-
* effective set is resolved. Returns the absolute real path, or the reason it
|
|
78
|
-
* is not usable. */
|
|
79
|
-
function resolveTarget(root, relative) {
|
|
80
|
-
let rootReal;
|
|
81
|
-
let target;
|
|
82
|
-
try {
|
|
83
|
-
rootReal = realpathSync(root);
|
|
84
|
-
target = realpathSync(resolve(root, relative));
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return { reason: `target does not exist: ${join(root, relative)}` };
|
|
88
|
-
}
|
|
89
|
-
if (target !== rootReal && !target.startsWith(rootReal + sep)) {
|
|
90
|
-
return { reason: `target escapes its contributing root: ${relative}` };
|
|
91
|
-
}
|
|
92
|
-
const stat = statSync(target);
|
|
93
|
-
if (!stat.isFile())
|
|
94
|
-
return { reason: `target is not a regular file: ${target}` };
|
|
95
|
-
if ((stat.mode & 0o111) === 0)
|
|
96
|
-
return { reason: `target lacks the POSIX exec bit: ${target}` };
|
|
97
|
-
return { target };
|
|
98
|
-
}
|
|
99
|
-
/** The effective bare-command set for one node's cwd/profile, plus every
|
|
100
|
-
* declaration that failed to become one.
|
|
101
|
-
*
|
|
102
|
-
* Layers ascend in precedence (see `contributionLayers`). A name claimed by
|
|
103
|
-
* two contributors in the SAME layer selects no winner: it is reported and
|
|
104
|
-
* removed, so an ambiguous name resolves to nothing rather than to whichever
|
|
105
|
-
* plugin sorted first. A higher layer may still claim that name explicitly —
|
|
106
|
-
* that is an unambiguous choice, not a collision. */
|
|
107
|
-
export function resolveBinContributions(targetCwd, targetProfileId) {
|
|
108
|
-
const bins = new Map();
|
|
109
|
-
const issues = [];
|
|
110
|
-
for (const layer of contributionLayers(targetCwd, targetProfileId)) {
|
|
111
|
-
const claims = new Map();
|
|
112
|
-
for (const contributor of layer) {
|
|
113
|
-
issues.push(...contributor.issues);
|
|
114
|
-
for (const name of Object.keys(contributor.bin)) {
|
|
115
|
-
const existing = claims.get(name);
|
|
116
|
-
if (existing === undefined)
|
|
117
|
-
claims.set(name, [contributor]);
|
|
118
|
-
else
|
|
119
|
-
existing.push(contributor);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
for (const [name, claimants] of claims) {
|
|
123
|
-
if (claimants.length > 1) {
|
|
124
|
-
const origins = claimants.map((claimant) => claimant.origin).join(', ');
|
|
125
|
-
bins.delete(name);
|
|
126
|
-
for (const claimant of claimants) {
|
|
127
|
-
issues.push({ name, origin: claimant.origin, scope: claimant.scope, message: `bare command "${name}" is claimed by ${origins} at the same precedence — no winner is selected and the name is not installed` });
|
|
128
|
-
}
|
|
129
|
-
continue;
|
|
130
|
-
}
|
|
131
|
-
const contributor = claimants[0];
|
|
132
|
-
const resolved = resolveTarget(contributor.root, contributor.bin[name]);
|
|
133
|
-
if ('reason' in resolved) {
|
|
134
|
-
issues.push({ name, origin: contributor.origin, scope: contributor.scope, message: resolved.reason });
|
|
135
|
-
continue;
|
|
136
|
-
}
|
|
137
|
-
bins.set(name, { name, target: resolved.target, origin: contributor.origin, scope: contributor.scope });
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return { bins, issues };
|
|
141
|
-
}
|
|
142
|
-
/** Content address of one effective bare-command set — the shim directory's
|
|
143
|
-
* name. Because the address covers every name and target, an existing
|
|
144
|
-
* directory is already correct: nothing is ever rewritten in place, a changed
|
|
145
|
-
* set simply materializes beside the old one, and two processes racing the
|
|
146
|
-
* same set produce byte-identical trees. */
|
|
147
|
-
function shimAddress(bins) {
|
|
148
|
-
const lines = [...bins.values()]
|
|
149
|
-
.sort((a, b) => a.name.localeCompare(b.name))
|
|
150
|
-
.map((bin) => `${bin.name}\u0000${bin.target}`)
|
|
151
|
-
.join('\n');
|
|
152
|
-
return createHash('sha256').update(lines).digest('hex').slice(0, 32);
|
|
153
|
-
}
|
|
154
|
-
/** Materialize (idempotently) the shim directory for one effective set and
|
|
155
|
-
* return its absolute path, or null when the set is empty. Built in a staging
|
|
156
|
-
* dir and renamed into place, so a concurrent launch either sees no directory
|
|
157
|
-
* or sees a complete one. */
|
|
158
|
-
export function ensureBinShimDir(bins) {
|
|
159
|
-
if (bins.size === 0)
|
|
160
|
-
return null;
|
|
161
|
-
const dir = join(crtrHome(), 'bin-shims', shimAddress(bins));
|
|
162
|
-
if (existsSync(dir))
|
|
163
|
-
return dir;
|
|
164
|
-
const staging = `${dir}.staging-${process.pid}-${Date.now().toString(36)}`;
|
|
165
|
-
mkdirSync(staging, { recursive: true });
|
|
166
|
-
try {
|
|
167
|
-
for (const bin of bins.values())
|
|
168
|
-
symlinkSync(bin.target, join(staging, bin.name));
|
|
169
|
-
renameSync(staging, dir);
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
rmSync(staging, { recursive: true, force: true });
|
|
173
|
-
// Another launch materializing the same address won the rename — its tree
|
|
174
|
-
// is identical by construction, so the address is still correct.
|
|
175
|
-
if (existsSync(dir))
|
|
176
|
-
return dir;
|
|
177
|
-
throw error;
|
|
178
|
-
}
|
|
179
|
-
return dir;
|
|
180
|
-
}
|
|
181
|
-
/** The shim directory to prepend to a target node's PATH, or null when that
|
|
182
|
-
* node's scopes declare no bare command. The one entry point the spawn-env
|
|
183
|
-
* boundary calls. */
|
|
184
|
-
export function binShimDirFor(targetCwd, targetProfileId) {
|
|
185
|
-
return ensureBinShimDir(resolveBinContributions(targetCwd, targetProfileId).bins);
|
|
186
|
-
}
|
|
1
|
+
var S=Object.defineProperty;var i=(r,t)=>S(r,"name",{value:t,configurable:!0});import{createHash as j}from"node:crypto";import{existsSync as g,mkdirSync as x,realpathSync as p,renameSync as v,rmSync as w,statSync as C,symlinkSync as I}from"node:fs";import{dirname as R,join as l,resolve as k,sep as D}from"node:path";import{binDeclarationIssues as B,normalizeBin as d,readRawConfigAtRoot as F}from"../config.js";import{listInstalledPluginsInRoot as z}from"../installed-plugins.js";import{crtrHome as A}from"../canvas/paths.js";import{findProjectScopeRoots as H,scopeRoot as M}from"../scope.js";function b(r,t,e){return B(e).map(n=>({name:n.name,origin:r,scope:t,message:n.message}))}i(b,"contributorIssues");function h(r,t){return z(r,t).filter(e=>e.enabled&&e.manifest.bin!==void 0).sort((e,n)=>e.name.localeCompare(n.name)).map(e=>{const n=`plugin "${e.name}"`;return{origin:n,scope:r,root:e.root,bin:d(e.manifest.bin),issues:b(n,r,e.manifest.bin)}})}i(h,"pluginContributors");function y(r,t){const e=F(t)?.bin;if(e===void 0)return[];const n=`config.json (${t})`,c=d(e),s=r==="project"?R(t):t;return[{origin:n,scope:r,root:s,bin:c,issues:b(n,r,e)}]}i(y,"configContributor");function O(r,t){const e=[],n=M("user");n!==null&&e.push(h("user",n),y("user",n));const c=H(r,t);for(const s of[...c].reverse())e.push(h("project",s),y("project",s));return e.filter(s=>s.length>0)}i(O,"contributionLayers");function L(r,t){let e,n;try{e=p(r),n=p(k(r,t))}catch{return{reason:`target does not exist: ${l(r,t)}`}}if(n!==e&&!n.startsWith(e+D))return{reason:`target escapes its contributing root: ${t}`};const c=C(n);return c.isFile()?(c.mode&73)===0?{reason:`target lacks the POSIX exec bit: ${n}`}:{target:n}:{reason:`target is not a regular file: ${n}`}}i(L,"resolveTarget");function N(r,t){const e=new Map,n=[];for(const c of O(r,t)){const s=new Map;for(const o of c){n.push(...o.issues);for(const u of Object.keys(o.bin)){const a=s.get(u);a===void 0?s.set(u,[o]):a.push(o)}}for(const[o,u]of s){if(u.length>1){const $=u.map(m=>m.origin).join(", ");e.delete(o);for(const m of u)n.push({name:o,origin:m.origin,scope:m.scope,message:`bare command "${o}" is claimed by ${$} at the same precedence \u2014 no winner is selected and the name is not installed`});continue}const a=u[0],f=L(a.root,a.bin[o]);if("reason"in f){n.push({name:o,origin:a.origin,scope:a.scope,message:f.reason});continue}e.set(o,{name:o,target:f.target,origin:a.origin,scope:a.scope})}}return{bins:e,issues:n}}i(N,"resolveBinContributions");function T(r){const t=[...r.values()].sort((e,n)=>e.name.localeCompare(n.name)).map(e=>`${e.name}\0${e.target}`).join(`
|
|
2
|
+
`);return j("sha256").update(t).digest("hex").slice(0,32)}i(T,"shimAddress");function W(r){if(r.size===0)return null;const t=l(A(),"bin-shims",T(r));if(g(t))return t;const e=`${t}.staging-${process.pid}-${Date.now().toString(36)}`;x(e,{recursive:!0});try{for(const n of r.values())I(n.target,l(e,n.name));v(e,t)}catch(n){if(w(e,{recursive:!0,force:!0}),g(t))return t;throw n}return t}i(W,"ensureBinShimDir");function U(r,t){return W(N(r,t).bins)}i(U,"binShimDirFor");export{U as binShimDirFor,W as ensureBinShimDir,N as resolveBinContributions};
|
|
@@ -1,107 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
// bootRoot creates the resident root through crtrd (`createNode({root:true})`,
|
|
4
|
-
// which the daemon serves at readiness 'await' — node birth, broker launch, and
|
|
5
|
-
// view-socket readiness ALL happen server-side), then execs `crtr surface
|
|
6
|
-
// attach` inline so THIS terminal becomes the broker's writable viewer.
|
|
7
|
-
//
|
|
8
|
-
// crtrd is the sole owner of canvas state (see crtrd-sole-state-owner), so this
|
|
9
|
-
// module opens NO canvas.db: node creation and the viewer-focus row both route
|
|
10
|
-
// through the /v1 API client. The only work that stays client-side is what
|
|
11
|
-
// genuinely belongs to the user's terminal — the interactive startup profile
|
|
12
|
-
// pick, the tmux-binding reconcile, and the inline attach exec. This is why the
|
|
13
|
-
// front-door boot path (cli.js → front-door.js → here) reaches zero canvas code.
|
|
14
|
-
import { spawn } from 'node:child_process';
|
|
15
|
-
import { inTmux, currentTmux, viewerSplitEnv } from './placement-tmux.js';
|
|
16
|
-
import { selectProfileForCwd } from '../profiles/select.js';
|
|
17
|
-
import { cliClient } from '../../commands/api-client.js';
|
|
18
|
-
import { mark } from '../timing.js';
|
|
19
|
-
/** Boot the front-door root: create the resident root through crtrd (broker
|
|
20
|
-
* launched + view socket ready server-side), register THIS terminal's pane as
|
|
21
|
-
* its foreground viewer, then exec `crtr surface attach` inline so this terminal
|
|
22
|
-
* becomes a writable viewer. Does not return — it process.exit()s
|
|
23
|
-
* when the inline attach exits (detach leaves the resident broker running, to
|
|
24
|
-
* be reconnected later). */
|
|
25
|
-
export async function bootRoot(opts) {
|
|
26
|
-
// crtr is tmux-only: the front door execs `crtr surface attach` inline in THIS
|
|
27
|
-
// pane to become the root's writable viewer, so there must be a tmux pane to
|
|
28
|
-
// anchor on. Outside tmux there is no viewer surface — throw with a friendly
|
|
29
|
-
// message rather than boot a root nobody can see.
|
|
30
|
-
if (!inTmux()) {
|
|
31
|
-
throw new Error('crtr must be started from inside a tmux session — start tmux first (e.g. `tmux new -s work`), then run `crtr` there.');
|
|
32
|
-
}
|
|
33
|
-
const kind = opts.kind;
|
|
34
|
-
// The front door's only source of profile identity — a root has no spawner to
|
|
35
|
-
// inherit from. Runs BEFORE the create call: explicit --profile > MRU profile
|
|
36
|
-
// covering cwd > a synchronous create-or-root-profile prompt (the stable root
|
|
37
|
-
// profile, headless). INTERACTIVE, so it must stay client-side; the resolved
|
|
38
|
-
// id is handed to crtrd so the server never re-runs the picker.
|
|
39
|
-
mark('boot_root.start');
|
|
40
|
-
const profileId = await selectProfileForCwd(opts.cwd, opts.profile, opts.pickProfile ?? false);
|
|
41
|
-
mark('boot_root.profile_resolved');
|
|
42
|
-
// Create the resident root through crtrd. `root:true` makes the daemon spawn
|
|
43
|
-
// it at readiness 'await' — the node row is born (base mode, resident
|
|
44
|
-
// lifecycle, spawned_by null), its detached broker engine is launched, and its
|
|
45
|
-
// view socket is bound before this returns. The starter prompt is persisted as
|
|
46
|
-
// the goal server-side (empty ⇒ no kickoff turn). No boot spinner: the attach
|
|
47
|
-
// viewer paints the crouton banner the instant the engine attaches (~1s),
|
|
48
|
-
// which is the real "we're up" signal.
|
|
49
|
-
const detail = await cliClient().createNode({
|
|
50
|
-
...(kind !== undefined ? { kind } : {}),
|
|
51
|
-
mode: 'base',
|
|
52
|
-
prompt: opts.prompt,
|
|
53
|
-
profile: profileId,
|
|
54
|
-
cwd: opts.cwd,
|
|
55
|
-
...(opts.name !== undefined ? { name: opts.name } : kind !== undefined ? { name: kind } : {}),
|
|
56
|
-
root: true,
|
|
57
|
-
// The front door is exactly the wait a warm spare exists to remove: a bare
|
|
58
|
-
// resident root with no kickoff. A miss costs nothing (cold spawn) and
|
|
59
|
-
// mints the spare that serves the next one.
|
|
60
|
-
prefer_warm: true,
|
|
61
|
-
});
|
|
62
|
-
const nodeId = detail.node_id;
|
|
63
|
-
mark('boot_root.node_created', { node: nodeId });
|
|
64
|
-
// The crouter-owned tmux bindings (including the inbox-toggle key folded into
|
|
65
|
-
// the same manifest sweep) are NOT reconciled here: that sweep is ~20
|
|
66
|
-
// sequential `spawnSync tmux` calls (measured ~150ms) and the attach viewer
|
|
67
|
-
// this boot is about to spawn already runs it a tick after its first paint
|
|
68
|
-
// (`refreshAttachBindingSnapshot` in viewer.ts). Doing it here only delays
|
|
69
|
-
// that viewer.
|
|
70
|
-
// This terminal becomes the root's attach VIEWER in the user's CURRENT session,
|
|
71
|
-
// so its window stays where the user already is. The node row carries NO
|
|
72
|
-
// presence — a broker node's pane/window/tmux_session stay NULL; the viewer
|
|
73
|
-
// pane lives in the focuses table. Register the FOREGROUND front-door pane as
|
|
74
|
-
// this node's focus (canvas write, routed through crtrd) so focus/nav can find
|
|
75
|
-
// it. Best-effort — attach works regardless.
|
|
76
|
-
const here = currentTmux();
|
|
77
|
-
if (here !== null) {
|
|
78
|
-
try {
|
|
79
|
-
await cliClient().registerFocus({ node_id: nodeId, pane: here.pane, session: here.session, window: here.window });
|
|
80
|
-
}
|
|
81
|
-
catch { /* best-effort */ }
|
|
82
|
-
}
|
|
83
|
-
// Broker is the only host: the root runs as a detached broker engine (already
|
|
84
|
-
// launched above), and THIS terminal execs `crtr surface attach` inline to
|
|
85
|
-
// become its writable viewer. The attach's own ensureAttach is an idempotent
|
|
86
|
-
// no-op on the already-live broker. CRTR_ATTACH_WAIT_MS tells the viewer to
|
|
87
|
-
// poll view.sock until it accepts instead of failing fast on a not-yet-bound
|
|
88
|
-
// socket. CRTR_ATTACH_BORROWED_PANE tells the viewer that its pane is the
|
|
89
|
-
// user's OWN pre-existing shell pane (not one crtr split open): on a
|
|
90
|
-
// detach-reap of an empty root it must delete the node WITHOUT kill-pane, else
|
|
91
|
-
// a plain ctrl+c closes the user's whole tmux pane.
|
|
92
|
-
const attachEnv = {
|
|
93
|
-
...process.env,
|
|
94
|
-
...viewerSplitEnv(),
|
|
95
|
-
CRTR_ATTACH_WAIT_MS: '30000',
|
|
96
|
-
...(opts.prompt !== undefined && opts.prompt !== '' ? { CRTR_ATTACH_INITIAL_WHIP: '1' } : {}),
|
|
97
|
-
};
|
|
98
|
-
if (here !== null)
|
|
99
|
-
attachEnv['CRTR_ATTACH_BORROWED_PANE'] = here.pane;
|
|
100
|
-
mark('boot_root.viewer_spawn');
|
|
101
|
-
const attachChild = spawn('crtr', ['surface', 'attach', 'to', nodeId], { stdio: 'inherit', env: attachEnv });
|
|
102
|
-
const code = await new Promise((res) => {
|
|
103
|
-
attachChild.once('exit', (exitCode) => res(exitCode ?? 0));
|
|
104
|
-
attachChild.once('error', () => res(1));
|
|
105
|
-
});
|
|
106
|
-
process.exit(code);
|
|
107
|
-
}
|
|
1
|
+
var l=Object.defineProperty;var c=(e,o)=>l(e,"name",{value:o,configurable:!0});import{spawn as p}from"node:child_process";import{inTmux as u,currentTmux as _,viewerSplitEnv as T}from"./placement-tmux.js";import{selectProfileForCwd as h}from"../profiles/select.js";import{cliClient as s}from"../../commands/api-client.js";import{mark as t}from"../timing.js";async function k(e){if(!u())throw new Error("crtr must be started from inside a tmux session \u2014 start tmux first (e.g. `tmux new -s work`), then run `crtr` there.");const o=e.kind;t("boot_root.start");const m=await h(e.cwd,e.profile,e.pickProfile??!1);t("boot_root.profile_resolved");const n=(await s().createNode({...o!==void 0?{kind:o}:{},mode:"base",prompt:e.prompt,profile:m,cwd:e.cwd,...e.name!==void 0?{name:e.name}:o!==void 0?{name:o}:{},root:!0,prefer_warm:!0})).node_id;t("boot_root.node_created",{node:n});const r=_();if(r!==null)try{await s().registerFocus({node_id:n,pane:r.pane,session:r.session,window:r.window})}catch{}const i={...process.env,...T(),CRTR_ATTACH_WAIT_MS:"30000",...e.prompt!==void 0&&e.prompt!==""?{CRTR_ATTACH_INITIAL_WHIP:"1"}:{}};r!==null&&(i.CRTR_ATTACH_BORROWED_PANE=r.pane),t("boot_root.viewer_spawn");const a=p("crtr",["surface","attach","to",n],{stdio:"inherit",env:i}),f=await new Promise(d=>{a.once("exit",w=>d(w??0)),a.once("error",()=>d(1))});process.exit(f)}c(k,"bootRoot");export{k as bootRoot};
|
|
@@ -1,264 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// macOS' TCC / Full Disk Access list instead of the generic "node".
|
|
4
|
-
//
|
|
5
|
-
// WHY a real copied binary (not a symlink, not process.title): macOS keys a
|
|
6
|
-
// Full Disk Access entry on the Mach-O binary's *filename* — not argv[0], not
|
|
7
|
-
// process.title, and symlinks resolve to their realpath. So the ONLY way to show
|
|
8
|
-
// a branded name is to launch the engine from a real Mach-O file whose filename
|
|
9
|
-
// is the brand. We copy the node launcher to `~/.crouter/host/crouter`.
|
|
10
|
-
//
|
|
11
|
-
// WHY self-contained (libnode beside it): a Homebrew node is a small (~70 KB)
|
|
12
|
-
// launcher that dynamically loads `@rpath/libnode.<abi>.dylib` (~70 MB). node's
|
|
13
|
-
// LC_RPATH includes `@loader_path`, so a copy of that dylib placed *beside* the
|
|
14
|
-
// branded binary resolves with no DYLD_* env var (which SIP can strip) and no
|
|
15
|
-
// dependency on the Cellar path surviving — even after a `brew uninstall` of the
|
|
16
|
-
// old keg, the branded copy keeps running. A statically-linked node (nodejs.org)
|
|
17
|
-
// has no separate libnode; we just copy the binary. The remaining absolute
|
|
18
|
-
// `/opt/homebrew/opt/...` deps resolve by their baked-in absolute paths.
|
|
19
|
-
//
|
|
20
|
-
// SELF-HEAL: ensureBrandedHost() rebuilds the copy whenever the live node drifts
|
|
21
|
-
// (a `brew upgrade node` moves realpath(execPath) to a new Cellar version) or the
|
|
22
|
-
// copy is missing. The drift check is a cheap marker compare — no subprocess, no
|
|
23
|
-
// copy — on the happy path.
|
|
24
|
-
import { copyFileSync, mkdirSync, existsSync, readFileSync, writeFileSync, chmodSync, readdirSync, renameSync, realpathSync, unlinkSync, rmSync, linkSync, } from 'node:fs';
|
|
25
|
-
import { homedir } from 'node:os';
|
|
26
|
-
import { dirname, join } from 'node:path';
|
|
27
|
-
import { spawnSync } from 'node:child_process';
|
|
28
|
-
import { CRTR_DIR_NAME } from '../../types.js';
|
|
29
|
-
import { emitEvent } from '../events/emit.js';
|
|
30
|
-
import { withExclusiveDirectoryLock } from '../exclusive-lock.js';
|
|
31
|
-
/** The filename the FDA / TCC entry is shown under. */
|
|
32
|
-
const BRANDED_BIN_NAME = 'crouter';
|
|
33
|
-
/** Machine-global host dir. Deliberately NOT under `CRTR_HOME` (tests override
|
|
34
|
-
* that to an isolated temp): the branded binary is a per-machine artifact keyed
|
|
35
|
-
* to the installed node, shared across every canvas home. */
|
|
36
|
-
export function brandedHostDir() {
|
|
37
|
-
return join(homedir(), CRTR_DIR_NAME, 'host');
|
|
38
|
-
}
|
|
39
|
-
export function brandedHostBin() {
|
|
40
|
-
return join(brandedHostDir(), BRANDED_BIN_NAME);
|
|
41
|
-
}
|
|
42
|
-
function markerPath() {
|
|
43
|
-
return join(brandedHostDir(), '.source.json');
|
|
44
|
-
}
|
|
45
|
-
/** Locate the `libnode.<abi>.dylib` a Homebrew node loads via `@rpath`. node's
|
|
46
|
-
* rpaths are `@loader_path` and `@loader_path/../lib`, so check the binary's own
|
|
47
|
-
* dir first, then the sibling `lib/`. Returns the absolute path, or null for a
|
|
48
|
-
* statically-linked node that has no separate libnode. */
|
|
49
|
-
function findLibnode(nodeBin) {
|
|
50
|
-
const binDir = dirname(nodeBin);
|
|
51
|
-
for (const dir of [binDir, join(binDir, '..', 'lib')]) {
|
|
52
|
-
if (!existsSync(dir))
|
|
53
|
-
continue;
|
|
54
|
-
const hit = readdirSync(dir).find((f) => f.startsWith('libnode.') && f.endsWith('.dylib'));
|
|
55
|
-
if (hit !== undefined)
|
|
56
|
-
return join(dir, hit);
|
|
57
|
-
}
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
/** Copy `src` → `dst` via a unique temp + atomic rename, so a failed copy
|
|
61
|
-
* never leaves a half-written artifact. Host-wide concurrency is serialized by
|
|
62
|
-
* the dedicated reconcile lock below. */
|
|
63
|
-
function atomicCopy(src, dst, mode) {
|
|
64
|
-
const tmp = `${dst}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;
|
|
65
|
-
copyFileSync(src, tmp);
|
|
66
|
-
if (mode !== undefined)
|
|
67
|
-
chmodSync(tmp, mode);
|
|
68
|
-
renameSync(tmp, dst);
|
|
69
|
-
}
|
|
70
|
-
function readMarker(path = markerPath()) {
|
|
71
|
-
try {
|
|
72
|
-
return JSON.parse(readFileSync(path, 'utf8'));
|
|
73
|
-
}
|
|
74
|
-
catch {
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
const HOST_LOCK_TIMEOUT_MS = 30_000;
|
|
79
|
-
/** Serialize reconciliation of the one machine-global host tuple. This lock is
|
|
80
|
-
* deliberately separate from the immutable runtime-generation install lock. */
|
|
81
|
-
function withBrandedHostLock(run) {
|
|
82
|
-
const root = join(homedir(), CRTR_DIR_NAME);
|
|
83
|
-
const lockPath = join(root, 'host.lock');
|
|
84
|
-
mkdirSync(root, { recursive: true });
|
|
85
|
-
return withExclusiveDirectoryLock(lockPath, run, {
|
|
86
|
-
timeoutMs: HOST_LOCK_TIMEOUT_MS,
|
|
87
|
-
timeoutError: () => new Error(`timed out waiting for branded host lock: ${lockPath}`),
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
/** macOS keys FDA grants on the Mach-O cdhash. A real developer identity
|
|
91
|
-
* keeps that hash stable across branded-host rebuilds; ad-hoc signing is the
|
|
92
|
-
* portable default for machines without a local signing certificate. */
|
|
93
|
-
export function codesignIdentitiesForBrandedHost(opts = {}) {
|
|
94
|
-
const configured = opts.configured?.trim();
|
|
95
|
-
if (configured)
|
|
96
|
-
return [configured];
|
|
97
|
-
const discovered = opts.discovered?.trim();
|
|
98
|
-
return [discovered || '-'];
|
|
99
|
-
}
|
|
100
|
-
function discoverCodesignIdentity() {
|
|
101
|
-
if (process.platform !== 'darwin')
|
|
102
|
-
return null;
|
|
103
|
-
const res = spawnSync('security', ['find-identity', '-v', '-p', 'codesigning'], { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
104
|
-
if (res.status !== 0)
|
|
105
|
-
return null;
|
|
106
|
-
const stdout = (res.stdout ?? '').toString();
|
|
107
|
-
const identities = stdout
|
|
108
|
-
.split('\n')
|
|
109
|
-
.map((line) => line.match(/\)\s+[A-Fa-f0-9]{40}\s+"([^"]+)"/)?.[1] ?? null)
|
|
110
|
-
.filter((identity) => identity !== null);
|
|
111
|
-
return identities.find((identity) => identity.startsWith('Apple Development:'))
|
|
112
|
-
?? identities.find((identity) => identity.startsWith('Developer ID Application:'))
|
|
113
|
-
?? identities[0]
|
|
114
|
-
?? null;
|
|
115
|
-
}
|
|
116
|
-
function runCodesign(binPath, identity) {
|
|
117
|
-
const res = spawnSync('codesign', ['-s', identity, '--deep', '--force', binPath], { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
118
|
-
return { ok: res.status === 0, stderr: (res.stderr ?? '').toString().trim() };
|
|
119
|
-
}
|
|
120
|
-
function signBrandedHost(binPath) {
|
|
121
|
-
if (process.platform !== 'darwin')
|
|
122
|
-
return;
|
|
123
|
-
const identities = codesignIdentitiesForBrandedHost({
|
|
124
|
-
configured: process.env['CRTR_CODESIGN_IDENTITY'],
|
|
125
|
-
discovered: discoverCodesignIdentity(),
|
|
126
|
-
});
|
|
127
|
-
let lastError = '';
|
|
128
|
-
for (const identity of identities) {
|
|
129
|
-
const res = runCodesign(binPath, identity);
|
|
130
|
-
if (res.ok)
|
|
131
|
-
return;
|
|
132
|
-
lastError = res.stderr;
|
|
133
|
-
}
|
|
134
|
-
if (lastError && !lastError.includes('valid on disk')) {
|
|
135
|
-
emitEvent({ event: 'host.codesign.failed', level: 'debug', error: lastError });
|
|
136
|
-
}
|
|
137
|
-
throw new Error(`codesign failed for ${binPath}: ${lastError || 'codesign did not exit successfully'}`);
|
|
138
|
-
}
|
|
139
|
-
export function signBrandedHostArtifacts(binPath, libnodePath, sign = signBrandedHost) {
|
|
140
|
-
if (libnodePath !== null)
|
|
141
|
-
sign(libnodePath);
|
|
142
|
-
sign(binPath);
|
|
143
|
-
}
|
|
144
|
-
export function brandedHostWorks(binPath, timeoutMs = 5_000) {
|
|
145
|
-
try {
|
|
146
|
-
const res = spawnSync(binPath, ['-e', ''], {
|
|
147
|
-
stdio: 'ignore',
|
|
148
|
-
timeout: timeoutMs,
|
|
149
|
-
});
|
|
150
|
-
return res.status === 0;
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/** Ensure the branded host binary exists and matches the live node; return its
|
|
157
|
-
* absolute path. Idempotent and self-healing. Throws on a genuine build failure
|
|
158
|
-
* (disk full / permissions) — branding is load-bearing for FDA, so a failure is
|
|
159
|
-
* surfaced, never silently masked by falling back to `node`. */
|
|
160
|
-
export function ensureBrandedHost() {
|
|
161
|
-
return withBrandedHostLock(() => {
|
|
162
|
-
const hostDir = brandedHostDir();
|
|
163
|
-
const dst = brandedHostBin();
|
|
164
|
-
const src = realpathSync(process.execPath);
|
|
165
|
-
// If THIS process is already running as the branded host (the daemon or a
|
|
166
|
-
// broker spawning a child), don't rebuild from ourselves — we can't see the
|
|
167
|
-
// real node from here, and the live process proves the copy works. Drift is
|
|
168
|
-
// healed by the next real-`node` CLI invocation.
|
|
169
|
-
if (existsSync(dst) && realpathSync(dst) === src)
|
|
170
|
-
return dst;
|
|
171
|
-
const marker = readMarker();
|
|
172
|
-
const libnodeSrc = findLibnode(src);
|
|
173
|
-
const libnodeName = libnodeSrc !== null ? libnodeSrc.split('/').pop() : null;
|
|
174
|
-
const tupleExists = (candidate) => existsSync(dst) &&
|
|
175
|
-
candidate !== null &&
|
|
176
|
-
candidate.version === 2 &&
|
|
177
|
-
(candidate.libnode === null || existsSync(join(hostDir, candidate.libnode)));
|
|
178
|
-
const tupleMatches = (candidate) => tupleExists(candidate) && candidate.source === src && candidate.libnode === libnodeName;
|
|
179
|
-
if (tupleMatches(marker) && brandedHostWorks(dst))
|
|
180
|
-
return dst;
|
|
181
|
-
// Build and validate a complete tuple privately. Failures before publication
|
|
182
|
-
// leave any previous valid host untouched.
|
|
183
|
-
mkdirSync(hostDir, { recursive: true });
|
|
184
|
-
const stageDir = join(hostDir, `.reconcile.${process.pid}.${Math.random().toString(36).slice(2)}`);
|
|
185
|
-
const backupDir = join(stageDir, 'previous');
|
|
186
|
-
mkdirSync(stageDir);
|
|
187
|
-
let publicationStarted = false;
|
|
188
|
-
const previousTupleIsValid = tupleExists(marker) && brandedHostWorks(dst);
|
|
189
|
-
try {
|
|
190
|
-
const stageBin = join(stageDir, BRANDED_BIN_NAME);
|
|
191
|
-
const stageLibnode = libnodeName !== null ? join(stageDir, libnodeName) : null;
|
|
192
|
-
if (libnodeSrc !== null && stageLibnode !== null)
|
|
193
|
-
atomicCopy(libnodeSrc, stageLibnode);
|
|
194
|
-
atomicCopy(src, stageBin, 0o755);
|
|
195
|
-
signBrandedHostArtifacts(stageBin, stageLibnode);
|
|
196
|
-
if (!brandedHostWorks(stageBin)) {
|
|
197
|
-
throw new Error(`rebuilt branded host failed its startup check: ${stageBin}`);
|
|
198
|
-
}
|
|
199
|
-
if (previousTupleIsValid)
|
|
200
|
-
backupHostTuple(backupDir, dst, marker);
|
|
201
|
-
publicationStarted = true;
|
|
202
|
-
if (stageLibnode !== null)
|
|
203
|
-
renameSync(stageLibnode, join(hostDir, libnodeName));
|
|
204
|
-
renameSync(stageBin, dst);
|
|
205
|
-
atomicCopyMarker({ version: 2, source: src, libnode: libnodeName });
|
|
206
|
-
if (!tupleMatches(readMarker()) || !brandedHostWorks(dst)) {
|
|
207
|
-
throw new Error(`published branded host tuple failed validation: ${dst}`);
|
|
208
|
-
}
|
|
209
|
-
// Cleanup follows successful marker-last publication and validation.
|
|
210
|
-
if (marker?.libnode != null && marker.libnode !== libnodeName) {
|
|
211
|
-
try {
|
|
212
|
-
unlinkSync(join(hostDir, marker.libnode));
|
|
213
|
-
}
|
|
214
|
-
catch {
|
|
215
|
-
/* best-effort */
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
return dst;
|
|
219
|
-
}
|
|
220
|
-
catch (error) {
|
|
221
|
-
if (publicationStarted && previousTupleIsValid)
|
|
222
|
-
restoreHostTuple(backupDir, dst, marker);
|
|
223
|
-
throw error;
|
|
224
|
-
}
|
|
225
|
-
finally {
|
|
226
|
-
rmSync(stageDir, { recursive: true, force: true });
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
function atomicCopyMarker(marker) {
|
|
231
|
-
const path = markerPath();
|
|
232
|
-
const tmp = `${path}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;
|
|
233
|
-
writeFileSync(tmp, JSON.stringify(marker));
|
|
234
|
-
renameSync(tmp, path);
|
|
235
|
-
}
|
|
236
|
-
function backupHostTuple(backupDir, binPath, marker) {
|
|
237
|
-
mkdirSync(backupDir);
|
|
238
|
-
linkSync(binPath, join(backupDir, BRANDED_BIN_NAME));
|
|
239
|
-
if (marker.libnode !== null)
|
|
240
|
-
linkSync(join(brandedHostDir(), marker.libnode), join(backupDir, marker.libnode));
|
|
241
|
-
writeFileSync(join(backupDir, '.source.json'), JSON.stringify(marker));
|
|
242
|
-
}
|
|
243
|
-
function restoreHostTuple(backupDir, binPath, marker) {
|
|
244
|
-
if (marker.libnode !== null)
|
|
245
|
-
renameSync(join(backupDir, marker.libnode), join(brandedHostDir(), marker.libnode));
|
|
246
|
-
renameSync(join(backupDir, BRANDED_BIN_NAME), binPath);
|
|
247
|
-
renameSync(join(backupDir, '.source.json'), markerPath());
|
|
248
|
-
if (!brandedHostWorks(binPath))
|
|
249
|
-
throw new Error(`failed to restore previous branded host tuple: ${binPath}`);
|
|
250
|
-
}
|
|
251
|
-
/** The path the engine (broker / daemon) should be launched from. On macOS in a
|
|
252
|
-
* compiled (production) build this is the validated branded host; otherwise —
|
|
253
|
-
* non-darwin (TCC is macOS-only), source/tsx (dev + the test suite: never copy
|
|
254
|
-
* 70 MB into the real ~/.crouter), or the explicit `CRTR_BRANDED_HOST=0`
|
|
255
|
-
* opt-out — it is the live node. */
|
|
256
|
-
export function hostExecPath() {
|
|
257
|
-
if (process.env['CRTR_BRANDED_HOST'] === '0')
|
|
258
|
-
return process.execPath;
|
|
259
|
-
if (process.platform !== 'darwin')
|
|
260
|
-
return process.execPath;
|
|
261
|
-
if (import.meta.url.endsWith('.ts'))
|
|
262
|
-
return process.execPath;
|
|
263
|
-
return ensureBrandedHost();
|
|
264
|
-
}
|
|
1
|
+
var B=Object.defineProperty;var o=(r,t)=>B(r,"name",{value:t,configurable:!0});import{copyFileSync as I,mkdirSync as m,existsSync as h,readFileSync as k,writeFileSync as $,chmodSync as C,readdirSync as R,renameSync as u,realpathSync as _,unlinkSync as A,rmSync as O,linkSync as H}from"node:fs";import{homedir as T}from"node:os";import{dirname as W,join as i}from"node:path";import{spawnSync as S}from"node:child_process";import{CRTR_DIR_NAME as D}from"../../types.js";import{emitEvent as F}from"../events/emit.js";import{withExclusiveDirectoryLock as L}from"../exclusive-lock.js";const y="crouter";function p(){return i(T(),D,"host")}o(p,"brandedHostDir");function j(){return i(p(),y)}o(j,"brandedHostBin");function g(){return i(p(),".source.json")}o(g,"markerPath");function J(r){const t=W(r);for(const e of[t,i(t,"..","lib")]){if(!h(e))continue;const n=R(e).find(c=>c.startsWith("libnode.")&&c.endsWith(".dylib"));if(n!==void 0)return i(e,n)}return null}o(J,"findLibnode");function M(r,t,e){const n=`${t}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;I(r,n),e!==void 0&&C(n,e),u(n,t)}o(M,"atomicCopy");function N(r=g()){try{return JSON.parse(k(r,"utf8"))}catch{return null}}o(N,"readMarker");const P=3e4;function G(r){const t=i(T(),D),e=i(t,"host.lock");return m(t,{recursive:!0}),L(e,r,{timeoutMs:P,timeoutError:o(()=>new Error(`timed out waiting for branded host lock: ${e}`),"timeoutError")})}o(G,"withBrandedHostLock");function K(r={}){const t=r.configured?.trim();return t?[t]:[r.discovered?.trim()||"-"]}o(K,"codesignIdentitiesForBrandedHost");function U(){if(process.platform!=="darwin")return null;const r=S("security",["find-identity","-v","-p","codesigning"],{stdio:["pipe","pipe","pipe"]});if(r.status!==0)return null;const e=(r.stdout??"").toString().split(`
|
|
2
|
+
`).map(n=>n.match(/\)\s+[A-Fa-f0-9]{40}\s+"([^"]+)"/)?.[1]??null).filter(n=>n!==null);return e.find(n=>n.startsWith("Apple Development:"))??e.find(n=>n.startsWith("Developer ID Application:"))??e[0]??null}o(U,"discoverCodesignIdentity");function V(r,t){const e=S("codesign",["-s",t,"--deep","--force",r],{stdio:["pipe","pipe","pipe"]});return{ok:e.status===0,stderr:(e.stderr??"").toString().trim()}}o(V,"runCodesign");function Y(r){if(process.platform!=="darwin")return;const t=K({configured:process.env.CRTR_CODESIGN_IDENTITY,discovered:U()});let e="";for(const n of t){const c=V(r,n);if(c.ok)return;e=c.stderr}throw e&&!e.includes("valid on disk")&&F({event:"host.codesign.failed",level:"debug",error:e}),new Error(`codesign failed for ${r}: ${e||"codesign did not exit successfully"}`)}o(Y,"signBrandedHost");function q(r,t,e=Y){t!==null&&e(t),e(r)}o(q,"signBrandedHostArtifacts");function a(r,t=5e3){try{return S(r,["-e",""],{stdio:"ignore",timeout:t}).status===0}catch{return!1}}o(a,"brandedHostWorks");function z(){return G(()=>{const r=p(),t=j(),e=_(process.execPath);if(h(t)&&_(t)===e)return t;const n=N(),c=J(e),d=c!==null?c.split("/").pop():null,b=o(s=>h(t)&&s!==null&&s.version===2&&(s.libnode===null||h(i(r,s.libnode))),"tupleExists"),v=o(s=>b(s)&&s.source===e&&s.libnode===d,"tupleMatches");if(v(n)&&a(t))return t;m(r,{recursive:!0});const l=i(r,`.reconcile.${process.pid}.${Math.random().toString(36).slice(2)}`),w=i(l,"previous");m(l);let E=!1;const x=b(n)&&a(t);try{const s=i(l,y),f=d!==null?i(l,d):null;if(c!==null&&f!==null&&M(c,f),M(e,s,493),q(s,f),!a(s))throw new Error(`rebuilt branded host failed its startup check: ${s}`);if(x&&X(w,t,n),E=!0,f!==null&&u(f,i(r,d)),u(s,t),Q({version:2,source:e,libnode:d}),!v(N())||!a(t))throw new Error(`published branded host tuple failed validation: ${t}`);if(n?.libnode!=null&&n.libnode!==d)try{A(i(r,n.libnode))}catch{}return t}catch(s){throw E&&x&&Z(w,t,n),s}finally{O(l,{recursive:!0,force:!0})}})}o(z,"ensureBrandedHost");function Q(r){const t=g(),e=`${t}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`;$(e,JSON.stringify(r)),u(e,t)}o(Q,"atomicCopyMarker");function X(r,t,e){m(r),H(t,i(r,y)),e.libnode!==null&&H(i(p(),e.libnode),i(r,e.libnode)),$(i(r,".source.json"),JSON.stringify(e))}o(X,"backupHostTuple");function Z(r,t,e){if(e.libnode!==null&&u(i(r,e.libnode),i(p(),e.libnode)),u(i(r,y),t),u(i(r,".source.json"),g()),!a(t))throw new Error(`failed to restore previous branded host tuple: ${t}`)}o(Z,"restoreHostTuple");function ut(){return process.env.CRTR_BRANDED_HOST==="0"||process.platform!=="darwin"||import.meta.url.endsWith(".ts")?process.execPath:z()}o(ut,"hostExecPath");export{j as brandedHostBin,p as brandedHostDir,a as brandedHostWorks,K as codesignIdentitiesForBrandedHost,z as ensureBrandedHost,ut as hostExecPath,q as signBrandedHostArtifacts};
|