@mindstudio-ai/remy 0.1.227 → 0.1.228

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.
package/dist/headless.js CHANGED
@@ -6362,7 +6362,9 @@ var SESSION_FILE = ".remy-session.json";
6362
6362
  var ARCHIVE_DIR = ".logs/sessions";
6363
6363
  var ROTATE_THRESHOLD_BYTES = 32 * 1024 * 1024;
6364
6364
  var RETAIN_TAIL_BYTES = 16 * 1024 * 1024;
6365
+ var ARCHIVE_RETENTION_BYTES = 64 * 1024 * 1024;
6365
6366
  function loadSession(state) {
6367
+ pruneArchives();
6366
6368
  try {
6367
6369
  const raw = fs22.readFileSync(SESSION_FILE, "utf-8");
6368
6370
  const data = JSON.parse(raw);
@@ -6450,8 +6452,50 @@ function archiveMessages(messages, label, models) {
6450
6452
  }
6451
6453
  fs22.writeFileSync(dest, JSON.stringify(payload), "utf-8");
6452
6454
  log12.info("Session archived", { label, dest, messageCount: messages.length });
6455
+ pruneArchives();
6453
6456
  return dest;
6454
6457
  }
6458
+ function pruneArchives() {
6459
+ try {
6460
+ const entries = fs22.readdirSync(ARCHIVE_DIR).filter((name) => /^(cleared|rotated)-.*\.json$/.test(name));
6461
+ if (entries.length <= 1) {
6462
+ return;
6463
+ }
6464
+ const sortKey = (name) => name.replace(/^(cleared|rotated)-/, "");
6465
+ const archives = entries.map((name) => ({
6466
+ name,
6467
+ size: fs22.statSync(path11.join(ARCHIVE_DIR, name)).size
6468
+ })).sort((a, b) => sortKey(b.name).localeCompare(sortKey(a.name)));
6469
+ let kept = 0;
6470
+ let cut = archives.length;
6471
+ for (let i = 0; i < archives.length; i++) {
6472
+ if (i === 0 || kept + archives[i].size <= ARCHIVE_RETENTION_BYTES) {
6473
+ kept += archives[i].size;
6474
+ } else {
6475
+ cut = i;
6476
+ break;
6477
+ }
6478
+ }
6479
+ let removed = 0;
6480
+ let freed = 0;
6481
+ for (let i = cut; i < archives.length; i++) {
6482
+ try {
6483
+ fs22.unlinkSync(path11.join(ARCHIVE_DIR, archives[i].name));
6484
+ freed += archives[i].size;
6485
+ removed++;
6486
+ } catch {
6487
+ }
6488
+ }
6489
+ if (removed > 0) {
6490
+ log12.info("Session archives pruned", {
6491
+ removed,
6492
+ freedBytes: freed,
6493
+ keptBytes: kept
6494
+ });
6495
+ }
6496
+ } catch {
6497
+ }
6498
+ }
6455
6499
  function rotate(state) {
6456
6500
  const messages = state.messages;
6457
6501
  if (messages.length === 0) {
package/dist/index.js CHANGED
@@ -6717,6 +6717,7 @@ var init_toolResultCap = __esm({
6717
6717
  import fs20 from "fs";
6718
6718
  import path9 from "path";
6719
6719
  function loadSession(state) {
6720
+ pruneArchives();
6720
6721
  try {
6721
6722
  const raw = fs20.readFileSync(SESSION_FILE, "utf-8");
6722
6723
  const data = JSON.parse(raw);
@@ -6804,8 +6805,50 @@ function archiveMessages(messages, label, models) {
6804
6805
  }
6805
6806
  fs20.writeFileSync(dest, JSON.stringify(payload), "utf-8");
6806
6807
  log9.info("Session archived", { label, dest, messageCount: messages.length });
6808
+ pruneArchives();
6807
6809
  return dest;
6808
6810
  }
6811
+ function pruneArchives() {
6812
+ try {
6813
+ const entries = fs20.readdirSync(ARCHIVE_DIR).filter((name) => /^(cleared|rotated)-.*\.json$/.test(name));
6814
+ if (entries.length <= 1) {
6815
+ return;
6816
+ }
6817
+ const sortKey = (name) => name.replace(/^(cleared|rotated)-/, "");
6818
+ const archives = entries.map((name) => ({
6819
+ name,
6820
+ size: fs20.statSync(path9.join(ARCHIVE_DIR, name)).size
6821
+ })).sort((a, b) => sortKey(b.name).localeCompare(sortKey(a.name)));
6822
+ let kept = 0;
6823
+ let cut = archives.length;
6824
+ for (let i = 0; i < archives.length; i++) {
6825
+ if (i === 0 || kept + archives[i].size <= ARCHIVE_RETENTION_BYTES) {
6826
+ kept += archives[i].size;
6827
+ } else {
6828
+ cut = i;
6829
+ break;
6830
+ }
6831
+ }
6832
+ let removed = 0;
6833
+ let freed = 0;
6834
+ for (let i = cut; i < archives.length; i++) {
6835
+ try {
6836
+ fs20.unlinkSync(path9.join(ARCHIVE_DIR, archives[i].name));
6837
+ freed += archives[i].size;
6838
+ removed++;
6839
+ } catch {
6840
+ }
6841
+ }
6842
+ if (removed > 0) {
6843
+ log9.info("Session archives pruned", {
6844
+ removed,
6845
+ freedBytes: freed,
6846
+ keptBytes: kept
6847
+ });
6848
+ }
6849
+ } catch {
6850
+ }
6851
+ }
6809
6852
  function rotate(state) {
6810
6853
  const messages = state.messages;
6811
6854
  if (messages.length === 0) {
@@ -6865,7 +6908,7 @@ function clearSession(state) {
6865
6908
  });
6866
6909
  }
6867
6910
  }
6868
- var log9, SESSION_FILE, ARCHIVE_DIR, ROTATE_THRESHOLD_BYTES, RETAIN_TAIL_BYTES;
6911
+ var log9, SESSION_FILE, ARCHIVE_DIR, ROTATE_THRESHOLD_BYTES, RETAIN_TAIL_BYTES, ARCHIVE_RETENTION_BYTES;
6869
6912
  var init_session = __esm({
6870
6913
  "src/session.ts"() {
6871
6914
  "use strict";
@@ -6878,6 +6921,7 @@ var init_session = __esm({
6878
6921
  ARCHIVE_DIR = ".logs/sessions";
6879
6922
  ROTATE_THRESHOLD_BYTES = 32 * 1024 * 1024;
6880
6923
  RETAIN_TAIL_BYTES = 16 * 1024 * 1024;
6924
+ ARCHIVE_RETENTION_BYTES = 64 * 1024 * 1024;
6881
6925
  }
6882
6926
  });
6883
6927
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindstudio-ai/remy",
3
- "version": "0.1.227",
3
+ "version": "0.1.228",
4
4
  "description": "Remy coding agent",
5
5
  "repository": {
6
6
  "type": "git",