@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,574 +1 @@
|
|
|
1
|
-
// The profile store: `~/.crouter/profiles/<slug>-<id>/` — a manifest
|
|
2
|
-
// (`profile.json`) naming N project directories, plus the profile's own
|
|
3
|
-
// `memory/` store (spec §2.1). This module is the SOLE place that resolves a
|
|
4
|
-
// profile id/name to a path and writes/mutates a manifest: every join against
|
|
5
|
-
// the canonical profiles root goes through the id-shape + containment checks
|
|
6
|
-
// here, so no caller ever passes a raw CLI operand or `CRTR_PROFILE_ID`
|
|
7
|
-
// straight into `join(profilesRoot(), value)`.
|
|
8
|
-
import { randomUUID } from 'node:crypto';
|
|
9
|
-
import { existsSync, realpathSync, rmSync, statSync, } from 'node:fs';
|
|
10
|
-
import { join, relative, resolve as resolvePath, sep } from 'node:path';
|
|
11
|
-
import { SCHEMA_VERSION, PROFILE_DIR } from '../../types.js';
|
|
12
|
-
import { PROFILE_PROJECT_MEMORY_VALUES } from '../../api/dto/profiles.js';
|
|
13
|
-
import { userScopeRoot, resetScopeCache } from '../scope.js';
|
|
14
|
-
import { ensureDir, nowIso } from '../fs-utils.js';
|
|
15
|
-
import { deleteStoredProfile, getStoredProfile, insertStoredProfile, listStoredProfiles, updateStoredProfile } from '../scoped-state/profiles.js';
|
|
16
|
-
import { usage, notFound, ambiguous, general } from '../errors.js';
|
|
17
|
-
import { withExclusiveDirectoryLock } from '../exclusive-lock.js';
|
|
18
|
-
import { fuzzyMatchProfile } from './fuzzy-match.js';
|
|
19
|
-
// Path safety — the only code in the tree that builds a path under the
|
|
20
|
-
// profiles root. Every other module reaches profile paths through this file.
|
|
21
|
-
/** `<slug>-<shortid>`: slug is lower-case, non-alphanumeric collapsed to `-`,
|
|
22
|
-
* trimmed to 40 chars (defaulting to `profile`); shortid is 8 lowercase hex
|
|
23
|
-
* chars. The char class alone rules out `/`, `\`, `.`, and `..` segments —
|
|
24
|
-
* this is the "generated id shape" check every exact-id lookup requires. */
|
|
25
|
-
const ID_SHAPE = /^[a-z0-9]+(?:-[a-z0-9]+)*-[0-9a-f]{8}$/;
|
|
26
|
-
export const ROOT_PROFILE_ID = 'root-00000000';
|
|
27
|
-
const ROOT_PROFILE_NAME = 'root';
|
|
28
|
-
function scaffoldProfile(profileId, _manifest) {
|
|
29
|
-
const root = profileRoot(profileId);
|
|
30
|
-
ensureDir(root);
|
|
31
|
-
ensureDir(join(root, 'memory'));
|
|
32
|
-
}
|
|
33
|
-
export function profilesRoot() {
|
|
34
|
-
return join(userScopeRoot(), PROFILE_DIR);
|
|
35
|
-
}
|
|
36
|
-
function assertSafeProfileId(profileId) {
|
|
37
|
-
if (!ID_SHAPE.test(profileId)) {
|
|
38
|
-
throw usage(`invalid profile id: ${profileId}`, {
|
|
39
|
-
received: profileId,
|
|
40
|
-
next: 'Profile ids look like <slug>-<8-hex-chars> (as printed by `crtr profile new`). Pass an exact id or a profile name, not a raw path.',
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/** Before any read/write/lock/delete: the resolved target must live INSIDE
|
|
45
|
-
* the canonical profiles root, even after symlink resolution. Every caller
|
|
46
|
-
* below reaches this only via `profileRoot`, which already ran
|
|
47
|
-
* `assertSafeProfileId` first — this is defense-in-depth, not the primary
|
|
48
|
-
* guard, and is what makes an unexpected symlink under a profile dir inert. */
|
|
49
|
-
function assertInsideProfilesRoot(path) {
|
|
50
|
-
const root = profilesRoot();
|
|
51
|
-
const absRoot = resolvePath(root);
|
|
52
|
-
const resolvedRoot = existsSync(root) ? realpathSync(root) : absRoot;
|
|
53
|
-
const resolvedPath = existsSync(path)
|
|
54
|
-
? realpathSync(path)
|
|
55
|
-
: resolvePath(resolvedRoot, relative(absRoot, resolvePath(path)));
|
|
56
|
-
if (resolvedPath !== resolvedRoot && !resolvedPath.startsWith(resolvedRoot + sep)) {
|
|
57
|
-
throw usage(`profile path escapes the profiles root: ${path}`);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
export function profileRoot(profileId) {
|
|
61
|
-
assertSafeProfileId(profileId);
|
|
62
|
-
const root = join(profilesRoot(), profileId);
|
|
63
|
-
assertInsideProfilesRoot(root);
|
|
64
|
-
return root;
|
|
65
|
-
}
|
|
66
|
-
export function profileManifestPath(profileId) {
|
|
67
|
-
return join(profileRoot(profileId), 'profile.json');
|
|
68
|
-
}
|
|
69
|
-
export function profileMemoryDir(profileId) {
|
|
70
|
-
return join(profileRoot(profileId), 'memory');
|
|
71
|
-
}
|
|
72
|
-
// Enumeration + resolution — the ONLY functions that turn a CLI operand into
|
|
73
|
-
// a profile id. Both walk immediate children of the canonical root; neither
|
|
74
|
-
// ever joins an unvalidated operand into a path.
|
|
75
|
-
/** A profile's `home` DEFAULTS to its first project dir. Normalizing here (the
|
|
76
|
-
* single read path) rather than at write time means a manifest written before
|
|
77
|
-
* homes existed, and one whose explicit home was later removed from purview,
|
|
78
|
-
* both still answer with a usable home — no migration pass.
|
|
79
|
-
*
|
|
80
|
-
* The root profile is the exception and never takes the default: it is the
|
|
81
|
-
* identity a directory nothing covers falls back to, so its nodes belong where
|
|
82
|
-
* the user started them, not in whatever dir was last added to its purview. */
|
|
83
|
-
function normalizeHome(profileId, manifest) {
|
|
84
|
-
const stored = typeof manifest.home === 'string' && manifest.home !== '' ? manifest.home : null;
|
|
85
|
-
return { ...manifest, home: profileId === ROOT_PROFILE_ID ? stored : stored ?? manifest.projects[0]?.path ?? null, paused_at: typeof manifest.paused_at === 'string' && manifest.paused_at !== '' ? manifest.paused_at : null };
|
|
86
|
-
}
|
|
87
|
-
export function assertProfileProjects(entries) {
|
|
88
|
-
const memories = PROFILE_PROJECT_MEMORY_VALUES.join(', ');
|
|
89
|
-
if (!Array.isArray(entries))
|
|
90
|
-
throw usage('projects must be an array of {path, memory} objects', { received: typeof entries, field: 'projects', next: `Pass entries like {"path": "/abs/dir", "memory": "content"} — memory is one of: ${memories}.` });
|
|
91
|
-
for (const entry of entries) {
|
|
92
|
-
if (typeof entry !== 'object' || entry === null || Array.isArray(entry))
|
|
93
|
-
throw usage(`invalid project entry: ${JSON.stringify(entry)}`, { field: 'projects', next: 'Every project is an object like {"path": "/abs/dir", "memory": "content"}.' });
|
|
94
|
-
const { path, memory } = entry;
|
|
95
|
-
if (typeof path !== 'string' || path.trim() === '')
|
|
96
|
-
throw usage(`project entry has no path: ${JSON.stringify(entry)}`, { field: 'projects', next: 'Give every project entry a non-empty directory path.' });
|
|
97
|
-
if (typeof memory !== 'string' || !PROFILE_PROJECT_MEMORY_VALUES.includes(memory))
|
|
98
|
-
throw usage(`invalid project memory value: ${JSON.stringify(memory)}`, { received: String(memory), field: 'projects', next: `Set memory on ${path} to one of: ${memories}.` });
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
export function profileHome(profileId) {
|
|
102
|
-
if (profileId === null || profileId === '')
|
|
103
|
-
return null;
|
|
104
|
-
try {
|
|
105
|
-
const home = loadProfileManifest(profileId).manifest.home;
|
|
106
|
-
return home !== null && existsSync(home) && statSync(home).isDirectory() ? home : null;
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function enumerateProfiles() { return { entries: listStoredProfiles(userScopeRoot()).map(({ profileId, manifest }) => ({ profileId, manifest: normalizeHome(profileId, manifest) })), unreadableIds: [] }; }
|
|
113
|
-
export function listProfiles() { return enumerateProfiles().entries; }
|
|
114
|
-
export function lookupProfile(profileIdOrName) { const entries = listProfiles(); const exact = findExactProfile(entries, profileIdOrName); return exact ? { kind: 'resolved', entry: exact } : { kind: 'absent' }; }
|
|
115
|
-
// Three resolvers, in descending tolerance. `resolveProfileOperand` is what a
|
|
116
|
-
// command leaf calls for a value the USER TYPED: exact id, exact name, then a
|
|
117
|
-
// fuzzy fallback. `loadProfileManifest` is the strict middle — exact id or
|
|
118
|
-
// exact name, no guessing — and is what every runtime consumer holding a
|
|
119
|
-
// stored `profile_id` or `CRTR_PROFILE_ID` calls. `loadExactProfileManifest`
|
|
120
|
-
// skips name matching entirely, for persistence gates already holding a
|
|
121
|
-
// resolved durable identity. All three check the id shape against the
|
|
122
|
-
// actually-enumerated dirs rather than joining a raw operand onto the root, so
|
|
123
|
-
// no caller can traverse out of the profiles root.
|
|
124
|
-
/** Read one exact profile id without falling back to manifest-name matching.
|
|
125
|
-
* Used at persistence gates that already hold a resolved durable identity. */
|
|
126
|
-
export function loadExactProfileManifest(profileId) {
|
|
127
|
-
assertSafeProfileId(profileId);
|
|
128
|
-
const stored = getStoredProfile(userScopeRoot(), profileId);
|
|
129
|
-
if (stored !== null)
|
|
130
|
-
return { profileId, manifest: normalizeHome(profileId, stored.manifest) };
|
|
131
|
-
throw notFound(`profile not found: ${profileId}`, { received: profileId, next: 'Run `crtr profile list` to see available profiles.' });
|
|
132
|
-
}
|
|
133
|
-
/** Exact resolution only: the generated id, else a unique manifest `name`.
|
|
134
|
-
* Returns `null` when nothing matches exactly; still THROWS when a name is
|
|
135
|
-
* shared by several profiles, because that is a real collision the caller
|
|
136
|
-
* cannot resolve by guessing (and fuzzy matching would only guess harder). */
|
|
137
|
-
function findExactProfile(all, profileIdOrName) {
|
|
138
|
-
if (ID_SHAPE.test(profileIdOrName)) {
|
|
139
|
-
const byId = all.find((p) => p.profileId === profileIdOrName);
|
|
140
|
-
if (byId !== undefined)
|
|
141
|
-
return byId;
|
|
142
|
-
}
|
|
143
|
-
const byName = all.filter((p) => p.manifest.name === profileIdOrName);
|
|
144
|
-
if (byName.length === 1)
|
|
145
|
-
return byName[0];
|
|
146
|
-
if (byName.length > 1) {
|
|
147
|
-
const ids = byName.map((p) => p.profileId);
|
|
148
|
-
throw ambiguous(`profile name "${profileIdOrName}" matches ${ids.length} profiles: ${ids.join(', ')}`, {
|
|
149
|
-
received: profileIdOrName,
|
|
150
|
-
candidates: ids,
|
|
151
|
-
next: `Re-run with one exact profile id: ${ids.join(', ')}.`,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
/** Name the actual value set in the failure: a caller that guessed an id or a
|
|
157
|
-
* stale name can correct itself from this error alone, without a lookup hop. */
|
|
158
|
-
function profileNotFound(all, profileIdOrName) {
|
|
159
|
-
const available = all.map((p) => `${p.profileId} (${p.manifest.name})`);
|
|
160
|
-
return notFound(`profile not found: ${profileIdOrName}`, {
|
|
161
|
-
received: profileIdOrName,
|
|
162
|
-
available,
|
|
163
|
-
next: available.length > 0
|
|
164
|
-
? `Re-run with one of the profiles on this host: ${available.join(', ')} — or create one with \`crtr profile new --name <name>\`.`
|
|
165
|
-
: 'No profiles exist on this host yet — create one with `crtr profile new --name <name>`.',
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
export function loadProfileManifest(profileIdOrName) {
|
|
169
|
-
const lookup = lookupProfile(profileIdOrName);
|
|
170
|
-
if (lookup.kind === 'resolved')
|
|
171
|
-
return lookup.entry;
|
|
172
|
-
// Unreadable and absent both answer not-found here: this is the tolerant
|
|
173
|
-
// resolver every runtime consumer already handles that way. A caller that
|
|
174
|
-
// must NOT substitute another identity calls `lookupProfile` directly.
|
|
175
|
-
throw profileNotFound(listProfiles(), profileIdOrName);
|
|
176
|
-
}
|
|
177
|
-
/** Resolve a profile the USER TYPED — a `--profile` flag or a `<profile>`
|
|
178
|
-
* operand. Exact id or name wins outright; only when nothing matches exactly
|
|
179
|
-
* does this fall back to fuzzy matching on name and id slug, so a typed
|
|
180
|
-
* `crout`, `Crouter`, or `cruoter` reaches the `crouter` profile instead of
|
|
181
|
-
* failing with a list the user has to read and retype. A fuzzy hit is
|
|
182
|
-
* announced on STDERR (never stdout, which callers pipe) so the user always
|
|
183
|
-
* knows which profile actually ran.
|
|
184
|
-
*
|
|
185
|
-
* NEVER call this with a STORED `profile_id` (a node's `meta.profile_id`,
|
|
186
|
-
* `CRTR_PROFILE_ID`, a pinned default). A durable id that no longer resolves
|
|
187
|
-
* means the profile was deleted — the correct answer there is the not-found
|
|
188
|
-
* those callers already handle, not the nearest surviving profile. Use
|
|
189
|
-
* `loadProfileManifest` (or `loadExactProfileManifest`) for those. */
|
|
190
|
-
export function resolveProfileOperand(operand) {
|
|
191
|
-
const all = listProfiles();
|
|
192
|
-
const exact = findExactProfile(all, operand);
|
|
193
|
-
if (exact !== null)
|
|
194
|
-
return exact;
|
|
195
|
-
const { match, tied } = fuzzyMatchProfile(operand, all.map((p) => ({ profileId: p.profileId, name: p.manifest.name })));
|
|
196
|
-
if (match !== null) {
|
|
197
|
-
const picked = all.find((p) => p.profileId === match.profileId);
|
|
198
|
-
console.error(`crtr: no profile named "${operand}" — using the closest match: ${picked.manifest.name} (${picked.profileId})`);
|
|
199
|
-
return picked;
|
|
200
|
-
}
|
|
201
|
-
if (tied.length > 1) {
|
|
202
|
-
const ids = tied.map((c) => `${c.profileId} (${c.name})`);
|
|
203
|
-
throw ambiguous(`"${operand}" is equally close to ${tied.length} profiles: ${ids.join(', ')}`, {
|
|
204
|
-
received: operand,
|
|
205
|
-
candidates: tied.map((c) => c.profileId),
|
|
206
|
-
next: `Re-run with one exact profile id or name: ${ids.join(', ')}.`,
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
throw profileNotFound(all, operand);
|
|
210
|
-
}
|
|
211
|
-
function locksDir() {
|
|
212
|
-
return join(profilesRoot(), '.locks');
|
|
213
|
-
}
|
|
214
|
-
/** Hold the per-profile manifest lock for the duration of `fn`. ALL manifest
|
|
215
|
-
* mutations (create/rename/add-project/remove-project/delete/last-used)
|
|
216
|
-
* below run inside this. */
|
|
217
|
-
export function withProfileManifestLock(profileId, fn) {
|
|
218
|
-
assertSafeProfileId(profileId);
|
|
219
|
-
ensureDir(locksDir());
|
|
220
|
-
return withExclusiveDirectoryLock(join(locksDir(), `${profileId}.lock`), fn, {
|
|
221
|
-
timeoutError: () => general(`timed out waiting for the profile lock: ${profileId}`, {
|
|
222
|
-
next: 'Retry — another `crtr profile` command may be running concurrently on this profile.',
|
|
223
|
-
}),
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
// Project dirs — resolved to absolute real paths, must exist + be a directory
|
|
227
|
-
// on add/create, deduped by real path, stored in manifest order.
|
|
228
|
-
function resolveExistingProjectDir(dir) {
|
|
229
|
-
const abs = resolvePath(dir);
|
|
230
|
-
if (!existsSync(abs) || !statSync(abs).isDirectory()) {
|
|
231
|
-
throw usage(`project directory does not exist or is not a directory: ${dir}`, {
|
|
232
|
-
received: dir,
|
|
233
|
-
next: 'Pass an existing directory path.',
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
try {
|
|
237
|
-
return realpathSync(abs);
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
240
|
-
return abs;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
/** First-wins by resolved path, manifest order preserved. */
|
|
244
|
-
function dedupeProjects(entries) {
|
|
245
|
-
const seen = new Set();
|
|
246
|
-
const out = [];
|
|
247
|
-
for (const entry of entries) {
|
|
248
|
-
if (seen.has(entry.path))
|
|
249
|
-
continue;
|
|
250
|
-
seen.add(entry.path);
|
|
251
|
-
out.push(entry);
|
|
252
|
-
}
|
|
253
|
-
return out;
|
|
254
|
-
}
|
|
255
|
-
function slugify(name) {
|
|
256
|
-
let slug = name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
257
|
-
if (slug.length > 40)
|
|
258
|
-
slug = slug.slice(0, 40).replace(/-+$/g, '');
|
|
259
|
-
return slug.length > 0 ? slug : 'profile';
|
|
260
|
-
}
|
|
261
|
-
function generateProfileId(name) {
|
|
262
|
-
const slug = slugify(name);
|
|
263
|
-
const root = profilesRoot();
|
|
264
|
-
for (let attempt = 0; attempt < 20; attempt++) {
|
|
265
|
-
const shortId = randomUUID().replace(/-/g, '').slice(0, 8);
|
|
266
|
-
const candidate = `${slug}-${shortId}`;
|
|
267
|
-
if (!existsSync(join(root, candidate)))
|
|
268
|
-
return candidate;
|
|
269
|
-
}
|
|
270
|
-
throw general(`failed to generate a unique profile id for "${name}" after 20 attempts`);
|
|
271
|
-
}
|
|
272
|
-
// Mutations — all under withProfileManifestLock, all atomic writes, all call
|
|
273
|
-
// resetScopeCache() when they can change project dirs or the profile name
|
|
274
|
-
// (never for a bare last-used-at touch).
|
|
275
|
-
export function ensureRootProfile() {
|
|
276
|
-
return withProfileManifestLock(ROOT_PROFILE_ID, () => {
|
|
277
|
-
const existing = getStoredProfile(userScopeRoot(), ROOT_PROFILE_ID);
|
|
278
|
-
if (existing !== null) {
|
|
279
|
-
ensureDir(profileRoot(ROOT_PROFILE_ID));
|
|
280
|
-
ensureDir(profileMemoryDir(ROOT_PROFILE_ID));
|
|
281
|
-
return { profileId: ROOT_PROFILE_ID, manifest: normalizeHome(ROOT_PROFILE_ID, existing.manifest) };
|
|
282
|
-
}
|
|
283
|
-
const next = {
|
|
284
|
-
schema_version: SCHEMA_VERSION,
|
|
285
|
-
name: ROOT_PROFILE_NAME,
|
|
286
|
-
projects: [],
|
|
287
|
-
home: null,
|
|
288
|
-
paused_at: null,
|
|
289
|
-
created_at: nowIso(),
|
|
290
|
-
last_used_at: nowIso(),
|
|
291
|
-
};
|
|
292
|
-
scaffoldProfile(ROOT_PROFILE_ID, next);
|
|
293
|
-
insertStoredProfile(userScopeRoot(), { profileId: ROOT_PROFILE_ID, manifest: next }, profileRoot(ROOT_PROFILE_ID));
|
|
294
|
-
resetScopeCache();
|
|
295
|
-
return { profileId: ROOT_PROFILE_ID, manifest: next };
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
/** Key shape every stored metadata entry must satisfy — kept env-mappable
|
|
299
|
-
* (`CRTR_PROFILE_META_<KEY>`, see `core/runtime/spawn-env.ts`) by
|
|
300
|
-
* construction. */
|
|
301
|
-
const METADATA_KEY_SHAPE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
|
|
302
|
-
/** The env name a metadata entry surfaces as (spawn-env source F). Also the
|
|
303
|
-
* uniqueness domain for keys: the fold is lossy (`a-b`, `a_b`, `A_B` →
|
|
304
|
-
* `CRTR_PROFILE_META_A_B`), so two stored keys may not share a fold. */
|
|
305
|
-
export function metadataEnvName(key) {
|
|
306
|
-
return `CRTR_PROFILE_META_${key.toUpperCase().replace(/[^A-Z0-9]+/g, '_')}`;
|
|
307
|
-
}
|
|
308
|
-
/** Reject anything a valid metadata map may not carry. Takes `unknown`
|
|
309
|
-
* because the API route hands over a caller-supplied body slice — the
|
|
310
|
-
* TypeScript type on the DTO proves nothing at runtime. */
|
|
311
|
-
export function assertProfileMetadata(entries) {
|
|
312
|
-
if (typeof entries !== 'object' || entries === null || Array.isArray(entries)) {
|
|
313
|
-
throw usage('metadata must be a map of string keys to string values', {
|
|
314
|
-
field: 'metadata',
|
|
315
|
-
next: 'Pass an object, e.g. {"role": "support"}.',
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
const claimed = new Map();
|
|
319
|
-
for (const [key, value] of Object.entries(entries)) {
|
|
320
|
-
if (!METADATA_KEY_SHAPE.test(key)) {
|
|
321
|
-
throw usage(`invalid metadata key: ${JSON.stringify(key)}`, {
|
|
322
|
-
received: key,
|
|
323
|
-
field: 'metadata',
|
|
324
|
-
next: 'Keys start with a letter or digit, followed by letters, digits, `_`, or `-`.',
|
|
325
|
-
});
|
|
326
|
-
}
|
|
327
|
-
if (typeof value !== 'string') {
|
|
328
|
-
throw usage(`metadata value for ${key} must be a string`, {
|
|
329
|
-
received: typeof value,
|
|
330
|
-
field: 'metadata',
|
|
331
|
-
next: 'Every metadata value is an env-var value — pass strings only.',
|
|
332
|
-
});
|
|
333
|
-
}
|
|
334
|
-
if (value.includes('\0')) {
|
|
335
|
-
throw usage(`metadata value for ${key} contains a NUL byte, which no OS accepts in an environment variable`, {
|
|
336
|
-
field: 'metadata',
|
|
337
|
-
next: 'Remove NUL bytes from the value and retry.',
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
const envName = metadataEnvName(key);
|
|
341
|
-
const prior = claimed.get(envName);
|
|
342
|
-
if (prior !== undefined) {
|
|
343
|
-
throw usage(`metadata keys ${JSON.stringify(prior)} and ${JSON.stringify(key)} both surface as ${envName}`, {
|
|
344
|
-
field: 'metadata',
|
|
345
|
-
next: 'Rename or drop one — keys must stay distinct after uppercasing and `_`-folding.',
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
claimed.set(envName, key);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
/** Drop entries no valid mutation could have written — a manifest is
|
|
352
|
-
* hand-editable, so a projection or merge base must never trust it raw.
|
|
353
|
-
* Never throws; on an env-name collision the first entry wins (matching
|
|
354
|
-
* injection, where a deterministic winner beats insertion-order luck). */
|
|
355
|
-
export function sanitizeProfileMetadata(stored) {
|
|
356
|
-
if (typeof stored !== 'object' || stored === null || Array.isArray(stored))
|
|
357
|
-
return {};
|
|
358
|
-
const out = {};
|
|
359
|
-
const claimed = new Set();
|
|
360
|
-
for (const [key, value] of Object.entries(stored)) {
|
|
361
|
-
if (typeof value !== 'string')
|
|
362
|
-
continue;
|
|
363
|
-
if (!METADATA_KEY_SHAPE.test(key))
|
|
364
|
-
continue;
|
|
365
|
-
if (value.includes('\0'))
|
|
366
|
-
continue;
|
|
367
|
-
const envName = metadataEnvName(key);
|
|
368
|
-
if (claimed.has(envName))
|
|
369
|
-
continue;
|
|
370
|
-
claimed.add(envName);
|
|
371
|
-
out[key] = value;
|
|
372
|
-
}
|
|
373
|
-
return out;
|
|
374
|
-
}
|
|
375
|
-
export function createProfile(name, projects = [], opts = {}) {
|
|
376
|
-
const trimmed = name.trim();
|
|
377
|
-
if (trimmed === '')
|
|
378
|
-
throw usage('profile name must not be empty');
|
|
379
|
-
if (opts.metadata !== undefined)
|
|
380
|
-
assertProfileMetadata(opts.metadata);
|
|
381
|
-
assertProfileProjects(projects);
|
|
382
|
-
const resolvedProjects = dedupeProjects(projects.map((p) => ({ path: resolveExistingProjectDir(p.path), memory: p.memory })));
|
|
383
|
-
const profileId = generateProfileId(trimmed);
|
|
384
|
-
return withProfileManifestLock(profileId, () => {
|
|
385
|
-
const manifest = {
|
|
386
|
-
schema_version: SCHEMA_VERSION,
|
|
387
|
-
name: trimmed,
|
|
388
|
-
projects: resolvedProjects,
|
|
389
|
-
home: resolvedProjects[0]?.path ?? null,
|
|
390
|
-
paused_at: null,
|
|
391
|
-
...(opts.defaultKind !== undefined ? { default_kind: opts.defaultKind } : {}),
|
|
392
|
-
...(opts.metadata !== undefined && Object.keys(opts.metadata).length > 0 ? { metadata: { ...opts.metadata } } : {}),
|
|
393
|
-
created_at: nowIso(),
|
|
394
|
-
last_used_at: null,
|
|
395
|
-
};
|
|
396
|
-
scaffoldProfile(profileId, manifest);
|
|
397
|
-
insertStoredProfile(userScopeRoot(), { profileId, manifest }, profileRoot(profileId));
|
|
398
|
-
resetScopeCache();
|
|
399
|
-
return { profileId, manifest };
|
|
400
|
-
});
|
|
401
|
-
}
|
|
402
|
-
function requireExistingProfile(profileId) {
|
|
403
|
-
assertSafeProfileId(profileId);
|
|
404
|
-
if (getStoredProfile(userScopeRoot(), profileId) === null)
|
|
405
|
-
throw notFound(`profile not found: ${profileId}`, { received: profileId, next: 'Run `crtr profile list` to see available profiles.' });
|
|
406
|
-
}
|
|
407
|
-
function mutateManifest(profileId, mutate) {
|
|
408
|
-
requireExistingProfile(profileId);
|
|
409
|
-
return withProfileManifestLock(profileId, () => {
|
|
410
|
-
const result = updateStoredProfile(userScopeRoot(), profileId, mutate);
|
|
411
|
-
if (result === null)
|
|
412
|
-
throw notFound(`profile not found: ${profileId}`, { received: profileId });
|
|
413
|
-
return { profileId, manifest: normalizeHome(profileId, result.manifest) };
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
export function updateProfileLastUsed(profileId) {
|
|
417
|
-
return mutateManifest(profileId, (m) => ({ ...m, last_used_at: nowIso() }));
|
|
418
|
-
}
|
|
419
|
-
/** Resolve an existing profile for a launch gate without making stale durable
|
|
420
|
-
* profile ids a new failure mode on a hot path. */
|
|
421
|
-
function loadProfileManifestOrNull(profileId) {
|
|
422
|
-
if (profileId === null || profileId === undefined || profileId === '')
|
|
423
|
-
return null;
|
|
424
|
-
try {
|
|
425
|
-
return loadProfileManifest(profileId);
|
|
426
|
-
}
|
|
427
|
-
catch {
|
|
428
|
-
return null;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
/** Paused check for an ALREADY-RESOLVED durable id (a canvas row's `profile_id`,
|
|
432
|
-
* `CRTR_PROFILE_ID`) — exact-id only, no name matching, so it costs one small
|
|
433
|
-
* read on the hot delivery paths that call it every poll. Fails OPEN: an id
|
|
434
|
-
* whose manifest is missing or corrupt is not paused, because treating it as
|
|
435
|
-
* paused would strand that node's queued inbox forever. */
|
|
436
|
-
export function isProfilePaused(profileId) {
|
|
437
|
-
if (profileId === null || profileId === undefined || profileId === '')
|
|
438
|
-
return false;
|
|
439
|
-
try {
|
|
440
|
-
return loadExactProfileManifest(profileId).manifest.paused_at !== null;
|
|
441
|
-
}
|
|
442
|
-
catch {
|
|
443
|
-
return false;
|
|
444
|
-
}
|
|
445
|
-
}
|
|
446
|
-
/** Refuse a launch under a paused profile, naming the resume command. Shared by
|
|
447
|
-
* every gate that already holds a loaded manifest. */
|
|
448
|
-
export function assertProfileEntryActive(entry) {
|
|
449
|
-
if (entry.manifest.paused_at === null)
|
|
450
|
-
return;
|
|
451
|
-
throw usage(`profile "${entry.manifest.name}" is paused and cannot start nodes`, {
|
|
452
|
-
received: entry.profileId,
|
|
453
|
-
next: `Resume it with \`crtr profile resume ${entry.profileId}\`.`,
|
|
454
|
-
});
|
|
455
|
-
}
|
|
456
|
-
export function assertProfileActive(profileId) {
|
|
457
|
-
const entry = loadProfileManifestOrNull(profileId);
|
|
458
|
-
if (entry === null)
|
|
459
|
-
return null;
|
|
460
|
-
assertProfileEntryActive(entry);
|
|
461
|
-
return entry;
|
|
462
|
-
}
|
|
463
|
-
export function pauseProfile(profileId) {
|
|
464
|
-
return mutateManifest(profileId, (m) => ({ ...m, paused_at: m.paused_at ?? nowIso() }));
|
|
465
|
-
}
|
|
466
|
-
export function resumeProfile(profileId) {
|
|
467
|
-
let pausedAt = null;
|
|
468
|
-
const entry = mutateManifest(profileId, (m) => {
|
|
469
|
-
pausedAt = m.paused_at;
|
|
470
|
-
return { ...m, paused_at: null };
|
|
471
|
-
});
|
|
472
|
-
return { ...entry, pausedAt };
|
|
473
|
-
}
|
|
474
|
-
export function setProfileDefaultKind(profileId, defaultKind) {
|
|
475
|
-
return mutateManifest(profileId, (m) => ({ ...m, default_kind: defaultKind }));
|
|
476
|
-
}
|
|
477
|
-
/** Merge `set` entries over the stored map and drop `unset` keys; the
|
|
478
|
-
* `metadata` field is omitted entirely when the result is empty. */
|
|
479
|
-
export function updateProfileMetadata(profileId, set, unset = []) {
|
|
480
|
-
assertProfileMetadata(set);
|
|
481
|
-
return mutateManifest(profileId, (m) => {
|
|
482
|
-
const next = { ...sanitizeProfileMetadata(m.metadata), ...set };
|
|
483
|
-
for (const key of unset)
|
|
484
|
-
delete next[key];
|
|
485
|
-
// Re-assert the merged result: a set key may collide with a STORED key in
|
|
486
|
-
// the env-name domain (`a-b` over stored `a_b`), which per-argument
|
|
487
|
-
// validation cannot see.
|
|
488
|
-
assertProfileMetadata(next);
|
|
489
|
-
const { metadata: _dropped, ...rest } = m;
|
|
490
|
-
return { ...rest, ...(Object.keys(next).length > 0 ? { metadata: next } : {}) };
|
|
491
|
-
});
|
|
492
|
-
}
|
|
493
|
-
/** A profile's stored metadata for broker-env injection — sanitized entry by
|
|
494
|
-
* entry (a manifest is hand-editable, so a bad key/value is dropped rather
|
|
495
|
-
* than trusted) and never throwing: a stale/invalid/absent profile id is a
|
|
496
|
-
* hot-path no-op, because broker-env resolution must never fail a launch
|
|
497
|
-
* over a bad profile id (mirrors `readProfileEnvVars`). */
|
|
498
|
-
export function readProfileMetadata(profileId) {
|
|
499
|
-
if (profileId === null || profileId === '')
|
|
500
|
-
return {};
|
|
501
|
-
try {
|
|
502
|
-
return sanitizeProfileMetadata(loadExactProfileManifest(profileId).manifest.metadata);
|
|
503
|
-
}
|
|
504
|
-
catch {
|
|
505
|
-
return {};
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
export function renameProfile(profileId, name) {
|
|
509
|
-
const trimmed = name.trim();
|
|
510
|
-
if (trimmed === '')
|
|
511
|
-
throw usage('profile name must not be empty');
|
|
512
|
-
const result = mutateManifest(profileId, (m) => ({ ...m, name: trimmed }));
|
|
513
|
-
resetScopeCache();
|
|
514
|
-
return result;
|
|
515
|
-
}
|
|
516
|
-
/** Upsert: a new path appends, an existing one keeps its position and takes
|
|
517
|
-
* the supplied memory value. Every caller names a memory value — a profile
|
|
518
|
-
* relationship never acquires one by default. */
|
|
519
|
-
export function addProfileProject(profileId, dir, opts) {
|
|
520
|
-
assertProfileProjects([{ path: dir, memory: opts.memory }]);
|
|
521
|
-
const resolved = resolveExistingProjectDir(dir);
|
|
522
|
-
const result = mutateManifest(profileId, (m) => {
|
|
523
|
-
const existing = m.projects.some((p) => p.path === resolved);
|
|
524
|
-
const projects = existing
|
|
525
|
-
? m.projects.map((p) => (p.path === resolved ? { ...p, memory: opts.memory } : p))
|
|
526
|
-
: dedupeProjects([...m.projects, { path: resolved, memory: opts.memory }]);
|
|
527
|
-
return {
|
|
528
|
-
...m,
|
|
529
|
-
projects,
|
|
530
|
-
...(opts.home === true ? { home: resolved } : {}),
|
|
531
|
-
};
|
|
532
|
-
});
|
|
533
|
-
resetScopeCache();
|
|
534
|
-
return result;
|
|
535
|
-
}
|
|
536
|
-
export function removeProfileProject(profileId, dir) {
|
|
537
|
-
// Lenient resolution: a project dir may have been deleted since it was
|
|
538
|
-
// added, so removal must not require it to still exist on disk. Compare
|
|
539
|
-
// against both its real path (if still resolvable) and its plain resolved
|
|
540
|
-
// path (how it would have been stored had it never been a symlink).
|
|
541
|
-
const abs = resolvePath(dir);
|
|
542
|
-
let real = abs;
|
|
543
|
-
try {
|
|
544
|
-
real = realpathSync(abs);
|
|
545
|
-
}
|
|
546
|
-
catch {
|
|
547
|
-
/* dir no longer exists — fall back to comparing by its resolved path */
|
|
548
|
-
}
|
|
549
|
-
const result = mutateManifest(profileId, (m) => {
|
|
550
|
-
const filtered = m.projects.filter((p) => p.path !== real && p.path !== abs);
|
|
551
|
-
// Dropping the home dir from purview falls the home back to the first
|
|
552
|
-
// remaining project, exactly as `normalizeHome` would for a manifest that
|
|
553
|
-
// never named one — never leaves the profile pointing outside its purview.
|
|
554
|
-
const home = m.home === real || m.home === abs ? filtered[0]?.path ?? null : m.home;
|
|
555
|
-
if (filtered.length === m.projects.length) {
|
|
556
|
-
throw notFound(`project not found on profile: ${dir}`, {
|
|
557
|
-
received: dir,
|
|
558
|
-
next: `Current projects: ${m.projects.length > 0 ? m.projects.map((p) => p.path).join(', ') : '(none)'}.`,
|
|
559
|
-
});
|
|
560
|
-
}
|
|
561
|
-
return { ...m, projects: filtered, home };
|
|
562
|
-
});
|
|
563
|
-
resetScopeCache();
|
|
564
|
-
return result;
|
|
565
|
-
}
|
|
566
|
-
export function deleteProfile(profileId) {
|
|
567
|
-
requireExistingProfile(profileId);
|
|
568
|
-
withProfileManifestLock(profileId, () => {
|
|
569
|
-
if (!deleteStoredProfile(userScopeRoot(), profileId))
|
|
570
|
-
throw notFound(`profile not found: ${profileId}`, { received: profileId });
|
|
571
|
-
rmSync(profileRoot(profileId), { recursive: true, force: true });
|
|
572
|
-
});
|
|
573
|
-
resetScopeCache();
|
|
574
|
-
}
|
|
1
|
+
var B=Object.defineProperty;var o=(e,t)=>B(e,"name",{value:t,configurable:!0});import{randomUUID as Q}from"node:crypto";import{existsSync as v,realpathSync as j,rmSync as X,statSync as A}from"node:fs";import{join as m,relative as I,resolve as P,sep as ee}from"node:path";import{SCHEMA_VERSION as M,PROFILE_DIR as te}from"../../types.js";import{PROFILE_PROJECT_MEMORY_VALUES as O}from"../../api/dto/profiles.js";import{userScopeRoot as u,resetScopeCache as h}from"../scope.js";import{ensureDir as g,nowIso as $}from"../fs-utils.js";import{deleteStoredProfile as re,getStoredProfile as S,insertStoredProfile as D,listStoredProfiles as ne,updateStoredProfile as oe}from"../scoped-state/profiles.js";import{usage as c,notFound as y,ambiguous as L,general as N}from"../errors.js";import{withExclusiveDirectoryLock as ie}from"../exclusive-lock.js";import{fuzzyMatchProfile as ae}from"./fuzzy-match.js";const z=/^[a-z0-9]+(?:-[a-z0-9]+)*-[0-9a-f]{8}$/,f="root-00000000",se="root";function C(e,t){const r=p(e);g(r),g(m(r,"memory"))}o(C,"scaffoldProfile");function w(){return m(u(),te)}o(w,"profilesRoot");function _(e){if(!z.test(e))throw c(`invalid profile id: ${e}`,{received:e,next:"Profile ids look like <slug>-<8-hex-chars> (as printed by `crtr profile new`). Pass an exact id or a profile name, not a raw path."})}o(_,"assertSafeProfileId");function ce(e){const t=w(),r=P(t),n=v(t)?j(t):r,i=v(e)?j(e):P(n,I(r,P(e)));if(i!==n&&!i.startsWith(n+ee))throw c(`profile path escapes the profiles root: ${e}`)}o(ce,"assertInsideProfilesRoot");function p(e){_(e);const t=m(w(),e);return ce(t),t}o(p,"profileRoot");function ke(e){return m(p(e),"profile.json")}o(ke,"profileManifestPath");function fe(e){return m(p(e),"memory")}o(fe,"profileMemoryDir");function b(e,t){const r=typeof t.home=="string"&&t.home!==""?t.home:null;return{...t,home:e===f?r:r??t.projects[0]?.path??null,paused_at:typeof t.paused_at=="string"&&t.paused_at!==""?t.paused_at:null}}o(b,"normalizeHome");function F(e){const t=O.join(", ");if(!Array.isArray(e))throw c("projects must be an array of {path, memory} objects",{received:typeof e,field:"projects",next:`Pass entries like {"path": "/abs/dir", "memory": "content"} \u2014 memory is one of: ${t}.`});for(const r of e){if(typeof r!="object"||r===null||Array.isArray(r))throw c(`invalid project entry: ${JSON.stringify(r)}`,{field:"projects",next:'Every project is an object like {"path": "/abs/dir", "memory": "content"}.'});const{path:n,memory:i}=r;if(typeof n!="string"||n.trim()==="")throw c(`project entry has no path: ${JSON.stringify(r)}`,{field:"projects",next:"Give every project entry a non-empty directory path."});if(typeof i!="string"||!O.includes(i))throw c(`invalid project memory value: ${JSON.stringify(i)}`,{received:String(i),field:"projects",next:`Set memory on ${n} to one of: ${t}.`})}}o(F,"assertProfileProjects");function Ee(e){if(e===null||e==="")return null;try{const t=H(e).manifest.home;return t!==null&&v(t)&&A(t).isDirectory()?t:null}catch{return null}}o(Ee,"profileHome");function le(){return{entries:ne(u()).map(({profileId:e,manifest:t})=>({profileId:e,manifest:b(e,t)})),unreadableIds:[]}}o(le,"enumerateProfiles");function k(){return le().entries}o(k,"listProfiles");function ue(e){const t=k(),r=T(t,e);return r?{kind:"resolved",entry:r}:{kind:"absent"}}o(ue,"lookupProfile");function J(e){_(e);const t=S(u(),e);if(t!==null)return{profileId:e,manifest:b(e,t.manifest)};throw y(`profile not found: ${e}`,{received:e,next:"Run `crtr profile list` to see available profiles."})}o(J,"loadExactProfileManifest");function T(e,t){if(z.test(t)){const n=e.find(i=>i.profileId===t);if(n!==void 0)return n}const r=e.filter(n=>n.manifest.name===t);if(r.length===1)return r[0];if(r.length>1){const n=r.map(i=>i.profileId);throw L(`profile name "${t}" matches ${n.length} profiles: ${n.join(", ")}`,{received:t,candidates:n,next:`Re-run with one exact profile id: ${n.join(", ")}.`})}return null}o(T,"findExactProfile");function U(e,t){const r=e.map(n=>`${n.profileId} (${n.manifest.name})`);return y(`profile not found: ${t}`,{received:t,available:r,next:r.length>0?`Re-run with one of the profiles on this host: ${r.join(", ")} \u2014 or create one with \`crtr profile new --name <name>\`.`:"No profiles exist on this host yet \u2014 create one with `crtr profile new --name <name>`."})}o(U,"profileNotFound");function H(e){const t=ue(e);if(t.kind==="resolved")return t.entry;throw U(k(),e)}o(H,"loadProfileManifest");function Ae(e){const t=k(),r=T(t,e);if(r!==null)return r;const{match:n,tied:i}=ae(e,t.map(a=>({profileId:a.profileId,name:a.manifest.name})));if(n!==null){const a=t.find(s=>s.profileId===n.profileId);return console.error(`crtr: no profile named "${e}" \u2014 using the closest match: ${a.manifest.name} (${a.profileId})`),a}if(i.length>1){const a=i.map(s=>`${s.profileId} (${s.name})`);throw L(`"${e}" is equally close to ${i.length} profiles: ${a.join(", ")}`,{received:e,candidates:i.map(s=>s.profileId),next:`Re-run with one exact profile id or name: ${a.join(", ")}.`})}throw U(t,e)}o(Ae,"resolveProfileOperand");function K(){return m(w(),".locks")}o(K,"locksDir");function R(e,t){return _(e),g(K()),ie(m(K(),`${e}.lock`),t,{timeoutError:o(()=>N(`timed out waiting for the profile lock: ${e}`,{next:"Retry \u2014 another `crtr profile` command may be running concurrently on this profile."}),"timeoutError")})}o(R,"withProfileManifestLock");function q(e){const t=P(e);if(!v(t)||!A(t).isDirectory())throw c(`project directory does not exist or is not a directory: ${e}`,{received:e,next:"Pass an existing directory path."});try{return j(t)}catch{return t}}o(q,"resolveExistingProjectDir");function Z(e){const t=new Set,r=[];for(const n of e)t.has(n.path)||(t.add(n.path),r.push(n));return r}o(Z,"dedupeProjects");function me(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return t.length>40&&(t=t.slice(0,40).replace(/-+$/g,"")),t.length>0?t:"profile"}o(me,"slugify");function de(e){const t=me(e),r=w();for(let n=0;n<20;n++){const i=Q().replace(/-/g,"").slice(0,8),a=`${t}-${i}`;if(!v(m(r,a)))return a}throw N(`failed to generate a unique profile id for "${e}" after 20 attempts`)}o(de,"generateProfileId");function Me(){return R(f,()=>{const e=S(u(),f);if(e!==null)return g(p(f)),g(fe(f)),{profileId:f,manifest:b(f,e.manifest)};const t={schema_version:M,name:se,projects:[],home:null,paused_at:null,created_at:$(),last_used_at:$()};return C(f,t),D(u(),{profileId:f,manifest:t},p(f)),h(),{profileId:f,manifest:t}})}o(Me,"ensureRootProfile");const V=/^[A-Za-z0-9][A-Za-z0-9_-]*$/;function Y(e){return`CRTR_PROFILE_META_${e.toUpperCase().replace(/[^A-Z0-9]+/g,"_")}`}o(Y,"metadataEnvName");function E(e){if(typeof e!="object"||e===null||Array.isArray(e))throw c("metadata must be a map of string keys to string values",{field:"metadata",next:'Pass an object, e.g. {"role": "support"}.'});const t=new Map;for(const[r,n]of Object.entries(e)){if(!V.test(r))throw c(`invalid metadata key: ${JSON.stringify(r)}`,{received:r,field:"metadata",next:"Keys start with a letter or digit, followed by letters, digits, `_`, or `-`."});if(typeof n!="string")throw c(`metadata value for ${r} must be a string`,{received:typeof n,field:"metadata",next:"Every metadata value is an env-var value \u2014 pass strings only."});if(n.includes("\0"))throw c(`metadata value for ${r} contains a NUL byte, which no OS accepts in an environment variable`,{field:"metadata",next:"Remove NUL bytes from the value and retry."});const i=Y(r),a=t.get(i);if(a!==void 0)throw c(`metadata keys ${JSON.stringify(a)} and ${JSON.stringify(r)} both surface as ${i}`,{field:"metadata",next:"Rename or drop one \u2014 keys must stay distinct after uppercasing and `_`-folding."});t.set(i,r)}}o(E,"assertProfileMetadata");function G(e){if(typeof e!="object"||e===null||Array.isArray(e))return{};const t={},r=new Set;for(const[n,i]of Object.entries(e)){if(typeof i!="string"||!V.test(n)||i.includes("\0"))continue;const a=Y(n);r.has(a)||(r.add(a),t[n]=i)}return t}o(G,"sanitizeProfileMetadata");function Oe(e,t=[],r={}){const n=e.trim();if(n==="")throw c("profile name must not be empty");r.metadata!==void 0&&E(r.metadata),F(t);const i=Z(t.map(s=>({path:q(s.path),memory:s.memory}))),a=de(n);return R(a,()=>{const s={schema_version:M,name:n,projects:i,home:i[0]?.path??null,paused_at:null,...r.defaultKind!==void 0?{default_kind:r.defaultKind}:{},...r.metadata!==void 0&&Object.keys(r.metadata).length>0?{metadata:{...r.metadata}}:{},created_at:$(),last_used_at:null};return C(a,s),D(u(),{profileId:a,manifest:s},p(a)),h(),{profileId:a,manifest:s}})}o(Oe,"createProfile");function W(e){if(_(e),S(u(),e)===null)throw y(`profile not found: ${e}`,{received:e,next:"Run `crtr profile list` to see available profiles."})}o(W,"requireExistingProfile");function d(e,t){return W(e),R(e,()=>{const r=oe(u(),e,t);if(r===null)throw y(`profile not found: ${e}`,{received:e});return{profileId:e,manifest:b(e,r.manifest)}})}o(d,"mutateManifest");function De(e){return d(e,t=>({...t,last_used_at:$()}))}o(De,"updateProfileLastUsed");function pe(e){if(e==null||e==="")return null;try{return H(e)}catch{return null}}o(pe,"loadProfileManifestOrNull");function Le(e){if(e==null||e==="")return!1;try{return J(e).manifest.paused_at!==null}catch{return!1}}o(Le,"isProfilePaused");function he(e){if(e.manifest.paused_at!==null)throw c(`profile "${e.manifest.name}" is paused and cannot start nodes`,{received:e.profileId,next:`Resume it with \`crtr profile resume ${e.profileId}\`.`})}o(he,"assertProfileEntryActive");function Ne(e){const t=pe(e);return t===null?null:(he(t),t)}o(Ne,"assertProfileActive");function ze(e){return d(e,t=>({...t,paused_at:t.paused_at??$()}))}o(ze,"pauseProfile");function Ce(e){let t=null;return{...d(e,n=>(t=n.paused_at,{...n,paused_at:null})),pausedAt:t}}o(Ce,"resumeProfile");function Fe(e,t){return d(e,r=>({...r,default_kind:t}))}o(Fe,"setProfileDefaultKind");function Je(e,t,r=[]){return E(t),d(e,n=>{const i={...G(n.metadata),...t};for(const x of r)delete i[x];E(i);const{metadata:a,...s}=n;return{...s,...Object.keys(i).length>0?{metadata:i}:{}}})}o(Je,"updateProfileMetadata");function Te(e){if(e===null||e==="")return{};try{return G(J(e).manifest.metadata)}catch{return{}}}o(Te,"readProfileMetadata");function Ue(e,t){const r=t.trim();if(r==="")throw c("profile name must not be empty");const n=d(e,i=>({...i,name:r}));return h(),n}o(Ue,"renameProfile");function He(e,t,r){F([{path:t,memory:r.memory}]);const n=q(t),i=d(e,a=>{const x=a.projects.some(l=>l.path===n)?a.projects.map(l=>l.path===n?{...l,memory:r.memory}:l):Z([...a.projects,{path:n,memory:r.memory}]);return{...a,projects:x,...r.home===!0?{home:n}:{}}});return h(),i}o(He,"addProfileProject");function Ke(e,t){const r=P(t);let n=r;try{n=j(r)}catch{}const i=d(e,a=>{const s=a.projects.filter(l=>l.path!==n&&l.path!==r),x=a.home===n||a.home===r?s[0]?.path??null:a.home;if(s.length===a.projects.length)throw y(`project not found on profile: ${t}`,{received:t,next:`Current projects: ${a.projects.length>0?a.projects.map(l=>l.path).join(", "):"(none)"}.`});return{...a,projects:s,home:x}});return h(),i}o(Ke,"removeProfileProject");function qe(e){W(e),R(e,()=>{if(!re(u(),e))throw y(`profile not found: ${e}`,{received:e});X(p(e),{recursive:!0,force:!0})}),h()}o(qe,"deleteProfile");export{f as ROOT_PROFILE_ID,He as addProfileProject,Ne as assertProfileActive,he as assertProfileEntryActive,E as assertProfileMetadata,F as assertProfileProjects,Oe as createProfile,qe as deleteProfile,Me as ensureRootProfile,Le as isProfilePaused,k as listProfiles,J as loadExactProfileManifest,H as loadProfileManifest,ue as lookupProfile,Y as metadataEnvName,ze as pauseProfile,Ee as profileHome,ke as profileManifestPath,fe as profileMemoryDir,p as profileRoot,w as profilesRoot,Te as readProfileMetadata,Ke as removeProfileProject,Ue as renameProfile,Ae as resolveProfileOperand,Ce as resumeProfile,G as sanitizeProfileMetadata,Fe as setProfileDefaultKind,De as updateProfileLastUsed,Je as updateProfileMetadata,R as withProfileManifestLock};
|