open-agents-ai 0.187.443 → 0.187.445

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
@@ -531832,6 +531832,7 @@ Recent tasks: ${ctx3.entries.slice(-3).map(
531832
531832
  (e2) => `[${e2.completed ? "done" : "partial"}] ${normalizeSessionText(e2.summary || e2.task, 80)}`
531833
531833
  ).join(", ")}
531834
531834
  </session-recap>` : "";
531835
+ clearTaskHandoff(repoRoot);
531835
531836
  return handoffPrompt + baseCtx;
531836
531837
  }
531837
531838
  if (!ctx3 || ctx3.entries.length === 0) return null;
@@ -536710,6 +536711,19 @@ ${CONTENT_BG_SEQ}`);
536710
536711
  const lineContent = `${prefix}${inputWrap.lines[i2]}`;
536711
536712
  buf += `\x1B[${row};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_V}${RESET2}${PANEL_BG_SEQ}${lineContent}${PANEL_BG_SEQ}\x1B[K\x1B[${row};${w}H${BOX_FG}${BOX_V}${RESET2}`;
536712
536713
  }
536714
+ if (this._suggestions.length > 0 && pos.suggestStartRow > 0) {
536715
+ for (let si = 0; si < this._suggestions.length; si++) {
536716
+ const row = pos.suggestStartRow + si;
536717
+ const cmd = this._suggestions[si];
536718
+ const isHl = si === this._suggestIndex;
536719
+ const bg = isHl ? `\x1B[48;5;235m` : PANEL_BG_SEQ;
536720
+ const fg2 = isHl ? `\x1B[1;38;5;${TEXT_PRIMARY}m` : `\x1B[38;5;${TEXT_PRIMARY}m`;
536721
+ const marker = isHl ? `\x1B[38;5;${TEXT_PRIMARY}m› ` : " ";
536722
+ buf += `\x1B[${row};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_V}${RESET2}${PANEL_BG_SEQ}`;
536723
+ buf += `${bg} ${marker}\x1B[38;5;${TEXT_DIM}m/${fg2}${cmd}`;
536724
+ buf += `${PANEL_BG_SEQ}\x1B[K\x1B[${row};${w}H${BOX_FG}${BOX_V}${RESET2}`;
536725
+ }
536726
+ }
536713
536727
  const boxInnerS = w - 2;
536714
536728
  buf += `\x1B[${pos.bufferRow};1H${PANEL_BG_SEQ}\x1B[2K${BOX_FG}${BOX_BL}${BOX_H.repeat(Math.max(0, boxInnerS))}${BOX_BR}${RESET2}`;
536715
536729
  buf += `\x1B[${pos.metricsRow};1H${PANEL_BG_SEQ}\x1B[2K${this.buildMetricsLine()}${RESET2}`;
@@ -584705,6 +584719,10 @@ ${entry.fullContent}`
584705
584719
  const filesTouched = /* @__PURE__ */ new Set();
584706
584720
  const sessionToolsUsed = /* @__PURE__ */ new Set();
584707
584721
  const toolSequence = [];
584722
+ const memoriesRecalled = [];
584723
+ const validationStatus = { testsRan: false, testsPassed: false, buildSucceeded: true };
584724
+ const taskAccomplishments = [];
584725
+ const taskFindings = [];
584708
584726
  const editSessionId = `task-${Date.now()}`;
584709
584727
  const editHistory = createEditHistoryLogger(repoRoot, editSessionId);
584710
584728
  let lastToolCall = null;
@@ -584766,6 +584784,13 @@ ${entry.fullContent}`
584766
584784
  tool: event.toolName ?? "unknown",
584767
584785
  argKeys: Object.keys(event.toolArgs ?? {})
584768
584786
  });
584787
+ if (event.toolName === "memory_read" || event.toolName === "memory_search") {
584788
+ const topic = String(event.toolArgs?.topic ?? event.toolArgs?.query ?? "");
584789
+ const key = String(event.toolArgs?.key ?? "");
584790
+ if (topic) {
584791
+ memoriesRecalled.push({ topic, key, relevance: "accessed during task" });
584792
+ }
584793
+ }
584769
584794
  if (event.toolArgs?.path && typeof event.toolArgs.path === "string") {
584770
584795
  const name10 = event.toolName ?? "";
584771
584796
  if (name10 === "file_write" || name10 === "file_edit" || name10 === "file_patch" || name10 === "batch_edit") {
@@ -584819,6 +584844,16 @@ ${entry.fullContent}`
584819
584844
  editHistory.logToolCall(lastToolCall.name, lastToolCall.args, event.success ?? false);
584820
584845
  lastToolCall = null;
584821
584846
  }
584847
+ if (event.toolName === "shell" && event.content) {
584848
+ const output = String(event.content);
584849
+ if (/npm\s+test|pnpm\s+test|yarn\s+test|vitest|jest|pytest/i.test(output)) {
584850
+ validationStatus.testsRan = true;
584851
+ validationStatus.testsPassed = (event.success ?? false) && !/FAIL|Error|failed/i.test(output);
584852
+ }
584853
+ if (/npm\s+run\s+build|pnpm\s+build|tsc|webpack|rollup/i.test(output)) {
584854
+ validationStatus.buildSucceeded = event.success ?? false;
584855
+ }
584856
+ }
584822
584857
  getActivityFeed().push({
584823
584858
  ts: Date.now(),
584824
584859
  source: "main",
@@ -585250,6 +585285,24 @@ When done, either call task_complete with your answer, or use FINAL_VAR(variable
585250
585285
  } catch {
585251
585286
  }
585252
585287
  try {
585288
+ const accomplishmentPatterns = [
585289
+ /(?:fixed|implemented|added|updated|created|refactored|resolved)\s+[^\n.]+/gi,
585290
+ /(?:✓|✅|✔)\s+[^\n]+/g
585291
+ ];
585292
+ const extractedAccomplishments = [];
585293
+ for (const pattern of accomplishmentPatterns) {
585294
+ const matches = result.summary.match(pattern) || [];
585295
+ extractedAccomplishments.push(...matches.slice(0, 5).map((m2) => m2.trim()));
585296
+ }
585297
+ const findingPatterns = [
585298
+ /(?:found|discovered|identified|detected|observed)\s+[^\n.]+/gi,
585299
+ /(?:pattern|issue|bug|regression|gap):\s*[^\n]+/gi
585300
+ ];
585301
+ const extractedFindings = [];
585302
+ for (const pattern of findingPatterns) {
585303
+ const matches = result.summary.match(pattern) || [];
585304
+ extractedFindings.push(...matches.slice(0, 3).map((m2) => m2.trim()));
585305
+ }
585253
585306
  const handoff = {
585254
585307
  base: {
585255
585308
  savedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -585262,22 +585315,17 @@ When done, either call task_complete with your answer, or use FINAL_VAR(variable
585262
585315
  model: config.model,
585263
585316
  source: "task_complete"
585264
585317
  },
585265
- accomplishments: [],
585266
- // Populated by agent if it provides structured output
585318
+ accomplishments: extractedAccomplishments.length > 0 ? extractedAccomplishments : [`Completed task in ${result.turns} turns with ${result.toolCalls} tool calls`],
585267
585319
  files: Array.from(filesTouched).slice(0, 20).map((f2) => ({
585268
585320
  path: f2,
585269
585321
  operation: "modified"
585270
585322
  })),
585271
- memories: [],
585272
- // Populated from memory recalls during task
585273
- findings: [],
585274
- // Populated by agent
585323
+ memories: memoriesRecalled.slice(0, 10),
585324
+ findings: extractedFindings.length > 0 ? extractedFindings : [],
585275
585325
  validation: {
585276
- testsRan: false,
585277
- // Would need to track during task
585278
- testsPassed: false,
585279
- buildSucceeded: true
585280
- // Assume success if task completed
585326
+ testsRan: validationStatus.testsRan,
585327
+ testsPassed: validationStatus.testsPassed,
585328
+ buildSucceeded: validationStatus.buildSucceeded
585281
585329
  },
585282
585330
  eligible: result.completed,
585283
585331
  handoffAt: (/* @__PURE__ */ new Date()).toISOString()
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.187.443",
3
+ "version": "0.187.445",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "open-agents-ai",
9
- "version": "0.187.443",
9
+ "version": "0.187.445",
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.443",
3
+ "version": "0.187.445",
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",