@nex-ai/nex 0.1.65 → 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 -1544
- 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 -111
- 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 -584
- 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/compounding-worker.d.ts +0 -2
- package/dist/lib/compounding-worker.js +0 -21
- package/dist/lib/compounding-worker.js.map +0 -1
- package/dist/lib/compounding.d.ts +0 -20
- package/dist/lib/compounding.js +0 -45
- package/dist/lib/compounding.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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph-html.js","sourceRoot":"","sources":["../../src/lib/graph-html.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/installers.d.ts
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Platform-specific installers for Nex MCP server, hooks, plugins, agents, and workflows.
|
|
3
|
-
*
|
|
4
|
-
* Installation hierarchy (per platform):
|
|
5
|
-
* 1. Hooks (event-driven scripts)
|
|
6
|
-
* 2. Custom tools/plugins (OpenCode plugin, OpenClaw plugin)
|
|
7
|
-
* 3. Custom agents/modes (VS Code agent, Kilo Code mode)
|
|
8
|
-
* 4. Workflows/slash commands (Windsurf workflows)
|
|
9
|
-
* 5. Rules (instruction files)
|
|
10
|
-
* 6. MCP (tool protocol)
|
|
11
|
-
*/
|
|
12
|
-
import type { Platform } from "./platform-detect.js";
|
|
13
|
-
export declare function installMcpServer(platform: Platform, apiKey: string): {
|
|
14
|
-
installed: boolean;
|
|
15
|
-
configPath: string;
|
|
16
|
-
};
|
|
17
|
-
export declare function installClaudeCodePlugin(): {
|
|
18
|
-
installed: boolean;
|
|
19
|
-
hooksAdded: string[];
|
|
20
|
-
commandsCopied: string[];
|
|
21
|
-
};
|
|
22
|
-
/**
|
|
23
|
-
* Install hook scripts for platforms that support event-driven hooks.
|
|
24
|
-
* Each platform has its own adapter scripts in dist/plugin/adapters/.
|
|
25
|
-
*/
|
|
26
|
-
export declare function installHooks(platform: Platform): {
|
|
27
|
-
installed: boolean;
|
|
28
|
-
hooksAdded: string[];
|
|
29
|
-
};
|
|
30
|
-
/**
|
|
31
|
-
* Install OpenCode plugin template to .opencode/plugins/nex.ts.
|
|
32
|
-
*/
|
|
33
|
-
export declare function installOpenCodePlugin(): {
|
|
34
|
-
installed: boolean;
|
|
35
|
-
pluginPath: string;
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Install OpenClaw plugin via CLI.
|
|
39
|
-
*/
|
|
40
|
-
export declare function installOpenClawPlugin(apiKey: string): {
|
|
41
|
-
installed: boolean;
|
|
42
|
-
message: string;
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Install VS Code custom agent (.github/agents/nex.agent.md).
|
|
46
|
-
*/
|
|
47
|
-
export declare function installVSCodeAgent(): {
|
|
48
|
-
installed: boolean;
|
|
49
|
-
agentPath: string;
|
|
50
|
-
};
|
|
51
|
-
/**
|
|
52
|
-
* Install Kilo Code custom mode (.kilocodemodes YAML).
|
|
53
|
-
*/
|
|
54
|
-
export declare function installKiloCodeMode(): {
|
|
55
|
-
installed: boolean;
|
|
56
|
-
modePath: string;
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* Install Continue.dev context provider template.
|
|
60
|
-
*/
|
|
61
|
-
export declare function installContinueProvider(): {
|
|
62
|
-
installed: boolean;
|
|
63
|
-
providerPath: string;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Install Windsurf workflow files (slash commands).
|
|
67
|
-
*/
|
|
68
|
-
export declare function installWindsurfWorkflows(): {
|
|
69
|
-
installed: boolean;
|
|
70
|
-
workflowCount: number;
|
|
71
|
-
};
|
|
72
|
-
export declare function installRulesFile(platform: Platform): {
|
|
73
|
-
installed: boolean;
|
|
74
|
-
rulesPath: string;
|
|
75
|
-
};
|
|
76
|
-
/**
|
|
77
|
-
* Persist API key to the canonical config file (~/.nex/config.json).
|
|
78
|
-
* Name kept as syncApiKeyToMcpConfig for backward compatibility with callers.
|
|
79
|
-
*/
|
|
80
|
-
export declare function syncApiKeyToMcpConfig(apiKey: string): void;
|
package/dist/lib/installers.js
DELETED
|
@@ -1,602 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Platform-specific installers for Nex MCP server, hooks, plugins, agents, and workflows.
|
|
3
|
-
*
|
|
4
|
-
* Installation hierarchy (per platform):
|
|
5
|
-
* 1. Hooks (event-driven scripts)
|
|
6
|
-
* 2. Custom tools/plugins (OpenCode plugin, OpenClaw plugin)
|
|
7
|
-
* 3. Custom agents/modes (VS Code agent, Kilo Code mode)
|
|
8
|
-
* 4. Workflows/slash commands (Windsurf workflows)
|
|
9
|
-
* 5. Rules (instruction files)
|
|
10
|
-
* 6. MCP (tool protocol)
|
|
11
|
-
*/
|
|
12
|
-
import { readFileSync, writeFileSync, mkdirSync, existsSync, readdirSync, unlinkSync, copyFileSync } from "node:fs";
|
|
13
|
-
import { join, dirname } from "node:path";
|
|
14
|
-
import { homedir } from "node:os";
|
|
15
|
-
import { fileURLToPath } from "node:url";
|
|
16
|
-
import { execFileSync } from "node:child_process";
|
|
17
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
18
|
-
const __dirname = dirname(__filename);
|
|
19
|
-
const MCP_SERVER_ENTRY = {
|
|
20
|
-
command: "nex-mcp",
|
|
21
|
-
env: {},
|
|
22
|
-
};
|
|
23
|
-
// ── Shared helpers ──────────────────────────────────────────────────────
|
|
24
|
-
function readJsonFile(path) {
|
|
25
|
-
try {
|
|
26
|
-
const raw = readFileSync(path, "utf-8");
|
|
27
|
-
return JSON.parse(raw);
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
return {};
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function writeJsonFile(path, data) {
|
|
34
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
35
|
-
writeFileSync(path, JSON.stringify(data, null, 2) + "\n", "utf-8");
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Resolve bundled plugin paths.
|
|
39
|
-
* From dist/lib/installers.js:
|
|
40
|
-
* __dirname = <pkg>/dist/lib/
|
|
41
|
-
* dist/plugin/ = __dirname/../plugin/
|
|
42
|
-
* plugin-commands/ = __dirname/../../plugin-commands/
|
|
43
|
-
* platform-plugins/ = __dirname/../../platform-plugins/
|
|
44
|
-
* platform-rules/ = __dirname/../../platform-rules/
|
|
45
|
-
*/
|
|
46
|
-
function getPluginDistDir() {
|
|
47
|
-
return join(__dirname, "..", "plugin");
|
|
48
|
-
}
|
|
49
|
-
function getPluginCommandsDir() {
|
|
50
|
-
return join(__dirname, "..", "..", "plugin-commands");
|
|
51
|
-
}
|
|
52
|
-
function getPluginRulesDir() {
|
|
53
|
-
return join(__dirname, "..", "..", "platform-rules");
|
|
54
|
-
}
|
|
55
|
-
function getPlatformPluginsDir() {
|
|
56
|
-
return join(__dirname, "..", "..", "platform-plugins");
|
|
57
|
-
}
|
|
58
|
-
// ── 1. Generic MCP Installer ───────────────────────────────────────────
|
|
59
|
-
export function installMcpServer(platform, apiKey) {
|
|
60
|
-
if (!platform.configPath) {
|
|
61
|
-
return { installed: false, configPath: "" };
|
|
62
|
-
}
|
|
63
|
-
const entry = {
|
|
64
|
-
...MCP_SERVER_ENTRY,
|
|
65
|
-
env: { NEX_API_KEY: apiKey },
|
|
66
|
-
};
|
|
67
|
-
if (platform.configFormat === "zed") {
|
|
68
|
-
return installZedMcp(platform.configPath, entry);
|
|
69
|
-
}
|
|
70
|
-
if (platform.configFormat === "continue") {
|
|
71
|
-
return installContinueMcp(platform.configPath, apiKey);
|
|
72
|
-
}
|
|
73
|
-
if (platform.configFormat === "codex") {
|
|
74
|
-
return installCodexMcp(platform.configPath, apiKey);
|
|
75
|
-
}
|
|
76
|
-
// Standard JSON format (Cursor, Claude Desktop, VS Code, Windsurf, Cline, Kilo Code, OpenCode)
|
|
77
|
-
const config = readJsonFile(platform.configPath);
|
|
78
|
-
if (!config.mcpServers || typeof config.mcpServers !== "object") {
|
|
79
|
-
config.mcpServers = {};
|
|
80
|
-
}
|
|
81
|
-
config.mcpServers.nex = entry;
|
|
82
|
-
writeJsonFile(platform.configPath, config);
|
|
83
|
-
return { installed: true, configPath: platform.configPath };
|
|
84
|
-
}
|
|
85
|
-
function installZedMcp(configPath, entry) {
|
|
86
|
-
const config = readJsonFile(configPath);
|
|
87
|
-
if (!config.context_servers || typeof config.context_servers !== "object") {
|
|
88
|
-
config.context_servers = {};
|
|
89
|
-
}
|
|
90
|
-
config.context_servers.nex = {
|
|
91
|
-
command: { path: entry.command, env: entry.env },
|
|
92
|
-
};
|
|
93
|
-
writeJsonFile(configPath, config);
|
|
94
|
-
return { installed: true, configPath };
|
|
95
|
-
}
|
|
96
|
-
function installContinueMcp(configPath, apiKey) {
|
|
97
|
-
const mcpPath = configPath.replace("config.yaml", "mcp.json");
|
|
98
|
-
const config = readJsonFile(mcpPath);
|
|
99
|
-
if (!config.mcpServers || typeof config.mcpServers !== "object") {
|
|
100
|
-
config.mcpServers = {};
|
|
101
|
-
}
|
|
102
|
-
config.mcpServers.nex = {
|
|
103
|
-
...MCP_SERVER_ENTRY,
|
|
104
|
-
env: { NEX_API_KEY: apiKey },
|
|
105
|
-
};
|
|
106
|
-
writeJsonFile(mcpPath, config);
|
|
107
|
-
return { installed: true, configPath: mcpPath };
|
|
108
|
-
}
|
|
109
|
-
function installCodexMcp(configPath, apiKey) {
|
|
110
|
-
let content = "";
|
|
111
|
-
try {
|
|
112
|
-
content = readFileSync(configPath, "utf-8");
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
// File doesn't exist — will create
|
|
116
|
-
}
|
|
117
|
-
const nexBlock = [
|
|
118
|
-
`[mcp_servers.nex]`,
|
|
119
|
-
`command = "nex-mcp"`,
|
|
120
|
-
``,
|
|
121
|
-
`[mcp_servers.nex.env]`,
|
|
122
|
-
`NEX_API_KEY = "${apiKey}"`,
|
|
123
|
-
].join("\n");
|
|
124
|
-
if (content.includes("[mcp_servers.nex]")) {
|
|
125
|
-
// Remove existing nex section(s) and re-add
|
|
126
|
-
const lines = content.split("\n");
|
|
127
|
-
const filtered = [];
|
|
128
|
-
let inNexSection = false;
|
|
129
|
-
for (const line of lines) {
|
|
130
|
-
const trimmed = line.trimStart();
|
|
131
|
-
if (trimmed.startsWith("[")) {
|
|
132
|
-
if (trimmed.startsWith("[mcp_servers.nex]") || trimmed.startsWith("[mcp_servers.nex.")) {
|
|
133
|
-
inNexSection = true;
|
|
134
|
-
continue;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
inNexSection = false;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
if (!inNexSection) {
|
|
141
|
-
filtered.push(line);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
// Remove trailing blank lines before appending
|
|
145
|
-
while (filtered.length > 0 && filtered[filtered.length - 1].trim() === "") {
|
|
146
|
-
filtered.pop();
|
|
147
|
-
}
|
|
148
|
-
content = filtered.join("\n") + "\n\n" + nexBlock + "\n";
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
// Append to file
|
|
152
|
-
const separator = content && !content.endsWith("\n\n")
|
|
153
|
-
? (content.endsWith("\n") ? "\n" : "\n\n")
|
|
154
|
-
: "";
|
|
155
|
-
content = content + separator + nexBlock + "\n";
|
|
156
|
-
}
|
|
157
|
-
mkdirSync(dirname(configPath), { recursive: true });
|
|
158
|
-
writeFileSync(configPath, content, "utf-8");
|
|
159
|
-
return { installed: true, configPath };
|
|
160
|
-
}
|
|
161
|
-
export function installClaudeCodePlugin() {
|
|
162
|
-
const home = homedir();
|
|
163
|
-
const claudeDir = join(home, ".claude");
|
|
164
|
-
const settingsPath = join(claudeDir, "settings.json");
|
|
165
|
-
const distDir = getPluginDistDir();
|
|
166
|
-
// Verify bundled plugin exists
|
|
167
|
-
if (!existsSync(join(distDir, "auto-recall.js"))) {
|
|
168
|
-
return { installed: false, hooksAdded: [], commandsCopied: [] };
|
|
169
|
-
}
|
|
170
|
-
// 1. Read existing settings.json
|
|
171
|
-
let settings = {};
|
|
172
|
-
try {
|
|
173
|
-
const raw = readFileSync(settingsPath, "utf-8");
|
|
174
|
-
settings = JSON.parse(raw);
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
// Start fresh
|
|
178
|
-
}
|
|
179
|
-
if (!settings.hooks) {
|
|
180
|
-
settings.hooks = {};
|
|
181
|
-
}
|
|
182
|
-
const hooksAdded = [];
|
|
183
|
-
// 2. Add hooks (idempotent — remove stale nex hooks, then add fresh ones)
|
|
184
|
-
const hookDefs = [
|
|
185
|
-
{
|
|
186
|
-
event: "SessionStart",
|
|
187
|
-
script: join(distDir, "auto-session-start.js"),
|
|
188
|
-
timeout: 120000,
|
|
189
|
-
statusMessage: "Loading knowledge context...",
|
|
190
|
-
},
|
|
191
|
-
{
|
|
192
|
-
event: "UserPromptSubmit",
|
|
193
|
-
script: join(distDir, "auto-recall.js"),
|
|
194
|
-
timeout: 12000,
|
|
195
|
-
statusMessage: "Recalling relevant memories...",
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
event: "Stop",
|
|
199
|
-
script: join(distDir, "auto-capture.js"),
|
|
200
|
-
timeout: 10000,
|
|
201
|
-
async: true,
|
|
202
|
-
},
|
|
203
|
-
];
|
|
204
|
-
for (const def of hookDefs) {
|
|
205
|
-
if (!settings.hooks[def.event]) {
|
|
206
|
-
settings.hooks[def.event] = [];
|
|
207
|
-
}
|
|
208
|
-
const groups = settings.hooks[def.event];
|
|
209
|
-
// Remove any existing nex hook entries (handles path updates on upgrade)
|
|
210
|
-
const filtered = groups.filter((g) => !g.hooks.some((h) => h.command.includes("auto-recall") || h.command.includes("auto-capture") || h.command.includes("auto-session-start")));
|
|
211
|
-
const hookEntry = {
|
|
212
|
-
type: "command",
|
|
213
|
-
command: `node ${def.script}`,
|
|
214
|
-
timeout: def.timeout,
|
|
215
|
-
};
|
|
216
|
-
if (def.statusMessage)
|
|
217
|
-
hookEntry.statusMessage = def.statusMessage;
|
|
218
|
-
if (def.async)
|
|
219
|
-
hookEntry.async = true;
|
|
220
|
-
filtered.push({ matcher: "", hooks: [hookEntry] });
|
|
221
|
-
settings.hooks[def.event] = filtered;
|
|
222
|
-
hooksAdded.push(def.event);
|
|
223
|
-
}
|
|
224
|
-
// 3. Write settings.json
|
|
225
|
-
mkdirSync(claudeDir, { recursive: true });
|
|
226
|
-
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
|
|
227
|
-
// 4. Copy slash commands (copy, not symlink — survives npm updates)
|
|
228
|
-
const commandsCopied = [];
|
|
229
|
-
const commandsDir = join(claudeDir, "commands");
|
|
230
|
-
const sourceCommandsDir = getPluginCommandsDir();
|
|
231
|
-
if (existsSync(sourceCommandsDir)) {
|
|
232
|
-
mkdirSync(commandsDir, { recursive: true });
|
|
233
|
-
try {
|
|
234
|
-
const entries = readdirSync(sourceCommandsDir);
|
|
235
|
-
for (const entry of entries) {
|
|
236
|
-
if (!entry.endsWith(".md"))
|
|
237
|
-
continue;
|
|
238
|
-
const target = join(commandsDir, entry);
|
|
239
|
-
const source = join(sourceCommandsDir, entry);
|
|
240
|
-
try {
|
|
241
|
-
unlinkSync(target);
|
|
242
|
-
}
|
|
243
|
-
catch { /* File didn't exist */ }
|
|
244
|
-
try {
|
|
245
|
-
copyFileSync(source, target);
|
|
246
|
-
commandsCopied.push(entry);
|
|
247
|
-
}
|
|
248
|
-
catch { /* Copy failed — non-critical */ }
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch { /* Commands dir read failed — non-critical */ }
|
|
252
|
-
}
|
|
253
|
-
return { installed: true, hooksAdded, commandsCopied };
|
|
254
|
-
}
|
|
255
|
-
// ── 3. Hook Installers (Cursor, Windsurf, Cline) ──────────────────────
|
|
256
|
-
/**
|
|
257
|
-
* Install hook scripts for platforms that support event-driven hooks.
|
|
258
|
-
* Each platform has its own adapter scripts in dist/plugin/adapters/.
|
|
259
|
-
*/
|
|
260
|
-
export function installHooks(platform) {
|
|
261
|
-
// Claude Code handled separately via installClaudeCodePlugin
|
|
262
|
-
if (platform.id === "claude-code") {
|
|
263
|
-
return { installed: false, hooksAdded: [] };
|
|
264
|
-
}
|
|
265
|
-
const adapterDir = join(getPluginDistDir(), "adapters");
|
|
266
|
-
if (!existsSync(adapterDir)) {
|
|
267
|
-
return { installed: false, hooksAdded: [] };
|
|
268
|
-
}
|
|
269
|
-
if (platform.id === "cursor")
|
|
270
|
-
return installCursorHooks(adapterDir, platform);
|
|
271
|
-
if (platform.id === "windsurf")
|
|
272
|
-
return installWindsurfHooks(adapterDir, platform);
|
|
273
|
-
if (platform.id === "cline")
|
|
274
|
-
return installClineHooks(adapterDir, platform);
|
|
275
|
-
return { installed: false, hooksAdded: [] };
|
|
276
|
-
}
|
|
277
|
-
function installCursorHooks(adapterDir, platform) {
|
|
278
|
-
const hookConfigPath = platform.hookConfigPath;
|
|
279
|
-
if (!hookConfigPath)
|
|
280
|
-
return { installed: false, hooksAdded: [] };
|
|
281
|
-
const config = readJsonFile(hookConfigPath);
|
|
282
|
-
if (!config.hooks || typeof config.hooks !== "object") {
|
|
283
|
-
config.hooks = {};
|
|
284
|
-
}
|
|
285
|
-
const hooks = config.hooks;
|
|
286
|
-
const hooksAdded = [];
|
|
287
|
-
const cursorHookDefs = [
|
|
288
|
-
{ event: "sessionStart", script: "cursor-session-start.js", timeout: 120000 },
|
|
289
|
-
{ event: "userPromptSubmit", script: "cursor-recall.js", timeout: 10000 },
|
|
290
|
-
{ event: "stop", script: "cursor-stop.js", timeout: 10000 },
|
|
291
|
-
];
|
|
292
|
-
for (const def of cursorHookDefs) {
|
|
293
|
-
const scriptPath = join(adapterDir, def.script);
|
|
294
|
-
if (!existsSync(scriptPath))
|
|
295
|
-
continue;
|
|
296
|
-
if (!hooks[def.event])
|
|
297
|
-
hooks[def.event] = [];
|
|
298
|
-
// Remove existing nex hooks
|
|
299
|
-
hooks[def.event] = hooks[def.event].filter((h) => !String(h.command ?? "").includes("nex"));
|
|
300
|
-
hooks[def.event].push({
|
|
301
|
-
type: "command",
|
|
302
|
-
command: `node ${scriptPath}`,
|
|
303
|
-
timeout: def.timeout,
|
|
304
|
-
});
|
|
305
|
-
hooksAdded.push(def.event);
|
|
306
|
-
}
|
|
307
|
-
writeJsonFile(hookConfigPath, config);
|
|
308
|
-
return { installed: true, hooksAdded };
|
|
309
|
-
}
|
|
310
|
-
function installWindsurfHooks(adapterDir, platform) {
|
|
311
|
-
const hookConfigPath = platform.hookConfigPath;
|
|
312
|
-
if (!hookConfigPath)
|
|
313
|
-
return { installed: false, hooksAdded: [] };
|
|
314
|
-
const config = readJsonFile(hookConfigPath);
|
|
315
|
-
if (!config.hooks || typeof config.hooks !== "object") {
|
|
316
|
-
config.hooks = {};
|
|
317
|
-
}
|
|
318
|
-
const hooks = config.hooks;
|
|
319
|
-
const hooksAdded = [];
|
|
320
|
-
const windsurfHookDefs = [
|
|
321
|
-
{ event: "pre_user_prompt", script: "windsurf-recall.js", timeout: 10000 },
|
|
322
|
-
{ event: "post_cascade_response", script: "windsurf-capture.js", timeout: 10000 },
|
|
323
|
-
];
|
|
324
|
-
for (const def of windsurfHookDefs) {
|
|
325
|
-
const scriptPath = join(adapterDir, def.script);
|
|
326
|
-
if (!existsSync(scriptPath))
|
|
327
|
-
continue;
|
|
328
|
-
if (!hooks[def.event])
|
|
329
|
-
hooks[def.event] = [];
|
|
330
|
-
hooks[def.event] = hooks[def.event].filter((h) => !String(h.command ?? "").includes("nex"));
|
|
331
|
-
hooks[def.event].push({
|
|
332
|
-
type: "command",
|
|
333
|
-
command: `node ${scriptPath}`,
|
|
334
|
-
timeout: def.timeout,
|
|
335
|
-
});
|
|
336
|
-
hooksAdded.push(def.event);
|
|
337
|
-
}
|
|
338
|
-
writeJsonFile(hookConfigPath, config);
|
|
339
|
-
return { installed: true, hooksAdded };
|
|
340
|
-
}
|
|
341
|
-
function installClineHooks(adapterDir, platform) {
|
|
342
|
-
// Cline uses executable files in .clinerules/hooks/
|
|
343
|
-
const hookDir = platform.hookConfigPath;
|
|
344
|
-
if (!hookDir)
|
|
345
|
-
return { installed: false, hooksAdded: [] };
|
|
346
|
-
mkdirSync(hookDir, { recursive: true });
|
|
347
|
-
const hooksAdded = [];
|
|
348
|
-
const clineHookDefs = [
|
|
349
|
-
{ event: "UserPromptSubmit", script: "cline-recall.js" },
|
|
350
|
-
{ event: "TaskStart", script: "cline-task-start.js" },
|
|
351
|
-
{ event: "TaskComplete", script: "cline-capture.js" },
|
|
352
|
-
];
|
|
353
|
-
for (const def of clineHookDefs) {
|
|
354
|
-
const scriptPath = join(adapterDir, def.script);
|
|
355
|
-
if (!existsSync(scriptPath))
|
|
356
|
-
continue;
|
|
357
|
-
// Write a shell wrapper that invokes node with the adapter script
|
|
358
|
-
const wrapperPath = join(hookDir, `nex-${def.event.toLowerCase()}`);
|
|
359
|
-
const wrapper = `#!/usr/bin/env sh\nexec node "${scriptPath}" "$@"\n`;
|
|
360
|
-
writeFileSync(wrapperPath, wrapper, { mode: 0o755 });
|
|
361
|
-
hooksAdded.push(def.event);
|
|
362
|
-
}
|
|
363
|
-
return { installed: true, hooksAdded };
|
|
364
|
-
}
|
|
365
|
-
// ── 4. Custom Tool/Plugin Installers ───────────────────────────────────
|
|
366
|
-
/**
|
|
367
|
-
* Install OpenCode plugin template to .opencode/plugins/nex.ts.
|
|
368
|
-
*/
|
|
369
|
-
export function installOpenCodePlugin() {
|
|
370
|
-
const templatePath = join(getPlatformPluginsDir(), "opencode-plugin.ts");
|
|
371
|
-
if (!existsSync(templatePath)) {
|
|
372
|
-
return { installed: false, pluginPath: "" };
|
|
373
|
-
}
|
|
374
|
-
const targetDir = join(process.cwd(), ".opencode", "plugins");
|
|
375
|
-
const targetPath = join(targetDir, "nex.ts");
|
|
376
|
-
mkdirSync(targetDir, { recursive: true });
|
|
377
|
-
copyFileSync(templatePath, targetPath);
|
|
378
|
-
return { installed: true, pluginPath: targetPath };
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Install OpenClaw plugin via CLI.
|
|
382
|
-
*/
|
|
383
|
-
export function installOpenClawPlugin(apiKey) {
|
|
384
|
-
// Check if openclaw CLI is available
|
|
385
|
-
let hasOpenClaw = false;
|
|
386
|
-
try {
|
|
387
|
-
execFileSync("which", ["openclaw"], { stdio: "ignore" });
|
|
388
|
-
hasOpenClaw = true;
|
|
389
|
-
}
|
|
390
|
-
catch { /* not installed */ }
|
|
391
|
-
if (!hasOpenClaw) {
|
|
392
|
-
return {
|
|
393
|
-
installed: false,
|
|
394
|
-
message: "Install OpenClaw to enable: https://docs.openclaw.ai/install",
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
// Check if plugin already installed
|
|
398
|
-
const configPath = join(homedir(), ".openclaw", "openclaw.json");
|
|
399
|
-
const config = readJsonFile(configPath);
|
|
400
|
-
const plugins = (config.plugins ?? {});
|
|
401
|
-
const entries = (plugins.entries ?? {});
|
|
402
|
-
if (!entries.nex) {
|
|
403
|
-
// Install the plugin
|
|
404
|
-
try {
|
|
405
|
-
execFileSync("openclaw", ["plugins", "install", "@nex-ai/openclaw-plugin"], {
|
|
406
|
-
stdio: "ignore",
|
|
407
|
-
timeout: 30_000,
|
|
408
|
-
});
|
|
409
|
-
}
|
|
410
|
-
catch {
|
|
411
|
-
return { installed: false, message: "Failed to install OpenClaw plugin" };
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
// Configure API key
|
|
415
|
-
const freshConfig = readJsonFile(configPath);
|
|
416
|
-
const freshPlugins = (freshConfig.plugins ?? {});
|
|
417
|
-
const freshEntries = (freshPlugins.entries ?? {});
|
|
418
|
-
if (!freshEntries.nex)
|
|
419
|
-
freshEntries.nex = {};
|
|
420
|
-
if (!freshEntries.nex.config)
|
|
421
|
-
freshEntries.nex.config = {};
|
|
422
|
-
freshEntries.nex.config.apiKey = apiKey;
|
|
423
|
-
freshEntries.nex.enabled = true;
|
|
424
|
-
freshPlugins.entries = freshEntries;
|
|
425
|
-
freshConfig.plugins = freshPlugins;
|
|
426
|
-
writeJsonFile(configPath, freshConfig);
|
|
427
|
-
return { installed: true, message: "OpenClaw plugin installed and configured" };
|
|
428
|
-
}
|
|
429
|
-
// ── 5. Custom Agent/Mode Installers ────────────────────────────────────
|
|
430
|
-
/**
|
|
431
|
-
* Install VS Code custom agent (.github/agents/nex.agent.md).
|
|
432
|
-
*/
|
|
433
|
-
export function installVSCodeAgent() {
|
|
434
|
-
const templatePath = join(getPlatformPluginsDir(), "vscode-agent.md");
|
|
435
|
-
if (!existsSync(templatePath)) {
|
|
436
|
-
return { installed: false, agentPath: "" };
|
|
437
|
-
}
|
|
438
|
-
const targetDir = join(process.cwd(), ".github", "agents");
|
|
439
|
-
const targetPath = join(targetDir, "nex.agent.md");
|
|
440
|
-
mkdirSync(targetDir, { recursive: true });
|
|
441
|
-
copyFileSync(templatePath, targetPath);
|
|
442
|
-
return { installed: true, agentPath: targetPath };
|
|
443
|
-
}
|
|
444
|
-
/**
|
|
445
|
-
* Install Kilo Code custom mode (.kilocodemodes YAML).
|
|
446
|
-
*/
|
|
447
|
-
export function installKiloCodeMode() {
|
|
448
|
-
const templatePath = join(getPlatformPluginsDir(), "kilocode-modes.yaml");
|
|
449
|
-
if (!existsSync(templatePath)) {
|
|
450
|
-
return { installed: false, modePath: "" };
|
|
451
|
-
}
|
|
452
|
-
const targetPath = join(process.cwd(), ".kilocodemodes");
|
|
453
|
-
// Read existing modes file if present
|
|
454
|
-
let existing = "";
|
|
455
|
-
try {
|
|
456
|
-
existing = readFileSync(targetPath, "utf-8");
|
|
457
|
-
}
|
|
458
|
-
catch { /* doesn't exist */ }
|
|
459
|
-
// If already has nex-crm mode, skip
|
|
460
|
-
if (existing.includes("nex-crm")) {
|
|
461
|
-
return { installed: true, modePath: targetPath };
|
|
462
|
-
}
|
|
463
|
-
const template = readFileSync(templatePath, "utf-8");
|
|
464
|
-
if (existing) {
|
|
465
|
-
// Append to existing customModes
|
|
466
|
-
// Remove the "customModes:" header from template since it already exists
|
|
467
|
-
const modesContent = template.replace(/^customModes:\s*\n/, "");
|
|
468
|
-
writeFileSync(targetPath, existing.trimEnd() + "\n" + modesContent, "utf-8");
|
|
469
|
-
}
|
|
470
|
-
else {
|
|
471
|
-
writeFileSync(targetPath, template, "utf-8");
|
|
472
|
-
}
|
|
473
|
-
return { installed: true, modePath: targetPath };
|
|
474
|
-
}
|
|
475
|
-
/**
|
|
476
|
-
* Install Continue.dev context provider template.
|
|
477
|
-
*/
|
|
478
|
-
export function installContinueProvider() {
|
|
479
|
-
const templatePath = join(getPlatformPluginsDir(), "continue-provider.ts");
|
|
480
|
-
if (!existsSync(templatePath)) {
|
|
481
|
-
return { installed: false, providerPath: "" };
|
|
482
|
-
}
|
|
483
|
-
const continueBase = existsSync(join(process.cwd(), ".continue"))
|
|
484
|
-
? join(process.cwd(), ".continue")
|
|
485
|
-
: join(homedir(), ".continue");
|
|
486
|
-
const targetDir = join(continueBase, ".plugins");
|
|
487
|
-
const targetPath = join(targetDir, "nex-provider.ts");
|
|
488
|
-
mkdirSync(targetDir, { recursive: true });
|
|
489
|
-
copyFileSync(templatePath, targetPath);
|
|
490
|
-
return { installed: true, providerPath: targetPath };
|
|
491
|
-
}
|
|
492
|
-
// ── 6. Workflow Installers ─────────────────────────────────────────────
|
|
493
|
-
/**
|
|
494
|
-
* Install Windsurf workflow files (slash commands).
|
|
495
|
-
*/
|
|
496
|
-
export function installWindsurfWorkflows() {
|
|
497
|
-
const sourceDir = join(getPlatformPluginsDir(), "windsurf-workflows");
|
|
498
|
-
if (!existsSync(sourceDir)) {
|
|
499
|
-
return { installed: false, workflowCount: 0 };
|
|
500
|
-
}
|
|
501
|
-
const targetDir = join(process.cwd(), ".windsurf", "workflows");
|
|
502
|
-
mkdirSync(targetDir, { recursive: true });
|
|
503
|
-
let count = 0;
|
|
504
|
-
try {
|
|
505
|
-
const entries = readdirSync(sourceDir);
|
|
506
|
-
for (const entry of entries) {
|
|
507
|
-
if (!entry.endsWith(".md"))
|
|
508
|
-
continue;
|
|
509
|
-
copyFileSync(join(sourceDir, entry), join(targetDir, entry));
|
|
510
|
-
count++;
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
catch { /* non-critical */ }
|
|
514
|
-
return { installed: count > 0, workflowCount: count };
|
|
515
|
-
}
|
|
516
|
-
// ── 7. Rules File Installer ────────────────────────────────────────────
|
|
517
|
-
const NEX_RULES_MARKER_START = "# --- Nex Context & Memory ---";
|
|
518
|
-
const NEX_RULES_MARKER_END = "# --- End Nex ---";
|
|
519
|
-
/**
|
|
520
|
-
* Map platform ID to its rules template filename.
|
|
521
|
-
*/
|
|
522
|
-
const RULES_TEMPLATE_MAP = {
|
|
523
|
-
cursor: "cursor-rules.md",
|
|
524
|
-
vscode: "vscode-instructions.md",
|
|
525
|
-
windsurf: "windsurf-rules.md",
|
|
526
|
-
cline: "cline-rules.md",
|
|
527
|
-
continue: "continue-rules.md",
|
|
528
|
-
zed: "zed-rules.md",
|
|
529
|
-
kilocode: "kilocode-rules.md",
|
|
530
|
-
opencode: "opencode-agents.md",
|
|
531
|
-
aider: "aider-conventions.md",
|
|
532
|
-
codex: "codex-agents.md",
|
|
533
|
-
};
|
|
534
|
-
/**
|
|
535
|
-
* Platforms where rules are APPENDED to an existing file (with markers)
|
|
536
|
-
* rather than written as a standalone file.
|
|
537
|
-
*/
|
|
538
|
-
const APPEND_PLATFORMS = new Set(["zed", "opencode", "aider", "codex"]);
|
|
539
|
-
export function installRulesFile(platform) {
|
|
540
|
-
const rulesPath = platform.rulesPath;
|
|
541
|
-
if (!rulesPath) {
|
|
542
|
-
return { installed: false, rulesPath: "" };
|
|
543
|
-
}
|
|
544
|
-
const templateName = RULES_TEMPLATE_MAP[platform.id];
|
|
545
|
-
if (!templateName) {
|
|
546
|
-
return { installed: false, rulesPath: "" };
|
|
547
|
-
}
|
|
548
|
-
const templatePath = join(getPluginRulesDir(), templateName);
|
|
549
|
-
if (!existsSync(templatePath)) {
|
|
550
|
-
return { installed: false, rulesPath: "" };
|
|
551
|
-
}
|
|
552
|
-
const template = readFileSync(templatePath, "utf-8");
|
|
553
|
-
if (APPEND_PLATFORMS.has(platform.id)) {
|
|
554
|
-
// Append mode: add/replace section in existing file
|
|
555
|
-
let existing = "";
|
|
556
|
-
try {
|
|
557
|
-
existing = readFileSync(rulesPath, "utf-8");
|
|
558
|
-
}
|
|
559
|
-
catch {
|
|
560
|
-
// File doesn't exist — will create
|
|
561
|
-
}
|
|
562
|
-
// Check if nex section already exists
|
|
563
|
-
const startIdx = existing.indexOf(NEX_RULES_MARKER_START);
|
|
564
|
-
const endIdx = existing.indexOf(NEX_RULES_MARKER_END);
|
|
565
|
-
if (startIdx !== -1 && endIdx !== -1) {
|
|
566
|
-
// Replace existing section
|
|
567
|
-
const before = existing.slice(0, startIdx);
|
|
568
|
-
const after = existing.slice(endIdx + NEX_RULES_MARKER_END.length);
|
|
569
|
-
const updated = before + template.trim() + after;
|
|
570
|
-
mkdirSync(dirname(rulesPath), { recursive: true });
|
|
571
|
-
writeFileSync(rulesPath, updated, "utf-8");
|
|
572
|
-
}
|
|
573
|
-
else if (existing.includes("nex_ask") || existing.includes("Nex Context")) {
|
|
574
|
-
// Already has nex content without markers — skip to avoid duplicates
|
|
575
|
-
return { installed: true, rulesPath };
|
|
576
|
-
}
|
|
577
|
-
else {
|
|
578
|
-
// Append to end
|
|
579
|
-
const separator = existing && !existing.endsWith("\n\n") ? "\n\n" : "";
|
|
580
|
-
mkdirSync(dirname(rulesPath), { recursive: true });
|
|
581
|
-
writeFileSync(rulesPath, existing + separator + template.trim() + "\n", "utf-8");
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
else {
|
|
585
|
-
// Standalone mode: write the file directly
|
|
586
|
-
mkdirSync(dirname(rulesPath), { recursive: true });
|
|
587
|
-
writeFileSync(rulesPath, template, "utf-8");
|
|
588
|
-
}
|
|
589
|
-
return { installed: true, rulesPath };
|
|
590
|
-
}
|
|
591
|
-
// ── 8. Sync API key to ~/.nex/config.json ──────────────────────────────
|
|
592
|
-
/**
|
|
593
|
-
* Persist API key to the canonical config file (~/.nex/config.json).
|
|
594
|
-
* Name kept as syncApiKeyToMcpConfig for backward compatibility with callers.
|
|
595
|
-
*/
|
|
596
|
-
export function syncApiKeyToMcpConfig(apiKey) {
|
|
597
|
-
const configPath = join(homedir(), ".nex", "config.json");
|
|
598
|
-
const config = readJsonFile(configPath);
|
|
599
|
-
config.api_key = apiKey;
|
|
600
|
-
writeJsonFile(configPath, config);
|
|
601
|
-
}
|
|
602
|
-
//# sourceMappingURL=installers.js.map
|