@compilr-dev/cli 0.5.3 → 0.5.4

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.
Binary file
package/dist/repl-v2.js CHANGED
@@ -19,7 +19,7 @@ import { initSessionRegistry, getSessionRegistry, setActiveTerminalSessionId, ge
19
19
  import { initFileLockManager } from './multi-agent/file-locks.js';
20
20
  import { initNotificationManager, getNotificationManager } from './multi-agent/notification-manager.js';
21
21
  import { getSessionsPath } from './settings/paths.js';
22
- import { setMetaToolFilter } from './tools.js';
22
+ import { setMetaToolFilter, isMetaToolSilent, todoStore } from './tools.js';
23
23
  import { getCurrentProject } from './tools/project-db.js';
24
24
  import { TerminalUI } from './ui/terminal-ui.js';
25
25
  import * as terminal from './ui/terminal.js';
@@ -2357,7 +2357,7 @@ export class ReplV2 {
2357
2357
  this.ui.addBashCommand(event.toolUseId, command);
2358
2358
  }
2359
2359
  // Update spinner with tool name (skip silent tools)
2360
- if (!this.agent?.isToolSilent(event.name)) {
2360
+ if (!this.agent?.isToolSilent(event.name) && !isMetaToolSilent(event.name)) {
2361
2361
  if (event.name === 'task' && event.toolUseId) {
2362
2362
  const subagentType = typeof lastToolInput.subagent_type === 'string'
2363
2363
  ? lastToolInput.subagent_type
@@ -2434,30 +2434,37 @@ export class ReplV2 {
2434
2434
  this.ui.setCurrentTool(null);
2435
2435
  continue;
2436
2436
  }
2437
- // Handle todo_write - update UI state
2438
- if (toolName === 'todo_write' && toolInput && Array.isArray(toolInput.todos)) {
2439
- const todos = toolInput.todos.map((t) => {
2440
- const content = typeof t.content === 'string' ? t.content :
2441
- typeof t.title === 'string' ? t.title :
2442
- typeof t.task === 'string' ? t.task :
2443
- typeof t.description === 'string' ? t.description :
2444
- typeof t.text === 'string' ? t.text : 'Untitled task';
2445
- const status = (typeof t.status === 'string' && ['pending', 'in_progress', 'completed'].includes(t.status)
2446
- ? t.status
2447
- : 'pending');
2448
- const activeForm = typeof t.activeForm === 'string' ? t.activeForm : undefined;
2449
- const owner = typeof t.owner === 'string' ? t.owner : undefined;
2450
- const blockedBy = Array.isArray(t.blockedBy)
2451
- ? t.blockedBy.filter((n) => typeof n === 'number')
2452
- : undefined;
2453
- return { content, status, activeForm, owner, blockedBy };
2437
+ // Handle todo_write - update UI state from todoStore
2438
+ // (store is already updated by the tool's execute handler, regardless of
2439
+ // whether the tool was called directly or via the meta-registry fallback)
2440
+ if (toolName === 'todo_write') {
2441
+ // Get todos in creation order (getAll() sorts by status which breaks
2442
+ // task numbering the footer renderer handles status sorting itself)
2443
+ const storeTodos = todoStore.getAll()
2444
+ .sort((a, b) => {
2445
+ const aNum = parseInt(a.id.replace('todo-', ''), 10);
2446
+ const bNum = parseInt(b.id.replace('todo-', ''), 10);
2447
+ return aNum - bNum;
2454
2448
  });
2455
- this.ui.setTodos(todos);
2449
+ const allDone = storeTodos.length > 0 && storeTodos.every((t) => t.status === 'completed');
2450
+ if (allDone) {
2451
+ this.ui.setTodos([]);
2452
+ }
2453
+ else {
2454
+ this.ui.setTodos(storeTodos.map((t) => ({
2455
+ content: t.content,
2456
+ status: t.status,
2457
+ activeForm: t.activeForm,
2458
+ owner: t.owner,
2459
+ blockedBy: t.blockedBy,
2460
+ })));
2461
+ }
2456
2462
  this.ui.setCurrentTool(null);
2457
2463
  continue;
2458
2464
  }
2459
2465
  // Skip silent tools (no output needed)
2460
- if (this.agent?.isToolSilent(toolName)) {
2466
+ // Check both direct registry and meta-registry for the silent flag
2467
+ if (this.agent?.isToolSilent(toolName) || isMetaToolSilent(toolName)) {
2461
2468
  this.ui.setCurrentTool(null);
2462
2469
  continue;
2463
2470
  }
package/dist/tools.d.ts CHANGED
@@ -19,6 +19,11 @@ import { TodoStore, type Tool } from '@compilr-dev/sdk';
19
19
  export declare const todoStore: TodoStore;
20
20
  import { setMetaToolFilter, getRegisteredMetaTools } from './tools/meta-tools.js';
21
21
  export { setMetaToolFilter, getRegisteredMetaTools };
22
+ /**
23
+ * Check if a tool in the meta-registry is marked as silent.
24
+ * Used by the repl to suppress output for warm tools like todo_write/todo_read.
25
+ */
26
+ export declare function isMetaToolSilent(name: string): boolean;
22
27
  /**
23
28
  * Creates the tool registry with all available tools.
24
29
  * Returns tools as-is - the Agent.registerTools() method handles typing.
package/dist/tools.js CHANGED
@@ -132,6 +132,15 @@ import { allDbTools, allFactoryTools } from './tools/db-tools.js';
132
132
  import { initializeMetaToolRegistry, generateToolIndex, getMetaToolCount, META_TOOLS_SYSTEM_PROMPT_PREFIX, setMetaToolFilter, getRegisteredMetaTools, createMetaToolFallback, getToolInfoTool, } from './tools/meta-tools.js';
133
133
  // Re-export for use in agent.ts
134
134
  export { setMetaToolFilter, getRegisteredMetaTools };
135
+ /**
136
+ * Check if a tool in the meta-registry is marked as silent.
137
+ * Used by the repl to suppress output for warm tools like todo_write/todo_read.
138
+ */
139
+ export function isMetaToolSilent(name) {
140
+ const tools = getRegisteredMetaTools();
141
+ const tool = tools.find((t) => t.definition.name === name);
142
+ return tool?.silent === true;
143
+ }
135
144
  // =============================================================================
136
145
  // DIRECT TOOLS - Always available, called by name
137
146
  // =============================================================================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@compilr-dev/cli",
3
- "version": "0.5.3",
3
+ "version": "0.5.4",
4
4
  "description": "AI-powered coding assistant CLI using @compilr-dev/agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -54,11 +54,11 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "@anthropic-ai/sdk": "^0.74.0",
57
- "@compilr-dev/agents": "^0.3.22",
57
+ "@compilr-dev/agents": "^0.3.23",
58
58
  "@compilr-dev/agents-coding": "^1.0.4",
59
59
  "@compilr-dev/editor-core": "^0.0.2",
60
60
  "@compilr-dev/factory": "^0.1.12",
61
- "@compilr-dev/sdk": "^0.1.18",
61
+ "@compilr-dev/sdk": "^0.1.20",
62
62
  "@compilr-dev/ui-core": "^0.0.1",
63
63
  "@modelcontextprotocol/sdk": "^1.23.0",
64
64
  "better-sqlite3": "^12.5.0",