@praveencs/agent 0.1.1 → 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.
@@ -0,0 +1,7 @@
1
+ import { Command } from 'commander';
2
+ export declare function createGoalCommand(): Command;
3
+ /**
4
+ * Standalone approve command (registered at top level: agent approve <id>)
5
+ */
6
+ export declare function createApproveCommand(): Command;
7
+ //# sourceMappingURL=goal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/goal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,wBAAgB,iBAAiB,IAAI,OAAO,CAqO3C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAc9C"}
@@ -0,0 +1,246 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { MemoryStore } from '../../memory/store.js';
4
+ import { GoalStore } from '../../goals/store.js';
5
+ function getStores() {
6
+ const mem = MemoryStore.open(process.cwd());
7
+ const goals = new GoalStore(mem);
8
+ return { mem, goals };
9
+ }
10
+ function progressBar(progress, width = 20) {
11
+ const filled = Math.round(progress * width);
12
+ const empty = width - filled;
13
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
14
+ const pct = Math.round(progress * 100);
15
+ return `${bar} ${pct}%`;
16
+ }
17
+ function statusIcon(status) {
18
+ switch (status) {
19
+ case 'active': return '🔄';
20
+ case 'completed': return '✅';
21
+ case 'failed': return '❌';
22
+ case 'paused': return '⏸️';
23
+ case 'cancelled': return '🚫';
24
+ case 'pending': return '⏳';
25
+ case 'queued': return '📋';
26
+ case 'running': return '🔄';
27
+ case 'blocked': return '🚧';
28
+ default: return '❓';
29
+ }
30
+ }
31
+ export function createGoalCommand() {
32
+ const cmd = new Command('goal')
33
+ .description('Manage autonomous goals and tasks');
34
+ // ─── Add a goal ───
35
+ cmd
36
+ .command('add <title>')
37
+ .description('Add a new goal for the agent to accomplish')
38
+ .option('-d, --description <desc>', 'Detailed description')
39
+ .option('-p, --priority <n>', 'Priority 1-10 (1=critical)', '5')
40
+ .option('--deadline <date>', 'Deadline (ISO date format)')
41
+ .action(async (title, opts) => {
42
+ const { goals } = getStores();
43
+ const goal = goals.addGoal(title, {
44
+ description: opts.description,
45
+ priority: parseInt(opts.priority),
46
+ deadline: opts.deadline,
47
+ });
48
+ console.log(chalk.green(`\n✓ Goal #${goal.id} created`));
49
+ console.log(chalk.white.bold(` ${goal.title}`));
50
+ if (goal.description)
51
+ console.log(chalk.dim(` ${goal.description}`));
52
+ console.log(chalk.dim(` Priority: ${goal.priority}/10`));
53
+ if (goal.deadline)
54
+ console.log(chalk.dim(` Deadline: ${goal.deadline}`));
55
+ console.log(chalk.dim(`\n Add tasks: agent goal task ${goal.id} "task description"\n`));
56
+ });
57
+ // ─── List goals ───
58
+ cmd
59
+ .command('list')
60
+ .description('List all goals')
61
+ .option('-s, --status <status>', 'Filter by status: active|paused|completed|failed')
62
+ .action(async (opts) => {
63
+ const { goals } = getStores();
64
+ const allGoals = goals.listGoals(opts.status);
65
+ if (allGoals.length === 0) {
66
+ console.log(chalk.yellow('\nNo goals found.'));
67
+ console.log(chalk.dim(' Create one: agent goal add "Your goal"\n'));
68
+ return;
69
+ }
70
+ console.log(chalk.bold.cyan('\n🎯 Goals\n'));
71
+ for (const goal of allGoals) {
72
+ const tasks = goals.listTasks(goal.id);
73
+ const completed = tasks.filter(t => t.status === 'completed').length;
74
+ console.log(` ${statusIcon(goal.status)} ` +
75
+ `${chalk.dim(`#${goal.id}`)} ` +
76
+ chalk.white.bold(goal.title) +
77
+ ` ${chalk.dim(`[P${goal.priority}]`)}`);
78
+ console.log(` ${progressBar(goal.progress)} ` +
79
+ chalk.dim(`(${completed}/${tasks.length} tasks)`));
80
+ if (goal.deadline) {
81
+ console.log(chalk.dim(` ⏰ Deadline: ${goal.deadline}`));
82
+ }
83
+ console.log();
84
+ }
85
+ });
86
+ // ─── Goal status (detailed) ───
87
+ cmd
88
+ .command('status [goalId]')
89
+ .description('Show detailed goal status with tasks')
90
+ .action(async (goalId) => {
91
+ const { goals } = getStores();
92
+ if (goalId) {
93
+ // Show specific goal
94
+ const goal = goals.getGoal(parseInt(goalId));
95
+ if (!goal) {
96
+ console.error(chalk.red(`\n✗ Goal #${goalId} not found\n`));
97
+ return;
98
+ }
99
+ const tasks = goals.listTasks(goal.id);
100
+ console.log(chalk.bold.cyan(`\n🎯 ${goal.title}\n`));
101
+ console.log(` ${chalk.dim('Status:')} ${statusIcon(goal.status)} ${goal.status}`);
102
+ console.log(` ${chalk.dim('Priority:')} ${goal.priority}/10`);
103
+ console.log(` ${chalk.dim('Progress:')} ${progressBar(goal.progress)}`);
104
+ if (goal.deadline)
105
+ console.log(` ${chalk.dim('Deadline:')} ${goal.deadline}`);
106
+ if (goal.description)
107
+ console.log(` ${chalk.dim('Details:')} ${goal.description}`);
108
+ console.log();
109
+ if (tasks.length > 0) {
110
+ console.log(chalk.bold(' Tasks:'));
111
+ for (const task of tasks) {
112
+ const icon = statusIcon(task.status);
113
+ const skillTag = task.skill ? chalk.blue(` [${task.skill}]`) : '';
114
+ const approval = task.requires_approval && !task.approved_at
115
+ ? chalk.yellow(' 🛡️ needs approval')
116
+ : '';
117
+ console.log(` ${icon} ${chalk.dim(`#${task.id}`)} ` +
118
+ chalk.white(task.title) +
119
+ skillTag +
120
+ approval);
121
+ if (task.error) {
122
+ console.log(chalk.red(` Error: ${task.error}`));
123
+ }
124
+ if (task.output) {
125
+ const preview = task.output.slice(0, 80);
126
+ console.log(chalk.dim(` Output: ${preview}${task.output.length > 80 ? '...' : ''}`));
127
+ }
128
+ }
129
+ }
130
+ else {
131
+ console.log(chalk.dim(' No tasks yet.'));
132
+ console.log(chalk.dim(` Add: agent goal task ${goal.id} "task description"`));
133
+ }
134
+ console.log();
135
+ }
136
+ else {
137
+ // Show overview dashboard
138
+ const stats = goals.stats();
139
+ const activeGoals = goals.listGoals('active');
140
+ console.log(chalk.bold.cyan('\n📊 Agent Status Dashboard\n'));
141
+ console.log(` ${chalk.dim('Active Goals:')} ${stats.activeGoals}`);
142
+ console.log(` ${chalk.dim('Completed Goals:')} ${stats.completedGoals}`);
143
+ console.log(` ${chalk.dim('Pending Tasks:')} ${stats.pendingTasks}`);
144
+ console.log(` ${chalk.dim('Running Tasks:')} ${stats.runningTasks}`);
145
+ console.log(` ${chalk.dim('Awaiting Approval:')} ${stats.awaitingApproval}`);
146
+ console.log();
147
+ if (activeGoals.length > 0) {
148
+ console.log(chalk.bold(' Active Goals:'));
149
+ for (const goal of activeGoals) {
150
+ console.log(` ${chalk.dim(`#${goal.id}`)} ` +
151
+ chalk.white.bold(goal.title) +
152
+ ` ${progressBar(goal.progress, 15)}`);
153
+ }
154
+ console.log();
155
+ }
156
+ const approvals = goals.getPendingApprovals();
157
+ if (approvals.length > 0) {
158
+ console.log(chalk.bold.yellow(' ⚠️ Awaiting Your Approval:'));
159
+ for (const task of approvals) {
160
+ console.log(` 🛡️ ${chalk.dim(`#${task.id}`)} ` +
161
+ chalk.white(task.title) +
162
+ chalk.dim(` (Goal #${task.goal_id})`));
163
+ }
164
+ console.log(chalk.dim(' Approve: agent approve <task-id>'));
165
+ console.log();
166
+ }
167
+ }
168
+ });
169
+ // ─── Add task to goal ───
170
+ cmd
171
+ .command('task <goalId> <title>')
172
+ .description('Add a task to a goal')
173
+ .option('-s, --skill <skill>', 'Skill to use for this task')
174
+ .option('--depends <ids>', 'Comma-separated task IDs this depends on')
175
+ .option('--approval', 'Requires human approval before execution')
176
+ .action(async (goalId, title, opts) => {
177
+ const { goals } = getStores();
178
+ const goal = goals.getGoal(parseInt(goalId));
179
+ if (!goal) {
180
+ console.error(chalk.red(`\n✗ Goal #${goalId} not found\n`));
181
+ return;
182
+ }
183
+ const dependsOn = opts.depends
184
+ ? opts.depends.split(',').map(id => parseInt(id.trim()))
185
+ : [];
186
+ const task = goals.addTask(parseInt(goalId), title, {
187
+ skill: opts.skill,
188
+ dependsOn,
189
+ requiresApproval: opts.approval ?? false,
190
+ });
191
+ console.log(chalk.green(`\n✓ Task #${task.id} added to Goal #${goalId}`));
192
+ console.log(chalk.white(` ${title}`));
193
+ if (opts.skill)
194
+ console.log(chalk.dim(` Skill: ${opts.skill}`));
195
+ if (dependsOn.length > 0)
196
+ console.log(chalk.dim(` Depends on: ${dependsOn.join(', ')}`));
197
+ if (opts.approval)
198
+ console.log(chalk.yellow(` ⚠️ Requires human approval`));
199
+ console.log();
200
+ });
201
+ // ─── Pause/Resume/Cancel goal ───
202
+ cmd
203
+ .command('pause <goalId>')
204
+ .description('Pause an active goal')
205
+ .action(async (goalId) => {
206
+ const { goals } = getStores();
207
+ goals.updateGoalStatus(parseInt(goalId), 'paused');
208
+ console.log(chalk.yellow(`\n⏸️ Goal #${goalId} paused\n`));
209
+ });
210
+ cmd
211
+ .command('resume <goalId>')
212
+ .description('Resume a paused goal')
213
+ .action(async (goalId) => {
214
+ const { goals } = getStores();
215
+ goals.updateGoalStatus(parseInt(goalId), 'active');
216
+ console.log(chalk.green(`\n▶️ Goal #${goalId} resumed\n`));
217
+ });
218
+ cmd
219
+ .command('cancel <goalId>')
220
+ .description('Cancel a goal')
221
+ .action(async (goalId) => {
222
+ const { goals } = getStores();
223
+ goals.updateGoalStatus(parseInt(goalId), 'cancelled');
224
+ console.log(chalk.red(`\n🚫 Goal #${goalId} cancelled\n`));
225
+ });
226
+ return cmd;
227
+ }
228
+ /**
229
+ * Standalone approve command (registered at top level: agent approve <id>)
230
+ */
231
+ export function createApproveCommand() {
232
+ return new Command('approve')
233
+ .argument('<taskId>', 'Task ID to approve')
234
+ .description('Approve a task that requires human authorization')
235
+ .action(async (taskId) => {
236
+ const { goals } = getStores();
237
+ const approved = goals.approveTask(parseInt(taskId));
238
+ if (approved) {
239
+ console.log(chalk.green(`\n✅ Task #${taskId} approved and queued for execution\n`));
240
+ }
241
+ else {
242
+ console.error(chalk.red(`\n✗ Task #${taskId} not found or doesn't require approval\n`));
243
+ }
244
+ });
245
+ }
246
+ //# sourceMappingURL=goal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal.js","sourceRoot":"","sources":["../../../../src/cli/commands/goal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createMemoryCommand(): Command;
3
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,mBAAmB,IAAI,OAAO,CAuH7C"}
@@ -0,0 +1,108 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { MemoryStore } from '../../memory/store.js';
4
+ export function createMemoryCommand() {
5
+ const cmd = new Command('memory')
6
+ .description('Manage agent persistent memory');
7
+ // ─── Save a memory ───
8
+ cmd
9
+ .command('save <content>')
10
+ .description('Save a memory (fact, preference, or project context)')
11
+ .option('-c, --category <cat>', 'Category: project|preference|fact|learned|general', 'general')
12
+ .option('-t, --tags <tags>', 'Comma-separated tags', '')
13
+ .action(async (content, opts) => {
14
+ const store = MemoryStore.open(process.cwd());
15
+ const tags = opts.tags ? opts.tags.split(',').map(t => t.trim()) : [];
16
+ const memory = store.save(content, opts.category, 'user', tags);
17
+ console.log(chalk.green(`\n✓ Memory saved (ID: ${memory.id})`));
18
+ console.log(chalk.dim(` Category: ${memory.category}`));
19
+ if (tags.length > 0)
20
+ console.log(chalk.dim(` Tags: ${tags.join(', ')}`));
21
+ console.log(chalk.dim(` Content: ${memory.content}\n`));
22
+ });
23
+ // ─── Search memories ───
24
+ cmd
25
+ .command('search <query>')
26
+ .description('Search memories using full-text search')
27
+ .option('-l, --limit <n>', 'Max results', '10')
28
+ .action(async (query, opts) => {
29
+ const store = MemoryStore.open(process.cwd());
30
+ const results = store.search(query, parseInt(opts.limit));
31
+ if (results.length === 0) {
32
+ console.log(chalk.yellow(`\nNo memories found matching "${query}"\n`));
33
+ return;
34
+ }
35
+ console.log(chalk.bold.cyan(`\n🧠 Memories matching "${query}":\n`));
36
+ for (const mem of results) {
37
+ console.log(` ${chalk.dim(`#${mem.id}`)} ` +
38
+ `${chalk.magenta(`[${mem.category}]`)} ` +
39
+ chalk.white(mem.content));
40
+ console.log(chalk.dim(` Saved: ${mem.created_at} | Source: ${mem.source}`));
41
+ if (mem.tags.length > 0) {
42
+ console.log(chalk.dim(` Tags: ${mem.tags.join(', ')}`));
43
+ }
44
+ console.log();
45
+ }
46
+ });
47
+ // ─── List all memories ───
48
+ cmd
49
+ .command('list')
50
+ .description('List all saved memories')
51
+ .option('-c, --category <cat>', 'Filter by category')
52
+ .option('-l, --limit <n>', 'Max results', '20')
53
+ .action(async (opts) => {
54
+ const store = MemoryStore.open(process.cwd());
55
+ const memories = store.list(opts.category, parseInt(opts.limit));
56
+ if (memories.length === 0) {
57
+ console.log(chalk.yellow('\nNo memories saved yet.'));
58
+ console.log(chalk.dim(' Save one: agent memory save "some fact"\n'));
59
+ return;
60
+ }
61
+ console.log(chalk.bold.cyan('\n🧠 Agent Memory\n'));
62
+ for (const mem of memories) {
63
+ console.log(` ${chalk.dim(`#${mem.id}`)} ` +
64
+ `${chalk.magenta(`[${mem.category}]`)} ` +
65
+ chalk.white(mem.content));
66
+ if (mem.tags.length > 0) {
67
+ console.log(chalk.dim(` Tags: ${mem.tags.join(', ')}`));
68
+ }
69
+ }
70
+ const stats = store.stats();
71
+ console.log(chalk.dim(`\n Total: ${stats.total} memories\n`));
72
+ });
73
+ // ─── Forget a memory ───
74
+ cmd
75
+ .command('forget <id>')
76
+ .description('Delete a memory by ID')
77
+ .action(async (id) => {
78
+ const store = MemoryStore.open(process.cwd());
79
+ const deleted = store.forget(parseInt(id));
80
+ if (deleted) {
81
+ console.log(chalk.green(`\n✓ Memory #${id} deleted\n`));
82
+ }
83
+ else {
84
+ console.error(chalk.red(`\n✗ Memory #${id} not found\n`));
85
+ }
86
+ });
87
+ // ─── Memory stats ───
88
+ cmd
89
+ .command('stats')
90
+ .description('Show memory statistics')
91
+ .action(async () => {
92
+ const store = MemoryStore.open(process.cwd());
93
+ const stats = store.stats();
94
+ console.log(chalk.bold.cyan('\n📊 Memory Stats\n'));
95
+ console.log(` ${chalk.dim('Total:')} ${stats.total}`);
96
+ console.log(` ${chalk.dim('By Category:')}`);
97
+ for (const [cat, count] of Object.entries(stats.byCategory)) {
98
+ console.log(` ${chalk.magenta(cat)}: ${count}`);
99
+ }
100
+ console.log(` ${chalk.dim('By Source:')}`);
101
+ for (const [src, count] of Object.entries(stats.bySource)) {
102
+ console.log(` ${chalk.blue(src)}: ${count}`);
103
+ }
104
+ console.log();
105
+ });
106
+ return cmd;
107
+ }
108
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/cli/commands/memory.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAsBnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAyBnC"}
@@ -7,6 +7,8 @@ import { createDaemonCommand } from './commands/daemon.js';
7
7
  import { createMcpCommand } from './commands/mcp.js';
8
8
  import { createDoctorCommand } from './commands/doctor.js';
9
9
  import { createConfigCommand } from './commands/config.js';
10
+ import { createMemoryCommand } from './commands/memory.js';
11
+ import { createGoalCommand, createApproveCommand } from './commands/goal.js';
10
12
  /**
11
13
  * Create the CLI program with all commands
12
14
  */
@@ -14,8 +16,8 @@ export function createCLI() {
14
16
  const program = new Command();
15
17
  program
16
18
  .name('agent')
17
- .description('Agent Runtime — execute goals safely with skills, plans, and permissioned tools')
18
- .version('0.1.0')
19
+ .description('Agent Runtime — autonomous, goal-oriented AI agent with skills, plans, memory, and permissioned tools')
20
+ .version('0.2.0')
19
21
  .option('--verbose', 'Enable verbose output')
20
22
  .option('--no-color', 'Disable colored output')
21
23
  .option('--config <path>', 'Path to config file');
@@ -28,6 +30,9 @@ export function createCLI() {
28
30
  program.addCommand(createMcpCommand());
29
31
  program.addCommand(createDoctorCommand());
30
32
  program.addCommand(createConfigCommand());
33
+ program.addCommand(createMemoryCommand());
34
+ program.addCommand(createGoalCommand());
35
+ program.addCommand(createApproveCommand());
31
36
  return program;
32
37
  }
33
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACF,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,iFAAiF,CAAC;SAC9F,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAE1C,OAAO,OAAO,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;GAEG;AACH,MAAM,UAAU,SAAS;IACrB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACF,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,uGAAuG,CAAC;SACpH,OAAO,CAAC,OAAO,CAAC;SAChB,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC;SAC9C,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;IAE3C,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,128 @@
1
+ import { MemoryStore } from '../memory/store.js';
2
+ /**
3
+ * Goal & Task management for autonomous execution
4
+ */
5
+ export interface Goal {
6
+ id: number;
7
+ title: string;
8
+ description: string | null;
9
+ status: 'active' | 'paused' | 'completed' | 'failed' | 'cancelled';
10
+ priority: number;
11
+ created_at: string;
12
+ updated_at: string;
13
+ deadline: string | null;
14
+ parent_goal_id: number | null;
15
+ progress: number;
16
+ metadata: Record<string, any>;
17
+ }
18
+ export interface Task {
19
+ id: number;
20
+ goal_id: number;
21
+ title: string;
22
+ description: string | null;
23
+ status: 'pending' | 'queued' | 'running' | 'completed' | 'failed' | 'blocked' | 'cancelled';
24
+ skill: string | null;
25
+ input: Record<string, any>;
26
+ output: string | null;
27
+ depends_on: number[];
28
+ scheduled_at: string | null;
29
+ started_at: string | null;
30
+ completed_at: string | null;
31
+ retry_count: number;
32
+ max_retries: number;
33
+ error: string | null;
34
+ requires_approval: boolean;
35
+ approved_at: string | null;
36
+ created_at: string;
37
+ }
38
+ export declare class GoalStore {
39
+ private db;
40
+ constructor(memoryStore: MemoryStore);
41
+ /**
42
+ * Create a new goal
43
+ */
44
+ addGoal(title: string, options?: {
45
+ description?: string;
46
+ priority?: number;
47
+ deadline?: string;
48
+ parentGoalId?: number;
49
+ }): Goal;
50
+ /**
51
+ * Get a goal by ID
52
+ */
53
+ getGoal(id: number): Goal | null;
54
+ /**
55
+ * List goals by status
56
+ */
57
+ listGoals(status?: Goal['status']): Goal[];
58
+ /**
59
+ * Update goal status
60
+ */
61
+ updateGoalStatus(id: number, status: Goal['status']): void;
62
+ /**
63
+ * Update goal progress (0.0 to 1.0)
64
+ */
65
+ updateGoalProgress(id: number): void;
66
+ /**
67
+ * Delete a goal and its tasks
68
+ */
69
+ removeGoal(id: number): boolean;
70
+ /**
71
+ * Add a task to a goal
72
+ */
73
+ addTask(goalId: number, title: string, options?: {
74
+ description?: string;
75
+ skill?: string;
76
+ input?: Record<string, any>;
77
+ dependsOn?: number[];
78
+ requiresApproval?: boolean;
79
+ scheduledAt?: string;
80
+ }): Task;
81
+ /**
82
+ * Get a task by ID
83
+ */
84
+ getTask(id: number): Task | null;
85
+ /**
86
+ * List tasks for a goal
87
+ */
88
+ listTasks(goalId: number): Task[];
89
+ /**
90
+ * Get the next executable task (respects dependencies)
91
+ */
92
+ getNextTask(): Task | null;
93
+ /**
94
+ * Mark task as running
95
+ */
96
+ startTask(id: number): void;
97
+ /**
98
+ * Mark task as completed
99
+ */
100
+ completeTask(id: number, output: string): void;
101
+ /**
102
+ * Mark task as failed
103
+ */
104
+ failTask(id: number, error: string): void;
105
+ /**
106
+ * Approve a task that requires human approval
107
+ */
108
+ approveTask(id: number): boolean;
109
+ /**
110
+ * Get tasks waiting for approval
111
+ */
112
+ getPendingApprovals(): Task[];
113
+ /**
114
+ * Get summary stats
115
+ */
116
+ stats(): {
117
+ activeGoals: number;
118
+ completedGoals: number;
119
+ pendingTasks: number;
120
+ runningTasks: number;
121
+ completedTasks: number;
122
+ failedTasks: number;
123
+ awaitingApproval: number;
124
+ };
125
+ private parseTask;
126
+ private logAudit;
127
+ }
128
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/goals/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,234 @@
1
+ export class GoalStore {
2
+ db;
3
+ constructor(memoryStore) {
4
+ // Reuse the same database from MemoryStore
5
+ this.db = memoryStore.db;
6
+ }
7
+ // ─── Goal Operations ──────────────────────────────────────
8
+ /**
9
+ * Create a new goal
10
+ */
11
+ addGoal(title, options = {}) {
12
+ const stmt = this.db.prepare(`
13
+ INSERT INTO goals (title, description, priority, deadline, parent_goal_id)
14
+ VALUES (?, ?, ?, ?, ?)
15
+ `);
16
+ const result = stmt.run(title, options.description ?? null, options.priority ?? 5, options.deadline ?? null, options.parentGoalId ?? null);
17
+ this.logAudit('goal.created', 'goal', result.lastInsertRowid, title);
18
+ return this.getGoal(result.lastInsertRowid);
19
+ }
20
+ /**
21
+ * Get a goal by ID
22
+ */
23
+ getGoal(id) {
24
+ const row = this.db.prepare('SELECT * FROM goals WHERE id = ?').get(id);
25
+ if (!row)
26
+ return null;
27
+ return { ...row, metadata: JSON.parse(row.metadata || '{}') };
28
+ }
29
+ /**
30
+ * List goals by status
31
+ */
32
+ listGoals(status) {
33
+ let rows;
34
+ if (status) {
35
+ rows = this.db.prepare('SELECT * FROM goals WHERE status = ? ORDER BY priority ASC, created_at DESC').all(status);
36
+ }
37
+ else {
38
+ rows = this.db.prepare('SELECT * FROM goals ORDER BY status ASC, priority ASC, created_at DESC').all();
39
+ }
40
+ return rows.map(r => ({ ...r, metadata: JSON.parse(r.metadata || '{}') }));
41
+ }
42
+ /**
43
+ * Update goal status
44
+ */
45
+ updateGoalStatus(id, status) {
46
+ this.db.prepare(`
47
+ UPDATE goals SET status = ?, updated_at = datetime('now') WHERE id = ?
48
+ `).run(status, id);
49
+ this.logAudit(`goal.${status}`, 'goal', id, `Goal #${id} → ${status}`);
50
+ }
51
+ /**
52
+ * Update goal progress (0.0 to 1.0)
53
+ */
54
+ updateGoalProgress(id) {
55
+ const tasks = this.listTasks(id);
56
+ if (tasks.length === 0)
57
+ return;
58
+ const completed = tasks.filter(t => t.status === 'completed').length;
59
+ const progress = completed / tasks.length;
60
+ this.db.prepare(`
61
+ UPDATE goals SET progress = ?, updated_at = datetime('now') WHERE id = ?
62
+ `).run(progress, id);
63
+ // Auto-complete goal if all tasks done
64
+ if (progress >= 1.0) {
65
+ this.updateGoalStatus(id, 'completed');
66
+ }
67
+ }
68
+ /**
69
+ * Delete a goal and its tasks
70
+ */
71
+ removeGoal(id) {
72
+ const result = this.db.prepare('DELETE FROM goals WHERE id = ?').run(id);
73
+ return result.changes > 0;
74
+ }
75
+ // ─── Task Operations ──────────────────────────────────────
76
+ /**
77
+ * Add a task to a goal
78
+ */
79
+ addTask(goalId, title, options = {}) {
80
+ const stmt = this.db.prepare(`
81
+ INSERT INTO tasks (goal_id, title, description, skill, input, depends_on, requires_approval, scheduled_at)
82
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
83
+ `);
84
+ const result = stmt.run(goalId, title, options.description ?? null, options.skill ?? null, JSON.stringify(options.input ?? {}), JSON.stringify(options.dependsOn ?? []), options.requiresApproval ? 1 : 0, options.scheduledAt ?? null);
85
+ this.logAudit('task.created', 'task', result.lastInsertRowid, title);
86
+ return this.getTask(result.lastInsertRowid);
87
+ }
88
+ /**
89
+ * Get a task by ID
90
+ */
91
+ getTask(id) {
92
+ const row = this.db.prepare('SELECT * FROM tasks WHERE id = ?').get(id);
93
+ if (!row)
94
+ return null;
95
+ return this.parseTask(row);
96
+ }
97
+ /**
98
+ * List tasks for a goal
99
+ */
100
+ listTasks(goalId) {
101
+ const rows = this.db.prepare('SELECT * FROM tasks WHERE goal_id = ? ORDER BY id ASC').all(goalId);
102
+ return rows.map(r => this.parseTask(r));
103
+ }
104
+ /**
105
+ * Get the next executable task (respects dependencies)
106
+ */
107
+ getNextTask() {
108
+ // Get all pending/queued tasks ordered by goal priority
109
+ const candidates = this.db.prepare(`
110
+ SELECT t.* FROM tasks t
111
+ JOIN goals g ON t.goal_id = g.id
112
+ WHERE t.status IN ('pending', 'queued')
113
+ AND g.status = 'active'
114
+ ORDER BY g.priority ASC, t.id ASC
115
+ `).all();
116
+ for (const row of candidates) {
117
+ const task = this.parseTask(row);
118
+ // Check dependencies
119
+ if (task.depends_on.length > 0) {
120
+ const deps = task.depends_on.map(id => this.getTask(id));
121
+ const allMet = deps.every(d => d?.status === 'completed');
122
+ if (!allMet)
123
+ continue;
124
+ }
125
+ // Check if approval is needed and granted
126
+ if (task.requires_approval && !task.approved_at)
127
+ continue;
128
+ return task;
129
+ }
130
+ return null;
131
+ }
132
+ /**
133
+ * Mark task as running
134
+ */
135
+ startTask(id) {
136
+ this.db.prepare(`
137
+ UPDATE tasks SET status = 'running', started_at = datetime('now') WHERE id = ?
138
+ `).run(id);
139
+ this.logAudit('task.started', 'task', id, `Task #${id} started`);
140
+ }
141
+ /**
142
+ * Mark task as completed
143
+ */
144
+ completeTask(id, output) {
145
+ this.db.prepare(`
146
+ UPDATE tasks SET status = 'completed', output = ?, completed_at = datetime('now')
147
+ WHERE id = ?
148
+ `).run(output, id);
149
+ this.logAudit('task.completed', 'task', id, `Task #${id} completed`);
150
+ // Update goal progress
151
+ const task = this.getTask(id);
152
+ if (task)
153
+ this.updateGoalProgress(task.goal_id);
154
+ }
155
+ /**
156
+ * Mark task as failed
157
+ */
158
+ failTask(id, error) {
159
+ const task = this.getTask(id);
160
+ if (!task)
161
+ return;
162
+ if (task.retry_count < task.max_retries) {
163
+ // Retry
164
+ this.db.prepare(`
165
+ UPDATE tasks SET status = 'pending', retry_count = retry_count + 1, error = ?
166
+ WHERE id = ?
167
+ `).run(error, id);
168
+ this.logAudit('task.retry', 'task', id, `Task #${id} retry ${task.retry_count + 1}/${task.max_retries}: ${error}`);
169
+ }
170
+ else {
171
+ // Final failure
172
+ this.db.prepare(`
173
+ UPDATE tasks SET status = 'failed', error = ?, completed_at = datetime('now')
174
+ WHERE id = ?
175
+ `).run(error, id);
176
+ this.logAudit('task.failed', 'task', id, `Task #${id} failed: ${error}`);
177
+ }
178
+ }
179
+ /**
180
+ * Approve a task that requires human approval
181
+ */
182
+ approveTask(id) {
183
+ const result = this.db.prepare(`
184
+ UPDATE tasks SET approved_at = datetime('now'), status = 'queued'
185
+ WHERE id = ? AND requires_approval = 1
186
+ `).run(id);
187
+ if (result.changes > 0) {
188
+ this.logAudit('task.approved', 'task', id, `Task #${id} approved`);
189
+ }
190
+ return result.changes > 0;
191
+ }
192
+ /**
193
+ * Get tasks waiting for approval
194
+ */
195
+ getPendingApprovals() {
196
+ const rows = this.db.prepare(`
197
+ SELECT * FROM tasks
198
+ WHERE requires_approval = 1 AND approved_at IS NULL
199
+ AND status NOT IN ('cancelled', 'completed', 'failed')
200
+ ORDER BY id ASC
201
+ `).all();
202
+ return rows.map(r => this.parseTask(r));
203
+ }
204
+ /**
205
+ * Get summary stats
206
+ */
207
+ stats() {
208
+ return {
209
+ activeGoals: this.db.prepare("SELECT COUNT(*) as c FROM goals WHERE status = 'active'").get().c,
210
+ completedGoals: this.db.prepare("SELECT COUNT(*) as c FROM goals WHERE status = 'completed'").get().c,
211
+ pendingTasks: this.db.prepare("SELECT COUNT(*) as c FROM tasks WHERE status IN ('pending','queued')").get().c,
212
+ runningTasks: this.db.prepare("SELECT COUNT(*) as c FROM tasks WHERE status = 'running'").get().c,
213
+ completedTasks: this.db.prepare("SELECT COUNT(*) as c FROM tasks WHERE status = 'completed'").get().c,
214
+ failedTasks: this.db.prepare("SELECT COUNT(*) as c FROM tasks WHERE status = 'failed'").get().c,
215
+ awaitingApproval: this.db.prepare("SELECT COUNT(*) as c FROM tasks WHERE requires_approval = 1 AND approved_at IS NULL AND status NOT IN ('cancelled','completed','failed')").get().c,
216
+ };
217
+ }
218
+ // ─── Helpers ──────────────────────────────────────────────
219
+ parseTask(row) {
220
+ return {
221
+ ...row,
222
+ input: JSON.parse(row.input || '{}'),
223
+ depends_on: JSON.parse(row.depends_on || '[]'),
224
+ requires_approval: !!row.requires_approval,
225
+ };
226
+ }
227
+ logAudit(eventType, entityType, entityId, details) {
228
+ this.db.prepare(`
229
+ INSERT INTO audit_events (event_type, entity_type, entity_id, action, details)
230
+ VALUES (?, ?, ?, ?, ?)
231
+ `).run(eventType, entityType, entityId, eventType, details);
232
+ }
233
+ }
234
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/goals/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Memory Store — Persistent agent memory backed by SQLite + FTS5
3
+ *
4
+ * Stores facts, project context, and learned information
5
+ * that persists across sessions.
6
+ */
7
+ export interface Memory {
8
+ id: number;
9
+ content: string;
10
+ category: 'project' | 'preference' | 'fact' | 'learned' | 'general';
11
+ source: 'user' | 'agent' | 'auto';
12
+ tags: string[];
13
+ created_at: string;
14
+ accessed_at: string | null;
15
+ relevance_score: number;
16
+ }
17
+ export interface MemorySearchResult extends Memory {
18
+ rank: number;
19
+ }
20
+ export declare class MemoryStore {
21
+ private db;
22
+ private static instance;
23
+ constructor(dbPath: string);
24
+ /**
25
+ * Get singleton instance scoped to a working directory
26
+ */
27
+ static open(workDir: string): MemoryStore;
28
+ /**
29
+ * Run database migrations
30
+ */
31
+ private migrate;
32
+ /**
33
+ * Save a new memory
34
+ */
35
+ save(content: string, category?: Memory['category'], source?: Memory['source'], tags?: string[]): Memory;
36
+ /**
37
+ * Search memories using full-text search
38
+ */
39
+ search(query: string, limit?: number): MemorySearchResult[];
40
+ /**
41
+ * Get all memories, optionally filtered by category
42
+ */
43
+ list(category?: Memory['category'], limit?: number): Memory[];
44
+ /**
45
+ * Get a specific memory by ID
46
+ */
47
+ getMemory(id: number): Memory | null;
48
+ /**
49
+ * Delete a memory
50
+ */
51
+ forget(id: number): boolean;
52
+ /**
53
+ * Get relevant context for an LLM prompt
54
+ * Searches memories and returns formatted context
55
+ */
56
+ getContext(query: string, maxTokens?: number): string;
57
+ /**
58
+ * Get memory count and stats
59
+ */
60
+ stats(): {
61
+ total: number;
62
+ byCategory: Record<string, number>;
63
+ bySource: Record<string, number>;
64
+ };
65
+ private logAudit;
66
+ getAuditLog(limit?: number): any[];
67
+ close(): void;
68
+ }
69
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/memory/store.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACpE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAmB,SAAQ,MAAM;IAC9C,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;IACpB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;gBAEvC,MAAM,EAAE,MAAM;IAY1B;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IASzC;;OAEG;IACH,OAAO,CAAC,OAAO;IAsGf;;OAEG;IACH,IAAI,CACA,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,UAAU,CAAa,EACxC,MAAM,GAAE,MAAM,CAAC,QAAQ,CAAU,EACjC,IAAI,GAAE,MAAM,EAAO,GACpB,MAAM;IAYT;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,kBAAkB,EAAE;IA0BvD;;OAEG;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,SAAK,GAAG,MAAM,EAAE;IAqBzD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS3B;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM;IAkBlD;;OAEG;IACH,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE;IAoBhG,OAAO,CAAC,QAAQ;IAOhB,WAAW,CAAC,KAAK,SAAK,GAAG,GAAG,EAAE;IAQ9B,KAAK,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,255 @@
1
+ import Database from 'better-sqlite3';
2
+ import path from 'node:path';
3
+ import { mkdirSync } from 'node:fs';
4
+ export class MemoryStore {
5
+ db;
6
+ static instance = null;
7
+ constructor(dbPath) {
8
+ // Ensure directory exists
9
+ mkdirSync(path.dirname(dbPath), { recursive: true });
10
+ this.db = new Database(dbPath);
11
+ // Enable WAL mode for better concurrent performance
12
+ this.db.pragma('journal_mode = WAL');
13
+ this.migrate();
14
+ }
15
+ /**
16
+ * Get singleton instance scoped to a working directory
17
+ */
18
+ static open(workDir) {
19
+ const dbPath = path.join(workDir, '.agent', 'memory.db');
20
+ if (!MemoryStore.instance || MemoryStore.instance._path !== dbPath) {
21
+ MemoryStore.instance = new MemoryStore(dbPath);
22
+ MemoryStore.instance._path = dbPath;
23
+ }
24
+ return MemoryStore.instance;
25
+ }
26
+ /**
27
+ * Run database migrations
28
+ */
29
+ migrate() {
30
+ this.db.exec(`
31
+ -- Memories table
32
+ CREATE TABLE IF NOT EXISTS memories (
33
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
34
+ content TEXT NOT NULL,
35
+ category TEXT DEFAULT 'general'
36
+ CHECK(category IN ('project','preference','fact','learned','general')),
37
+ source TEXT DEFAULT 'user'
38
+ CHECK(source IN ('user','agent','auto')),
39
+ tags TEXT DEFAULT '[]',
40
+ created_at DATETIME DEFAULT (datetime('now')),
41
+ accessed_at DATETIME,
42
+ relevance_score REAL DEFAULT 1.0
43
+ );
44
+
45
+ -- Full-text search index
46
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
47
+ content, category, tags,
48
+ content='memories',
49
+ content_rowid='id'
50
+ );
51
+
52
+ -- Triggers to keep FTS in sync
53
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
54
+ INSERT INTO memories_fts(rowid, content, category, tags)
55
+ VALUES (new.id, new.content, new.category, new.tags);
56
+ END;
57
+
58
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
59
+ INSERT INTO memories_fts(memories_fts, rowid, content, category, tags)
60
+ VALUES ('delete', old.id, old.content, old.category, old.tags);
61
+ END;
62
+
63
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
64
+ INSERT INTO memories_fts(memories_fts, rowid, content, category, tags)
65
+ VALUES ('delete', old.id, old.content, old.category, old.tags);
66
+ INSERT INTO memories_fts(rowid, content, category, tags)
67
+ VALUES (new.id, new.content, new.category, new.tags);
68
+ END;
69
+
70
+ -- Goals table
71
+ CREATE TABLE IF NOT EXISTS goals (
72
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
73
+ title TEXT NOT NULL,
74
+ description TEXT,
75
+ status TEXT DEFAULT 'active'
76
+ CHECK(status IN ('active','paused','completed','failed','cancelled')),
77
+ priority INTEGER DEFAULT 5
78
+ CHECK(priority BETWEEN 1 AND 10),
79
+ created_at DATETIME DEFAULT (datetime('now')),
80
+ updated_at DATETIME DEFAULT (datetime('now')),
81
+ deadline DATETIME,
82
+ parent_goal_id INTEGER REFERENCES goals(id),
83
+ progress REAL DEFAULT 0.0,
84
+ metadata TEXT DEFAULT '{}'
85
+ );
86
+
87
+ -- Tasks table
88
+ CREATE TABLE IF NOT EXISTS tasks (
89
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
90
+ goal_id INTEGER REFERENCES goals(id) ON DELETE CASCADE,
91
+ title TEXT NOT NULL,
92
+ description TEXT,
93
+ status TEXT DEFAULT 'pending'
94
+ CHECK(status IN ('pending','queued','running','completed','failed','blocked','cancelled')),
95
+ skill TEXT,
96
+ input TEXT DEFAULT '{}',
97
+ output TEXT,
98
+ depends_on TEXT DEFAULT '[]',
99
+ scheduled_at DATETIME,
100
+ started_at DATETIME,
101
+ completed_at DATETIME,
102
+ retry_count INTEGER DEFAULT 0,
103
+ max_retries INTEGER DEFAULT 3,
104
+ error TEXT,
105
+ requires_approval BOOLEAN DEFAULT 0,
106
+ approved_at DATETIME,
107
+ created_at DATETIME DEFAULT (datetime('now'))
108
+ );
109
+
110
+ -- Audit events table
111
+ CREATE TABLE IF NOT EXISTS audit_events (
112
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
113
+ event_type TEXT NOT NULL,
114
+ entity_type TEXT,
115
+ entity_id INTEGER,
116
+ action TEXT NOT NULL,
117
+ details TEXT,
118
+ created_at DATETIME DEFAULT (datetime('now'))
119
+ );
120
+
121
+ -- Indexes
122
+ CREATE INDEX IF NOT EXISTS idx_goals_status ON goals(status);
123
+ CREATE INDEX IF NOT EXISTS idx_tasks_goal ON tasks(goal_id);
124
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
125
+ CREATE INDEX IF NOT EXISTS idx_audit_entity ON audit_events(entity_type, entity_id);
126
+ `);
127
+ }
128
+ // ─── Memory Operations ─────────────────────────────────────
129
+ /**
130
+ * Save a new memory
131
+ */
132
+ save(content, category = 'general', source = 'user', tags = []) {
133
+ const stmt = this.db.prepare(`
134
+ INSERT INTO memories (content, category, source, tags)
135
+ VALUES (?, ?, ?, ?)
136
+ `);
137
+ const result = stmt.run(content, category, source, JSON.stringify(tags));
138
+ this.logAudit('memory.save', 'memory', result.lastInsertRowid, content);
139
+ return this.getMemory(result.lastInsertRowid);
140
+ }
141
+ /**
142
+ * Search memories using full-text search
143
+ */
144
+ search(query, limit = 10) {
145
+ const stmt = this.db.prepare(`
146
+ SELECT m.*, fts.rank
147
+ FROM memories_fts fts
148
+ JOIN memories m ON m.id = fts.rowid
149
+ WHERE memories_fts MATCH ?
150
+ ORDER BY fts.rank
151
+ LIMIT ?
152
+ `);
153
+ const results = stmt.all(query, limit);
154
+ // Update accessed_at for returned memories
155
+ const updateStmt = this.db.prepare(`
156
+ UPDATE memories SET accessed_at = datetime('now') WHERE id = ?
157
+ `);
158
+ for (const r of results) {
159
+ updateStmt.run(r.id);
160
+ }
161
+ return results.map(r => ({
162
+ ...r,
163
+ tags: JSON.parse(r.tags || '[]'),
164
+ }));
165
+ }
166
+ /**
167
+ * Get all memories, optionally filtered by category
168
+ */
169
+ list(category, limit = 50) {
170
+ let stmt;
171
+ if (category) {
172
+ stmt = this.db.prepare(`
173
+ SELECT * FROM memories WHERE category = ?
174
+ ORDER BY created_at DESC LIMIT ?
175
+ `);
176
+ return stmt.all(category, limit).map(r => ({
177
+ ...r,
178
+ tags: JSON.parse(r.tags || '[]'),
179
+ }));
180
+ }
181
+ stmt = this.db.prepare(`
182
+ SELECT * FROM memories ORDER BY created_at DESC LIMIT ?
183
+ `);
184
+ return stmt.all(limit).map(r => ({
185
+ ...r,
186
+ tags: JSON.parse(r.tags || '[]'),
187
+ }));
188
+ }
189
+ /**
190
+ * Get a specific memory by ID
191
+ */
192
+ getMemory(id) {
193
+ const stmt = this.db.prepare('SELECT * FROM memories WHERE id = ?');
194
+ const row = stmt.get(id);
195
+ if (!row)
196
+ return null;
197
+ return { ...row, tags: JSON.parse(row.tags || '[]') };
198
+ }
199
+ /**
200
+ * Delete a memory
201
+ */
202
+ forget(id) {
203
+ const stmt = this.db.prepare('DELETE FROM memories WHERE id = ?');
204
+ const result = stmt.run(id);
205
+ if (result.changes > 0) {
206
+ this.logAudit('memory.forget', 'memory', id, `Deleted memory #${id}`);
207
+ }
208
+ return result.changes > 0;
209
+ }
210
+ /**
211
+ * Get relevant context for an LLM prompt
212
+ * Searches memories and returns formatted context
213
+ */
214
+ getContext(query, maxTokens = 500) {
215
+ const results = this.search(query, 5);
216
+ if (results.length === 0)
217
+ return '';
218
+ const lines = results.map(r => `- [${r.category}] ${r.content}`);
219
+ const context = lines.join('\n');
220
+ // Rough token estimate (4 chars ≈ 1 token)
221
+ if (context.length > maxTokens * 4) {
222
+ return context.slice(0, maxTokens * 4) + '\n...';
223
+ }
224
+ return context;
225
+ }
226
+ /**
227
+ * Get memory count and stats
228
+ */
229
+ stats() {
230
+ const total = this.db.prepare('SELECT COUNT(*) as c FROM memories').get().c;
231
+ const byCat = this.db.prepare('SELECT category, COUNT(*) as c FROM memories GROUP BY category').all();
232
+ const bySrc = this.db.prepare('SELECT source, COUNT(*) as c FROM memories GROUP BY source').all();
233
+ return {
234
+ total,
235
+ byCategory: Object.fromEntries(byCat.map(r => [r.category, r.c])),
236
+ bySource: Object.fromEntries(bySrc.map(r => [r.source, r.c])),
237
+ };
238
+ }
239
+ // ─── Audit Operations ─────────────────────────────────────
240
+ logAudit(eventType, entityType, entityId, details) {
241
+ this.db.prepare(`
242
+ INSERT INTO audit_events (event_type, entity_type, entity_id, action, details)
243
+ VALUES (?, ?, ?, ?, ?)
244
+ `).run(eventType, entityType, entityId, eventType, details);
245
+ }
246
+ getAuditLog(limit = 20) {
247
+ return this.db.prepare('SELECT * FROM audit_events ORDER BY created_at DESC LIMIT ?').all(limit);
248
+ }
249
+ // ─── Cleanup ─────────────────────────────────────────────
250
+ close() {
251
+ this.db.close();
252
+ MemoryStore.instance = null;
253
+ }
254
+ }
255
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/memory/store.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praveencs/agent",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "files": [
5
5
  "dist",
6
6
  "bin",
@@ -47,6 +47,7 @@
47
47
  "dependencies": {
48
48
  "@anthropic-ai/sdk": "^0.39.0",
49
49
  "@modelcontextprotocol/sdk": "^1.5.0",
50
+ "better-sqlite3": "^12.6.2",
50
51
  "chalk": "^5.4.1",
51
52
  "chokidar": "^4.0.3",
52
53
  "commander": "^13.1.0",
@@ -64,6 +65,7 @@
64
65
  "zod": "^3.24.2"
65
66
  },
66
67
  "devDependencies": {
68
+ "@types/better-sqlite3": "^7.6.13",
67
69
  "@types/diff": "^7.0.0",
68
70
  "@types/inquirer": "^9.0.7",
69
71
  "@types/node": "^22.13.0",
@@ -74,4 +76,4 @@
74
76
  "tsx": "^4.19.2",
75
77
  "typescript": "^5.7.3"
76
78
  }
77
- }
79
+ }