open-agents-ai 0.41.0 → 0.41.1

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 (2) hide show
  1. package/dist/index.js +67 -14
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -26041,6 +26041,63 @@ function gatherMemorySnippets(root) {
26041
26041
  }
26042
26042
  return snippets;
26043
26043
  }
26044
+ function createDMNEventHandler(verbose, writeContent) {
26045
+ return (event) => {
26046
+ switch (event.type) {
26047
+ case "tool_call":
26048
+ if (verbose) {
26049
+ writeContent(() => {
26050
+ const args = event.toolArgs ?? {};
26051
+ renderToolCallStart(event.toolName ?? "unknown", args, true);
26052
+ });
26053
+ } else {
26054
+ const argSummary = formatDMNToolArgs(event.toolName ?? "", event.toolArgs ?? {});
26055
+ writeContent(() => process.stdout.write(` ${c2.dim(`DMN \u2192 ${event.toolName}`)}${argSummary ? c2.dim(`: ${argSummary}`) : ""}
26056
+ `));
26057
+ }
26058
+ break;
26059
+ case "tool_result":
26060
+ if (verbose) {
26061
+ writeContent(() => {
26062
+ renderToolResult(event.toolName ?? "unknown", event.success ?? false, event.content ?? "", true);
26063
+ });
26064
+ }
26065
+ break;
26066
+ case "model_response":
26067
+ if (verbose && event.content) {
26068
+ const preview = event.content.length > 200 ? event.content.slice(0, 200) + "..." : event.content;
26069
+ writeContent(() => renderVerbose(`DMN thinking: ${preview}`));
26070
+ }
26071
+ break;
26072
+ case "token_usage":
26073
+ if (verbose && event.tokenUsage) {
26074
+ writeContent(() => renderVerbose(`DMN tokens \u2014 prompt: ${event.tokenUsage.promptTokens} | completion: ${event.tokenUsage.completionTokens} | ctx: ~${event.tokenUsage.estimatedContextTokens.toLocaleString()}`));
26075
+ }
26076
+ break;
26077
+ }
26078
+ };
26079
+ }
26080
+ function formatDMNToolArgs(toolName, args) {
26081
+ switch (toolName) {
26082
+ case "memory_read":
26083
+ case "memory_search":
26084
+ return String(args["topic"] ?? args["query"] ?? "").slice(0, 60);
26085
+ case "file_read":
26086
+ return String(args["path"] ?? "").slice(0, 80);
26087
+ case "list_directory":
26088
+ return String(args["path"] ?? ".").slice(0, 80);
26089
+ case "shell":
26090
+ return String(args["command"] ?? "").slice(0, 80);
26091
+ case "memory_write":
26092
+ return `${args["topic"] ?? ""}.${args["key"] ?? ""}`;
26093
+ case "grep_search":
26094
+ return String(args["pattern"] ?? "").slice(0, 60);
26095
+ case "find_files":
26096
+ return String(args["pattern"] ?? "").slice(0, 60);
26097
+ default:
26098
+ return "";
26099
+ }
26100
+ }
26044
26101
  function startTask(task, config, repoRoot, voice, stream, taskStores, bruteForce, statusBar, sudoCallback, costTracker, onComplete, taskType, contextWindowSize, modelCaps, personality, deepContext, onCompaction) {
26045
26102
  const voiceStyleMap = {
26046
26103
  concise: 1,
@@ -26623,12 +26680,8 @@ Respond concisely and safely.`;
26623
26680
  statusBar.setProcessing(true);
26624
26681
  statusBar.setBrailleMetrics({ isDreaming: true });
26625
26682
  try {
26626
- const proposal = await dmnEngine.runCycle((event) => {
26627
- if (event.type === "tool_call") {
26628
- writeContent(() => process.stdout.write(` ${c2.dim(`DMN \u2192 ${event.toolName}`)}
26629
- `));
26630
- }
26631
- });
26683
+ const dmnHandler = createDMNEventHandler(currentConfig.verbose ?? false, writeContent);
26684
+ const proposal = await dmnEngine.runCycle(dmnHandler);
26632
26685
  statusBar.setProcessing(false);
26633
26686
  statusBar.setBrailleMetrics({ isDreaming: false });
26634
26687
  if (proposal) {
@@ -26914,10 +26967,14 @@ Rationale: ${proposal.rationale}${provenanceNote}`;
26914
26967
  statusBar.setProcessing(true);
26915
26968
  statusBar.setBrailleMetrics({ isDreaming: true });
26916
26969
  dreamEngine.start(mode, (event) => {
26970
+ const isVerbose = currentConfig.verbose ?? false;
26917
26971
  if (event.type === "tool_call") {
26918
- writeContent(() => renderToolCallStart(event.toolName ?? "unknown", event.toolArgs ?? {}));
26972
+ writeContent(() => renderToolCallStart(event.toolName ?? "unknown", event.toolArgs ?? {}, isVerbose));
26919
26973
  } else if (event.type === "tool_result") {
26920
- writeContent(() => renderToolResult(event.toolName ?? "unknown", event.success ?? false, event.content ?? ""));
26974
+ writeContent(() => renderToolResult(event.toolName ?? "unknown", event.success ?? false, event.content ?? "", isVerbose));
26975
+ } else if (event.type === "model_response" && isVerbose && event.content) {
26976
+ const preview = event.content.length > 300 ? event.content.slice(0, 300) + "..." : event.content;
26977
+ writeContent(() => renderVerbose(`Dream thinking: ${preview}`));
26921
26978
  } else if (event.type === "token_usage" && event.tokenUsage) {
26922
26979
  statusBar.updateMetrics({
26923
26980
  ...event.tokenUsage,
@@ -27635,12 +27692,8 @@ Respond concisely and safely.`;
27635
27692
  statusBar.setProcessing(true);
27636
27693
  statusBar.setBrailleMetrics({ isDreaming: true });
27637
27694
  try {
27638
- const proposal = await dmnEngine.runCycle((event) => {
27639
- if (event.type === "tool_call") {
27640
- writeContent(() => process.stdout.write(` ${c2.dim(`DMN \u2192 ${event.toolName}`)}
27641
- `));
27642
- }
27643
- });
27695
+ const dmnHandler = createDMNEventHandler(currentConfig.verbose ?? false, writeContent);
27696
+ const proposal = await dmnEngine.runCycle(dmnHandler);
27644
27697
  statusBar.setProcessing(false);
27645
27698
  statusBar.setBrailleMetrics({ isDreaming: false });
27646
27699
  if (proposal) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "open-agents-ai",
3
- "version": "0.41.0",
3
+ "version": "0.41.1",
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",