@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,130 @@
1
+ // ============================================================
2
+ // Database — SQLite with WAL mode via better-sqlite3
3
+ // Single connection shared across all stores
4
+ // ============================================================
5
+ import Database from 'better-sqlite3';
6
+ import { join } from 'node:path';
7
+ import { mkdir } from 'node:fs/promises';
8
+ let _db = null;
9
+ export async function openDatabase(dataDir) {
10
+ if (_db)
11
+ return _db;
12
+ await mkdir(dataDir, { recursive: true });
13
+ const dbPath = join(dataDir, 'nexagent.db');
14
+ _db = new Database(dbPath);
15
+ // Performance + durability settings
16
+ _db.pragma('journal_mode = WAL');
17
+ _db.pragma('synchronous = NORMAL');
18
+ _db.pragma('cache_size = -32000'); // 32MB
19
+ _db.pragma('foreign_keys = ON');
20
+ _db.pragma('temp_store = MEMORY');
21
+ runMigrations(_db);
22
+ return _db;
23
+ }
24
+ export function getDatabase() {
25
+ if (!_db)
26
+ throw new Error('Database not initialised — call openDatabase() first');
27
+ return _db;
28
+ }
29
+ // ── Schema migrations ────────────────────────────────────────
30
+ function runMigrations(db) {
31
+ db.exec(`
32
+ CREATE TABLE IF NOT EXISTS schema_versions (
33
+ version INTEGER PRIMARY KEY,
34
+ applied_at INTEGER NOT NULL
35
+ );
36
+ `);
37
+ const applied = db.prepare('SELECT version FROM schema_versions').all()
38
+ .map(r => r.version);
39
+ const migrations = [
40
+ { version: 1, sql: MIGRATION_1 },
41
+ { version: 2, sql: MIGRATION_2 },
42
+ ];
43
+ const insert = db.prepare('INSERT INTO schema_versions VALUES (?, ?)');
44
+ for (const { version, sql } of migrations) {
45
+ if (!applied.includes(version)) {
46
+ db.exec(sql);
47
+ insert.run(version, Date.now());
48
+ console.error(`[db] Applied migration v${version}`);
49
+ }
50
+ }
51
+ }
52
+ // ── Migration 1: Core schema ─────────────────────────────────
53
+ const MIGRATION_1 = `
54
+ CREATE TABLE IF NOT EXISTS sessions (
55
+ id TEXT PRIMARY KEY,
56
+ agent_name TEXT NOT NULL,
57
+ model TEXT NOT NULL,
58
+ cwd TEXT NOT NULL,
59
+ started_at INTEGER NOT NULL,
60
+ ended_at INTEGER,
61
+ turn_count INTEGER NOT NULL DEFAULT 0,
62
+ status TEXT NOT NULL DEFAULT 'active',
63
+ total_cost_usd REAL NOT NULL DEFAULT 0,
64
+ tokens_in INTEGER NOT NULL DEFAULT 0,
65
+ tokens_out INTEGER NOT NULL DEFAULT 0
66
+ );
67
+
68
+ CREATE TABLE IF NOT EXISTS turns (
69
+ id TEXT PRIMARY KEY,
70
+ session_id TEXT NOT NULL REFERENCES sessions(id),
71
+ role TEXT NOT NULL,
72
+ content TEXT NOT NULL,
73
+ tool_calls TEXT,
74
+ tool_results TEXT,
75
+ model TEXT,
76
+ tokens_in INTEGER,
77
+ tokens_out INTEGER,
78
+ cost_usd REAL,
79
+ created_at INTEGER NOT NULL
80
+ );
81
+
82
+ CREATE TABLE IF NOT EXISTS memory_blocks (
83
+ id TEXT PRIMARY KEY,
84
+ agent_name TEXT NOT NULL,
85
+ block_type TEXT NOT NULL,
86
+ content TEXT NOT NULL,
87
+ version INTEGER NOT NULL DEFAULT 1,
88
+ token_estimate INTEGER NOT NULL DEFAULT 0,
89
+ updated_at INTEGER NOT NULL,
90
+ pinned INTEGER NOT NULL DEFAULT 0,
91
+ archived INTEGER NOT NULL DEFAULT 0,
92
+ tags TEXT NOT NULL DEFAULT '[]'
93
+ );
94
+
95
+ CREATE TABLE IF NOT EXISTS undo_stack (
96
+ id TEXT PRIMARY KEY,
97
+ session_id TEXT NOT NULL REFERENCES sessions(id),
98
+ tool_name TEXT NOT NULL,
99
+ operation TEXT NOT NULL,
100
+ file_path TEXT,
101
+ original_content TEXT,
102
+ created_at INTEGER NOT NULL
103
+ );
104
+
105
+ CREATE INDEX IF NOT EXISTS idx_turns_session_id ON turns(session_id);
106
+ CREATE INDEX IF NOT EXISTS idx_turns_created_at ON turns(created_at);
107
+ CREATE INDEX IF NOT EXISTS idx_memory_agent_name ON memory_blocks(agent_name);
108
+ CREATE INDEX IF NOT EXISTS idx_memory_block_type ON memory_blocks(block_type);
109
+ CREATE INDEX IF NOT EXISTS idx_undo_session_id ON undo_stack(session_id);
110
+ CREATE INDEX IF NOT EXISTS idx_sessions_agent_name ON sessions(agent_name);
111
+ CREATE INDEX IF NOT EXISTS idx_sessions_started_at ON sessions(started_at);
112
+ `;
113
+ // ── Migration 2: Memory proposals ────────────────────────────
114
+ const MIGRATION_2 = `
115
+ CREATE TABLE IF NOT EXISTS memory_proposals (
116
+ id TEXT PRIMARY KEY,
117
+ session_id TEXT NOT NULL REFERENCES sessions(id),
118
+ block_id TEXT,
119
+ block_type TEXT NOT NULL,
120
+ proposed_content TEXT NOT NULL,
121
+ rationale TEXT NOT NULL,
122
+ proposed_by TEXT NOT NULL,
123
+ status TEXT NOT NULL DEFAULT 'pending',
124
+ created_at INTEGER NOT NULL
125
+ );
126
+
127
+ CREATE INDEX IF NOT EXISTS idx_proposals_session_id ON memory_proposals(session_id);
128
+ CREATE INDEX IF NOT EXISTS idx_proposals_status ON memory_proposals(status);
129
+ `;
130
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../../src/db/database.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,qDAAqD;AACrD,6CAA6C;AAC7C,+DAA+D;AAE/D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAO,WAAW,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,IAAI,GAAG,GAA6B,IAAI,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IAEpB,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE5C,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE3B,oCAAoC;IACpC,GAAG,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACpC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO;IAC5C,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAChC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IAEpC,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAClF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gEAAgE;AAEhE,SAAS,aAAa,CAAC,EAAqB;IAC1C,EAAE,CAAC,IAAI,CAAC;;;;;GAKP,CAAC,CAAC;IAEH,MAAM,OAAO,GAAI,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAA4B;SAC/F,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAEvB,MAAM,UAAU,GAA4C;QAC1D,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;QAChC,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE;KACjC,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;IAEvE,KAAK,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC;AAED,gEAAgE;AAEhE,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DnB,CAAC;AAEF,gEAAgE;AAEhE,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;CAenB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { Session, AgentTurn, SessionSummary } from '@nexagent-cli/shared';
3
+ export declare class SessionStore {
4
+ private db;
5
+ constructor(db: Database.Database);
6
+ /** Expose raw DB for tools that need direct SQL access */
7
+ get database(): Database.Database;
8
+ createSession(agentName: string, model: string, cwd: string): Session;
9
+ endSession(sessionId: string, status: Session['status']): void;
10
+ updateSessionStats(sessionId: string, costUsd: number, tokensIn: number, tokensOut: number): void;
11
+ saveTurn(turn: AgentTurn): void;
12
+ getTurns(sessionId: string, limit?: number): AgentTurn[];
13
+ listSessions(agentName: string, limit?: number): SessionSummary[];
14
+ getSession(sessionId: string): Session | null;
15
+ deleteSession(sessionId: string): void;
16
+ }
17
+ //# sourceMappingURL=session-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../../../src/db/session-store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/E,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,0DAA0D;IAC1D,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAEhC;IAED,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAsBrE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;IAM9D,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAWjG,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAmB/B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,SAAS,EAAE;IA0BrD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,cAAc,EAAE;IA6B7D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAuB7C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAIvC"}
@@ -0,0 +1,117 @@
1
+ // ============================================================
2
+ // SessionStore — CRUD for sessions and turns
3
+ // ============================================================
4
+ import { generateId } from '@nexagent-cli/shared';
5
+ export class SessionStore {
6
+ db;
7
+ constructor(db) {
8
+ this.db = db;
9
+ }
10
+ /** Expose raw DB for tools that need direct SQL access */
11
+ get database() {
12
+ return this.db;
13
+ }
14
+ createSession(agentName, model, cwd) {
15
+ const session = {
16
+ id: generateId(),
17
+ agentName,
18
+ model,
19
+ cwd,
20
+ startedAt: Date.now(),
21
+ turnCount: 0,
22
+ status: 'active',
23
+ totalCostUsd: 0,
24
+ totalTokensIn: 0,
25
+ totalTokensOut: 0,
26
+ };
27
+ this.db.prepare(`
28
+ INSERT INTO sessions (id, agent_name, model, cwd, started_at, status, total_cost_usd, tokens_in, tokens_out, turn_count)
29
+ VALUES (?, ?, ?, ?, ?, 'active', 0, 0, 0, 0)
30
+ `).run(session.id, agentName, model, cwd, session.startedAt);
31
+ return session;
32
+ }
33
+ endSession(sessionId, status) {
34
+ this.db.prepare(`
35
+ UPDATE sessions SET status = ?, ended_at = ? WHERE id = ?
36
+ `).run(status, Date.now(), sessionId);
37
+ }
38
+ updateSessionStats(sessionId, costUsd, tokensIn, tokensOut) {
39
+ this.db.prepare(`
40
+ UPDATE sessions
41
+ SET total_cost_usd = total_cost_usd + ?,
42
+ tokens_in = tokens_in + ?,
43
+ tokens_out = tokens_out + ?,
44
+ turn_count = turn_count + 1
45
+ WHERE id = ?
46
+ `).run(costUsd, tokensIn, tokensOut, sessionId);
47
+ }
48
+ saveTurn(turn) {
49
+ this.db.prepare(`
50
+ INSERT INTO turns (id, session_id, role, content, tool_calls, tool_results, model, tokens_in, tokens_out, cost_usd, created_at)
51
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
52
+ `).run(turn.id, turn.sessionId, turn.role, turn.content, turn.toolCalls ? JSON.stringify(turn.toolCalls) : null, turn.toolResults ? JSON.stringify(turn.toolResults) : null, turn.model ?? null, turn.tokensIn ?? null, turn.tokensOut ?? null, turn.costUsd ?? null, turn.createdAt);
53
+ }
54
+ getTurns(sessionId, limit = 200) {
55
+ const rows = this.db.prepare(`
56
+ SELECT * FROM turns WHERE session_id = ? ORDER BY created_at ASC LIMIT ?
57
+ `).all(sessionId, limit);
58
+ return rows.map(r => ({
59
+ id: r.id,
60
+ sessionId: r.session_id,
61
+ role: r.role,
62
+ content: r.content,
63
+ toolCalls: r.tool_calls ? JSON.parse(r.tool_calls) : undefined,
64
+ toolResults: r.tool_results ? JSON.parse(r.tool_results) : undefined,
65
+ model: r.model ?? undefined,
66
+ tokensIn: r.tokens_in ?? undefined,
67
+ tokensOut: r.tokens_out ?? undefined,
68
+ costUsd: r.cost_usd ?? undefined,
69
+ createdAt: r.created_at,
70
+ }));
71
+ }
72
+ listSessions(agentName, limit = 20) {
73
+ const rows = this.db.prepare(`
74
+ SELECT s.*
75
+ FROM sessions s
76
+ WHERE s.agent_name = ?
77
+ ORDER BY s.started_at DESC
78
+ LIMIT ?
79
+ `).all(agentName, limit);
80
+ return rows.map(r => ({
81
+ id: r.id,
82
+ agentName: r.agent_name,
83
+ model: r.model,
84
+ cwd: r.cwd,
85
+ startedAt: r.started_at,
86
+ endedAt: r.ended_at ?? undefined,
87
+ turnCount: r.turn_count,
88
+ status: r.status,
89
+ totalCostUsd: r.total_cost_usd,
90
+ totalTokensIn: r.tokens_in,
91
+ totalTokensOut: r.tokens_out,
92
+ }));
93
+ }
94
+ getSession(sessionId) {
95
+ const row = this.db.prepare('SELECT * FROM sessions WHERE id = ?').get(sessionId);
96
+ if (!row)
97
+ return null;
98
+ return {
99
+ id: row.id,
100
+ agentName: row.agent_name,
101
+ model: row.model,
102
+ cwd: row.cwd,
103
+ startedAt: row.started_at,
104
+ endedAt: row.ended_at ?? undefined,
105
+ turnCount: row.turn_count,
106
+ status: row.status,
107
+ totalCostUsd: row.total_cost_usd,
108
+ totalTokensIn: row.tokens_in,
109
+ totalTokensOut: row.tokens_out,
110
+ };
111
+ }
112
+ deleteSession(sessionId) {
113
+ this.db.prepare('DELETE FROM turns WHERE session_id = ?').run(sessionId);
114
+ this.db.prepare('DELETE FROM sessions WHERE id = ?').run(sessionId);
115
+ }
116
+ }
117
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../../../src/db/session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,207 @@
1
+ #!/usr/bin/env node
2
+ // ============================================================
3
+ // NexAgent CLI — Entry Point
4
+ // Commander.js command tree + startup checks
5
+ // ============================================================
6
+ import { Command } from 'commander';
7
+ import { NEXAGENT_VERSION } from '@nexagent-cli/shared';
8
+ import { checkNodeVersion } from './utils/env.js';
9
+ import { runChat } from './commands/chat.js';
10
+ import { runRun } from './commands/run.js';
11
+ import { runMemory } from './commands/memory.js';
12
+ import { runSession } from './commands/session.js';
13
+ import { runConfig } from './commands/config.js';
14
+ import { runAgent } from './commands/agent.js';
15
+ import { runModels } from './commands/models.js';
16
+ import { runUpdate, runChangelog } from './commands/update.js';
17
+ import { runDoctor } from './commands/doctor.js';
18
+ import { runServer } from './commands/server.js';
19
+ // ── Pre-flight checks ────────────────────────────────────────
20
+ checkNodeVersion();
21
+ // ── Root program ─────────────────────────────────────────────
22
+ const program = new Command();
23
+ program
24
+ .name('nexagent')
25
+ .description('Locally-runnable AI agent with file editing, tool execution, and beautiful TUI')
26
+ .version(NEXAGENT_VERSION, '-v, --version', 'Output current version')
27
+ .helpOption('-h, --help', 'Show help')
28
+ .addHelpCommand('help [command]', 'Show help for a command')
29
+ // Global flags
30
+ .option('--no-color', 'Disable colour output')
31
+ .option('--json', 'Output machine-readable JSON (pipe mode)')
32
+ .option('--debug', 'Enable verbose debug logging')
33
+ .option('--data-dir <path>', 'Override agent data directory (default: ~/.nexagent)');
34
+ // ── nexagent chat ─────────────────────────────────────────────
35
+ program
36
+ .command('chat')
37
+ .alias('c')
38
+ .description('Start an interactive chat session with the agent')
39
+ .option('-a, --agent <name>', 'Agent name to use (default: "default")', 'default')
40
+ .option('-m, --model <model>', 'LLM model override (e.g. gpt-4o)')
41
+ .option('-p, --provider <provider>', 'LLM provider override (openai|anthropic|google|ollama)')
42
+ .option('--no-memory', 'Disable memory for this session')
43
+ .option('--no-subagents', 'Disable subagents for this session')
44
+ .option('--safety <level>', 'Safety level: strict|standard|permissive', 'standard')
45
+ .option('--max-turns <n>', 'Maximum turns before auto-exit', '100')
46
+ .option('--cwd <dir>', 'Working directory for file tools (default: cwd)')
47
+ .option('--resume <sessionId>', 'Resume a previous session by ID')
48
+ .action(async (opts, cmd) => {
49
+ const globals = cmd.parent?.opts() ?? {};
50
+ await runChat({ ...opts, ...globals });
51
+ });
52
+ // ── nexagent run ──────────────────────────────────────────────
53
+ program
54
+ .command('run <prompt>')
55
+ .alias('r')
56
+ .description('Run a single prompt non-interactively and exit')
57
+ .option('-a, --agent <name>', 'Agent name', 'default')
58
+ .option('-m, --model <model>', 'LLM model override')
59
+ .option('--max-turns <n>', 'Max agent turns', '10')
60
+ .option('--cwd <dir>', 'Working directory for file tools')
61
+ .option('--dry-run', 'Show what tools WOULD do — no side effects')
62
+ .option('--json', 'Output result as JSON')
63
+ .action(async (prompt, opts, cmd) => {
64
+ const globals = cmd.parent?.opts() ?? {};
65
+ await runRun(prompt, { ...opts, ...globals });
66
+ });
67
+ // ── nexagent memory ───────────────────────────────────────────
68
+ const memCmd = program.command('memory').alias('mem').description('Manage agent memory blocks');
69
+ memCmd
70
+ .command('list')
71
+ .description('List all memory blocks for an agent')
72
+ .option('-a, --agent <name>', 'Agent name', 'default')
73
+ .option('--json', 'Output as JSON')
74
+ .action(async (opts) => runMemory('list', opts));
75
+ memCmd
76
+ .command('show <blockId>')
77
+ .description('Show a specific memory block')
78
+ .option('-a, --agent <name>', 'Agent name', 'default')
79
+ .action(async (blockId, opts) => runMemory('show', { ...opts, blockId }));
80
+ memCmd
81
+ .command('edit <blockId>')
82
+ .description('Open a memory block in $EDITOR')
83
+ .option('-a, --agent <name>', 'Agent name', 'default')
84
+ .action(async (blockId, opts) => runMemory('edit', { ...opts, blockId }));
85
+ memCmd
86
+ .command('delete <blockId>')
87
+ .description('Delete a memory block (requires confirmation)')
88
+ .option('-a, --agent <name>', 'Agent name', 'default')
89
+ .option('-f, --force', 'Skip confirmation prompt')
90
+ .action(async (blockId, opts) => runMemory('delete', { ...opts, blockId }));
91
+ memCmd
92
+ .command('export')
93
+ .description('Export all memory blocks to a .nxpkg file')
94
+ .option('-a, --agent <name>', 'Agent name', 'default')
95
+ .option('-o, --out <file>', 'Output file path')
96
+ .action(async (opts) => runMemory('export', opts));
97
+ memCmd
98
+ .command('import <file>')
99
+ .description('Import memory blocks from a .nxpkg file')
100
+ .option('-a, --agent <name>', 'Agent name', 'default')
101
+ .option('--merge', 'Merge with existing memory (default: replace)')
102
+ .action(async (file, opts) => runMemory('import', { ...opts, file }));
103
+ // ── nexagent session ──────────────────────────────────────────
104
+ const sessCmd = program.command('session').alias('sess').description('Manage chat sessions');
105
+ sessCmd
106
+ .command('list')
107
+ .description('List recent sessions')
108
+ .option('-a, --agent <name>', 'Filter by agent', 'default')
109
+ .option('-n, --limit <n>', 'Number of sessions to show', '20')
110
+ .option('--json', 'Output as JSON')
111
+ .action(async (opts) => runSession('list', opts));
112
+ sessCmd
113
+ .command('show <sessionId>')
114
+ .description('Show full conversation transcript for a session')
115
+ .option('--json', 'Output as JSON')
116
+ .action(async (sessionId, opts) => runSession('show', { ...opts, sessionId }));
117
+ sessCmd
118
+ .command('delete <sessionId>')
119
+ .description('Delete a session and its turns')
120
+ .option('-f, --force', 'Skip confirmation')
121
+ .action(async (sessionId, opts) => runSession('delete', { ...opts, sessionId }));
122
+ // ── nexagent agent ────────────────────────────────────────────
123
+ const agentCmd = program.command('agent').description('Manage agents');
124
+ agentCmd
125
+ .command('list')
126
+ .description('List all configured agents')
127
+ .option('--json', 'Output as JSON')
128
+ .action(async (opts) => runAgent('list', opts));
129
+ agentCmd
130
+ .command('create <name>')
131
+ .description('Create a new agent profile')
132
+ .option('-m, --model <model>', 'Default model')
133
+ .option('-p, --provider <provider>', 'Default provider')
134
+ .action(async (name, opts) => runAgent('create', { ...opts, name }));
135
+ agentCmd
136
+ .command('delete <name>')
137
+ .description('Delete an agent profile')
138
+ .option('-f, --force', 'Skip confirmation')
139
+ .action(async (name, opts) => runAgent('delete', { ...opts, name }));
140
+ // ── nexagent config ───────────────────────────────────────────
141
+ const cfgCmd = program.command('config').description('Manage NexAgent configuration');
142
+ cfgCmd
143
+ .command('show')
144
+ .description('Show current resolved configuration')
145
+ .option('--json', 'Output as JSON')
146
+ .action(async (opts) => runConfig('show', opts));
147
+ cfgCmd
148
+ .command('set <key> <value>')
149
+ .description('Set a config value (e.g. config set defaults.model gpt-4o)')
150
+ .action(async (key, value) => runConfig('set', { key, value }));
151
+ cfgCmd
152
+ .command('api-key <provider>')
153
+ .description('Set API key for a provider (stored in OS keychain)')
154
+ .action(async (provider) => runConfig('api-key', { provider }));
155
+ // ── nexagent models ───────────────────────────────────────────
156
+ program
157
+ .command('models')
158
+ .description('List available models for all configured providers')
159
+ .option('-p, --provider <name>', 'Filter by provider')
160
+ .option('--json', 'Output as JSON')
161
+ .action(async (opts) => runModels(opts));
162
+ // ── nexagent update ───────────────────────────────────────────
163
+ program
164
+ .command('update')
165
+ .description('Update NexAgent to the latest version')
166
+ .option('--check', 'Check for updates without installing')
167
+ .option('--changelog', 'Show changelog before confirming')
168
+ .option('--version <v>', 'Install a specific version')
169
+ .option('--preview', 'Preview what would change (dry-run)')
170
+ .option('--yes', 'Skip confirmation prompts')
171
+ .action(async (opts) => runUpdate(opts));
172
+ // ── nexagent changelog ────────────────────────────────────────
173
+ program
174
+ .command('changelog [version]')
175
+ .description('Show release notes for a version (default: latest)')
176
+ .option('--all', 'Show full changelog history')
177
+ .option('--json', 'Output as JSON')
178
+ .action(async (version, opts) => runChangelog(version, opts));
179
+ // ── nexagent doctor ───────────────────────────────────────────
180
+ program
181
+ .command('doctor')
182
+ .description('Diagnose NexAgent installation and runtime health')
183
+ .option('--fix', 'Attempt to auto-fix issues')
184
+ .option('--json', 'Output as JSON')
185
+ .action(async (opts, cmd) => {
186
+ const globals = cmd.parent?.opts() ?? {};
187
+ await runDoctor({ ...opts, ...globals });
188
+ });
189
+ // ?? nexagent server ??
190
+ program
191
+ .command('server')
192
+ .alias('srv')
193
+ .description('Start HTTP/WebSocket bridge for remote access')
194
+ .option('-p, --port <n>', 'Server port', '7373')
195
+ .option('-h, --host <addr>', 'Bind address', '127.0.0.1')
196
+ .option('--data-dir <path>', 'Override agent data directory')
197
+ .action(async (opts, cmd) => {
198
+ const globals = cmd.parent?.opts() ?? {};
199
+ await runServer({ ...opts, ...globals });
200
+ });
201
+ // ── Parse ─────────────────────────────────────────────────────
202
+ program.parseAsync(process.argv).catch((err) => {
203
+ const msg = err instanceof Error ? err.message : String(err);
204
+ console.error(`\n Fatal error: ${msg}\n`);
205
+ process.exit(1);
206
+ });
207
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { LLMProvider, LLMRequestOptions, LLMResponse, LLMStreamChunk, LLMCapabilities } from '@nexagent-cli/shared';
2
+ export declare class AnthropicProvider implements LLMProvider {
3
+ readonly name = "anthropic";
4
+ private client;
5
+ constructor(apiKey?: string);
6
+ complete(opts: LLMRequestOptions): Promise<LLMResponse>;
7
+ stream(opts: LLMRequestOptions): AsyncGenerator<LLMStreamChunk>;
8
+ countTokens(text: string, _model: string): number;
9
+ getCapabilities(model: string): LLMCapabilities;
10
+ listModels(): Promise<string[]>;
11
+ private splitSystemMessage;
12
+ /**
13
+ * Convert generic LLMMessage[] to Anthropic-native MessageParam[].
14
+ * - assistant with toolCalls → content blocks [text, tool_use...]
15
+ * - role=tool → user message with tool_result content block
16
+ * - merge consecutive user messages (Anthropic constraint)
17
+ */
18
+ private toAnthropicMessages;
19
+ private estimateCost;
20
+ }
21
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../../../src/llm/providers/anthropic.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAkB9B,qBAAa,iBAAkB,YAAW,WAAW;IACnD,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,MAAM,CAAY;gBAEd,MAAM,CAAC,EAAE,MAAM;IAIrB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwCtD,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,cAAc,CAAC,cAAc,CAAC;IA+CtE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIjD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe;IAUzC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIrC,OAAO,CAAC,kBAAkB;IAS1B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAoD3B,OAAO,CAAC,YAAY;CAIrB"}