@ariacode/cli 0.1.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 (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +404 -0
  3. package/dist/actions.d.ts +271 -0
  4. package/dist/actions.js +1809 -0
  5. package/dist/actions.js.map +1 -0
  6. package/dist/agent.d.ts +26 -0
  7. package/dist/agent.js +182 -0
  8. package/dist/agent.js.map +1 -0
  9. package/dist/app.d.ts +14 -0
  10. package/dist/app.js +83 -0
  11. package/dist/app.js.map +1 -0
  12. package/dist/cli.d.ts +12 -0
  13. package/dist/cli.js +157 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +170 -0
  16. package/dist/config.js +291 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/context.d.ts +58 -0
  19. package/dist/context.js +44 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/parser.d.ts +39 -0
  22. package/dist/parser.js +323 -0
  23. package/dist/parser.js.map +1 -0
  24. package/dist/prompts/ask.md +20 -0
  25. package/dist/prompts/explore.md +38 -0
  26. package/dist/prompts/patch.md +27 -0
  27. package/dist/prompts/plan.md +41 -0
  28. package/dist/prompts/prompts/ask.md +20 -0
  29. package/dist/prompts/prompts/explore.md +38 -0
  30. package/dist/prompts/prompts/patch.md +27 -0
  31. package/dist/prompts/prompts/plan.md +41 -0
  32. package/dist/prompts/prompts/review.md +33 -0
  33. package/dist/prompts/review.md +33 -0
  34. package/dist/provider.d.ts +148 -0
  35. package/dist/provider.js +486 -0
  36. package/dist/provider.js.map +1 -0
  37. package/dist/repo.d.ts +22 -0
  38. package/dist/repo.js +154 -0
  39. package/dist/repo.js.map +1 -0
  40. package/dist/safety.d.ts +48 -0
  41. package/dist/safety.js +140 -0
  42. package/dist/safety.js.map +1 -0
  43. package/dist/storage.d.ts +133 -0
  44. package/dist/storage.js +300 -0
  45. package/dist/storage.js.map +1 -0
  46. package/dist/tools.d.ts +70 -0
  47. package/dist/tools.js +654 -0
  48. package/dist/tools.js.map +1 -0
  49. package/dist/ui.d.ts +203 -0
  50. package/dist/ui.js +410 -0
  51. package/dist/ui.js.map +1 -0
  52. package/package.json +73 -0
@@ -0,0 +1,300 @@
1
+ import Database from "better-sqlite3";
2
+ import * as fs from "node:fs";
3
+ import * as path from "node:path";
4
+ import * as os from "node:os";
5
+ import { z } from "zod";
6
+ // Schema definitions
7
+ export const SessionStatusSchema = z.enum([
8
+ "running",
9
+ "completed",
10
+ "failed",
11
+ "cancelled",
12
+ ]);
13
+ export const MessageRoleSchema = z.enum(["user", "assistant", "system"]);
14
+ export const RiskLevelSchema = z.enum(["low", "medium", "high"]);
15
+ // Database connection manager
16
+ let dbInstance = null;
17
+ /**
18
+ * Get or create database connection to ~/.aria/history.db
19
+ * Sets file permissions to 600 (user-only read/write)
20
+ */
21
+ export function getDatabase() {
22
+ if (dbInstance) {
23
+ return dbInstance;
24
+ }
25
+ const ariaDir = path.join(os.homedir(), ".aria");
26
+ const dbPath = path.join(ariaDir, "history.db");
27
+ // Ensure ~/.aria directory exists
28
+ if (!fs.existsSync(ariaDir)) {
29
+ fs.mkdirSync(ariaDir, { recursive: true, mode: 0o700 });
30
+ }
31
+ // Create database connection
32
+ dbInstance = new Database(dbPath);
33
+ // Set file permissions to 600 (user-only read/write)
34
+ try {
35
+ fs.chmodSync(dbPath, 0o600);
36
+ }
37
+ catch (error) {
38
+ console.warn("Warning: Could not set database file permissions:", error);
39
+ }
40
+ // Enable foreign keys
41
+ dbInstance.pragma("foreign_keys = ON");
42
+ return dbInstance;
43
+ }
44
+ /**
45
+ * Close database connection
46
+ */
47
+ export function closeDatabase() {
48
+ if (dbInstance) {
49
+ dbInstance.close();
50
+ dbInstance = null;
51
+ }
52
+ }
53
+ // Ensure database is closed on process exit
54
+ process.on("exit", closeDatabase);
55
+ process.on("SIGINT", () => { closeDatabase(); process.exit(130); });
56
+ process.on("SIGTERM", () => { closeDatabase(); process.exit(0); });
57
+ // Schema versioning
58
+ const CURRENT_SCHEMA_VERSION = 1;
59
+ /**
60
+ * Get current schema version from database
61
+ * Returns 0 if schema_versions table doesn't exist
62
+ */
63
+ export function getCurrentSchemaVersion(db) {
64
+ try {
65
+ const result = db
66
+ .prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name='schema_versions'`)
67
+ .get();
68
+ if (!result) {
69
+ return 0;
70
+ }
71
+ const versionResult = db
72
+ .prepare(`SELECT MAX(version) as version FROM schema_versions`)
73
+ .get();
74
+ return versionResult.version ?? 0;
75
+ }
76
+ catch (error) {
77
+ return 0;
78
+ }
79
+ }
80
+ /**
81
+ * Run database migrations sequentially
82
+ */
83
+ export function runMigrations(db) {
84
+ const currentVersion = getCurrentSchemaVersion(db);
85
+ if (currentVersion >= CURRENT_SCHEMA_VERSION) {
86
+ return; // Already up to date
87
+ }
88
+ // Create schema_versions table if it doesn't exist
89
+ if (currentVersion === 0) {
90
+ db.exec(`
91
+ CREATE TABLE IF NOT EXISTS schema_versions (
92
+ version INTEGER PRIMARY KEY,
93
+ applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
94
+ )
95
+ `);
96
+ }
97
+ // Get all migrations that need to be applied
98
+ const migrationsToRun = migrations.filter((m) => m.version > currentVersion && m.version <= CURRENT_SCHEMA_VERSION);
99
+ // Sort by version to ensure sequential execution
100
+ migrationsToRun.sort((a, b) => a.version - b.version);
101
+ // Run each migration in a transaction
102
+ for (const migration of migrationsToRun) {
103
+ const transaction = db.transaction(() => {
104
+ migration.up(db);
105
+ db.prepare(`INSERT INTO schema_versions (version) VALUES (?)`).run(migration.version);
106
+ });
107
+ try {
108
+ transaction();
109
+ }
110
+ catch (error) {
111
+ throw new Error(`Migration to version ${migration.version} failed: ${error}`);
112
+ }
113
+ }
114
+ }
115
+ /**
116
+ * Initialize database with schema
117
+ */
118
+ export function initializeDatabase() {
119
+ const db = getDatabase();
120
+ runMigrations(db);
121
+ return db;
122
+ }
123
+ // Migrations array
124
+ const migrations = [
125
+ {
126
+ version: 1,
127
+ up: (db) => {
128
+ // Create sessions table
129
+ db.exec(`
130
+ CREATE TABLE sessions (
131
+ id TEXT PRIMARY KEY,
132
+ command TEXT NOT NULL,
133
+ project_root TEXT NOT NULL,
134
+ provider TEXT NOT NULL,
135
+ model TEXT NOT NULL,
136
+ status TEXT NOT NULL CHECK(status IN ('running', 'completed', 'failed', 'cancelled')),
137
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
138
+ completed_at TIMESTAMP,
139
+ error TEXT
140
+ )
141
+ `);
142
+ // Create indexes on sessions table
143
+ db.exec(`
144
+ CREATE INDEX idx_sessions_created_at ON sessions(created_at);
145
+ CREATE INDEX idx_sessions_status ON sessions(status);
146
+ `);
147
+ // Create messages table
148
+ db.exec(`
149
+ CREATE TABLE messages (
150
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
151
+ session_id TEXT NOT NULL,
152
+ role TEXT NOT NULL CHECK(role IN ('user', 'assistant', 'system')),
153
+ content TEXT NOT NULL,
154
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
155
+ FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
156
+ )
157
+ `);
158
+ // Create index on messages table
159
+ db.exec(`
160
+ CREATE INDEX idx_messages_session_id ON messages(session_id);
161
+ `);
162
+ // Create tool_executions table
163
+ db.exec(`
164
+ CREATE TABLE tool_executions (
165
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
166
+ session_id TEXT NOT NULL,
167
+ tool_name TEXT NOT NULL,
168
+ input TEXT NOT NULL,
169
+ output TEXT,
170
+ error TEXT,
171
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
172
+ FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
173
+ )
174
+ `);
175
+ // Create index on tool_executions table
176
+ db.exec(`
177
+ CREATE INDEX idx_tool_executions_session_id ON tool_executions(session_id);
178
+ `);
179
+ // Create mutations table
180
+ db.exec(`
181
+ CREATE TABLE mutations (
182
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
183
+ session_id TEXT NOT NULL,
184
+ action TEXT NOT NULL,
185
+ affected_files TEXT NOT NULL,
186
+ risk_level TEXT NOT NULL CHECK(risk_level IN ('low', 'medium', 'high')),
187
+ reversible BOOLEAN NOT NULL,
188
+ rollback_hints TEXT,
189
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
190
+ FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
191
+ )
192
+ `);
193
+ // Create index on mutations table
194
+ db.exec(`
195
+ CREATE INDEX idx_mutations_session_id ON mutations(session_id);
196
+ `);
197
+ },
198
+ },
199
+ ];
200
+ // Session CRUD operations
201
+ /**
202
+ * Create a new session
203
+ */
204
+ export function createSession(db, session) {
205
+ const stmt = db.prepare(`
206
+ INSERT INTO sessions (id, command, project_root, provider, model, status)
207
+ VALUES (?, ?, ?, ?, ?, 'running')
208
+ `);
209
+ stmt.run(session.id, session.command, session.projectRoot, session.provider, session.model);
210
+ }
211
+ /**
212
+ * Update session status
213
+ */
214
+ export function updateSessionStatus(db, sessionId, status, error) {
215
+ const stmt = db.prepare(`
216
+ UPDATE sessions
217
+ SET status = ?,
218
+ completed_at = CURRENT_TIMESTAMP,
219
+ error = ?
220
+ WHERE id = ?
221
+ `);
222
+ stmt.run(status, error ?? null, sessionId);
223
+ }
224
+ /**
225
+ * Get a single session by ID
226
+ */
227
+ export function getSession(db, sessionId) {
228
+ const stmt = db.prepare(`
229
+ SELECT id, command, project_root as projectRoot, provider, model,
230
+ status, created_at as createdAt, completed_at as completedAt, error
231
+ FROM sessions
232
+ WHERE id = ?
233
+ `);
234
+ return stmt.get(sessionId) ?? null;
235
+ }
236
+ /**
237
+ * List sessions with pagination
238
+ */
239
+ export function listSessions(db, options = {}) {
240
+ const { limit = 50, offset = 0, status } = options;
241
+ let query = `
242
+ SELECT id, command, project_root as projectRoot, provider, model,
243
+ status, created_at as createdAt, completed_at as completedAt, error
244
+ FROM sessions
245
+ `;
246
+ const params = [];
247
+ if (status) {
248
+ query += ` WHERE status = ?`;
249
+ params.push(status);
250
+ }
251
+ query += ` ORDER BY created_at DESC LIMIT ? OFFSET ?`;
252
+ params.push(limit, offset);
253
+ const stmt = db.prepare(query);
254
+ return stmt.all(...params);
255
+ }
256
+ // Logging functions
257
+ /**
258
+ * Log a message to the database
259
+ */
260
+ export function logMessage(db, sessionId, role, content) {
261
+ const stmt = db.prepare(`
262
+ INSERT INTO messages (session_id, role, content)
263
+ VALUES (?, ?, ?)
264
+ `);
265
+ stmt.run(sessionId, role, content);
266
+ }
267
+ /**
268
+ * Log a tool execution to the database
269
+ */
270
+ export function logToolExecution(db, sessionId, toolName, input, result) {
271
+ const stmt = db.prepare(`
272
+ INSERT INTO tool_executions (session_id, tool_name, input, output, error)
273
+ VALUES (?, ?, ?, ?, ?)
274
+ `);
275
+ stmt.run(sessionId, toolName, JSON.stringify(input), result.success ? JSON.stringify(result.data) : null, result.error ?? null);
276
+ }
277
+ /**
278
+ * Log a mutation to the database
279
+ */
280
+ export function logMutation(db, sessionId, mutation) {
281
+ const stmt = db.prepare(`
282
+ INSERT INTO mutations (session_id, action, affected_files, risk_level, reversible, rollback_hints)
283
+ VALUES (?, ?, ?, ?, ?, ?)
284
+ `);
285
+ stmt.run(sessionId, mutation.action, JSON.stringify(mutation.affectedFiles), mutation.riskLevel, mutation.reversible ? 1 : 0, mutation.rollbackHints ? JSON.stringify(mutation.rollbackHints) : null);
286
+ }
287
+ // Session cleanup
288
+ /**
289
+ * Delete sessions older than retainDays
290
+ * Cascading deletes will remove associated messages, tool_executions, and mutations
291
+ */
292
+ export function deleteOldSessions(db, retainDays) {
293
+ const stmt = db.prepare(`
294
+ DELETE FROM sessions
295
+ WHERE created_at < datetime('now', '-' || ? || ' days')
296
+ `);
297
+ const result = stmt.run(retainDays);
298
+ return result.changes;
299
+ }
300
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,qBAAqB;AACrB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACxC,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;CACZ,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAGzE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AA4CjE,8BAA8B;AAC9B,IAAI,UAAU,GAA6B,IAAI,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEhD,kCAAkC;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,6BAA6B;IAC7B,UAAU,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAElC,qDAAqD;IACrD,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;IAC3E,CAAC;IAED,sBAAsB;IACtB,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEvC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,IAAI,UAAU,EAAE,CAAC;QACf,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnE,oBAAoB;AACpB,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAOjC;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,EAAqB;IAC3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE;aACd,OAAO,CACN,8EAA8E,CAC/E;aACA,GAAG,EAAkC,CAAC;QAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,aAAa,GAAG,EAAE;aACrB,OAAO,CAAC,qDAAqD,CAAC;aAC9D,GAAG,EAAgC,CAAC;QAEvC,OAAO,aAAa,CAAC,OAAO,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,MAAM,cAAc,GAAG,uBAAuB,CAAC,EAAE,CAAC,CAAC;IAEnD,IAAI,cAAc,IAAI,sBAAsB,EAAE,CAAC;QAC7C,OAAO,CAAC,qBAAqB;IAC/B,CAAC;IAED,mDAAmD;IACnD,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;QACzB,EAAE,CAAC,IAAI,CAAC;;;;;KAKP,CAAC,CAAC;IACL,CAAC;IAED,6CAA6C;IAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,cAAc,IAAI,CAAC,CAAC,OAAO,IAAI,sBAAsB,CACzE,CAAC;IAEF,iDAAiD;IACjD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAEtD,sCAAsC;IACtC,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACtC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjB,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC,GAAG,CAChE,SAAS,CAAC,OAAO,CAClB,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,WAAW,EAAE,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,CAAC,OAAO,YAAY,KAAK,EAAE,CAC7D,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,mBAAmB;AACnB,MAAM,UAAU,GAAgB;IAC9B;QACE,OAAO,EAAE,CAAC;QACV,EAAE,EAAE,CAAC,EAAqB,EAAE,EAAE;YAC5B,wBAAwB;YACxB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;OAYP,CAAC,CAAC;YAEH,mCAAmC;YACnC,EAAE,CAAC,IAAI,CAAC;;;OAGP,CAAC,CAAC;YAEH,wBAAwB;YACxB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;OASP,CAAC,CAAC;YAEH,iCAAiC;YACjC,EAAE,CAAC,IAAI,CAAC;;OAEP,CAAC,CAAC;YAEH,+BAA+B;YAC/B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;OAWP,CAAC,CAAC;YAEH,wCAAwC;YACxC,EAAE,CAAC,IAAI,CAAC;;OAEP,CAAC,CAAC;YAEH,yBAAyB;YACzB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;OAYP,CAAC,CAAC;YAEH,kCAAkC;YAClC,EAAE,CAAC,IAAI,CAAC;;OAEP,CAAC,CAAC;QACL,CAAC;KACF;CACF,CAAC;AAEF,0BAA0B;AAE1B;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,EAAqB,EACrB,OAMC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CACN,OAAO,CAAC,EAAE,EACV,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,WAAW,EACnB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,KAAK,CACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,EAAqB,EACrB,SAAiB,EACjB,MAAqB,EACrB,KAAc;IAEd,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;GAMvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,EAAqB,EACrB,SAAiB;IAEjB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKvB,CAAC,CAAC;IAEH,OAAQ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAa,IAAI,IAAI,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,EAAqB,EACrB,UAII,EAAE;IAEN,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAEnD,IAAI,KAAK,GAAG;;;;GAIX,CAAC;IAEF,MAAM,MAAM,GAAc,EAAE,CAAC;IAE7B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,IAAI,mBAAmB,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,IAAI,4CAA4C,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAE3B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAc,CAAC;AAC1C,CAAC;AAED,oBAAoB;AAEpB;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,EAAqB,EACrB,SAAiB,EACjB,IAAiB,EACjB,OAAe;IAEf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAAqB,EACrB,SAAiB,EACjB,QAAgB,EAChB,KAAc,EACd,MAA4D;IAE5D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CACN,SAAS,EACT,QAAQ,EACR,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EACrB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EACnD,MAAM,CAAC,KAAK,IAAI,IAAI,CACrB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,EAAqB,EACrB,SAAiB,EACjB,QAMC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CACN,SAAS,EACT,QAAQ,CAAC,MAAM,EACf,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,EACtC,QAAQ,CAAC,SAAS,EAClB,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CACvE,CAAC;AACJ,CAAC;AAED,kBAAkB;AAElB;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,EAAqB,EACrB,UAAkB;IAElB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;GAGvB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { z } from "zod";
2
+ import type { ExecutionContext } from "./context.js";
3
+ import type { Config } from "./config.js";
4
+ /**
5
+ * Tool result interface
6
+ * All tools must return this structure
7
+ */
8
+ export interface ToolResult {
9
+ success: boolean;
10
+ data?: unknown;
11
+ error?: string;
12
+ }
13
+ /**
14
+ * Tool interface
15
+ * Defines the contract for all tools (read-only and mutation)
16
+ */
17
+ export interface Tool {
18
+ name: string;
19
+ description: string;
20
+ isMutation: boolean;
21
+ inputSchema: z.ZodSchema;
22
+ execute(input: unknown, ctx: ExecutionContext, config: Config): Promise<ToolResult>;
23
+ }
24
+ /**
25
+ * read_file tool
26
+ * Reads file content by path with safety validation
27
+ * Requirements: 8.1, 8.7, 8.8
28
+ */
29
+ export declare const readFileTool: Tool;
30
+ /**
31
+ * list_directory tool
32
+ * Lists directory contents with optional recursion
33
+ * Requirements: 8.2, 8.6, 23.2, 23.3
34
+ */
35
+ export declare const listDirectoryTool: Tool;
36
+ /**
37
+ * search_code tool
38
+ * Searches code using ripgrep with gitignore support
39
+ * Requirements: 8.3, 22.3
40
+ */
41
+ export declare const searchCodeTool: Tool;
42
+ /**
43
+ * read_package_json tool
44
+ * Reads and parses package.json from project root
45
+ * Requirements: 8.4
46
+ */
47
+ export declare const readPackageJsonTool: Tool;
48
+ /**
49
+ * read_prisma_schema tool
50
+ * Reads prisma/schema.prisma if Prisma is detected
51
+ * Requirements: 8.5
52
+ */
53
+ export declare const readPrismaSchemaTool: Tool;
54
+ /**
55
+ * propose_diff tool
56
+ * Generates a unified diff without applying changes
57
+ * Requirements: 11.4, 11.5
58
+ */
59
+ export declare const proposeDiffTool: Tool;
60
+ /**
61
+ * apply_diff tool
62
+ * Applies a previously proposed diff atomically
63
+ * Requirements: 11.10, 11.11, 11.12, 11.13
64
+ */
65
+ export declare const applyDiffTool: Tool;
66
+ /**
67
+ * Tool registry
68
+ * All available tools for the agent
69
+ */
70
+ export declare const allTools: Tool[];