@north-light/crouter 0.3.170 → 0.3.172
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/dist/api/client.d.ts +37 -11
- package/dist/api/client.js +84 -15
- package/dist/api/dto/human.d.ts +53 -39
- package/dist/api/dto/human.js +2 -3
- package/dist/api/dto/inbox.d.ts +0 -1
- package/dist/api/dto/nodes.d.ts +12 -0
- package/dist/api/dto/review-comments.d.ts +137 -0
- package/dist/api/dto/review-comments.js +5 -0
- package/dist/api/dto/reviews.d.ts +109 -0
- package/dist/api/dto/reviews.js +5 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.js +2 -0
- package/dist/api/routes.d.ts +17 -4
- package/dist/api/routes.js +21 -5
- package/dist/build-root.d.ts +1 -16
- package/dist/build-root.js +1 -25
- package/dist/builtin-memory/00-runtime-base.md +7 -5
- package/dist/builtin-memory/04-base-worker.md +1 -1
- package/dist/builtin-memory/04-orchestration-kernel.md +7 -7
- package/dist/builtin-memory/05-kinds/design/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/design/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/developer/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/explore/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/plan/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/plan/01-orchestrator.md +1 -1
- package/dist/builtin-memory/05-kinds/review/00-base.md +1 -1
- package/dist/builtin-memory/05-kinds/review/companion/00-base.md +20 -0
- package/dist/builtin-memory/05-kinds/spec/00-base.md +3 -7
- package/dist/builtin-memory/05-kinds/spec/01-orchestrator.md +3 -3
- package/dist/builtin-memory/05-kinds/spec/requirements.md +3 -3
- package/dist/builtin-memory/design.md +2 -2
- package/dist/builtin-memory/insights/capture.md +50 -0
- package/dist/builtin-memory/insights/init.md +45 -0
- package/dist/builtin-memory/insights/listen.md +9 -0
- package/dist/builtin-memory/internal/agent-shaping.md +2 -2
- package/dist/builtin-memory/internal/nodes-and-canvas.md +1 -1
- package/dist/builtin-memory/internal/plugins.md +12 -11
- package/dist/builtin-memory/internal/storage-tiers.md +2 -2
- package/dist/builtin-memory/{planning.md → plan/roadmap.md} +3 -3
- package/dist/builtin-memory/plan.md +19 -0
- package/dist/builtin-memory/spec/guide.md +38 -0
- package/dist/builtin-memory/spec/requirements.md +31 -0
- package/dist/builtin-memory/spec/roadmap.md +35 -0
- package/dist/builtin-memory/spec.md +10 -86
- package/dist/builtin-pi-packages/pi-crtr-extensions/README.md +3 -4
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/__tests__/provider-rotation.test.ts +49 -5
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.d.ts +56 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.js +920 -0
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/provider-rotation.ts +221 -156
- package/dist/builtin-pi-packages/pi-crtr-extensions/extensions/statusline.ts +4 -5
- package/dist/cli.js +2 -6
- package/dist/clients/attach/__tests__/attach-chrome-remote.test.js +7 -35
- package/dist/clients/attach/__tests__/attach-keybindings.test.js +32 -16
- package/dist/clients/attach/__tests__/context-message.test.js +142 -6
- package/dist/clients/attach/__tests__/crtr-output.test.js +29 -45
- package/dist/clients/attach/__tests__/diagram.test.js +1 -1
- package/dist/clients/attach/__tests__/file-review-focus.test.js +48 -0
- package/dist/clients/attach/__tests__/group-activity.test.js +266 -0
- package/dist/clients/attach/__tests__/input-controller-extension-command.test.js +32 -0
- package/dist/clients/attach/__tests__/session-identity-refresh.test.js +32 -0
- package/dist/clients/attach/__tests__/titled-editor-preview.test.js +1 -2
- package/dist/clients/attach/chrome/header.d.ts +10 -0
- package/dist/clients/attach/chrome/header.js +30 -0
- package/dist/clients/attach/chrome/recap.d.ts +7 -0
- package/dist/clients/attach/chrome/recap.js +19 -0
- package/dist/clients/attach/chrome/status-line.d.ts +3 -0
- package/dist/clients/attach/chrome/status-line.js +5 -0
- package/dist/clients/attach/chrome/widgets.js +11 -21
- package/dist/clients/attach/command.js +11 -7
- package/dist/clients/attach/config.d.ts +4 -0
- package/dist/clients/attach/config.js +3 -0
- package/dist/clients/attach/input/controller.d.ts +19 -0
- package/dist/clients/attach/input/controller.js +62 -28
- package/dist/clients/attach/input/titled-editor.d.ts +0 -4
- package/dist/clients/attach/input/titled-editor.js +2 -10
- package/dist/clients/attach/overlays/file-review.d.ts +9 -5
- package/dist/clients/attach/overlays/file-review.js +9 -70
- package/dist/clients/attach/overlays/help.d.ts +33 -0
- package/dist/clients/attach/overlays/help.js +204 -0
- package/dist/clients/attach/render/activity-slot.d.ts +4 -0
- package/dist/clients/attach/render/activity-slot.js +13 -0
- package/dist/clients/attach/render/chat-view.d.ts +117 -12
- package/dist/clients/attach/render/chat-view.js +604 -135
- package/dist/clients/attach/render/context-message.d.ts +2 -1
- package/dist/clients/attach/render/context-message.js +17 -13
- package/dist/clients/attach/render/crtr-output.js +1 -3
- package/dist/clients/attach/render/diagram.js +2 -2
- package/dist/clients/attach/render/edit-diff.d.ts +4 -1
- package/dist/clients/attach/render/edit-diff.js +7 -11
- package/dist/clients/attach/render/group-activity.d.ts +32 -0
- package/dist/clients/attach/render/group-activity.js +206 -0
- package/dist/clients/attach/render/group-recap.d.ts +10 -0
- package/dist/clients/attach/render/group-recap.js +93 -0
- package/dist/clients/attach/render/html-markdown.d.ts +17 -0
- package/dist/clients/attach/render/html-markdown.js +228 -0
- package/dist/clients/attach/render/measured-container.d.ts +96 -0
- package/dist/clients/attach/render/measured-container.js +322 -0
- package/dist/clients/attach/render/scroll-animation.d.ts +8 -0
- package/dist/clients/attach/render/scroll-animation.js +80 -0
- package/dist/clients/attach/render/tool-calls.js +6 -6
- package/dist/clients/attach/render/transcript-copy.d.ts +9 -0
- package/dist/clients/attach/render/transcript-copy.js +81 -0
- package/dist/clients/attach/render/viewport.d.ts +29 -0
- package/dist/clients/attach/render/viewport.js +159 -0
- package/dist/clients/attach/session/bindings.d.ts +10 -7
- package/dist/clients/attach/session/bindings.js +23 -8
- package/dist/clients/attach/session/connection.js +4 -5
- package/dist/clients/attach/session/context.d.ts +6 -4
- package/dist/clients/attach/session/frame.d.ts +34 -0
- package/dist/clients/attach/session/frame.js +176 -0
- package/dist/clients/attach/session/frames.d.ts +4 -1
- package/dist/clients/attach/session/frames.js +14 -1
- package/dist/clients/attach/session/identity.js +4 -3
- package/dist/clients/attach/session/input-wiring.d.ts +14 -4
- package/dist/clients/attach/session/input-wiring.js +15 -13
- package/dist/clients/attach/session/invariant.d.ts +9 -0
- package/dist/clients/attach/session/invariant.js +15 -0
- package/dist/clients/attach/session/keys.d.ts +10 -2
- package/dist/clients/attach/session/keys.js +13 -5
- package/dist/clients/attach/session/layout.d.ts +10 -8
- package/dist/clients/attach/session/layout.js +33 -34
- package/dist/clients/attach/session/mouse.d.ts +18 -0
- package/dist/clients/attach/session/mouse.js +64 -0
- package/dist/clients/attach/session/pane-tag.d.ts +3 -0
- package/dist/clients/attach/session/pane-tag.js +51 -8
- package/dist/clients/attach/session/reconnect.d.ts +3 -0
- package/dist/clients/attach/session/reconnect.js +42 -5
- package/dist/clients/attach/session/surface-frame.d.ts +20 -0
- package/dist/clients/attach/session/surface-frame.js +73 -0
- package/dist/clients/attach/session/surface-host.d.ts +64 -0
- package/dist/clients/attach/session/surface-host.js +255 -0
- package/dist/clients/attach/session/whip.d.ts +17 -0
- package/dist/clients/attach/session/whip.js +334 -0
- package/dist/clients/attach/slash/dispatch.d.ts +13 -1
- package/dist/clients/attach/slash/dispatch.js +51 -29
- package/dist/clients/attach/viewer.js +907 -819
- package/dist/clients/conversation/conversation.d.ts +65 -0
- package/dist/clients/conversation/conversation.js +318 -0
- package/dist/clients/conversation/frames.d.ts +30 -0
- package/dist/clients/conversation/frames.js +52 -0
- package/dist/clients/conversation/region.d.ts +51 -0
- package/dist/clients/conversation/region.js +265 -0
- package/dist/clients/conversation/submit.d.ts +38 -0
- package/dist/clients/conversation/submit.js +51 -0
- package/dist/clients/inbox/__tests__/inbox-controller.test.js +247 -0
- package/dist/clients/inbox/__tests__/mount-panel.test.js +776 -0
- package/dist/clients/inbox/controller.d.ts +79 -0
- package/dist/clients/inbox/controller.js +448 -0
- package/dist/clients/inbox/deck-adapter.d.ts +29 -0
- package/dist/clients/inbox/deck-adapter.js +62 -0
- package/dist/clients/inbox/layout.d.ts +8 -0
- package/dist/clients/inbox/layout.js +9 -0
- package/dist/clients/inbox/resolve.d.ts +10 -0
- package/dist/clients/inbox/resolve.js +34 -0
- package/dist/clients/inbox/review/__tests__/editor-roundtrip.test.js +29 -0
- package/dist/clients/inbox/review/__tests__/remap.test.js +196 -0
- package/dist/clients/inbox/review/__tests__/review-core.test.js +341 -0
- package/dist/clients/inbox/review/anchors.d.ts +41 -0
- package/dist/clients/inbox/review/anchors.js +89 -0
- package/dist/clients/inbox/review/columns.d.ts +22 -0
- package/dist/clients/inbox/review/columns.js +40 -0
- package/dist/clients/inbox/review/comments-client.d.ts +66 -0
- package/dist/clients/inbox/review/comments-client.js +98 -0
- package/dist/clients/inbox/review/composition.d.ts +60 -0
- package/dist/clients/inbox/review/composition.js +278 -0
- package/dist/clients/inbox/review/document-region.d.ts +120 -0
- package/dist/clients/inbox/review/document-region.js +902 -0
- package/dist/clients/inbox/review/frame.d.ts +45 -0
- package/dist/clients/inbox/review/frame.js +215 -0
- package/dist/clients/inbox/review/keys.d.ts +67 -0
- package/dist/clients/inbox/review/keys.js +130 -0
- package/dist/clients/inbox/review/launch.d.ts +10 -0
- package/dist/clients/inbox/review/launch.js +129 -0
- package/dist/clients/inbox/review/live-source.d.ts +24 -0
- package/dist/clients/inbox/review/live-source.js +160 -0
- package/dist/clients/inbox/review/nvim.d.ts +13 -0
- package/dist/clients/inbox/review/nvim.js +42 -0
- package/dist/clients/inbox/review/remap.d.ts +51 -0
- package/dist/clients/inbox/review/remap.js +157 -0
- package/dist/clients/inbox/review/review-client.d.ts +30 -0
- package/dist/clients/inbox/review/review-client.js +107 -0
- package/dist/clients/inbox/review/roundtrip.d.ts +5 -0
- package/dist/clients/inbox/review/roundtrip.js +36 -0
- package/dist/clients/inbox/review/state.d.ts +143 -0
- package/dist/clients/inbox/review/state.js +282 -0
- package/dist/clients/inbox/review-adapter.d.ts +29 -0
- package/dist/clients/inbox/review-adapter.js +92 -0
- package/dist/clients/inbox/review-visibility.d.ts +5 -0
- package/dist/clients/inbox/review-visibility.js +19 -0
- package/dist/clients/inbox/surface.d.ts +19 -0
- package/dist/clients/inbox/surface.js +128 -0
- package/dist/clients/inbox/tui/ansi.d.ts +66 -0
- package/dist/clients/inbox/tui/ansi.js +317 -0
- package/dist/clients/inbox/tui/clipboard.d.ts +2 -0
- package/dist/clients/inbox/tui/clipboard.js +26 -0
- package/dist/clients/inbox/tui/input.d.ts +7 -0
- package/dist/clients/inbox/tui/input.js +653 -0
- package/dist/clients/inbox/tui/keys.d.ts +28 -0
- package/dist/clients/inbox/tui/keys.js +111 -0
- package/dist/clients/inbox/tui/panel.d.ts +2 -0
- package/dist/clients/inbox/tui/panel.js +217 -0
- package/dist/clients/inbox/tui/render.d.ts +37 -0
- package/dist/clients/inbox/tui/render.js +476 -0
- package/dist/clients/inbox/tui/types.d.ts +57 -0
- package/dist/clients/inbox/tui/types.js +1 -0
- package/dist/clients/inbox/tui.d.ts +6 -0
- package/dist/clients/inbox/tui.js +74 -0
- package/dist/clients/surfaces/host.d.ts +66 -0
- package/dist/clients/surfaces/host.js +1 -0
- package/dist/clients/surfaces/region.d.ts +16 -0
- package/dist/clients/surfaces/region.js +1 -0
- package/dist/clients/web/__tests__/push-engine.test.js +14 -158
- package/dist/clients/web/dev-server.d.ts +3 -3
- package/dist/clients/web/dev-server.js +9 -23
- package/dist/clients/web/events.js +4 -6
- package/dist/clients/web/push-engine.d.ts +2 -66
- package/dist/clients/web/push-engine.js +30 -161
- package/dist/clients/web/push-registry.d.ts +0 -4
- package/dist/clients/web/push-registry.js +2 -7
- package/dist/clients/web/server.js +3 -35
- package/dist/clients/web/web-client/shared/protocol.d.ts +0 -108
- package/dist/clients/web/web-cmd.js +2 -2
- package/dist/commands/__tests__/human.test.js +27 -15
- package/dist/commands/api-client.js +3 -3
- package/dist/commands/canvas-browse.js +1 -1
- package/dist/commands/canvas-issue.js +1 -1
- package/dist/commands/canvas-use.js +1 -1
- package/dist/commands/human/doc.d.ts +2 -0
- package/dist/commands/human/doc.js +98 -0
- package/dist/commands/human/inbox.d.ts +2 -0
- package/dist/commands/human/inbox.js +101 -0
- package/dist/commands/human/prompts.d.ts +2 -3
- package/dist/commands/human/prompts.js +27 -180
- package/dist/commands/human/queue.d.ts +1 -5
- package/dist/commands/human/queue.js +54 -216
- package/dist/commands/human/review.d.ts +2 -0
- package/dist/commands/human/review.js +298 -0
- package/dist/commands/human/shared.d.ts +2 -69
- package/dist/commands/human/shared.js +1 -181
- package/dist/commands/human.js +15 -20
- package/dist/commands/memory/__tests__/lint.test.d.ts +1 -0
- package/dist/commands/memory/__tests__/lint.test.js +15 -0
- package/dist/commands/memory/delete.js +2 -2
- package/dist/commands/memory/lint.d.ts +1 -0
- package/dist/commands/memory/lint.js +21 -3
- package/dist/commands/memory/read.js +4 -4
- package/dist/commands/node.js +8 -7
- package/dist/commands/pkg/plugin-manage.js +143 -68
- package/dist/commands/surface-inspect.js +2 -2
- package/dist/commands/surface.js +6 -12
- package/dist/commands/sys/__tests__/setup-core.test.js +9 -5
- package/dist/commands/sys/__tests__/setup-front-door.test.js +7 -42
- package/dist/commands/sys/config.js +29 -3
- package/dist/commands/sys/feedback.js +1 -1
- package/dist/commands/sys/setup-core.d.ts +12 -11
- package/dist/commands/sys/setup-core.js +55 -46
- package/dist/commands/sys/setup-wizard.d.ts +4 -1
- package/dist/commands/sys/setup-wizard.js +50 -9
- package/dist/commands/sys/sync-deps.js +1 -1
- package/dist/commands/sys.js +4 -6
- package/dist/core/__tests__/broker-sdk-wiring.test.js +6 -1
- package/dist/core/__tests__/broker-snapshot-history.test.js +9 -1
- package/dist/core/__tests__/dead-node-policy-table.test.js +3 -4
- package/dist/core/__tests__/fixtures/fake-engine.d.ts +8 -5
- package/dist/core/__tests__/fixtures/fake-engine.js +28 -2
- package/dist/core/__tests__/full/broker-provider-retry.test.js +87 -2
- package/dist/core/__tests__/full/broker-whip-interrupt.test.d.ts +1 -0
- package/dist/core/__tests__/full/broker-whip-interrupt.test.js +39 -0
- package/dist/core/__tests__/full/detach-focus.test.js +1 -1
- package/dist/core/__tests__/human-deliver-e2e.test.js +64 -64
- package/dist/core/__tests__/human-deliver.test.js +71 -345
- package/dist/core/__tests__/inline-memory-refs.test.js +2 -12
- package/dist/core/__tests__/memory-resolver-precedence.test.js +12 -15
- package/dist/core/__tests__/migration.test.js +10 -0
- package/dist/core/__tests__/model-pin-durability.test.js +14 -0
- package/dist/core/__tests__/phase4-review-migration.test.d.ts +1 -0
- package/dist/core/__tests__/phase4-review-migration.test.js +100 -0
- package/dist/core/__tests__/phase4-review-store.test.d.ts +1 -0
- package/dist/core/__tests__/phase4-review-store.test.js +143 -0
- package/dist/core/__tests__/remote-canvas-target.test.js +2 -2
- package/dist/core/__tests__/revive.test.js +22 -53
- package/dist/core/__tests__/session-cycles.test.js +48 -18
- package/dist/core/__tests__/spawn-no-kickoff.test.js +8 -12
- package/dist/core/__tests__/stop-guard.test.js +16 -1
- package/dist/core/__tests__/tmux-surface.test.js +21 -25
- package/dist/core/asset-root.d.ts +7 -0
- package/dist/core/asset-root.js +18 -0
- package/dist/core/broker-client/client.d.ts +0 -7
- package/dist/core/broker-client/client.js +4 -10
- package/dist/core/broker-client/transport-relay.d.ts +3 -4
- package/dist/core/broker-client/transport-relay.js +3 -4
- package/dist/core/canvas/__tests__/attention.test.js +1 -1
- package/dist/core/canvas/__tests__/remote-canvas-source.test.js +1 -1
- package/dist/core/canvas/__tests__/remote-transport.test.d.ts +1 -0
- package/dist/core/{view/__tests__/transport-remote.test.js → canvas/__tests__/remote-transport.test.js} +2 -2
- package/dist/core/canvas/__tests__/render-remote.test.js +1 -1
- package/dist/core/canvas/attention.js +4 -4
- package/dist/core/canvas/canvas.d.ts +6 -11
- package/dist/core/canvas/canvas.js +11 -33
- package/dist/core/canvas/db.js +207 -38
- package/dist/core/canvas/extensions.d.ts +1 -1
- package/dist/core/canvas/extensions.js +8 -1
- package/dist/core/canvas/index.d.ts +0 -1
- package/dist/core/canvas/index.js +0 -1
- package/dist/core/canvas/nav-model.d.ts +1 -1
- package/dist/core/canvas/nav-model.js +1 -1
- package/dist/core/canvas/paths.d.ts +5 -0
- package/dist/core/canvas/paths.js +16 -0
- package/dist/core/canvas/remote-canvas-source.js +2 -2
- package/dist/core/canvas/remote-transport.d.ts +7 -0
- package/dist/core/{view/transport-remote.js → canvas/remote-transport.js} +3 -4
- package/dist/core/canvas/source.js +1 -1
- package/dist/core/canvas/status-glyph.js +4 -12
- package/dist/core/canvas/types.d.ts +10 -35
- package/dist/core/clipboard-text.d.ts +8 -0
- package/dist/core/clipboard-text.js +18 -0
- package/dist/core/command-manifests/registry.d.ts +1 -3
- package/dist/core/command-plugins/bundle.d.ts +29 -0
- package/dist/core/command-plugins/bundle.js +198 -0
- package/dist/core/command-plugins/discovery.d.ts +0 -8
- package/dist/core/command-plugins/discovery.js +2 -39
- package/dist/core/command-plugins/transport/http-fetch.d.ts +4 -30
- package/dist/core/command-plugins/transport/http-fetch.js +17 -95
- package/dist/core/command.d.ts +1 -13
- package/dist/core/command.js +1 -16
- package/dist/core/config.d.ts +4 -0
- package/dist/core/config.js +28 -3
- package/dist/core/document-lines.d.ts +4 -0
- package/dist/core/document-lines.js +6 -0
- package/dist/core/feed/feed.d.ts +2 -0
- package/dist/core/feed/feed.js +11 -7
- package/dist/core/human/__tests__/inbox-cancel-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-cancel-worker.js +7 -0
- package/dist/core/human/__tests__/inbox-claim-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-claim-worker.js +17 -0
- package/dist/core/human/__tests__/inbox-core.test.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-core.test.js +144 -0
- package/dist/core/human/__tests__/inbox-stale-claim-worker.d.ts +1 -0
- package/dist/core/human/__tests__/inbox-stale-claim-worker.js +8 -0
- package/dist/core/human/__tests__/visible-paths.test.d.ts +1 -0
- package/dist/{clients/attach → core/human}/__tests__/visible-paths.test.js +9 -0
- package/dist/core/human/claim.d.ts +23 -0
- package/dist/core/human/claim.js +67 -0
- package/dist/core/human/convention.d.ts +30 -0
- package/dist/core/human/convention.js +202 -0
- package/dist/core/human/deck-factories.d.ts +8 -0
- package/dist/core/human/deck-factories.js +15 -0
- package/dist/core/human/deck-schema.d.ts +70 -0
- package/dist/core/human/deck-schema.js +92 -0
- package/dist/core/human/root.d.ts +7 -0
- package/dist/core/human/root.js +37 -0
- package/dist/core/human/scan.d.ts +3 -0
- package/dist/core/human/scan.js +76 -0
- package/dist/core/human/summary.d.ts +8 -0
- package/dist/core/human/summary.js +44 -0
- package/dist/core/human/tickets.d.ts +49 -0
- package/dist/core/human/tickets.js +190 -0
- package/dist/core/human/types.d.ts +136 -0
- package/dist/core/human/types.js +5 -0
- package/dist/{clients/attach → core/human}/visible-paths.d.ts +1 -1
- package/dist/{clients/attach → core/human}/visible-paths.js +3 -2
- package/dist/core/inspector/chrome.d.ts +6 -0
- package/dist/core/inspector/chrome.js +14 -0
- package/dist/core/inspector/contract.d.ts +105 -0
- package/dist/core/inspector/contract.js +1 -0
- package/dist/core/inspector/core.d.ts +4 -5
- package/dist/core/inspector/core.js +3 -5
- package/dist/core/inspector/host.d.ts +46 -0
- package/dist/core/{tui → inspector}/host.js +42 -208
- package/dist/core/inspector/text.d.ts +2 -2
- package/dist/core/inspector/transport.d.ts +6 -0
- package/dist/core/inspector/transport.js +36 -0
- package/dist/core/inspector/tui.d.ts +2 -2
- package/dist/core/inspector/tui.js +15 -15
- package/dist/core/keybindings/__tests__/inbox-affordance.test.js +11 -11
- package/dist/core/keybindings/__tests__/resolve.test.js +10 -19
- package/dist/core/keybindings/attach-control.d.ts +9 -3
- package/dist/core/keybindings/attach-control.js +3 -1
- package/dist/core/keybindings/catalog.d.ts +6 -5
- package/dist/core/keybindings/catalog.js +61 -133
- package/dist/core/keybindings/inbox.d.ts +5 -6
- package/dist/core/keybindings/inbox.js +9 -10
- package/dist/core/keybindings/index.d.ts +3 -3
- package/dist/core/keybindings/index.js +3 -3
- package/dist/core/keybindings/persistence.d.ts +5 -1
- package/dist/core/keybindings/persistence.js +24 -6
- package/dist/core/keybindings/resolve.d.ts +6 -0
- package/dist/core/keybindings/resolve.js +10 -3
- package/dist/core/memory/inline-ref-grammar.js +2 -3
- package/dist/core/memory-resolver.d.ts +27 -29
- package/dist/core/memory-resolver.js +45 -39
- package/dist/core/model-routes.d.ts +33 -0
- package/dist/core/model-routes.js +42 -3
- package/dist/core/preview-registry.js +17 -55
- package/dist/core/profiles/select.js +3 -3
- package/dist/core/{view/remote-canvas-target.d.ts → remote-canvas-target.d.ts} +2 -2
- package/dist/core/{view/remote-canvas-target.js → remote-canvas-target.js} +4 -4
- package/dist/core/review/__tests__/capture-origin.test.d.ts +1 -0
- package/dist/core/review/__tests__/capture-origin.test.js +139 -0
- package/dist/core/review/__tests__/comments.test.d.ts +1 -0
- package/dist/core/review/__tests__/comments.test.js +98 -0
- package/dist/core/review/__tests__/project.test.d.ts +1 -0
- package/dist/core/review/__tests__/project.test.js +71 -0
- package/dist/core/review/__tests__/remap.test.d.ts +1 -0
- package/dist/core/review/__tests__/remap.test.js +159 -0
- package/dist/core/review/__tests__/stage-identity.test.d.ts +1 -0
- package/dist/core/review/__tests__/stage-identity.test.js +140 -0
- package/dist/core/review/birth.d.ts +7 -0
- package/dist/core/review/birth.js +23 -0
- package/dist/core/review/comments.d.ts +69 -0
- package/dist/core/review/comments.js +295 -0
- package/dist/core/review/companion.d.ts +35 -0
- package/dist/core/review/companion.js +205 -0
- package/dist/core/review/document.d.ts +27 -0
- package/dist/core/review/document.js +138 -0
- package/dist/core/review/project.d.ts +13 -0
- package/dist/core/review/project.js +58 -0
- package/dist/core/review/realize.d.ts +19 -0
- package/dist/core/review/realize.js +217 -0
- package/dist/core/review/remap.d.ts +24 -0
- package/dist/core/review/remap.js +156 -0
- package/dist/core/review/signal.d.ts +5 -0
- package/dist/core/review/signal.js +31 -0
- package/dist/core/review/stage.d.ts +26 -0
- package/dist/core/review/stage.js +184 -0
- package/dist/core/review/store.d.ts +46 -0
- package/dist/core/review/store.js +163 -0
- package/dist/core/review/ticket-filter.d.ts +17 -0
- package/dist/core/review/ticket-filter.js +32 -0
- package/dist/core/review/types.d.ts +130 -0
- package/dist/core/review/types.js +23 -0
- package/dist/core/runtime/__tests__/session-visibility.test.d.ts +1 -0
- package/dist/core/runtime/__tests__/session-visibility.test.js +119 -0
- package/dist/core/runtime/bearings.d.ts +5 -17
- package/dist/core/runtime/bearings.js +88 -71
- package/dist/core/runtime/broker-protocol.d.ts +31 -8
- package/dist/core/runtime/broker.d.ts +15 -1
- package/dist/core/runtime/broker.js +573 -141
- package/dist/core/runtime/canvas-extensions.d.ts +4 -5
- package/dist/core/runtime/canvas-extensions.js +5 -5
- package/dist/core/runtime/front-door.js +4 -4
- package/dist/core/runtime/headless-pi.d.ts +24 -0
- package/dist/core/runtime/headless-pi.js +152 -0
- package/dist/core/runtime/kickoff.d.ts +1 -5
- package/dist/core/runtime/kickoff.js +1 -5
- package/dist/core/runtime/model-registry.d.ts +3 -0
- package/dist/core/runtime/model-registry.js +13 -0
- package/dist/core/runtime/naming-persist.d.ts +4 -0
- package/dist/core/runtime/naming-persist.js +27 -1
- package/dist/core/runtime/naming.d.ts +17 -12
- package/dist/core/runtime/naming.js +91 -140
- package/dist/core/runtime/node-read.js +19 -10
- package/dist/core/runtime/nodes.d.ts +9 -14
- package/dist/core/runtime/nodes.js +3 -53
- package/dist/core/runtime/package-health.d.ts +6 -21
- package/dist/core/runtime/package-health.js +12 -123
- package/dist/core/runtime/placement-tmux.d.ts +2 -1
- package/dist/core/runtime/placement-tmux.js +6 -4
- package/dist/core/runtime/placement.d.ts +1 -0
- package/dist/core/runtime/placement.js +4 -8
- package/dist/core/runtime/promote.js +3 -0
- package/dist/core/runtime/recap.d.ts +2 -7
- package/dist/core/runtime/recap.js +35 -69
- package/dist/core/runtime/revive.js +34 -77
- package/dist/core/runtime/session-cycles.d.ts +4 -0
- package/dist/core/runtime/session-cycles.js +14 -1
- package/dist/core/runtime/session-visibility.d.ts +37 -0
- package/dist/core/runtime/session-visibility.js +83 -0
- package/dist/core/runtime/spawn.js +10 -22
- package/dist/core/runtime/stop-guard.d.ts +1 -1
- package/dist/core/runtime/stop-guard.js +18 -13
- package/dist/core/runtime/surface-bg.js +1 -1
- package/dist/core/runtime/tmux-chrome.d.ts +1 -1
- package/dist/core/runtime/tmux-chrome.js +1 -1
- package/dist/core/runtime/tmux.d.ts +35 -7
- package/dist/core/runtime/tmux.js +439 -62
- package/dist/core/runtime/tool-group-summary.d.ts +19 -0
- package/dist/core/runtime/tool-group-summary.js +88 -0
- package/dist/core/scope.d.ts +2 -7
- package/dist/core/scope.js +9 -35
- package/dist/core/substrate/schema.d.ts +2 -2
- package/dist/core/termrender/code-doc.d.ts +12 -0
- package/dist/core/termrender/code-doc.js +92 -0
- package/dist/core/termrender/display.d.ts +12 -0
- package/dist/core/termrender/display.js +19 -0
- package/dist/core/termrender/termrender.d.ts +73 -0
- package/dist/core/termrender/termrender.js +795 -0
- package/dist/core/termrender/version.d.ts +1 -0
- package/dist/core/termrender/version.js +1 -0
- package/dist/core/tui/terminal.js +1 -2
- package/dist/core/user-settings.d.ts +71 -3
- package/dist/core/user-settings.js +83 -1
- package/dist/daemon/api/__tests__/inbox.test.js +44 -133
- package/dist/daemon/api/handlers/human.d.ts +0 -10
- package/dist/daemon/api/handlers/human.js +104 -702
- package/dist/daemon/api/handlers/inbox.js +113 -142
- package/dist/daemon/api/handlers/review-comments.d.ts +2 -0
- package/dist/daemon/api/handlers/review-comments.js +500 -0
- package/dist/daemon/api/handlers/reviews.d.ts +2 -0
- package/dist/daemon/api/handlers/reviews.js +287 -0
- package/dist/daemon/api/map.d.ts +22 -7
- package/dist/daemon/api/map.js +159 -11
- package/dist/daemon/api/server.js +4 -0
- package/dist/daemon/cron-run.js +6 -9
- package/dist/daemon/crtrd.js +17 -33
- package/dist/daemon/fleet.d.ts +1 -8
- package/dist/daemon/fleet.js +4 -30
- package/dist/daemon/human/finish.d.ts +14 -0
- package/dist/daemon/human/finish.js +115 -0
- package/dist/daemon/human/sweep.d.ts +6 -0
- package/dist/daemon/human/sweep.js +49 -0
- package/dist/daemon/messaging/node-message.d.ts +18 -0
- package/dist/daemon/messaging/node-message.js +70 -0
- package/dist/daemon/review/comment-notify.d.ts +26 -0
- package/dist/daemon/review/comment-notify.js +107 -0
- package/dist/daemon/review/deliver.d.ts +7 -0
- package/dist/daemon/review/deliver.js +56 -0
- package/dist/daemon/review/finish.d.ts +22 -0
- package/dist/daemon/review/finish.js +254 -0
- package/dist/daemon/review/sweep.d.ts +11 -0
- package/dist/daemon/review/sweep.js +120 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -2
- package/dist/pi-extensions/__tests__/canvas-context-intro.test.js +42 -64
- package/dist/pi-extensions/__tests__/canvas-recap.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-recap.test.js +159 -0
- package/dist/pi-extensions/__tests__/canvas-stophook-agentend.test.js +16 -38
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.d.ts +1 -0
- package/dist/pi-extensions/__tests__/canvas-structured-output.test.js +63 -0
- package/dist/pi-extensions/canvas-context-intro.d.ts +8 -11
- package/dist/pi-extensions/canvas-context-intro.js +50 -104
- package/dist/pi-extensions/canvas-recap.d.ts +15 -2
- package/dist/pi-extensions/canvas-recap.js +192 -69
- package/dist/pi-extensions/canvas-review-boundary.d.ts +59 -0
- package/dist/pi-extensions/canvas-review-boundary.js +81 -0
- package/dist/pi-extensions/canvas-stophook.d.ts +3 -3
- package/dist/pi-extensions/canvas-stophook.js +78 -128
- package/dist/pi-extensions/canvas-structured-output.js +52 -8
- package/dist/shared/generated-context.d.ts +29 -4
- package/dist/shared/generated-context.js +122 -7
- package/dist/shared/tool-groups.d.ts +23 -0
- package/dist/shared/tool-groups.js +60 -0
- package/dist/shared/working-activity.d.ts +8 -0
- package/dist/shared/working-activity.js +26 -0
- package/dist/types.d.ts +36 -2
- package/dist/types.js +51 -0
- package/dist/web-client/assets/index-CCPaLeW7.css +2 -0
- package/dist/web-client/assets/index-kyOWsnZK.js +86 -0
- package/dist/web-client/index.html +2 -2
- package/dist/web-client/sw.js +1 -1
- package/docs/compat/hearth-crtr-v4.md +2 -2
- package/docs/compat/hearth-crtr-v5.md +4 -2
- package/docs/public-api.md +3 -3
- package/package.json +21 -14
- package/runtime.lock.json +4661 -1453
- package/scripts/postinstall.mjs +15 -2
- package/dist/builtin-pi-packages/pi-mode-switch/README.md +0 -36
- package/dist/builtin-pi-packages/pi-mode-switch/bin/mode +0 -36
- package/dist/builtin-pi-packages/pi-mode-switch/extensions/index.ts +0 -449
- package/dist/builtin-pi-packages/pi-mode-switch/package.json +0 -14
- package/dist/builtin-pi-packages/pi-mode-switch/tsconfig.json +0 -9
- package/dist/builtin-views/_lib/states.mjs +0 -161
- package/dist/builtin-views/canvas/core.mjs +0 -657
- package/dist/builtin-views/canvas/text.mjs +0 -58
- package/dist/builtin-views/canvas/tui.mjs +0 -168
- package/dist/builtin-views/canvas/web.jsx +0 -121
- package/dist/builtin-views/chat/core.mjs +0 -684
- package/dist/builtin-views/chat/text.mjs +0 -101
- package/dist/builtin-views/chat/tui.mjs +0 -360
- package/dist/builtin-views/chat/web.jsx +0 -362
- package/dist/builtin-views/git-pr/core.mjs +0 -673
- package/dist/builtin-views/git-pr/text.mjs +0 -84
- package/dist/builtin-views/git-pr/tui.mjs +0 -301
- package/dist/builtin-views/git-pr/web.jsx +0 -216
- package/dist/builtin-views/inbox/_lib/render.mjs +0 -175
- package/dist/builtin-views/inbox/core.mjs +0 -1273
- package/dist/builtin-views/inbox/text.mjs +0 -73
- package/dist/builtin-views/inbox/tui.mjs +0 -314
- package/dist/builtin-views/inbox/web.jsx +0 -188
- package/dist/builtin-views/linkedin/core.mjs +0 -906
- package/dist/builtin-views/linkedin/text.mjs +0 -69
- package/dist/builtin-views/linkedin/tui.mjs +0 -413
- package/dist/builtin-views/linkedin/web.jsx +0 -206
- package/dist/builtin-views/prompt-review/core.mjs +0 -735
- package/dist/builtin-views/prompt-review/text.mjs +0 -15
- package/dist/builtin-views/prompt-review/tui.mjs +0 -196
- package/dist/builtin-views/prompt-review/web.jsx +0 -484
- package/dist/builtin-views/workspace-sidebar/__tests__/core.test.js +0 -50
- package/dist/builtin-views/workspace-sidebar/__tests__/core.test.ts +0 -53
- package/dist/builtin-views/workspace-sidebar/core.mjs +0 -670
- package/dist/builtin-views/workspace-sidebar/text.mjs +0 -53
- package/dist/builtin-views/workspace-sidebar/tui.mjs +0 -141
- package/dist/builtin-views/workspace-sidebar/web.jsx +0 -109
- package/dist/clients/attach/session/mode.d.ts +0 -25
- package/dist/clients/attach/session/mode.js +0 -97
- package/dist/commands/sys/promptstudio.d.ts +0 -2
- package/dist/commands/sys/promptstudio.js +0 -65
- package/dist/commands/view-cycle.d.ts +0 -2
- package/dist/commands/view-cycle.js +0 -130
- package/dist/commands/view-list.d.ts +0 -2
- package/dist/commands/view-list.js +0 -66
- package/dist/commands/view-new.d.ts +0 -2
- package/dist/commands/view-new.js +0 -74
- package/dist/commands/view-pick.d.ts +0 -6
- package/dist/commands/view-pick.js +0 -129
- package/dist/commands/view-run.d.ts +0 -2
- package/dist/commands/view-run.js +0 -214
- package/dist/commands/view.d.ts +0 -2
- package/dist/commands/view.js +0 -31
- package/dist/commands/workspace.d.ts +0 -2
- package/dist/commands/workspace.js +0 -165
- package/dist/core/__tests__/chat-view-reconnect.test.js +0 -105
- package/dist/core/__tests__/full/consult-startup-failure.test.js +0 -124
- package/dist/core/canvas/__tests__/human-work-outbox.test.js +0 -123
- package/dist/core/canvas/human-work-outbox.d.ts +0 -73
- package/dist/core/canvas/human-work-outbox.js +0 -261
- package/dist/core/command-plugins/store.d.ts +0 -16
- package/dist/core/command-plugins/store.js +0 -64
- package/dist/core/keybindings/__tests__/bespoke-consumers.test.js +0 -40
- package/dist/core/runtime/fault-recovery-nudge.d.ts +0 -3
- package/dist/core/runtime/fault-recovery-nudge.js +0 -3
- package/dist/core/tui/__tests__/host-keybindings.test.js +0 -113
- package/dist/core/tui/host.d.ts +0 -66
- package/dist/core/view/__tests__/transport-cache.test.js +0 -62
- package/dist/core/view/bridge.d.ts +0 -10
- package/dist/core/view/bridge.js +0 -31
- package/dist/core/view/chrome.d.ts +0 -9
- package/dist/core/view/chrome.js +0 -22
- package/dist/core/view/contract.d.ts +0 -205
- package/dist/core/view/contract.js +0 -23
- package/dist/core/view/loader.d.ts +0 -31
- package/dist/core/view/loader.js +0 -188
- package/dist/core/view/stream-local.d.ts +0 -3
- package/dist/core/view/stream-local.js +0 -231
- package/dist/core/view/transport-cache.d.ts +0 -8
- package/dist/core/view/transport-cache.js +0 -38
- package/dist/core/view/transport-local.d.ts +0 -7
- package/dist/core/view/transport-local.js +0 -83
- package/dist/core/view/transport-remote.d.ts +0 -2
- package/dist/core/view/transport.d.ts +0 -10
- package/dist/core/view/transport.js +0 -15
- package/dist/pi-extensions/naming-tool.d.ts +0 -24
- package/dist/pi-extensions/naming-tool.js +0 -67
- package/dist/prompts/view.d.ts +0 -7
- package/dist/prompts/view.js +0 -172
- package/dist/web/ViewChrome.d.ts +0 -7
- package/dist/web/ViewChrome.js +0 -28
- package/dist/web/ViewPane.d.ts +0 -39
- package/dist/web/ViewPane.js +0 -48
- package/dist/web/index.d.ts +0 -8
- package/dist/web/index.js +0 -22
- package/dist/web/runtime.d.ts +0 -39
- package/dist/web/runtime.js +0 -232
- package/dist/web/states.d.ts +0 -24
- package/dist/web/states.js +0 -24
- package/dist/web/transport-http.d.ts +0 -5
- package/dist/web/transport-http.js +0 -34
- package/dist/web/transport-stream.d.ts +0 -3
- package/dist/web/transport-stream.js +0 -204
- package/dist/web-client/assets/index-U_NZ66VE.js +0 -79
- package/dist/web-client/assets/index-aaeu4adv.css +0 -2
- /package/dist/{builtin-views/workspace-sidebar/__tests__/core.test.d.ts → clients/attach/__tests__/file-review-focus.test.d.ts} +0 -0
- /package/dist/clients/attach/__tests__/{visible-paths.test.d.ts → group-activity.test.d.ts} +0 -0
- /package/dist/{core/__tests__/chat-view-reconnect.test.d.ts → clients/attach/__tests__/input-controller-extension-command.test.d.ts} +0 -0
- /package/dist/{core/__tests__/full/consult-startup-failure.test.d.ts → clients/attach/__tests__/session-identity-refresh.test.d.ts} +0 -0
- /package/dist/{core/canvas/__tests__/human-work-outbox.test.d.ts → clients/inbox/__tests__/inbox-controller.test.d.ts} +0 -0
- /package/dist/{core/keybindings/__tests__/bespoke-consumers.test.d.ts → clients/inbox/__tests__/mount-panel.test.d.ts} +0 -0
- /package/dist/{core/tui/__tests__/host-keybindings.test.d.ts → clients/inbox/review/__tests__/editor-roundtrip.test.d.ts} +0 -0
- /package/dist/{core/view/__tests__/transport-cache.test.d.ts → clients/inbox/review/__tests__/remap.test.d.ts} +0 -0
- /package/dist/{core/view/__tests__/transport-remote.test.d.ts → clients/inbox/review/__tests__/review-core.test.d.ts} +0 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { InboxController } from './controller.js';
|
|
2
|
+
import { scanInbox } from '../../core/human/scan.js';
|
|
3
|
+
import { cliClient } from '../../commands/api-client.js';
|
|
4
|
+
import { filterVisibleReviewTickets } from './review-visibility.js';
|
|
5
|
+
import { decodeInboxKey } from './tui/keys.js';
|
|
6
|
+
import { clipLine, visibleWidth } from './tui/ansi.js';
|
|
7
|
+
class InboxComponent {
|
|
8
|
+
controller;
|
|
9
|
+
focused = false;
|
|
10
|
+
rows = 0;
|
|
11
|
+
width = -1;
|
|
12
|
+
height = -1;
|
|
13
|
+
handle;
|
|
14
|
+
constructor(controller) {
|
|
15
|
+
this.controller = controller;
|
|
16
|
+
}
|
|
17
|
+
setRows(rows) {
|
|
18
|
+
this.rows = rows;
|
|
19
|
+
}
|
|
20
|
+
render(width) {
|
|
21
|
+
const rows = this.rows;
|
|
22
|
+
if (width !== this.width || rows !== this.height) {
|
|
23
|
+
this.width = width;
|
|
24
|
+
this.height = rows;
|
|
25
|
+
this.controller.resize(width, rows);
|
|
26
|
+
}
|
|
27
|
+
return padFrame(this.controller.render(), width, rows);
|
|
28
|
+
}
|
|
29
|
+
handleInput(data) {
|
|
30
|
+
const { input, key } = decodeInboxKey(data);
|
|
31
|
+
this.controller.handleKey(input, key);
|
|
32
|
+
}
|
|
33
|
+
invalidate() {
|
|
34
|
+
this.handle?.invalidate();
|
|
35
|
+
}
|
|
36
|
+
setHandle(handle) {
|
|
37
|
+
this.handle = handle;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function padFrame(lines, cols, rows) {
|
|
41
|
+
const frame = lines.slice(0, rows);
|
|
42
|
+
while (frame.length < rows)
|
|
43
|
+
frame.push('');
|
|
44
|
+
return frame.map((line) => {
|
|
45
|
+
const clipped = clipLine(line, cols);
|
|
46
|
+
return clipped + ' '.repeat(Math.max(0, cols - visibleWidth(clipped)));
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export function createInboxSurface(opts) {
|
|
50
|
+
let session;
|
|
51
|
+
const close = () => {
|
|
52
|
+
const current = session;
|
|
53
|
+
if (current === undefined || current.closed)
|
|
54
|
+
return;
|
|
55
|
+
current.closed = true;
|
|
56
|
+
session = undefined;
|
|
57
|
+
current.controller?.close();
|
|
58
|
+
current.handle?.close();
|
|
59
|
+
current.controller = undefined;
|
|
60
|
+
current.handle = undefined;
|
|
61
|
+
};
|
|
62
|
+
const mount = (current) => {
|
|
63
|
+
if (current.closed || session !== current)
|
|
64
|
+
return;
|
|
65
|
+
const localScan = opts.scan ?? scanInbox;
|
|
66
|
+
const nextController = new InboxController({
|
|
67
|
+
host: opts.host,
|
|
68
|
+
tui: opts.tui,
|
|
69
|
+
canvasSource: opts.canvasSource,
|
|
70
|
+
onDirty: () => current.handle?.invalidate(),
|
|
71
|
+
onClosed: close,
|
|
72
|
+
scan: () => filterVisibleReviewTickets(localScan(), current.visibleIds),
|
|
73
|
+
onInboxActivity: () => refresh(current),
|
|
74
|
+
});
|
|
75
|
+
const component = new InboxComponent(nextController);
|
|
76
|
+
current.controller = nextController;
|
|
77
|
+
try {
|
|
78
|
+
const handle = opts.host.mount(component);
|
|
79
|
+
current.handle = handle;
|
|
80
|
+
component.setHandle(handle);
|
|
81
|
+
handle.onClose(() => {
|
|
82
|
+
if (current.handle === handle)
|
|
83
|
+
current.handle = undefined;
|
|
84
|
+
nextController.close();
|
|
85
|
+
});
|
|
86
|
+
nextController.start();
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
close();
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const refresh = (current, initial = false) => {
|
|
94
|
+
const generation = ++current.refreshGeneration;
|
|
95
|
+
void cliClient().listHumanInbox().then(({ tickets }) => {
|
|
96
|
+
if (current.closed || session !== current || generation !== current.refreshGeneration)
|
|
97
|
+
return;
|
|
98
|
+
current.visibleIds = new Set(tickets.map((ticket) => ticket.ticket_id));
|
|
99
|
+
if (current.controller === undefined)
|
|
100
|
+
mount(current);
|
|
101
|
+
else
|
|
102
|
+
current.controller.invalidate();
|
|
103
|
+
}, (error) => {
|
|
104
|
+
if (!initial || current.closed || session !== current || generation !== current.refreshGeneration)
|
|
105
|
+
return;
|
|
106
|
+
close();
|
|
107
|
+
opts.host.notice(`Could not load inbox visibility: ${error instanceof Error ? error.message : String(error)}`);
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
const toggle = () => {
|
|
111
|
+
if (session !== undefined) {
|
|
112
|
+
close();
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
if (opts.host.capabilities.remote) {
|
|
116
|
+
opts.host.notice('The inbox is unavailable in a remote attach.');
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const current = { closed: false, refreshGeneration: 0, visibleIds: new Set() };
|
|
120
|
+
session = current;
|
|
121
|
+
refresh(current, true);
|
|
122
|
+
};
|
|
123
|
+
return {
|
|
124
|
+
toggle,
|
|
125
|
+
close,
|
|
126
|
+
isOpen: () => session !== undefined,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export declare const ESC = "\u001B[";
|
|
2
|
+
export declare const RESET = "\u001B[0m";
|
|
3
|
+
export declare const BOLD = "\u001B[1m";
|
|
4
|
+
export declare const DIM = "\u001B[2m";
|
|
5
|
+
export declare const ITALIC = "\u001B[3m";
|
|
6
|
+
export declare const RED = "\u001B[31m";
|
|
7
|
+
export declare const GREEN = "\u001B[32m";
|
|
8
|
+
export declare const YELLOW = "\u001B[33m";
|
|
9
|
+
export declare const CYAN = "\u001B[36m";
|
|
10
|
+
export declare const GRAY = "\u001B[90m";
|
|
11
|
+
export declare const REVERSE = "\u001B[7m";
|
|
12
|
+
export declare function sanitize(text: string): string;
|
|
13
|
+
export declare function singleLine(text: string): string;
|
|
14
|
+
export declare function hline(width: number, char?: string): string;
|
|
15
|
+
export declare function padRight(text: string, width: number): string;
|
|
16
|
+
/** Char-based width truncation with a trailing ellipsis. The canonical deck
|
|
17
|
+
* renderer variant. */
|
|
18
|
+
export declare function truncate(text: string, maxWidth: number): string;
|
|
19
|
+
/** Word-aware truncation that also flattens newlines and strips decorative
|
|
20
|
+
* emoji — tuned for dense inbox rows (ported from sisyphus format.ts). Kept
|
|
21
|
+
* distinct from `truncate` because those two surfaces want different behavior. */
|
|
22
|
+
export declare function truncateRow(text: string, max: number): string;
|
|
23
|
+
/** Word-wrap on whitespace; splits on `\n` into separate paragraphs. */
|
|
24
|
+
export declare function wrap(text: string, maxWidth: number): string[];
|
|
25
|
+
/** Hard character wrap that ignores word boundaries; splits on `\n`. Used for
|
|
26
|
+
* free-form input buffers where every character (including runs without
|
|
27
|
+
* spaces) must stay on screen. */
|
|
28
|
+
export declare function hardWrap(text: string, maxWidth: number): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Pad each non-empty line with leading spaces to horizontally center the
|
|
31
|
+
* `contentWidth`-wide block within `cols`. Wide terminals get breathing room;
|
|
32
|
+
* narrow panes skip centering. Empty lines stay empty so frame diffing keeps
|
|
33
|
+
* them as cheap no-ops.
|
|
34
|
+
*/
|
|
35
|
+
export declare function centerHorizontal(lines: string[], cols: number, contentWidth: number): string[];
|
|
36
|
+
/** Visible width of a line in display cells (string-width ignores ANSI). */
|
|
37
|
+
export declare function visibleWidth(line: string): number;
|
|
38
|
+
/**
|
|
39
|
+
* The one display-cell containment primitive: the visible cells
|
|
40
|
+
* `[start, start + width)` of `line`, with escape sequences preserved.
|
|
41
|
+
*
|
|
42
|
+
* Every line rendered into a rectangle must fit within its assigned width, so
|
|
43
|
+
* each logical line occupies one physical row. Overflow wraps into the next
|
|
44
|
+
* row and violates the frame contract. Styling seen before
|
|
45
|
+
* the window is replayed at its head so a slice keeps the colors it had in
|
|
46
|
+
* place, and a double-width glyph straddling either edge becomes spaces so
|
|
47
|
+
* the slice occupies exactly the cells it claims.
|
|
48
|
+
*/
|
|
49
|
+
export declare function sliceCells(line: string, start: number, width: number): string;
|
|
50
|
+
/**
|
|
51
|
+
* ANSI-aware clip: truncate a line's visible width to `maxWidth`. Thin
|
|
52
|
+
* wrapper over `sliceCells` so containment has a single implementation.
|
|
53
|
+
*/
|
|
54
|
+
export declare function clipLine(line: string, maxWidth: number): string;
|
|
55
|
+
/**
|
|
56
|
+
* Horizontal window onto a row that may be wider than its rectangle (a
|
|
57
|
+
* Mermaid diagram rendered at the pane's full width). A row that fits is
|
|
58
|
+
* returned untouched — panning only ever moves content that overflows, so
|
|
59
|
+
* prose stays put while a diagram slides. Hidden content on either side is
|
|
60
|
+
* marked with a dim ‹/› in the edge cell, so the row always states whether
|
|
61
|
+
* more of the diagram exists left or right, and the marker disappears once
|
|
62
|
+
* that edge is reached (nothing is unreachable).
|
|
63
|
+
*/
|
|
64
|
+
export declare function panLine(line: string, offset: number, width: number): string;
|
|
65
|
+
/** Cells of `line` that fall outside a `width`-wide rectangle. */
|
|
66
|
+
export declare function rowOverflow(line: string, width: number): number;
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import stringWidth from 'string-width';
|
|
2
|
+
// ── ANSI escape constants ─────────────────────────────────────────────────────
|
|
3
|
+
// The single home for these — both the deck renderer (render.ts) and the inbox
|
|
4
|
+
// picker (inbox/tui.ts) import from here rather than keeping their own copies.
|
|
5
|
+
export const ESC = '\x1b[';
|
|
6
|
+
export const RESET = `${ESC}0m`;
|
|
7
|
+
export const BOLD = `${ESC}1m`;
|
|
8
|
+
export const DIM = `${ESC}2m`;
|
|
9
|
+
export const ITALIC = `${ESC}3m`;
|
|
10
|
+
export const RED = `${ESC}31m`;
|
|
11
|
+
export const GREEN = `${ESC}32m`;
|
|
12
|
+
export const YELLOW = `${ESC}33m`;
|
|
13
|
+
export const CYAN = `${ESC}36m`;
|
|
14
|
+
export const GRAY = `${ESC}90m`;
|
|
15
|
+
export const REVERSE = `${ESC}7m`;
|
|
16
|
+
// ── Text helpers ──────────────────────────────────────────────────────────────
|
|
17
|
+
const CONTROL_CHARS_RE = /\x1b\[[0-9;?]*[a-zA-Z]|\x1b[@-_]|[\x00-\x08\x0B\x0E-\x1F\x7F-\x9F]/g;
|
|
18
|
+
export function sanitize(text) {
|
|
19
|
+
if (typeof text !== 'string')
|
|
20
|
+
return '';
|
|
21
|
+
return text.replace(CONTROL_CHARS_RE, '');
|
|
22
|
+
}
|
|
23
|
+
export function singleLine(text) {
|
|
24
|
+
return sanitize(text).replace(/\s+/g, ' ').trim();
|
|
25
|
+
}
|
|
26
|
+
export function hline(width, char = '─') {
|
|
27
|
+
if (width < 1)
|
|
28
|
+
return '';
|
|
29
|
+
return char.repeat(width);
|
|
30
|
+
}
|
|
31
|
+
export function padRight(text, width) {
|
|
32
|
+
const w = stringWidth(text);
|
|
33
|
+
if (w >= width)
|
|
34
|
+
return text;
|
|
35
|
+
return text + ' '.repeat(width - w);
|
|
36
|
+
}
|
|
37
|
+
/** Char-based width truncation with a trailing ellipsis. The canonical deck
|
|
38
|
+
* renderer variant. */
|
|
39
|
+
export function truncate(text, maxWidth) {
|
|
40
|
+
if (maxWidth < 1)
|
|
41
|
+
return '';
|
|
42
|
+
if (stringWidth(text) <= maxWidth)
|
|
43
|
+
return text;
|
|
44
|
+
const chars = [...text];
|
|
45
|
+
let w = 0;
|
|
46
|
+
let out = '';
|
|
47
|
+
for (const ch of chars) {
|
|
48
|
+
const cw = stringWidth(ch);
|
|
49
|
+
if (w + cw + 1 > maxWidth)
|
|
50
|
+
break;
|
|
51
|
+
out += ch;
|
|
52
|
+
w += cw;
|
|
53
|
+
}
|
|
54
|
+
return out + '…';
|
|
55
|
+
}
|
|
56
|
+
/** Word-aware truncation that also flattens newlines and strips decorative
|
|
57
|
+
* emoji — tuned for dense inbox rows (ported from sisyphus format.ts). Kept
|
|
58
|
+
* distinct from `truncate` because those two surfaces want different behavior. */
|
|
59
|
+
export function truncateRow(text, max) {
|
|
60
|
+
const clean = text.replace(/\n/g, ' ').replace(/✅/g, '✓').replace(/❌/g, '✗').replace(/\p{Emoji_Presentation}/gu, '');
|
|
61
|
+
if (max < 4)
|
|
62
|
+
return clean.slice(0, max);
|
|
63
|
+
const w = stringWidth(clean);
|
|
64
|
+
if (w <= max)
|
|
65
|
+
return clean;
|
|
66
|
+
let result = clean;
|
|
67
|
+
while (stringWidth(result) > max - 1 && result.length > 0) {
|
|
68
|
+
const cut = result.lastIndexOf(' ', result.length - 2);
|
|
69
|
+
if (cut > max * 0.4) {
|
|
70
|
+
result = result.slice(0, cut);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
result = result.slice(0, result.length - 1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result + '…';
|
|
77
|
+
}
|
|
78
|
+
function sliceByWidth(s, maxWidth) {
|
|
79
|
+
let w = 0;
|
|
80
|
+
let out = '';
|
|
81
|
+
for (const ch of s) {
|
|
82
|
+
const cw = stringWidth(ch);
|
|
83
|
+
if (w + cw > maxWidth)
|
|
84
|
+
break;
|
|
85
|
+
out += ch;
|
|
86
|
+
w += cw;
|
|
87
|
+
}
|
|
88
|
+
if (out === '' && s.length > 0)
|
|
89
|
+
out = [...s][0];
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/** Word-wrap on whitespace; splits on `\n` into separate paragraphs. */
|
|
93
|
+
export function wrap(text, maxWidth) {
|
|
94
|
+
if (maxWidth < 1)
|
|
95
|
+
return [text];
|
|
96
|
+
const out = [];
|
|
97
|
+
const paragraphs = text.split('\n');
|
|
98
|
+
for (let p = 0; p < paragraphs.length; p++) {
|
|
99
|
+
const para = paragraphs[p];
|
|
100
|
+
if (para === '') {
|
|
101
|
+
out.push('');
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const words = para.split(/[ \t]+/).filter(Boolean);
|
|
105
|
+
let current = '';
|
|
106
|
+
for (let word of words) {
|
|
107
|
+
while (stringWidth(word) > maxWidth) {
|
|
108
|
+
if (current) {
|
|
109
|
+
out.push(current);
|
|
110
|
+
current = '';
|
|
111
|
+
}
|
|
112
|
+
const piece = sliceByWidth(word, maxWidth);
|
|
113
|
+
out.push(piece);
|
|
114
|
+
word = word.slice(piece.length);
|
|
115
|
+
}
|
|
116
|
+
const candidate = current ? `${current} ${word}` : word;
|
|
117
|
+
if (stringWidth(candidate) <= maxWidth) {
|
|
118
|
+
current = candidate;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
if (current)
|
|
122
|
+
out.push(current);
|
|
123
|
+
current = word;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (current)
|
|
127
|
+
out.push(current);
|
|
128
|
+
}
|
|
129
|
+
return out.length > 0 ? out : [''];
|
|
130
|
+
}
|
|
131
|
+
/** Hard character wrap that ignores word boundaries; splits on `\n`. Used for
|
|
132
|
+
* free-form input buffers where every character (including runs without
|
|
133
|
+
* spaces) must stay on screen. */
|
|
134
|
+
export function hardWrap(text, maxWidth) {
|
|
135
|
+
if (maxWidth < 1)
|
|
136
|
+
return [text];
|
|
137
|
+
const segments = text.split('\n');
|
|
138
|
+
const out = [];
|
|
139
|
+
for (const seg of segments) {
|
|
140
|
+
if (seg.length === 0) {
|
|
141
|
+
out.push('');
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
let current = '';
|
|
145
|
+
let currentW = 0;
|
|
146
|
+
for (const ch of [...seg]) {
|
|
147
|
+
const cw = stringWidth(ch);
|
|
148
|
+
if (currentW + cw > maxWidth) {
|
|
149
|
+
out.push(current);
|
|
150
|
+
current = ch;
|
|
151
|
+
currentW = cw;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
current += ch;
|
|
155
|
+
currentW += cw;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
out.push(current);
|
|
159
|
+
}
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Pad each non-empty line with leading spaces to horizontally center the
|
|
164
|
+
* `contentWidth`-wide block within `cols`. Wide terminals get breathing room;
|
|
165
|
+
* narrow panes skip centering. Empty lines stay empty so frame diffing keeps
|
|
166
|
+
* them as cheap no-ops.
|
|
167
|
+
*/
|
|
168
|
+
export function centerHorizontal(lines, cols, contentWidth) {
|
|
169
|
+
const extraPad = Math.max(0, Math.floor((cols - contentWidth) / 2));
|
|
170
|
+
if (extraPad === 0)
|
|
171
|
+
return lines;
|
|
172
|
+
const pad = ' '.repeat(extraPad);
|
|
173
|
+
return lines.map((line) => (line === '' ? '' : pad + line));
|
|
174
|
+
}
|
|
175
|
+
/** Visible width of a line in display cells (string-width ignores ANSI). */
|
|
176
|
+
export function visibleWidth(line) {
|
|
177
|
+
return stringWidth(line);
|
|
178
|
+
}
|
|
179
|
+
const ANSI_TOKEN = /\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b_[^\x07\x1b]*(?:\x07|\x1b\\)|\x1b\[[0-9;?]*[a-zA-Z]|\x1b[@-^]/g;
|
|
180
|
+
const OSC8_TOKEN = /\x1b\]8;[^;\x07\x1b]*;([^\x07\x1b]*)(\x07|\x1b\\)/g;
|
|
181
|
+
const GRAPHEMES = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
182
|
+
/** ANSI escapes are tokens of their own; all printable text is segmented into
|
|
183
|
+
* extended grapheme clusters before widths or slice boundaries are calculated.
|
|
184
|
+
* `string-width` assigns display width to the complete cluster (not its
|
|
185
|
+
* constituent code points), which keeps ZWJ emoji, flags, skin tones and
|
|
186
|
+
* combining sequences indivisible while panning. */
|
|
187
|
+
function displayTokens(line) {
|
|
188
|
+
const tokens = [];
|
|
189
|
+
let at = 0;
|
|
190
|
+
ANSI_TOKEN.lastIndex = 0;
|
|
191
|
+
for (let match = ANSI_TOKEN.exec(line); match !== null; match = ANSI_TOKEN.exec(line)) {
|
|
192
|
+
for (const segment of GRAPHEMES.segment(line.slice(at, match.index))) {
|
|
193
|
+
tokens.push({ ansi: false, text: segment.segment, width: stringWidth(segment.segment) });
|
|
194
|
+
}
|
|
195
|
+
tokens.push({ ansi: true, text: match[0] });
|
|
196
|
+
at = match.index + match[0].length;
|
|
197
|
+
}
|
|
198
|
+
for (const segment of GRAPHEMES.segment(line.slice(at))) {
|
|
199
|
+
tokens.push({ ansi: false, text: segment.segment, width: stringWidth(segment.segment) });
|
|
200
|
+
}
|
|
201
|
+
return tokens;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* The one display-cell containment primitive: the visible cells
|
|
205
|
+
* `[start, start + width)` of `line`, with escape sequences preserved.
|
|
206
|
+
*
|
|
207
|
+
* Every line rendered into a rectangle must fit within its assigned width, so
|
|
208
|
+
* each logical line occupies one physical row. Overflow wraps into the next
|
|
209
|
+
* row and violates the frame contract. Styling seen before
|
|
210
|
+
* the window is replayed at its head so a slice keeps the colors it had in
|
|
211
|
+
* place, and a double-width glyph straddling either edge becomes spaces so
|
|
212
|
+
* the slice occupies exactly the cells it claims.
|
|
213
|
+
*/
|
|
214
|
+
export function sliceCells(line, start, width) {
|
|
215
|
+
if (width < 1)
|
|
216
|
+
return '';
|
|
217
|
+
const from = Math.max(0, start);
|
|
218
|
+
const end = from + width;
|
|
219
|
+
let carried = ''; // styling established before the window
|
|
220
|
+
let out = '';
|
|
221
|
+
let emitted = false; // any escape inside the window
|
|
222
|
+
let cell = 0;
|
|
223
|
+
for (const token of displayTokens(line)) {
|
|
224
|
+
if (token.ansi) {
|
|
225
|
+
if (cell < from)
|
|
226
|
+
carried += token.text;
|
|
227
|
+
else {
|
|
228
|
+
out += token.text;
|
|
229
|
+
emitted = true;
|
|
230
|
+
}
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (cell >= end)
|
|
234
|
+
break;
|
|
235
|
+
const cw = token.width;
|
|
236
|
+
// A standalone combining mark has no cells but is still a complete
|
|
237
|
+
// grapheme cluster; retain it whenever its zero-width position is inside
|
|
238
|
+
// the window rather than dropping it through the usual boundary check.
|
|
239
|
+
if (cw === 0) {
|
|
240
|
+
if (cell >= from)
|
|
241
|
+
out += token.text;
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (cell + cw <= from) {
|
|
245
|
+
cell += cw;
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
if (cell < from) { // whole grapheme straddles the left edge
|
|
249
|
+
out += ' '.repeat(cell + cw - from);
|
|
250
|
+
cell += cw;
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
if (cell + cw > end) { // whole grapheme straddles the right edge
|
|
254
|
+
out += ' '.repeat(end - cell);
|
|
255
|
+
cell = end;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
out += token.text;
|
|
259
|
+
cell += cw;
|
|
260
|
+
}
|
|
261
|
+
if (out === '')
|
|
262
|
+
return '';
|
|
263
|
+
if (carried !== '') {
|
|
264
|
+
out = carried + out;
|
|
265
|
+
emitted = true;
|
|
266
|
+
}
|
|
267
|
+
const hyperlinkClose = closeActiveOsc8(out);
|
|
268
|
+
return emitted ? out + hyperlinkClose + RESET : out;
|
|
269
|
+
}
|
|
270
|
+
/** Close an OSC-8 hyperlink that starts inside a clipped row so it cannot
|
|
271
|
+
* remain active through padding or the next terminal row. */
|
|
272
|
+
function closeActiveOsc8(line) {
|
|
273
|
+
let close = '';
|
|
274
|
+
OSC8_TOKEN.lastIndex = 0;
|
|
275
|
+
for (let match = OSC8_TOKEN.exec(line); match !== null; match = OSC8_TOKEN.exec(line)) {
|
|
276
|
+
close = match[1] === '' ? '' : `\x1b]8;;${match[2]}`;
|
|
277
|
+
}
|
|
278
|
+
return close;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* ANSI-aware clip: truncate a line's visible width to `maxWidth`. Thin
|
|
282
|
+
* wrapper over `sliceCells` so containment has a single implementation.
|
|
283
|
+
*/
|
|
284
|
+
export function clipLine(line, maxWidth) {
|
|
285
|
+
if (maxWidth < 1)
|
|
286
|
+
return '';
|
|
287
|
+
if (stringWidth(line) <= maxWidth)
|
|
288
|
+
return line; // string-width ignores ANSI
|
|
289
|
+
return sliceCells(line, 0, maxWidth);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Horizontal window onto a row that may be wider than its rectangle (a
|
|
293
|
+
* Mermaid diagram rendered at the pane's full width). A row that fits is
|
|
294
|
+
* returned untouched — panning only ever moves content that overflows, so
|
|
295
|
+
* prose stays put while a diagram slides. Hidden content on either side is
|
|
296
|
+
* marked with a dim ‹/› in the edge cell, so the row always states whether
|
|
297
|
+
* more of the diagram exists left or right, and the marker disappears once
|
|
298
|
+
* that edge is reached (nothing is unreachable).
|
|
299
|
+
*/
|
|
300
|
+
export function panLine(line, offset, width) {
|
|
301
|
+
if (width < 1)
|
|
302
|
+
return '';
|
|
303
|
+
const w = stringWidth(line);
|
|
304
|
+
if (w <= width)
|
|
305
|
+
return line;
|
|
306
|
+
const max = w - width;
|
|
307
|
+
const off = Math.max(0, Math.min(offset, max));
|
|
308
|
+
const left = off > 0;
|
|
309
|
+
const right = off < max;
|
|
310
|
+
const innerWidth = width - (left ? 1 : 0) - (right ? 1 : 0);
|
|
311
|
+
const body = innerWidth > 0 ? sliceCells(line, off + (left ? 1 : 0), innerWidth) : '';
|
|
312
|
+
return `${left ? `${DIM}‹${RESET}` : ''}${body}${right ? `${DIM}›${RESET}` : ''}`;
|
|
313
|
+
}
|
|
314
|
+
/** Cells of `line` that fall outside a `width`-wide rectangle. */
|
|
315
|
+
export function rowOverflow(line, width) {
|
|
316
|
+
return Math.max(0, stringWidth(line) - width);
|
|
317
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
const SPAWN_TIMEOUT_MS = 3000;
|
|
3
|
+
function writers() {
|
|
4
|
+
if (process.platform === 'darwin')
|
|
5
|
+
return [['pbcopy', []]];
|
|
6
|
+
const wayland = Boolean(process.env.WAYLAND_DISPLAY)
|
|
7
|
+
|| process.env.XDG_SESSION_TYPE === 'wayland';
|
|
8
|
+
const xclip = ['xclip', ['-selection', 'clipboard']];
|
|
9
|
+
const wlcopy = ['wl-copy', []];
|
|
10
|
+
return wayland ? [wlcopy, xclip] : [xclip, wlcopy];
|
|
11
|
+
}
|
|
12
|
+
/** Write text to the system clipboard without throwing. */
|
|
13
|
+
export function writeClipboardText(text) {
|
|
14
|
+
for (const [command, args] of writers()) {
|
|
15
|
+
const result = spawnSync(command, args, {
|
|
16
|
+
input: text,
|
|
17
|
+
timeout: SPAWN_TIMEOUT_MS,
|
|
18
|
+
encoding: 'utf-8',
|
|
19
|
+
});
|
|
20
|
+
if (result.error)
|
|
21
|
+
continue;
|
|
22
|
+
if (result.status === 0)
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TuiState } from './types.js';
|
|
2
|
+
import type { Interaction } from '../../../core/human/types.js';
|
|
3
|
+
import type { Key } from './keys.js';
|
|
4
|
+
export type RenderFn = () => void;
|
|
5
|
+
export type ExitFn = () => void;
|
|
6
|
+
export declare function assignShortcuts(interactions: Interaction[]): void;
|
|
7
|
+
export declare function handleKeypress(input: string, key: Key, state: TuiState, render: RenderFn, exit: ExitFn): void;
|