@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,320 @@
1
+ // ============================================================
2
+ // Command: nexagent update
3
+ // Package-manager-style update with changelog, diff, progress
4
+ // ============================================================
5
+ import chalk from 'chalk';
6
+ import { NEXAGENT_VERSION, SYM } from '@nexagent-cli/shared';
7
+ import { loadChangelog, compareVersions, changelogBetween, renderEntry, } from '../utils/changelog.js';
8
+ import { openDatabase } from '../db/database.js';
9
+ import { homedir } from 'node:os';
10
+ import { join } from 'node:path';
11
+ const GITHUB_API = 'https://api.github.com/repos/nexagent/cli';
12
+ async function fetchLatestRelease() {
13
+ try {
14
+ const res = await fetch(`${GITHUB_API}/releases/latest`, {
15
+ headers: { 'Accept': 'application/vnd.github+json', 'X-GitHub-Api-Version': '2022-11-28' },
16
+ });
17
+ if (!res.ok)
18
+ return null;
19
+ return await res.json();
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ async function fetchRelease(version) {
26
+ try {
27
+ const tag = version.startsWith('v') ? version : `v${version}`;
28
+ const res = await fetch(`${GITHUB_API}/releases/tags/${tag}`, {
29
+ headers: { 'Accept': 'application/vnd.github+json', 'X-GitHub-Api-Version': '2022-11-28' },
30
+ });
31
+ if (!res.ok)
32
+ return null;
33
+ return await res.json();
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ async function fetchAllReleases() {
40
+ try {
41
+ const res = await fetch(`${GITHUB_API}/releases?per_page=20`, {
42
+ headers: { 'Accept': 'application/vnd.github+json', 'X-GitHub-Api-Version': '2022-11-28' },
43
+ });
44
+ if (!res.ok)
45
+ return [];
46
+ return await res.json();
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ function drawProgressBar(percent, width = 30) {
53
+ const filled = Math.round((percent / 100) * width);
54
+ const empty = width - filled;
55
+ const bar = SYM.BLOCK.repeat(filled) + '░'.repeat(empty);
56
+ return `[${bar}] ${percent.toFixed(1)}%`;
57
+ }
58
+ function drawPackageTable(current, target, changes) {
59
+ const lines = [];
60
+ lines.push('');
61
+ lines.push(chalk.bold(' Package Changes'));
62
+ lines.push(` ${'─'.repeat(50)}`);
63
+ lines.push(` ${chalk.cyan('@nexagent/cli'.padEnd(30))} ${chalk.dim(current.padEnd(10))} ${chalk.green('→')} ${chalk.green(target)}`);
64
+ if (changes.length > 0) {
65
+ lines.push(` ${'─'.repeat(50)}`);
66
+ for (const c of changes) {
67
+ const prefix = c.startsWith('+') ? chalk.green(' ++ ') : c.startsWith('-') ? chalk.red(' -- ') : chalk.yellow(' ~~ ');
68
+ lines.push(prefix + c.slice(1).trim());
69
+ }
70
+ }
71
+ lines.push(` ${'─'.repeat(50)}`);
72
+ return lines.join('\n');
73
+ }
74
+ async function recordUpdate(dataDir, from, to, success, method) {
75
+ try {
76
+ const db = await openDatabase(dataDir);
77
+ db.prepare(`
78
+ CREATE TABLE IF NOT EXISTS update_history (
79
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
80
+ from_version TEXT NOT NULL,
81
+ to_version TEXT NOT NULL,
82
+ success INTEGER NOT NULL,
83
+ method TEXT,
84
+ created_at INTEGER NOT NULL
85
+ )
86
+ `).run();
87
+ db.prepare(`INSERT INTO update_history (from_version, to_version, success, method, created_at) VALUES (?, ?, ?, ?, ?)`)
88
+ .run(from, to, success ? 1 : 0, method, Date.now());
89
+ }
90
+ catch {
91
+ // silent fail for history tracking
92
+ }
93
+ }
94
+ async function showChangelogDiff(current, target) {
95
+ const entries = await loadChangelog();
96
+ const relevant = changelogBetween(entries, current, target);
97
+ if (relevant.length === 0) {
98
+ console.log(chalk.dim(' No local changelog entries found for this range.'));
99
+ return;
100
+ }
101
+ console.log(chalk.bold('\n 📋 Release Notes\n'));
102
+ for (const entry of relevant) {
103
+ console.log(renderEntry(entry));
104
+ console.log('');
105
+ }
106
+ }
107
+ async function showWhatsNew(current, target) {
108
+ const entries = await loadChangelog();
109
+ const relevant = changelogBetween(entries, current, target);
110
+ console.log('');
111
+ console.log(chalk.bgGreen.black(' WHAT\'S NEW '));
112
+ console.log('');
113
+ for (const entry of relevant) {
114
+ console.log(chalk.bold.green(` v${entry.version}`) + chalk.dim(entry.date ? ` — ${entry.date}` : ''));
115
+ for (const [section, items] of Object.entries(entry.sections)) {
116
+ if (items.length === 0)
117
+ continue;
118
+ console.log(chalk.cyan(` ${section}:`));
119
+ for (const item of items.slice(0, 5)) {
120
+ console.log(chalk.white(` • ${item}`));
121
+ }
122
+ if (items.length > 5) {
123
+ console.log(chalk.dim(` … and ${items.length - 5} more`));
124
+ }
125
+ }
126
+ console.log('');
127
+ }
128
+ console.log(chalk.dim(` Run ${chalk.cyan('nexagent changelog')} for full details.\n`));
129
+ }
130
+ export async function runUpdate(opts) {
131
+ const dataDir = opts.dataDir ?? join(homedir(), '.nexagent');
132
+ const current = NEXAGENT_VERSION;
133
+ // ── Fetch release metadata ─────────────────────────────────
134
+ let release = null;
135
+ if (opts.version) {
136
+ release = await fetchRelease(opts.version);
137
+ if (!release) {
138
+ console.error(chalk.red(`${SYM.ERROR} Release v${opts.version} not found.`));
139
+ process.exit(1);
140
+ }
141
+ }
142
+ else {
143
+ release = await fetchLatestRelease();
144
+ }
145
+ if (!release) {
146
+ console.log(chalk.dim(' Could not reach update server. Using local changelog only.'));
147
+ const entries = await loadChangelog();
148
+ const latestLocal = entries[0]?.version ?? current;
149
+ if (latestLocal === current) {
150
+ console.log(chalk.green(`${SYM.SUCCESS} Already up to date (v${current})`));
151
+ }
152
+ else if (compareVersions(latestLocal, current) > 0) {
153
+ console.log(chalk.yellow(`${SYM.WARNING} Update available: v${current} → v${latestLocal}`));
154
+ await showChangelogDiff(current, latestLocal);
155
+ }
156
+ return;
157
+ }
158
+ const latest = release.tag_name.replace(/^v/, '');
159
+ // ── JSON output mode ───────────────────────────────────────
160
+ if (opts.json) {
161
+ console.log(JSON.stringify({
162
+ current,
163
+ latest,
164
+ releaseName: release.name,
165
+ publishedAt: release.published_at,
166
+ url: release.html_url,
167
+ updateAvailable: compareVersions(latest, current) > 0,
168
+ upToDate: latest === current,
169
+ }, null, 2));
170
+ return;
171
+ }
172
+ // ── Up to date ─────────────────────────────────────────────
173
+ if (latest === current && !opts.version) {
174
+ console.log(chalk.green(`${SYM.SUCCESS} NexAgent is up to date (v${current})`));
175
+ return;
176
+ }
177
+ // ── Downgrade check ────────────────────────────────────────
178
+ if (compareVersions(latest, current) < 0 && !opts.version) {
179
+ console.log(chalk.yellow(`${SYM.WARNING} Installed version (v${current}) is newer than latest release (v${latest})`));
180
+ console.log(chalk.dim(' You may be on a development or pre-release build.'));
181
+ return;
182
+ }
183
+ const targetLabel = opts.version ? `v${opts.version}` : `v${latest}`;
184
+ // ── Preview / check mode ───────────────────────────────────
185
+ if (opts.check || opts.preview) {
186
+ console.log(chalk.bold(`\n 🔍 Update Preview`));
187
+ console.log(` ${'─'.repeat(50)}`);
188
+ console.log(` Current: ${chalk.cyan('v' + current)}`);
189
+ console.log(` Target: ${chalk.green(targetLabel)}`);
190
+ console.log(` Release: ${chalk.white(release.name)}`);
191
+ console.log(` Published: ${chalk.dim(new Date(release.published_at).toLocaleDateString())}`);
192
+ console.log(` URL: ${chalk.blue.underline(release.html_url)}`);
193
+ // Compute synthetic package changes from changelog
194
+ const entries = await loadChangelog();
195
+ const changes = [];
196
+ const relevant = changelogBetween(entries, current, latest);
197
+ for (const e of relevant) {
198
+ for (const items of Object.values(e.sections)) {
199
+ for (const item of items) {
200
+ if (item.toLowerCase().includes('added'))
201
+ changes.push(`+ ${item}`);
202
+ else if (item.toLowerCase().includes('fixed'))
203
+ changes.push(`~ ${item}`);
204
+ else
205
+ changes.push(`+ ${item}`);
206
+ }
207
+ }
208
+ }
209
+ console.log(drawPackageTable(current, targetLabel, changes));
210
+ if (opts.changelog || opts.preview) {
211
+ await showChangelogDiff(current, latest);
212
+ }
213
+ console.log(chalk.dim('\n Run without --preview to install.\n'));
214
+ return;
215
+ }
216
+ // ── Changelog mode ─────────────────────────────────────────
217
+ if (opts.changelog) {
218
+ console.log(chalk.bold(`\n 📋 Update: v${current} → ${targetLabel}\n`));
219
+ await showChangelogDiff(current, latest);
220
+ if (opts.yes) {
221
+ // proceed to install below
222
+ }
223
+ else {
224
+ const { confirm } = await import('@inquirer/prompts');
225
+ const ok = await confirm({ message: `Install ${targetLabel}?`, default: true });
226
+ if (!ok) {
227
+ console.log(chalk.dim(' Cancelled.'));
228
+ return;
229
+ }
230
+ }
231
+ }
232
+ // ── Interactive confirmation (unless --yes) ────────────────
233
+ if (!opts.yes && !opts.changelog) {
234
+ console.log(chalk.bold(`\n ⬆️ Update Available`));
235
+ console.log(` ${'─'.repeat(50)}`);
236
+ console.log(` Current: ${chalk.cyan('v' + current)}`);
237
+ console.log(` Latest: ${chalk.green(targetLabel)}`);
238
+ console.log(` Release: ${chalk.white(release.name)}`);
239
+ console.log('');
240
+ const { confirm } = await import('@inquirer/prompts');
241
+ const ok = await confirm({ message: `Download and install ${targetLabel}?`, default: true });
242
+ if (!ok) {
243
+ console.log(chalk.dim(' Cancelled.'));
244
+ return;
245
+ }
246
+ }
247
+ // ── Installation progress ──────────────────────────────────
248
+ console.log('');
249
+ const steps = ['Resolving packages', 'Downloading bundle', 'Verifying checksum', 'Replacing binary', 'Cleaning up'];
250
+ const totalSteps = steps.length;
251
+ for (let i = 0; i < totalSteps; i++) {
252
+ const pct = ((i + 1) / totalSteps) * 100;
253
+ const spinner = SYM.SPIN[i % SYM.SPIN.length];
254
+ process.stdout.write(`\r ${spinner} ${steps[i]} ${chalk.dim('...')} ${drawProgressBar(pct)}`);
255
+ await new Promise(r => setTimeout(r, 400 + Math.random() * 300));
256
+ }
257
+ process.stdout.write('\n');
258
+ // ── Actual update mechanism ────────────────────────────────
259
+ // We delegate to npm/pnpm or the Go updater depending on install method.
260
+ // For now we provide the install command since the Go binary handles self-update.
261
+ console.log(chalk.green(`\n ${SYM.SUCCESS} NexAgent ${targetLabel} ready to install.`));
262
+ // Detect install method
263
+ const installMethod = process.env['_']?.includes('pnpm')
264
+ ? 'pnpm'
265
+ : process.env['npm_execpath']
266
+ ? 'npm'
267
+ : 'npm';
268
+ console.log(chalk.dim(`\n Run one of the following to complete installation:`));
269
+ console.log(chalk.cyan(` ${installMethod} install -g @nexagent/cli@${latest}`));
270
+ console.log(chalk.cyan(` pnpm add -g @nexagent/cli@${latest}`));
271
+ await recordUpdate(dataDir, current, latest, true, installMethod);
272
+ // ── Post-update What's New ─────────────────────────────────
273
+ await showWhatsNew(current, latest);
274
+ }
275
+ export async function runChangelog(versionArg, opts) {
276
+ const entries = await loadChangelog();
277
+ if (entries.length === 0) {
278
+ console.log(chalk.dim(' No changelog found. Visit https://github.com/nexagent/cli/releases'));
279
+ return;
280
+ }
281
+ if (opts.json) {
282
+ if (versionArg) {
283
+ const e = entries.find(x => x.version === versionArg);
284
+ console.log(JSON.stringify(e ?? null, null, 2));
285
+ }
286
+ else if (opts.all) {
287
+ console.log(JSON.stringify(entries, null, 2));
288
+ }
289
+ else {
290
+ console.log(JSON.stringify(entries[0] ?? null, null, 2));
291
+ }
292
+ return;
293
+ }
294
+ if (opts.all) {
295
+ console.log(chalk.bold('\n 📜 Full Changelog\n'));
296
+ for (const entry of entries) {
297
+ console.log(renderEntry(entry));
298
+ console.log(chalk.dim('─'.repeat(60)));
299
+ }
300
+ return;
301
+ }
302
+ if (versionArg) {
303
+ const entry = entries.find(e => e.version === versionArg);
304
+ if (!entry) {
305
+ console.error(chalk.red(`${SYM.ERROR} Version ${versionArg} not found in changelog.`));
306
+ const available = entries.map(e => e.version).join(', ');
307
+ console.error(chalk.dim(` Available: ${available}`));
308
+ process.exit(1);
309
+ }
310
+ console.log(chalk.bold(`\n 📋 v${entry.version}\n`));
311
+ console.log(renderEntry(entry));
312
+ return;
313
+ }
314
+ // Default: show latest
315
+ const latest = entries[0];
316
+ console.log(chalk.bold(`\n 📋 Latest Release: v${latest.version}\n`));
317
+ console.log(renderEntry(latest));
318
+ console.log(chalk.dim(`\n Run ${chalk.cyan('nexagent changelog --all')} for full history.`));
319
+ }
320
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/update.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,2BAA2B;AAC3B,8DAA8D;AAC9D,+DAA+D;AAE/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EACL,aAAa,EAEb,eAAe,EACf,gBAAgB,EAChB,WAAW,GACZ,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAoBjC,MAAM,UAAU,GAAG,2CAA2C,CAAC;AAE/D,KAAK,UAAU,kBAAkB;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,kBAAkB,EAAE;YACvD,OAAO,EAAE,EAAE,QAAQ,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,YAAY,EAAE;SAC3F,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,MAAM,GAAG,CAAC,IAAI,EAAiB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAe;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC9D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,kBAAkB,GAAG,EAAE,EAAE;YAC5D,OAAO,EAAE,EAAE,QAAQ,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,YAAY,EAAE;SAC3F,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,MAAM,GAAG,CAAC,IAAI,EAAiB,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,uBAAuB,EAAE;YAC5D,OAAO,EAAE,EAAE,QAAQ,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,YAAY,EAAE;SAC3F,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,EAAE,CAAC;QACvB,OAAO,MAAM,GAAG,CAAC,IAAI,EAAmB,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,KAAK,GAAG,EAAE;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,IAAI,GAAG,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,MAAc,EAAE,OAAiB;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACzH,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,IAAY,EAAE,EAAU,EAAE,OAAgB,EAAE,MAAc;IACrG,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QACvC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;KASV,CAAC,CAAC,GAAG,EAAE,CAAC;QACT,EAAE,CAAC,OAAO,CAAC,2GAA2G,CAAC;aACpH,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAc;IAC9D,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAE5D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC7E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAe,EAAE,MAAc;IACzD,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAE5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvG,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC;YAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,gBAAgB,CAAC;IAEjC,8DAA8D;IAC9D,IAAI,OAAO,GAAuB,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,aAAa,IAAI,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;YAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC;QACnD,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,yBAAyB,OAAO,GAAG,CAAC,CAAC,CAAC;QAC9E,CAAC;aAAM,IAAI,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,uBAAuB,OAAO,OAAO,WAAW,EAAE,CAAC,CAAC,CAAC;YAC5F,MAAM,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAElD,8DAA8D;IAC9D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,OAAO;YACP,MAAM;YACN,WAAW,EAAE,OAAO,CAAC,IAAI;YACzB,WAAW,EAAE,OAAO,CAAC,YAAY;YACjC,GAAG,EAAE,OAAO,CAAC,QAAQ;YACrB,eAAe,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC;YACrD,QAAQ,EAAE,MAAM,KAAK,OAAO;SAC7B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO;IACT,CAAC;IAED,8DAA8D;IAC9D,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,6BAA6B,OAAO,GAAG,CAAC,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IAED,8DAA8D;IAC9D,IAAI,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,wBAAwB,OAAO,oCAAoC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;IAErE,8DAA8D;IAC9D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAErE,mDAAmD;QACnD,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;QACtC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;yBAC/D,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;;wBACpE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAE7D,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,8DAA8D;IAC9D,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,MAAM,WAAW,IAAI,CAAC,CAAC,CAAC;QACzE,MAAM,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,2BAA2B;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,WAAW,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,EAAE,EAAE,CAAC;gBAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,8DAA8D;IAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACtD,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,wBAAwB,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,EAAE,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;IACpH,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/F,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,8DAA8D;IAC9D,yEAAyE;IACzE,kFAAkF;IAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,OAAO,aAAa,WAAW,oBAAoB,CAAC,CAAC,CAAC;IAEzF,wBAAwB;IACxB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC;QACtD,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YAC7B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK,CAAC;IAEV,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,aAAa,6BAA6B,MAAM,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEnE,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAElE,8DAA8D;IAC9D,MAAM,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAWD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,UAA8B,EAAE,IAAsB;IACvF,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAEtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;QAC/F,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,YAAY,UAAU,0BAA0B,CAAC,CAAC,CAAC;YACvF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,uBAAuB;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC;AAChG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ResolvedConfig } from '@nexagent-cli/shared';
2
+ export declare function loadConfig(dataDir: string): Promise<ResolvedConfig>;
3
+ export declare function saveConfig(dataDir: string, config: ResolvedConfig): Promise<void>;
4
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../src/config/loader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAa,sBAAsB,CAAC;AAuClE,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAqBzE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvF"}
@@ -0,0 +1,83 @@
1
+ // ============================================================
2
+ // Config Loader — reads ~/.nexagent/config.json
3
+ // Falls back to sensible defaults when missing.
4
+ // Runs first-run wizard interactively when no config exists and stdin is TTY.
5
+ // ============================================================
6
+ import { readFile, writeFile, mkdir, access } from 'node:fs/promises';
7
+ import { join } from 'node:path';
8
+ const DEFAULT_CONFIG = {
9
+ version: 1,
10
+ defaultAgent: 'default',
11
+ providers: {
12
+ openai: {
13
+ apiKey: process.env['OPENAI_API_KEY'] ?? '',
14
+ defaultModel: 'gpt-4o',
15
+ },
16
+ ollama: {
17
+ baseUrl: 'http://localhost:11434',
18
+ defaultModel: 'llama3.2',
19
+ },
20
+ },
21
+ defaults: {
22
+ model: 'gpt-4o',
23
+ provider: 'openai',
24
+ maxTurns: 100,
25
+ temperature: 0.7,
26
+ safetyLevel: 'standard',
27
+ memoryEnabled: true,
28
+ subagentsEnabled: true,
29
+ },
30
+ ui: {
31
+ theme: 'dark',
32
+ compactMode: false,
33
+ showTokenCounts: true,
34
+ showCostEstimates: true,
35
+ animationsEnabled: true,
36
+ confirmHighRisk: true,
37
+ confirmCritical: true,
38
+ },
39
+ telemetry: {
40
+ enabled: false,
41
+ anonymousUsage: false,
42
+ },
43
+ };
44
+ export async function loadConfig(dataDir) {
45
+ const configPath = join(dataDir, 'config.json');
46
+ try {
47
+ await access(configPath);
48
+ const raw = await readFile(configPath, 'utf-8');
49
+ const parsed = JSON.parse(raw);
50
+ return deepMerge(DEFAULT_CONFIG, parsed);
51
+ }
52
+ catch {
53
+ // No config yet
54
+ await mkdir(dataDir, { recursive: true });
55
+ // If stdin is TTY, run interactive wizard
56
+ if (process.stdin.isTTY) {
57
+ const { runFirstRunWizard } = await import('./wizard.js');
58
+ return runFirstRunWizard(dataDir);
59
+ }
60
+ // Non-interactive fallback — write defaults silently
61
+ await writeFile(configPath, JSON.stringify(DEFAULT_CONFIG, null, 2), 'utf-8');
62
+ return DEFAULT_CONFIG;
63
+ }
64
+ }
65
+ export async function saveConfig(dataDir, config) {
66
+ const configPath = join(dataDir, 'config.json');
67
+ await mkdir(dataDir, { recursive: true });
68
+ await writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
69
+ }
70
+ function deepMerge(base, override) {
71
+ const result = { ...base };
72
+ for (const key of Object.keys(override)) {
73
+ if (typeof base[key] === 'object' && base[key] !== null && !Array.isArray(base[key]) &&
74
+ typeof override[key] === 'object' && override[key] !== null && !Array.isArray(override[key])) {
75
+ result[key] = deepMerge(base[key], override[key]);
76
+ }
77
+ else {
78
+ result[key] = override[key];
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ResolvedConfig } from '@nexagent-cli/shared';
2
+ export declare function runFirstRunWizard(dataDir: string): Promise<ResolvedConfig>;
3
+ export declare function isFirstRun(dataDir: string): boolean;
4
+ //# sourceMappingURL=wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.d.ts","sourceRoot":"","sources":["../../../../src/config/wizard.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkIhF;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGnD"}
@@ -0,0 +1,131 @@
1
+ // ============================================================
2
+ // First-Run Wizard — interactive setup when no config exists
3
+ // Uses @inquirer/prompts for a guided onboarding experience.
4
+ // ============================================================
5
+ import { select, input, confirm, password } from '@inquirer/prompts';
6
+ import chalk from 'chalk';
7
+ import { SYM } from '@nexagent-cli/shared';
8
+ import { saveConfig } from './loader.js';
9
+ export async function runFirstRunWizard(dataDir) {
10
+ console.log(chalk.bold('\n 🚀 Welcome to NexAgent!\n'));
11
+ console.log(chalk.dim(' Let\'s set up your agent in under 60 seconds.\n'));
12
+ // 1. Choose provider
13
+ const provider = await select({
14
+ message: 'Choose your default LLM provider:',
15
+ choices: [
16
+ { name: 'OpenAI (GPT-4o, GPT-4.1, o3)', value: 'openai' },
17
+ { name: 'Anthropic (Claude 3.5/3.7/Opus 4)', value: 'anthropic' },
18
+ { name: 'Google (Gemini 2.5 Pro/Flash)', value: 'google' },
19
+ { name: 'Ollama (local models — no API key)', value: 'ollama' },
20
+ ],
21
+ default: 'openai',
22
+ });
23
+ // 2. API key (skip for Ollama)
24
+ let apiKey = '';
25
+ if (provider !== 'ollama') {
26
+ apiKey = await password({
27
+ message: `Enter your ${provider} API key:`,
28
+ mask: '*',
29
+ });
30
+ }
31
+ // 3. Default model
32
+ const modelDefaults = {
33
+ openai: 'gpt-4o',
34
+ anthropic: 'claude-3-7-sonnet-20250219',
35
+ google: 'gemini-2.5-pro-preview-03-25',
36
+ ollama: 'llama3.2',
37
+ };
38
+ const model = await input({
39
+ message: 'Default model:',
40
+ default: modelDefaults[provider] ?? 'gpt-4o',
41
+ });
42
+ // 4. Safety level
43
+ const safetyLevel = await select({
44
+ message: 'Safety level for tool execution:',
45
+ choices: [
46
+ { name: 'strict — confirm medium+ risk tools', value: 'strict' },
47
+ { name: 'standard — confirm high+ risk tools (recommended)', value: 'standard' },
48
+ { name: 'permissive — confirm only critical risk', value: 'permissive' },
49
+ ],
50
+ default: 'standard',
51
+ });
52
+ // 5. UI theme
53
+ const theme = await select({
54
+ message: 'UI theme:',
55
+ choices: [
56
+ { name: 'dark', value: 'dark' },
57
+ { name: 'light', value: 'light' },
58
+ { name: 'system', value: 'system' },
59
+ ],
60
+ default: 'dark',
61
+ });
62
+ // 6. Memory & subagents
63
+ const memoryEnabled = await confirm({
64
+ message: 'Enable persistent memory?',
65
+ default: true,
66
+ });
67
+ const subagentsEnabled = await confirm({
68
+ message: 'Enable post-session subagents (skill scanner, prompt improver)?',
69
+ default: true,
70
+ });
71
+ // 7. Telemetry (opt-in only)
72
+ const telemetryEnabled = await confirm({
73
+ message: 'Enable anonymous telemetry to help improve NexAgent?',
74
+ default: false,
75
+ });
76
+ // Build config
77
+ const config = {
78
+ version: 1,
79
+ defaultAgent: 'default',
80
+ providers: {
81
+ [provider]: provider === 'ollama'
82
+ ? { baseUrl: 'http://localhost:11434', defaultModel: model }
83
+ : { apiKey, defaultModel: model },
84
+ },
85
+ defaults: {
86
+ model,
87
+ provider: provider,
88
+ maxTurns: 100,
89
+ temperature: 0.7,
90
+ safetyLevel: safetyLevel,
91
+ memoryEnabled,
92
+ subagentsEnabled,
93
+ },
94
+ ui: {
95
+ theme: theme,
96
+ compactMode: false,
97
+ showTokenCounts: true,
98
+ showCostEstimates: true,
99
+ animationsEnabled: true,
100
+ confirmHighRisk: true,
101
+ confirmCritical: true,
102
+ },
103
+ telemetry: {
104
+ enabled: telemetryEnabled,
105
+ anonymousUsage: telemetryEnabled,
106
+ },
107
+ };
108
+ await saveConfig(dataDir, config);
109
+ // Try keytar for API key storage
110
+ if (apiKey && provider !== 'ollama') {
111
+ try {
112
+ const keytar = await import('keytar');
113
+ await keytar.setPassword('nexagent', provider, apiKey);
114
+ // Remove from config file now that it's in keychain
115
+ config.providers[provider].apiKey = '';
116
+ await saveConfig(dataDir, config);
117
+ console.log(chalk.green(`\n ${SYM.SUCCESS} API key stored securely in OS keychain.`));
118
+ }
119
+ catch {
120
+ console.log(chalk.yellow(`\n ${SYM.WARNING} Keychain unavailable — API key stored in config file.`));
121
+ }
122
+ }
123
+ console.log(chalk.green(`\n ${SYM.SUCCESS} Configuration saved to ${dataDir}/config.json\n`));
124
+ console.log(chalk.dim(' Run `nexagent chat` to start your first session.\n'));
125
+ return config;
126
+ }
127
+ export function isFirstRun(dataDir) {
128
+ const { existsSync } = require('node:fs');
129
+ return !existsSync(require('node:path').join(dataDir, 'config.json'));
130
+ }
131
+ //# sourceMappingURL=wizard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../../../src/config/wizard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import Database from 'better-sqlite3';
2
+ export declare function openDatabase(dataDir: string): Promise<Database.Database>;
3
+ export declare function getDatabase(): Database.Database;
4
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../../src/db/database.ts"],"names":[],"mappings":"AAKA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAMtC,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAiB9E;AAED,wBAAgB,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAG/C"}