opencarly 1.0.1 → 1.0.3

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.
@@ -7,50 +7,74 @@
7
7
  import * as fs from "fs";
8
8
  import * as path from "path";
9
9
  import { SessionConfigSchema, CumulativeStatsSchema, } from "../config/schema";
10
+ async function atomicWrite(filePath, data) {
11
+ const tmpPath = `${filePath}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`;
12
+ await fs.promises.writeFile(tmpPath, data, "utf-8");
13
+ try {
14
+ await fs.promises.rename(tmpPath, filePath);
15
+ }
16
+ catch (err) {
17
+ try {
18
+ await fs.promises.unlink(tmpPath);
19
+ }
20
+ catch { }
21
+ throw err;
22
+ }
23
+ }
24
+ class Mutex {
25
+ queue = [];
26
+ locked = false;
27
+ async acquire() {
28
+ if (this.locked)
29
+ await new Promise(resolve => this.queue.push(resolve));
30
+ this.locked = true;
31
+ return () => {
32
+ if (this.queue.length > 0) {
33
+ const next = this.queue.shift();
34
+ if (next)
35
+ next();
36
+ }
37
+ else {
38
+ this.locked = false;
39
+ }
40
+ };
41
+ }
42
+ }
43
+ const sessionMutex = new Mutex();
10
44
  const SESSIONS_DIR = "sessions";
11
45
  const STATS_FILE = "stats.json";
12
- const STALE_SESSION_HOURS = 24;
46
+ const STALE_SESSION_HOURS = 720;
13
47
  // ---------------------------------------------------------------------------
14
48
  // Session CRUD
15
49
  // ---------------------------------------------------------------------------
16
50
  /**
17
51
  * Get the sessions directory path, creating it if needed.
18
52
  */
19
- function getSessionsDir(configPath) {
53
+ async function getSessionsDir(configPath) {
20
54
  const dir = path.join(configPath, SESSIONS_DIR);
21
- if (!fs.existsSync(dir)) {
22
- fs.mkdirSync(dir, { recursive: true });
23
- }
55
+ await fs.promises.mkdir(dir, { recursive: true });
24
56
  return dir;
25
57
  }
26
58
  /**
27
59
  * Get path to a specific session file.
28
60
  */
29
- function getSessionFilePath(configPath, sessionId) {
61
+ async function getSessionFilePath(configPath, sessionId) {
30
62
  // Sanitize the sessionId to prevent path traversal
31
63
  const safeId = sessionId.replace(/[^a-zA-Z0-9_-]/g, "");
32
- return path.join(getSessionsDir(configPath), `${safeId}.json`);
64
+ const dir = await getSessionsDir(configPath);
65
+ return path.join(dir, `${safeId}.json`);
33
66
  }
34
67
  /**
35
68
  * Load an existing session from disk. Returns null if not found.
36
69
  */
37
- export function loadSession(configPath, sessionId) {
38
- const filePath = getSessionFilePath(configPath, sessionId);
39
- if (!fs.existsSync(filePath)) {
40
- return null;
41
- }
70
+ export async function loadSession(configPath, sessionId) {
71
+ const filePath = await getSessionFilePath(configPath, sessionId);
42
72
  try {
43
- const raw = fs.readFileSync(filePath, "utf-8");
73
+ const raw = await fs.promises.readFile(filePath, "utf-8");
44
74
  return SessionConfigSchema.parse(JSON.parse(raw));
45
75
  }
46
76
  catch {
47
- // Corrupted session file - remove it and return null
48
- try {
49
- fs.unlinkSync(filePath);
50
- }
51
- catch {
52
- // ignore cleanup errors
53
- }
77
+ // Return null on read error (ENOENT, EBUSY) or parse error. Do not delete file.
54
78
  return null;
55
79
  }
56
80
  }
@@ -74,20 +98,36 @@ export function createSession(sessionId, cwd) {
74
98
  /**
75
99
  * Get or create a session. Returns the session and whether it was newly created.
76
100
  */
77
- export function getOrCreateSession(configPath, sessionId, cwd) {
78
- const existing = loadSession(configPath, sessionId);
101
+ export async function getOrCreateSession(configPath, sessionId, cwd) {
102
+ const existing = await loadSession(configPath, sessionId);
79
103
  if (existing) {
80
104
  return { session: existing, isNew: false };
81
105
  }
82
106
  const session = createSession(sessionId, cwd);
83
107
  return { session, isNew: true };
84
108
  }
109
+ const pendingSessionWrites = new Map();
85
110
  /**
86
- * Save a session to disk.
111
+ * Save a session to disk (debounced).
87
112
  */
88
- export function saveSession(configPath, session) {
89
- const filePath = getSessionFilePath(configPath, session.id);
90
- fs.writeFileSync(filePath, JSON.stringify(session, null, 2), "utf-8");
113
+ export async function saveSession(configPath, session) {
114
+ const sessionId = session.id;
115
+ if (pendingSessionWrites.has(sessionId)) {
116
+ clearTimeout(pendingSessionWrites.get(sessionId));
117
+ }
118
+ // Deep clone to prevent concurrent modification issues before the timeout fires
119
+ const sessionClone = JSON.parse(JSON.stringify(session));
120
+ pendingSessionWrites.set(sessionId, setTimeout(async () => {
121
+ pendingSessionWrites.delete(sessionId);
122
+ const release = await sessionMutex.acquire();
123
+ try {
124
+ const filePath = await getSessionFilePath(configPath, sessionClone.id);
125
+ await atomicWrite(filePath, JSON.stringify(sessionClone, null, 2));
126
+ }
127
+ finally {
128
+ release();
129
+ }
130
+ }, 1000));
91
131
  }
92
132
  // ---------------------------------------------------------------------------
93
133
  // Session updates
@@ -113,16 +153,29 @@ export function updateSessionActivity(session, promptText) {
113
153
  * Session overrides take precedence over manifest values.
114
154
  */
115
155
  export function applySessionOverrides(manifest, session) {
116
- // Deep clone the manifest to avoid mutating the original
117
- const result = JSON.parse(JSON.stringify(manifest));
156
+ const hasDevmodeOverride = session.overrides.devmode !== null;
157
+ const hasDomainOverrides = Object.keys(session.overrides.domainStates).length > 0;
158
+ if (!hasDevmodeOverride && !hasDomainOverrides) {
159
+ return manifest;
160
+ }
161
+ // Shallow clone the manifest
162
+ const result = { ...manifest };
118
163
  // Override devmode if session has a non-null override
119
- if (session.overrides.devmode !== null) {
164
+ if (hasDevmodeOverride) {
120
165
  result.devmode = session.overrides.devmode;
121
166
  }
122
167
  // Override per-domain states
123
- for (const [domainName, stateOverride] of Object.entries(session.overrides.domainStates)) {
124
- if (stateOverride !== null && result.domains[domainName]) {
125
- result.domains[domainName].state = stateOverride ? "active" : "inactive";
168
+ if (hasDomainOverrides) {
169
+ // Shallow clone the domains object so we can mutate specific domains
170
+ result.domains = { ...manifest.domains };
171
+ for (const [domainName, stateOverride] of Object.entries(session.overrides.domainStates)) {
172
+ if (stateOverride !== null && result.domains[domainName]) {
173
+ // Shallow clone the specific domain before mutating its state
174
+ result.domains[domainName] = {
175
+ ...result.domains[domainName],
176
+ state: stateOverride ? "active" : "inactive"
177
+ };
178
+ }
126
179
  }
127
180
  }
128
181
  return result;
@@ -133,31 +186,33 @@ export function applySessionOverrides(manifest, session) {
133
186
  /**
134
187
  * Remove session files older than STALE_SESSION_HOURS.
135
188
  */
136
- export function cleanStaleSessions(configPath) {
189
+ export async function cleanStaleSessions(configPath) {
137
190
  const sessionsDir = path.join(configPath, SESSIONS_DIR);
138
- if (!fs.existsSync(sessionsDir)) {
191
+ let files;
192
+ try {
193
+ files = await fs.promises.readdir(sessionsDir);
194
+ }
195
+ catch {
139
196
  return 0;
140
197
  }
141
198
  const cutoff = Date.now() - STALE_SESSION_HOURS * 60 * 60 * 1000;
142
199
  let cleaned = 0;
143
- const files = fs.readdirSync(sessionsDir);
144
200
  for (const file of files) {
145
201
  if (!file.endsWith(".json"))
146
202
  continue;
147
203
  const filePath = path.join(sessionsDir, file);
148
204
  try {
149
- const raw = fs.readFileSync(filePath, "utf-8");
150
- const session = JSON.parse(raw);
151
- const lastActivity = new Date(session.lastActivity).getTime();
205
+ const stats = await fs.promises.stat(filePath);
206
+ const lastActivity = stats.mtimeMs;
152
207
  if (lastActivity < cutoff) {
153
- fs.rmSync(filePath, { recursive: true, force: true });
208
+ await fs.promises.rm(filePath, { recursive: true, force: true });
154
209
  cleaned++;
155
210
  }
156
211
  }
157
212
  catch {
158
- // Remove corrupted files too
213
+ // Remove corrupted/unreadable files too
159
214
  try {
160
- fs.rmSync(filePath, { recursive: true, force: true });
215
+ await fs.promises.rm(filePath, { recursive: true, force: true });
161
216
  cleaned++;
162
217
  }
163
218
  catch {
@@ -179,29 +234,28 @@ function getStatsFilePath(configPath) {
179
234
  /**
180
235
  * Read JSON file, returning null if doesn't exist or invalid.
181
236
  */
182
- function readJsonFileSafe(filePath) {
183
- if (!fs.existsSync(filePath)) {
184
- return null;
185
- }
237
+ async function readJsonFileSafeAsync(filePath) {
186
238
  try {
187
- const raw = fs.readFileSync(filePath, "utf-8");
239
+ const raw = await fs.promises.readFile(filePath, "utf-8");
188
240
  return JSON.parse(raw);
189
241
  }
190
242
  catch {
191
243
  return null;
192
244
  }
193
245
  }
194
- function getSessionFiles(sessionsDir) {
195
- if (!fs.existsSync(sessionsDir)) {
246
+ async function getSessionFilesAsync(sessionsDir) {
247
+ try {
248
+ const files = await fs.promises.readdir(sessionsDir);
249
+ return files
250
+ .filter((f) => f.endsWith(".json"))
251
+ .map((name) => ({
252
+ path: path.join(sessionsDir, name),
253
+ name,
254
+ }));
255
+ }
256
+ catch {
196
257
  return [];
197
258
  }
198
- const files = fs.readdirSync(sessionsDir);
199
- return files
200
- .filter((f) => f.endsWith(".json"))
201
- .map((name) => ({
202
- path: path.join(sessionsDir, name),
203
- name,
204
- }));
205
259
  }
206
260
  function calculateTokensSaved(tokenStats) {
207
261
  return ((tokenStats.tokensSkippedBySelection || 0) +
@@ -229,9 +283,9 @@ function calculateCumulativeStats(sessions) {
229
283
  * Load cumulative stats from stats.json and session files.
230
284
  * Returns defaults if no data exists.
231
285
  */
232
- export function loadCumulativeStats(configPath) {
286
+ export async function loadCumulativeStats(configPath, trackDuration = "all") {
233
287
  const statsPath = getStatsFilePath(configPath);
234
- const raw = readJsonFileSafe(statsPath);
288
+ const raw = await readJsonFileSafeAsync(statsPath);
235
289
  let statsJson;
236
290
  if (raw) {
237
291
  try {
@@ -275,8 +329,8 @@ export function loadCumulativeStats(configPath) {
275
329
  }
276
330
  }
277
331
  // Load sessions from session files
278
- const sessionsDir = getSessionsDir(configPath);
279
- const sessionFiles = getSessionFiles(sessionsDir);
332
+ const sessionsDir = path.join(configPath, SESSIONS_DIR);
333
+ const sessionFiles = await getSessionFilesAsync(sessionsDir);
280
334
  const sessionMap = new Map();
281
335
  // Add sessions from stats.json first
282
336
  for (const session of statsJson.sessions) {
@@ -284,7 +338,7 @@ export function loadCumulativeStats(configPath) {
284
338
  }
285
339
  // Merge sessions from session files
286
340
  for (const sessionFile of sessionFiles) {
287
- const sessionData = readJsonFileSafe(sessionFile.path);
341
+ const sessionData = await readJsonFileSafeAsync(sessionFile.path);
288
342
  if (sessionData && sessionData.id && sessionData.tokenStats) {
289
343
  const existing = sessionMap.get(sessionData.id);
290
344
  if (!existing) {
@@ -292,6 +346,7 @@ export function loadCumulativeStats(configPath) {
292
346
  sessionMap.set(sessionData.id, {
293
347
  sessionId: sessionData.id,
294
348
  date: sessionData.started,
349
+ lastActivity: sessionData.lastActivity || sessionData.started,
295
350
  tokensSaved: calculateTokensSaved(sessionData.tokenStats),
296
351
  promptsProcessed: sessionData.promptCount || 0,
297
352
  tokensSkippedBySelection: sessionData.tokenStats.tokensSkippedBySelection || 0,
@@ -304,64 +359,122 @@ export function loadCumulativeStats(configPath) {
304
359
  }
305
360
  }
306
361
  // Recalculate cumulative totals from merged sessions
307
- const sessions = Array.from(sessionMap.values());
308
- const cumulative = calculateCumulativeStats(sessions);
362
+ let sessions = Array.from(sessionMap.values());
363
+ let cumulative;
364
+ if (trackDuration !== "all") {
365
+ const cutoff = new Date();
366
+ if (trackDuration === "week") {
367
+ cutoff.setDate(cutoff.getDate() - 7);
368
+ }
369
+ else if (trackDuration === "month") {
370
+ cutoff.setMonth(cutoff.getMonth() - 1);
371
+ }
372
+ const cutoffTime = cutoff.getTime();
373
+ sessions = sessions.filter(s => new Date(s.lastActivity || s.date).getTime() >= cutoffTime);
374
+ // For specific durations, recalculate to only include sessions within the timeframe
375
+ cumulative = calculateCumulativeStats(sessions);
376
+ }
377
+ else {
378
+ // For "all" time, use the persistent running total to avoid truncation after 100 sessions
379
+ cumulative = { ...statsJson.cumulative };
380
+ }
381
+ sessions.sort((a, b) => {
382
+ const timeA = new Date(a.lastActivity || a.date).getTime();
383
+ const timeB = new Date(b.lastActivity || b.date).getTime();
384
+ return timeB - timeA;
385
+ });
386
+ if (sessions.length > 100) {
387
+ sessions = sessions.slice(0, 100);
388
+ }
309
389
  return {
310
390
  version: statsJson.version,
311
391
  cumulative,
312
392
  sessions,
313
393
  };
314
394
  }
395
+ const pendingStatsWrites = new Map();
396
+ async function debouncedAtomicWrite(filePath, data) {
397
+ if (pendingStatsWrites.has(filePath)) {
398
+ clearTimeout(pendingStatsWrites.get(filePath));
399
+ }
400
+ pendingStatsWrites.set(filePath, setTimeout(async () => {
401
+ pendingStatsWrites.delete(filePath);
402
+ const release = await sessionMutex.acquire();
403
+ try {
404
+ await atomicWrite(filePath, data);
405
+ }
406
+ finally {
407
+ release();
408
+ }
409
+ }, 1000));
410
+ }
315
411
  /**
316
412
  * Save cumulative stats to stats.json.
317
413
  */
318
- export function saveCumulativeStats(configPath, stats) {
414
+ export async function saveCumulativeStats(configPath, stats) {
319
415
  const statsPath = getStatsFilePath(configPath);
320
- fs.writeFileSync(statsPath, JSON.stringify(stats, null, 2), "utf-8");
416
+ await debouncedAtomicWrite(statsPath, JSON.stringify(stats, null, 2));
321
417
  }
322
418
  /**
323
419
  * Clear all stats by removing stats.json and all session files.
324
420
  */
325
- export function clearAllStats(configPath) {
326
- const statsPath = getStatsFilePath(configPath);
327
- if (fs.existsSync(statsPath)) {
421
+ export async function clearAllStats(configPath) {
422
+ const release = await sessionMutex.acquire();
423
+ try {
424
+ const statsPath = getStatsFilePath(configPath);
328
425
  try {
329
- fs.unlinkSync(statsPath);
426
+ await fs.promises.unlink(statsPath);
330
427
  }
331
428
  catch { }
332
- }
333
- const sessionsDir = getSessionsDir(configPath);
334
- if (fs.existsSync(sessionsDir)) {
335
- const files = fs.readdirSync(sessionsDir);
336
- for (const file of files) {
337
- if (file.endsWith(".json")) {
338
- try {
339
- fs.unlinkSync(path.join(sessionsDir, file));
429
+ const sessionsDir = path.join(configPath, SESSIONS_DIR);
430
+ try {
431
+ const files = await fs.promises.readdir(sessionsDir);
432
+ for (const file of files) {
433
+ if (file.endsWith(".json")) {
434
+ try {
435
+ await fs.promises.unlink(path.join(sessionsDir, file));
436
+ }
437
+ catch { }
340
438
  }
341
- catch { }
342
439
  }
343
440
  }
441
+ catch { }
442
+ }
443
+ finally {
444
+ release();
344
445
  }
345
446
  }
346
447
  /**
347
448
  * Update cumulative stats with the current session's stats.
348
449
  * Called on every prompt to keep stats current.
349
450
  */
350
- export function updateCumulativeStats(configPath, session) {
451
+ export async function updateCumulativeStats(configPath, session, trackDuration, currentDelta, memoryStats) {
351
452
  const statsPath = getStatsFilePath(configPath);
352
453
  let stats;
353
- try {
354
- const raw = readJsonFileSafe(statsPath);
355
- stats = raw ? CumulativeStatsSchema.parse(raw) : { version: 1, cumulative: { tokensSkippedBySelection: 0, tokensInjected: 0, tokensTrimmedFromHistory: 0, tokensTrimmedCarlyBlocks: 0, totalTokensSaved: 0 }, sessions: [] };
454
+ if (memoryStats) {
455
+ stats = memoryStats;
356
456
  }
357
- catch {
358
- stats = { version: 1, cumulative: { tokensSkippedBySelection: 0, tokensInjected: 0, tokensTrimmedFromHistory: 0, tokensTrimmedCarlyBlocks: 0, totalTokensSaved: 0 }, sessions: [] };
457
+ else {
458
+ const release = await sessionMutex.acquire();
459
+ try {
460
+ try {
461
+ const raw = await readJsonFileSafeAsync(statsPath);
462
+ stats = raw ? CumulativeStatsSchema.parse(raw) : { version: 1, cumulative: { tokensSkippedBySelection: 0, tokensInjected: 0, tokensTrimmedFromHistory: 0, tokensTrimmedCarlyBlocks: 0, totalTokensSaved: 0 }, sessions: [] };
463
+ }
464
+ catch {
465
+ stats = { version: 1, cumulative: { tokensSkippedBySelection: 0, tokensInjected: 0, tokensTrimmedFromHistory: 0, tokensTrimmedCarlyBlocks: 0, totalTokensSaved: 0 }, sessions: [] };
466
+ }
467
+ }
468
+ finally {
469
+ release();
470
+ }
359
471
  }
360
472
  const tokensSaved = calculateTokensSaved(session.tokenStats);
361
473
  const existingIndex = stats.sessions.findIndex(s => s.sessionId === session.id);
362
474
  const summary = {
363
475
  sessionId: session.id,
364
476
  date: session.started,
477
+ lastActivity: session.lastActivity,
365
478
  tokensSaved,
366
479
  promptsProcessed: session.tokenStats.promptsProcessed,
367
480
  tokensSkippedBySelection: session.tokenStats.tokensSkippedBySelection,
@@ -370,25 +483,83 @@ export function updateCumulativeStats(configPath, session) {
370
483
  tokensInjected: session.tokenStats.tokensInjected,
371
484
  rulesInjected: session.tokenStats.rulesInjected || 0,
372
485
  };
486
+ const isReEntering = existingIndex === -1 && session.tokenStats.promptsProcessed > 1;
487
+ let isReset = false;
488
+ // We preserve the previous cumulative totals
489
+ const prevCumulativeTokensSkipped = stats.cumulative.tokensSkippedBySelection || 0;
490
+ const prevCumulativeTokensTrimmedHistory = stats.cumulative.tokensTrimmedFromHistory || 0;
491
+ const prevCumulativeTokensTrimmedCarlyBlocks = stats.cumulative.tokensTrimmedCarlyBlocks || 0;
492
+ const prevCumulativeTokensInjected = stats.cumulative.tokensInjected || 0;
493
+ const prevCumulativeTotalSaved = stats.cumulative.totalTokensSaved || 0;
373
494
  if (existingIndex >= 0) {
495
+ const oldSession = stats.sessions[existingIndex];
496
+ isReset = session.tokenStats.promptsProcessed < (oldSession.promptsProcessed || 0);
497
+ if (!isReset) {
498
+ // If it's an existing session and not reset, subtract the old values first before adding new ones
499
+ stats.cumulative.tokensSkippedBySelection = prevCumulativeTokensSkipped - (oldSession.tokensSkippedBySelection || 0);
500
+ stats.cumulative.tokensTrimmedFromHistory = prevCumulativeTokensTrimmedHistory - (oldSession.tokensTrimmedFromHistory || 0);
501
+ stats.cumulative.tokensTrimmedCarlyBlocks = prevCumulativeTokensTrimmedCarlyBlocks - (oldSession.tokensTrimmedCarlyBlocks || 0);
502
+ stats.cumulative.tokensInjected = prevCumulativeTokensInjected - (oldSession.tokensInjected || 0);
503
+ stats.cumulative.totalTokensSaved = prevCumulativeTotalSaved - (oldSession.tokensSaved || 0);
504
+ }
505
+ else {
506
+ // It's a reset. Keep current totals, do not subtract old session to preserve historical stats
507
+ stats.cumulative.tokensSkippedBySelection = prevCumulativeTokensSkipped;
508
+ stats.cumulative.tokensTrimmedFromHistory = prevCumulativeTokensTrimmedHistory;
509
+ stats.cumulative.tokensTrimmedCarlyBlocks = prevCumulativeTokensTrimmedCarlyBlocks;
510
+ stats.cumulative.tokensInjected = prevCumulativeTokensInjected;
511
+ stats.cumulative.totalTokensSaved = prevCumulativeTotalSaved;
512
+ }
374
513
  stats.sessions[existingIndex] = summary;
375
514
  }
376
515
  else {
377
516
  stats.sessions.push(summary);
517
+ // Keep current totals, we will add the new session's values below if not re-entering
518
+ stats.cumulative.tokensSkippedBySelection = prevCumulativeTokensSkipped;
519
+ stats.cumulative.tokensTrimmedFromHistory = prevCumulativeTokensTrimmedHistory;
520
+ stats.cumulative.tokensTrimmedCarlyBlocks = prevCumulativeTokensTrimmedCarlyBlocks;
521
+ stats.cumulative.tokensInjected = prevCumulativeTokensInjected;
522
+ stats.cumulative.totalTokensSaved = prevCumulativeTotalSaved;
523
+ }
524
+ // Add the newly updated or pushed session to the cumulative totals
525
+ if (!isReEntering) {
526
+ stats.cumulative.tokensSkippedBySelection += summary.tokensSkippedBySelection || 0;
527
+ stats.cumulative.tokensTrimmedFromHistory += summary.tokensTrimmedFromHistory || 0;
528
+ stats.cumulative.tokensTrimmedCarlyBlocks += summary.tokensTrimmedCarlyBlocks || 0;
529
+ stats.cumulative.tokensInjected += summary.tokensInjected || 0;
530
+ stats.cumulative.totalTokensSaved += summary.tokensSaved || 0;
531
+ }
532
+ else if (currentDelta) {
533
+ // If re-entering, only add the delta from the current prompt to avoid double-counting history
534
+ stats.cumulative.tokensSkippedBySelection += currentDelta.tokensSkippedBySelection || 0;
535
+ stats.cumulative.tokensTrimmedFromHistory += currentDelta.tokensTrimmedFromHistory || 0;
536
+ stats.cumulative.tokensTrimmedCarlyBlocks += currentDelta.tokensTrimmedCarlyBlocks || 0;
537
+ stats.cumulative.tokensInjected += currentDelta.tokensInjected || 0;
538
+ stats.cumulative.totalTokensSaved += currentDelta.tokensSaved || 0;
539
+ }
540
+ // Filter based on trackDuration
541
+ if (trackDuration !== "all") {
542
+ const cutoff = new Date();
543
+ if (trackDuration === "week") {
544
+ cutoff.setDate(cutoff.getDate() - 7);
545
+ }
546
+ else if (trackDuration === "month") {
547
+ cutoff.setMonth(cutoff.getMonth() - 1);
548
+ }
549
+ const cutoffTime = cutoff.getTime();
550
+ stats.sessions = stats.sessions.filter(s => new Date(s.lastActivity || s.date).getTime() >= cutoffTime);
551
+ stats.cumulative = calculateCumulativeStats(stats.sessions);
552
+ }
553
+ // Limit array size to prevent unbounded growth (max 100)
554
+ stats.sessions.sort((a, b) => {
555
+ const timeA = new Date(a.lastActivity || a.date).getTime();
556
+ const timeB = new Date(b.lastActivity || b.date).getTime();
557
+ return timeB - timeA;
558
+ });
559
+ if (stats.sessions.length > 100) {
560
+ stats.sessions = stats.sessions.slice(0, 100);
378
561
  }
379
- stats.cumulative.tokensSkippedBySelection = 0;
380
- stats.cumulative.tokensTrimmedFromHistory = 0;
381
- stats.cumulative.tokensTrimmedCarlyBlocks = 0;
382
- stats.cumulative.tokensInjected = 0;
383
- stats.cumulative.totalTokensSaved = 0;
384
- for (const s of stats.sessions) {
385
- stats.cumulative.tokensSkippedBySelection += s.tokensSkippedBySelection || 0;
386
- stats.cumulative.tokensTrimmedFromHistory += s.tokensTrimmedFromHistory || 0;
387
- stats.cumulative.tokensTrimmedCarlyBlocks += s.tokensTrimmedCarlyBlocks || 0;
388
- stats.cumulative.tokensInjected += s.tokensInjected || 0;
389
- stats.cumulative.totalTokensSaved += s.tokensSaved || 0;
390
- }
391
- saveCumulativeStats(configPath, stats);
562
+ await debouncedAtomicWrite(statsPath, JSON.stringify(stats, null, 2));
392
563
  return stats;
393
564
  }
394
565
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session/session.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencarly",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "description": "Context Augmentation & Reinforcement Layer for OpenCode - Dynamic rules that load when relevant, disappear when not.",
6
6
  "main": "dist/index.js",
@@ -21,10 +21,12 @@
21
21
  "prepublishOnly": "npm run build"
22
22
  },
23
23
  "dependencies": {
24
+ "minimatch": "^10.2.4",
24
25
  "zod": "^3.23.0"
25
26
  },
26
27
  "devDependencies": {
27
28
  "@opencode-ai/plugin": "^1.0.0",
29
+ "@types/minimatch": "^5.1.2",
28
30
  "@types/node": "^22.0.0",
29
31
  "typescript": "^5.7.0"
30
32
  },