cmdr-agent 2.1.1 → 2.2.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 (105) hide show
  1. package/dist/bin/cmdr.js +4 -0
  2. package/dist/bin/cmdr.js.map +1 -1
  3. package/dist/package.json +69 -0
  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 +20 -0
  9. package/dist/src/cli/commands.js.map +1 -1
  10. package/dist/src/cli/ink/App.d.ts.map +1 -1
  11. package/dist/src/cli/ink/App.js +15 -0
  12. package/dist/src/cli/ink/App.js.map +1 -1
  13. package/dist/src/cli/repl.d.ts +4 -0
  14. package/dist/src/cli/repl.d.ts.map +1 -1
  15. package/dist/src/cli/repl.js +48 -19
  16. package/dist/src/cli/repl.js.map +1 -1
  17. package/dist/src/core/agent-runner.d.ts +5 -0
  18. package/dist/src/core/agent-runner.d.ts.map +1 -1
  19. package/dist/src/core/agent-runner.js +12 -2
  20. package/dist/src/core/agent-runner.js.map +1 -1
  21. package/dist/src/core/agent.d.ts +2 -1
  22. package/dist/src/core/agent.d.ts.map +1 -1
  23. package/dist/src/core/agent.js +5 -1
  24. package/dist/src/core/agent.js.map +1 -1
  25. package/dist/src/core/content-replacement.d.ts +44 -0
  26. package/dist/src/core/content-replacement.d.ts.map +1 -0
  27. package/dist/src/core/content-replacement.js +67 -0
  28. package/dist/src/core/content-replacement.js.map +1 -0
  29. package/dist/src/core/event-bus.d.ts +129 -0
  30. package/dist/src/core/event-bus.d.ts.map +1 -0
  31. package/dist/src/core/event-bus.js +103 -0
  32. package/dist/src/core/event-bus.js.map +1 -0
  33. package/dist/src/core/orchestrator.d.ts +17 -1
  34. package/dist/src/core/orchestrator.d.ts.map +1 -1
  35. package/dist/src/core/orchestrator.js +95 -1
  36. package/dist/src/core/orchestrator.js.map +1 -1
  37. package/dist/src/core/permissions.d.ts +31 -3
  38. package/dist/src/core/permissions.d.ts.map +1 -1
  39. package/dist/src/core/permissions.js +122 -11
  40. package/dist/src/core/permissions.js.map +1 -1
  41. package/dist/src/core/presets.d.ts.map +1 -1
  42. package/dist/src/core/presets.js +1 -0
  43. package/dist/src/core/presets.js.map +1 -1
  44. package/dist/src/core/types.d.ts +17 -1
  45. package/dist/src/core/types.d.ts.map +1 -1
  46. package/dist/src/llm/anthropic.d.ts +27 -0
  47. package/dist/src/llm/anthropic.d.ts.map +1 -0
  48. package/dist/src/llm/anthropic.js +269 -0
  49. package/dist/src/llm/anthropic.js.map +1 -0
  50. package/dist/src/llm/ollama.d.ts.map +1 -1
  51. package/dist/src/llm/ollama.js +16 -4
  52. package/dist/src/llm/ollama.js.map +1 -1
  53. package/dist/src/llm/openai.d.ts +25 -0
  54. package/dist/src/llm/openai.d.ts.map +1 -0
  55. package/dist/src/llm/openai.js +299 -0
  56. package/dist/src/llm/openai.js.map +1 -0
  57. package/dist/src/llm/provider-factory.d.ts +35 -0
  58. package/dist/src/llm/provider-factory.d.ts.map +1 -0
  59. package/dist/src/llm/provider-factory.js +73 -0
  60. package/dist/src/llm/provider-factory.js.map +1 -0
  61. package/dist/src/memory/consolidation.d.ts +37 -0
  62. package/dist/src/memory/consolidation.d.ts.map +1 -0
  63. package/dist/src/memory/consolidation.js +148 -0
  64. package/dist/src/memory/consolidation.js.map +1 -0
  65. package/dist/src/memory/memory-manager.d.ts +39 -0
  66. package/dist/src/memory/memory-manager.d.ts.map +1 -0
  67. package/dist/src/memory/memory-manager.js +96 -0
  68. package/dist/src/memory/memory-manager.js.map +1 -0
  69. package/dist/src/plugins/mcp-client.d.ts +14 -5
  70. package/dist/src/plugins/mcp-client.d.ts.map +1 -1
  71. package/dist/src/plugins/mcp-client.js +197 -43
  72. package/dist/src/plugins/mcp-client.js.map +1 -1
  73. package/dist/src/scheduling/task-scheduler.d.ts +51 -0
  74. package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
  75. package/dist/src/scheduling/task-scheduler.js +127 -0
  76. package/dist/src/scheduling/task-scheduler.js.map +1 -0
  77. package/dist/src/session/prompt-builder.d.ts +6 -0
  78. package/dist/src/session/prompt-builder.d.ts.map +1 -1
  79. package/dist/src/session/prompt-builder.js +21 -2
  80. package/dist/src/session/prompt-builder.js.map +1 -1
  81. package/dist/src/session/prompt-cache.d.ts +33 -0
  82. package/dist/src/session/prompt-cache.d.ts.map +1 -0
  83. package/dist/src/session/prompt-cache.js +54 -0
  84. package/dist/src/session/prompt-cache.js.map +1 -0
  85. package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
  86. package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
  87. package/dist/src/tools/built-in/diagnostics.js +119 -0
  88. package/dist/src/tools/built-in/diagnostics.js.map +1 -0
  89. package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
  90. package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
  91. package/dist/src/tools/built-in/git-worktree.js +75 -0
  92. package/dist/src/tools/built-in/git-worktree.js.map +1 -0
  93. package/dist/src/tools/built-in/index.d.ts +5 -1
  94. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  95. package/dist/src/tools/built-in/index.js +8 -2
  96. package/dist/src/tools/built-in/index.js.map +1 -1
  97. package/dist/src/tools/built-in/memory.d.ts +15 -0
  98. package/dist/src/tools/built-in/memory.d.ts.map +1 -0
  99. package/dist/src/tools/built-in/memory.js +58 -0
  100. package/dist/src/tools/built-in/memory.js.map +1 -0
  101. package/dist/src/tools/built-in/notebook.d.ts +22 -0
  102. package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
  103. package/dist/src/tools/built-in/notebook.js +207 -0
  104. package/dist/src/tools/built-in/notebook.js.map +1 -0
  105. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.d.ts","sourceRoot":"","sources":["../../../src/session/prompt-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB,EAAE,MAAM,CAAA;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,oBAAoB,CAAI;IAEhC;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAe1C,6CAA6C;IAC7C,KAAK,IAAI,IAAI;IAOb,4BAA4B;IAC5B,QAAQ,IAAI,UAAU;IAStB,wCAAwC;IACxC,IAAI,OAAO,IAAI,MAAM,CAGpB;CACF"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * PromptCache — tracks static prompt prefix hashes to enable KV cache reuse.
3
+ *
4
+ * When the static prefix (system prompt, project instructions, skills) doesn't
5
+ * change between turns, the LLM can reuse its KV cache for those tokens,
6
+ * dramatically reducing input token processing time.
7
+ *
8
+ * Works with PromptBuilder's getStaticPrefix() to detect cache hits/misses.
9
+ */
10
+ import { createHash } from 'node:crypto';
11
+ export class PromptCache {
12
+ lastPrefixHash = null;
13
+ hits = 0;
14
+ misses = 0;
15
+ estimatedTokensSaved = 0;
16
+ /**
17
+ * Check whether the static prefix has changed since last turn.
18
+ * Returns true if prefix is unchanged (cache hit).
19
+ */
20
+ checkPrefix(staticPrefix) {
21
+ const hash = createHash('sha256').update(staticPrefix).digest('hex').slice(0, 16);
22
+ if (this.lastPrefixHash === hash) {
23
+ this.hits++;
24
+ // Rough estimate: ~4 chars per token for English text
25
+ this.estimatedTokensSaved += Math.ceil(staticPrefix.length / 4);
26
+ return true;
27
+ }
28
+ this.misses++;
29
+ this.lastPrefixHash = hash;
30
+ return false;
31
+ }
32
+ /** Reset tracking (e.g. on model switch). */
33
+ reset() {
34
+ this.lastPrefixHash = null;
35
+ this.hits = 0;
36
+ this.misses = 0;
37
+ this.estimatedTokensSaved = 0;
38
+ }
39
+ /** Get cache statistics. */
40
+ getStats() {
41
+ return {
42
+ hits: this.hits,
43
+ misses: this.misses,
44
+ estimatedTokensSaved: this.estimatedTokensSaved,
45
+ lastPrefixHash: this.lastPrefixHash,
46
+ };
47
+ }
48
+ /** Hit rate as a percentage (0-100). */
49
+ get hitRate() {
50
+ const total = this.hits + this.misses;
51
+ return total === 0 ? 0 : Math.round((this.hits / total) * 100);
52
+ }
53
+ }
54
+ //# sourceMappingURL=prompt-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-cache.js","sourceRoot":"","sources":["../../../src/session/prompt-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AASxC,MAAM,OAAO,WAAW;IACd,cAAc,GAAkB,IAAI,CAAA;IACpC,IAAI,GAAG,CAAC,CAAA;IACR,MAAM,GAAG,CAAC,CAAA;IACV,oBAAoB,GAAG,CAAC,CAAA;IAEhC;;;OAGG;IACH,WAAW,CAAC,YAAoB;QAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QAEjF,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,EAAE,CAAA;YACX,sDAAsD;YACtD,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YAC/D,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAA;QACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,6CAA6C;IAC7C,KAAK;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAA;IAC/B,CAAC;IAED,4BAA4B;IAC5B,QAAQ;QACN,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAA;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;QACrC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAA;IAChE,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Built-in lsp tool — query Language Server Protocol for diagnostics, definitions, references.
3
+ *
4
+ * Uses a lightweight approach: shells out to language-specific CLIs
5
+ * (tsc, eslint, pyright, etc.) rather than maintaining a full LSP client.
6
+ * This covers the most common use cases without heavy dependencies.
7
+ */
8
+ export declare const lspDiagnosticsTool: import("../registry.js").ToolDefinition<{
9
+ file?: string | undefined;
10
+ checker?: "auto" | "tsc" | "eslint" | "pyright" | "mypy" | "ruff" | undefined;
11
+ }>;
12
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0CH,eAAO,MAAM,kBAAkB;;;EAkF7B,CAAA"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Built-in lsp tool — query Language Server Protocol for diagnostics, definitions, references.
3
+ *
4
+ * Uses a lightweight approach: shells out to language-specific CLIs
5
+ * (tsc, eslint, pyright, etc.) rather than maintaining a full LSP client.
6
+ * This covers the most common use cases without heavy dependencies.
7
+ */
8
+ import { spawn } from 'child_process';
9
+ import { z } from 'zod';
10
+ import { defineTool } from '../registry.js';
11
+ import { existsSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ function runCommand(cmd, args, cwd, timeoutMs = 30_000) {
14
+ return new Promise((resolve) => {
15
+ const child = spawn(cmd, args, { cwd, stdio: ['ignore', 'pipe', 'pipe'] });
16
+ const chunks = [];
17
+ const errChunks = [];
18
+ const timeout = setTimeout(() => {
19
+ child.kill();
20
+ resolve({ stdout: '', stderr: 'Command timed out', code: 1 });
21
+ }, timeoutMs);
22
+ child.stdout.on('data', (c) => chunks.push(c));
23
+ child.stderr.on('data', (c) => errChunks.push(c));
24
+ child.on('close', (code) => {
25
+ clearTimeout(timeout);
26
+ resolve({
27
+ stdout: Buffer.concat(chunks).toString('utf-8').trim(),
28
+ stderr: Buffer.concat(errChunks).toString('utf-8').trim(),
29
+ code: code ?? 1,
30
+ });
31
+ });
32
+ child.on('error', (err) => {
33
+ clearTimeout(timeout);
34
+ resolve({ stdout: '', stderr: err.message, code: 1 });
35
+ });
36
+ });
37
+ }
38
+ export const lspDiagnosticsTool = defineTool({
39
+ name: 'diagnostics',
40
+ description: 'Get compiler/linter diagnostics (errors, warnings) for the project or a specific file. ' +
41
+ 'Auto-detects the project type (TypeScript, Python, etc.) and runs the appropriate checker. ' +
42
+ 'Useful for finding errors after making code changes.',
43
+ inputSchema: z.object({
44
+ file: z.string().optional().describe('Specific file to check. If omitted, checks the whole project.'),
45
+ checker: z.enum(['auto', 'tsc', 'eslint', 'pyright', 'mypy', 'ruff']).optional()
46
+ .describe('Which checker to use. Defaults to auto-detect.'),
47
+ }),
48
+ execute: async (input, context) => {
49
+ const cwd = context.cwd ?? process.cwd();
50
+ const checker = input.checker ?? 'auto';
51
+ const file = input.file;
52
+ // Auto-detect project type
53
+ let resolvedChecker = checker;
54
+ if (resolvedChecker === 'auto') {
55
+ if (existsSync(join(cwd, 'tsconfig.json')))
56
+ resolvedChecker = 'tsc';
57
+ else if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'setup.py'))) {
58
+ resolvedChecker = 'pyright';
59
+ }
60
+ else if (existsSync(join(cwd, 'package.json')))
61
+ resolvedChecker = 'tsc';
62
+ else
63
+ resolvedChecker = 'tsc'; // fallback
64
+ }
65
+ let result;
66
+ switch (resolvedChecker) {
67
+ case 'tsc': {
68
+ const args = ['--noEmit', '--pretty'];
69
+ if (file)
70
+ args.push(file);
71
+ result = await runCommand('npx', ['tsc', ...args], cwd);
72
+ break;
73
+ }
74
+ case 'eslint': {
75
+ const target = file ?? '.';
76
+ result = await runCommand('npx', ['eslint', '--format', 'compact', target], cwd);
77
+ break;
78
+ }
79
+ case 'pyright': {
80
+ const args = file ? [file] : [];
81
+ result = await runCommand('pyright', ['--outputjson', ...args], cwd);
82
+ // Parse pyright JSON output into readable format
83
+ if (result.code === 0 || result.stdout.startsWith('{')) {
84
+ try {
85
+ const data = JSON.parse(result.stdout);
86
+ const diags = data.generalDiagnostics ?? [];
87
+ if (diags.length === 0) {
88
+ result.stdout = 'No errors found.';
89
+ }
90
+ else {
91
+ result.stdout = diags.map((d) => `${d.file}:${d.range.start.line}: [${d.severity === 1 ? 'error' : 'warning'}] ${d.message}`).join('\n');
92
+ }
93
+ }
94
+ catch { /* use raw output */ }
95
+ }
96
+ break;
97
+ }
98
+ case 'mypy': {
99
+ const target = file ?? '.';
100
+ result = await runCommand('mypy', [target], cwd);
101
+ break;
102
+ }
103
+ case 'ruff': {
104
+ const target = file ?? '.';
105
+ result = await runCommand('ruff', ['check', target], cwd);
106
+ break;
107
+ }
108
+ default:
109
+ return { data: `Unknown checker: ${resolvedChecker}`, isError: true };
110
+ }
111
+ const output = result.stdout || result.stderr;
112
+ if (result.code === 0 && !output) {
113
+ return { data: `No diagnostics found (${resolvedChecker}).` };
114
+ }
115
+ // Code != 0 is normal for diagnostics tools (means errors found)
116
+ return { data: output || 'No output from checker.' };
117
+ },
118
+ });
119
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../../src/tools/built-in/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
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
+ export declare const gitWorktreeTool: import("../registry.js").ToolDefinition<{
8
+ action: "list" | "add" | "remove";
9
+ path?: string | undefined;
10
+ branch?: string | undefined;
11
+ createBranch?: boolean | undefined;
12
+ }>;
13
+ //# sourceMappingURL=git-worktree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-worktree.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/git-worktree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6BH,eAAO,MAAM,eAAe;;;;;EA8C1B,CAAA"}
@@ -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,14 @@ 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';
17
18
  import { askUserTool } from './ask-user.js';
18
- export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, thinkTool, webFetchTool, askUserTool, };
19
+ import { memoryReadTool, memoryWriteTool } from './memory.js';
20
+ import { lspDiagnosticsTool } from './diagnostics.js';
21
+ import { notebookReadTool, notebookEditTool, notebookRunTool } from './notebook.js';
22
+ export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitWorktreeTool, lspDiagnosticsTool, notebookReadTool, notebookEditTool, notebookRunTool, thinkTool, webFetchTool, askUserTool, memoryReadTool, memoryWriteTool, };
19
23
  export declare const BUILT_IN_TOOLS: ToolDefinition<any>[];
20
24
  export declare function registerBuiltInTools(registry: ToolRegistry): void;
21
25
  //# 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,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;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,WAAW,EAAE,cAAc,EAAE,eAAe,GACtE,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAM/C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMjE"}
@@ -10,15 +10,21 @@ 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';
15
16
  import { askUserTool } from './ask-user.js';
16
- export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, thinkTool, webFetchTool, askUserTool, };
17
+ import { memoryReadTool, memoryWriteTool } from './memory.js';
18
+ import { lspDiagnosticsTool } from './diagnostics.js';
19
+ import { notebookReadTool, notebookEditTool, notebookRunTool } from './notebook.js';
20
+ export { bashTool, fileReadTool, fileWriteTool, fileEditTool, grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool, gitWorktreeTool, lspDiagnosticsTool, notebookReadTool, notebookEditTool, notebookRunTool, thinkTool, webFetchTool, askUserTool, memoryReadTool, memoryWriteTool, };
17
21
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
22
  export const BUILT_IN_TOOLS = [
19
23
  bashTool, fileReadTool, fileWriteTool, fileEditTool,
20
24
  grepTool, globTool, gitDiffTool, gitLogTool, gitCommitTool, gitBranchTool,
21
- thinkTool, webFetchTool, askUserTool,
25
+ gitWorktreeTool, lspDiagnosticsTool,
26
+ notebookReadTool, notebookEditTool, notebookRunTool,
27
+ thinkTool, webFetchTool, askUserTool, memoryReadTool, memoryWriteTool,
22
28
  ];
23
29
  export function registerBuiltInTools(registry) {
24
30
  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":"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,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,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;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,WAAW,EAAE,cAAc,EAAE,eAAe,GACtE,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,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,gBAAgB,EAAE,eAAe;IACnD,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe;CACtE,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"}
@@ -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"}