@nex-ai/nex 0.1.64 → 0.2.0
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 +236 -231
- package/bin/nex-mcp.js +50 -0
- package/bin/nex.js +53 -0
- package/package.json +9 -36
- package/dist/agent/adoption.d.ts +0 -23
- package/dist/agent/adoption.js +0 -87
- package/dist/agent/adoption.js.map +0 -1
- package/dist/agent/gossip.d.ts +0 -17
- package/dist/agent/gossip.js +0 -48
- package/dist/agent/gossip.js.map +0 -1
- package/dist/agent/loop.d.ts +0 -59
- package/dist/agent/loop.js +0 -389
- package/dist/agent/loop.js.map +0 -1
- package/dist/agent/queues.d.ts +0 -16
- package/dist/agent/queues.js +0 -44
- package/dist/agent/queues.js.map +0 -1
- package/dist/agent/session-store.d.ts +0 -21
- package/dist/agent/session-store.js +0 -96
- package/dist/agent/session-store.js.map +0 -1
- package/dist/agent/templates.d.ts +0 -5
- package/dist/agent/templates.js +0 -55
- package/dist/agent/templates.js.map +0 -1
- package/dist/agent/tools.d.ts +0 -25
- package/dist/agent/tools.js +0 -238
- package/dist/agent/tools.js.map +0 -1
- package/dist/agent/types.d.ts +0 -59
- package/dist/agent/types.js +0 -5
- package/dist/agent/types.js.map +0 -1
- package/dist/calendar/scheduler.d.ts +0 -32
- package/dist/calendar/scheduler.js +0 -178
- package/dist/calendar/scheduler.js.map +0 -1
- package/dist/calendar/store.d.ts +0 -15
- package/dist/calendar/store.js +0 -50
- package/dist/calendar/store.js.map +0 -1
- package/dist/calendar/types.d.ts +0 -17
- package/dist/calendar/types.js +0 -5
- package/dist/calendar/types.js.map +0 -1
- package/dist/chat/channel.d.ts +0 -20
- package/dist/chat/channel.js +0 -84
- package/dist/chat/channel.js.map +0 -1
- package/dist/chat/message-store.d.ts +0 -18
- package/dist/chat/message-store.js +0 -82
- package/dist/chat/message-store.js.map +0 -1
- package/dist/chat/router.d.ts +0 -17
- package/dist/chat/router.js +0 -65
- package/dist/chat/router.js.map +0 -1
- package/dist/chat/suggested-responses.d.ts +0 -6
- package/dist/chat/suggested-responses.js +0 -99
- package/dist/chat/suggested-responses.js.map +0 -1
- package/dist/chat/types.d.ts +0 -28
- package/dist/chat/types.js +0 -5
- package/dist/chat/types.js.map +0 -1
- package/dist/cli.d.ts +0 -5
- package/dist/cli.js +0 -20
- package/dist/cli.js.map +0 -1
- package/dist/commands/attribute.d.ts +0 -4
- package/dist/commands/attribute.js +0 -75
- package/dist/commands/attribute.js.map +0 -1
- package/dist/commands/config-cmd.d.ts +0 -4
- package/dist/commands/config-cmd.js +0 -53
- package/dist/commands/config-cmd.js.map +0 -1
- package/dist/commands/context.d.ts +0 -4
- package/dist/commands/context.js +0 -167
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/dispatch.d.ts +0 -44
- package/dist/commands/dispatch.js +0 -1550
- package/dist/commands/dispatch.js.map +0 -1
- package/dist/commands/graph.d.ts +0 -5
- package/dist/commands/graph.js +0 -77
- package/dist/commands/graph.js.map +0 -1
- package/dist/commands/init.d.ts +0 -49
- package/dist/commands/init.js +0 -319
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/insight.d.ts +0 -4
- package/dist/commands/insight.js +0 -39
- package/dist/commands/insight.js.map +0 -1
- package/dist/commands/integrate.d.ts +0 -4
- package/dist/commands/integrate.js +0 -361
- package/dist/commands/integrate.js.map +0 -1
- package/dist/commands/list-job.d.ts +0 -4
- package/dist/commands/list-job.js +0 -41
- package/dist/commands/list-job.js.map +0 -1
- package/dist/commands/list.d.ts +0 -4
- package/dist/commands/list.js +0 -148
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/note.d.ts +0 -4
- package/dist/commands/note.js +0 -77
- package/dist/commands/note.js.map +0 -1
- package/dist/commands/object.d.ts +0 -4
- package/dist/commands/object.js +0 -78
- package/dist/commands/object.js.map +0 -1
- package/dist/commands/parse-input.d.ts +0 -5
- package/dist/commands/parse-input.js +0 -37
- package/dist/commands/parse-input.js.map +0 -1
- package/dist/commands/record.d.ts +0 -4
- package/dist/commands/record.js +0 -126
- package/dist/commands/record.js.map +0 -1
- package/dist/commands/register.d.ts +0 -4
- package/dist/commands/register.js +0 -23
- package/dist/commands/register.js.map +0 -1
- package/dist/commands/relationship.d.ts +0 -4
- package/dist/commands/relationship.js +0 -80
- package/dist/commands/relationship.js.map +0 -1
- package/dist/commands/scan.d.ts +0 -4
- package/dist/commands/scan.js +0 -107
- package/dist/commands/scan.js.map +0 -1
- package/dist/commands/search.d.ts +0 -4
- package/dist/commands/search.js +0 -62
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/session.d.ts +0 -4
- package/dist/commands/session.js +0 -31
- package/dist/commands/session.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -25
- package/dist/commands/setup.js +0 -580
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/task.d.ts +0 -4
- package/dist/commands/task.js +0 -140
- package/dist/commands/task.js.map +0 -1
- package/dist/commands/workspace.d.ts +0 -8
- package/dist/commands/workspace.js +0 -251
- package/dist/commands/workspace.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.js +0 -142
- package/dist/index.js.map +0 -1
- package/dist/lib/capture-filter.d.ts +0 -9
- package/dist/lib/capture-filter.js +0 -14
- package/dist/lib/capture-filter.js.map +0 -1
- package/dist/lib/client.d.ts +0 -20
- package/dist/lib/client.js +0 -160
- package/dist/lib/client.js.map +0 -1
- package/dist/lib/config.d.ts +0 -35
- package/dist/lib/config.js +0 -96
- package/dist/lib/config.js.map +0 -1
- package/dist/lib/context-format.d.ts +0 -7
- package/dist/lib/context-format.js +0 -21
- package/dist/lib/context-format.js.map +0 -1
- package/dist/lib/errors.d.ts +0 -18
- package/dist/lib/errors.js +0 -30
- package/dist/lib/errors.js.map +0 -1
- package/dist/lib/file-scanner.d.ts +0 -38
- package/dist/lib/file-scanner.js +0 -188
- package/dist/lib/file-scanner.js.map +0 -1
- package/dist/lib/graph-html.d.ts +0 -59
- package/dist/lib/graph-html.js +0 -859
- package/dist/lib/graph-html.js.map +0 -1
- package/dist/lib/installers.d.ts +0 -80
- package/dist/lib/installers.js +0 -602
- package/dist/lib/installers.js.map +0 -1
- package/dist/lib/integrations.d.ts +0 -23
- package/dist/lib/integrations.js +0 -25
- package/dist/lib/integrations.js.map +0 -1
- package/dist/lib/output.d.ts +0 -7
- package/dist/lib/output.js +0 -70
- package/dist/lib/output.js.map +0 -1
- package/dist/lib/platform-detect.d.ts +0 -23
- package/dist/lib/platform-detect.js +0 -359
- package/dist/lib/platform-detect.js.map +0 -1
- package/dist/lib/project-config.d.ts +0 -53
- package/dist/lib/project-config.js +0 -151
- package/dist/lib/project-config.js.map +0 -1
- package/dist/lib/prompt.d.ts +0 -15
- package/dist/lib/prompt.js +0 -213
- package/dist/lib/prompt.js.map +0 -1
- package/dist/lib/rate-limiter.d.ts +0 -13
- package/dist/lib/rate-limiter.js +0 -49
- package/dist/lib/rate-limiter.js.map +0 -1
- package/dist/lib/recall-filter.d.ts +0 -5
- package/dist/lib/recall-filter.js +0 -24
- package/dist/lib/recall-filter.js.map +0 -1
- package/dist/lib/session-store.d.ts +0 -15
- package/dist/lib/session-store.js +0 -62
- package/dist/lib/session-store.js.map +0 -1
- package/dist/lib/tui.d.ts +0 -57
- package/dist/lib/tui.js +0 -247
- package/dist/lib/tui.js.map +0 -1
- package/dist/lib/workspace-registry.d.ts +0 -47
- package/dist/lib/workspace-registry.js +0 -240
- package/dist/lib/workspace-registry.js.map +0 -1
- package/dist/mcp/channel.d.ts +0 -24
- package/dist/mcp/channel.js +0 -198
- package/dist/mcp/channel.js.map +0 -1
- package/dist/mcp/client.d.ts +0 -20
- package/dist/mcp/client.js +0 -131
- package/dist/mcp/client.js.map +0 -1
- package/dist/mcp/config.d.ts +0 -19
- package/dist/mcp/config.js +0 -48
- package/dist/mcp/config.js.map +0 -1
- package/dist/mcp/context-files.d.ts +0 -9
- package/dist/mcp/context-files.js +0 -90
- package/dist/mcp/context-files.js.map +0 -1
- package/dist/mcp/file-manifest.d.ts +0 -27
- package/dist/mcp/file-manifest.js +0 -68
- package/dist/mcp/file-manifest.js.map +0 -1
- package/dist/mcp/file-scanner.d.ts +0 -17
- package/dist/mcp/file-scanner.js +0 -77
- package/dist/mcp/file-scanner.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -2
- package/dist/mcp/index.js +0 -51
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/rate-limiter.d.ts +0 -14
- package/dist/mcp/rate-limiter.js +0 -60
- package/dist/mcp/rate-limiter.js.map +0 -1
- package/dist/mcp/server.d.ts +0 -6
- package/dist/mcp/server.js +0 -44
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/session-store.d.ts +0 -16
- package/dist/mcp/session-store.js +0 -70
- package/dist/mcp/session-store.js.map +0 -1
- package/dist/mcp/tools/context.d.ts +0 -3
- package/dist/mcp/tools/context.js +0 -65
- package/dist/mcp/tools/context.js.map +0 -1
- package/dist/mcp/tools/insights.d.ts +0 -3
- package/dist/mcp/tools/insights.js +0 -24
- package/dist/mcp/tools/insights.js.map +0 -1
- package/dist/mcp/tools/integrations.d.ts +0 -3
- package/dist/mcp/tools/integrations.js +0 -27
- package/dist/mcp/tools/integrations.js.map +0 -1
- package/dist/mcp/tools/lists.d.ts +0 -3
- package/dist/mcp/tools/lists.js +0 -101
- package/dist/mcp/tools/lists.js.map +0 -1
- package/dist/mcp/tools/notes.d.ts +0 -3
- package/dist/mcp/tools/notes.js +0 -52
- package/dist/mcp/tools/notes.js.map +0 -1
- package/dist/mcp/tools/notifications.d.ts +0 -3
- package/dist/mcp/tools/notifications.js +0 -53
- package/dist/mcp/tools/notifications.js.map +0 -1
- package/dist/mcp/tools/records.d.ts +0 -3
- package/dist/mcp/tools/records.js +0 -74
- package/dist/mcp/tools/records.js.map +0 -1
- package/dist/mcp/tools/register.d.ts +0 -3
- package/dist/mcp/tools/register.js +0 -41
- package/dist/mcp/tools/register.js.map +0 -1
- package/dist/mcp/tools/relationships.d.ts +0 -3
- package/dist/mcp/tools/relationships.js +0 -47
- package/dist/mcp/tools/relationships.js.map +0 -1
- package/dist/mcp/tools/scan.d.ts +0 -3
- package/dist/mcp/tools/scan.js +0 -37
- package/dist/mcp/tools/scan.js.map +0 -1
- package/dist/mcp/tools/schema.d.ts +0 -3
- package/dist/mcp/tools/schema.js +0 -108
- package/dist/mcp/tools/schema.js.map +0 -1
- package/dist/mcp/tools/search.d.ts +0 -3
- package/dist/mcp/tools/search.js +0 -8
- package/dist/mcp/tools/search.js.map +0 -1
- package/dist/mcp/tools/tasks.d.ts +0 -3
- package/dist/mcp/tools/tasks.js +0 -88
- package/dist/mcp/tools/tasks.js.map +0 -1
- package/dist/mcp/workspace-data-dir.d.ts +0 -2
- package/dist/mcp/workspace-data-dir.js +0 -28
- package/dist/mcp/workspace-data-dir.js.map +0 -1
- package/dist/orchestration/budget.d.ts +0 -32
- package/dist/orchestration/budget.js +0 -72
- package/dist/orchestration/budget.js.map +0 -1
- package/dist/orchestration/executor.d.ts +0 -59
- package/dist/orchestration/executor.js +0 -197
- package/dist/orchestration/executor.js.map +0 -1
- package/dist/orchestration/router.d.ts +0 -30
- package/dist/orchestration/router.js +0 -98
- package/dist/orchestration/router.js.map +0 -1
- package/dist/orchestration/templates.d.ts +0 -11
- package/dist/orchestration/templates.js +0 -99
- package/dist/orchestration/templates.js.map +0 -1
- package/dist/orchestration/types.d.ts +0 -58
- package/dist/orchestration/types.js +0 -7
- package/dist/orchestration/types.js.map +0 -1
- package/dist/plugin/auto-capture.d.ts +0 -11
- package/dist/plugin/auto-capture.js +0 -135
- package/dist/plugin/auto-capture.js.map +0 -1
- package/dist/plugin/auto-recall-worker.d.ts +0 -2
- package/dist/plugin/auto-recall-worker.js +0 -74
- package/dist/plugin/auto-recall-worker.js.map +0 -1
- package/dist/plugin/auto-recall.d.ts +0 -11
- package/dist/plugin/auto-recall.js +0 -186
- package/dist/plugin/auto-recall.js.map +0 -1
- package/dist/plugin/auto-register.d.ts +0 -10
- package/dist/plugin/auto-register.js +0 -81
- package/dist/plugin/auto-register.js.map +0 -1
- package/dist/plugin/auto-scan.d.ts +0 -10
- package/dist/plugin/auto-scan.js +0 -54
- package/dist/plugin/auto-scan.js.map +0 -1
- package/dist/plugin/auto-session-start.d.ts +0 -14
- package/dist/plugin/auto-session-start.js +0 -156
- package/dist/plugin/auto-session-start.js.map +0 -1
- package/dist/plugin/capture-filter.d.ts +0 -21
- package/dist/plugin/capture-filter.js +0 -32
- package/dist/plugin/capture-filter.js.map +0 -1
- package/dist/plugin/config.d.ts +0 -61
- package/dist/plugin/config.js +0 -182
- package/dist/plugin/config.js.map +0 -1
- package/dist/plugin/context-files.d.ts +0 -23
- package/dist/plugin/context-files.js +0 -103
- package/dist/plugin/context-files.js.map +0 -1
- package/dist/plugin/context-format.d.ts +0 -18
- package/dist/plugin/context-format.js +0 -34
- package/dist/plugin/context-format.js.map +0 -1
- package/dist/plugin/file-manifest.d.ts +0 -27
- package/dist/plugin/file-manifest.js +0 -68
- package/dist/plugin/file-manifest.js.map +0 -1
- package/dist/plugin/file-scanner.d.ts +0 -19
- package/dist/plugin/file-scanner.js +0 -90
- package/dist/plugin/file-scanner.js.map +0 -1
- package/dist/plugin/nex-client.d.ts +0 -50
- package/dist/plugin/nex-client.js +0 -129
- package/dist/plugin/nex-client.js.map +0 -1
- package/dist/plugin/rate-limiter.d.ts +0 -26
- package/dist/plugin/rate-limiter.js +0 -65
- package/dist/plugin/rate-limiter.js.map +0 -1
- package/dist/plugin/recall-cache.d.ts +0 -41
- package/dist/plugin/recall-cache.js +0 -195
- package/dist/plugin/recall-cache.js.map +0 -1
- package/dist/plugin/recall-filter.d.ts +0 -13
- package/dist/plugin/recall-filter.js +0 -39
- package/dist/plugin/recall-filter.js.map +0 -1
- package/dist/plugin/session-store.d.ts +0 -23
- package/dist/plugin/session-store.js +0 -73
- package/dist/plugin/session-store.js.map +0 -1
- package/dist/plugin/workspace-data-dir.d.ts +0 -2
- package/dist/plugin/workspace-data-dir.js +0 -31
- package/dist/plugin/workspace-data-dir.js.map +0 -1
- package/dist/tui/agent-colors.d.ts +0 -19
- package/dist/tui/agent-colors.js +0 -34
- package/dist/tui/agent-colors.js.map +0 -1
- package/dist/tui/app.d.ts +0 -14
- package/dist/tui/app.js +0 -181
- package/dist/tui/app.js.map +0 -1
- package/dist/tui/channel-colors.d.ts +0 -16
- package/dist/tui/channel-colors.js +0 -43
- package/dist/tui/channel-colors.js.map +0 -1
- package/dist/tui/components/agent-card.d.ts +0 -11
- package/dist/tui/components/agent-card.js +0 -40
- package/dist/tui/components/agent-card.js.map +0 -1
- package/dist/tui/components/banner.d.ts +0 -44
- package/dist/tui/components/banner.js +0 -130
- package/dist/tui/components/banner.js.map +0 -1
- package/dist/tui/components/channel-colors.d.ts +0 -21
- package/dist/tui/components/channel-colors.js +0 -53
- package/dist/tui/components/channel-colors.js.map +0 -1
- package/dist/tui/components/channel-message.d.ts +0 -53
- package/dist/tui/components/channel-message.js +0 -66
- package/dist/tui/components/channel-message.js.map +0 -1
- package/dist/tui/components/chat-input.d.ts +0 -11
- package/dist/tui/components/chat-input.js +0 -19
- package/dist/tui/components/chat-input.js.map +0 -1
- package/dist/tui/components/data-table.d.ts +0 -11
- package/dist/tui/components/data-table.js +0 -47
- package/dist/tui/components/data-table.js.map +0 -1
- package/dist/tui/components/error-box.d.ts +0 -11
- package/dist/tui/components/error-box.js +0 -59
- package/dist/tui/components/error-box.js.map +0 -1
- package/dist/tui/components/help-screen.d.ts +0 -3
- package/dist/tui/components/help-screen.js +0 -63
- package/dist/tui/components/help-screen.js.map +0 -1
- package/dist/tui/components/index.d.ts +0 -17
- package/dist/tui/components/index.js +0 -10
- package/dist/tui/components/index.js.map +0 -1
- package/dist/tui/components/inline-confirm.d.ts +0 -14
- package/dist/tui/components/inline-confirm.js +0 -13
- package/dist/tui/components/inline-confirm.js.map +0 -1
- package/dist/tui/components/inline-select.d.ts +0 -21
- package/dist/tui/components/inline-select.js +0 -20
- package/dist/tui/components/inline-select.js.map +0 -1
- package/dist/tui/components/markdown.d.ts +0 -6
- package/dist/tui/components/markdown.js +0 -179
- package/dist/tui/components/markdown.js.map +0 -1
- package/dist/tui/components/mention-autocomplete.d.ts +0 -79
- package/dist/tui/components/mention-autocomplete.js +0 -250
- package/dist/tui/components/mention-autocomplete.js.map +0 -1
- package/dist/tui/components/message-list.d.ts +0 -18
- package/dist/tui/components/message-list.js +0 -29
- package/dist/tui/components/message-list.js.map +0 -1
- package/dist/tui/components/picker.d.ts +0 -16
- package/dist/tui/components/picker.js +0 -32
- package/dist/tui/components/picker.js.map +0 -1
- package/dist/tui/components/progress-steps.d.ts +0 -13
- package/dist/tui/components/progress-steps.js +0 -21
- package/dist/tui/components/progress-steps.js.map +0 -1
- package/dist/tui/components/slack/compose.d.ts +0 -27
- package/dist/tui/components/slack/compose.js +0 -147
- package/dist/tui/components/slack/compose.js.map +0 -1
- package/dist/tui/components/slack/layout.d.ts +0 -36
- package/dist/tui/components/slack/layout.js +0 -96
- package/dist/tui/components/slack/layout.js.map +0 -1
- package/dist/tui/components/slack/messages.d.ts +0 -72
- package/dist/tui/components/slack/messages.js +0 -177
- package/dist/tui/components/slack/messages.js.map +0 -1
- package/dist/tui/components/slack/quick-switcher.d.ts +0 -33
- package/dist/tui/components/slack/quick-switcher.js +0 -98
- package/dist/tui/components/slack/quick-switcher.js.map +0 -1
- package/dist/tui/components/slack/sidebar-types.d.ts +0 -65
- package/dist/tui/components/slack/sidebar-types.js +0 -7
- package/dist/tui/components/slack/sidebar-types.js.map +0 -1
- package/dist/tui/components/slack/sidebar.d.ts +0 -46
- package/dist/tui/components/slack/sidebar.js +0 -52
- package/dist/tui/components/slack/sidebar.js.map +0 -1
- package/dist/tui/components/slack/thread-panel.d.ts +0 -45
- package/dist/tui/components/slack/thread-panel.js +0 -47
- package/dist/tui/components/slack/thread-panel.js.map +0 -1
- package/dist/tui/components/slash-autocomplete.d.ts +0 -83
- package/dist/tui/components/slash-autocomplete.js +0 -233
- package/dist/tui/components/slash-autocomplete.js.map +0 -1
- package/dist/tui/components/spinner.d.ts +0 -17
- package/dist/tui/components/spinner.js +0 -30
- package/dist/tui/components/spinner.js.map +0 -1
- package/dist/tui/components/status-bar.d.ts +0 -23
- package/dist/tui/components/status-bar.js +0 -55
- package/dist/tui/components/status-bar.js.map +0 -1
- package/dist/tui/components/success-box.d.ts +0 -7
- package/dist/tui/components/success-box.js +0 -10
- package/dist/tui/components/success-box.js.map +0 -1
- package/dist/tui/components/tool-indicator.d.ts +0 -12
- package/dist/tui/components/tool-indicator.js +0 -18
- package/dist/tui/components/tool-indicator.js.map +0 -1
- package/dist/tui/components/viewport.d.ts +0 -9
- package/dist/tui/components/viewport.js +0 -24
- package/dist/tui/components/viewport.js.map +0 -1
- package/dist/tui/generative/bindings.d.ts +0 -27
- package/dist/tui/generative/bindings.js +0 -152
- package/dist/tui/generative/bindings.js.map +0 -1
- package/dist/tui/generative/registry.d.ts +0 -19
- package/dist/tui/generative/registry.js +0 -31
- package/dist/tui/generative/registry.js.map +0 -1
- package/dist/tui/generative/renderer.d.ts +0 -24
- package/dist/tui/generative/renderer.js +0 -160
- package/dist/tui/generative/renderer.js.map +0 -1
- package/dist/tui/generative/types.d.ts +0 -68
- package/dist/tui/generative/types.js +0 -7
- package/dist/tui/generative/types.js.map +0 -1
- package/dist/tui/hooks/use-cancellable.d.ts +0 -28
- package/dist/tui/hooks/use-cancellable.js +0 -51
- package/dist/tui/hooks/use-cancellable.js.map +0 -1
- package/dist/tui/hooks/use-streaming.d.ts +0 -44
- package/dist/tui/hooks/use-streaming.js +0 -105
- package/dist/tui/hooks/use-streaming.js.map +0 -1
- package/dist/tui/index.d.ts +0 -4
- package/dist/tui/index.js +0 -7
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/keybindings.d.ts +0 -25
- package/dist/tui/keybindings.js +0 -277
- package/dist/tui/keybindings.js.map +0 -1
- package/dist/tui/register-views.d.ts +0 -8
- package/dist/tui/register-views.js +0 -122
- package/dist/tui/register-views.js.map +0 -1
- package/dist/tui/router.d.ts +0 -29
- package/dist/tui/router.js +0 -87
- package/dist/tui/router.js.map +0 -1
- package/dist/tui/services/agent-service.d.ts +0 -58
- package/dist/tui/services/agent-service.js +0 -197
- package/dist/tui/services/agent-service.js.map +0 -1
- package/dist/tui/services/calendar-service.d.ts +0 -31
- package/dist/tui/services/calendar-service.js +0 -133
- package/dist/tui/services/calendar-service.js.map +0 -1
- package/dist/tui/services/chat-service.d.ts +0 -28
- package/dist/tui/services/chat-service.js +0 -91
- package/dist/tui/services/chat-service.js.map +0 -1
- package/dist/tui/services/orchestration-service.d.ts +0 -42
- package/dist/tui/services/orchestration-service.js +0 -153
- package/dist/tui/services/orchestration-service.js.map +0 -1
- package/dist/tui/slash-commands.d.ts +0 -106
- package/dist/tui/slash-commands.js +0 -1421
- package/dist/tui/slash-commands.js.map +0 -1
- package/dist/tui/store.d.ts +0 -96
- package/dist/tui/store.js +0 -120
- package/dist/tui/store.js.map +0 -1
- package/dist/tui/theme.d.ts +0 -40
- package/dist/tui/theme.js +0 -39
- package/dist/tui/theme.js.map +0 -1
- package/dist/tui/tui-context.d.ts +0 -22
- package/dist/tui/tui-context.js +0 -17
- package/dist/tui/tui-context.js.map +0 -1
- package/dist/tui/views/agent-list.d.ts +0 -8
- package/dist/tui/views/agent-list.js +0 -11
- package/dist/tui/views/agent-list.js.map +0 -1
- package/dist/tui/views/ask-chat.d.ts +0 -9
- package/dist/tui/views/ask-chat.js +0 -40
- package/dist/tui/views/ask-chat.js.map +0 -1
- package/dist/tui/views/calendar.d.ts +0 -15
- package/dist/tui/views/calendar.js +0 -29
- package/dist/tui/views/calendar.js.map +0 -1
- package/dist/tui/views/chat.d.ts +0 -18
- package/dist/tui/views/chat.js +0 -28
- package/dist/tui/views/chat.js.map +0 -1
- package/dist/tui/views/generative.d.ts +0 -14
- package/dist/tui/views/generative.js +0 -37
- package/dist/tui/views/generative.js.map +0 -1
- package/dist/tui/views/help.d.ts +0 -6
- package/dist/tui/views/help.js +0 -9
- package/dist/tui/views/help.js.map +0 -1
- package/dist/tui/views/home-screen.d.ts +0 -67
- package/dist/tui/views/home-screen.js +0 -192
- package/dist/tui/views/home-screen.js.map +0 -1
- package/dist/tui/views/home.d.ts +0 -33
- package/dist/tui/views/home.js +0 -60
- package/dist/tui/views/home.js.map +0 -1
- package/dist/tui/views/index.d.ts +0 -20
- package/dist/tui/views/index.js +0 -11
- package/dist/tui/views/index.js.map +0 -1
- package/dist/tui/views/insights.d.ts +0 -19
- package/dist/tui/views/insights.js +0 -46
- package/dist/tui/views/insights.js.map +0 -1
- package/dist/tui/views/orchestration.d.ts +0 -18
- package/dist/tui/views/orchestration.js +0 -73
- package/dist/tui/views/orchestration.js.map +0 -1
- package/dist/tui/views/record-detail.d.ts +0 -10
- package/dist/tui/views/record-detail.js +0 -22
- package/dist/tui/views/record-detail.js.map +0 -1
- package/dist/tui/views/record-list.d.ts +0 -15
- package/dist/tui/views/record-list.js +0 -22
- package/dist/tui/views/record-list.js.map +0 -1
- package/dist/tui/views/slack-channel-header.d.ts +0 -15
- package/dist/tui/views/slack-channel-header.js +0 -16
- package/dist/tui/views/slack-channel-header.js.map +0 -1
- package/dist/tui/views/slack-home.d.ts +0 -21
- package/dist/tui/views/slack-home.js +0 -572
- package/dist/tui/views/slack-home.js.map +0 -1
- package/dist/tui/views/stream.d.ts +0 -16
- package/dist/tui/views/stream.js +0 -210
- package/dist/tui/views/stream.js.map +0 -1
- package/dist/tui/views/task-board.d.ts +0 -21
- package/dist/tui/views/task-board.js +0 -33
- package/dist/tui/views/task-board.js.map +0 -1
- package/dist/tui/views/timeline.d.ts +0 -17
- package/dist/tui/views/timeline.js +0 -24
- package/dist/tui/views/timeline.js.map +0 -1
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
2
|
-
import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { join } from "node:path";
|
|
4
|
-
import { workspaceDataDir } from "./workspace-data-dir.js";
|
|
5
|
-
const DEFAULT_MAX = 100;
|
|
6
|
-
function isRecord(value) {
|
|
7
|
-
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
8
|
-
}
|
|
9
|
-
function sanitizePending(value) {
|
|
10
|
-
if (!isRecord(value))
|
|
11
|
-
return undefined;
|
|
12
|
-
if (typeof value.promptHash !== "string")
|
|
13
|
-
return undefined;
|
|
14
|
-
if (typeof value.createdAt !== "number")
|
|
15
|
-
return undefined;
|
|
16
|
-
return {
|
|
17
|
-
promptHash: value.promptHash,
|
|
18
|
-
createdAt: value.createdAt,
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
function sanitizeReady(value) {
|
|
22
|
-
if (!isRecord(value))
|
|
23
|
-
return undefined;
|
|
24
|
-
if (typeof value.promptHash !== "string")
|
|
25
|
-
return undefined;
|
|
26
|
-
if (typeof value.context !== "string")
|
|
27
|
-
return undefined;
|
|
28
|
-
if (typeof value.createdAt !== "number")
|
|
29
|
-
return undefined;
|
|
30
|
-
if (value.deliveredAt !== undefined && typeof value.deliveredAt !== "number") {
|
|
31
|
-
return undefined;
|
|
32
|
-
}
|
|
33
|
-
return {
|
|
34
|
-
promptHash: value.promptHash,
|
|
35
|
-
context: value.context,
|
|
36
|
-
createdAt: value.createdAt,
|
|
37
|
-
deliveredAt: typeof value.deliveredAt === "number" ? value.deliveredAt : undefined,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function sanitizeEntry(value) {
|
|
41
|
-
if (!isRecord(value))
|
|
42
|
-
return undefined;
|
|
43
|
-
const pending = sanitizePending(value.pending);
|
|
44
|
-
const ready = sanitizeReady(value.ready);
|
|
45
|
-
if (!pending && !ready)
|
|
46
|
-
return undefined;
|
|
47
|
-
return { pending, ready };
|
|
48
|
-
}
|
|
49
|
-
export function hashPrompt(prompt) {
|
|
50
|
-
return createHash("sha1").update(prompt).digest("hex");
|
|
51
|
-
}
|
|
52
|
-
export class RecallCache {
|
|
53
|
-
filePath;
|
|
54
|
-
maxSize;
|
|
55
|
-
constructor(config) {
|
|
56
|
-
const dataDir = config?.dataDir ?? workspaceDataDir();
|
|
57
|
-
this.maxSize = config?.maxSize ?? DEFAULT_MAX;
|
|
58
|
-
this.filePath = join(dataDir, "claude-recall-cache.json");
|
|
59
|
-
mkdirSync(dataDir, { recursive: true });
|
|
60
|
-
}
|
|
61
|
-
readStore() {
|
|
62
|
-
try {
|
|
63
|
-
const raw = readFileSync(this.filePath, "utf-8");
|
|
64
|
-
const parsed = JSON.parse(raw);
|
|
65
|
-
if (!isRecord(parsed))
|
|
66
|
-
return {};
|
|
67
|
-
const store = {};
|
|
68
|
-
for (const [key, value] of Object.entries(parsed)) {
|
|
69
|
-
const entry = sanitizeEntry(value);
|
|
70
|
-
if (entry)
|
|
71
|
-
store[key] = entry;
|
|
72
|
-
}
|
|
73
|
-
return store;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return {};
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
writeStore(store) {
|
|
80
|
-
try {
|
|
81
|
-
writeFileSync(this.filePath, JSON.stringify(store), "utf-8");
|
|
82
|
-
}
|
|
83
|
-
catch {
|
|
84
|
-
// Best-effort — cache misses are acceptable.
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
trimStore(store) {
|
|
88
|
-
const keys = Object.keys(store);
|
|
89
|
-
while (keys.length > this.maxSize) {
|
|
90
|
-
delete store[keys.shift()];
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
pruneEmptyEntry(store, sessionKey) {
|
|
94
|
-
const entry = store[sessionKey];
|
|
95
|
-
if (!entry)
|
|
96
|
-
return;
|
|
97
|
-
if (!entry.pending && !entry.ready) {
|
|
98
|
-
delete store[sessionKey];
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
get(sessionKey) {
|
|
102
|
-
return this.readStore()[sessionKey];
|
|
103
|
-
}
|
|
104
|
-
list() {
|
|
105
|
-
return this.readStore();
|
|
106
|
-
}
|
|
107
|
-
setPending(sessionKey, promptHash, now = Date.now()) {
|
|
108
|
-
const store = this.readStore();
|
|
109
|
-
const current = store[sessionKey] ?? {};
|
|
110
|
-
current.pending = { promptHash, createdAt: now };
|
|
111
|
-
store[sessionKey] = current;
|
|
112
|
-
this.trimStore(store);
|
|
113
|
-
this.writeStore(store);
|
|
114
|
-
}
|
|
115
|
-
hasPending(sessionKey, promptHash, maxAgeMs, now = Date.now()) {
|
|
116
|
-
const store = this.readStore();
|
|
117
|
-
const current = store[sessionKey];
|
|
118
|
-
const pending = current?.pending;
|
|
119
|
-
if (!pending)
|
|
120
|
-
return false;
|
|
121
|
-
if (now - pending.createdAt > maxAgeMs) {
|
|
122
|
-
delete current.pending;
|
|
123
|
-
this.pruneEmptyEntry(store, sessionKey);
|
|
124
|
-
this.writeStore(store);
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
return pending.promptHash === promptHash;
|
|
128
|
-
}
|
|
129
|
-
clearPending(sessionKey, promptHash) {
|
|
130
|
-
const store = this.readStore();
|
|
131
|
-
const current = store[sessionKey];
|
|
132
|
-
if (!current?.pending)
|
|
133
|
-
return false;
|
|
134
|
-
if (promptHash && current.pending.promptHash !== promptHash) {
|
|
135
|
-
return false;
|
|
136
|
-
}
|
|
137
|
-
delete current.pending;
|
|
138
|
-
this.pruneEmptyEntry(store, sessionKey);
|
|
139
|
-
this.writeStore(store);
|
|
140
|
-
return true;
|
|
141
|
-
}
|
|
142
|
-
setReady(sessionKey, ready, now = Date.now()) {
|
|
143
|
-
const store = this.readStore();
|
|
144
|
-
const current = store[sessionKey] ?? {};
|
|
145
|
-
current.ready = {
|
|
146
|
-
promptHash: ready.promptHash,
|
|
147
|
-
context: ready.context,
|
|
148
|
-
createdAt: now,
|
|
149
|
-
};
|
|
150
|
-
if (current.pending?.promptHash === ready.promptHash) {
|
|
151
|
-
delete current.pending;
|
|
152
|
-
}
|
|
153
|
-
store[sessionKey] = current;
|
|
154
|
-
this.trimStore(store);
|
|
155
|
-
this.writeStore(store);
|
|
156
|
-
}
|
|
157
|
-
getInjectable(sessionKey, maxAgeMs, now = Date.now()) {
|
|
158
|
-
const store = this.readStore();
|
|
159
|
-
const current = store[sessionKey];
|
|
160
|
-
const ready = current?.ready;
|
|
161
|
-
if (!ready)
|
|
162
|
-
return undefined;
|
|
163
|
-
if (ready.deliveredAt !== undefined)
|
|
164
|
-
return undefined;
|
|
165
|
-
if (now - ready.createdAt > maxAgeMs) {
|
|
166
|
-
delete current.ready;
|
|
167
|
-
this.pruneEmptyEntry(store, sessionKey);
|
|
168
|
-
this.writeStore(store);
|
|
169
|
-
return undefined;
|
|
170
|
-
}
|
|
171
|
-
return ready;
|
|
172
|
-
}
|
|
173
|
-
markReadyDelivered(sessionKey, now = Date.now()) {
|
|
174
|
-
const store = this.readStore();
|
|
175
|
-
const current = store[sessionKey];
|
|
176
|
-
if (!current?.ready || current.ready.deliveredAt !== undefined) {
|
|
177
|
-
return false;
|
|
178
|
-
}
|
|
179
|
-
current.ready.deliveredAt = now;
|
|
180
|
-
this.writeStore(store);
|
|
181
|
-
return true;
|
|
182
|
-
}
|
|
183
|
-
delete(sessionKey) {
|
|
184
|
-
const store = this.readStore();
|
|
185
|
-
if (!(sessionKey in store))
|
|
186
|
-
return false;
|
|
187
|
-
delete store[sessionKey];
|
|
188
|
-
this.writeStore(store);
|
|
189
|
-
return true;
|
|
190
|
-
}
|
|
191
|
-
clear() {
|
|
192
|
-
this.writeStore({});
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
//# sourceMappingURL=recall-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recall-cache.js","sourceRoot":"","sources":["../../src/plugin/recall-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal recall filter for Claude Code.
|
|
3
|
-
*
|
|
4
|
-
* The intended behavior is to query Nex for nearly every user message and
|
|
5
|
-
* skip only clearly low-signal input such as very short replies, explicit
|
|
6
|
-
* opt-outs, or raw shell commands. Natural-language coding prompts still go
|
|
7
|
-
* through Ask so memory is available during regular coding turns.
|
|
8
|
-
*/
|
|
9
|
-
export interface RecallDecision {
|
|
10
|
-
shouldRecall: boolean;
|
|
11
|
-
reason: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function shouldRecall(prompt: string, isFirstPrompt: boolean): RecallDecision;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Minimal recall filter for Claude Code.
|
|
3
|
-
*
|
|
4
|
-
* The intended behavior is to query Nex for nearly every user message and
|
|
5
|
-
* skip only clearly low-signal input such as very short replies, explicit
|
|
6
|
-
* opt-outs, or raw shell commands. Natural-language coding prompts still go
|
|
7
|
-
* through Ask so memory is available during regular coding turns.
|
|
8
|
-
*/
|
|
9
|
-
const MIN_RECALL_LENGTH = 15;
|
|
10
|
-
const NATURAL_LANGUAGE_HINTS = /\b(please|can|could|would|should|what|when|where|why|how|who|tell|explain|describe|summarize|check|review|look|find|show|help|about|for|to|with|without|into|from|before|after|need|want|current|my|our|this|that)\b/i;
|
|
11
|
-
const BARE_SHELL_COMMAND = /^(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+)*(?:ls|pwd|cd|cat|grep|rg|find|mkdir|rm|cp|mv|touch|echo|git|npm|npx|yarn|pnpm|bun|node|python|python3|pytest|make|docker|kubectl|terraform)\b/i;
|
|
12
|
-
const COMMAND_TOKEN = /^(?:[A-Za-z_][A-Za-z0-9_]*=\S+|--?[\w./:=@%+,~-]+|[\w./:=@%+,~-]+|["'][^"']*["'])$/;
|
|
13
|
-
function looksLikeBareShellCommand(prompt) {
|
|
14
|
-
if (!BARE_SHELL_COMMAND.test(prompt)) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
if (NATURAL_LANGUAGE_HINTS.test(prompt)) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
return prompt.split(/\s+/).every((token) => COMMAND_TOKEN.test(token));
|
|
21
|
-
}
|
|
22
|
-
export function shouldRecall(prompt, isFirstPrompt) {
|
|
23
|
-
const trimmed = prompt.trim();
|
|
24
|
-
// Explicit opt-out: prompt starts with !
|
|
25
|
-
if (trimmed.startsWith("!")) {
|
|
26
|
-
return { shouldRecall: false, reason: "opt-out" };
|
|
27
|
-
}
|
|
28
|
-
if (trimmed.length < MIN_RECALL_LENGTH) {
|
|
29
|
-
return { shouldRecall: false, reason: "too-short" };
|
|
30
|
-
}
|
|
31
|
-
if (looksLikeBareShellCommand(trimmed)) {
|
|
32
|
-
return { shouldRecall: false, reason: "bare-shell-command" };
|
|
33
|
-
}
|
|
34
|
-
if (isFirstPrompt) {
|
|
35
|
-
return { shouldRecall: true, reason: "first-prompt" };
|
|
36
|
-
}
|
|
37
|
-
return { shouldRecall: true, reason: "default" };
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=recall-filter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recall-filter.js","sourceRoot":"","sources":["../../src/plugin/recall-filter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAC7B,MAAM,sBAAsB,GAC1B,uNAAuN,CAAC;AAC1N,MAAM,kBAAkB,GACtB,mLAAmL,CAAC;AACtL,MAAM,aAAa,GAAG,oFAAoF,CAAC;AAO3G,SAAS,yBAAyB,CAAC,MAAc;IAC/C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,aAAsB;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9B,yCAAyC;IACzC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACvC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File-based session store mapping Claude Code session IDs to Nex session IDs.
|
|
3
|
-
*
|
|
4
|
-
* Since Claude Code hooks are short-lived processes (start, run, exit),
|
|
5
|
-
* in-memory state is lost between invocations. This implementation persists
|
|
6
|
-
* session mappings to a JSON file so multi-turn continuity works.
|
|
7
|
-
*/
|
|
8
|
-
export interface SessionStoreConfig {
|
|
9
|
-
maxSize: number;
|
|
10
|
-
dataDir: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class SessionStore {
|
|
13
|
-
private filePath;
|
|
14
|
-
private maxSize;
|
|
15
|
-
constructor(config?: Partial<SessionStoreConfig>);
|
|
16
|
-
private readStore;
|
|
17
|
-
private writeStore;
|
|
18
|
-
get(sessionKey: string): string | undefined;
|
|
19
|
-
set(sessionKey: string, nexSessionId: string): void;
|
|
20
|
-
delete(sessionKey: string): boolean;
|
|
21
|
-
get size(): number;
|
|
22
|
-
clear(): void;
|
|
23
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* File-based session store mapping Claude Code session IDs to Nex session IDs.
|
|
3
|
-
*
|
|
4
|
-
* Since Claude Code hooks are short-lived processes (start, run, exit),
|
|
5
|
-
* in-memory state is lost between invocations. This implementation persists
|
|
6
|
-
* session mappings to a JSON file so multi-turn continuity works.
|
|
7
|
-
*/
|
|
8
|
-
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
9
|
-
import { join } from "node:path";
|
|
10
|
-
import { workspaceDataDir } from "./workspace-data-dir.js";
|
|
11
|
-
const DEFAULT_MAX = 100;
|
|
12
|
-
export class SessionStore {
|
|
13
|
-
filePath;
|
|
14
|
-
maxSize;
|
|
15
|
-
constructor(config) {
|
|
16
|
-
const dataDir = config?.dataDir ?? workspaceDataDir();
|
|
17
|
-
this.maxSize = config?.maxSize ?? DEFAULT_MAX;
|
|
18
|
-
this.filePath = join(dataDir, "claude-sessions.json");
|
|
19
|
-
mkdirSync(dataDir, { recursive: true });
|
|
20
|
-
}
|
|
21
|
-
readStore() {
|
|
22
|
-
try {
|
|
23
|
-
const raw = readFileSync(this.filePath, "utf-8");
|
|
24
|
-
const data = JSON.parse(raw);
|
|
25
|
-
if (data && typeof data === "object" && !Array.isArray(data)) {
|
|
26
|
-
return data;
|
|
27
|
-
}
|
|
28
|
-
return {};
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
return {};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
writeStore(store) {
|
|
35
|
-
try {
|
|
36
|
-
writeFileSync(this.filePath, JSON.stringify(store), "utf-8");
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
// Best-effort — if we can't write, session continuity degrades gracefully
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
get(sessionKey) {
|
|
43
|
-
const store = this.readStore();
|
|
44
|
-
return store[sessionKey];
|
|
45
|
-
}
|
|
46
|
-
set(sessionKey, nexSessionId) {
|
|
47
|
-
const store = this.readStore();
|
|
48
|
-
store[sessionKey] = nexSessionId;
|
|
49
|
-
// Evict oldest entries if over max size
|
|
50
|
-
const keys = Object.keys(store);
|
|
51
|
-
while (keys.length > this.maxSize) {
|
|
52
|
-
const oldest = keys.shift();
|
|
53
|
-
delete store[oldest];
|
|
54
|
-
}
|
|
55
|
-
this.writeStore(store);
|
|
56
|
-
}
|
|
57
|
-
delete(sessionKey) {
|
|
58
|
-
const store = this.readStore();
|
|
59
|
-
if (sessionKey in store) {
|
|
60
|
-
delete store[sessionKey];
|
|
61
|
-
this.writeStore(store);
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
return false;
|
|
65
|
-
}
|
|
66
|
-
get size() {
|
|
67
|
-
return Object.keys(this.readStore()).length;
|
|
68
|
-
}
|
|
69
|
-
clear() {
|
|
70
|
-
this.writeStore({});
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=session-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/plugin/session-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,WAAW,GAAG,GAAG,CAAC;AAOxB,MAAM,OAAO,YAAY;IACf,QAAQ,CAAS;IACjB,OAAO,CAAS;IAExB,YAAY,MAAoC;QAC9C,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,gBAAgB,EAAE,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,WAAW,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;QACtD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAEO,SAAS;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7D,OAAO,IAA8B,CAAC;YACxC,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,KAA6B;QAC9C,IAAI,CAAC;YACH,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;IACH,CAAC;IAED,GAAG,CAAC,UAAkB;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,UAAkB,EAAE,YAAoB;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,UAAU,CAAC,GAAG,YAAY,CAAC;QAEjC,wCAAwC;QACxC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAG,CAAC;YAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CAAC,UAAkB;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,UAAU,CAAC,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;IAC9C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolve the active workspace's data directory.
|
|
3
|
-
* Reads from ~/.nex/config.json (workspace registry format).
|
|
4
|
-
* Falls back to ~/.nex/ if no workspace is configured (pre-migration).
|
|
5
|
-
*
|
|
6
|
-
* Intentionally duplicated from cli/src/lib/workspace-registry.ts to avoid
|
|
7
|
-
* cross-package imports. This is a lightweight reader — no migration logic.
|
|
8
|
-
*/
|
|
9
|
-
import { readFileSync } from "node:fs";
|
|
10
|
-
import { join } from "node:path";
|
|
11
|
-
import { homedir } from "node:os";
|
|
12
|
-
const BASE_DIR = process.env.NEX_BASE_DIR || join(homedir(), ".nex");
|
|
13
|
-
let _cached;
|
|
14
|
-
export function workspaceDataDir() {
|
|
15
|
-
if (_cached)
|
|
16
|
-
return _cached;
|
|
17
|
-
try {
|
|
18
|
-
const raw = readFileSync(join(BASE_DIR, "config.json"), "utf-8");
|
|
19
|
-
const config = JSON.parse(raw);
|
|
20
|
-
if (config.active_workspace) {
|
|
21
|
-
_cached = join(BASE_DIR, "workspaces", config.active_workspace);
|
|
22
|
-
return _cached;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
catch { /* No config or parse error — fall back */ }
|
|
26
|
-
return BASE_DIR;
|
|
27
|
-
}
|
|
28
|
-
export function resetWorkspaceCache() {
|
|
29
|
-
_cached = undefined;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=workspace-data-dir.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-data-dir.js","sourceRoot":"","sources":["../../src/plugin/workspace-data-dir.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;AAErE,IAAI,OAA2B,CAAC;AAEhC,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAChE,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,0CAA0C,CAAC,CAAC;IACtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Persistent agent color assignment.
|
|
3
|
-
*
|
|
4
|
-
* Each agent slug gets a stable color from a palette of six terminal-safe
|
|
5
|
-
* colours. Assignments survive re-renders (module-level map) and cycle
|
|
6
|
-
* through the palette so every new agent gets the next colour in order.
|
|
7
|
-
*/
|
|
8
|
-
declare const AGENT_COLORS: readonly ["cyan", "green", "yellow", "magenta", "blue", "red"];
|
|
9
|
-
export type AgentColor = typeof AGENT_COLORS[number];
|
|
10
|
-
/**
|
|
11
|
-
* Return the colour assigned to `agentSlug`, assigning a new one on first
|
|
12
|
-
* encounter. The same slug always returns the same colour.
|
|
13
|
-
*/
|
|
14
|
-
export declare function getAgentColor(agentSlug: string): AgentColor;
|
|
15
|
-
/** Read-only snapshot of the current colour map. */
|
|
16
|
-
export declare function getAllAgentColors(): ReadonlyMap<string, AgentColor>;
|
|
17
|
-
/** Reset all assignments (useful in tests). */
|
|
18
|
-
export declare function resetAgentColors(): void;
|
|
19
|
-
export {};
|
package/dist/tui/agent-colors.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Persistent agent color assignment.
|
|
3
|
-
*
|
|
4
|
-
* Each agent slug gets a stable color from a palette of six terminal-safe
|
|
5
|
-
* colours. Assignments survive re-renders (module-level map) and cycle
|
|
6
|
-
* through the palette so every new agent gets the next colour in order.
|
|
7
|
-
*/
|
|
8
|
-
const AGENT_COLORS = ['cyan', 'green', 'yellow', 'magenta', 'blue', 'red'];
|
|
9
|
-
// Module-level state so colours persist across renders.
|
|
10
|
-
const colorMap = new Map();
|
|
11
|
-
let nextColorIdx = 0;
|
|
12
|
-
/**
|
|
13
|
-
* Return the colour assigned to `agentSlug`, assigning a new one on first
|
|
14
|
-
* encounter. The same slug always returns the same colour.
|
|
15
|
-
*/
|
|
16
|
-
export function getAgentColor(agentSlug) {
|
|
17
|
-
const existing = colorMap.get(agentSlug);
|
|
18
|
-
if (existing !== undefined)
|
|
19
|
-
return existing;
|
|
20
|
-
const color = AGENT_COLORS[nextColorIdx % AGENT_COLORS.length];
|
|
21
|
-
colorMap.set(agentSlug, color);
|
|
22
|
-
nextColorIdx++;
|
|
23
|
-
return color;
|
|
24
|
-
}
|
|
25
|
-
/** Read-only snapshot of the current colour map. */
|
|
26
|
-
export function getAllAgentColors() {
|
|
27
|
-
return new Map(colorMap);
|
|
28
|
-
}
|
|
29
|
-
/** Reset all assignments (useful in tests). */
|
|
30
|
-
export function resetAgentColors() {
|
|
31
|
-
colorMap.clear();
|
|
32
|
-
nextColorIdx = 0;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=agent-colors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"agent-colors.js","sourceRoot":"","sources":["../../src/tui/agent-colors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAGpF,wDAAwD;AACxD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;AAC/C,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,KAAK,GAAG,YAAY,CAAC,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/D,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/B,YAAY,EAAE,CAAC;IACf,OAAO,KAAK,CAAC;AACf,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,+CAA+C;AAC/C,MAAM,UAAU,gBAAgB;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,YAAY,GAAG,CAAC,CAAC;AACnB,CAAC"}
|
package/dist/tui/app.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Root Ink application.
|
|
3
|
-
* Wraps everything in theme context + TuiContext, handles global key events,
|
|
4
|
-
* renders the router and a single status bar.
|
|
5
|
-
*
|
|
6
|
-
* Ctrl+C behavior:
|
|
7
|
-
* - During loading: cancels current operation, shows "^C (interrupted)"
|
|
8
|
-
* - When idle: first press shows "Press Ctrl+C again to exit",
|
|
9
|
-
* second press within 1s exits the process
|
|
10
|
-
*/
|
|
11
|
-
import "./register-views.js";
|
|
12
|
-
export { useTuiState } from "./tui-context.js";
|
|
13
|
-
export type { TuiContextValue } from "./tui-context.js";
|
|
14
|
-
export declare function App(): import("react/jsx-runtime").JSX.Element;
|
package/dist/tui/app.js
DELETED
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Root Ink application.
|
|
4
|
-
* Wraps everything in theme context + TuiContext, handles global key events,
|
|
5
|
-
* renders the router and a single status bar.
|
|
6
|
-
*
|
|
7
|
-
* Ctrl+C behavior:
|
|
8
|
-
* - During loading: cancels current operation, shows "^C (interrupted)"
|
|
9
|
-
* - When idle: first press shows "Press Ctrl+C again to exit",
|
|
10
|
-
* second press within 1s exits the process
|
|
11
|
-
*/
|
|
12
|
-
import { useState, useEffect, useCallback, useMemo, useRef } from "react";
|
|
13
|
-
import { Box, Text, useInput, useApp } from "ink";
|
|
14
|
-
import { createStore } from "./store.js";
|
|
15
|
-
import { handleKey } from "./keybindings.js";
|
|
16
|
-
import { ThemeProvider } from "./theme.js";
|
|
17
|
-
import { Router } from "./router.js";
|
|
18
|
-
import { StatusBar as ComponentStatusBar } from "./components/status-bar.js";
|
|
19
|
-
import { TuiContext } from "./tui-context.js";
|
|
20
|
-
// Register all views with the router (side-effect import)
|
|
21
|
-
import "./register-views.js";
|
|
22
|
-
// Re-export context hook for convenience
|
|
23
|
-
export { useTuiState } from "./tui-context.js";
|
|
24
|
-
// ── Constants ─────────────────────────────────────────────────────────
|
|
25
|
-
const CTRL_C_WINDOW_MS = 1000;
|
|
26
|
-
const INTERRUPTED_DISPLAY_MS = 2000;
|
|
27
|
-
const EXIT_HINT_DISPLAY_MS = 2000;
|
|
28
|
-
// ── Status bar adapter ─────────────────────────────────────────────
|
|
29
|
-
function AppStatusBar({ state }) {
|
|
30
|
-
const breadcrumbs = state.viewStack.map((v) => v.name);
|
|
31
|
-
const currentViewName = state.viewStack[state.viewStack.length - 1]?.name ?? "home";
|
|
32
|
-
const inputViews = new Set(["home", "chat", "ask-chat"]);
|
|
33
|
-
const isInputView = inputViews.has(currentViewName);
|
|
34
|
-
const hint = state.loading
|
|
35
|
-
? state.loadingHint || "loading..."
|
|
36
|
-
: isInputView
|
|
37
|
-
? currentViewName === "home"
|
|
38
|
-
? "Tab=complete /help=commands Ctrl+C=exit"
|
|
39
|
-
: "Esc=back | type to send"
|
|
40
|
-
: "Esc=back | j/k=nav Enter=select";
|
|
41
|
-
return (_jsx(ComponentStatusBar, { mode: state.mode, breadcrumbs: breadcrumbs.length > 0 ? breadcrumbs : ["home"], hint: hint, conversationMode: isInputView, session: state.session ?? undefined }));
|
|
42
|
-
}
|
|
43
|
-
// ── App component ──────────────────────────────────────────────────
|
|
44
|
-
export function App() {
|
|
45
|
-
const store = useMemo(() => createStore(), []);
|
|
46
|
-
const [state, setState] = useState(store.getState);
|
|
47
|
-
const [interrupted, setInterrupted] = useState(false);
|
|
48
|
-
const [exitHint, setExitHint] = useState(false);
|
|
49
|
-
const { exit } = useApp();
|
|
50
|
-
// Track last Ctrl+C press time for double-press detection
|
|
51
|
-
const lastCtrlCTime = useRef(0);
|
|
52
|
-
// Subscribe to store changes
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
const unsub = store.subscribe(() => {
|
|
55
|
-
setState(store.getState());
|
|
56
|
-
});
|
|
57
|
-
return unsub;
|
|
58
|
-
}, [store]);
|
|
59
|
-
// Override process.exit for clean shutdown within Ink
|
|
60
|
-
const originalExit = useMemo(() => process.exit, []);
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
const handler = ((_code) => {
|
|
63
|
-
exit();
|
|
64
|
-
// Ensure the Node process actually terminates after Ink unmounts
|
|
65
|
-
setTimeout(() => originalExit(_code ?? 0), 150);
|
|
66
|
-
});
|
|
67
|
-
process.exit = handler;
|
|
68
|
-
return () => {
|
|
69
|
-
process.exit = originalExit;
|
|
70
|
-
};
|
|
71
|
-
}, [exit, originalExit]);
|
|
72
|
-
// Cancel function: aborts current loading operation
|
|
73
|
-
const cancel = useCallback(() => {
|
|
74
|
-
const currentState = store.getState();
|
|
75
|
-
if (currentState.loading) {
|
|
76
|
-
store.dispatch({ type: "SET_LOADING", loading: false, hint: "" });
|
|
77
|
-
setInterrupted(true);
|
|
78
|
-
setTimeout(() => setInterrupted(false), INTERRUPTED_DISPLAY_MS);
|
|
79
|
-
}
|
|
80
|
-
}, [store]);
|
|
81
|
-
// Clear interrupted when new loading starts
|
|
82
|
-
useEffect(() => {
|
|
83
|
-
if (state.loading) {
|
|
84
|
-
setInterrupted(false);
|
|
85
|
-
setExitHint(false);
|
|
86
|
-
}
|
|
87
|
-
}, [state.loading]);
|
|
88
|
-
// Ctrl+C handler
|
|
89
|
-
const handleCtrlC = useCallback(() => {
|
|
90
|
-
const now = Date.now();
|
|
91
|
-
const currentState = store.getState();
|
|
92
|
-
// During loading: cancel the operation
|
|
93
|
-
if (currentState.loading) {
|
|
94
|
-
cancel();
|
|
95
|
-
lastCtrlCTime.current = now;
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
// When idle: double-press to exit
|
|
99
|
-
if (now - lastCtrlCTime.current <= CTRL_C_WINDOW_MS) {
|
|
100
|
-
// Second press within window → exit
|
|
101
|
-
process.exit(0);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
// First idle press → show exit hint
|
|
105
|
-
lastCtrlCTime.current = now;
|
|
106
|
-
setExitHint(true);
|
|
107
|
-
setTimeout(() => setExitHint(false), EXIT_HINT_DISPLAY_MS);
|
|
108
|
-
}, [store, cancel]);
|
|
109
|
-
// Global key handler
|
|
110
|
-
const onInput = useCallback((input, key) => {
|
|
111
|
-
const currentView = state.viewStack[state.viewStack.length - 1]?.name ?? "home";
|
|
112
|
-
// Views that have their own text input — pass keys through
|
|
113
|
-
// so users can type without vim mode. Only intercept Escape (back)
|
|
114
|
-
// and Ctrl+C (cancel/exit).
|
|
115
|
-
const inputViews = new Set(["home", "chat", "ask-chat"]);
|
|
116
|
-
const isInputView = inputViews.has(currentView);
|
|
117
|
-
if (isInputView) {
|
|
118
|
-
if (key.ctrl && key.name === "c") {
|
|
119
|
-
handleCtrlC();
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
if (key.escape && currentView !== "home") {
|
|
123
|
-
store.dispatch({ type: "POP_VIEW" });
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
// Home stream: only intercept Tab (autocomplete) and arrows (autocomplete nav)
|
|
127
|
-
if (currentView === "home") {
|
|
128
|
-
const g = globalThis;
|
|
129
|
-
if (key.name === "tab" && !key.shift) {
|
|
130
|
-
const tabFn = g.__nexHomeTabComplete;
|
|
131
|
-
if (tabFn)
|
|
132
|
-
tabFn(1);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (key.name === "up" || key.name === "down") {
|
|
136
|
-
const acNav = g.__nexHomeAutocompleteNav;
|
|
137
|
-
if (acNav && acNav(key.name === "up" ? -1 : 1))
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// Everything else → TextInput
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
// In non-input views, use the full keybinding handler
|
|
145
|
-
let raw = input;
|
|
146
|
-
if (key.escape)
|
|
147
|
-
raw = "\x1b";
|
|
148
|
-
if (key.ctrl && key.name) {
|
|
149
|
-
if (key.name === "c") {
|
|
150
|
-
handleCtrlC();
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const code = key.name.charCodeAt(0) - 96;
|
|
154
|
-
if (code > 0 && code <= 26)
|
|
155
|
-
raw = String.fromCharCode(code);
|
|
156
|
-
}
|
|
157
|
-
if (key.name === "up" ||
|
|
158
|
-
key.name === "down" ||
|
|
159
|
-
key.name === "left" ||
|
|
160
|
-
key.name === "right") {
|
|
161
|
-
const arrowMap = {
|
|
162
|
-
up: "\x1b[A",
|
|
163
|
-
down: "\x1b[B",
|
|
164
|
-
right: "\x1b[C",
|
|
165
|
-
left: "\x1b[D",
|
|
166
|
-
};
|
|
167
|
-
raw = arrowMap[key.name] ?? raw;
|
|
168
|
-
}
|
|
169
|
-
if (key.name === "return")
|
|
170
|
-
raw = "\r";
|
|
171
|
-
if (key.name === "tab")
|
|
172
|
-
raw = "\t";
|
|
173
|
-
if (key.name === "backspace")
|
|
174
|
-
raw = "\x7f";
|
|
175
|
-
handleKey(raw, store.getState(), store.dispatch);
|
|
176
|
-
}, [store, state.viewStack, handleCtrlC]);
|
|
177
|
-
useInput(onInput);
|
|
178
|
-
const tuiContextValue = useMemo(() => ({ state, dispatch: store.dispatch, store, cancel }), [state, store, cancel]);
|
|
179
|
-
return (_jsx(ThemeProvider, { children: _jsx(TuiContext.Provider, { value: tuiContextValue, children: _jsxs(Box, { flexDirection: "column", minHeight: 10, children: [_jsx(Box, { flexDirection: "column", flexGrow: 1, children: _jsx(Router, { viewStack: state.viewStack, dispatch: store.dispatch }) }), interrupted && (_jsxs(Box, { paddingX: 2, children: [_jsx(Text, { dimColor: true, children: "^C" }), _jsx(Text, { color: "red", children: " (interrupted)" })] })), exitHint && !interrupted && (_jsx(Box, { paddingX: 2, children: _jsx(Text, { dimColor: true, children: "Press Ctrl+C again to exit" }) })), _jsx(AppStatusBar, { state: state })] }) }) }));
|
|
180
|
-
}
|
|
181
|
-
//# sourceMappingURL=app.js.map
|