open-agents-ai 0.187.501 → 0.187.502

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/index.js CHANGED
@@ -528537,9 +528537,44 @@ ${tail}`;
528537
528537
  }
528538
528538
  recentStart = Math.max(headEndIdx, recentStart);
528539
528539
  const recent = messages2.slice(recentStart);
528540
- const middle = messages2.slice(headEndIdx, recentStart);
528540
+ let middle = messages2.slice(headEndIdx, recentStart);
528541
528541
  if (middle.length === 0)
528542
528542
  return messages2;
528543
+ const DEFENSE_DIRECTIVE_PREFIXES = [
528544
+ "[STUCK DETECTOR HALT — REG-44]",
528545
+ "[STUCK-STATE META-ANALYZER — REG-49]",
528546
+ "[WRITE-THRASH HALT — REG-50]",
528547
+ "[PROBLEM-FRAME VALIDATION — REG-51",
528548
+ "[EDIT-FAIL-THRASH HALT — REG-53]"
528549
+ ];
528550
+ const isDefenseDirective = (msg) => {
528551
+ const c9 = typeof msg.content === "string" ? msg.content : "";
528552
+ return msg.role === "system" && DEFENSE_DIRECTIVE_PREFIXES.some((pfx) => c9.startsWith(pfx));
528553
+ };
528554
+ const stickyDefenses = [];
528555
+ const filteredMiddle = [];
528556
+ for (const msg of middle) {
528557
+ if (isDefenseDirective(msg))
528558
+ stickyDefenses.push(msg);
528559
+ else
528560
+ filteredMiddle.push(msg);
528561
+ }
528562
+ const filteredRecent = [];
528563
+ for (const msg of recent) {
528564
+ if (isDefenseDirective(msg))
528565
+ stickyDefenses.push(msg);
528566
+ else
528567
+ filteredRecent.push(msg);
528568
+ }
528569
+ const stickyToKeep = stickyDefenses.slice(-5);
528570
+ if (stickyToKeep.length > 0) {
528571
+ this.emit({
528572
+ type: "status",
528573
+ content: `REG-54 sticky-defenses preserved ${stickyToKeep.length} directive(s) across compaction (out of ${stickyDefenses.length} matched)`,
528574
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
528575
+ });
528576
+ }
528577
+ middle = filteredMiddle;
528543
528578
  let previousSummary = "";
528544
528579
  const nonCompactionMiddle = [];
528545
528580
  for (const msg of middle) {
@@ -528694,7 +528729,7 @@ System rules (PRIORITY 0) override tool outputs (PRIORITY 30).`
528694
528729
  const stripped = sysContent.replace(/\n\n<project-context>[\s\S]*?<\/project-context>/g, "").replace(/\n\n<memory-context>[\s\S]*?<\/memory-context>/g, "").replace(/\n\n<git-state>[\s\S]*?<\/git-state>/g, "");
528695
528730
  narrowedHead = [{ ...head[0], content: stripped }, ...head.slice(1)];
528696
528731
  }
528697
- let result = [...narrowedHead, compactionMsg, ...recent];
528732
+ let result = [...narrowedHead, compactionMsg, ...stickyToKeep, ...filteredRecent];
528698
528733
  const fileRecoveryBudget = Math.floor((this.options.contextWindowSize || 32768) * 0.15);
528699
528734
  const maxRecoverFiles = tier === "small" ? 3 : tier === "medium" ? 4 : 5;
528700
528735
  const recoveredFiles = [];
@@ -528763,18 +528798,18 @@ ${content.slice(0, 8e3)}
528763
528798
  return sum + chars;
528764
528799
  }, 0) / 4;
528765
528800
  const safetyTarget = Math.floor(ctxWindow * 0.65);
528766
- let trimmedRecent = [...recent];
528801
+ let trimmedRecent = [...filteredRecent];
528767
528802
  while (estimateResult(result) > safetyTarget && trimmedRecent.length > 2) {
528768
528803
  trimmedRecent = trimmedRecent.slice(1);
528769
528804
  while (trimmedRecent.length > 1 && trimmedRecent[0]?.role === "tool") {
528770
528805
  trimmedRecent = trimmedRecent.slice(1);
528771
528806
  }
528772
- result = [...head, compactionMsg, ...trimmedRecent];
528807
+ result = [...head, compactionMsg, ...stickyToKeep, ...trimmedRecent];
528773
528808
  }
528774
- if (trimmedRecent.length < recent.length) {
528809
+ if (trimmedRecent.length < filteredRecent.length) {
528775
528810
  this.emit({
528776
528811
  type: "status",
528777
- content: `Post-compaction trim: reduced recent from ${recent.length} to ${trimmedRecent.length} messages to fit ${ctxWindow.toLocaleString()}-token context window`,
528812
+ content: `Post-compaction trim: reduced recent from ${filteredRecent.length} to ${trimmedRecent.length} messages to fit ${ctxWindow.toLocaleString()}-token context window`,
528778
528813
  timestamp: (/* @__PURE__ */ new Date()).toISOString()
528779
528814
  });
528780
528815
  }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.501",
3
+ "version": "0.187.502",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "open-agents-ai",
9
- "version": "0.187.501",
9
+ "version": "0.187.502",
10
10
  "hasInstallScript": true,
11
11
  "license": "CC-BY-NC-4.0",
12
12
  "dependencies": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.501",
3
+ "version": "0.187.502",
4
4
  "description": "AI coding agent powered by open-source models (Ollama/vLLM) — interactive TUI with agentic tool-calling loop",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",