@stackmemoryai/stackmemory 0.1.0 → 0.2.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.
Files changed (77) hide show
  1. package/dist/scripts/initialize.js +15 -15
  2. package/dist/scripts/initialize.js.map +1 -1
  3. package/dist/scripts/status.js +21 -11
  4. package/dist/scripts/status.js.map +1 -1
  5. package/dist/src/beads/beads-task-store.d.ts +117 -0
  6. package/dist/src/beads/beads-task-store.d.ts.map +1 -0
  7. package/dist/src/beads/beads-task-store.js +318 -0
  8. package/dist/src/beads/beads-task-store.js.map +1 -0
  9. package/dist/src/beads/task-aware-context.d.ts +103 -0
  10. package/dist/src/beads/task-aware-context.d.ts.map +1 -0
  11. package/dist/src/beads/task-aware-context.js +395 -0
  12. package/dist/src/beads/task-aware-context.js.map +1 -0
  13. package/dist/src/beads-task-store.d.ts +117 -0
  14. package/dist/src/beads-task-store.d.ts.map +1 -0
  15. package/dist/src/beads-task-store.js +318 -0
  16. package/dist/src/beads-task-store.js.map +1 -0
  17. package/dist/src/cli/cli.d.ts +7 -0
  18. package/dist/src/cli/cli.d.ts.map +1 -0
  19. package/dist/src/cli/cli.js +471 -0
  20. package/dist/src/cli/cli.js.map +1 -0
  21. package/dist/src/core/error-handler.d.ts +46 -0
  22. package/dist/src/core/error-handler.d.ts.map +1 -0
  23. package/dist/src/core/error-handler.js +212 -0
  24. package/dist/src/core/error-handler.js.map +1 -0
  25. package/dist/src/core/frame-manager.d.ts +106 -0
  26. package/dist/src/core/frame-manager.d.ts.map +1 -0
  27. package/dist/src/core/frame-manager.js +387 -0
  28. package/dist/src/core/frame-manager.js.map +1 -0
  29. package/dist/src/core/logger.d.ts +24 -0
  30. package/dist/src/core/logger.d.ts.map +1 -0
  31. package/dist/src/core/logger.js +121 -0
  32. package/dist/src/core/logger.js.map +1 -0
  33. package/dist/src/core/logger.test.d.ts +2 -0
  34. package/dist/src/core/logger.test.d.ts.map +1 -0
  35. package/dist/src/core/logger.test.js +31 -0
  36. package/dist/src/core/logger.test.js.map +1 -0
  37. package/dist/src/index.d.ts +4 -4
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +4 -4
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/integrations/linear-auth.d.ts +99 -0
  42. package/dist/src/integrations/linear-auth.d.ts.map +1 -0
  43. package/dist/src/integrations/linear-auth.js +319 -0
  44. package/dist/src/integrations/linear-auth.js.map +1 -0
  45. package/dist/src/integrations/linear-auto-sync.d.ts +77 -0
  46. package/dist/src/integrations/linear-auto-sync.d.ts.map +1 -0
  47. package/dist/src/integrations/linear-auto-sync.js +268 -0
  48. package/dist/src/integrations/linear-auto-sync.js.map +1 -0
  49. package/dist/src/integrations/linear-client.d.ts +86 -0
  50. package/dist/src/integrations/linear-client.d.ts.map +1 -0
  51. package/dist/src/integrations/linear-client.js +275 -0
  52. package/dist/src/integrations/linear-client.js.map +1 -0
  53. package/dist/src/integrations/linear-config.d.ts +51 -0
  54. package/dist/src/integrations/linear-config.d.ts.map +1 -0
  55. package/dist/src/integrations/linear-config.js +103 -0
  56. package/dist/src/integrations/linear-config.js.map +1 -0
  57. package/dist/src/integrations/linear-sync.d.ts +95 -0
  58. package/dist/src/integrations/linear-sync.d.ts.map +1 -0
  59. package/dist/src/integrations/linear-sync.js +340 -0
  60. package/dist/src/integrations/linear-sync.js.map +1 -0
  61. package/dist/src/mcp/mcp-server.d.ts +38 -0
  62. package/dist/src/mcp/mcp-server.d.ts.map +1 -0
  63. package/dist/src/mcp/mcp-server.js +812 -0
  64. package/dist/src/mcp/mcp-server.js.map +1 -0
  65. package/dist/src/pebbles/pebbles-task-store.d.ts +117 -0
  66. package/dist/src/pebbles/pebbles-task-store.d.ts.map +1 -0
  67. package/dist/src/pebbles/pebbles-task-store.js +335 -0
  68. package/dist/src/pebbles/pebbles-task-store.js.map +1 -0
  69. package/dist/src/pebbles/task-aware-context.d.ts +103 -0
  70. package/dist/src/pebbles/task-aware-context.d.ts.map +1 -0
  71. package/dist/src/pebbles/task-aware-context.js +412 -0
  72. package/dist/src/pebbles/task-aware-context.js.map +1 -0
  73. package/dist/src/task-aware-context.d.ts +103 -0
  74. package/dist/src/task-aware-context.d.ts.map +1 -0
  75. package/dist/src/task-aware-context.js +395 -0
  76. package/dist/src/task-aware-context.js.map +1 -0
  77. package/package.json +41 -9
@@ -0,0 +1,412 @@
1
+ /**
2
+ * Task-Aware Context Assembly
3
+ * Intelligently selects context based on active tasks and their relationships
4
+ */
5
+ import { logger } from '../core/logger.js';
6
+ export class TaskAwareContextManager {
7
+ db;
8
+ frameManager;
9
+ projectId;
10
+ constructor(db, frameManager, projectId) {
11
+ this.db = db;
12
+ this.frameManager = frameManager;
13
+ this.projectId = projectId;
14
+ this.initializeTaskSchema();
15
+ }
16
+ initializeTaskSchema() {
17
+ this.db.exec(`
18
+ CREATE TABLE IF NOT EXISTS tasks (
19
+ task_id TEXT PRIMARY KEY,
20
+ frame_id TEXT NOT NULL,
21
+ anchor_id TEXT,
22
+ name TEXT NOT NULL,
23
+ description TEXT,
24
+ status TEXT DEFAULT 'pending',
25
+ priority TEXT DEFAULT 'medium',
26
+ parent_task_id TEXT,
27
+ depends_on TEXT DEFAULT '[]',
28
+ assigned_to TEXT,
29
+ estimated_effort INTEGER,
30
+ actual_effort INTEGER,
31
+ created_at INTEGER DEFAULT (unixepoch()),
32
+ started_at INTEGER,
33
+ completed_at INTEGER,
34
+ blocked_reason TEXT,
35
+ context_tags TEXT DEFAULT '[]',
36
+ metadata TEXT DEFAULT '{}',
37
+ FOREIGN KEY(frame_id) REFERENCES frames(frame_id),
38
+ FOREIGN KEY(anchor_id) REFERENCES anchors(anchor_id),
39
+ FOREIGN KEY(parent_task_id) REFERENCES tasks(task_id)
40
+ );
41
+
42
+ CREATE TABLE IF NOT EXISTS task_dependencies (
43
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
44
+ task_id TEXT NOT NULL,
45
+ depends_on_task_id TEXT NOT NULL,
46
+ dependency_type TEXT DEFAULT 'blocks',
47
+ created_at INTEGER DEFAULT (unixepoch()),
48
+ FOREIGN KEY(task_id) REFERENCES tasks(task_id),
49
+ FOREIGN KEY(depends_on_task_id) REFERENCES tasks(task_id)
50
+ );
51
+
52
+ CREATE TABLE IF NOT EXISTS context_access_log (
53
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
54
+ request_id TEXT NOT NULL,
55
+ task_ids TEXT, -- JSON array of relevant task IDs
56
+ context_items TEXT, -- JSON array of included context items
57
+ relevance_scores TEXT, -- JSON object of item -> score mappings
58
+ total_tokens INTEGER,
59
+ query_hash TEXT,
60
+ timestamp INTEGER DEFAULT (unixepoch())
61
+ );
62
+
63
+ CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
64
+ CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority);
65
+ CREATE INDEX IF NOT EXISTS idx_tasks_frame ON tasks(frame_id);
66
+ CREATE INDEX IF NOT EXISTS idx_task_deps ON task_dependencies(task_id);
67
+ `);
68
+ }
69
+ /**
70
+ * Create task from TODO anchor or standalone
71
+ */
72
+ createTask(options) {
73
+ const taskId = `task_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
74
+ const frameId = options.frameId || this.frameManager.getCurrentFrameId();
75
+ if (!frameId) {
76
+ throw new Error('No active frame for task creation');
77
+ }
78
+ const task = {
79
+ task_id: taskId,
80
+ frame_id: frameId,
81
+ anchor_id: options.anchorId,
82
+ name: options.name,
83
+ description: options.description,
84
+ status: 'pending',
85
+ priority: options.priority || 'medium',
86
+ parent_task_id: options.parentTaskId,
87
+ depends_on: options.dependsOn || [],
88
+ estimated_effort: options.estimatedEffort,
89
+ created_at: Math.floor(Date.now() / 1000),
90
+ context_tags: options.contextTags || [],
91
+ metadata: options.metadata || {},
92
+ };
93
+ // Insert task
94
+ this.db
95
+ .prepare(`
96
+ INSERT INTO tasks (
97
+ task_id, frame_id, anchor_id, name, description, status, priority,
98
+ parent_task_id, depends_on, estimated_effort, created_at, context_tags, metadata
99
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
100
+ `)
101
+ .run(task.task_id, task.frame_id, task.anchor_id, task.name, task.description, task.status, task.priority, task.parent_task_id, JSON.stringify(task.depends_on), task.estimated_effort, task.created_at, JSON.stringify(task.context_tags), JSON.stringify(task.metadata));
102
+ // Create dependency relationships
103
+ if (task.depends_on.length > 0) {
104
+ const dependencyStmt = this.db.prepare(`
105
+ INSERT INTO task_dependencies (task_id, depends_on_task_id) VALUES (?, ?)
106
+ `);
107
+ task.depends_on.forEach((depTaskId) => {
108
+ dependencyStmt.run(taskId, depTaskId);
109
+ });
110
+ }
111
+ // Log event
112
+ this.frameManager.addEvent('decision', {
113
+ action: 'create_task',
114
+ task_id: taskId,
115
+ name: task.name,
116
+ priority: task.priority,
117
+ });
118
+ logger.info('Created task', { taskId, name: task.name, frameId });
119
+ return taskId;
120
+ }
121
+ /**
122
+ * Update task status with automatic time tracking
123
+ */
124
+ updateTaskStatus(taskId, newStatus, reason) {
125
+ const task = this.getTask(taskId);
126
+ if (!task)
127
+ throw new Error(`Task not found: ${taskId}`);
128
+ const now = Math.floor(Date.now() / 1000);
129
+ const updates = { status: newStatus };
130
+ // Automatic time tracking
131
+ if (newStatus === 'in_progress' && task.status === 'pending') {
132
+ updates.started_at = now;
133
+ }
134
+ else if (newStatus === 'completed' && task.status === 'in_progress') {
135
+ updates.completed_at = now;
136
+ if (task.started_at) {
137
+ updates.actual_effort = now - task.started_at;
138
+ }
139
+ }
140
+ else if (newStatus === 'blocked') {
141
+ updates.blocked_reason = reason || 'No reason provided';
142
+ }
143
+ // Build dynamic update query
144
+ const setClause = Object.keys(updates)
145
+ .map((key) => `${key} = ?`)
146
+ .join(', ');
147
+ const values = Object.values(updates);
148
+ this.db
149
+ .prepare(`UPDATE tasks SET ${setClause} WHERE task_id = ?`)
150
+ .run(...values, taskId);
151
+ // Log status change
152
+ this.frameManager.addEvent('observation', {
153
+ action: 'task_status_change',
154
+ task_id: taskId,
155
+ old_status: task.status,
156
+ new_status: newStatus,
157
+ reason,
158
+ });
159
+ logger.info('Updated task status', {
160
+ taskId,
161
+ oldStatus: task.status,
162
+ newStatus,
163
+ });
164
+ }
165
+ /**
166
+ * Assemble context optimized for active tasks and query
167
+ */
168
+ assembleTaskAwareContext(request) {
169
+ const startTime = Date.now();
170
+ // 1. Get active and relevant tasks
171
+ const activeTasks = this.getActiveTasks(request.taskFocus);
172
+ const blockedTasks = this.getBlockedTasks();
173
+ // 2. Score and select relevant context
174
+ const contextItems = this.selectRelevantContext(activeTasks, request);
175
+ // 3. Assemble final context with smart ordering
176
+ const { context, totalTokens, relevanceScores } = this.buildContextString(contextItems, activeTasks, request.maxTokens || 4000);
177
+ // 4. Log context access for learning
178
+ this.logContextAccess({
179
+ taskIds: activeTasks.map((t) => t.task_id),
180
+ contextItems: contextItems.map((item) => item.id),
181
+ relevanceScores,
182
+ totalTokens,
183
+ query: request.query || '',
184
+ });
185
+ const metadata = {
186
+ includedTasks: activeTasks,
187
+ contextSources: contextItems.map((item) => `${item.type}:${item.id}`),
188
+ totalTokens,
189
+ relevanceScores,
190
+ };
191
+ logger.info('Assembled task-aware context', {
192
+ activeTasks: activeTasks.length,
193
+ blockedTasks: blockedTasks.length,
194
+ contextItems: contextItems.length,
195
+ totalTokens,
196
+ assemblyTimeMs: Date.now() - startTime,
197
+ });
198
+ return { context, metadata };
199
+ }
200
+ /**
201
+ * Get tasks that are currently active or should be in context
202
+ */
203
+ getActiveTasks(taskFocus) {
204
+ let query = `
205
+ SELECT * FROM tasks
206
+ WHERE status IN ('in_progress', 'pending')
207
+ `;
208
+ let params = [];
209
+ if (taskFocus && taskFocus.length > 0) {
210
+ query += ` AND task_id IN (${taskFocus.map(() => '?').join(',')})`;
211
+ params = taskFocus;
212
+ }
213
+ query += ` ORDER BY priority DESC, created_at ASC`;
214
+ const rows = this.db.prepare(query).all(...params);
215
+ return this.hydrateTasks(rows);
216
+ }
217
+ getBlockedTasks() {
218
+ const rows = this.db
219
+ .prepare(`
220
+ SELECT * FROM tasks WHERE status = 'blocked' ORDER BY priority DESC
221
+ `)
222
+ .all();
223
+ return this.hydrateTasks(rows);
224
+ }
225
+ /**
226
+ * Select context items relevant to active tasks
227
+ */
228
+ selectRelevantContext(activeTasks, request) {
229
+ const contextItems = [];
230
+ // Get frames for active tasks
231
+ const frameIds = [...new Set(activeTasks.map((t) => t.frame_id))];
232
+ frameIds.forEach((frameId) => {
233
+ const frame = this.frameManager.getFrame(frameId);
234
+ if (frame) {
235
+ const score = this.calculateFrameRelevance(frame, activeTasks, request.query);
236
+ contextItems.push({
237
+ id: frameId,
238
+ type: 'frame',
239
+ content: `Frame: ${frame.name} (${frame.type})`,
240
+ relevanceScore: score,
241
+ tokenEstimate: frame.name.length + 20,
242
+ });
243
+ }
244
+ });
245
+ // Get relevant anchors
246
+ const anchors = this.getRelevantAnchors(frameIds, request);
247
+ anchors.forEach((anchor) => {
248
+ const score = this.calculateAnchorRelevance(anchor, activeTasks, request.query);
249
+ contextItems.push({
250
+ id: anchor.anchor_id,
251
+ type: 'anchor',
252
+ content: `${anchor.type}: ${anchor.text}`,
253
+ relevanceScore: score,
254
+ tokenEstimate: anchor.text.length + 10,
255
+ });
256
+ });
257
+ // Get recent events from active frames
258
+ if (request.includeHistory) {
259
+ frameIds.forEach((frameId) => {
260
+ const events = this.frameManager.getFrameEvents(frameId, 5);
261
+ events.forEach((event) => {
262
+ const score = this.calculateEventRelevance(event, activeTasks, request.query);
263
+ if (score > 0.3) {
264
+ contextItems.push({
265
+ id: event.event_id,
266
+ type: 'event',
267
+ content: `Event: ${event.event_type}`,
268
+ relevanceScore: score,
269
+ tokenEstimate: 30,
270
+ });
271
+ }
272
+ });
273
+ });
274
+ }
275
+ // Sort by relevance score
276
+ return contextItems.sort((a, b) => b.relevanceScore - a.relevanceScore);
277
+ }
278
+ buildContextString(contextItems, activeTasks, maxTokens) {
279
+ let context = '# Active Task Context\n\n';
280
+ let totalTokens = 20; // Header estimate
281
+ const relevanceScores = {};
282
+ // Always include active tasks summary
283
+ context += '## Current Tasks\n';
284
+ activeTasks.forEach((task) => {
285
+ const line = `- [${task.status.toUpperCase()}] ${task.name} (${task.priority})\n`;
286
+ context += line;
287
+ totalTokens += line.length / 4; // Rough token estimate
288
+ relevanceScores[task.task_id] = 1.0;
289
+ });
290
+ context += '\n';
291
+ // Add context items within token budget
292
+ context += '## Relevant Context\n';
293
+ for (const item of contextItems) {
294
+ if (totalTokens + item.tokenEstimate > maxTokens)
295
+ break;
296
+ context += `${item.content}\n`;
297
+ totalTokens += item.tokenEstimate;
298
+ relevanceScores[item.id] = item.relevanceScore;
299
+ }
300
+ return { context, totalTokens, relevanceScores };
301
+ }
302
+ // Relevance scoring methods
303
+ calculateFrameRelevance(frame, activeTasks, query) {
304
+ let score = 0.5; // Base relevance
305
+ // Higher score if frame contains active tasks
306
+ if (activeTasks.some((t) => t.frame_id === frame.frame_id)) {
307
+ score += 0.4;
308
+ }
309
+ // Query matching
310
+ if (query) {
311
+ const queryLower = query.toLowerCase();
312
+ if (frame.name.toLowerCase().includes(queryLower)) {
313
+ score += 0.3;
314
+ }
315
+ }
316
+ // Recent frames get boost
317
+ const ageHours = (Date.now() / 1000 - frame.created_at) / 3600;
318
+ if (ageHours < 24)
319
+ score += 0.2;
320
+ return Math.min(score, 1.0);
321
+ }
322
+ calculateAnchorRelevance(anchor, activeTasks, query) {
323
+ let score = 0.3; // Base relevance
324
+ // Task-related anchors get priority
325
+ if (anchor.type === 'TODO')
326
+ score += 0.4;
327
+ if (anchor.type === 'DECISION')
328
+ score += 0.3;
329
+ if (anchor.type === 'CONSTRAINT')
330
+ score += 0.2;
331
+ // Priority-based boost
332
+ score += (anchor.priority / 10) * 0.2;
333
+ // Query matching
334
+ if (query) {
335
+ const queryLower = query.toLowerCase();
336
+ if (anchor.text.toLowerCase().includes(queryLower)) {
337
+ score += 0.3;
338
+ }
339
+ }
340
+ return Math.min(score, 1.0);
341
+ }
342
+ calculateEventRelevance(event, _activeTasks, _query) {
343
+ let score = 0.1; // Base relevance
344
+ // Event type relevance
345
+ if (event.event_type === 'decision')
346
+ score += 0.4;
347
+ if (event.event_type === 'tool_call')
348
+ score += 0.3;
349
+ if (event.event_type === 'observation')
350
+ score += 0.2;
351
+ // Recent events get boost
352
+ const ageHours = (Date.now() / 1000 - event.ts) / 3600;
353
+ if (ageHours < 1)
354
+ score += 0.3;
355
+ else if (ageHours < 6)
356
+ score += 0.2;
357
+ return Math.min(score, 1.0);
358
+ }
359
+ // Helper methods
360
+ getTask(taskId) {
361
+ const row = this.db
362
+ .prepare(`SELECT * FROM tasks WHERE task_id = ?`)
363
+ .get(taskId);
364
+ return row ? this.hydrateTask(row) : undefined;
365
+ }
366
+ getRelevantAnchors(frameIds, _request) {
367
+ if (frameIds.length === 0)
368
+ return [];
369
+ const placeholders = frameIds.map(() => '?').join(',');
370
+ const rows = this.db
371
+ .prepare(`
372
+ SELECT * FROM anchors
373
+ WHERE frame_id IN (${placeholders})
374
+ ORDER BY priority DESC, created_at DESC
375
+ LIMIT 20
376
+ `)
377
+ .all(...frameIds);
378
+ return rows.map((row) => ({
379
+ ...row,
380
+ metadata: JSON.parse(row.metadata || '{}'),
381
+ }));
382
+ }
383
+ hydrateTasks(rows) {
384
+ return rows.map(this.hydrateTask);
385
+ }
386
+ hydrateTask = (row) => ({
387
+ ...row,
388
+ depends_on: JSON.parse(row.depends_on || '[]'),
389
+ context_tags: JSON.parse(row.context_tags || '[]'),
390
+ metadata: JSON.parse(row.metadata || '{}'),
391
+ });
392
+ logContextAccess(data) {
393
+ const requestId = `ctx_${Date.now()}_${Math.random().toString(36).substr(2, 6)}`;
394
+ this.db
395
+ .prepare(`
396
+ INSERT INTO context_access_log (
397
+ request_id, task_ids, context_items, relevance_scores, total_tokens, query_hash
398
+ ) VALUES (?, ?, ?, ?, ?, ?)
399
+ `)
400
+ .run(requestId, JSON.stringify(data.taskIds), JSON.stringify(data.contextItems), JSON.stringify(data.relevanceScores), data.totalTokens, this.hashString(data.query));
401
+ }
402
+ hashString(str) {
403
+ let hash = 0;
404
+ for (let i = 0; i < str.length; i++) {
405
+ const char = str.charCodeAt(i);
406
+ hash = (hash << 5) - hash + char;
407
+ hash = hash & hash; // Convert to 32-bit integer
408
+ }
409
+ return hash.toString(16);
410
+ }
411
+ }
412
+ //# sourceMappingURL=task-aware-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-aware-context.js","sourceRoot":"","sources":["../../../src/pebbles/task-aware-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Task-Aware Context Assembly
3
+ * Intelligently selects context based on active tasks and their relationships
4
+ */
5
+ import Database from 'better-sqlite3';
6
+ import { Frame, Anchor, Event, FrameManager } from './frame-manager.js';
7
+ export type TaskStatus = 'pending' | 'in_progress' | 'completed' | 'blocked' | 'cancelled';
8
+ export type TaskPriority = 'low' | 'medium' | 'high' | 'urgent';
9
+ export interface Task {
10
+ task_id: string;
11
+ frame_id: string;
12
+ anchor_id?: string;
13
+ name: string;
14
+ description?: string;
15
+ status: TaskStatus;
16
+ priority: TaskPriority;
17
+ parent_task_id?: string;
18
+ depends_on: string[];
19
+ assigned_to?: string;
20
+ estimated_effort?: number;
21
+ actual_effort?: number;
22
+ created_at: number;
23
+ started_at?: number;
24
+ completed_at?: number;
25
+ blocked_reason?: string;
26
+ context_tags: string[];
27
+ metadata: Record<string, any>;
28
+ }
29
+ export interface TaskContext {
30
+ activeTasks: Task[];
31
+ blockedTasks: Task[];
32
+ relatedContext: {
33
+ frames: Frame[];
34
+ anchors: Anchor[];
35
+ recentEvents: Event[];
36
+ };
37
+ contextScore: number;
38
+ }
39
+ export interface ContextRequest {
40
+ query?: string;
41
+ maxTokens?: number;
42
+ taskFocus?: string[];
43
+ includeHistory?: boolean;
44
+ priorityFilter?: TaskPriority[];
45
+ }
46
+ export declare class TaskAwareContextManager {
47
+ private db;
48
+ private frameManager;
49
+ private projectId;
50
+ constructor(db: Database.Database, frameManager: FrameManager, projectId: string);
51
+ private initializeTaskSchema;
52
+ /**
53
+ * Create task from TODO anchor or standalone
54
+ */
55
+ createTask(options: {
56
+ name: string;
57
+ description?: string;
58
+ priority?: TaskPriority;
59
+ frameId?: string;
60
+ anchorId?: string;
61
+ parentTaskId?: string;
62
+ dependsOn?: string[];
63
+ contextTags?: string[];
64
+ estimatedEffort?: number;
65
+ metadata?: Record<string, any>;
66
+ }): string;
67
+ /**
68
+ * Update task status with automatic time tracking
69
+ */
70
+ updateTaskStatus(taskId: string, newStatus: TaskStatus, reason?: string): void;
71
+ /**
72
+ * Assemble context optimized for active tasks and query
73
+ */
74
+ assembleTaskAwareContext(request: ContextRequest): {
75
+ context: string;
76
+ metadata: {
77
+ includedTasks: Task[];
78
+ contextSources: string[];
79
+ totalTokens: number;
80
+ relevanceScores: Record<string, number>;
81
+ };
82
+ };
83
+ /**
84
+ * Get tasks that are currently active or should be in context
85
+ */
86
+ private getActiveTasks;
87
+ private getBlockedTasks;
88
+ /**
89
+ * Select context items relevant to active tasks
90
+ */
91
+ private selectRelevantContext;
92
+ private buildContextString;
93
+ private calculateFrameRelevance;
94
+ private calculateAnchorRelevance;
95
+ private calculateEventRelevance;
96
+ private getTask;
97
+ private getRelevantAnchors;
98
+ private hydrateTasks;
99
+ private hydrateTask;
100
+ private logContextAccess;
101
+ private hashString;
102
+ }
103
+ //# sourceMappingURL=task-aware-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-aware-context.d.ts","sourceRoot":"","sources":["../../src/task-aware-context.ts"],"names":[],"mappings":"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"}