cmdr-agent 2.5.5 → 3.1.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 (93) hide show
  1. package/README.md +42 -2
  2. package/dist/bin/cmdr.js +64 -3
  3. package/dist/bin/cmdr.js.map +1 -1
  4. package/dist/package.json +1 -1
  5. package/dist/src/cli/args.d.ts +11 -2
  6. package/dist/src/cli/args.d.ts.map +1 -1
  7. package/dist/src/cli/args.js +51 -9
  8. package/dist/src/cli/args.js.map +1 -1
  9. package/dist/src/cli/buddy.d.ts +49 -0
  10. package/dist/src/cli/buddy.d.ts.map +1 -0
  11. package/dist/src/cli/buddy.js +187 -0
  12. package/dist/src/cli/buddy.js.map +1 -0
  13. package/dist/src/cli/commands.js +131 -11
  14. package/dist/src/cli/commands.js.map +1 -1
  15. package/dist/src/cli/daemon.d.ts +45 -0
  16. package/dist/src/cli/daemon.d.ts.map +1 -0
  17. package/dist/src/cli/daemon.js +157 -0
  18. package/dist/src/cli/daemon.js.map +1 -0
  19. package/dist/src/cli/ink/App.d.ts.map +1 -1
  20. package/dist/src/cli/ink/App.js +299 -3
  21. package/dist/src/cli/ink/App.js.map +1 -1
  22. package/dist/src/cli/repl.d.ts +5 -3
  23. package/dist/src/cli/repl.d.ts.map +1 -1
  24. package/dist/src/cli/repl.js +72 -20
  25. package/dist/src/cli/repl.js.map +1 -1
  26. package/dist/src/config/api-key-store.d.ts +42 -0
  27. package/dist/src/config/api-key-store.d.ts.map +1 -0
  28. package/dist/src/config/api-key-store.js +180 -0
  29. package/dist/src/config/api-key-store.js.map +1 -0
  30. package/dist/src/config/schema.d.ts +3 -3
  31. package/dist/src/config/schema.js +1 -1
  32. package/dist/src/config/schema.js.map +1 -1
  33. package/dist/src/core/agent.d.ts +2 -0
  34. package/dist/src/core/agent.d.ts.map +1 -1
  35. package/dist/src/core/agent.js +13 -0
  36. package/dist/src/core/agent.js.map +1 -1
  37. package/dist/src/core/types.d.ts +19 -4
  38. package/dist/src/core/types.d.ts.map +1 -1
  39. package/dist/src/core/types.js +6 -0
  40. package/dist/src/core/types.js.map +1 -1
  41. package/dist/src/index.d.ts +13 -1
  42. package/dist/src/index.d.ts.map +1 -1
  43. package/dist/src/index.js +12 -0
  44. package/dist/src/index.js.map +1 -1
  45. package/dist/src/llm/anthropic.d.ts.map +1 -1
  46. package/dist/src/llm/anthropic.js +11 -0
  47. package/dist/src/llm/anthropic.js.map +1 -1
  48. package/dist/src/llm/model-registry.d.ts.map +1 -1
  49. package/dist/src/llm/model-registry.js +5 -0
  50. package/dist/src/llm/model-registry.js.map +1 -1
  51. package/dist/src/llm/ollama.d.ts.map +1 -1
  52. package/dist/src/llm/ollama.js +8 -1
  53. package/dist/src/llm/ollama.js.map +1 -1
  54. package/dist/src/llm/openai.d.ts.map +1 -1
  55. package/dist/src/llm/openai.js +21 -6
  56. package/dist/src/llm/openai.js.map +1 -1
  57. package/dist/src/llm/provider-factory.d.ts +4 -1
  58. package/dist/src/llm/provider-factory.d.ts.map +1 -1
  59. package/dist/src/llm/provider-factory.js +23 -0
  60. package/dist/src/llm/provider-factory.js.map +1 -1
  61. package/dist/src/memory/index-manager.d.ts +65 -0
  62. package/dist/src/memory/index-manager.d.ts.map +1 -0
  63. package/dist/src/memory/index-manager.js +241 -0
  64. package/dist/src/memory/index-manager.js.map +1 -0
  65. package/dist/src/server/index.d.ts +20 -0
  66. package/dist/src/server/index.d.ts.map +1 -0
  67. package/dist/src/server/index.js +283 -0
  68. package/dist/src/server/index.js.map +1 -0
  69. package/dist/src/session/branch-manager.d.ts +39 -0
  70. package/dist/src/session/branch-manager.d.ts.map +1 -0
  71. package/dist/src/session/branch-manager.js +142 -0
  72. package/dist/src/session/branch-manager.js.map +1 -0
  73. package/dist/src/session/checkpoint-manager.d.ts +28 -0
  74. package/dist/src/session/checkpoint-manager.d.ts.map +1 -0
  75. package/dist/src/session/checkpoint-manager.js +96 -0
  76. package/dist/src/session/checkpoint-manager.js.map +1 -0
  77. package/dist/src/tools/built-in/browser.d.ts +32 -0
  78. package/dist/src/tools/built-in/browser.d.ts.map +1 -0
  79. package/dist/src/tools/built-in/browser.js +168 -0
  80. package/dist/src/tools/built-in/browser.js.map +1 -0
  81. package/dist/src/tools/built-in/git-diff.d.ts +1 -0
  82. package/dist/src/tools/built-in/git-diff.d.ts.map +1 -1
  83. package/dist/src/tools/built-in/git-diff.js +7 -2
  84. package/dist/src/tools/built-in/git-diff.js.map +1 -1
  85. package/dist/src/tools/built-in/index.d.ts +7 -1
  86. package/dist/src/tools/built-in/index.d.ts.map +1 -1
  87. package/dist/src/tools/built-in/index.js +19 -1
  88. package/dist/src/tools/built-in/index.js.map +1 -1
  89. package/dist/src/tools/built-in/rag-search.d.ts +12 -0
  90. package/dist/src/tools/built-in/rag-search.d.ts.map +1 -0
  91. package/dist/src/tools/built-in/rag-search.js +37 -0
  92. package/dist/src/tools/built-in/rag-search.js.map +1 -0
  93. package/package.json +1 -1
@@ -0,0 +1,142 @@
1
+ /**
2
+ * BranchManager — fork, switch, and merge conversation branches.
3
+ *
4
+ * Branches are persisted as JSON files under:
5
+ * ~/.cmdr/sessions/{sessionId}/branches/{branch-id}.json
6
+ *
7
+ * Each branch stores a snapshot of the conversation at fork time,
8
+ * plus any messages added after the fork.
9
+ */
10
+ import { readFile, writeFile, mkdir, readdir, unlink } from 'fs/promises';
11
+ import { existsSync } from 'fs';
12
+ import { join } from 'path';
13
+ import { homedir } from 'os';
14
+ const CMDR_DIR = join(homedir(), '.cmdr');
15
+ const SESSIONS_DIR = join(CMDR_DIR, 'sessions');
16
+ function branchDir(sessionId) {
17
+ return join(SESSIONS_DIR, sessionId, 'branches');
18
+ }
19
+ export class BranchManager {
20
+ sessionId;
21
+ currentBranchId = null;
22
+ constructor(sessionId) {
23
+ this.sessionId = sessionId;
24
+ }
25
+ get activeBranch() {
26
+ return this.currentBranchId;
27
+ }
28
+ /** Fork the conversation at the current point. */
29
+ async fork(name, messages, model, parentBranch) {
30
+ const dir = branchDir(this.sessionId);
31
+ await mkdir(dir, { recursive: true });
32
+ const id = `br_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
33
+ const branch = {
34
+ id,
35
+ name,
36
+ model,
37
+ messages: [...messages],
38
+ messageCount: messages.length,
39
+ createdAt: new Date().toISOString(),
40
+ parentBranch,
41
+ forkPoint: messages.length,
42
+ };
43
+ await writeFile(join(dir, `${id}.json`), JSON.stringify(branch, null, 2), 'utf-8');
44
+ this.currentBranchId = id;
45
+ return branch;
46
+ }
47
+ /** Switch to a branch by ID. Returns the branch data or null. */
48
+ async switch(id) {
49
+ const filePath = join(branchDir(this.sessionId), `${id}.json`);
50
+ if (!existsSync(filePath))
51
+ return null;
52
+ try {
53
+ const data = await readFile(filePath, 'utf-8');
54
+ const branch = JSON.parse(data);
55
+ this.currentBranchId = id;
56
+ return branch;
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ /** List all branches for this session, newest first. */
63
+ async list() {
64
+ const dir = branchDir(this.sessionId);
65
+ if (!existsSync(dir))
66
+ return [];
67
+ try {
68
+ const files = await readdir(dir);
69
+ const branches = [];
70
+ for (const file of files) {
71
+ if (!file.endsWith('.json'))
72
+ continue;
73
+ try {
74
+ const data = await readFile(join(dir, file), 'utf-8');
75
+ const br = JSON.parse(data);
76
+ branches.push({
77
+ id: br.id,
78
+ name: br.name,
79
+ model: br.model,
80
+ messageCount: br.messageCount,
81
+ createdAt: br.createdAt,
82
+ parentBranch: br.parentBranch,
83
+ forkPoint: br.forkPoint,
84
+ });
85
+ }
86
+ catch {
87
+ // skip malformed files
88
+ }
89
+ }
90
+ return branches.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
91
+ }
92
+ catch {
93
+ return [];
94
+ }
95
+ }
96
+ /** Merge branch messages onto a target (appends after fork point). */
97
+ async merge(sourceId, targetMessages) {
98
+ const source = await this.switch(sourceId);
99
+ if (!source)
100
+ return null;
101
+ // Messages added after fork point
102
+ const newMessages = source.messages.slice(source.forkPoint);
103
+ return [...targetMessages, ...newMessages];
104
+ }
105
+ /** Delete a branch by ID. */
106
+ async delete(id) {
107
+ const filePath = join(branchDir(this.sessionId), `${id}.json`);
108
+ if (!existsSync(filePath))
109
+ return false;
110
+ try {
111
+ await unlink(filePath);
112
+ if (this.currentBranchId === id)
113
+ this.currentBranchId = null;
114
+ return true;
115
+ }
116
+ catch {
117
+ return false;
118
+ }
119
+ }
120
+ /** Save the current state of a branch (update messages). */
121
+ async update(id, messages, model) {
122
+ const filePath = join(branchDir(this.sessionId), `${id}.json`);
123
+ if (!existsSync(filePath))
124
+ return false;
125
+ try {
126
+ const data = await readFile(filePath, 'utf-8');
127
+ const branch = JSON.parse(data);
128
+ const updated = {
129
+ ...branch,
130
+ messages: [...messages],
131
+ messageCount: messages.length,
132
+ model,
133
+ };
134
+ await writeFile(filePath, JSON.stringify(updated, null, 2), 'utf-8');
135
+ return true;
136
+ }
137
+ catch {
138
+ return false;
139
+ }
140
+ }
141
+ }
142
+ //# sourceMappingURL=branch-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-manager.js","sourceRoot":"","sources":["../../../src/session/branch-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * CheckpointManager — save and restore conversation snapshots.
3
+ *
4
+ * Checkpoints are persisted as JSON files under:
5
+ * ~/.cmdr/sessions/{sessionId}/checkpoints/{checkpoint-id}.json
6
+ */
7
+ import type { LLMMessage } from '../core/types.js';
8
+ export interface Checkpoint {
9
+ readonly id: string;
10
+ readonly label: string;
11
+ readonly model: string;
12
+ readonly messages: LLMMessage[];
13
+ readonly messageCount: number;
14
+ readonly createdAt: string;
15
+ }
16
+ export declare class CheckpointManager {
17
+ private sessionId;
18
+ constructor(sessionId: string);
19
+ /** Save a checkpoint with an optional label. */
20
+ save(label: string, messages: LLMMessage[], model: string): Promise<Checkpoint>;
21
+ /** Restore a checkpoint by ID. Returns null if not found. */
22
+ restore(id: string): Promise<Checkpoint | null>;
23
+ /** List all checkpoints for this session, newest first. */
24
+ list(): Promise<Omit<Checkpoint, 'messages'>[]>;
25
+ /** Delete a checkpoint by ID. Returns true if deleted. */
26
+ delete(id: string): Promise<boolean>;
27
+ }
28
+ //# sourceMappingURL=checkpoint-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.d.ts","sourceRoot":"","sources":["../../../src/session/checkpoint-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAKlD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAQ;gBAEb,SAAS,EAAE,MAAM;IAI7B,gDAAgD;IAC1C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAkBrF,6DAA6D;IACvD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAYrD,2DAA2D;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;IAiCrD,0DAA0D;IACpD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAW3C"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * CheckpointManager — save and restore conversation snapshots.
3
+ *
4
+ * Checkpoints are persisted as JSON files under:
5
+ * ~/.cmdr/sessions/{sessionId}/checkpoints/{checkpoint-id}.json
6
+ */
7
+ import { readFile, writeFile, mkdir, readdir, unlink } from 'fs/promises';
8
+ import { existsSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { homedir } from 'os';
11
+ const CMDR_DIR = join(homedir(), '.cmdr');
12
+ const SESSIONS_DIR = join(CMDR_DIR, 'sessions');
13
+ function checkpointDir(sessionId) {
14
+ return join(SESSIONS_DIR, sessionId, 'checkpoints');
15
+ }
16
+ export class CheckpointManager {
17
+ sessionId;
18
+ constructor(sessionId) {
19
+ this.sessionId = sessionId;
20
+ }
21
+ /** Save a checkpoint with an optional label. */
22
+ async save(label, messages, model) {
23
+ const dir = checkpointDir(this.sessionId);
24
+ await mkdir(dir, { recursive: true });
25
+ const id = `cp_${Date.now()}_${Math.random().toString(36).slice(2, 6)}`;
26
+ const checkpoint = {
27
+ id,
28
+ label,
29
+ model,
30
+ messages: [...messages],
31
+ messageCount: messages.length,
32
+ createdAt: new Date().toISOString(),
33
+ };
34
+ await writeFile(join(dir, `${id}.json`), JSON.stringify(checkpoint, null, 2), 'utf-8');
35
+ return checkpoint;
36
+ }
37
+ /** Restore a checkpoint by ID. Returns null if not found. */
38
+ async restore(id) {
39
+ const filePath = join(checkpointDir(this.sessionId), `${id}.json`);
40
+ if (!existsSync(filePath))
41
+ return null;
42
+ try {
43
+ const data = await readFile(filePath, 'utf-8');
44
+ return JSON.parse(data);
45
+ }
46
+ catch {
47
+ return null;
48
+ }
49
+ }
50
+ /** List all checkpoints for this session, newest first. */
51
+ async list() {
52
+ const dir = checkpointDir(this.sessionId);
53
+ if (!existsSync(dir))
54
+ return [];
55
+ try {
56
+ const files = await readdir(dir);
57
+ const checkpoints = [];
58
+ for (const file of files) {
59
+ if (!file.endsWith('.json'))
60
+ continue;
61
+ try {
62
+ const data = await readFile(join(dir, file), 'utf-8');
63
+ const cp = JSON.parse(data);
64
+ checkpoints.push({
65
+ id: cp.id,
66
+ label: cp.label,
67
+ model: cp.model,
68
+ messageCount: cp.messageCount,
69
+ createdAt: cp.createdAt,
70
+ });
71
+ }
72
+ catch {
73
+ // skip malformed files
74
+ }
75
+ }
76
+ return checkpoints.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
77
+ }
78
+ catch {
79
+ return [];
80
+ }
81
+ }
82
+ /** Delete a checkpoint by ID. Returns true if deleted. */
83
+ async delete(id) {
84
+ const filePath = join(checkpointDir(this.sessionId), `${id}.json`);
85
+ if (!existsSync(filePath))
86
+ return false;
87
+ try {
88
+ await unlink(filePath);
89
+ return true;
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ }
95
+ }
96
+ //# sourceMappingURL=checkpoint-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.js","sourceRoot":"","sources":["../../../src/session/checkpoint-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Browser tools — optional Playwright-based browser automation.
3
+ *
4
+ * These tools are only registered when `--browser` is passed and
5
+ * playwright-core is available. Each tool dynamically imports
6
+ * playwright-core to avoid hard dependency.
7
+ */
8
+ import type { ToolDefinition } from '../../core/types.js';
9
+ export declare const browserOpenTool: ToolDefinition<{
10
+ url: string;
11
+ waitUntil?: "load" | "domcontentloaded" | "networkidle" | undefined;
12
+ }>;
13
+ export declare const browserScreenshotTool: ToolDefinition<{
14
+ path?: string | undefined;
15
+ fullPage?: boolean | undefined;
16
+ }>;
17
+ export declare const browserClickTool: ToolDefinition<{
18
+ selector: string;
19
+ }>;
20
+ export declare const browserFillTool: ToolDefinition<{
21
+ value: string;
22
+ selector: string;
23
+ }>;
24
+ export declare const browserTextTool: ToolDefinition<{
25
+ selector?: string | undefined;
26
+ }>;
27
+ export declare const BROWSER_TOOLS: ToolDefinition<any>[];
28
+ /** Check if playwright-core is available. */
29
+ export declare function isPlaywrightAvailable(): Promise<boolean>;
30
+ /** Close the browser if open (for cleanup). */
31
+ export declare function closeBrowser(): Promise<void>;
32
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/browser.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AA6CzD,eAAO,MAAM,eAAe;;;EAoB1B,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;EAgBhC,CAAA;AAEF,eAAO,MAAM,gBAAgB;;EAe3B,CAAA;AAEF,eAAO,MAAM,eAAe;;;EAgB1B,CAAA;AAEF,eAAO,MAAM,eAAe;;EAgB1B,CAAA;AAKF,eAAO,MAAM,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC,EAM9C,CAAA;AAED,6CAA6C;AAC7C,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG9D;AAED,+CAA+C;AAC/C,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAUlD"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Browser tools — optional Playwright-based browser automation.
3
+ *
4
+ * These tools are only registered when `--browser` is passed and
5
+ * playwright-core is available. Each tool dynamically imports
6
+ * playwright-core to avoid hard dependency.
7
+ */
8
+ import { z } from 'zod';
9
+ import { defineTool } from '../registry.js';
10
+ /** Dynamically load playwright-core. Returns null if not installed. */
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ async function loadPlaywright() {
13
+ try {
14
+ // Dynamic import with variable to prevent TS from resolving the module at compile time
15
+ const moduleName = 'playwright-core';
16
+ return await import(/* @vite-ignore */ moduleName);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ }
22
+ /** Shared browser instance (lazy, singleton per process). */
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ let browserPromise = null;
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ async function getBrowser() {
27
+ if (!browserPromise) {
28
+ browserPromise = (async () => {
29
+ const pw = await loadPlaywright();
30
+ if (!pw)
31
+ throw new Error('playwright-core is not installed. Run: npm install -D playwright-core');
32
+ return pw.chromium.launch({ headless: true });
33
+ })();
34
+ }
35
+ return browserPromise;
36
+ }
37
+ /** Shared page (reuses single tab). */
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ let activePage = null;
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ async function getPage() {
42
+ if (!activePage || activePage.isClosed()) {
43
+ const browser = await getBrowser();
44
+ activePage = await browser.newPage();
45
+ }
46
+ return activePage;
47
+ }
48
+ // ── Tools ───────────────────────────────────────────────────────────
49
+ export const browserOpenTool = defineTool({
50
+ name: 'browser_open',
51
+ description: 'Open a URL in the headless browser. Returns the page title and a text snapshot.',
52
+ inputSchema: z.object({
53
+ url: z.string().describe('The URL to navigate to'),
54
+ waitUntil: z.enum(['load', 'domcontentloaded', 'networkidle']).default('domcontentloaded')
55
+ .describe('When to consider navigation complete'),
56
+ }),
57
+ execute: async (input) => {
58
+ try {
59
+ const page = await getPage();
60
+ await page.goto(input.url, { waitUntil: input.waitUntil, timeout: 30_000 });
61
+ const title = await page.title();
62
+ const text = await page.innerText('body').catch(() => '');
63
+ const truncated = text.slice(0, 8000);
64
+ return { data: `Title: ${title}\n\n${truncated}` };
65
+ }
66
+ catch (err) {
67
+ return { data: `Failed to open ${input.url}: ${err instanceof Error ? err.message : String(err)}`, isError: true };
68
+ }
69
+ },
70
+ });
71
+ export const browserScreenshotTool = defineTool({
72
+ name: 'browser_screenshot',
73
+ description: 'Take a screenshot of the current browser page. Returns the file path of the saved screenshot.',
74
+ inputSchema: z.object({
75
+ path: z.string().default('screenshot.png').describe('File path to save the screenshot'),
76
+ fullPage: z.boolean().default(false).describe('Capture the full scrollable page'),
77
+ }),
78
+ execute: async (input) => {
79
+ try {
80
+ const page = await getPage();
81
+ await page.screenshot({ path: input.path, fullPage: input.fullPage });
82
+ return { data: `Screenshot saved to ${input.path}` };
83
+ }
84
+ catch (err) {
85
+ return { data: `Screenshot failed: ${err instanceof Error ? err.message : String(err)}`, isError: true };
86
+ }
87
+ },
88
+ });
89
+ export const browserClickTool = defineTool({
90
+ name: 'browser_click',
91
+ description: 'Click an element on the current page by CSS selector.',
92
+ inputSchema: z.object({
93
+ selector: z.string().describe('CSS selector of the element to click'),
94
+ }),
95
+ execute: async (input) => {
96
+ try {
97
+ const page = await getPage();
98
+ await page.click(input.selector, { timeout: 10_000 });
99
+ return { data: `Clicked: ${input.selector}` };
100
+ }
101
+ catch (err) {
102
+ return { data: `Click failed on "${input.selector}": ${err instanceof Error ? err.message : String(err)}`, isError: true };
103
+ }
104
+ },
105
+ });
106
+ export const browserFillTool = defineTool({
107
+ name: 'browser_fill',
108
+ description: 'Fill a text input field on the current page.',
109
+ inputSchema: z.object({
110
+ selector: z.string().describe('CSS selector of the input element'),
111
+ value: z.string().describe('Text value to fill'),
112
+ }),
113
+ execute: async (input) => {
114
+ try {
115
+ const page = await getPage();
116
+ await page.fill(input.selector, input.value, { timeout: 10_000 });
117
+ return { data: `Filled "${input.selector}" with value` };
118
+ }
119
+ catch (err) {
120
+ return { data: `Fill failed on "${input.selector}": ${err instanceof Error ? err.message : String(err)}`, isError: true };
121
+ }
122
+ },
123
+ });
124
+ export const browserTextTool = defineTool({
125
+ name: 'browser_text',
126
+ description: 'Extract text content from an element on the current page.',
127
+ inputSchema: z.object({
128
+ selector: z.string().default('body').describe('CSS selector to extract text from'),
129
+ }),
130
+ execute: async (input) => {
131
+ try {
132
+ const page = await getPage();
133
+ const text = await page.innerText(input.selector, { timeout: 10_000 });
134
+ const truncated = text.slice(0, 8000);
135
+ return { data: truncated };
136
+ }
137
+ catch (err) {
138
+ return { data: `Text extraction failed on "${input.selector}": ${err instanceof Error ? err.message : String(err)}`, isError: true };
139
+ }
140
+ },
141
+ });
142
+ // ── Conditional registration ────────────────────────────────────────
143
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
+ export const BROWSER_TOOLS = [
145
+ browserOpenTool,
146
+ browserScreenshotTool,
147
+ browserClickTool,
148
+ browserFillTool,
149
+ browserTextTool,
150
+ ];
151
+ /** Check if playwright-core is available. */
152
+ export async function isPlaywrightAvailable() {
153
+ const pw = await loadPlaywright();
154
+ return pw !== null;
155
+ }
156
+ /** Close the browser if open (for cleanup). */
157
+ export async function closeBrowser() {
158
+ if (activePage && !activePage.isClosed()) {
159
+ await activePage.close().catch(() => { });
160
+ activePage = null;
161
+ }
162
+ if (browserPromise) {
163
+ const browser = await browserPromise.catch(() => null);
164
+ await browser?.close().catch(() => { });
165
+ browserPromise = null;
166
+ }
167
+ }
168
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../../src/tools/built-in/browser.ts"],"names":[],"mappings":"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"}
@@ -4,5 +4,6 @@
4
4
  export declare const gitDiffTool: import("../registry.js").ToolDefinition<{
5
5
  path?: string | undefined;
6
6
  staged?: boolean | undefined;
7
+ range?: string | undefined;
7
8
  }>;
8
9
  //# sourceMappingURL=git-diff.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/git-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,WAAW;;;EAwCtB,CAAA"}
1
+ {"version":3,"file":"git-diff.d.ts","sourceRoot":"","sources":["../../../../src/tools/built-in/git-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,eAAO,MAAM,WAAW;;;;EA6CtB,CAAA"}
@@ -6,16 +6,21 @@ import { z } from 'zod';
6
6
  import { defineTool } from '../registry.js';
7
7
  export const gitDiffTool = defineTool({
8
8
  name: 'git_diff',
9
- description: 'Show the git diff of the working tree or staged changes. ' +
9
+ description: 'Show the git diff of the working tree, staged changes, or a commit range. ' +
10
10
  'Useful for reviewing changes before committing.',
11
11
  inputSchema: z.object({
12
12
  staged: z.boolean().optional().describe('If true, show staged changes (--cached).'),
13
13
  path: z.string().optional().describe('Limit diff to a specific file or directory.'),
14
+ range: z.string().optional().describe('Commit range (e.g. "HEAD~1..HEAD", "main..feature"). Overrides staged flag.'),
14
15
  }),
15
16
  execute: async (input, context) => {
16
17
  const args = ['diff', '--no-color'];
17
- if (input.staged)
18
+ if (input.range) {
19
+ args.push(input.range);
20
+ }
21
+ else if (input.staged) {
18
22
  args.push('--cached');
23
+ }
19
24
  if (input.path)
20
25
  args.push('--', input.path);
21
26
  const cwd = context.cwd ?? process.cwd();
@@ -1 +1 @@
1
- {"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../../../src/tools/built-in/git-diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,UAAU;IAChB,WAAW,EACT,2DAA2D;QAC3D,iDAAiD;IAEnD,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACnF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;KACpF,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;QACnC,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACvC,IAAI,KAAK,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;QAE3C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QAExC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;YAC5E,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACtD,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YAEzD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;oBAC7D,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,cAAc,EAAE,CAAC,CAAA;gBAC7C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC9E,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"git-diff.js","sourceRoot":"","sources":["../../../../src/tools/built-in/git-diff.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,13 @@ import { enterPlanModeTool, exitPlanModeTool } from './plan-tools.js';
27
27
  import { mcpListResourcesTool, mcpReadResourceTool } from './mcp-resource-tools.js';
28
28
  import { graphImpactTool, graphQueryTool, graphReviewTool } from './graph-tools.js';
29
29
  import { pdfReportTool } from './pdf-report.js';
30
- 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, graphImpactTool, graphQueryTool, graphReviewTool, pdfReportTool, };
30
+ import { ragSearchTool } from './rag-search.js';
31
+ 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, graphImpactTool, graphQueryTool, graphReviewTool, pdfReportTool, ragSearchTool, };
31
32
  export declare const BUILT_IN_TOOLS: ToolDefinition<any>[];
32
33
  export declare function registerBuiltInTools(registry: ToolRegistry): void;
34
+ /**
35
+ * Register browser automation tools (requires --browser flag and playwright-core).
36
+ * Call this separately after registerBuiltInTools when browser mode is enabled.
37
+ */
38
+ export declare function registerBrowserTools(registry: ToolRegistry): Promise<boolean>;
33
39
  //# 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,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;AACnF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,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,EACzC,eAAe,EAAE,cAAc,EAAE,eAAe,EAChD,aAAa,GACd,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAa/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;AACnF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,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,EACzC,eAAe,EAAE,cAAc,EAAE,eAAe,EAChD,aAAa,EACb,aAAa,GACd,CAAA;AAGD,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAc/C,CAAA;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAMjE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CASnF"}
@@ -25,7 +25,9 @@ import { enterPlanModeTool, exitPlanModeTool } from './plan-tools.js';
25
25
  import { mcpListResourcesTool, mcpReadResourceTool } from './mcp-resource-tools.js';
26
26
  import { graphImpactTool, graphQueryTool, graphReviewTool } from './graph-tools.js';
27
27
  import { pdfReportTool } from './pdf-report.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, graphImpactTool, graphQueryTool, graphReviewTool, pdfReportTool, };
28
+ import { ragSearchTool } from './rag-search.js';
29
+ import { BROWSER_TOOLS, isPlaywrightAvailable } from './browser.js';
30
+ 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, graphImpactTool, graphQueryTool, graphReviewTool, pdfReportTool, ragSearchTool, };
29
31
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
30
32
  export const BUILT_IN_TOOLS = [
31
33
  bashTool, fileReadTool, fileWriteTool, fileEditTool,
@@ -40,6 +42,7 @@ export const BUILT_IN_TOOLS = [
40
42
  mcpListResourcesTool, mcpReadResourceTool,
41
43
  graphImpactTool, graphQueryTool, graphReviewTool,
42
44
  pdfReportTool,
45
+ ragSearchTool,
43
46
  ];
44
47
  export function registerBuiltInTools(registry) {
45
48
  for (const tool of BUILT_IN_TOOLS) {
@@ -48,4 +51,19 @@ export function registerBuiltInTools(registry) {
48
51
  }
49
52
  }
50
53
  }
54
+ /**
55
+ * Register browser automation tools (requires --browser flag and playwright-core).
56
+ * Call this separately after registerBuiltInTools when browser mode is enabled.
57
+ */
58
+ export async function registerBrowserTools(registry) {
59
+ const available = await isPlaywrightAvailable();
60
+ if (!available)
61
+ return false;
62
+ for (const tool of BROWSER_TOOLS) {
63
+ if (!registry.has(tool.name)) {
64
+ registry.register(tool);
65
+ }
66
+ }
67
+ return true;
68
+ }
51
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tools/built-in/index.ts"],"names":[],"mappings":"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"}
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,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;AACnF,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEnE,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,EACzC,eAAe,EAAE,cAAc,EAAE,eAAe,EAChD,aAAa,EACb,aAAa,GACd,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,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe;IACpF,aAAa;IACb,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY;IACvD,cAAc,EAAE,YAAY,EAAE,cAAc;IAC5C,iBAAiB,EAAE,gBAAgB;IACnC,oBAAoB,EAAE,mBAAmB;IACzC,eAAe,EAAE,cAAc,EAAE,eAAe;IAChD,aAAa;IACb,aAAa;CACd,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;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAAsB;IAC/D,MAAM,SAAS,GAAG,MAAM,qBAAqB,EAAE,CAAA;IAC/C,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAA;IAC5B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}