@putervision/agent-reasoning-mcp 0.1.1

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,538 @@
1
+ import {
2
+ generateId,
3
+ getCurrentIsoString,
4
+ logReasoningEvent,
5
+ safeJsonParse,
6
+ safeJsonStringify,
7
+ sanitizeKeys
8
+ } from "./chunk-6CYLIFQX.js";
9
+ import {
10
+ NotFoundError,
11
+ ValidationError
12
+ } from "./chunk-F4TEZ2TS.js";
13
+
14
+ // src/engine/goals.ts
15
+ var GoalEngine = class {
16
+ static createGoal(db, params) {
17
+ if (!params.title || typeof params.title !== "string") {
18
+ throw new ValidationError("Goal title is required.");
19
+ }
20
+ if (params.client_request_id) {
21
+ const existing = db.prepare("SELECT * FROM goals WHERE project = ? AND client_request_id = ?").get(params.project, params.client_request_id);
22
+ if (existing) {
23
+ return this.mapRowToGoal(existing);
24
+ }
25
+ }
26
+ if (params.parent_id) {
27
+ const parent = db.prepare("SELECT id FROM goals WHERE project = ? AND id = ?").get(params.project, params.parent_id);
28
+ if (!parent) {
29
+ throw new NotFoundError(`Parent goal ${params.parent_id} not found.`);
30
+ }
31
+ }
32
+ const id = generateId();
33
+ const now = getCurrentIsoString();
34
+ const status = params.status || "active";
35
+ const priority = params.priority !== void 0 ? params.priority : 0.5;
36
+ const sanitizedMetadata = params.metadata ? sanitizeKeys(params.metadata) : null;
37
+ db.prepare(
38
+ `
39
+ INSERT INTO goals (
40
+ id, project, session_id, parent_id, title, description, status, priority,
41
+ utility_weights_json, deadline_at, progress, success_criteria_json,
42
+ metadata_json, client_request_id, created_at, updated_at, version
43
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0.0, ?, ?, ?, ?, ?, 1)
44
+ `
45
+ ).run(
46
+ id,
47
+ params.project,
48
+ params.session_id ?? null,
49
+ params.parent_id ?? null,
50
+ params.title,
51
+ params.description ?? null,
52
+ status,
53
+ priority,
54
+ params.utility_weights ? safeJsonStringify(params.utility_weights) : null,
55
+ params.deadline_at ?? null,
56
+ params.success_criteria ? safeJsonStringify(params.success_criteria) : null,
57
+ sanitizedMetadata ? safeJsonStringify(sanitizedMetadata) : null,
58
+ params.client_request_id ?? null,
59
+ now,
60
+ now
61
+ );
62
+ logReasoningEvent(db, {
63
+ project: params.project,
64
+ entity_id: id,
65
+ entity_type: "goal",
66
+ action: "create",
67
+ details: { title: params.title, priority, parent_id: params.parent_id }
68
+ });
69
+ return {
70
+ id,
71
+ project: params.project,
72
+ session_id: params.session_id,
73
+ parent_id: params.parent_id || null,
74
+ title: params.title,
75
+ description: params.description,
76
+ status,
77
+ priority,
78
+ utility_weights: params.utility_weights,
79
+ deadline_at: params.deadline_at,
80
+ progress: 0,
81
+ success_criteria: params.success_criteria,
82
+ metadata: sanitizedMetadata || void 0,
83
+ client_request_id: params.client_request_id,
84
+ created_at: now,
85
+ updated_at: now,
86
+ version: 1
87
+ };
88
+ }
89
+ static updateGoal(db, params) {
90
+ const existing = db.prepare("SELECT * FROM goals WHERE project = ? AND id = ?").get(params.project, params.id);
91
+ if (!existing) {
92
+ throw new NotFoundError(`Goal ${params.id} not found.`);
93
+ }
94
+ const now = getCurrentIsoString();
95
+ const title = params.title ?? existing.title;
96
+ const description = params.description ?? existing.description;
97
+ const status = params.status ?? existing.status;
98
+ const priority = params.priority !== void 0 ? params.priority : existing.priority;
99
+ const progress = params.progress !== void 0 ? params.progress : existing.progress;
100
+ const failure_reason = params.failure_reason ?? existing.failure_reason;
101
+ const metadata_json = params.metadata ? safeJsonStringify(
102
+ sanitizeKeys({ ...safeJsonParse(existing.metadata_json, {}), ...params.metadata })
103
+ ) : existing.metadata_json;
104
+ const version = existing.version + 1;
105
+ db.prepare(
106
+ `
107
+ UPDATE goals SET
108
+ title = ?, description = ?, status = ?, priority = ?, progress = ?,
109
+ failure_reason = ?, metadata_json = ?, updated_at = ?, version = ?
110
+ WHERE project = ? AND id = ?
111
+ `
112
+ ).run(
113
+ title,
114
+ description,
115
+ status,
116
+ priority,
117
+ progress,
118
+ failure_reason,
119
+ metadata_json,
120
+ now,
121
+ version,
122
+ params.project,
123
+ params.id
124
+ );
125
+ logReasoningEvent(db, {
126
+ project: params.project,
127
+ entity_id: params.id,
128
+ entity_type: "goal",
129
+ action: "update",
130
+ details: { title, status, priority, progress }
131
+ });
132
+ return this.getGoal(db, { project: params.project, id: params.id });
133
+ }
134
+ static decomposeGoal(db, params) {
135
+ const parent = this.getGoal(db, { project: params.project, id: params.parent_id });
136
+ const created = [];
137
+ db.transaction(() => {
138
+ for (const sub of params.subgoals) {
139
+ const goal = this.createGoal(db, {
140
+ project: params.project,
141
+ session_id: parent.session_id,
142
+ parent_id: parent.id,
143
+ title: sub.title,
144
+ description: sub.description,
145
+ priority: sub.priority !== void 0 ? sub.priority : parent.priority
146
+ });
147
+ created.push(goal);
148
+ }
149
+ })();
150
+ return { parent_goal: parent, subgoals: created };
151
+ }
152
+ static getGoal(db, params) {
153
+ const row = db.prepare("SELECT * FROM goals WHERE project = ? AND id = ?").get(params.project, params.id);
154
+ if (!row) throw new NotFoundError(`Goal ${params.id} not found.`);
155
+ return this.mapRowToGoal(row);
156
+ }
157
+ static listGoals(db, params) {
158
+ let sql = "SELECT * FROM goals WHERE project = ?";
159
+ const sqlParams = [params.project];
160
+ if (params.status) {
161
+ sql += " AND status = ?";
162
+ sqlParams.push(params.status);
163
+ }
164
+ if (params.parent_id !== void 0) {
165
+ if (params.parent_id === "null" || params.parent_id === "") {
166
+ sql += " AND parent_id IS NULL";
167
+ } else {
168
+ sql += " AND parent_id = ?";
169
+ sqlParams.push(params.parent_id);
170
+ }
171
+ }
172
+ sql += " ORDER BY priority DESC, created_at ASC LIMIT ?";
173
+ sqlParams.push(params.limit || 100);
174
+ const rows = db.prepare(sql).all(...sqlParams);
175
+ return rows.map((r) => this.mapRowToGoal(r));
176
+ }
177
+ static abandonGoal(db, params) {
178
+ return this.updateGoal(db, {
179
+ project: params.project,
180
+ id: params.id,
181
+ status: "abandoned",
182
+ failure_reason: params.reason || "Goal manually abandoned."
183
+ });
184
+ }
185
+ static mapRowToGoal(row) {
186
+ return {
187
+ id: row.id,
188
+ project: row.project,
189
+ session_id: row.session_id,
190
+ parent_id: row.parent_id,
191
+ title: row.title,
192
+ description: row.description,
193
+ status: row.status,
194
+ priority: row.priority,
195
+ utility_weights: safeJsonParse(row.utility_weights_json, void 0),
196
+ deadline_at: row.deadline_at,
197
+ progress: row.progress,
198
+ success_criteria: safeJsonParse(row.success_criteria_json, void 0),
199
+ failure_reason: row.failure_reason,
200
+ metadata: safeJsonParse(row.metadata_json, void 0),
201
+ client_request_id: row.client_request_id,
202
+ created_at: row.created_at,
203
+ updated_at: row.updated_at,
204
+ version: row.version
205
+ };
206
+ }
207
+ };
208
+
209
+ // src/engine/beliefs.ts
210
+ var BeliefEngine = class {
211
+ static updateBelief(db, params) {
212
+ if (!params.subject || !params.predicate) {
213
+ throw new ValidationError("Belief subject and predicate are required.");
214
+ }
215
+ if (params.client_request_id) {
216
+ const existing2 = db.prepare("SELECT * FROM beliefs WHERE project = ? AND client_request_id = ?").get(params.project, params.client_request_id);
217
+ if (existing2) {
218
+ return this.mapRowToBelief(existing2);
219
+ }
220
+ }
221
+ const existing = db.prepare(
222
+ "SELECT * FROM beliefs WHERE project = ? AND category = ? AND subject = ? AND predicate = ?"
223
+ ).get(params.project, params.category, params.subject, params.predicate);
224
+ const now = getCurrentIsoString();
225
+ const confidence = params.confidence !== void 0 ? Math.max(0, Math.min(1, params.confidence)) : 1;
226
+ const decay_rate = params.decay_rate !== void 0 ? params.decay_rate : params.category === "spatial" ? 0.2 : 0.05;
227
+ if (existing) {
228
+ db.prepare(
229
+ `
230
+ UPDATE beliefs SET
231
+ object_json = ?, confidence = ?, source = ?, source_id = ?,
232
+ expires_at = ?, decay_rate = ?, last_decayed_at = ?, metadata_json = ?, updated_at = ?
233
+ WHERE id = ?
234
+ `
235
+ ).run(
236
+ safeJsonStringify(params.object),
237
+ confidence,
238
+ params.source || existing.source,
239
+ params.source_id ?? existing.source_id,
240
+ params.expires_at ?? existing.expires_at,
241
+ decay_rate,
242
+ now,
243
+ params.metadata ? safeJsonStringify(params.metadata) : existing.metadata_json,
244
+ now,
245
+ existing.id
246
+ );
247
+ logReasoningEvent(db, {
248
+ project: params.project,
249
+ entity_id: existing.id,
250
+ entity_type: "belief",
251
+ action: "update",
252
+ details: { subject: params.subject, predicate: params.predicate, confidence }
253
+ });
254
+ return this.getBelief(db, { project: params.project, id: existing.id });
255
+ }
256
+ const id = generateId();
257
+ db.prepare(
258
+ `
259
+ INSERT INTO beliefs (
260
+ id, project, session_id, category, subject, predicate, object_json,
261
+ confidence, source, source_id, expires_at, decay_rate, last_decayed_at,
262
+ client_request_id, metadata_json, created_at, updated_at
263
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
264
+ `
265
+ ).run(
266
+ id,
267
+ params.project,
268
+ params.session_id ?? null,
269
+ params.category,
270
+ params.subject,
271
+ params.predicate,
272
+ safeJsonStringify(params.object),
273
+ confidence,
274
+ params.source || "observation",
275
+ params.source_id ?? null,
276
+ params.expires_at ?? null,
277
+ decay_rate,
278
+ now,
279
+ params.client_request_id ?? null,
280
+ params.metadata ? safeJsonStringify(params.metadata) : null,
281
+ now,
282
+ now
283
+ );
284
+ logReasoningEvent(db, {
285
+ project: params.project,
286
+ entity_id: id,
287
+ entity_type: "belief",
288
+ action: "assert",
289
+ details: { subject: params.subject, predicate: params.predicate, confidence }
290
+ });
291
+ return {
292
+ id,
293
+ project: params.project,
294
+ session_id: params.session_id,
295
+ category: params.category,
296
+ subject: params.subject,
297
+ predicate: params.predicate,
298
+ object: params.object,
299
+ confidence,
300
+ source: params.source || "observation",
301
+ source_id: params.source_id,
302
+ expires_at: params.expires_at,
303
+ decay_rate,
304
+ last_decayed_at: now,
305
+ client_request_id: params.client_request_id,
306
+ metadata: params.metadata,
307
+ created_at: now,
308
+ updated_at: now
309
+ };
310
+ }
311
+ static queryBeliefs(db, params) {
312
+ this.decayBeliefs(db, params.project);
313
+ let sql = "SELECT * FROM beliefs WHERE project = ?";
314
+ const sqlParams = [params.project];
315
+ if (params.category) {
316
+ sql += " AND category = ?";
317
+ sqlParams.push(params.category);
318
+ }
319
+ if (params.subject) {
320
+ sql += " AND subject LIKE ?";
321
+ sqlParams.push(`%${params.subject}%`);
322
+ }
323
+ if (params.predicate) {
324
+ sql += " AND predicate = ?";
325
+ sqlParams.push(params.predicate);
326
+ }
327
+ if (params.min_confidence !== void 0) {
328
+ sql += " AND confidence >= ?";
329
+ sqlParams.push(params.min_confidence);
330
+ }
331
+ sql += " ORDER BY confidence DESC, updated_at DESC LIMIT ?";
332
+ sqlParams.push(params.limit || 50);
333
+ const rows = db.prepare(sql).all(...sqlParams);
334
+ return rows.map((r) => this.mapRowToBelief(r));
335
+ }
336
+ static decayBeliefs(db, project) {
337
+ const now = Date.now();
338
+ const rows = db.prepare("SELECT id, confidence, decay_rate, last_decayed_at FROM beliefs WHERE project = ?").all(project);
339
+ db.transaction(() => {
340
+ const updateStmt = db.prepare(
341
+ "UPDATE beliefs SET confidence = ?, last_decayed_at = ? WHERE id = ?"
342
+ );
343
+ for (const row of rows) {
344
+ if (!row.last_decayed_at) continue;
345
+ const elapsedHours = (now - new Date(row.last_decayed_at).getTime()) / (1e3 * 60 * 60);
346
+ if (elapsedHours > 0.01) {
347
+ const newConf = Math.max(0.01, row.confidence * Math.exp(-row.decay_rate * elapsedHours));
348
+ updateStmt.run(newConf, new Date(now).toISOString(), row.id);
349
+ }
350
+ }
351
+ })();
352
+ }
353
+ static expireBeliefs(db, project) {
354
+ const now = getCurrentIsoString();
355
+ const res = db.prepare(
356
+ "DELETE FROM beliefs WHERE project = ? AND expires_at IS NOT NULL AND expires_at < ?"
357
+ ).run(project, now);
358
+ return res.changes;
359
+ }
360
+ static getBelief(db, params) {
361
+ const row = db.prepare("SELECT * FROM beliefs WHERE project = ? AND id = ?").get(params.project, params.id);
362
+ if (!row) throw new NotFoundError(`Belief ${params.id} not found.`);
363
+ return this.mapRowToBelief(row);
364
+ }
365
+ static mapRowToBelief(row) {
366
+ return {
367
+ id: row.id,
368
+ project: row.project,
369
+ session_id: row.session_id,
370
+ category: row.category,
371
+ subject: row.subject,
372
+ predicate: row.predicate,
373
+ object: safeJsonParse(row.object_json, row.object_json),
374
+ confidence: row.confidence,
375
+ source: row.source,
376
+ source_id: row.source_id,
377
+ expires_at: row.expires_at,
378
+ decay_rate: row.decay_rate,
379
+ last_decayed_at: row.last_decayed_at,
380
+ client_request_id: row.client_request_id,
381
+ metadata: safeJsonParse(row.metadata_json, void 0),
382
+ created_at: row.created_at,
383
+ updated_at: row.updated_at
384
+ };
385
+ }
386
+ };
387
+
388
+ // src/engine/intentions.ts
389
+ var IntentionEngine = class {
390
+ static createIntention(db, params) {
391
+ if (!params.goal_id || !params.behavior_name) {
392
+ throw new ValidationError("goal_id and behavior_name are required.");
393
+ }
394
+ if (params.client_request_id) {
395
+ const existing = db.prepare("SELECT * FROM intentions WHERE project = ? AND client_request_id = ?").get(params.project, params.client_request_id);
396
+ if (existing) {
397
+ return this.mapRowToIntention(existing);
398
+ }
399
+ }
400
+ const id = generateId();
401
+ const now = getCurrentIsoString();
402
+ const priority = params.priority !== void 0 ? params.priority : 0.5;
403
+ db.prepare(
404
+ `
405
+ INSERT INTO intentions (
406
+ id, project, goal_id, trace_id, session_id, behavior_name,
407
+ parameters_json, priority, status, deadline_at, abort_conditions_json,
408
+ client_request_id, created_at, updated_at
409
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?)
410
+ `
411
+ ).run(
412
+ id,
413
+ params.project,
414
+ params.goal_id,
415
+ params.trace_id ?? null,
416
+ params.session_id ?? null,
417
+ params.behavior_name,
418
+ safeJsonStringify(params.parameters || {}),
419
+ priority,
420
+ params.deadline_at ?? null,
421
+ params.abort_conditions ? safeJsonStringify(params.abort_conditions) : null,
422
+ params.client_request_id ?? null,
423
+ now,
424
+ now
425
+ );
426
+ logReasoningEvent(db, {
427
+ project: params.project,
428
+ entity_id: id,
429
+ entity_type: "intention",
430
+ action: "create",
431
+ details: { goal_id: params.goal_id, behavior_name: params.behavior_name }
432
+ });
433
+ return {
434
+ id,
435
+ project: params.project,
436
+ goal_id: params.goal_id,
437
+ trace_id: params.trace_id || void 0,
438
+ session_id: params.session_id,
439
+ behavior_name: params.behavior_name,
440
+ parameters: params.parameters || {},
441
+ priority,
442
+ status: "pending",
443
+ deadline_at: params.deadline_at,
444
+ abort_conditions: params.abort_conditions,
445
+ client_request_id: params.client_request_id,
446
+ created_at: now,
447
+ updated_at: now
448
+ };
449
+ }
450
+ static dispatchIntention(db, params) {
451
+ const intention = this.getIntention(db, params);
452
+ const now = getCurrentIsoString();
453
+ db.prepare("UPDATE intentions SET status = ?, updated_at = ? WHERE id = ?").run(
454
+ "dispatched",
455
+ now,
456
+ intention.id
457
+ );
458
+ logReasoningEvent(db, {
459
+ project: params.project,
460
+ entity_id: intention.id,
461
+ entity_type: "intention",
462
+ action: "dispatch",
463
+ details: { behavior_name: intention.behavior_name }
464
+ });
465
+ return { ...intention, status: "dispatched", updated_at: now };
466
+ }
467
+ static resolveIntention(db, params) {
468
+ const intention = this.getIntention(db, params);
469
+ const now = getCurrentIsoString();
470
+ db.prepare(
471
+ "UPDATE intentions SET status = ?, result_json = ?, updated_at = ? WHERE id = ?"
472
+ ).run(params.status, safeJsonStringify(params.result || {}), now, intention.id);
473
+ logReasoningEvent(db, {
474
+ project: params.project,
475
+ entity_id: intention.id,
476
+ entity_type: "intention",
477
+ action: "resolve",
478
+ details: { status: params.status, result: params.result }
479
+ });
480
+ return { ...intention, status: params.status, result: params.result, updated_at: now };
481
+ }
482
+ static getIntention(db, params) {
483
+ const row = db.prepare("SELECT * FROM intentions WHERE project = ? AND id = ?").get(params.project, params.id);
484
+ if (!row) throw new NotFoundError(`Intention ${params.id} not found.`);
485
+ return this.mapRowToIntention(row);
486
+ }
487
+ static listIntentions(db, params) {
488
+ let sql = "SELECT * FROM intentions WHERE project = ?";
489
+ const sqlParams = [params.project];
490
+ if (params.status) {
491
+ sql += " AND status = ?";
492
+ sqlParams.push(params.status);
493
+ }
494
+ if (params.goal_id) {
495
+ sql += " AND goal_id = ?";
496
+ sqlParams.push(params.goal_id);
497
+ }
498
+ sql += " ORDER BY priority DESC, created_at DESC LIMIT ?";
499
+ sqlParams.push(params.limit || 50);
500
+ const rows = db.prepare(sql).all(...sqlParams);
501
+ return rows.map((r) => this.mapRowToIntention(r));
502
+ }
503
+ static mapRowToIntention(row) {
504
+ return {
505
+ id: row.id,
506
+ project: row.project,
507
+ goal_id: row.goal_id,
508
+ trace_id: row.trace_id,
509
+ session_id: row.session_id,
510
+ behavior_name: row.behavior_name,
511
+ parameters: safeJsonParse(row.parameters_json, {}),
512
+ priority: row.priority,
513
+ status: row.status,
514
+ deadline_at: row.deadline_at,
515
+ abort_conditions: safeJsonParse(row.abort_conditions_json, void 0),
516
+ result: safeJsonParse(row.result_json, void 0),
517
+ client_request_id: row.client_request_id,
518
+ created_at: row.created_at,
519
+ updated_at: row.updated_at
520
+ };
521
+ }
522
+ };
523
+
524
+ // src/utils/version.ts
525
+ function getVersion() {
526
+ if (true) {
527
+ return "0.1.1";
528
+ }
529
+ return "0.1.1";
530
+ }
531
+
532
+ export {
533
+ GoalEngine,
534
+ BeliefEngine,
535
+ IntentionEngine,
536
+ getVersion
537
+ };
538
+ //# sourceMappingURL=chunk-SOCPGFU4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/goals.ts","../src/engine/beliefs.ts","../src/engine/intentions.ts","../src/utils/version.ts"],"sourcesContent":["import Database from 'better-sqlite3';\nimport { Goal, GoalId, GoalStatus } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { ValidationError, NotFoundError } from '../utils/errors.js';\nimport { logReasoningEvent } from './events.js';\nimport { sanitizeKeys } from '../utils/sanitize.js';\n\nexport class GoalEngine {\n static createGoal(\n db: Database.Database,\n params: {\n project: string;\n session_id?: string;\n parent_id?: string;\n title: string;\n description?: string;\n status?: GoalStatus;\n priority?: number;\n utility_weights?: Record<string, number>;\n deadline_at?: string;\n success_criteria?: string[];\n metadata?: Record<string, unknown>;\n client_request_id?: string;\n }\n ): Goal {\n if (!params.title || typeof params.title !== 'string') {\n throw new ValidationError('Goal title is required.');\n }\n\n if (params.client_request_id) {\n const existing = db\n .prepare('SELECT * FROM goals WHERE project = ? AND client_request_id = ?')\n .get(params.project, params.client_request_id) as any;\n if (existing) {\n return this.mapRowToGoal(existing);\n }\n }\n\n if (params.parent_id) {\n const parent = db\n .prepare('SELECT id FROM goals WHERE project = ? AND id = ?')\n .get(params.project, params.parent_id);\n if (!parent) {\n throw new NotFoundError(`Parent goal ${params.parent_id} not found.`);\n }\n }\n\n const id = generateId() as GoalId;\n const now = getCurrentIsoString();\n const status = params.status || 'active';\n const priority = params.priority !== undefined ? params.priority : 0.5;\n const sanitizedMetadata = params.metadata ? sanitizeKeys(params.metadata) : null;\n\n db.prepare(\n `\n INSERT INTO goals (\n id, project, session_id, parent_id, title, description, status, priority,\n utility_weights_json, deadline_at, progress, success_criteria_json,\n metadata_json, client_request_id, created_at, updated_at, version\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0.0, ?, ?, ?, ?, ?, 1)\n `\n ).run(\n id,\n params.project,\n params.session_id ?? null,\n params.parent_id ?? null,\n params.title,\n params.description ?? null,\n status,\n priority,\n params.utility_weights ? safeJsonStringify(params.utility_weights) : null,\n params.deadline_at ?? null,\n params.success_criteria ? safeJsonStringify(params.success_criteria) : null,\n sanitizedMetadata ? safeJsonStringify(sanitizedMetadata) : null,\n params.client_request_id ?? null,\n now,\n now\n );\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'goal',\n action: 'create',\n details: { title: params.title, priority, parent_id: params.parent_id },\n });\n\n return {\n id,\n project: params.project,\n session_id: params.session_id,\n parent_id: (params.parent_id as GoalId) || null,\n title: params.title,\n description: params.description,\n status,\n priority,\n utility_weights: params.utility_weights,\n deadline_at: params.deadline_at,\n progress: 0.0,\n success_criteria: params.success_criteria,\n metadata: sanitizedMetadata || undefined,\n client_request_id: params.client_request_id,\n created_at: now,\n updated_at: now,\n version: 1,\n };\n }\n\n static updateGoal(\n db: Database.Database,\n params: {\n project: string;\n id: string;\n title?: string;\n description?: string;\n status?: GoalStatus;\n priority?: number;\n progress?: number;\n failure_reason?: string;\n metadata?: Record<string, unknown>;\n }\n ): Goal {\n const existing = db\n .prepare('SELECT * FROM goals WHERE project = ? AND id = ?')\n .get(params.project, params.id) as any;\n if (!existing) {\n throw new NotFoundError(`Goal ${params.id} not found.`);\n }\n\n const now = getCurrentIsoString();\n const title = params.title ?? existing.title;\n const description = params.description ?? existing.description;\n const status = params.status ?? existing.status;\n const priority = params.priority !== undefined ? params.priority : existing.priority;\n const progress = params.progress !== undefined ? params.progress : existing.progress;\n const failure_reason = params.failure_reason ?? existing.failure_reason;\n const metadata_json = params.metadata\n ? safeJsonStringify(\n sanitizeKeys({ ...safeJsonParse(existing.metadata_json, {}), ...params.metadata })\n )\n : existing.metadata_json;\n const version = existing.version + 1;\n\n db.prepare(\n `\n UPDATE goals SET\n title = ?, description = ?, status = ?, priority = ?, progress = ?,\n failure_reason = ?, metadata_json = ?, updated_at = ?, version = ?\n WHERE project = ? AND id = ?\n `\n ).run(\n title,\n description,\n status,\n priority,\n progress,\n failure_reason,\n metadata_json,\n now,\n version,\n params.project,\n params.id\n );\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: params.id,\n entity_type: 'goal',\n action: 'update',\n details: { title, status, priority, progress },\n });\n\n return this.getGoal(db, { project: params.project, id: params.id });\n }\n\n static decomposeGoal(\n db: Database.Database,\n params: {\n project: string;\n parent_id: string;\n subgoals: Array<{ title: string; description?: string; priority?: number }>;\n }\n ): { parent_goal: Goal; subgoals: Goal[] } {\n const parent = this.getGoal(db, { project: params.project, id: params.parent_id });\n const created: Goal[] = [];\n\n db.transaction(() => {\n for (const sub of params.subgoals) {\n const goal = this.createGoal(db, {\n project: params.project,\n session_id: parent.session_id,\n parent_id: parent.id,\n title: sub.title,\n description: sub.description,\n priority: sub.priority !== undefined ? sub.priority : parent.priority,\n });\n created.push(goal);\n }\n })();\n\n return { parent_goal: parent, subgoals: created };\n }\n\n static getGoal(db: Database.Database, params: { project: string; id: string }): Goal {\n const row = db\n .prepare('SELECT * FROM goals WHERE project = ? AND id = ?')\n .get(params.project, params.id) as any;\n if (!row) throw new NotFoundError(`Goal ${params.id} not found.`);\n return this.mapRowToGoal(row);\n }\n\n static listGoals(\n db: Database.Database,\n params: { project: string; status?: GoalStatus; parent_id?: string; limit?: number }\n ): Goal[] {\n let sql = 'SELECT * FROM goals WHERE project = ?';\n const sqlParams: any[] = [params.project];\n\n if (params.status) {\n sql += ' AND status = ?';\n sqlParams.push(params.status);\n }\n if (params.parent_id !== undefined) {\n if (params.parent_id === 'null' || params.parent_id === '') {\n sql += ' AND parent_id IS NULL';\n } else {\n sql += ' AND parent_id = ?';\n sqlParams.push(params.parent_id);\n }\n }\n\n sql += ' ORDER BY priority DESC, created_at ASC LIMIT ?';\n sqlParams.push(params.limit || 100);\n\n const rows = db.prepare(sql).all(...sqlParams) as any[];\n return rows.map((r) => this.mapRowToGoal(r));\n }\n\n static abandonGoal(\n db: Database.Database,\n params: { project: string; id: string; reason?: string }\n ): Goal {\n return this.updateGoal(db, {\n project: params.project,\n id: params.id,\n status: 'abandoned',\n failure_reason: params.reason || 'Goal manually abandoned.',\n });\n }\n\n private static mapRowToGoal(row: any): Goal {\n return {\n id: row.id as GoalId,\n project: row.project,\n session_id: row.session_id,\n parent_id: row.parent_id as GoalId | null,\n title: row.title,\n description: row.description,\n status: row.status as GoalStatus,\n priority: row.priority,\n utility_weights: safeJsonParse(row.utility_weights_json, undefined),\n deadline_at: row.deadline_at,\n progress: row.progress,\n success_criteria: safeJsonParse(row.success_criteria_json, undefined),\n failure_reason: row.failure_reason,\n metadata: safeJsonParse(row.metadata_json, undefined),\n client_request_id: row.client_request_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n version: row.version,\n };\n }\n}\n","import Database from 'better-sqlite3';\nimport { Belief, BeliefId, BeliefCategory } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { ValidationError, NotFoundError } from '../utils/errors.js';\nimport { logReasoningEvent } from './events.js';\n\nexport class BeliefEngine {\n static updateBelief(\n db: Database.Database,\n params: {\n project: string;\n session_id?: string;\n category: BeliefCategory;\n subject: string;\n predicate: string;\n object: unknown;\n confidence?: number;\n source?: 'observation' | 'deduction' | 'agent_communication' | 'a_priori';\n source_id?: string;\n expires_at?: string;\n decay_rate?: number;\n client_request_id?: string;\n metadata?: Record<string, unknown>;\n }\n ): Belief {\n if (!params.subject || !params.predicate) {\n throw new ValidationError('Belief subject and predicate are required.');\n }\n\n if (params.client_request_id) {\n const existing = db\n .prepare('SELECT * FROM beliefs WHERE project = ? AND client_request_id = ?')\n .get(params.project, params.client_request_id) as any;\n if (existing) {\n return this.mapRowToBelief(existing);\n }\n }\n\n // Check if belief with same category, subject, predicate exists\n const existing = db\n .prepare(\n 'SELECT * FROM beliefs WHERE project = ? AND category = ? AND subject = ? AND predicate = ?'\n )\n .get(params.project, params.category, params.subject, params.predicate) as any;\n\n const now = getCurrentIsoString();\n const confidence =\n params.confidence !== undefined ? Math.max(0, Math.min(1, params.confidence)) : 1.0;\n const decay_rate =\n params.decay_rate !== undefined\n ? params.decay_rate\n : params.category === 'spatial'\n ? 0.2\n : 0.05;\n\n if (existing) {\n db.prepare(\n `\n UPDATE beliefs SET\n object_json = ?, confidence = ?, source = ?, source_id = ?,\n expires_at = ?, decay_rate = ?, last_decayed_at = ?, metadata_json = ?, updated_at = ?\n WHERE id = ?\n `\n ).run(\n safeJsonStringify(params.object),\n confidence,\n params.source || existing.source,\n params.source_id ?? existing.source_id,\n params.expires_at ?? existing.expires_at,\n decay_rate,\n now,\n params.metadata ? safeJsonStringify(params.metadata) : existing.metadata_json,\n now,\n existing.id\n );\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: existing.id,\n entity_type: 'belief',\n action: 'update',\n details: { subject: params.subject, predicate: params.predicate, confidence },\n });\n\n return this.getBelief(db, { project: params.project, id: existing.id });\n }\n\n const id = generateId() as BeliefId;\n db.prepare(\n `\n INSERT INTO beliefs (\n id, project, session_id, category, subject, predicate, object_json,\n confidence, source, source_id, expires_at, decay_rate, last_decayed_at,\n client_request_id, metadata_json, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n `\n ).run(\n id,\n params.project,\n params.session_id ?? null,\n params.category,\n params.subject,\n params.predicate,\n safeJsonStringify(params.object),\n confidence,\n params.source || 'observation',\n params.source_id ?? null,\n params.expires_at ?? null,\n decay_rate,\n now,\n params.client_request_id ?? null,\n params.metadata ? safeJsonStringify(params.metadata) : null,\n now,\n now\n );\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'belief',\n action: 'assert',\n details: { subject: params.subject, predicate: params.predicate, confidence },\n });\n\n return {\n id,\n project: params.project,\n session_id: params.session_id,\n category: params.category,\n subject: params.subject,\n predicate: params.predicate,\n object: params.object,\n confidence,\n source: params.source || 'observation',\n source_id: params.source_id,\n expires_at: params.expires_at,\n decay_rate,\n last_decayed_at: now,\n client_request_id: params.client_request_id,\n metadata: params.metadata,\n created_at: now,\n updated_at: now,\n };\n }\n\n static queryBeliefs(\n db: Database.Database,\n params: {\n project: string;\n category?: BeliefCategory;\n subject?: string;\n predicate?: string;\n min_confidence?: number;\n limit?: number;\n }\n ): Belief[] {\n this.decayBeliefs(db, params.project);\n\n let sql = 'SELECT * FROM beliefs WHERE project = ?';\n const sqlParams: any[] = [params.project];\n\n if (params.category) {\n sql += ' AND category = ?';\n sqlParams.push(params.category);\n }\n if (params.subject) {\n sql += ' AND subject LIKE ?';\n sqlParams.push(`%${params.subject}%`);\n }\n if (params.predicate) {\n sql += ' AND predicate = ?';\n sqlParams.push(params.predicate);\n }\n if (params.min_confidence !== undefined) {\n sql += ' AND confidence >= ?';\n sqlParams.push(params.min_confidence);\n }\n\n sql += ' ORDER BY confidence DESC, updated_at DESC LIMIT ?';\n sqlParams.push(params.limit || 50);\n\n const rows = db.prepare(sql).all(...sqlParams) as any[];\n return rows.map((r) => this.mapRowToBelief(r));\n }\n\n static decayBeliefs(db: Database.Database, project: string): void {\n const now = Date.now();\n const rows = db\n .prepare('SELECT id, confidence, decay_rate, last_decayed_at FROM beliefs WHERE project = ?')\n .all(project) as any[];\n\n db.transaction(() => {\n const updateStmt = db.prepare(\n 'UPDATE beliefs SET confidence = ?, last_decayed_at = ? WHERE id = ?'\n );\n for (const row of rows) {\n if (!row.last_decayed_at) continue;\n const elapsedHours = (now - new Date(row.last_decayed_at).getTime()) / (1000 * 60 * 60);\n if (elapsedHours > 0.01) {\n // Exponential decay: C(t) = C0 * e^(-lambda * t)\n const newConf = Math.max(0.01, row.confidence * Math.exp(-row.decay_rate * elapsedHours));\n updateStmt.run(newConf, new Date(now).toISOString(), row.id);\n }\n }\n })();\n }\n\n static expireBeliefs(db: Database.Database, project: string): number {\n const now = getCurrentIsoString();\n const res = db\n .prepare(\n 'DELETE FROM beliefs WHERE project = ? AND expires_at IS NOT NULL AND expires_at < ?'\n )\n .run(project, now);\n return res.changes;\n }\n\n static getBelief(db: Database.Database, params: { project: string; id: string }): Belief {\n const row = db\n .prepare('SELECT * FROM beliefs WHERE project = ? AND id = ?')\n .get(params.project, params.id) as any;\n if (!row) throw new NotFoundError(`Belief ${params.id} not found.`);\n return this.mapRowToBelief(row);\n }\n\n private static mapRowToBelief(row: any): Belief {\n return {\n id: row.id as BeliefId,\n project: row.project,\n session_id: row.session_id,\n category: row.category as BeliefCategory,\n subject: row.subject,\n predicate: row.predicate,\n object: safeJsonParse(row.object_json, row.object_json),\n confidence: row.confidence,\n source: row.source,\n source_id: row.source_id,\n expires_at: row.expires_at,\n decay_rate: row.decay_rate,\n last_decayed_at: row.last_decayed_at,\n client_request_id: row.client_request_id,\n metadata: safeJsonParse(row.metadata_json, undefined),\n created_at: row.created_at,\n updated_at: row.updated_at,\n };\n }\n}\n","import Database from 'better-sqlite3';\nimport { Intention, IntentionId, IntentionStatus, GoalId, TraceId } from '../schema/types.js';\nimport { generateId } from '../utils/id.js';\nimport { getCurrentIsoString } from '../utils/time.js';\nimport { safeJsonParse, safeJsonStringify } from '../utils/json-validator.js';\nimport { ValidationError, NotFoundError } from '../utils/errors.js';\nimport { logReasoningEvent } from './events.js';\n\nexport class IntentionEngine {\n static createIntention(\n db: Database.Database,\n params: {\n project: string;\n goal_id: string;\n trace_id?: string;\n session_id?: string;\n behavior_name: string;\n parameters?: Record<string, unknown>;\n priority?: number;\n deadline_at?: string;\n abort_conditions?: Array<{\n condition_type: string;\n condition_params: Record<string, unknown>;\n }>;\n client_request_id?: string;\n }\n ): Intention {\n if (!params.goal_id || !params.behavior_name) {\n throw new ValidationError('goal_id and behavior_name are required.');\n }\n\n if (params.client_request_id) {\n const existing = db\n .prepare('SELECT * FROM intentions WHERE project = ? AND client_request_id = ?')\n .get(params.project, params.client_request_id) as any;\n if (existing) {\n return this.mapRowToIntention(existing);\n }\n }\n\n const id = generateId() as IntentionId;\n const now = getCurrentIsoString();\n const priority = params.priority !== undefined ? params.priority : 0.5;\n\n db.prepare(\n `\n INSERT INTO intentions (\n id, project, goal_id, trace_id, session_id, behavior_name,\n parameters_json, priority, status, deadline_at, abort_conditions_json,\n client_request_id, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'pending', ?, ?, ?, ?, ?)\n `\n ).run(\n id,\n params.project,\n params.goal_id,\n params.trace_id ?? null,\n params.session_id ?? null,\n params.behavior_name,\n safeJsonStringify(params.parameters || {}),\n priority,\n params.deadline_at ?? null,\n params.abort_conditions ? safeJsonStringify(params.abort_conditions) : null,\n params.client_request_id ?? null,\n now,\n now\n );\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: id,\n entity_type: 'intention',\n action: 'create',\n details: { goal_id: params.goal_id, behavior_name: params.behavior_name },\n });\n\n return {\n id,\n project: params.project,\n goal_id: params.goal_id as GoalId,\n trace_id: (params.trace_id as TraceId) || undefined,\n session_id: params.session_id,\n behavior_name: params.behavior_name,\n parameters: params.parameters || {},\n priority,\n status: 'pending',\n deadline_at: params.deadline_at,\n abort_conditions: params.abort_conditions,\n client_request_id: params.client_request_id,\n created_at: now,\n updated_at: now,\n };\n }\n\n static dispatchIntention(\n db: Database.Database,\n params: { project: string; id: string }\n ): Intention {\n const intention = this.getIntention(db, params);\n const now = getCurrentIsoString();\n\n db.prepare('UPDATE intentions SET status = ?, updated_at = ? WHERE id = ?').run(\n 'dispatched',\n now,\n intention.id\n );\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: intention.id,\n entity_type: 'intention',\n action: 'dispatch',\n details: { behavior_name: intention.behavior_name },\n });\n\n return { ...intention, status: 'dispatched', updated_at: now };\n }\n\n static resolveIntention(\n db: Database.Database,\n params: {\n project: string;\n id: string;\n status: 'completed' | 'failed' | 'aborted' | 'interrupted';\n result?: Record<string, unknown>;\n }\n ): Intention {\n const intention = this.getIntention(db, params);\n const now = getCurrentIsoString();\n\n db.prepare(\n 'UPDATE intentions SET status = ?, result_json = ?, updated_at = ? WHERE id = ?'\n ).run(params.status, safeJsonStringify(params.result || {}), now, intention.id);\n\n logReasoningEvent(db, {\n project: params.project,\n entity_id: intention.id,\n entity_type: 'intention',\n action: 'resolve',\n details: { status: params.status, result: params.result },\n });\n\n return { ...intention, status: params.status, result: params.result, updated_at: now };\n }\n\n static getIntention(db: Database.Database, params: { project: string; id: string }): Intention {\n const row = db\n .prepare('SELECT * FROM intentions WHERE project = ? AND id = ?')\n .get(params.project, params.id) as any;\n if (!row) throw new NotFoundError(`Intention ${params.id} not found.`);\n return this.mapRowToIntention(row);\n }\n\n static listIntentions(\n db: Database.Database,\n params: { project: string; status?: IntentionStatus; goal_id?: string; limit?: number }\n ): Intention[] {\n let sql = 'SELECT * FROM intentions WHERE project = ?';\n const sqlParams: any[] = [params.project];\n\n if (params.status) {\n sql += ' AND status = ?';\n sqlParams.push(params.status);\n }\n if (params.goal_id) {\n sql += ' AND goal_id = ?';\n sqlParams.push(params.goal_id);\n }\n\n sql += ' ORDER BY priority DESC, created_at DESC LIMIT ?';\n sqlParams.push(params.limit || 50);\n\n const rows = db.prepare(sql).all(...sqlParams) as any[];\n return rows.map((r) => this.mapRowToIntention(r));\n }\n\n private static mapRowToIntention(row: any): Intention {\n return {\n id: row.id as IntentionId,\n project: row.project,\n goal_id: row.goal_id as GoalId,\n trace_id: row.trace_id as TraceId | undefined,\n session_id: row.session_id,\n behavior_name: row.behavior_name,\n parameters: safeJsonParse(row.parameters_json, {}),\n priority: row.priority,\n status: row.status as IntentionStatus,\n deadline_at: row.deadline_at,\n abort_conditions: safeJsonParse(row.abort_conditions_json, undefined),\n result: safeJsonParse(row.result_json, undefined),\n client_request_id: row.client_request_id,\n created_at: row.created_at,\n updated_at: row.updated_at,\n };\n }\n}\n","declare const __APP_VERSION__: string | undefined;\n\nexport function getVersion(): string {\n if (typeof __APP_VERSION__ !== 'undefined') {\n return __APP_VERSION__;\n }\n return '0.1.1';\n}\n"],"mappings":"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","names":["existing"]}
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node