cmdr-agent 2.1.2 → 2.3.0

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 (139) hide show
  1. package/dist/bin/cmdr.js +4 -0
  2. package/dist/bin/cmdr.js.map +1 -1
  3. package/dist/package.json +1 -1
  4. package/dist/src/cli/args.d.ts +4 -0
  5. package/dist/src/cli/args.d.ts.map +1 -1
  6. package/dist/src/cli/args.js +15 -0
  7. package/dist/src/cli/args.js.map +1 -1
  8. package/dist/src/cli/commands.js +21 -1
  9. package/dist/src/cli/commands.js.map +1 -1
  10. package/dist/src/cli/ink/App.d.ts +2 -0
  11. package/dist/src/cli/ink/App.d.ts.map +1 -1
  12. package/dist/src/cli/ink/App.js +71 -7
  13. package/dist/src/cli/ink/App.js.map +1 -1
  14. package/dist/src/cli/repl.d.ts +4 -0
  15. package/dist/src/cli/repl.d.ts.map +1 -1
  16. package/dist/src/cli/repl.js +83 -20
  17. package/dist/src/cli/repl.js.map +1 -1
  18. package/dist/src/config/mcp-registry.d.ts +45 -0
  19. package/dist/src/config/mcp-registry.d.ts.map +1 -0
  20. package/dist/src/config/mcp-registry.js +156 -0
  21. package/dist/src/config/mcp-registry.js.map +1 -0
  22. package/dist/src/config/schema.d.ts +8 -8
  23. package/dist/src/core/agent-runner.d.ts +5 -0
  24. package/dist/src/core/agent-runner.d.ts.map +1 -1
  25. package/dist/src/core/agent-runner.js +34 -2
  26. package/dist/src/core/agent-runner.js.map +1 -1
  27. package/dist/src/core/agent.d.ts +2 -1
  28. package/dist/src/core/agent.d.ts.map +1 -1
  29. package/dist/src/core/agent.js +5 -1
  30. package/dist/src/core/agent.js.map +1 -1
  31. package/dist/src/core/content-replacement.d.ts +44 -0
  32. package/dist/src/core/content-replacement.d.ts.map +1 -0
  33. package/dist/src/core/content-replacement.js +67 -0
  34. package/dist/src/core/content-replacement.js.map +1 -0
  35. package/dist/src/core/event-bus.d.ts +129 -0
  36. package/dist/src/core/event-bus.d.ts.map +1 -0
  37. package/dist/src/core/event-bus.js +103 -0
  38. package/dist/src/core/event-bus.js.map +1 -0
  39. package/dist/src/core/hooks.d.ts +61 -0
  40. package/dist/src/core/hooks.d.ts.map +1 -0
  41. package/dist/src/core/hooks.js +140 -0
  42. package/dist/src/core/hooks.js.map +1 -0
  43. package/dist/src/core/orchestrator.d.ts +17 -1
  44. package/dist/src/core/orchestrator.d.ts.map +1 -1
  45. package/dist/src/core/orchestrator.js +95 -1
  46. package/dist/src/core/orchestrator.js.map +1 -1
  47. package/dist/src/core/permissions.d.ts +74 -3
  48. package/dist/src/core/permissions.d.ts.map +1 -1
  49. package/dist/src/core/permissions.js +230 -11
  50. package/dist/src/core/permissions.js.map +1 -1
  51. package/dist/src/core/presets.d.ts.map +1 -1
  52. package/dist/src/core/presets.js +1 -0
  53. package/dist/src/core/presets.js.map +1 -1
  54. package/dist/src/core/types.d.ts +22 -1
  55. package/dist/src/core/types.d.ts.map +1 -1
  56. package/dist/src/llm/anthropic.d.ts +27 -0
  57. package/dist/src/llm/anthropic.d.ts.map +1 -0
  58. package/dist/src/llm/anthropic.js +269 -0
  59. package/dist/src/llm/anthropic.js.map +1 -0
  60. package/dist/src/llm/ollama.d.ts.map +1 -1
  61. package/dist/src/llm/ollama.js +16 -4
  62. package/dist/src/llm/ollama.js.map +1 -1
  63. package/dist/src/llm/openai.d.ts +25 -0
  64. package/dist/src/llm/openai.d.ts.map +1 -0
  65. package/dist/src/llm/openai.js +299 -0
  66. package/dist/src/llm/openai.js.map +1 -0
  67. package/dist/src/llm/provider-factory.d.ts +35 -0
  68. package/dist/src/llm/provider-factory.d.ts.map +1 -0
  69. package/dist/src/llm/provider-factory.js +73 -0
  70. package/dist/src/llm/provider-factory.js.map +1 -0
  71. package/dist/src/memory/consolidation.d.ts +37 -0
  72. package/dist/src/memory/consolidation.d.ts.map +1 -0
  73. package/dist/src/memory/consolidation.js +148 -0
  74. package/dist/src/memory/consolidation.js.map +1 -0
  75. package/dist/src/memory/memory-manager.d.ts +39 -0
  76. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  77. package/dist/src/memory/memory-manager.js +96 -0
  78. package/dist/src/memory/memory-manager.js.map +1 -0
  79. package/dist/src/plugins/mcp-client.d.ts +14 -5
  80. package/dist/src/plugins/mcp-client.d.ts.map +1 -1
  81. package/dist/src/plugins/mcp-client.js +197 -43
  82. package/dist/src/plugins/mcp-client.js.map +1 -1
  83. package/dist/src/scheduling/task-scheduler.d.ts +51 -0
  84. package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
  85. package/dist/src/scheduling/task-scheduler.js +127 -0
  86. package/dist/src/scheduling/task-scheduler.js.map +1 -0
  87. package/dist/src/session/prompt-builder.d.ts +6 -0
  88. package/dist/src/session/prompt-builder.d.ts.map +1 -1
  89. package/dist/src/session/prompt-builder.js +21 -2
  90. package/dist/src/session/prompt-builder.js.map +1 -1
  91. package/dist/src/session/prompt-cache.d.ts +33 -0
  92. package/dist/src/session/prompt-cache.d.ts.map +1 -0
  93. package/dist/src/session/prompt-cache.js +54 -0
  94. package/dist/src/session/prompt-cache.js.map +1 -0
  95. package/dist/src/tools/built-in/cron-tools.d.ts +19 -0
  96. package/dist/src/tools/built-in/cron-tools.d.ts.map +1 -0
  97. package/dist/src/tools/built-in/cron-tools.js +86 -0
  98. package/dist/src/tools/built-in/cron-tools.js.map +1 -0
  99. package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
  100. package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
  101. package/dist/src/tools/built-in/diagnostics.js +119 -0
  102. package/dist/src/tools/built-in/diagnostics.js.map +1 -0
  103. package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
  104. package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
  105. package/dist/src/tools/built-in/git-worktree.js +75 -0
  106. package/dist/src/tools/built-in/git-worktree.js.map +1 -0
  107. package/dist/src/tools/built-in/index.d.ts +11 -1
  108. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  109. package/dist/src/tools/built-in/index.js +19 -2
  110. package/dist/src/tools/built-in/index.js.map +1 -1
  111. package/dist/src/tools/built-in/mcp-resource-tools.d.ts +16 -0
  112. package/dist/src/tools/built-in/mcp-resource-tools.d.ts.map +1 -0
  113. package/dist/src/tools/built-in/mcp-resource-tools.js +73 -0
  114. package/dist/src/tools/built-in/mcp-resource-tools.js.map +1 -0
  115. package/dist/src/tools/built-in/memory.d.ts +15 -0
  116. package/dist/src/tools/built-in/memory.d.ts.map +1 -0
  117. package/dist/src/tools/built-in/memory.js +58 -0
  118. package/dist/src/tools/built-in/memory.js.map +1 -0
  119. package/dist/src/tools/built-in/notebook.d.ts +22 -0
  120. package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
  121. package/dist/src/tools/built-in/notebook.js +207 -0
  122. package/dist/src/tools/built-in/notebook.js.map +1 -0
  123. package/dist/src/tools/built-in/plan-tools.d.ts +13 -0
  124. package/dist/src/tools/built-in/plan-tools.d.ts.map +1 -0
  125. package/dist/src/tools/built-in/plan-tools.js +42 -0
  126. package/dist/src/tools/built-in/plan-tools.js.map +1 -0
  127. package/dist/src/tools/built-in/task-tools.d.ts +22 -0
  128. package/dist/src/tools/built-in/task-tools.d.ts.map +1 -0
  129. package/dist/src/tools/built-in/task-tools.js +113 -0
  130. package/dist/src/tools/built-in/task-tools.js.map +1 -0
  131. package/dist/src/tools/built-in/todo-tool.d.ts +21 -0
  132. package/dist/src/tools/built-in/todo-tool.d.ts.map +1 -0
  133. package/dist/src/tools/built-in/todo-tool.js +52 -0
  134. package/dist/src/tools/built-in/todo-tool.js.map +1 -0
  135. package/dist/src/tools/built-in/web-search.d.ts +9 -0
  136. package/dist/src/tools/built-in/web-search.d.ts.map +1 -0
  137. package/dist/src/tools/built-in/web-search.js +89 -0
  138. package/dist/src/tools/built-in/web-search.js.map +1 -0
  139. package/package.json +1 -1
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Built-in git_worktree tool — manage git worktrees for parallel branch work.
3
+ *
4
+ * Allows the agent to create, list, and remove worktrees, enabling
5
+ * work on multiple branches simultaneously without stashing.
6
+ */
7
+ import { spawn } from 'child_process';
8
+ import { z } from 'zod';
9
+ import { defineTool } from '../registry.js';
10
+ function runGit(args, cwd) {
11
+ return new Promise((resolve) => {
12
+ const child = spawn('git', args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
13
+ const chunks = [];
14
+ const errChunks = [];
15
+ child.stdout.on('data', (c) => chunks.push(c));
16
+ child.stderr.on('data', (c) => errChunks.push(c));
17
+ child.on('close', (code) => {
18
+ resolve({
19
+ stdout: Buffer.concat(chunks).toString('utf-8').trim(),
20
+ stderr: Buffer.concat(errChunks).toString('utf-8').trim(),
21
+ code: code ?? 1,
22
+ });
23
+ });
24
+ child.on('error', (err) => {
25
+ resolve({ stdout: '', stderr: err.message, code: 1 });
26
+ });
27
+ });
28
+ }
29
+ export const gitWorktreeTool = defineTool({
30
+ name: 'git_worktree',
31
+ description: 'Manage git worktrees for parallel branch work. ' +
32
+ 'Actions: list (show worktrees), add (create new worktree), remove (delete worktree).',
33
+ inputSchema: z.object({
34
+ action: z.enum(['list', 'add', 'remove']).describe('Worktree action to perform.'),
35
+ path: z.string().optional().describe('Path for the new worktree (required for add/remove).'),
36
+ branch: z.string().optional().describe('Branch name for the worktree (for add). Created if -b is needed.'),
37
+ createBranch: z.boolean().optional().describe('Create a new branch for the worktree.'),
38
+ }),
39
+ execute: async (input, context) => {
40
+ const cwd = context.cwd ?? process.cwd();
41
+ switch (input.action) {
42
+ case 'list': {
43
+ const result = await runGit(['worktree', 'list', '--porcelain'], cwd);
44
+ if (result.code !== 0)
45
+ return { data: result.stderr || 'Failed to list worktrees', isError: true };
46
+ return { data: result.stdout || '(no worktrees)' };
47
+ }
48
+ case 'add': {
49
+ if (!input.path)
50
+ return { data: '"path" is required for add action', isError: true };
51
+ const args = ['worktree', 'add'];
52
+ if (input.createBranch && input.branch) {
53
+ args.push('-b', input.branch);
54
+ }
55
+ args.push(input.path);
56
+ if (input.branch && !input.createBranch) {
57
+ args.push(input.branch);
58
+ }
59
+ const result = await runGit(args, cwd);
60
+ if (result.code !== 0)
61
+ return { data: result.stderr || 'Failed to add worktree', isError: true };
62
+ return { data: result.stdout || `Worktree created at ${input.path}` };
63
+ }
64
+ case 'remove': {
65
+ if (!input.path)
66
+ return { data: '"path" is required for remove action', isError: true };
67
+ const result = await runGit(['worktree', 'remove', input.path], cwd);
68
+ if (result.code !== 0)
69
+ return { data: result.stderr || 'Failed to remove worktree', isError: true };
70
+ return { data: result.stdout || `Worktree at ${input.path} removed` };
71
+ }
72
+ }
73
+ },
74
+ });
75
+ //# sourceMappingURL=git-worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree.js","sourceRoot":"","sources":["../../../../src/tools/built-in/git-worktree.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,20 @@ import { globTool } from './glob.js';
12
12
  import { gitDiffTool } from './git-diff.js';
13
13
  import { gitLogTool } from './git-log.js';
14
14
  import { gitCommitTool, gitBranchTool } from './git-commit.js';
15
+ import { gitWorktreeTool } from './git-worktree.js';
15
16
  import { thinkTool } from './think.js';
16
17
  import { webFetchTool } from './web-fetch.js';
18
+ import { webSearchTool } from './web-search.js';
17
19
  import { askUserTool } from './ask-user.js';
18
- export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, thinkTool, webFetchTool, askUserTool, };
20
+ import { memoryReadTool, memoryWriteTool } from './memory.js';
21
+ import { lspDiagnosticsTool } from './diagnostics.js';
22
+ import { notebookReadTool, notebookEditTool, notebookRunTool } from './notebook.js';
23
+ import { todoWriteTool } from './todo-tool.js';
24
+ import { taskCreateTool, taskListTool, taskGetTool, taskStopTool } from './task-tools.js';
25
+ import { cronCreateTool, cronListTool, cronDeleteTool } from './cron-tools.js';
26
+ import { enterPlanModeTool, exitPlanModeTool } from './plan-tools.js';
27
+ import { mcpListResourcesTool, mcpReadResourceTool } from './mcp-resource-tools.js';
28
+ export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitWorktreeTool, lspDiagnosticsTool, notebookReadTool, notebookEditTool, notebookRunTool, thinkTool, webFetchTool, webSearchTool, askUserTool, memoryReadTool, memoryWriteTool, todoWriteTool, taskCreateTool, taskListTool, taskGetTool, taskStopTool, cronCreateTool, cronListTool, cronDeleteTool, enterPlanModeTool, exitPlanModeTool, mcpListResourcesTool, mcpReadResourceTool, };
19
29
  export declare const BUILT_IN_TOOLS: ToolDefinition<any>[];
20
30
  export declare function registerBuiltInTools(registry: ToolRegistry): void;
21
31
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EACL,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EACnD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EACzE,SAAS,EAAE,YAAY,EAAE,WAAW,GACrC,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAI/C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAEnF,OAAO,EACL,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EACnD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EACzE,eAAe,EAAE,kBAAkB,EACnC,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EACnD,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EACpF,aAAa,EACb,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EACvD,cAAc,EAAE,YAAY,EAAE,cAAc,EAC5C,iBAAiB,EAAE,gBAAgB,EACnC,oBAAoB,EAAE,mBAAmB,GAC1C,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAW/C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMjE"}
@@ -10,15 +10,32 @@ import { globTool } from './glob.js';
10
10
  import { gitDiffTool } from './git-diff.js';
11
11
  import { gitLogTool } from './git-log.js';
12
12
  import { gitCommitTool, gitBranchTool } from './git-commit.js';
13
+ import { gitWorktreeTool } from './git-worktree.js';
13
14
  import { thinkTool } from './think.js';
14
15
  import { webFetchTool } from './web-fetch.js';
16
+ import { webSearchTool } from './web-search.js';
15
17
  import { askUserTool } from './ask-user.js';
16
- export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, thinkTool, webFetchTool, askUserTool, };
18
+ import { memoryReadTool, memoryWriteTool } from './memory.js';
19
+ import { lspDiagnosticsTool } from './diagnostics.js';
20
+ import { notebookReadTool, notebookEditTool, notebookRunTool } from './notebook.js';
21
+ import { todoWriteTool } from './todo-tool.js';
22
+ import { taskCreateTool, taskListTool, taskGetTool, taskStopTool } from './task-tools.js';
23
+ import { cronCreateTool, cronListTool, cronDeleteTool } from './cron-tools.js';
24
+ import { enterPlanModeTool, exitPlanModeTool } from './plan-tools.js';
25
+ import { mcpListResourcesTool, mcpReadResourceTool } from './mcp-resource-tools.js';
26
+ export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitWorktreeTool, lspDiagnosticsTool, notebookReadTool, notebookEditTool, notebookRunTool, thinkTool, webFetchTool, webSearchTool, askUserTool, memoryReadTool, memoryWriteTool, todoWriteTool, taskCreateTool, taskListTool, taskGetTool, taskStopTool, cronCreateTool, cronListTool, cronDeleteTool, enterPlanModeTool, exitPlanModeTool, mcpListResourcesTool, mcpReadResourceTool, };
17
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
28
  export const BUILT_IN_TOOLS = [
19
29
  bashTool, fileReadTool, fileWriteTool, fileEditTool,
20
30
  grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool,
21
- thinkTool, webFetchTool, askUserTool,
31
+ gitWorktreeTool, lspDiagnosticsTool,
32
+ notebookReadTool, notebookEditTool, notebookRunTool,
33
+ thinkTool, webFetchTool, webSearchTool, askUserTool, memoryReadTool, memoryWriteTool,
34
+ todoWriteTool,
35
+ taskCreateTool, taskListTool, taskGetTool, taskStopTool,
36
+ cronCreateTool, cronListTool, cronDeleteTool,
37
+ enterPlanModeTool, exitPlanModeTool,
38
+ mcpListResourcesTool, mcpReadResourceTool,
22
39
  ];
23
40
  export function registerBuiltInTools(registry) {
24
41
  for (const tool of BUILT_IN_TOOLS) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EACL,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EACnD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EACzE,SAAS,EAAE,YAAY,EAAE,WAAW,GACrC,CAAA;AAED,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY;IACnD,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa;IACzE,SAAS,EAAE,YAAY,EAAE,WAAW;CACrC,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAsB;IACzD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * MCP resource tools — list and read resources from connected MCP servers.
3
+ *
4
+ * MCP servers can expose resources (files, database schemas, API docs, etc.)
5
+ * in addition to tools. These tools let the LLM discover and read them.
6
+ */
7
+ import type { McpClient } from '../../plugins/mcp-client.js';
8
+ export declare function setMcpClient(client: McpClient): void;
9
+ export declare const mcpListResourcesTool: import("../registry.js").ToolDefinition<{
10
+ server?: string | undefined;
11
+ }>;
12
+ export declare const mcpReadResourceTool: import("../registry.js").ToolDefinition<{
13
+ server: string;
14
+ uri: string;
15
+ }>;
16
+ //# sourceMappingURL=mcp-resource-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-resource-tools.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/mcp-resource-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAI5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,eAAO,MAAM,oBAAoB;;EAkC/B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;EAgC9B,CAAA"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * MCP resource tools — list and read resources from connected MCP servers.
3
+ *
4
+ * MCP servers can expose resources (files, database schemas, API docs, etc.)
5
+ * in addition to tools. These tools let the LLM discover and read them.
6
+ */
7
+ import { z } from 'zod';
8
+ import { defineTool } from '../registry.js';
9
+ let mcpClientRef = null;
10
+ export function setMcpClient(client) {
11
+ mcpClientRef = client;
12
+ }
13
+ export const mcpListResourcesTool = defineTool({
14
+ name: 'mcp_list_resources',
15
+ description: 'List available resources from connected MCP servers. Resources are additional context like files, database schemas, or documentation that MCP servers can provide.',
16
+ inputSchema: z.object({
17
+ server: z.string().optional().describe('Optional: filter to a specific MCP server name'),
18
+ }),
19
+ execute: async (input) => {
20
+ if (!mcpClientRef) {
21
+ return { data: 'No MCP client available', isError: true };
22
+ }
23
+ const connections = mcpClientRef.listConnections();
24
+ if (connections.length === 0) {
25
+ return { data: 'No MCP servers connected. Use /mcp to manage connections.' };
26
+ }
27
+ const filtered = input.server
28
+ ? connections.filter(c => c.name === input.server)
29
+ : connections;
30
+ if (filtered.length === 0) {
31
+ return { data: `MCP server "${input.server}" not found. Connected: ${connections.map(c => c.name).join(', ')}`, isError: true };
32
+ }
33
+ // Note: Resource listing requires the MCP server to support resources/list.
34
+ // This is a best-effort — many servers only support tools.
35
+ const lines = filtered.map(c => `${c.name} (${c.transport}) — ${c.tools} tools${c.connected ? '' : ' [disconnected]'}`);
36
+ return {
37
+ data: `Connected MCP servers:\n${lines.join('\n')}\n\nNote: Use mcp_read_resource with a specific server and resource URI to read content.`,
38
+ };
39
+ },
40
+ });
41
+ export const mcpReadResourceTool = defineTool({
42
+ name: 'mcp_read_resource',
43
+ description: 'Read a specific resource from an MCP server by URI. The resource URI format depends on the server (e.g. "file:///path", "db://schema/table").',
44
+ inputSchema: z.object({
45
+ server: z.string().describe('The MCP server name'),
46
+ uri: z.string().describe('The resource URI to read'),
47
+ }),
48
+ execute: async (input) => {
49
+ if (!mcpClientRef) {
50
+ return { data: 'No MCP client available', isError: true };
51
+ }
52
+ // Validate URI format
53
+ try {
54
+ new URL(input.uri);
55
+ }
56
+ catch {
57
+ // Allow relative URIs too — some MCP servers use simple paths
58
+ }
59
+ try {
60
+ // Use the MCP client's callTool to send a resources/read request
61
+ // This piggybacks on the existing transport infrastructure
62
+ const result = await mcpClientRef.callTool(input.server, '__resources_read__', {
63
+ uri: input.uri,
64
+ });
65
+ return result;
66
+ }
67
+ catch (err) {
68
+ const msg = err instanceof Error ? err.message : String(err);
69
+ return { data: `Failed to read resource: ${msg}`, isError: true };
70
+ }
71
+ },
72
+ });
73
+ //# sourceMappingURL=mcp-resource-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-resource-tools.js","sourceRoot":"","sources":["../../../../src/tools/built-in/mcp-resource-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Built-in memory tools — read and write persistent MEMORY.md files.
3
+ *
4
+ * Two scopes:
5
+ * - project: .cmdr/MEMORY.md — project conventions, build commands, patterns
6
+ * - user: ~/.cmdr/MEMORY.md — personal preferences, global patterns
7
+ */
8
+ export declare const memoryReadTool: import("../registry.js").ToolDefinition<{
9
+ scope: "user" | "project";
10
+ }>;
11
+ export declare const memoryWriteTool: import("../registry.js").ToolDefinition<{
12
+ content: string;
13
+ scope: "user" | "project";
14
+ }>;
15
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,eAAO,MAAM,cAAc;;EA4BzB,CAAA;AAEF,eAAO,MAAM,eAAe;;;EA0B1B,CAAA"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Built-in memory tools — read and write persistent MEMORY.md files.
3
+ *
4
+ * Two scopes:
5
+ * - project: .cmdr/MEMORY.md — project conventions, build commands, patterns
6
+ * - user: ~/.cmdr/MEMORY.md — personal preferences, global patterns
7
+ */
8
+ import { z } from 'zod';
9
+ import { defineTool } from '../registry.js';
10
+ export const memoryReadTool = defineTool({
11
+ name: 'memory_read',
12
+ description: 'Read persistent memory notes. Scope "project" reads .cmdr/MEMORY.md (repo-specific), ' +
13
+ 'scope "user" reads ~/.cmdr/MEMORY.md (global). Memory persists across sessions.',
14
+ inputSchema: z.object({
15
+ scope: z.enum(['project', 'user']).describe('Which memory file to read.'),
16
+ }),
17
+ execute: async (input, context) => {
18
+ try {
19
+ // MemoryManager is injected via context.metadata
20
+ const manager = context.metadata?.memoryManager;
21
+ if (!manager) {
22
+ return { data: 'Memory system not initialized.', isError: true };
23
+ }
24
+ const content = await manager.read(input.scope);
25
+ if (!content.trim()) {
26
+ return { data: `No ${input.scope} memory found. Use memory_write to save notes.` };
27
+ }
28
+ return { data: content };
29
+ }
30
+ catch (err) {
31
+ return { data: `Failed to read memory: ${err instanceof Error ? err.message : String(err)}`, isError: true };
32
+ }
33
+ },
34
+ });
35
+ export const memoryWriteTool = defineTool({
36
+ name: 'memory_write',
37
+ description: 'Save notes to persistent memory. Use "project" scope for repo-specific info ' +
38
+ '(build commands, conventions, architecture notes). Use "user" scope for personal ' +
39
+ 'preferences and global patterns. Content is appended with a date header.',
40
+ inputSchema: z.object({
41
+ scope: z.enum(['project', 'user']).describe('Which memory file to write to.'),
42
+ content: z.string().describe('The note to append to memory. Keep concise — bullet points preferred.'),
43
+ }),
44
+ execute: async (input, context) => {
45
+ try {
46
+ const manager = context.metadata?.memoryManager;
47
+ if (!manager) {
48
+ return { data: 'Memory system not initialized.', isError: true };
49
+ }
50
+ await manager.append(input.scope, input.content);
51
+ return { data: `Saved to ${input.scope} memory.` };
52
+ }
53
+ catch (err) {
54
+ return { data: `Failed to write memory: ${err instanceof Error ? err.message : String(err)}`, isError: true };
55
+ }
56
+ },
57
+ });
58
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/tools/built-in/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,uFAAuF;QACvF,iFAAiF;IAEnF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KAC1E,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,iDAAiD;YACjD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,aACkC,CAAA;YACpE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAClE,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC,KAAK,gDAAgD,EAAE,CAAA;YACpF,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC9G,CAAC;IACH,CAAC;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;IACxC,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,8EAA8E;QAC9E,mFAAmF;QACnF,0EAA0E;IAE5E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC7E,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;KACtG,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,aACkC,CAAA;YACpE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAClE,CAAC;YAED,MAAM,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;YAChD,OAAO,EAAE,IAAI,EAAE,YAAY,KAAK,CAAC,KAAK,UAAU,EAAE,CAAA;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,IAAI,EAAE,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;QAC/G,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Built-in notebook tool — read, write, and execute Jupyter notebook cells.
3
+ *
4
+ * Works with .ipynb files directly, parsing the notebook JSON format.
5
+ * Execution uses `jupyter nbconvert --execute` or `jupyter run` when available.
6
+ */
7
+ export declare const notebookReadTool: import("../registry.js").ToolDefinition<{
8
+ path: string;
9
+ cell?: number | undefined;
10
+ }>;
11
+ export declare const notebookEditTool: import("../registry.js").ToolDefinition<{
12
+ path: string;
13
+ action: "replace" | "insert" | "delete";
14
+ cell: number;
15
+ content?: string | undefined;
16
+ cell_type?: "code" | "markdown" | "raw" | undefined;
17
+ }>;
18
+ export declare const notebookRunTool: import("../registry.js").ToolDefinition<{
19
+ path: string;
20
+ cell?: number | undefined;
21
+ }>;
22
+ //# sourceMappingURL=notebook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/notebook.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0CH,eAAO,MAAM,gBAAgB;;;EAkC3B,CAAA;AAEF,eAAO,MAAM,gBAAgB;;;;;;EAiE3B,CAAA;AAEF,eAAO,MAAM,eAAe;;;EAgG1B,CAAA"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Built-in notebook tool — read, write, and execute Jupyter notebook cells.
3
+ *
4
+ * Works with .ipynb files directly, parsing the notebook JSON format.
5
+ * Execution uses `jupyter nbconvert --execute` or `jupyter run` when available.
6
+ */
7
+ import { readFile, writeFile } from 'node:fs/promises';
8
+ import { spawn } from 'node:child_process';
9
+ import { z } from 'zod';
10
+ import { defineTool } from '../registry.js';
11
+ function formatCell(cell, index) {
12
+ const type = cell.cell_type.toUpperCase();
13
+ const source = cell.source.join('');
14
+ const exec = cell.execution_count != null ? ` [${cell.execution_count}]` : '';
15
+ let output = `--- Cell ${index + 1} (${type})${exec} ---\n${source}`;
16
+ if (cell.outputs && cell.outputs.length > 0) {
17
+ const outputTexts = cell.outputs.map((o) => {
18
+ if (o.text)
19
+ return (Array.isArray(o.text) ? o.text.join('') : o.text);
20
+ if (o.data?.['text/plain'])
21
+ return Array.isArray(o.data['text/plain']) ? o.data['text/plain'].join('') : o.data['text/plain'];
22
+ if (o.ename)
23
+ return `${o.ename}: ${o.evalue}`;
24
+ return '';
25
+ }).filter(Boolean);
26
+ if (outputTexts.length > 0) {
27
+ output += `\n\n>> Output:\n${outputTexts.join('\n')}`;
28
+ }
29
+ }
30
+ return output;
31
+ }
32
+ export const notebookReadTool = defineTool({
33
+ name: 'notebook_read',
34
+ description: 'Read a Jupyter notebook (.ipynb) file. Returns cell contents with their types and outputs. ' +
35
+ 'Can read specific cells by index or the entire notebook.',
36
+ inputSchema: z.object({
37
+ path: z.string().describe('Path to the .ipynb file.'),
38
+ cell: z.number().optional().describe('0-based cell index to read. Omit to read all cells.'),
39
+ }),
40
+ execute: async (input, context) => {
41
+ const cwd = context.cwd ?? process.cwd();
42
+ const fullPath = input.path.startsWith('/') ? input.path : `${cwd}/${input.path}`;
43
+ try {
44
+ const raw = await readFile(fullPath, 'utf-8');
45
+ const nb = JSON.parse(raw);
46
+ if (input.cell != null) {
47
+ if (input.cell < 0 || input.cell >= nb.cells.length) {
48
+ return { data: `Cell index ${input.cell} out of range (0-${nb.cells.length - 1})`, isError: true };
49
+ }
50
+ return { data: formatCell(nb.cells[input.cell], input.cell) };
51
+ }
52
+ const kernelMeta = nb.metadata?.kernelspec;
53
+ const summary = `Notebook: ${nb.cells.length} cells (${kernelMeta?.display_name ?? 'unknown kernel'})\n\n`;
54
+ const cells = nb.cells.map((c, i) => formatCell(c, i)).join('\n\n');
55
+ return { data: summary + cells };
56
+ }
57
+ catch (err) {
58
+ return { data: `Failed to read notebook: ${err instanceof Error ? err.message : String(err)}`, isError: true };
59
+ }
60
+ },
61
+ });
62
+ export const notebookEditTool = defineTool({
63
+ name: 'notebook_edit',
64
+ description: 'Edit a Jupyter notebook cell. Can replace cell content, insert new cells, or delete cells.',
65
+ inputSchema: z.object({
66
+ path: z.string().describe('Path to the .ipynb file.'),
67
+ action: z.enum(['replace', 'insert', 'delete']).describe('Edit action.'),
68
+ cell: z.number().describe('0-based cell index (for replace/delete) or insertion position (for insert).'),
69
+ content: z.string().optional().describe('New cell content (for replace/insert).'),
70
+ cell_type: z.enum(['code', 'markdown', 'raw']).optional().describe('Cell type for insert (default: code).'),
71
+ }),
72
+ execute: async (input, context) => {
73
+ const cwd = context.cwd ?? process.cwd();
74
+ const fullPath = input.path.startsWith('/') ? input.path : `${cwd}/${input.path}`;
75
+ try {
76
+ const raw = await readFile(fullPath, 'utf-8');
77
+ const nb = JSON.parse(raw);
78
+ switch (input.action) {
79
+ case 'replace': {
80
+ if (input.cell < 0 || input.cell >= nb.cells.length) {
81
+ return { data: `Cell index ${input.cell} out of range`, isError: true };
82
+ }
83
+ if (!input.content)
84
+ return { data: 'content is required for replace', isError: true };
85
+ nb.cells[input.cell].source = input.content.split('\n').map((l, i, arr) => i < arr.length - 1 ? l + '\n' : l);
86
+ nb.cells[input.cell].outputs = [];
87
+ nb.cells[input.cell].execution_count = null;
88
+ break;
89
+ }
90
+ case 'insert': {
91
+ if (input.cell < 0 || input.cell > nb.cells.length) {
92
+ return { data: `Insertion position ${input.cell} out of range`, isError: true };
93
+ }
94
+ const newCell = {
95
+ cell_type: input.cell_type ?? 'code',
96
+ source: (input.content ?? '').split('\n').map((l, i, arr) => i < arr.length - 1 ? l + '\n' : l),
97
+ metadata: {},
98
+ outputs: input.cell_type === 'code' || !input.cell_type ? [] : undefined,
99
+ execution_count: input.cell_type === 'code' || !input.cell_type ? null : undefined,
100
+ };
101
+ nb.cells.splice(input.cell, 0, newCell);
102
+ break;
103
+ }
104
+ case 'delete': {
105
+ if (input.cell < 0 || input.cell >= nb.cells.length) {
106
+ return { data: `Cell index ${input.cell} out of range`, isError: true };
107
+ }
108
+ nb.cells.splice(input.cell, 1);
109
+ break;
110
+ }
111
+ }
112
+ await writeFile(fullPath, JSON.stringify(nb, null, 1) + '\n', 'utf-8');
113
+ return { data: `Notebook updated: ${input.action} cell ${input.cell} (${nb.cells.length} cells total)` };
114
+ }
115
+ catch (err) {
116
+ return { data: `Failed to edit notebook: ${err instanceof Error ? err.message : String(err)}`, isError: true };
117
+ }
118
+ },
119
+ });
120
+ export const notebookRunTool = defineTool({
121
+ name: 'notebook_run',
122
+ description: 'Execute a Jupyter notebook cell or the entire notebook. Requires jupyter to be installed.',
123
+ inputSchema: z.object({
124
+ path: z.string().describe('Path to the .ipynb file.'),
125
+ cell: z.number().optional().describe('0-based cell index to execute. Omit to run entire notebook.'),
126
+ }),
127
+ execute: async (input, context) => {
128
+ const cwd = context.cwd ?? process.cwd();
129
+ const fullPath = input.path.startsWith('/') ? input.path : `${cwd}/${input.path}`;
130
+ if (input.cell != null) {
131
+ // Execute single cell by using jupyter's execute API
132
+ // Read notebook, extract cell, run with python -c, put output back
133
+ try {
134
+ const raw = await readFile(fullPath, 'utf-8');
135
+ const nb = JSON.parse(raw);
136
+ const cell = nb.cells[input.cell];
137
+ if (!cell)
138
+ return { data: `Cell ${input.cell} not found`, isError: true };
139
+ if (cell.cell_type !== 'code')
140
+ return { data: `Cell ${input.cell} is not a code cell`, isError: true };
141
+ const code = cell.source.join('');
142
+ return new Promise((resolve) => {
143
+ const child = spawn('python3', ['-c', code], {
144
+ cwd,
145
+ stdio: ['ignore', 'pipe', 'pipe'],
146
+ });
147
+ const out = [];
148
+ const err = [];
149
+ const timeout = setTimeout(() => {
150
+ child.kill();
151
+ resolve({ data: 'Cell execution timed out after 30s', isError: true });
152
+ }, 30_000);
153
+ child.stdout.on('data', (c) => out.push(c));
154
+ child.stderr.on('data', (c) => err.push(c));
155
+ child.on('close', (exitCode) => {
156
+ clearTimeout(timeout);
157
+ const stdout = Buffer.concat(out).toString('utf-8').trim();
158
+ const stderr = Buffer.concat(err).toString('utf-8').trim();
159
+ if (exitCode === 0) {
160
+ resolve({ data: stdout || '(no output)' });
161
+ }
162
+ else {
163
+ resolve({ data: stderr || stdout || 'Cell execution failed', isError: true });
164
+ }
165
+ });
166
+ child.on('error', (e) => {
167
+ clearTimeout(timeout);
168
+ resolve({ data: `Failed to run cell: ${e.message}`, isError: true });
169
+ });
170
+ });
171
+ }
172
+ catch (err) {
173
+ return { data: `Failed: ${err instanceof Error ? err.message : String(err)}`, isError: true };
174
+ }
175
+ }
176
+ // Execute entire notebook
177
+ return new Promise((resolve) => {
178
+ const child = spawn('jupyter', [
179
+ 'nbconvert', '--to', 'notebook', '--execute',
180
+ '--output', fullPath, fullPath,
181
+ ], { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
182
+ const out = [];
183
+ const err = [];
184
+ const timeout = setTimeout(() => {
185
+ child.kill();
186
+ resolve({ data: 'Notebook execution timed out after 120s', isError: true });
187
+ }, 120_000);
188
+ child.stdout.on('data', (c) => out.push(c));
189
+ child.stderr.on('data', (c) => err.push(c));
190
+ child.on('close', (code) => {
191
+ clearTimeout(timeout);
192
+ if (code === 0) {
193
+ resolve({ data: `Notebook executed successfully.` });
194
+ }
195
+ else {
196
+ const stderr = Buffer.concat(err).toString('utf-8').trim();
197
+ resolve({ data: stderr || 'Notebook execution failed', isError: true });
198
+ }
199
+ });
200
+ child.on('error', (e) => {
201
+ clearTimeout(timeout);
202
+ resolve({ data: `jupyter not found: ${e.message}. Install with: pip install jupyter`, isError: true });
203
+ });
204
+ });
205
+ },
206
+ });
207
+ //# sourceMappingURL=notebook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notebook.js","sourceRoot":"","sources":["../../../../src/tools/built-in/notebook.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Plan mode tools — allow the LLM to self-manage planning vs execution mode.
3
+ *
4
+ * When in plan mode, the LLM should describe its approach before executing.
5
+ * These tools let the LLM switch modes programmatically.
6
+ */
7
+ export declare function isPlanMode(): boolean;
8
+ export declare function setPlanMode(active: boolean): void;
9
+ export declare const enterPlanModeTool: import("../registry.js").ToolDefinition<{
10
+ reason?: string | undefined;
11
+ }>;
12
+ export declare const exitPlanModeTool: import("../registry.js").ToolDefinition<{}>;
13
+ //# sourceMappingURL=plan-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-tools.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/plan-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAEjD;AAED,eAAO,MAAM,iBAAiB;;EAa5B,CAAA;AAEF,eAAO,MAAM,gBAAgB,6CAU3B,CAAA"}