opentasks 0.0.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/cli.js +0 -0
  2. package/dist/graph/query.js +3 -3
  3. package/dist/graph/query.js.map +1 -1
  4. package/dist/providers/map-connector.d.ts +4 -0
  5. package/dist/providers/map-connector.d.ts.map +1 -1
  6. package/dist/providers/map-connector.js +48 -0
  7. package/dist/providers/map-connector.js.map +1 -1
  8. package/dist/storage/interface.d.ts +6 -0
  9. package/dist/storage/interface.d.ts.map +1 -1
  10. package/dist/storage/interface.js.map +1 -1
  11. package/dist/storage/sqlite.d.ts +1 -0
  12. package/dist/storage/sqlite.d.ts.map +1 -1
  13. package/dist/storage/sqlite.js +11 -0
  14. package/dist/storage/sqlite.js.map +1 -1
  15. package/package.json +2 -2
  16. package/dist/daemon/entire-linker.d.ts +0 -71
  17. package/dist/daemon/entire-linker.d.ts.map +0 -1
  18. package/dist/daemon/entire-linker.js +0 -466
  19. package/dist/daemon/entire-linker.js.map +0 -1
  20. package/dist/daemon/entire-watcher.d.ts +0 -66
  21. package/dist/daemon/entire-watcher.d.ts.map +0 -1
  22. package/dist/daemon/entire-watcher.js +0 -258
  23. package/dist/daemon/entire-watcher.js.map +0 -1
  24. package/dist/providers/entire.d.ts +0 -68
  25. package/dist/providers/entire.d.ts.map +0 -1
  26. package/dist/providers/entire.js +0 -461
  27. package/dist/providers/entire.js.map +0 -1
  28. package/dist/tracking/claude-task-reconstructor.d.ts +0 -41
  29. package/dist/tracking/claude-task-reconstructor.d.ts.map +0 -1
  30. package/dist/tracking/claude-task-reconstructor.js +0 -91
  31. package/dist/tracking/claude-task-reconstructor.js.map +0 -1
  32. package/dist/tracking/plan-mode-tracker.d.ts +0 -20
  33. package/dist/tracking/plan-mode-tracker.d.ts.map +0 -1
  34. package/dist/tracking/plan-mode-tracker.js +0 -35
  35. package/dist/tracking/plan-mode-tracker.js.map +0 -1
@@ -1,466 +0,0 @@
1
- /**
2
- * Entire Auto-Linker
3
- *
4
- * Correlation engine that automatically creates edges between OpenTasks
5
- * tasks and Entire sessions/checkpoints. Matches sessions to tasks via
6
- * claims, in-progress status, and branch association.
7
- */
8
- // ============================================================================
9
- // Confidence Ordering
10
- // ============================================================================
11
- const CONFIDENCE_ORDER = {
12
- high: 3,
13
- medium: 2,
14
- low: 1,
15
- };
16
- function meetsConfidenceThreshold(confidence, minimum) {
17
- return CONFIDENCE_ORDER[confidence] >= CONFIDENCE_ORDER[minimum];
18
- }
19
- // ============================================================================
20
- // Implementation
21
- // ============================================================================
22
- /**
23
- * Create an Entire auto-linker
24
- */
25
- export function createEntireAutoLinker(config) {
26
- const { store, flushManager, archiver, skillTrackerRegistry } = config;
27
- const minConfidence = config.minConfidence ?? 'medium';
28
- // Track which sessions have been linked to avoid duplicates
29
- const correlations = new Map();
30
- // Track created external nodes: URI → node ID mapping
31
- const createdNodes = new Map();
32
- /**
33
- * Find tasks correlated with a session
34
- */
35
- async function findCorrelatedTasks(session) {
36
- const matched = [];
37
- // Strategy 1: Claimed tasks (high confidence)
38
- try {
39
- const allIssues = await store.query.nodes({
40
- type: 'task',
41
- status: 'in_progress',
42
- archived: false,
43
- });
44
- for (const issue of allIssues) {
45
- const raw = issue;
46
- const claimedBy = raw.claimed_by;
47
- const lockUntil = raw.lock_until;
48
- if (claimedBy && (!lockUntil || new Date(lockUntil) > new Date())) {
49
- matched.push({
50
- nodeId: issue.id,
51
- uri: raw.uri,
52
- matchReason: 'claimed-task',
53
- confidence: 'high',
54
- });
55
- }
56
- }
57
- }
58
- catch {
59
- // Continue to next strategy
60
- }
61
- if (matched.length > 0)
62
- return matched;
63
- // Strategy 2: In-progress tasks on same branch (medium confidence)
64
- if (session.branch) {
65
- try {
66
- const allIssues = await store.query.nodes({
67
- type: 'task',
68
- status: 'in_progress',
69
- archived: false,
70
- });
71
- for (const issue of allIssues) {
72
- const raw = issue;
73
- if (raw.branch === session.branch) {
74
- matched.push({
75
- nodeId: issue.id,
76
- uri: raw.uri,
77
- matchReason: 'in-progress-branch',
78
- confidence: 'medium',
79
- });
80
- }
81
- }
82
- }
83
- catch {
84
- // Continue to next strategy
85
- }
86
- }
87
- if (matched.length > 0)
88
- return matched;
89
- // Strategy 3: Any in-progress task (low confidence)
90
- // Only if exactly one in-progress task exists (ambiguity guard)
91
- try {
92
- const allInProgress = await store.query.nodes({
93
- type: 'task',
94
- status: 'in_progress',
95
- archived: false,
96
- });
97
- if (allInProgress.length === 1) {
98
- const raw = allInProgress[0];
99
- matched.push({
100
- nodeId: allInProgress[0].id,
101
- uri: raw.uri,
102
- matchReason: 'in-progress-any',
103
- confidence: 'low',
104
- });
105
- }
106
- }
107
- catch {
108
- // No matches
109
- }
110
- return matched;
111
- }
112
- /**
113
- * Ensure an external node exists for an Entire session.
114
- * Returns the node's actual graph ID (not the URI).
115
- */
116
- async function ensureSessionNode(session) {
117
- const uri = `entire://session/${session.id}`;
118
- const cachedId = createdNodes.get(uri);
119
- if (cachedId)
120
- return cachedId;
121
- // Check if node already exists
122
- const existing = await store.query.nodes({
123
- type: 'external',
124
- search: uri,
125
- limit: 1,
126
- });
127
- if (existing.length > 0) {
128
- const nodeId = existing[0].id;
129
- createdNodes.set(uri, nodeId);
130
- return nodeId;
131
- }
132
- try {
133
- const node = await store.createNode({
134
- type: 'external',
135
- title: `Session: ${session.id}`,
136
- uri,
137
- source: 'entire',
138
- metadata: {
139
- entityType: 'session',
140
- agent: session.agent,
141
- phase: session.phase,
142
- baseCommit: session.baseCommit,
143
- branch: session.branch,
144
- startedAt: session.startedAt,
145
- },
146
- });
147
- const nodeId = node.id;
148
- createdNodes.set(uri, nodeId);
149
- flushManager.markDirty(nodeId);
150
- flushManager.schedule();
151
- return nodeId;
152
- }
153
- catch {
154
- // Node may already exist from a concurrent operation — re-query
155
- const retryExisting = await store.query.nodes({
156
- type: 'external',
157
- search: uri,
158
- limit: 1,
159
- });
160
- if (retryExisting.length > 0) {
161
- const nodeId = retryExisting[0].id;
162
- createdNodes.set(uri, nodeId);
163
- return nodeId;
164
- }
165
- // Fallback: use URI as ID (should not happen in practice)
166
- createdNodes.set(uri, uri);
167
- return uri;
168
- }
169
- }
170
- /**
171
- * Ensure an external node exists for an Entire checkpoint.
172
- * Returns the node's actual graph ID (not the URI).
173
- */
174
- async function ensureCheckpointNode(checkpointId, session) {
175
- const uri = `entire://checkpoint/${checkpointId}`;
176
- const cachedId = createdNodes.get(uri);
177
- if (cachedId)
178
- return cachedId;
179
- // Check if node already exists
180
- const existing = await store.query.nodes({
181
- type: 'external',
182
- search: uri,
183
- limit: 1,
184
- });
185
- if (existing.length > 0) {
186
- const nodeId = existing[0].id;
187
- createdNodes.set(uri, nodeId);
188
- return nodeId;
189
- }
190
- try {
191
- const node = await store.createNode({
192
- type: 'external',
193
- title: `Checkpoint: ${checkpointId}`,
194
- uri,
195
- source: 'entire',
196
- metadata: {
197
- entityType: 'checkpoint',
198
- sessionId: session.id,
199
- },
200
- });
201
- const nodeId = node.id;
202
- createdNodes.set(uri, nodeId);
203
- flushManager.markDirty(nodeId);
204
- flushManager.schedule();
205
- return nodeId;
206
- }
207
- catch {
208
- // Re-query in case of concurrent creation
209
- const retryExisting = await store.query.nodes({
210
- type: 'external',
211
- search: uri,
212
- limit: 1,
213
- });
214
- if (retryExisting.length > 0) {
215
- const nodeId = retryExisting[0].id;
216
- createdNodes.set(uri, nodeId);
217
- return nodeId;
218
- }
219
- createdNodes.set(uri, uri);
220
- return uri;
221
- }
222
- }
223
- /**
224
- * Create an edge if it doesn't already exist
225
- */
226
- async function createEdgeIfNotExists(fromId, toId, type, metadata) {
227
- // Check for existing edge
228
- try {
229
- const existingEdges = await store.query.edges({
230
- from_id: fromId,
231
- to_id: toId,
232
- type,
233
- });
234
- if (existingEdges.length > 0) {
235
- return existingEdges[0].id;
236
- }
237
- }
238
- catch {
239
- // Continue to create
240
- }
241
- try {
242
- const edge = await store.createEdge({
243
- from_id: fromId,
244
- to_id: toId,
245
- type,
246
- metadata: {
247
- ...metadata,
248
- _context: {
249
- source: 'entire-auto-linker',
250
- timestamp: new Date().toISOString(),
251
- ...metadata?._context,
252
- },
253
- },
254
- });
255
- flushManager.markDirty(fromId);
256
- flushManager.markDirty(toId);
257
- flushManager.schedule();
258
- return edge.id;
259
- }
260
- catch {
261
- return null;
262
- }
263
- }
264
- return {
265
- async handleSessionEvent(event) {
266
- const { type, sessionId, session } = event;
267
- switch (type) {
268
- case 'started': {
269
- // Create session node — returns the node's graph ID
270
- const sessionNodeId = await ensureSessionNode(session);
271
- // Correlate with tasks
272
- const tasks = await findCorrelatedTasks(session);
273
- const edgesCreated = [];
274
- const matchedForResult = [];
275
- for (const task of tasks) {
276
- if (!meetsConfidenceThreshold(task.confidence, minConfidence))
277
- continue;
278
- matchedForResult.push(task);
279
- const edgeId = await createEdgeIfNotExists(task.nodeId, sessionNodeId, 'worked-on', {
280
- _context: {
281
- correlation: task.matchReason,
282
- confidence: task.confidence,
283
- sessionAgent: session.agent,
284
- },
285
- });
286
- if (edgeId)
287
- edgesCreated.push(edgeId);
288
- }
289
- correlations.set(sessionId, {
290
- sessionId,
291
- matchedTasks: matchedForResult,
292
- edgesCreated,
293
- nodesCreated: [sessionNodeId],
294
- strategy: matchedForResult[0]?.matchReason ?? 'none',
295
- timestamp: new Date().toISOString(),
296
- });
297
- // Archive if configured
298
- if (archiver) {
299
- const sessionUri = `entire://session/${session.id}`;
300
- void archiver.onSessionEvent('started', sessionUri, store).catch(() => { });
301
- }
302
- break;
303
- }
304
- case 'checkpoint': {
305
- if (!event.checkpointId)
306
- break;
307
- // Ensure session and checkpoint nodes exist — returns graph IDs
308
- const sessionNodeId = await ensureSessionNode(session);
309
- const checkpointNodeId = await ensureCheckpointNode(event.checkpointId, session);
310
- const edgesCreated = [];
311
- // Create contains edge (session → checkpoint)
312
- const containsId = await createEdgeIfNotExists(sessionNodeId, checkpointNodeId, 'contains');
313
- if (containsId)
314
- edgesCreated.push(containsId);
315
- // Create implemented-by edges (tasks → checkpoint)
316
- const tasks = await findCorrelatedTasks(session);
317
- const matchedForResult = [];
318
- for (const task of tasks) {
319
- if (!meetsConfidenceThreshold(task.confidence, minConfidence))
320
- continue;
321
- matchedForResult.push(task);
322
- const edgeId = await createEdgeIfNotExists(task.nodeId, checkpointNodeId, 'implemented-by', {
323
- _context: {
324
- correlation: task.matchReason,
325
- confidence: task.confidence,
326
- checkpointId: event.checkpointId,
327
- },
328
- });
329
- if (edgeId)
330
- edgesCreated.push(edgeId);
331
- }
332
- // Update existing correlation record
333
- const existing = correlations.get(sessionId);
334
- if (existing) {
335
- existing.edgesCreated.push(...edgesCreated);
336
- existing.nodesCreated.push(checkpointNodeId);
337
- }
338
- // Archive checkpoint if configured
339
- if (archiver) {
340
- const sessionUri = `entire://session/${session.id}`;
341
- void archiver.onSessionEvent('checkpoint', sessionUri, store).catch(() => { });
342
- }
343
- break;
344
- }
345
- case 'ended': {
346
- // Update session node status if it exists
347
- try {
348
- const nodes = await store.query.nodes({
349
- type: 'external',
350
- search: `entire://session/${sessionId}`,
351
- limit: 1,
352
- });
353
- if (nodes.length > 0) {
354
- // Pull skill usage from the tracker registry (if available)
355
- const updateMetadata = {
356
- phase: 'ENDED',
357
- endedAt: session.endedAt,
358
- };
359
- if (skillTrackerRegistry) {
360
- // Finalize the tracker: remove it and get the final summary
361
- const skillSummary = skillTrackerRegistry.remove(sessionId);
362
- if (skillSummary && skillSummary.totalInvocations > 0) {
363
- // Build the compact skillsUsed structure for the session node
364
- const counts = {};
365
- const outcomes = {};
366
- for (const stat of skillSummary.stats) {
367
- counts[stat.skill] = stat.count;
368
- outcomes[stat.skill] = {
369
- success: stat.successCount,
370
- failure: stat.failureCount,
371
- };
372
- }
373
- updateMetadata.skillsUsed = {
374
- skills: skillSummary.skillsUsed,
375
- totalInvocations: skillSummary.totalInvocations,
376
- counts,
377
- outcomes,
378
- };
379
- }
380
- }
381
- await store.updateNode(nodes[0].id, {
382
- status: 'closed',
383
- metadata: updateMetadata,
384
- });
385
- flushManager.markDirty(nodes[0].id);
386
- flushManager.schedule();
387
- // Archive final session state if configured
388
- if (archiver) {
389
- const sessionUri = `entire://session/${sessionId}`;
390
- void archiver.onSessionEvent('ended', sessionUri, store).catch(() => { });
391
- }
392
- }
393
- }
394
- catch {
395
- // Best-effort update
396
- }
397
- break;
398
- }
399
- case 'updated': {
400
- // Update session node metadata if it exists
401
- try {
402
- const nodes = await store.query.nodes({
403
- type: 'external',
404
- search: `entire://session/${sessionId}`,
405
- limit: 1,
406
- });
407
- if (nodes.length > 0) {
408
- await store.updateNode(nodes[0].id, {
409
- metadata: {
410
- phase: session.phase,
411
- lastPromptAt: session.lastPromptAt,
412
- },
413
- });
414
- flushManager.markDirty(nodes[0].id);
415
- flushManager.schedule();
416
- }
417
- }
418
- catch {
419
- // Best-effort update
420
- }
421
- break;
422
- }
423
- case 'deleted': {
424
- // Preserve history — don't delete nodes or edges
425
- break;
426
- }
427
- }
428
- },
429
- async correlate(sessionId, session) {
430
- // Create session node
431
- const sessionNodeId = await ensureSessionNode(session);
432
- // Correlate with tasks
433
- const tasks = await findCorrelatedTasks(session);
434
- const edgesCreated = [];
435
- const matchedForResult = [];
436
- for (const task of tasks) {
437
- if (!meetsConfidenceThreshold(task.confidence, minConfidence))
438
- continue;
439
- matchedForResult.push(task);
440
- const edgeId = await createEdgeIfNotExists(task.nodeId, sessionNodeId, 'worked-on', {
441
- _context: {
442
- correlation: task.matchReason,
443
- confidence: task.confidence,
444
- sessionAgent: session.agent,
445
- },
446
- });
447
- if (edgeId)
448
- edgesCreated.push(edgeId);
449
- }
450
- const result = {
451
- sessionId,
452
- matchedTasks: matchedForResult,
453
- edgesCreated,
454
- nodesCreated: [sessionNodeId],
455
- strategy: matchedForResult[0]?.matchReason ?? 'none',
456
- timestamp: new Date().toISOString(),
457
- };
458
- correlations.set(sessionId, result);
459
- return result;
460
- },
461
- getCorrelations() {
462
- return new Map(correlations);
463
- },
464
- };
465
- }
466
- //# sourceMappingURL=entire-linker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entire-linker.js","sourceRoot":"","sources":["../../src/daemon/entire-linker.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Entire Session Watcher
3
- *
4
- * Watches .git/sessionlog-sessions/ for session state changes and emits
5
- * structured events. Used by the auto-linker to correlate sessions
6
- * with OpenTasks tasks.
7
- */
8
- /**
9
- * Entire session state from a session file
10
- */
11
- export interface EntireSessionState {
12
- id: string;
13
- agent: string;
14
- phase: 'ACTIVE' | 'IDLE' | 'ENDED';
15
- baseCommit?: string;
16
- branch?: string;
17
- startedAt?: string;
18
- endedAt?: string;
19
- checkpoints: string[];
20
- lastPromptAt?: string;
21
- }
22
- /**
23
- * Event emitted when a session changes
24
- */
25
- export interface EntireSessionEvent {
26
- type: 'started' | 'updated' | 'checkpoint' | 'ended' | 'deleted';
27
- sessionId: string;
28
- session: EntireSessionState;
29
- previousPhase?: string;
30
- checkpointId?: string;
31
- timestamp: string;
32
- }
33
- export type SessionEventHandler = (event: EntireSessionEvent) => void;
34
- /**
35
- * Configuration for the Entire watcher
36
- */
37
- export interface EntireWatcherConfig {
38
- /** Path to .opentasks/ directory (used to resolve .git) */
39
- locationPath: string;
40
- /** Override the git directory path (for testing) */
41
- gitDir?: string;
42
- /** Debounce delay in milliseconds (default: 200) */
43
- debounceMs?: number;
44
- /** Use polling instead of native fs events (useful for containers/tests) */
45
- usePolling?: boolean;
46
- }
47
- /**
48
- * Entire session watcher interface
49
- */
50
- export interface EntireWatcher {
51
- /** Start watching for session changes */
52
- start(): Promise<void>;
53
- /** Stop watching */
54
- stop(): Promise<void>;
55
- /** Register event handler */
56
- onSessionEvent(handler: SessionEventHandler): void;
57
- /** Check if watching */
58
- readonly isWatching: boolean;
59
- /** Get the resolved sessions directory path */
60
- readonly sessionsDir: string;
61
- }
62
- /**
63
- * Create an Entire session watcher
64
- */
65
- export declare function createEntireWatcher(config: EntireWatcherConfig): EntireWatcher;
66
- //# sourceMappingURL=entire-watcher.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entire-watcher.d.ts","sourceRoot":"","sources":["../../src/daemon/entire-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IAErB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,yCAAyC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,oBAAoB;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,6BAA6B;IAC7B,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnD,wBAAwB;IACxB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAoFD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CA2M9E"}