@nexagent-cli/cli 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.
Files changed (188) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/LICENSE +21 -0
  3. package/README.md +40 -0
  4. package/dist/agent/loop.d.ts +45 -0
  5. package/dist/agent/loop.d.ts.map +1 -0
  6. package/dist/agent/loop.js +270 -0
  7. package/dist/agent/loop.js.map +1 -0
  8. package/dist/agent/prompt.d.ts +3 -0
  9. package/dist/agent/prompt.d.ts.map +1 -0
  10. package/dist/agent/prompt.js +43 -0
  11. package/dist/agent/prompt.js.map +1 -0
  12. package/dist/commands/agent.d.ts +21 -0
  13. package/dist/commands/agent.d.ts.map +1 -0
  14. package/dist/commands/agent.js +111 -0
  15. package/dist/commands/agent.js.map +1 -0
  16. package/dist/commands/chat.d.ts +18 -0
  17. package/dist/commands/chat.d.ts.map +1 -0
  18. package/dist/commands/chat.js +115 -0
  19. package/dist/commands/chat.js.map +1 -0
  20. package/dist/commands/config.d.ts +10 -0
  21. package/dist/commands/config.d.ts.map +1 -0
  22. package/dist/commands/config.js +96 -0
  23. package/dist/commands/config.js.map +1 -0
  24. package/dist/commands/doctor.d.ts +8 -0
  25. package/dist/commands/doctor.d.ts.map +1 -0
  26. package/dist/commands/doctor.js +201 -0
  27. package/dist/commands/doctor.js.map +1 -0
  28. package/dist/commands/memory.d.ts +13 -0
  29. package/dist/commands/memory.d.ts.map +1 -0
  30. package/dist/commands/memory.js +97 -0
  31. package/dist/commands/memory.js.map +1 -0
  32. package/dist/commands/models.d.ts +2 -0
  33. package/dist/commands/models.d.ts.map +1 -0
  34. package/dist/commands/models.js +5 -0
  35. package/dist/commands/models.js.map +1 -0
  36. package/dist/commands/run.d.ts +13 -0
  37. package/dist/commands/run.d.ts.map +1 -0
  38. package/dist/commands/run.js +74 -0
  39. package/dist/commands/run.js.map +1 -0
  40. package/dist/commands/server.d.ts +8 -0
  41. package/dist/commands/server.d.ts.map +1 -0
  42. package/dist/commands/server.js +73 -0
  43. package/dist/commands/server.js.map +1 -0
  44. package/dist/commands/session.d.ts +11 -0
  45. package/dist/commands/session.d.ts.map +1 -0
  46. package/dist/commands/session.js +77 -0
  47. package/dist/commands/session.js.map +1 -0
  48. package/dist/commands/update.d.ts +17 -0
  49. package/dist/commands/update.d.ts.map +1 -0
  50. package/dist/commands/update.js +320 -0
  51. package/dist/commands/update.js.map +1 -0
  52. package/dist/config/loader.d.ts +4 -0
  53. package/dist/config/loader.d.ts.map +1 -0
  54. package/dist/config/loader.js +83 -0
  55. package/dist/config/loader.js.map +1 -0
  56. package/dist/config/wizard.d.ts +4 -0
  57. package/dist/config/wizard.d.ts.map +1 -0
  58. package/dist/config/wizard.js +131 -0
  59. package/dist/config/wizard.js.map +1 -0
  60. package/dist/db/database.d.ts +4 -0
  61. package/dist/db/database.d.ts.map +1 -0
  62. package/dist/db/database.js +130 -0
  63. package/dist/db/database.js.map +1 -0
  64. package/dist/db/session-store.d.ts +17 -0
  65. package/dist/db/session-store.d.ts.map +1 -0
  66. package/dist/db/session-store.js +117 -0
  67. package/dist/db/session-store.js.map +1 -0
  68. package/dist/index.d.ts +3 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +207 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/llm/providers/anthropic.d.ts +21 -0
  73. package/dist/llm/providers/anthropic.d.ts.map +1 -0
  74. package/dist/llm/providers/anthropic.js +186 -0
  75. package/dist/llm/providers/anthropic.js.map +1 -0
  76. package/dist/llm/providers/google.d.ts +13 -0
  77. package/dist/llm/providers/google.d.ts.map +1 -0
  78. package/dist/llm/providers/google.js +83 -0
  79. package/dist/llm/providers/google.js.map +1 -0
  80. package/dist/llm/providers/ollama.d.ts +12 -0
  81. package/dist/llm/providers/ollama.d.ts.map +1 -0
  82. package/dist/llm/providers/ollama.js +110 -0
  83. package/dist/llm/providers/ollama.js.map +1 -0
  84. package/dist/llm/providers/openai.d.ts +15 -0
  85. package/dist/llm/providers/openai.d.ts.map +1 -0
  86. package/dist/llm/providers/openai.js +180 -0
  87. package/dist/llm/providers/openai.js.map +1 -0
  88. package/dist/llm/router.d.ts +20 -0
  89. package/dist/llm/router.d.ts.map +1 -0
  90. package/dist/llm/router.js +52 -0
  91. package/dist/llm/router.js.map +1 -0
  92. package/dist/memory/manager.d.ts +16 -0
  93. package/dist/memory/manager.d.ts.map +1 -0
  94. package/dist/memory/manager.js +114 -0
  95. package/dist/memory/manager.js.map +1 -0
  96. package/dist/safety/gate.d.ts +14 -0
  97. package/dist/safety/gate.d.ts.map +1 -0
  98. package/dist/safety/gate.js +102 -0
  99. package/dist/safety/gate.js.map +1 -0
  100. package/dist/subagents/orchestrator.d.ts +20 -0
  101. package/dist/subagents/orchestrator.d.ts.map +1 -0
  102. package/dist/subagents/orchestrator.js +151 -0
  103. package/dist/subagents/orchestrator.js.map +1 -0
  104. package/dist/tools/file-delete.d.ts +15 -0
  105. package/dist/tools/file-delete.d.ts.map +1 -0
  106. package/dist/tools/file-delete.js +94 -0
  107. package/dist/tools/file-delete.js.map +1 -0
  108. package/dist/tools/file-edit.d.ts +19 -0
  109. package/dist/tools/file-edit.d.ts.map +1 -0
  110. package/dist/tools/file-edit.js +182 -0
  111. package/dist/tools/file-edit.js.map +1 -0
  112. package/dist/tools/file-list.d.ts +13 -0
  113. package/dist/tools/file-list.d.ts.map +1 -0
  114. package/dist/tools/file-list.js +92 -0
  115. package/dist/tools/file-list.js.map +1 -0
  116. package/dist/tools/file-read.d.ts +13 -0
  117. package/dist/tools/file-read.d.ts.map +1 -0
  118. package/dist/tools/file-read.js +68 -0
  119. package/dist/tools/file-read.js.map +1 -0
  120. package/dist/tools/file-search.d.ts +14 -0
  121. package/dist/tools/file-search.d.ts.map +1 -0
  122. package/dist/tools/file-search.js +133 -0
  123. package/dist/tools/file-search.js.map +1 -0
  124. package/dist/tools/file-write.d.ts +14 -0
  125. package/dist/tools/file-write.d.ts.map +1 -0
  126. package/dist/tools/file-write.js +80 -0
  127. package/dist/tools/file-write.js.map +1 -0
  128. package/dist/tools/memory-read.d.ts +22 -0
  129. package/dist/tools/memory-read.d.ts.map +1 -0
  130. package/dist/tools/memory-read.js +114 -0
  131. package/dist/tools/memory-read.js.map +1 -0
  132. package/dist/tools/memory-write.d.ts +2 -0
  133. package/dist/tools/memory-write.d.ts.map +1 -0
  134. package/dist/tools/memory-write.js +5 -0
  135. package/dist/tools/memory-write.js.map +1 -0
  136. package/dist/tools/registry.d.ts +12 -0
  137. package/dist/tools/registry.d.ts.map +1 -0
  138. package/dist/tools/registry.js +66 -0
  139. package/dist/tools/registry.js.map +1 -0
  140. package/dist/tools/shell-exec.d.ts +14 -0
  141. package/dist/tools/shell-exec.d.ts.map +1 -0
  142. package/dist/tools/shell-exec.js +112 -0
  143. package/dist/tools/shell-exec.js.map +1 -0
  144. package/dist/tools/web-fetch.d.ts +12 -0
  145. package/dist/tools/web-fetch.d.ts.map +1 -0
  146. package/dist/tools/web-fetch.js +91 -0
  147. package/dist/tools/web-fetch.js.map +1 -0
  148. package/dist/tools/web-search.d.ts +12 -0
  149. package/dist/tools/web-search.d.ts.map +1 -0
  150. package/dist/tools/web-search.js +88 -0
  151. package/dist/tools/web-search.js.map +1 -0
  152. package/dist/ui/ChatApp.d.ts +22 -0
  153. package/dist/ui/ChatApp.d.ts.map +1 -0
  154. package/dist/ui/ChatApp.js +94 -0
  155. package/dist/ui/ChatApp.js.map +1 -0
  156. package/dist/ui/ConfirmDialog.d.ts +20 -0
  157. package/dist/ui/ConfirmDialog.d.ts.map +1 -0
  158. package/dist/ui/ConfirmDialog.js +23 -0
  159. package/dist/ui/ConfirmDialog.js.map +1 -0
  160. package/dist/ui/InputBar.d.ts +15 -0
  161. package/dist/ui/InputBar.d.ts.map +1 -0
  162. package/dist/ui/InputBar.js +49 -0
  163. package/dist/ui/InputBar.js.map +1 -0
  164. package/dist/ui/MessageList.d.ts +21 -0
  165. package/dist/ui/MessageList.d.ts.map +1 -0
  166. package/dist/ui/MessageList.js +29 -0
  167. package/dist/ui/MessageList.js.map +1 -0
  168. package/dist/ui/Spinner.d.ts +8 -0
  169. package/dist/ui/Spinner.d.ts.map +1 -0
  170. package/dist/ui/Spinner.js +16 -0
  171. package/dist/ui/Spinner.js.map +1 -0
  172. package/dist/ui/StatusBar.d.ts +32 -0
  173. package/dist/ui/StatusBar.d.ts.map +1 -0
  174. package/dist/ui/StatusBar.js +42 -0
  175. package/dist/ui/StatusBar.js.map +1 -0
  176. package/dist/ui/ToolPanel.d.ts +2 -0
  177. package/dist/ui/ToolPanel.d.ts.map +1 -0
  178. package/dist/ui/ToolPanel.js +5 -0
  179. package/dist/ui/ToolPanel.js.map +1 -0
  180. package/dist/utils/changelog.d.ts +19 -0
  181. package/dist/utils/changelog.d.ts.map +1 -0
  182. package/dist/utils/changelog.js +111 -0
  183. package/dist/utils/changelog.js.map +1 -0
  184. package/dist/utils/env.d.ts +9 -0
  185. package/dist/utils/env.d.ts.map +1 -0
  186. package/dist/utils/env.js +37 -0
  187. package/dist/utils/env.js.map +1 -0
  188. package/package.json +72 -0
@@ -0,0 +1,111 @@
1
+ // ============================================================
2
+ // Command: nexagent agent
3
+ // ============================================================
4
+ import chalk from 'chalk';
5
+ import { homedir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ import { loadConfig } from '../config/loader.js';
8
+ import { SYM } from '@nexagent-cli/shared';
9
+ import { mkdir, rm } from 'node:fs/promises';
10
+ export async function runAgent(subcommand, opts) {
11
+ const dataDir = opts.dataDir ?? join(homedir(), '.nexagent');
12
+ switch (subcommand) {
13
+ case 'list': {
14
+ const config = await loadConfig(dataDir);
15
+ const agents = ['default']; // TODO: scan agent directories
16
+ if (opts.json) {
17
+ console.log(JSON.stringify(agents));
18
+ return;
19
+ }
20
+ console.log(chalk.bold(' Agents\n'));
21
+ for (const a of agents) {
22
+ const mark = a === config.defaultAgent ? chalk.green(SYM.SUCCESS) : ' ';
23
+ console.log(`${mark} ${chalk.white(a)}`);
24
+ }
25
+ break;
26
+ }
27
+ case 'create': {
28
+ if (!opts.name) {
29
+ console.error(chalk.red('Name required'));
30
+ process.exit(1);
31
+ }
32
+ await mkdir(join(dataDir, 'agents', opts.name), { recursive: true });
33
+ console.log(chalk.green(`${SYM.SUCCESS} Agent "${opts.name}" created`));
34
+ break;
35
+ }
36
+ case 'delete': {
37
+ if (!opts.name) {
38
+ console.error(chalk.red('Name required'));
39
+ process.exit(1);
40
+ }
41
+ if (!opts.force) {
42
+ const { confirm } = await import('@inquirer/prompts');
43
+ const ok = await confirm({ message: `Delete agent "${opts.name}" and all its data?`, default: false });
44
+ if (!ok) {
45
+ console.log(chalk.dim('Cancelled.'));
46
+ return;
47
+ }
48
+ }
49
+ await rm(join(dataDir, 'agents', opts.name), { recursive: true, force: true });
50
+ console.log(chalk.green(`${SYM.SUCCESS} Agent "${opts.name}" deleted`));
51
+ break;
52
+ }
53
+ }
54
+ }
55
+ // ============================================================
56
+ // Command: nexagent models
57
+ // ============================================================
58
+ import { LLMRouter } from '../llm/router.js';
59
+ export async function runModels(opts) {
60
+ const dataDir = opts.dataDir ?? join(homedir(), '.nexagent');
61
+ const config = await loadConfig(dataDir);
62
+ const results = {};
63
+ const providers = opts.provider
64
+ ? [opts.provider]
65
+ : Object.keys(config.providers);
66
+ for (const p of providers) {
67
+ try {
68
+ const providerCfg = config.providers[p];
69
+ const router = new LLMRouter({
70
+ provider: p,
71
+ apiKey: providerCfg?.apiKey,
72
+ baseUrl: providerCfg?.baseUrl,
73
+ });
74
+ results[p] = await router.listModels();
75
+ }
76
+ catch (e) {
77
+ results[p] = [`(error: ${String(e)})`];
78
+ }
79
+ }
80
+ if (opts.json) {
81
+ console.log(JSON.stringify(results, null, 2));
82
+ return;
83
+ }
84
+ for (const [provider, models] of Object.entries(results)) {
85
+ console.log(chalk.bold(`\n ${provider}`));
86
+ for (const m of models)
87
+ console.log(chalk.white(` · ${m}`));
88
+ }
89
+ }
90
+ export async function runUpdate(opts) {
91
+ console.log(chalk.dim('Checking for updates…'));
92
+ try {
93
+ const res = await fetch('https://api.github.com/repos/nexagent/cli/releases/latest');
94
+ const data = await res.json();
95
+ const latest = data.tag_name?.replace(/^v/, '') ?? 'unknown';
96
+ const { NEXAGENT_VERSION } = await import('@nexagent-cli/shared');
97
+ if (latest === NEXAGENT_VERSION) {
98
+ console.log(chalk.green(`${SYM.SUCCESS} Already up to date (v${NEXAGENT_VERSION})`));
99
+ }
100
+ else {
101
+ console.log(chalk.yellow(`${SYM.WARNING} Update available: v${NEXAGENT_VERSION} → v${latest}`));
102
+ if (!opts.check) {
103
+ console.log(chalk.dim('Run: npm install -g @nexagent/cli@latest'));
104
+ }
105
+ }
106
+ }
107
+ catch {
108
+ console.log(chalk.dim('Could not reach update server.'));
109
+ }
110
+ }
111
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface ChatOptions {
2
+ agent: string;
3
+ model?: string;
4
+ provider?: string;
5
+ memory: boolean;
6
+ subagents: boolean;
7
+ safety: string;
8
+ maxTurns: string;
9
+ cwd?: string;
10
+ resume?: string;
11
+ json?: boolean;
12
+ debug?: boolean;
13
+ dataDir?: string;
14
+ noColor?: boolean;
15
+ }
16
+ export declare function runChat(opts: ChatOptions): Promise<void>;
17
+ export {};
18
+ //# sourceMappingURL=chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../src/commands/chat.ts"],"names":[],"mappings":"AAoBA,UAAU,WAAW;IACnB,KAAK,EAAQ,MAAM,CAAC;IACpB,KAAK,CAAC,EAAO,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAI,MAAM,CAAC;IACpB,MAAM,EAAO,OAAO,CAAC;IACrB,SAAS,EAAI,OAAO,CAAC;IACrB,MAAM,EAAO,MAAM,CAAC;IACpB,QAAQ,EAAK,MAAM,CAAC;IACpB,GAAG,CAAC,EAAS,MAAM,CAAC;IACpB,MAAM,CAAC,EAAM,MAAM,CAAC;IACpB,IAAI,CAAC,EAAQ,OAAO,CAAC;IACrB,KAAK,CAAC,EAAO,OAAO,CAAC;IACrB,OAAO,CAAC,EAAK,MAAM,CAAC;IACpB,OAAO,CAAC,EAAK,OAAO,CAAC;CACtB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwF9D"}
@@ -0,0 +1,115 @@
1
+ // ============================================================
2
+ // Command: nexagent chat — interactive TUI session
3
+ // ============================================================
4
+ import { render } from 'ink';
5
+ import React from 'react';
6
+ import { resolve } from 'node:path';
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import { openDatabase } from '../db/database.js';
10
+ import { SessionStore } from '../db/session-store.js';
11
+ import { MemoryManager } from '../memory/manager.js';
12
+ import { AgentLoop, AgentEventEmitter } from '../agent/loop.js';
13
+ import { LLMRouter } from '../llm/router.js';
14
+ import { SafetyGate } from '../safety/gate.js';
15
+ import { createDefaultRegistry } from '../tools/registry.js';
16
+ import { loadConfig } from '../config/loader.js';
17
+ import { ChatApp } from '../ui/ChatApp.js';
18
+ export async function runChat(opts) {
19
+ const dataDir = opts.dataDir ?? join(homedir(), '.nexagent');
20
+ const config = await loadConfig(dataDir);
21
+ // Open DB
22
+ const agentDataDir = join(dataDir, 'agents', opts.agent);
23
+ const db = await openDatabase(agentDataDir);
24
+ const sessions = new SessionStore(db);
25
+ const memory = new MemoryManager(db, opts.agent);
26
+ const registry = await createDefaultRegistry();
27
+ // Resolve model + provider
28
+ const provider = (opts.provider ?? config.defaults.provider);
29
+ const model = opts.model ?? config.defaults.model;
30
+ // LLM + safety
31
+ const providerCfg = config.providers[provider];
32
+ const llm = new LLMRouter({
33
+ provider,
34
+ apiKey: providerCfg?.apiKey,
35
+ baseUrl: providerCfg?.baseUrl,
36
+ });
37
+ const safety = new SafetyGate(registry);
38
+ const events = new AgentEventEmitter();
39
+ // Create or resume session
40
+ const workspaceDir = resolve(opts.cwd ?? process.cwd());
41
+ const session = opts.resume
42
+ ? sessions.getSession(opts.resume) ?? sessions.createSession(opts.agent, model, workspaceDir)
43
+ : sessions.createSession(opts.agent, model, workspaceDir);
44
+ const agentConfig = {
45
+ name: opts.agent,
46
+ model,
47
+ provider,
48
+ maxTurns: parseInt(opts.maxTurns, 10),
49
+ maxTokensPerTurn: 8096,
50
+ temperature: config.defaults.temperature,
51
+ workspaceDir,
52
+ memoryEnabled: opts.memory,
53
+ subagentsEnabled: opts.subagents,
54
+ safetyLevel: opts.safety,
55
+ allowedTools: [],
56
+ blockedTools: [],
57
+ };
58
+ const loop = new AgentLoop({
59
+ config: agentConfig,
60
+ llm,
61
+ tools: registry,
62
+ memory,
63
+ safety,
64
+ sessions,
65
+ events,
66
+ sessionId: session.id,
67
+ });
68
+ const handleInput = async (text, confirmFn) => {
69
+ safety.resetLoopCounter(session.id);
70
+ await loop.run(text, confirmFn);
71
+ };
72
+ const handleExit = () => {
73
+ sessions.endSession(session.id, 'completed');
74
+ process.exit(0);
75
+ };
76
+ if (opts.json) {
77
+ // Pipe mode: no TUI, just JSON output
78
+ await runPipeMode(loop, events, sessions, session.id);
79
+ return;
80
+ }
81
+ // Render TUI
82
+ const { waitUntilExit } = render(React.createElement(ChatApp, {
83
+ agentName: opts.agent,
84
+ model,
85
+ sessionId: session.id,
86
+ events,
87
+ onUserInput: handleInput,
88
+ onExit: handleExit,
89
+ theme: config.ui.theme === 'light' ? 'light' : 'dark',
90
+ }));
91
+ await waitUntilExit();
92
+ sessions.endSession(session.id, 'completed');
93
+ }
94
+ async function runPipeMode(loop, events, sessions, sessionId) {
95
+ // Read lines from stdin, process each, output JSON
96
+ process.stdin.setEncoding('utf-8');
97
+ let buffer = '';
98
+ process.stdin.on('data', (chunk) => { buffer += chunk; });
99
+ process.stdin.on('end', async () => {
100
+ const userMessage = buffer.trim();
101
+ if (!userMessage)
102
+ return;
103
+ let fullText = '';
104
+ events.on('stream:text', ({ text }) => { fullText += text; });
105
+ await loop.run(userMessage, async () => false); // deny all confirmations in pipe mode
106
+ const out = JSON.stringify({
107
+ session_id: sessionId,
108
+ response: fullText,
109
+ timestamp: Date.now(),
110
+ });
111
+ process.stdout.write(out + '\n');
112
+ sessions.endSession(sessionId, 'completed');
113
+ });
114
+ }
115
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../../src/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface ConfigOpts {
2
+ json?: boolean;
3
+ key?: string;
4
+ value?: string;
5
+ provider?: string;
6
+ dataDir?: string;
7
+ }
8
+ export declare function runConfig(subcommand: string, opts: ConfigOpts): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/commands/config.ts"],"names":[],"mappings":"AAUA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAM,OAAO,CAAC;IACnB,GAAG,CAAC,EAAO,MAAM,CAAC;IAClB,KAAK,CAAC,EAAK,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAG,MAAM,CAAC;CACnB;AAED,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDnF"}
@@ -0,0 +1,96 @@
1
+ // ============================================================
2
+ // Command: nexagent config
3
+ // ============================================================
4
+ import chalk from 'chalk';
5
+ import { homedir } from 'node:os';
6
+ import { join } from 'node:path';
7
+ import { loadConfig, saveConfig } from '../config/loader.js';
8
+ import { SYM } from '@nexagent-cli/shared';
9
+ export async function runConfig(subcommand, opts) {
10
+ const dataDir = opts.dataDir ?? join(homedir(), '.nexagent');
11
+ switch (subcommand) {
12
+ case 'show': {
13
+ const config = await loadConfig(dataDir);
14
+ if (opts.json) {
15
+ console.log(JSON.stringify(config, null, 2));
16
+ return;
17
+ }
18
+ console.log(chalk.bold(' NexAgent Configuration\n'));
19
+ console.log(chalk.dim('Default provider:'), config.defaults.provider);
20
+ console.log(chalk.dim('Default model: '), config.defaults.model);
21
+ console.log(chalk.dim('Safety level: '), config.defaults.safetyLevel);
22
+ console.log(chalk.dim('Memory enabled: '), String(config.defaults.memoryEnabled));
23
+ console.log(chalk.dim('UI theme: '), config.ui.theme);
24
+ console.log(chalk.dim('\nConfig path: '), join(dataDir, 'config.json'));
25
+ break;
26
+ }
27
+ case 'set': {
28
+ if (!opts.key || opts.value === undefined) {
29
+ console.error(chalk.red('Usage: nexagent config set <key> <value>'));
30
+ process.exit(1);
31
+ }
32
+ const config = await loadConfig(dataDir);
33
+ // Simple dot-path setter
34
+ setNestedKey(config, opts.key, opts.value);
35
+ await saveConfig(dataDir, config);
36
+ console.log(chalk.green(`${SYM.SUCCESS} Set ${opts.key} = ${opts.value}`));
37
+ break;
38
+ }
39
+ case 'api-key': {
40
+ if (!opts.provider) {
41
+ console.error(chalk.red('Provider required'));
42
+ process.exit(1);
43
+ }
44
+ const { password } = await import('@inquirer/prompts');
45
+ const key = await password({ message: `Enter API key for ${opts.provider}:` });
46
+ if (!key) {
47
+ console.log(chalk.dim('Cancelled.'));
48
+ return;
49
+ }
50
+ // Try keytar (OS keychain); fall back to config file
51
+ try {
52
+ const keytar = await import('keytar');
53
+ await keytar.setPassword('nexagent', opts.provider, key);
54
+ console.log(chalk.green(`${SYM.SUCCESS} API key stored in OS keychain for ${opts.provider}`));
55
+ }
56
+ catch {
57
+ // keytar unavailable (CI, containers) — store in config
58
+ const config = await loadConfig(dataDir);
59
+ const providers = config.providers;
60
+ if (!providers[opts.provider])
61
+ providers[opts.provider] = {};
62
+ providers[opts.provider].apiKey = key;
63
+ await saveConfig(dataDir, config);
64
+ console.log(chalk.yellow(`${SYM.WARNING} Stored in config file (keychain unavailable)`));
65
+ }
66
+ break;
67
+ }
68
+ }
69
+ }
70
+ function setNestedKey(obj, dotPath, value) {
71
+ const parts = dotPath.split('.');
72
+ let cur = obj;
73
+ for (let i = 0; i < parts.length - 1; i++) {
74
+ const part = parts[i];
75
+ if (typeof cur[part] !== 'object' || cur[part] === null)
76
+ cur[part] = {};
77
+ cur = cur[part];
78
+ }
79
+ const last = parts[parts.length - 1];
80
+ // Try to coerce to boolean/number
81
+ if (value === 'true') {
82
+ cur[last] = true;
83
+ return;
84
+ }
85
+ if (value === 'false') {
86
+ cur[last] = false;
87
+ return;
88
+ }
89
+ const num = Number(value);
90
+ if (!isNaN(num)) {
91
+ cur[last] = num;
92
+ return;
93
+ }
94
+ cur[last] = value;
95
+ }
96
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface DoctorOpts {
2
+ json?: boolean;
3
+ dataDir?: string;
4
+ fix?: boolean;
5
+ }
6
+ export declare function runDoctor(opts: DoctorOpts): Promise<void>;
7
+ export {};
8
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../../src/commands/doctor.ts"],"names":[],"mappings":"AAqBA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AA8ID,wBAAsB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmD/D"}
@@ -0,0 +1,201 @@
1
+ // ============================================================
2
+ // Command: nexagent doctor
3
+ // Runtime diagnostics — verify the install is healthy
4
+ // ============================================================
5
+ import chalk from 'chalk';
6
+ import { NEXAGENT_VERSION, SYM, MIN_NODE_VERSION } from '@nexagent-cli/shared';
7
+ import { loadConfig } from '../config/loader.js';
8
+ import { openDatabase } from '../db/database.js';
9
+ import { LLMRouter } from '../llm/router.js';
10
+ import { homedir } from 'node:os';
11
+ import { join } from 'node:path';
12
+ import { statfs } from 'node:fs/promises';
13
+ async function checkNode() {
14
+ const v = process.version;
15
+ const major = parseInt(v.slice(1).split('.')[0], 10);
16
+ if (major >= MIN_NODE_VERSION) {
17
+ return { name: 'Node.js', status: 'ok', message: `${v} (required: >=${MIN_NODE_VERSION})` };
18
+ }
19
+ return {
20
+ name: 'Node.js',
21
+ status: 'fail',
22
+ message: `${v} (required: >=${MIN_NODE_VERSION})`,
23
+ fix: `Install Node.js ${MIN_NODE_VERSION}+ from https://nodejs.org`,
24
+ };
25
+ }
26
+ async function checkNativeModules() {
27
+ const results = [];
28
+ // better-sqlite3
29
+ try {
30
+ const bs3 = await import('better-sqlite3');
31
+ const Database = bs3.default;
32
+ const db = new Database(':memory:');
33
+ db.prepare('SELECT 1').get();
34
+ db.close();
35
+ results.push({ name: 'better-sqlite3', status: 'ok', message: 'Native module loads and runs' });
36
+ }
37
+ catch (e) {
38
+ const msg = e instanceof Error ? e.message : String(e);
39
+ results.push({
40
+ name: 'better-sqlite3',
41
+ status: 'fail',
42
+ message: `Failed to load: ${msg.slice(0, 80)}`,
43
+ fix: 'Run: pnpm rebuild better-sqlite3 (or npm rebuild better-sqlite3)',
44
+ });
45
+ }
46
+ // keytar
47
+ try {
48
+ const keytar = await import('keytar');
49
+ results.push({ name: 'keytar', status: 'ok', message: 'Native module loads' });
50
+ }
51
+ catch (e) {
52
+ const msg = e instanceof Error ? e.message : String(e);
53
+ results.push({
54
+ name: 'keytar',
55
+ status: 'warn',
56
+ message: `Optional module not available: ${msg.slice(0, 80)}`,
57
+ fix: 'Run: pnpm rebuild keytar (API keys will be stored in config file as fallback)',
58
+ });
59
+ }
60
+ return results;
61
+ }
62
+ async function checkConfig(dataDir) {
63
+ try {
64
+ const config = await loadConfig(dataDir);
65
+ const providers = Object.entries(config.providers ?? {})
66
+ .filter(([, p]) => p && p.apiKey)
67
+ .map(([name]) => name);
68
+ if (providers.length === 0) {
69
+ return {
70
+ name: 'Configuration',
71
+ status: 'warn',
72
+ message: 'No API keys configured. Set one with: nexagent config api-key <provider>',
73
+ fix: 'nexagent config api-key openai',
74
+ };
75
+ }
76
+ return { name: 'Configuration', status: 'ok', message: `API keys for: ${providers.join(', ')}` };
77
+ }
78
+ catch (e) {
79
+ return {
80
+ name: 'Configuration',
81
+ status: 'fail',
82
+ message: `Failed to load config: ${e instanceof Error ? e.message : String(e)}`,
83
+ fix: 'Delete ~/.nexagent/config.json and run nexagent again to re-run the wizard',
84
+ };
85
+ }
86
+ }
87
+ async function checkDatabase(dataDir) {
88
+ try {
89
+ const db = await openDatabase(dataDir);
90
+ const tables = db.prepare("SELECT name FROM sqlite_master WHERE type='table'").all();
91
+ const expected = ['sessions', 'turns', 'memory_blocks', 'undo_stack'];
92
+ const missing = expected.filter(t => !tables.some(row => row.name === t));
93
+ if (missing.length > 0) {
94
+ return {
95
+ name: 'Database',
96
+ status: 'warn',
97
+ message: `Schema incomplete. Missing tables: ${missing.join(', ')}`,
98
+ fix: 'Database will auto-migrate on next run. If issues persist, delete ~/.nexagent/nexagent.db',
99
+ };
100
+ }
101
+ return { name: 'Database', status: 'ok', message: `${tables.length} tables, schema up to date` };
102
+ }
103
+ catch (e) {
104
+ return {
105
+ name: 'Database',
106
+ status: 'fail',
107
+ message: `Failed to open: ${e instanceof Error ? e.message : String(e)}`,
108
+ fix: 'Check permissions on ~/.nexagent/ and ensure better-sqlite3 is rebuilt',
109
+ };
110
+ }
111
+ }
112
+ async function checkLLMConnectivity(dataDir) {
113
+ const results = [];
114
+ try {
115
+ const config = await loadConfig(dataDir);
116
+ for (const [name, cfg] of Object.entries(config.providers ?? {})) {
117
+ const { apiKey, baseUrl } = cfg;
118
+ if (!apiKey) {
119
+ results.push({ name: `LLM: ${name}`, status: 'warn', message: 'No API key configured' });
120
+ continue;
121
+ }
122
+ try {
123
+ const router = new LLMRouter({ provider: name, apiKey, baseUrl });
124
+ const models = await router.listModels();
125
+ results.push({ name: `LLM: ${name}`, status: 'ok', message: `${models.length} models available` });
126
+ }
127
+ catch (e) {
128
+ const msg = e instanceof Error ? e.message : String(e);
129
+ results.push({ name: `LLM: ${name}`, status: 'warn', message: `Connection issue: ${msg.slice(0, 60)}` });
130
+ }
131
+ }
132
+ }
133
+ catch {
134
+ results.push({ name: 'LLM connectivity', status: 'warn', message: 'Could not check (config error)' });
135
+ }
136
+ return results;
137
+ }
138
+ async function checkDisk(dataDir) {
139
+ try {
140
+ const stats = await statfs(dataDir);
141
+ const freeGB = (stats.bavail * stats.bsize) / (1024 ** 3);
142
+ if (freeGB < 0.5) {
143
+ return { name: 'Disk space', status: 'warn', message: `Only ${freeGB.toFixed(2)} GB free`, fix: 'Free up disk space' };
144
+ }
145
+ return { name: 'Disk space', status: 'ok', message: `${freeGB.toFixed(1)} GB free` };
146
+ }
147
+ catch {
148
+ return { name: 'Disk space', status: 'warn', message: 'Could not check disk space' };
149
+ }
150
+ }
151
+ export async function runDoctor(opts) {
152
+ const dataDir = opts.dataDir ?? join(homedir(), '.nexagent');
153
+ const allChecks = [];
154
+ allChecks.push(await checkNode());
155
+ allChecks.push(...await checkNativeModules());
156
+ allChecks.push(await checkConfig(dataDir));
157
+ allChecks.push(await checkDatabase(dataDir));
158
+ allChecks.push(...await checkLLMConnectivity(dataDir));
159
+ allChecks.push(await checkDisk(dataDir));
160
+ if (opts.json) {
161
+ console.log(JSON.stringify({
162
+ version: NEXAGENT_VERSION,
163
+ healthy: !allChecks.some(c => c.status === 'fail'),
164
+ checks: allChecks,
165
+ }, null, 2));
166
+ return;
167
+ }
168
+ console.log(chalk.bold(`\n 🏥 NexAgent Doctor (v${NEXAGENT_VERSION})\n`));
169
+ let failCount = 0;
170
+ let warnCount = 0;
171
+ for (const check of allChecks) {
172
+ const icon = check.status === 'ok' ? chalk.green(SYM.SUCCESS)
173
+ : check.status === 'warn' ? chalk.yellow(SYM.WARNING)
174
+ : chalk.red(SYM.ERROR);
175
+ const color = check.status === 'ok' ? chalk.green
176
+ : check.status === 'warn' ? chalk.yellow
177
+ : chalk.red;
178
+ console.log(` ${icon} ${chalk.bold(check.name.padEnd(22))} ${color(check.message)}`);
179
+ if (check.fix) {
180
+ console.log(chalk.cyan(` → Fix: ${check.fix}`));
181
+ }
182
+ if (check.status === 'fail')
183
+ failCount++;
184
+ if (check.status === 'warn')
185
+ warnCount++;
186
+ }
187
+ console.log('');
188
+ if (failCount === 0 && warnCount === 0) {
189
+ console.log(chalk.green(` ${SYM.SUCCESS} All systems operational. NexAgent is ready to go!\n`));
190
+ }
191
+ else if (failCount === 0) {
192
+ console.log(chalk.yellow(` ${SYM.WARNING} ${warnCount} warning(s). NexAgent should work, but some features may be limited.\n`));
193
+ }
194
+ else {
195
+ console.log(chalk.red(` ${SYM.ERROR} ${failCount} issue(s) found. Please fix before using NexAgent.\n`));
196
+ if (opts.fix) {
197
+ console.log(chalk.dim(' (Auto-fix not yet implemented — run the suggested commands above)\n'));
198
+ }
199
+ }
200
+ }
201
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface MemoryOpts {
2
+ agent?: string;
3
+ json?: boolean;
4
+ blockId?: string;
5
+ file?: string;
6
+ merge?: boolean;
7
+ out?: string;
8
+ force?: boolean;
9
+ dataDir?: string;
10
+ }
11
+ export declare function runMemory(subcommand: string, opts: MemoryOpts): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/commands/memory.ts"],"names":[],"mappings":"AAaA,UAAU,UAAU;IAClB,KAAK,CAAC,EAAK,MAAM,CAAC;IAClB,IAAI,CAAC,EAAM,OAAO,CAAC;IACnB,OAAO,CAAC,EAAG,MAAM,CAAC;IAClB,IAAI,CAAC,EAAM,MAAM,CAAC;IAClB,KAAK,CAAC,EAAK,OAAO,CAAC;IACnB,GAAG,CAAC,EAAO,MAAM,CAAC;IAClB,KAAK,CAAC,EAAK,OAAO,CAAC;IACnB,OAAO,CAAC,EAAG,MAAM,CAAC;CACnB;AAED,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFnF"}