cmdr-agent 2.1.2 → 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.
- package/dist/bin/cmdr.js +4 -0
- package/dist/bin/cmdr.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/src/cli/args.d.ts +4 -0
- package/dist/src/cli/args.d.ts.map +1 -1
- package/dist/src/cli/args.js +15 -0
- package/dist/src/cli/args.js.map +1 -1
- package/dist/src/cli/commands.js +20 -0
- package/dist/src/cli/commands.js.map +1 -1
- package/dist/src/cli/ink/App.d.ts.map +1 -1
- package/dist/src/cli/ink/App.js +15 -0
- package/dist/src/cli/ink/App.js.map +1 -1
- package/dist/src/cli/repl.d.ts +4 -0
- package/dist/src/cli/repl.d.ts.map +1 -1
- package/dist/src/cli/repl.js +48 -19
- package/dist/src/cli/repl.js.map +1 -1
- package/dist/src/core/agent-runner.d.ts +5 -0
- package/dist/src/core/agent-runner.d.ts.map +1 -1
- package/dist/src/core/agent-runner.js +12 -2
- package/dist/src/core/agent-runner.js.map +1 -1
- package/dist/src/core/agent.d.ts +2 -1
- package/dist/src/core/agent.d.ts.map +1 -1
- package/dist/src/core/agent.js +5 -1
- package/dist/src/core/agent.js.map +1 -1
- package/dist/src/core/content-replacement.d.ts +44 -0
- package/dist/src/core/content-replacement.d.ts.map +1 -0
- package/dist/src/core/content-replacement.js +67 -0
- package/dist/src/core/content-replacement.js.map +1 -0
- package/dist/src/core/event-bus.d.ts +129 -0
- package/dist/src/core/event-bus.d.ts.map +1 -0
- package/dist/src/core/event-bus.js +103 -0
- package/dist/src/core/event-bus.js.map +1 -0
- package/dist/src/core/orchestrator.d.ts +17 -1
- package/dist/src/core/orchestrator.d.ts.map +1 -1
- package/dist/src/core/orchestrator.js +95 -1
- package/dist/src/core/orchestrator.js.map +1 -1
- package/dist/src/core/permissions.d.ts +31 -3
- package/dist/src/core/permissions.d.ts.map +1 -1
- package/dist/src/core/permissions.js +122 -11
- package/dist/src/core/permissions.js.map +1 -1
- package/dist/src/core/presets.d.ts.map +1 -1
- package/dist/src/core/presets.js +1 -0
- package/dist/src/core/presets.js.map +1 -1
- package/dist/src/core/types.d.ts +17 -1
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/llm/anthropic.d.ts +27 -0
- package/dist/src/llm/anthropic.d.ts.map +1 -0
- package/dist/src/llm/anthropic.js +269 -0
- package/dist/src/llm/anthropic.js.map +1 -0
- package/dist/src/llm/ollama.d.ts.map +1 -1
- package/dist/src/llm/ollama.js +16 -4
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/openai.d.ts +25 -0
- package/dist/src/llm/openai.d.ts.map +1 -0
- package/dist/src/llm/openai.js +299 -0
- package/dist/src/llm/openai.js.map +1 -0
- package/dist/src/llm/provider-factory.d.ts +35 -0
- package/dist/src/llm/provider-factory.d.ts.map +1 -0
- package/dist/src/llm/provider-factory.js +73 -0
- package/dist/src/llm/provider-factory.js.map +1 -0
- package/dist/src/memory/consolidation.d.ts +37 -0
- package/dist/src/memory/consolidation.d.ts.map +1 -0
- package/dist/src/memory/consolidation.js +148 -0
- package/dist/src/memory/consolidation.js.map +1 -0
- package/dist/src/memory/memory-manager.d.ts +39 -0
- package/dist/src/memory/memory-manager.d.ts.map +1 -0
- package/dist/src/memory/memory-manager.js +96 -0
- package/dist/src/memory/memory-manager.js.map +1 -0
- package/dist/src/plugins/mcp-client.d.ts +14 -5
- package/dist/src/plugins/mcp-client.d.ts.map +1 -1
- package/dist/src/plugins/mcp-client.js +197 -43
- package/dist/src/plugins/mcp-client.js.map +1 -1
- package/dist/src/scheduling/task-scheduler.d.ts +51 -0
- package/dist/src/scheduling/task-scheduler.d.ts.map +1 -0
- package/dist/src/scheduling/task-scheduler.js +127 -0
- package/dist/src/scheduling/task-scheduler.js.map +1 -0
- package/dist/src/session/prompt-builder.d.ts +6 -0
- package/dist/src/session/prompt-builder.d.ts.map +1 -1
- package/dist/src/session/prompt-builder.js +21 -2
- package/dist/src/session/prompt-builder.js.map +1 -1
- package/dist/src/session/prompt-cache.d.ts +33 -0
- package/dist/src/session/prompt-cache.d.ts.map +1 -0
- package/dist/src/session/prompt-cache.js +54 -0
- package/dist/src/session/prompt-cache.js.map +1 -0
- package/dist/src/tools/built-in/diagnostics.d.ts +12 -0
- package/dist/src/tools/built-in/diagnostics.d.ts.map +1 -0
- package/dist/src/tools/built-in/diagnostics.js +119 -0
- package/dist/src/tools/built-in/diagnostics.js.map +1 -0
- package/dist/src/tools/built-in/git-worktree.d.ts +13 -0
- package/dist/src/tools/built-in/git-worktree.d.ts.map +1 -0
- package/dist/src/tools/built-in/git-worktree.js +75 -0
- package/dist/src/tools/built-in/git-worktree.js.map +1 -0
- package/dist/src/tools/built-in/index.d.ts +5 -1
- package/dist/src/tools/built-in/index.d.ts.map +1 -1
- package/dist/src/tools/built-in/index.js +8 -2
- package/dist/src/tools/built-in/index.js.map +1 -1
- package/dist/src/tools/built-in/memory.d.ts +15 -0
- package/dist/src/tools/built-in/memory.d.ts.map +1 -0
- package/dist/src/tools/built-in/memory.js +58 -0
- package/dist/src/tools/built-in/memory.js.map +1 -0
- package/dist/src/tools/built-in/notebook.d.ts +22 -0
- package/dist/src/tools/built-in/notebook.d.ts.map +1 -0
- package/dist/src/tools/built-in/notebook.js +207 -0
- package/dist/src/tools/built-in/notebook.js.map +1 -0
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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;
|
|
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"}
|
|
@@ -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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"}
|