local-cli-agent 5.0.12 → 5.0.16
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/README.md +42 -1
- package/dist/agents/browser/browser-profile-manager.d.ts +4 -1
- package/dist/agents/browser/browser-profile-manager.d.ts.map +1 -1
- package/dist/agents/browser/browser-profile-manager.js +10 -6
- package/dist/agents/browser/browser-profile-manager.js.map +1 -1
- package/dist/agents/browser/browser-sub-agent.d.ts +1 -0
- package/dist/agents/browser/browser-sub-agent.d.ts.map +1 -1
- package/dist/agents/browser/browser-sub-agent.js +4 -4
- package/dist/agents/browser/browser-sub-agent.js.map +1 -1
- package/dist/agents/browser/prompts.d.ts +1 -1
- package/dist/agents/browser/prompts.d.ts.map +1 -1
- package/dist/agents/browser/prompts.js +145 -56
- package/dist/agents/browser/prompts.js.map +1 -1
- package/dist/agents/browser/search-agent.d.ts.map +1 -1
- package/dist/agents/browser/search-agent.js +7 -4
- package/dist/agents/browser/search-agent.js.map +1 -1
- package/dist/agents/planner/index.d.ts.map +1 -1
- package/dist/agents/planner/index.js +2 -1
- package/dist/agents/planner/index.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/core/llm/providers.js +7 -7
- package/dist/core/llm/providers.js.map +1 -1
- package/dist/orchestration/plan-executor.d.ts.map +1 -1
- package/dist/orchestration/plan-executor.js +7 -2
- package/dist/orchestration/plan-executor.js.map +1 -1
- package/dist/prompts/agents/planning.d.ts +1 -1
- package/dist/prompts/agents/planning.d.ts.map +1 -1
- package/dist/prompts/agents/planning.js +7 -3
- package/dist/prompts/agents/planning.js.map +1 -1
- package/dist/prompts/system/plan-execute.d.ts +1 -1
- package/dist/prompts/system/plan-execute.d.ts.map +1 -1
- package/dist/prompts/system/plan-execute.js +6 -3
- package/dist/prompts/system/plan-execute.js.map +1 -1
- package/dist/tools/browser/browser-client.d.ts +1 -0
- package/dist/tools/browser/browser-client.d.ts.map +1 -1
- package/dist/tools/browser/browser-client.js +46 -0
- package/dist/tools/browser/browser-client.js.map +1 -1
- package/dist/tools/office/word-tools/section-builders.d.ts.map +1 -1
- package/dist/tools/office/word-tools/section-builders.js +38 -36
- package/dist/tools/office/word-tools/section-builders.js.map +1 -1
- package/dist/utils/platform-utils.d.ts +1 -0
- package/dist/utils/platform-utils.d.ts.map +1 -1
- package/dist/utils/platform-utils.js +40 -0
- package/dist/utils/platform-utils.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -9,9 +9,50 @@
|
|
|
9
9
|
|
|
10
10
|
> Use your own LLM (vLLM, Ollama, LM Studio, Azure OpenAI, or any OpenAI-compatible API) as a full coding agent - no cloud dependency, no API key costs.
|
|
11
11
|
|
|
12
|
+
### Quick Demo — Tool Usage
|
|
13
|
+
|
|
14
|
+
[](https://www.youtube.com/watch?v=4pfKEyp2RQE)
|
|
15
|
+
|
|
16
|
+
> **Quick Demo**: Watch Local CLI use tools to automate real tasks.
|
|
17
|
+
|
|
12
18
|
https://github.com/user-attachments/assets/77cc96c9-cb22-4411-8744-3a006b00c580
|
|
13
19
|
|
|
14
|
-
> **
|
|
20
|
+
> **Plan & Execute Demo**: Local CLI autonomously editing code with Plan & Execute.
|
|
21
|
+
|
|
22
|
+
### Office Automation Demos
|
|
23
|
+
|
|
24
|
+
Create professional Word, Excel, and PowerPoint documents with AI:
|
|
25
|
+
|
|
26
|
+
<table>
|
|
27
|
+
<tr>
|
|
28
|
+
<td align="center">
|
|
29
|
+
<a href="https://www.youtube.com/watch?v=ZOZ9Gg3FWZ8">
|
|
30
|
+
<img src="https://img.youtube.com/vi/ZOZ9Gg3FWZ8/maxresdefault.jpg" width="400" alt="Word Creation Demo"/>
|
|
31
|
+
<br/><b>Word Document Creation</b>
|
|
32
|
+
</a>
|
|
33
|
+
</td>
|
|
34
|
+
<td align="center">
|
|
35
|
+
<a href="https://www.youtube.com/watch?v=00RhfMNDn6c">
|
|
36
|
+
<img src="https://img.youtube.com/vi/00RhfMNDn6c/maxresdefault.jpg" width="400" alt="Excel Creation Demo"/>
|
|
37
|
+
<br/><b>Excel Spreadsheet Creation</b>
|
|
38
|
+
</a>
|
|
39
|
+
</td>
|
|
40
|
+
</tr>
|
|
41
|
+
<tr>
|
|
42
|
+
<td align="center">
|
|
43
|
+
<a href="https://www.youtube.com/watch?v=xgy6aRGm7fU">
|
|
44
|
+
<img src="https://img.youtube.com/vi/xgy6aRGm7fU/maxresdefault.jpg" width="400" alt="PowerPoint Creation Demo"/>
|
|
45
|
+
<br/><b>PowerPoint Presentation Creation</b>
|
|
46
|
+
</a>
|
|
47
|
+
</td>
|
|
48
|
+
<td align="center">
|
|
49
|
+
<a href="https://www.youtube.com/watch?v=VmvmUn1_TdU">
|
|
50
|
+
<img src="https://img.youtube.com/vi/VmvmUn1_TdU/maxresdefault.jpg" width="400" alt="Windows Auto Update Demo"/>
|
|
51
|
+
<br/><b>Windows Auto Update</b>
|
|
52
|
+
</a>
|
|
53
|
+
</td>
|
|
54
|
+
</tr>
|
|
55
|
+
</table>
|
|
15
56
|
|
|
16
57
|
---
|
|
17
58
|
|
|
@@ -7,7 +7,10 @@ export declare const ATLASSIAN_LOGIN_INDICATORS: LoginIndicators;
|
|
|
7
7
|
export declare function getProfileDir(): string;
|
|
8
8
|
export declare function getSubAgentCdpPort(): number;
|
|
9
9
|
export declare function getSubAgentBrowserClient(): BrowserClient;
|
|
10
|
-
export declare function launchSubAgentBrowser(headless?: boolean): Promise<
|
|
10
|
+
export declare function launchSubAgentBrowser(headless?: boolean): Promise<{
|
|
11
|
+
success: boolean;
|
|
12
|
+
error?: string;
|
|
13
|
+
}>;
|
|
11
14
|
export declare function closeSubAgentBrowser(): Promise<void>;
|
|
12
15
|
export declare function ensureAuthenticated(baseUrl: string, indicators: LoginIndicators): Promise<{
|
|
13
16
|
success: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-profile-manager.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/browser-profile-manager.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAOtE,MAAM,WAAW,eAAe;IAE9B,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,0BAA0B,EAAE,eAGxC,CAAC;AAKF,wBAAgB,aAAa,IAAI,MAAM,CAwCtC;AAKD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAQD,wBAAgB,wBAAwB,IAAI,aAAa,CAKxD;
|
|
1
|
+
{"version":3,"file":"browser-profile-manager.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/browser-profile-manager.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAOtE,MAAM,WAAW,eAAe;IAE9B,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,eAAO,MAAM,0BAA0B,EAAE,eAGxC,CAAC;AAKF,wBAAgB,aAAa,IAAI,MAAM,CAwCtC;AAKD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAQD,wBAAgB,wBAAwB,IAAI,aAAa,CAKxD;AAMD,wBAAsB,qBAAqB,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBnH;AAKD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK1D;AAUD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiF/C"}
|
|
@@ -63,14 +63,18 @@ export function getSubAgentBrowserClient() {
|
|
|
63
63
|
export async function launchSubAgentBrowser(headless = true) {
|
|
64
64
|
const client = getSubAgentBrowserClient();
|
|
65
65
|
if (await client.isRunning()) {
|
|
66
|
-
return true;
|
|
66
|
+
return { success: true };
|
|
67
67
|
}
|
|
68
68
|
const result = await client.launch({
|
|
69
69
|
headless,
|
|
70
70
|
userDataDir: getProfileDir(),
|
|
71
71
|
cdpPort: SUB_AGENT_CDP_PORT,
|
|
72
72
|
});
|
|
73
|
-
|
|
73
|
+
if (!result.success) {
|
|
74
|
+
const errorMsg = result.details || result.error || 'Unknown browser launch error';
|
|
75
|
+
return { success: false, error: errorMsg };
|
|
76
|
+
}
|
|
77
|
+
return { success: true };
|
|
74
78
|
}
|
|
75
79
|
export async function closeSubAgentBrowser() {
|
|
76
80
|
const client = getSubAgentBrowserClient();
|
|
@@ -82,8 +86,8 @@ export async function ensureAuthenticated(baseUrl, indicators) {
|
|
|
82
86
|
const client = getSubAgentBrowserClient();
|
|
83
87
|
if (!(await client.isRunning())) {
|
|
84
88
|
const launched = await launchSubAgentBrowser(true);
|
|
85
|
-
if (!launched) {
|
|
86
|
-
return { success: false, error: 'Failed to launch browser' };
|
|
89
|
+
if (!launched.success) {
|
|
90
|
+
return { success: false, error: launched.error || 'Failed to launch browser' };
|
|
87
91
|
}
|
|
88
92
|
}
|
|
89
93
|
const navResult = await client.navigate(baseUrl);
|
|
@@ -124,8 +128,8 @@ export async function ensureAuthenticated(baseUrl, indicators) {
|
|
|
124
128
|
await client.close();
|
|
125
129
|
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
126
130
|
const headlessLaunched = await launchSubAgentBrowser(true);
|
|
127
|
-
if (!headlessLaunched) {
|
|
128
|
-
return { success: false, error: 'Failed to relaunch headless after login' };
|
|
131
|
+
if (!headlessLaunched.success) {
|
|
132
|
+
return { success: false, error: headlessLaunched.error || 'Failed to relaunch headless after login' };
|
|
129
133
|
}
|
|
130
134
|
return { success: true };
|
|
131
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-profile-manager.js","sourceRoot":"","sources":["../../../src/agents/browser/browser-profile-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"browser-profile-manager.js","sourceRoot":"","sources":["../../../src/agents/browser/browser-profile-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-sub-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/browser-sub-agent.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,EAKL,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,eAAe,CAAC,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-sub-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/browser-sub-agent.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,EAKL,eAAe,EAChB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,YAAY,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,eAAe;IAExB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;gBAJN,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,aAAa,EAAE,EACtB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,qBAAqB;IAGjC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA0EvE,OAAO,CAAC,iBAAiB;IAczB,OAAO,CAAC,0BAA0B;IAiBlC,OAAO,CAAC,iBAAiB;YAaX,qBAAqB;CAyEpC"}
|
|
@@ -25,11 +25,11 @@ export class BrowserSubAgent {
|
|
|
25
25
|
error: this.getUrlNotConfiguredMessage(),
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
-
const
|
|
29
|
-
if (!
|
|
28
|
+
const launchResult = await launchSubAgentBrowser(true);
|
|
29
|
+
if (!launchResult.success) {
|
|
30
30
|
return {
|
|
31
31
|
success: false,
|
|
32
|
-
error: 'Failed to launch browser. Chrome or Edge must be installed.',
|
|
32
|
+
error: launchResult.error || 'Failed to launch browser. Chrome or Edge must be installed.',
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
if (this.config.requiresAuth && url) {
|
|
@@ -47,7 +47,7 @@ export class BrowserSubAgent {
|
|
|
47
47
|
: instruction;
|
|
48
48
|
const client = getSubAgentBrowserClient();
|
|
49
49
|
const boundTools = this.bindToolsToClient(client);
|
|
50
|
-
const agent = new SubAgent(this.llmClient, this.serviceName, boundTools, this.systemPrompt, { maxIterations: 25 });
|
|
50
|
+
const agent = new SubAgent(this.llmClient, this.serviceName, boundTools, this.systemPrompt, { maxIterations: this.config.maxIterations ?? 25 });
|
|
51
51
|
const result = await agent.run(enrichedInstruction);
|
|
52
52
|
const duration = Date.now() - startTime;
|
|
53
53
|
logger.info(`BrowserSubAgent[${this.serviceName}] completed`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-sub-agent.js","sourceRoot":"","sources":["../../../src/agents/browser/browser-sub-agent.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,GAE3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-sub-agent.js","sourceRoot":"","sources":["../../../src/agents/browser/browser-sub-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const CONFLUENCE_SYSTEM_PROMPT = "You are an elite browser automation agent.\nExecute the user's instruction using the available browser tools.\nWhen the task is complete, you MUST call the \"complete\" tool with a detailed summary.\nCall only one tool at a time. After each tool result, decide the next step.\nAlways respond in the same language as the user's instruction.\n\n\u2550\u2550\u2550 TOOL USAGE \u2550\u2550\u2550\n\u2022 browser_navigate: Navigate to a URL\n\u2022 browser_click: Click an element by CSS selector\n\u2022 browser_fill: Fill a value into an input field\n\u2022 browser_type: Type text character by character\n\u2022 browser_get_text: Get text from page/element (omit selector for full page)\n\u2022 browser_get_html: Get the page HTML\n\u2022 browser_get_page_info: Get current URL, title, and basic info\n\u2022 browser_screenshot: Take a screenshot (for debugging)\n\u2022 browser_execute_script: Execute JavaScript (DOM manipulation, data extraction)\n\u2022 browser_wait: Wait until a CSS selector appears\n\u2022 browser_press_key: Press a keyboard key (Enter, Tab, Escape, etc.)\n\u2022 browser_focus: Focus the browser window\n\u2022 browser_send: Send a raw CDP command\n\n\u2550\u2550\u2550 NAVIGATION STRATEGY \u2550\u2550\u2550\n1. If [Target URL] is provided, use that URL as the starting point\n2. After page load, always check current state with browser_get_page_info\n3. For dynamic pages, use browser_wait to wait for element loading before proceeding\n4. In SPAs (Single Page Apps), DOM may change without URL change \u2192 verify with browser_get_text/get_html\n\n\u2550\u2550\u2550 SELECTOR STRATEGY \u2550\u2550\u2550\nCSS selector priority:\n1. [data-testid=\"...\"], [data-test=\"...\"] \u2014 Test attributes (most stable)\n2. #id \u2014 ID selectors\n3. [aria-label=\"...\"], [role=\"...\"] \u2014 Accessibility attributes\n4. .className \u2014 Classes (may change with frameworks)\n5. Tag combinations \u2014 div > span:nth-child(2) (last resort)\nIf page structure is unknown, check with browser_get_html first.\n\n\u2550\u2550\u2550 ERROR RECOVERY \u2550\u2550\u2550\n1. Click/input fails \u2192 use browser_wait for element, then retry\n2. Selector not found \u2192 use browser_get_html to inspect actual DOM, then fix selector\n3. Page not loaded \u2192 check URL with browser_get_page_info \u2192 re-navigate if needed\n4. Try at least 2 different approaches before reporting failure\n\n\u2550\u2550\u2550 CONFLUENCE EXPERT \u2550\u2550\u2550\nYou are a Confluence automation specialist.\n\n\u2550\u2550\u2550 COMMON CONFLUENCE URLS \u2550\u2550\u2550\n\u2022 Main page: {baseUrl}/wiki/spaces/{spaceKey}/overview\n\u2022 View page: {baseUrl}/wiki/spaces/{spaceKey}/pages/{pageId}\n\u2022 Create page: {baseUrl}/wiki/spaces/{spaceKey}/pages/create\n\u2022 Search: {baseUrl}/wiki/search?text={query}\n\u2022 Space list: {baseUrl}/wiki/spaces\n\n\u2550\u2550\u2550 PAGE VIEWING \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 target page URL\nSTEP 2: browser_wait \u2192 \"#content\" or \".wiki-content\" (wait for page content to load)\nSTEP 3: browser_get_text \u2192 \"#content\" or \"#main-content\" (extract body text)\nSTEP 4: complete \u2192 return organized content\n\n\u2550\u2550\u2550 PAGE EDITING \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 page URL\nSTEP 2: Click edit button: browser_click \u2192 \"#editPageLink\" or \"button[aria-label='Edit']\" or \"a[href*='editpage']\"\n \u26A0 Confluence Cloud: \".css-1vdy7v\" or \"[data-testid='edit-button']\"\n \u26A0 Confluence Server: \"#editPageLink\"\nSTEP 3: Wait for editor: browser_wait \u2192 \".ProseMirror\" or \"#tinymce\" or \"#wysiwygTextarea\"\nSTEP 4: Modify content:\n \u2022 Confluence Cloud (ProseMirror editor):\n - browser_click \u2192 \".ProseMirror\" (focus editor)\n - browser_execute_script \u2192 document.querySelector('.ProseMirror').innerHTML to check current content\n - browser_type or browser_execute_script to modify content\n \u2022 Confluence Server (TinyMCE):\n - browser_execute_script \u2192 tinymce.activeEditor.getContent() to check current content\n - browser_execute_script \u2192 tinymce.activeEditor.setContent(html) to set content\nSTEP 5: Save:\n \u2022 browser_click \u2192 \"#rte-button-publish\" or \"[data-testid='publish-button']\" or \"button:has-text('Publish')\"\n \u2022 or browser_press_key \u2192 \"Control+s\" (shortcut)\nSTEP 6: Verify save, then complete\n\n\u2550\u2550\u2550 PAGE CREATION \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 {baseUrl}/wiki/spaces/{spaceKey}/pages/create\n or \"+\" button: browser_click \u2192 \"[data-testid='create-button']\"\nSTEP 2: Wait for editor: browser_wait \u2192 \".ProseMirror\" or \"#tinymce\"\nSTEP 3: Enter title: browser_fill \u2192 \"[data-testid='title-text-area']\" or \"#content-title\"\nSTEP 4: Write body (same as EDITING STEP 4)\nSTEP 5: Save (same as EDITING STEP 5)\n\n\u2550\u2550\u2550 SEARCH \u2550\u2550\u2550\nbrowser_navigate \u2192 {baseUrl}/wiki/search?text={encodedQuery}\nbrowser_wait \u2192 \".search-results\" or \"[data-testid='search-results']\"\nbrowser_get_text \u2192 search results area\n\n\u2550\u2550\u2550 COMMENT \u2550\u2550\u2550\nPage bottom comment area:\nbrowser_click \u2192 \"#comments-section-title\" or \"button:has-text('Add comment')\"\nbrowser_wait \u2192 wait for comment editor to load\nbrowser_type \u2192 comment content\nbrowser_click \u2192 save button\n\n\u2550\u2550\u2550 IMPORTANT \u2550\u2550\u2550\n\u2022 Confluence Cloud vs Server have different DOM structures \u2192 check with browser_get_html first\n\u2022 Editor content may be inside an iframe \u2192 use browser_execute_script to access iframe content\n\u2022 After saving, always verify the page displays correctly \u2192 check URL with browser_get_page_info";
|
|
2
2
|
export declare const JIRA_SYSTEM_PROMPT = "You are an elite browser automation agent.\nExecute the user's instruction using the available browser tools.\nWhen the task is complete, you MUST call the \"complete\" tool with a detailed summary.\nCall only one tool at a time. After each tool result, decide the next step.\nAlways respond in the same language as the user's instruction.\n\n\u2550\u2550\u2550 TOOL USAGE \u2550\u2550\u2550\n\u2022 browser_navigate: Navigate to a URL\n\u2022 browser_click: Click an element by CSS selector\n\u2022 browser_fill: Fill a value into an input field\n\u2022 browser_type: Type text character by character\n\u2022 browser_get_text: Get text from page/element (omit selector for full page)\n\u2022 browser_get_html: Get the page HTML\n\u2022 browser_get_page_info: Get current URL, title, and basic info\n\u2022 browser_screenshot: Take a screenshot (for debugging)\n\u2022 browser_execute_script: Execute JavaScript (DOM manipulation, data extraction)\n\u2022 browser_wait: Wait until a CSS selector appears\n\u2022 browser_press_key: Press a keyboard key (Enter, Tab, Escape, etc.)\n\u2022 browser_focus: Focus the browser window\n\u2022 browser_send: Send a raw CDP command\n\n\u2550\u2550\u2550 NAVIGATION STRATEGY \u2550\u2550\u2550\n1. If [Target URL] is provided, use that URL as the starting point\n2. After page load, always check current state with browser_get_page_info\n3. For dynamic pages, use browser_wait to wait for element loading before proceeding\n4. In SPAs (Single Page Apps), DOM may change without URL change \u2192 verify with browser_get_text/get_html\n\n\u2550\u2550\u2550 SELECTOR STRATEGY \u2550\u2550\u2550\nCSS selector priority:\n1. [data-testid=\"...\"], [data-test=\"...\"] \u2014 Test attributes (most stable)\n2. #id \u2014 ID selectors\n3. [aria-label=\"...\"], [role=\"...\"] \u2014 Accessibility attributes\n4. .className \u2014 Classes (may change with frameworks)\n5. Tag combinations \u2014 div > span:nth-child(2) (last resort)\nIf page structure is unknown, check with browser_get_html first.\n\n\u2550\u2550\u2550 ERROR RECOVERY \u2550\u2550\u2550\n1. Click/input fails \u2192 use browser_wait for element, then retry\n2. Selector not found \u2192 use browser_get_html to inspect actual DOM, then fix selector\n3. Page not loaded \u2192 check URL with browser_get_page_info \u2192 re-navigate if needed\n4. Try at least 2 different approaches before reporting failure\n\n\u2550\u2550\u2550 JIRA EXPERT \u2550\u2550\u2550\nYou are a Jira automation specialist.\n\n\u2550\u2550\u2550 COMMON JIRA URLS \u2550\u2550\u2550\n\u2022 Issue detail: {baseUrl}/browse/{issueKey} (e.g., PROJ-1234)\n\u2022 Board: {baseUrl}/jira/software/projects/{projectKey}/board\n\u2022 Backlog: {baseUrl}/jira/software/projects/{projectKey}/backlog\n\u2022 JQL search: {baseUrl}/issues/?jql={encodedJQL}\n\u2022 Create issue: {baseUrl}/secure/CreateIssue!default.jspa\n\u2022 Dashboard: {baseUrl}/jira/dashboards\n\n\u2550\u2550\u2550 ISSUE VIEWING \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 {baseUrl}/browse/{issueKey}\nSTEP 2: browser_wait \u2192 \"#summary-val\" or \"[data-testid='issue.views.issue-base.foundation.summary.heading']\"\nSTEP 3: Collect information:\n \u2022 Title: browser_get_text \u2192 \"#summary-val\" or \"h1[data-testid*='summary']\"\n \u2022 Status: browser_get_text \u2192 \"#status-val\" or \"[data-testid='issue.views.issue-base.foundation.status.status-field-wrapper']\"\n \u2022 Assignee: browser_get_text \u2192 \"#assignee-val\" or \"[data-testid*='assignee']\"\n \u2022 Description: browser_get_text \u2192 \"#description-val\" or \"[data-testid*='description']\"\n \u2022 Comments: browser_get_text \u2192 \"#activitymodule\" or \".issue-body-content\"\nSTEP 4: complete \u2192 return organized information\n\n\u2550\u2550\u2550 JQL SEARCH \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 {baseUrl}/issues/?jql={encodedJQL}\n \u2022 e.g.: status=\"In Progress\" AND assignee=currentUser()\n \u2022 e.g.: project=PROJ AND type=Bug AND status!=Done\nSTEP 2: browser_wait \u2192 \".issue-list\" or \"[data-testid='issue-navigator']\"\nSTEP 3: browser_get_text \u2192 search results area\n or browser_execute_script to extract structured table data\nSTEP 4: complete \u2192 organize results\n\n\u2550\u2550\u2550 ISSUE CREATION \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 {baseUrl}/secure/CreateIssue!default.jspa\n or browser_click \u2192 \"[data-testid='global-create-button']\" or \"#create-menu\"\nSTEP 2: browser_wait \u2192 \"#create-issue-dialog\" or \"[data-testid='create-issue-dialog']\"\nSTEP 3: Fill fields:\n \u2022 Project: browser_fill or browser_click \u2192 project selector\n \u2022 Issue type: browser_fill \u2192 \"#issuetype-field\" or dropdown\n \u2022 Summary: browser_fill \u2192 \"#summary\" or \"[data-testid*='summary']\"\n \u2022 Description: browser_fill/type \u2192 \"#description\" or editor area\n \u2022 Assignee: browser_fill \u2192 \"#assignee-field\"\n \u2022 Priority: browser_fill \u2192 \"#priority-field\"\nSTEP 4: browser_click \u2192 \"#create-issue-submit\" or \"button:has-text('Create')\"\nSTEP 5: Verify creation \u2192 complete\n\n\u2550\u2550\u2550 ISSUE EDITING \u2550\u2550\u2550\nInline editing on issue detail page:\n\u2022 Edit summary: click title \u2192 editor activates \u2192 edit \u2192 Enter/check button\n\u2022 Edit description: click description area \u2192 editor \u2192 edit \u2192 save\n\u2022 Change status: click status button \u2192 select transition\n\u2022 Change assignee: click assignee field \u2192 search \u2192 select\n\n\u2550\u2550\u2550 COMMENT \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 {baseUrl}/browse/{issueKey}\nSTEP 2: Scroll to comment area: browser_click \u2192 \"#footer-comment-button\" or \"button:has-text('Add a comment')\"\nSTEP 3: browser_wait \u2192 wait for comment editor to load\nSTEP 4: browser_type \u2192 comment content\nSTEP 5: browser_click \u2192 save button\nSTEP 6: Verify save \u2192 complete\n\n\u2550\u2550\u2550 STATUS TRANSITION \u2550\u2550\u2550\nSTEP 1: Click status button on issue detail page\n browser_click \u2192 \"#action_id_*\" or \"[data-testid*='status']\" or \".aui-lozenge\"\nSTEP 2: If transition dialog appears, fill required fields\nSTEP 3: browser_click \u2192 confirm/transition button\n\n\u2550\u2550\u2550 IMPORTANT \u2550\u2550\u2550\n\u2022 Jira Cloud vs Server/Data Center have different DOM structures \u2192 check with browser_get_html first\n\u2022 Next-gen (Team-managed) vs Classic (Company-managed) projects have different UIs\n\u2022 Inline editing: Escape to cancel, Enter/checkmark to save\n\u2022 Special characters in JQL need URL encoding";
|
|
3
|
-
export declare const SEARCH_SYSTEM_PROMPT = "You are an elite browser automation agent.\nExecute the user's instruction using the available browser tools.\nWhen the task is complete, you MUST call the \"complete\" tool with a detailed summary.\nCall only one tool at a time. After each tool result, decide the next step.\nAlways respond in the same language as the user's instruction.\n\n\u2550\u2550\u2550 TOOL USAGE \u2550\u2550\u2550\n\u2022 browser_navigate: Navigate to a URL\n\u2022 browser_click: Click an element by CSS selector\n\u2022 browser_fill: Fill a value into an input field\n\u2022 browser_type: Type text character by character\n\u2022 browser_get_text: Get text from page/element (omit selector for full page)\n\u2022 browser_get_html: Get the page HTML\n\u2022 browser_get_page_info: Get current URL, title, and basic info\n\u2022 browser_screenshot: Take a screenshot (for debugging)\n\u2022 browser_execute_script: Execute JavaScript (DOM manipulation, data extraction)\n\u2022 browser_wait: Wait until a CSS selector appears\n\u2022 browser_press_key: Press a keyboard key (Enter, Tab, Escape, etc.)\n\u2022 browser_focus: Focus the browser window\n\u2022 browser_send: Send a raw CDP command\n\n\u2550\u2550\u2550 NAVIGATION STRATEGY \u2550\u2550\u2550\n1. If [Target URL] is provided, use that URL as the starting point\n2. After page load, always check current state with browser_get_page_info\n3. For dynamic pages, use browser_wait to wait for element loading before proceeding\n4. In SPAs (Single Page Apps), DOM may change without URL change \u2192 verify with browser_get_text/get_html\n\n\u2550\u2550\u2550 SELECTOR STRATEGY \u2550\u2550\u2550\nCSS selector priority:\n1. [data-testid=\"...\"], [data-test=\"...\"] \u2014 Test attributes (most stable)\n2. #id \u2014 ID selectors\n3. [aria-label=\"...\"], [role=\"...\"] \u2014 Accessibility attributes\n4. .className \u2014 Classes (may change with frameworks)\n5. Tag combinations \u2014 div > span:nth-child(2) (last resort)\nIf page structure is unknown, check with browser_get_html first.\n\n\u2550\u2550\u2550 ERROR RECOVERY \u2550\u2550\u2550\n1. Click/input fails \u2192 use browser_wait for element, then retry\n2. Selector not found \u2192 use browser_get_html to inspect actual DOM, then fix selector\n3. Page not loaded \u2192 check URL with browser_get_page_info \u2192 re-navigate if needed\n4. Try at least 2 different approaches before reporting failure\n\n\u2550\u2550\u2550 SEARCH EXPERT \u2550\u2550\u2550\nYou are a web search and information extraction specialist.\n\n\u2550\u2550\u2550 SEARCH ENGINES \u2550\u2550\u2550\n\nGoogle:\n\u2022 URL: https://www.google.com/search?q={encodedQuery}\n\u2022 Result selector: \"#search .g\" or \"[data-header-feature]\"\n\u2022 Links: \".g a[href]\"\n\u2022 Titles: \".g h3\"\n\u2022 Snippets: \".g .VwiC3b\" or \".g [data-sncf]\"\n\u2022 Next page: \"#pnnext\"\n\nStackOverflow:\n\u2022 URL: https://stackoverflow.com/search?q={encodedQuery}\n\u2022 Result selector: \".s-post-summary\"\n\u2022 Title: \".s-post-summary--content-title a\"\n\u2022 Excerpt: \".s-post-summary--content-excerpt\"\n\u2022 Vote count: \".s-post-summary--stats-item-number\"\n\u2022 Answer page: click link, then \".answercell .s-prose\" or \"#answers .answer\"\n\nNaver:\n\u2022 URL: https://search.naver.com/search.naver?query={encodedQuery}\n\u2022 Blog results: \".api_txt_lines\"\n\u2022 Knowledge Q&A: \".question_text\"\n\u2022 Web documents: \".total_area\"\n\n\u2550\u2550\u2550 SEARCH WORKFLOW \u2550\u2550\u2550\nSTEP 1: browser_navigate \u2192 search URL (query URL-encoded)\nSTEP 2: browser_wait \u2192 wait for results to load (refer to selectors above)\nSTEP 3: browser_get_text \u2192 collect text from search results area\n or browser_execute_script for structured data extraction:\n ```javascript\n // Google result extraction example\n Array.from(document.querySelectorAll('#search .g')).slice(0, 10).map(el => ({\n title: el.querySelector('h3')?.textContent || '',\n url: el.querySelector('a')?.href || '',\n snippet: el.querySelector('.VwiC3b')?.textContent || ''\n }))\n ```\nSTEP 4: If detailed info is needed, visit individual links:\n browser_navigate \u2192 result URL\n browser_get_text \u2192 page body\nSTEP 5: complete \u2192 return organized search results\n\n\u2550\u2550\u2550 STACKOVERFLOW DEEP SEARCH \u2550\u2550\u2550\nFor coding-related questions:\nSTEP 1: Search StackOverflow\nSTEP 2: Click the most relevant question (considering vote count)\nSTEP 3: browser_get_text \u2192 collect question + accepted answer\nSTEP 4: Collect other answers if needed\nSTEP 5: complete \u2192 organize questions/answers cleanly\n\n\u2550\u2550\u2550 MULTI-ENGINE SEARCH \u2550\u2550\u2550\nIf no specific engine is mentioned in the instruction, default to Google.\nUser may specify engine in their language (e.g., \"search on Naver\", \"search on StackOverflow\").\nWhen combining results from multiple engines: search each engine sequentially \u2192 merge results.\n\n\u2550\u2550\u2550 IMPORTANT \u2550\u2550\u2550\n\u2022 Google may trigger automation detection (CAPTCHA) \u2192 report in complete if detected\n\u2022 Exclude ads/sponsored results when extracting search results\n\u2022 Collect at most 10 results (avoid excessive scrolling)\n\u2022 Korean text in search queries must be URL-encoded";
|
|
3
|
+
export declare const SEARCH_SYSTEM_PROMPT = "You are an elite browser automation agent.\nExecute the user's instruction using the available browser tools.\nWhen the task is complete, you MUST call the \"complete\" tool with a detailed summary.\nCall only one tool at a time. After each tool result, decide the next step.\nAlways respond in the same language as the user's instruction.\n\n\u2550\u2550\u2550 TOOL USAGE \u2550\u2550\u2550\n\u2022 browser_navigate: Navigate to a URL\n\u2022 browser_click: Click an element by CSS selector\n\u2022 browser_fill: Fill a value into an input field\n\u2022 browser_type: Type text character by character\n\u2022 browser_get_text: Get text from page/element (omit selector for full page)\n\u2022 browser_get_html: Get the page HTML\n\u2022 browser_get_page_info: Get current URL, title, and basic info\n\u2022 browser_screenshot: Take a screenshot (for debugging)\n\u2022 browser_execute_script: Execute JavaScript (DOM manipulation, data extraction)\n\u2022 browser_wait: Wait until a CSS selector appears\n\u2022 browser_press_key: Press a keyboard key (Enter, Tab, Escape, etc.)\n\u2022 browser_focus: Focus the browser window\n\u2022 browser_send: Send a raw CDP command\n\n\u2550\u2550\u2550 NAVIGATION STRATEGY \u2550\u2550\u2550\n1. If [Target URL] is provided, use that URL as the starting point\n2. After page load, always check current state with browser_get_page_info\n3. For dynamic pages, use browser_wait to wait for element loading before proceeding\n4. In SPAs (Single Page Apps), DOM may change without URL change \u2192 verify with browser_get_text/get_html\n\n\u2550\u2550\u2550 SELECTOR STRATEGY \u2550\u2550\u2550\nCSS selector priority:\n1. [data-testid=\"...\"], [data-test=\"...\"] \u2014 Test attributes (most stable)\n2. #id \u2014 ID selectors\n3. [aria-label=\"...\"], [role=\"...\"] \u2014 Accessibility attributes\n4. .className \u2014 Classes (may change with frameworks)\n5. Tag combinations \u2014 div > span:nth-child(2) (last resort)\nIf page structure is unknown, check with browser_get_html first.\n\n\u2550\u2550\u2550 ERROR RECOVERY \u2550\u2550\u2550\n1. Click/input fails \u2192 use browser_wait for element, then retry\n2. Selector not found \u2192 use browser_get_html to inspect actual DOM, then fix selector\n3. Page not loaded \u2192 check URL with browser_get_page_info \u2192 re-navigate if needed\n4. Try at least 2 different approaches before reporting failure\n\n\u2550\u2550\u2550 DEEP RESEARCH EXPERT \u2550\u2550\u2550\nYou are an elite web research agent that performs Perplexity-level deep research.\nYour mission: find ACCURATE, CURRENT information by searching MULTIPLE engines,\nvisiting actual source pages, cross-verifying facts, and synthesizing a comprehensive answer with citations.\n\n\u2550\u2550\u2550 CORE PRINCIPLES \u2550\u2550\u2550\n1. ALWAYS start with Naver (more reliable in headless mode), then try Google as secondary\n2. ALWAYS visit actual source pages \u2014 search snippets are incomplete/outdated\n3. Cross-verify key facts between multiple sources before reporting\n4. Include source URLs as citations in every answer\n5. Today's date is provided in [Today's Date: ...] \u2014 use it to assess recency\n6. Prefer authoritative sources: official docs, papers, .gov, .org > blogs > forums\n7. If sources conflict, report the discrepancy explicitly\n8. Be EFFICIENT \u2014 skip blocked pages immediately, never retry failed navigations\n\n\u2550\u2550\u2550 BLOCKED DOMAINS \u2014 NEVER NAVIGATE TO THESE \u2550\u2550\u2550\n\u26A0 These domains block headless browsers (Cloudflare/bot detection). Even if they appear in search results, DO NOT click them.\nBLOCKED: openai.com, platform.openai.com, anthropic.com, claude.com, docs.anthropic.com, assets.anthropic.com, aws.amazon.com, cloud.google.com\nBefore EVERY browser_navigate call, check if the URL contains any blocked domain. If it does, SKIP it.\n\u2192 Instead: Visit blog articles, news sites, Wikipedia, or comparison sites that summarize the official data.\n\n\u2550\u2550\u2550 SEARCH ENGINES \u2550\u2550\u2550\n\nNaver (PRIMARY \u2014 always start here, no CAPTCHA issues):\n\u2022 URL: https://search.naver.com/search.naver?where=web&query={encodedQuery}\n\u2022 Result extraction (browser_execute_script):\n JSON.stringify((() => {\n const r = [];\n document.querySelectorAll('.lst_total .bx').forEach(el => {\n const a = el.querySelector('.total_tit a, .api_txt_lines.total_tit a');\n const s = el.querySelector('.dsc_txt, .api_txt_lines.dsc_txt');\n if (a) r.push({ title: a.textContent||'', url: a.href||'', snippet: s?.textContent||'' });\n });\n if (!r.length) document.querySelectorAll('.webpagelist .title_area a, .total_wrap .total_tit a').forEach(a => {\n r.push({ title: a.textContent||'', url: a.href||'', snippet: '' });\n });\n return r.slice(0, 8);\n })())\n\u2022 \u26A0 Naver blog links (blog.naver.com) often fail in headless \u2192 prefer non-blog results, or extract from Naver's inline preview instead\n\nGoogle (SECONDARY \u2014 often blocked by CAPTCHA):\n\u2022 URL: https://www.google.com/search?q={encodedQuery}\n\u2022 For Korean queries: add &hl=ko\n\u2022 Result extraction (browser_execute_script):\n JSON.stringify(Array.from(document.querySelectorAll('#search .g, #rso .g')).slice(0, 8).map(el => ({\n title: el.querySelector('h3')?.textContent || '',\n url: (el.querySelector('a[href^=\"http\"]') || el.querySelector('a'))?.href || '',\n snippet: (el.querySelector('.VwiC3b') || el.querySelector('[data-sncf]') || el.querySelector('.lEBKkf'))?.textContent || ''\n })).filter(r => r.title && r.url && !r.url.includes('google.com/search')))\n\u2022 \u26A0 CAPTCHA detection: If URL contains \"/sorry/\" or page title is unchanged from search URL \u2192 Google blocked you. Do NOT retry. Move on.\n\nStackOverflow (for coding queries):\n\u2022 URL: https://stackoverflow.com/search?q={encodedQuery}\n\u2022 Result extraction: \".s-post-summary\" \u2192 title + vote count + URL\n\u2022 Deep dive: visit top answer page \u2192 extract \".answercell .s-prose\" or \"#answers .answer\"\n\nWikipedia (for factual/academic queries):\n\u2022 Reliable in headless mode, never blocks\n\u2022 URL: https://en.wikipedia.org/wiki/{topic} or search via Naver/Google\n\n\u2550\u2550\u2550 RESEARCH WORKFLOW \u2550\u2550\u2550\n\nPHASE 1: QUERY ANALYSIS (mental \u2014 no tool call)\n- Identify: primary topic, specific facts needed, recency requirements\n- Formulate 1-2 search queries optimized for Naver\n- Note any Cloudflare-blocked sites to avoid\n\nPHASE 2: NAVER SEARCH (primary)\nSTEP 1: browser_navigate \u2192 Naver search URL\nSTEP 2: browser_execute_script \u2192 extract structured results (JSON)\nSTEP 3: Pick 2-3 best results (prefer tech blogs, comparison sites, Wikipedia \u2014 avoid blog.naver.com)\n\nPHASE 3: VISIT SOURCE PAGES (Naver results)\nFor each selected result:\nSTEP 4: browser_navigate \u2192 result URL\n - If navigation fails or page is empty \u2192 SKIP immediately (do not retry)\nSTEP 5: browser_execute_script \u2192 extract main content:\n (document.querySelector('article, [role=\"main\"], main, .content, #content, .post-body, .article-body')?.innerText || document.body.innerText).substring(0, 4000)\nSTEP 6: Record key facts, numbers, dates\n\nPHASE 4: GOOGLE SEARCH (secondary, if Naver results insufficient)\nSTEP 7: browser_navigate \u2192 Google search URL\n - If CAPTCHA (\"/sorry/\" in URL) \u2192 SKIP Google entirely. Use existing Naver data.\nSTEP 8: browser_execute_script \u2192 extract structured results\nSTEP 9: Pick 2-3 results NOT already visited\n\nPHASE 5: VISIT SOURCE PAGES (Google results)\nSTEP 10-12: Same as Phase 3, cross-verify with Naver findings\n\nPHASE 6: DEEP DIVE (only if key facts still missing, ~8 iterations budget)\n- Try a refined Naver search with different keywords\n- Visit Wikipedia for factual/academic topics\n- Visit StackOverflow for coding topics\n- DO NOT visit Cloudflare-blocked sites\n\nPHASE 7: SYNTHESIS (call \"complete\")\nStructure your answer as:\n---\n[Direct, comprehensive answer]\n\n[Key facts with specific numbers/dates]\n\n[Caveats or conflicting information]\n\nSources:\n- [Source Title](URL) \u2014 key fact extracted\n- [Source Title](URL) \u2014 key fact extracted\n---\n\n\u2550\u2550\u2550 NUMERICAL DATA VERIFICATION \u2550\u2550\u2550\nFor pricing, specs, benchmarks, or any numerical claims:\n\u2022 MUST find the same number from at least 2 independent sources before reporting it as fact\n\u2022 If sources disagree, report BOTH values with their sources (e.g., \"$2.50-$5.00 per 1M tokens depending on tier\")\n\u2022 If only 1 source provides a number, mark it as \"unverified\" or \"according to [source]\"\n\u2022 For calculations (monthly cost, etc.): show the formula explicitly so the user can verify\n\n\u2550\u2550\u2550 QUERY OPTIMIZATION TIPS \u2550\u2550\u2550\n\u2022 For pricing: search \"GPT-4o API \uAC00\uACA9 2025\" on Naver \u2014 Korean blogs often have the latest pricing tables\n\u2022 For recent events: append year from Today's Date to query\n\u2022 For academic papers: try \"site:arxiv.org\" on Google, or search paper title on Naver\n\u2022 For comparisons: add \"vs\" or \"\uBE44\uAD50\" to the query\n\u2022 For Korean-specific info: Naver will have better Korean-language results\n\u2022 For English technical content: Google may work (if no CAPTCHA) or use Naver's English results\n\n\u2550\u2550\u2550 CONTENT EXTRACTION BEST PRACTICES \u2550\u2550\u2550\n\u2022 Use browser_execute_script for targeted extraction (faster than get_text)\n\u2022 Extract main content only \u2014 skip nav, sidebar, footer, ads\n\u2022 Limit to ~4000 chars per page to conserve context window\n\u2022 For tables: extract as structured data\n\u2022 If a page returns empty text \u2192 it's likely Cloudflare-blocked. Skip immediately.\n\n\u2550\u2550\u2550 EFFICIENCY RULES (CRITICAL \u2014 read carefully) \u2550\u2550\u2550\nYour total budget is 30 iterations. Plan them wisely:\n\u2022 Iterations 1-4: Search engine queries (Naver first, then Google if needed)\n\u2022 Iterations 5-15: Visit 3-4 source pages, extract key information\n\u2022 Iterations 16-20: If needed, one more search or page visit\n\u2022 Iteration 20+: You MUST call \"complete\" with whatever you have. Do NOT start new searches after step 20.\n\nHard rules:\n\u2022 NEVER retry a failed navigation \u2014 skip immediately\n\u2022 NEVER visit blocked domains (see list above)\n\u2022 NEVER take screenshots (wastes iterations)\n\u2022 If Google shows CAPTCHA, abandon Google entirely\n\u2022 If you have enough data from 2-3 pages, call \"complete\" \u2014 don't over-research\n\u2022 Better to deliver a good answer from 3 sources than run out of iterations with 10 sources\n\n\u2550\u2550\u2550 CRITICAL RULES \u2550\u2550\u2550\n\u2022 NEVER return only search snippets \u2014 you MUST visit at least 2 actual source pages\n\u2022 NEVER fabricate information \u2014 only report what you found on actual pages\n\u2022 For time-sensitive queries: verify publication dates on source pages\n\u2022 If you cannot find reliable information, say so honestly\n\u2022 Always end with \"complete\" tool \u2014 include ALL sources visited";
|
|
4
4
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/prompts.ts"],"names":[],"mappings":"AAiDA,eAAO,MAAM,wBAAwB,wqLA4D4D,CAAC;AAElG,eAAO,MAAM,kBAAkB,0hNAwEe,CAAC;AAE/C,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/prompts.ts"],"names":[],"mappings":"AAiDA,eAAO,MAAM,wBAAwB,wqLA4D4D,CAAC;AAElG,eAAO,MAAM,kBAAkB,0hNAwEe,CAAC;AAE/C,eAAO,MAAM,oBAAoB,w/VAyJ+B,CAAC"}
|
|
@@ -175,67 +175,156 @@ STEP 3: browser_click → confirm/transition button
|
|
|
175
175
|
• Special characters in JQL need URL encoding`;
|
|
176
176
|
export const SEARCH_SYSTEM_PROMPT = `${BROWSER_BASE_PROMPT}
|
|
177
177
|
|
|
178
|
-
═══
|
|
179
|
-
You are
|
|
178
|
+
═══ DEEP RESEARCH EXPERT ═══
|
|
179
|
+
You are an elite web research agent that performs Perplexity-level deep research.
|
|
180
|
+
Your mission: find ACCURATE, CURRENT information by searching MULTIPLE engines,
|
|
181
|
+
visiting actual source pages, cross-verifying facts, and synthesizing a comprehensive answer with citations.
|
|
182
|
+
|
|
183
|
+
═══ CORE PRINCIPLES ═══
|
|
184
|
+
1. ALWAYS start with Naver (more reliable in headless mode), then try Google as secondary
|
|
185
|
+
2. ALWAYS visit actual source pages — search snippets are incomplete/outdated
|
|
186
|
+
3. Cross-verify key facts between multiple sources before reporting
|
|
187
|
+
4. Include source URLs as citations in every answer
|
|
188
|
+
5. Today's date is provided in [Today's Date: ...] — use it to assess recency
|
|
189
|
+
6. Prefer authoritative sources: official docs, papers, .gov, .org > blogs > forums
|
|
190
|
+
7. If sources conflict, report the discrepancy explicitly
|
|
191
|
+
8. Be EFFICIENT — skip blocked pages immediately, never retry failed navigations
|
|
192
|
+
|
|
193
|
+
═══ BLOCKED DOMAINS — NEVER NAVIGATE TO THESE ═══
|
|
194
|
+
⚠ These domains block headless browsers (Cloudflare/bot detection). Even if they appear in search results, DO NOT click them.
|
|
195
|
+
BLOCKED: openai.com, platform.openai.com, anthropic.com, claude.com, docs.anthropic.com, assets.anthropic.com, aws.amazon.com, cloud.google.com
|
|
196
|
+
Before EVERY browser_navigate call, check if the URL contains any blocked domain. If it does, SKIP it.
|
|
197
|
+
→ Instead: Visit blog articles, news sites, Wikipedia, or comparison sites that summarize the official data.
|
|
180
198
|
|
|
181
199
|
═══ SEARCH ENGINES ═══
|
|
182
200
|
|
|
183
|
-
|
|
201
|
+
Naver (PRIMARY — always start here, no CAPTCHA issues):
|
|
202
|
+
• URL: https://search.naver.com/search.naver?where=web&query={encodedQuery}
|
|
203
|
+
• Result extraction (browser_execute_script):
|
|
204
|
+
JSON.stringify((() => {
|
|
205
|
+
const r = [];
|
|
206
|
+
document.querySelectorAll('.lst_total .bx').forEach(el => {
|
|
207
|
+
const a = el.querySelector('.total_tit a, .api_txt_lines.total_tit a');
|
|
208
|
+
const s = el.querySelector('.dsc_txt, .api_txt_lines.dsc_txt');
|
|
209
|
+
if (a) r.push({ title: a.textContent||'', url: a.href||'', snippet: s?.textContent||'' });
|
|
210
|
+
});
|
|
211
|
+
if (!r.length) document.querySelectorAll('.webpagelist .title_area a, .total_wrap .total_tit a').forEach(a => {
|
|
212
|
+
r.push({ title: a.textContent||'', url: a.href||'', snippet: '' });
|
|
213
|
+
});
|
|
214
|
+
return r.slice(0, 8);
|
|
215
|
+
})())
|
|
216
|
+
• ⚠ Naver blog links (blog.naver.com) often fail in headless → prefer non-blog results, or extract from Naver's inline preview instead
|
|
217
|
+
|
|
218
|
+
Google (SECONDARY — often blocked by CAPTCHA):
|
|
184
219
|
• URL: https://www.google.com/search?q={encodedQuery}
|
|
185
|
-
•
|
|
186
|
-
•
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
220
|
+
• For Korean queries: add &hl=ko
|
|
221
|
+
• Result extraction (browser_execute_script):
|
|
222
|
+
JSON.stringify(Array.from(document.querySelectorAll('#search .g, #rso .g')).slice(0, 8).map(el => ({
|
|
223
|
+
title: el.querySelector('h3')?.textContent || '',
|
|
224
|
+
url: (el.querySelector('a[href^="http"]') || el.querySelector('a'))?.href || '',
|
|
225
|
+
snippet: (el.querySelector('.VwiC3b') || el.querySelector('[data-sncf]') || el.querySelector('.lEBKkf'))?.textContent || ''
|
|
226
|
+
})).filter(r => r.title && r.url && !r.url.includes('google.com/search')))
|
|
227
|
+
• ⚠ CAPTCHA detection: If URL contains "/sorry/" or page title is unchanged from search URL → Google blocked you. Do NOT retry. Move on.
|
|
190
228
|
|
|
191
|
-
StackOverflow:
|
|
229
|
+
StackOverflow (for coding queries):
|
|
192
230
|
• URL: https://stackoverflow.com/search?q={encodedQuery}
|
|
193
|
-
• Result
|
|
194
|
-
•
|
|
195
|
-
• Excerpt: ".s-post-summary--content-excerpt"
|
|
196
|
-
• Vote count: ".s-post-summary--stats-item-number"
|
|
197
|
-
• Answer page: click link, then ".answercell .s-prose" or "#answers .answer"
|
|
198
|
-
|
|
199
|
-
Naver:
|
|
200
|
-
• URL: https://search.naver.com/search.naver?query={encodedQuery}
|
|
201
|
-
• Blog results: ".api_txt_lines"
|
|
202
|
-
• Knowledge Q&A: ".question_text"
|
|
203
|
-
• Web documents: ".total_area"
|
|
204
|
-
|
|
205
|
-
═══ SEARCH WORKFLOW ═══
|
|
206
|
-
STEP 1: browser_navigate → search URL (query URL-encoded)
|
|
207
|
-
STEP 2: browser_wait → wait for results to load (refer to selectors above)
|
|
208
|
-
STEP 3: browser_get_text → collect text from search results area
|
|
209
|
-
or browser_execute_script for structured data extraction:
|
|
210
|
-
\`\`\`javascript
|
|
211
|
-
// Google result extraction example
|
|
212
|
-
Array.from(document.querySelectorAll('#search .g')).slice(0, 10).map(el => ({
|
|
213
|
-
title: el.querySelector('h3')?.textContent || '',
|
|
214
|
-
url: el.querySelector('a')?.href || '',
|
|
215
|
-
snippet: el.querySelector('.VwiC3b')?.textContent || ''
|
|
216
|
-
}))
|
|
217
|
-
\`\`\`
|
|
218
|
-
STEP 4: If detailed info is needed, visit individual links:
|
|
219
|
-
browser_navigate → result URL
|
|
220
|
-
browser_get_text → page body
|
|
221
|
-
STEP 5: complete → return organized search results
|
|
222
|
-
|
|
223
|
-
═══ STACKOVERFLOW DEEP SEARCH ═══
|
|
224
|
-
For coding-related questions:
|
|
225
|
-
STEP 1: Search StackOverflow
|
|
226
|
-
STEP 2: Click the most relevant question (considering vote count)
|
|
227
|
-
STEP 3: browser_get_text → collect question + accepted answer
|
|
228
|
-
STEP 4: Collect other answers if needed
|
|
229
|
-
STEP 5: complete → organize questions/answers cleanly
|
|
230
|
-
|
|
231
|
-
═══ MULTI-ENGINE SEARCH ═══
|
|
232
|
-
If no specific engine is mentioned in the instruction, default to Google.
|
|
233
|
-
User may specify engine in their language (e.g., "search on Naver", "search on StackOverflow").
|
|
234
|
-
When combining results from multiple engines: search each engine sequentially → merge results.
|
|
231
|
+
• Result extraction: ".s-post-summary" → title + vote count + URL
|
|
232
|
+
• Deep dive: visit top answer page → extract ".answercell .s-prose" or "#answers .answer"
|
|
235
233
|
|
|
236
|
-
|
|
237
|
-
•
|
|
238
|
-
•
|
|
239
|
-
|
|
240
|
-
|
|
234
|
+
Wikipedia (for factual/academic queries):
|
|
235
|
+
• Reliable in headless mode, never blocks
|
|
236
|
+
• URL: https://en.wikipedia.org/wiki/{topic} or search via Naver/Google
|
|
237
|
+
|
|
238
|
+
═══ RESEARCH WORKFLOW ═══
|
|
239
|
+
|
|
240
|
+
PHASE 1: QUERY ANALYSIS (mental — no tool call)
|
|
241
|
+
- Identify: primary topic, specific facts needed, recency requirements
|
|
242
|
+
- Formulate 1-2 search queries optimized for Naver
|
|
243
|
+
- Note any Cloudflare-blocked sites to avoid
|
|
244
|
+
|
|
245
|
+
PHASE 2: NAVER SEARCH (primary)
|
|
246
|
+
STEP 1: browser_navigate → Naver search URL
|
|
247
|
+
STEP 2: browser_execute_script → extract structured results (JSON)
|
|
248
|
+
STEP 3: Pick 2-3 best results (prefer tech blogs, comparison sites, Wikipedia — avoid blog.naver.com)
|
|
249
|
+
|
|
250
|
+
PHASE 3: VISIT SOURCE PAGES (Naver results)
|
|
251
|
+
For each selected result:
|
|
252
|
+
STEP 4: browser_navigate → result URL
|
|
253
|
+
- If navigation fails or page is empty → SKIP immediately (do not retry)
|
|
254
|
+
STEP 5: browser_execute_script → extract main content:
|
|
255
|
+
(document.querySelector('article, [role="main"], main, .content, #content, .post-body, .article-body')?.innerText || document.body.innerText).substring(0, 4000)
|
|
256
|
+
STEP 6: Record key facts, numbers, dates
|
|
257
|
+
|
|
258
|
+
PHASE 4: GOOGLE SEARCH (secondary, if Naver results insufficient)
|
|
259
|
+
STEP 7: browser_navigate → Google search URL
|
|
260
|
+
- If CAPTCHA ("/sorry/" in URL) → SKIP Google entirely. Use existing Naver data.
|
|
261
|
+
STEP 8: browser_execute_script → extract structured results
|
|
262
|
+
STEP 9: Pick 2-3 results NOT already visited
|
|
263
|
+
|
|
264
|
+
PHASE 5: VISIT SOURCE PAGES (Google results)
|
|
265
|
+
STEP 10-12: Same as Phase 3, cross-verify with Naver findings
|
|
266
|
+
|
|
267
|
+
PHASE 6: DEEP DIVE (only if key facts still missing, ~8 iterations budget)
|
|
268
|
+
- Try a refined Naver search with different keywords
|
|
269
|
+
- Visit Wikipedia for factual/academic topics
|
|
270
|
+
- Visit StackOverflow for coding topics
|
|
271
|
+
- DO NOT visit Cloudflare-blocked sites
|
|
272
|
+
|
|
273
|
+
PHASE 7: SYNTHESIS (call "complete")
|
|
274
|
+
Structure your answer as:
|
|
275
|
+
---
|
|
276
|
+
[Direct, comprehensive answer]
|
|
277
|
+
|
|
278
|
+
[Key facts with specific numbers/dates]
|
|
279
|
+
|
|
280
|
+
[Caveats or conflicting information]
|
|
281
|
+
|
|
282
|
+
Sources:
|
|
283
|
+
- [Source Title](URL) — key fact extracted
|
|
284
|
+
- [Source Title](URL) — key fact extracted
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
═══ NUMERICAL DATA VERIFICATION ═══
|
|
288
|
+
For pricing, specs, benchmarks, or any numerical claims:
|
|
289
|
+
• MUST find the same number from at least 2 independent sources before reporting it as fact
|
|
290
|
+
• If sources disagree, report BOTH values with their sources (e.g., "$2.50-$5.00 per 1M tokens depending on tier")
|
|
291
|
+
• If only 1 source provides a number, mark it as "unverified" or "according to [source]"
|
|
292
|
+
• For calculations (monthly cost, etc.): show the formula explicitly so the user can verify
|
|
293
|
+
|
|
294
|
+
═══ QUERY OPTIMIZATION TIPS ═══
|
|
295
|
+
• For pricing: search "GPT-4o API 가격 2025" on Naver — Korean blogs often have the latest pricing tables
|
|
296
|
+
• For recent events: append year from Today's Date to query
|
|
297
|
+
• For academic papers: try "site:arxiv.org" on Google, or search paper title on Naver
|
|
298
|
+
• For comparisons: add "vs" or "비교" to the query
|
|
299
|
+
• For Korean-specific info: Naver will have better Korean-language results
|
|
300
|
+
• For English technical content: Google may work (if no CAPTCHA) or use Naver's English results
|
|
301
|
+
|
|
302
|
+
═══ CONTENT EXTRACTION BEST PRACTICES ═══
|
|
303
|
+
• Use browser_execute_script for targeted extraction (faster than get_text)
|
|
304
|
+
• Extract main content only — skip nav, sidebar, footer, ads
|
|
305
|
+
• Limit to ~4000 chars per page to conserve context window
|
|
306
|
+
• For tables: extract as structured data
|
|
307
|
+
• If a page returns empty text → it's likely Cloudflare-blocked. Skip immediately.
|
|
308
|
+
|
|
309
|
+
═══ EFFICIENCY RULES (CRITICAL — read carefully) ═══
|
|
310
|
+
Your total budget is 30 iterations. Plan them wisely:
|
|
311
|
+
• Iterations 1-4: Search engine queries (Naver first, then Google if needed)
|
|
312
|
+
• Iterations 5-15: Visit 3-4 source pages, extract key information
|
|
313
|
+
• Iterations 16-20: If needed, one more search or page visit
|
|
314
|
+
• Iteration 20+: You MUST call "complete" with whatever you have. Do NOT start new searches after step 20.
|
|
315
|
+
|
|
316
|
+
Hard rules:
|
|
317
|
+
• NEVER retry a failed navigation — skip immediately
|
|
318
|
+
• NEVER visit blocked domains (see list above)
|
|
319
|
+
• NEVER take screenshots (wastes iterations)
|
|
320
|
+
• If Google shows CAPTCHA, abandon Google entirely
|
|
321
|
+
• If you have enough data from 2-3 pages, call "complete" — don't over-research
|
|
322
|
+
• Better to deliver a good answer from 3 sources than run out of iterations with 10 sources
|
|
323
|
+
|
|
324
|
+
═══ CRITICAL RULES ═══
|
|
325
|
+
• NEVER return only search snippets — you MUST visit at least 2 actual source pages
|
|
326
|
+
• NEVER fabricate information — only report what you found on actual pages
|
|
327
|
+
• For time-sensitive queries: verify publication dates on source pages
|
|
328
|
+
• If you cannot find reliable information, say so honestly
|
|
329
|
+
• Always end with "complete" tool — include ALL sources visited`;
|
|
241
330
|
//# sourceMappingURL=prompts.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/browser/prompts.ts"],"names":[],"mappings":"AAOA,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAwCoC,CAAC;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGA4DmC,CAAC;AAElG,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAwEV,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,mBAAmB
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../../src/agents/browser/prompts.ts"],"names":[],"mappings":"AAOA,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAwCoC,CAAC;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGA4DmC,CAAC;AAElG,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8CAwEV,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAyJM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/search-agent.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD,wBAAgB,uBAAuB,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"search-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/browser/search-agent.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAKpD,wBAAgB,uBAAuB,IAAI,YAAY,CAsCtD"}
|
|
@@ -7,13 +7,13 @@ export function createSearchRequestTool() {
|
|
|
7
7
|
type: 'function',
|
|
8
8
|
function: {
|
|
9
9
|
name: 'search_request',
|
|
10
|
-
description: 'Delegate a task to the web search specialist agent.
|
|
10
|
+
description: 'Delegate a deep research task to the web search specialist agent. Performs comprehensive research across Google AND Naver simultaneously, visits actual source pages, cross-verifies facts, and returns a synthesized answer with citations. Use for any question requiring up-to-date information, fact-checking, comparisons, or multi-source research.',
|
|
11
11
|
parameters: {
|
|
12
12
|
type: 'object',
|
|
13
13
|
properties: {
|
|
14
14
|
instruction: {
|
|
15
15
|
type: 'string',
|
|
16
|
-
description: 'Natural language instruction
|
|
16
|
+
description: 'Natural language instruction describing what to research. Be specific about what information, facts, or data you need.',
|
|
17
17
|
},
|
|
18
18
|
},
|
|
19
19
|
required: ['instruction'],
|
|
@@ -21,8 +21,11 @@ export function createSearchRequestTool() {
|
|
|
21
21
|
},
|
|
22
22
|
},
|
|
23
23
|
execute: async (args, llmClient) => {
|
|
24
|
-
const
|
|
25
|
-
|
|
24
|
+
const today = new Date().toISOString().split('T')[0];
|
|
25
|
+
const rawInstruction = args['instruction'];
|
|
26
|
+
const instruction = `[Today's Date: ${today}]\n\n${rawInstruction}`;
|
|
27
|
+
const agent = new BrowserSubAgent(llmClient, 'search', BROWSER_SUB_AGENT_TOOLS, SEARCH_SYSTEM_PROMPT, { requiresAuth: false, serviceType: 'search', maxIterations: 30 });
|
|
28
|
+
return agent.run(instruction);
|
|
26
29
|
},
|
|
27
30
|
categories: ['llm-agent'],
|
|
28
31
|
requiresSubLLM: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-agent.js","sourceRoot":"","sources":["../../../src/agents/browser/search-agent.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,UAAU,EAAE;YACV,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"search-agent.js","sourceRoot":"","sources":["../../../src/agents/browser/search-agent.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,UAAU,EAAE;YACV,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EACT,2VAA2V;gBAC7V,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wHAAwH;yBACtI;qBACF;oBACD,QAAQ,EAAE,CAAC,aAAa,CAAC;iBAC1B;aACF;SACF;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;YAEjC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAW,CAAC;YACrD,MAAM,WAAW,GAAG,kBAAkB,KAAK,QAAQ,cAAc,EAAE,CAAC;YAEpE,MAAM,KAAK,GAAG,IAAI,eAAe,CAC/B,SAAS,EACT,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,CAClE,CAAC;YACF,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QACD,UAAU,EAAE,CAAC,WAAW,CAAC;QACzB,cAAc,EAAE,IAAI;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/planner/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAY,cAAc,EAAc,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/planner/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAY,cAAc,EAAc,MAAM,sBAAsB,CAAC;AASrF,OAAO,EAEL,eAAe,EAChB,MAAM,kDAAkD,CAAC;AAO1D,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,eAAe,CAAgC;gBAE3C,SAAS,EAAE,SAAS;IAQhC,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAQnD,oBAAoB,IAAI,IAAI;IAatB,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,OAAO,EAAE,GAC1B,OAAO,CAAC,cAAc,CAAC;IAgX1B,OAAO,CAAC,0BAA0B;CA8CnC;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { logger } from '../../utils/logger.js';
|
|
2
2
|
import { buildPlanningSystemPrompt } from '../../prompts/agents/planning.js';
|
|
3
3
|
import { toolRegistry } from '../../tools/registry.js';
|
|
4
|
+
import { getWindowsUserDesktopPath } from '../../utils/platform-utils.js';
|
|
4
5
|
import { flattenMessagesToHistory } from '../../orchestration/utils.js';
|
|
5
6
|
import { reportError } from '../../core/telemetry/error-reporter.js';
|
|
6
7
|
import { configManager } from '../../core/config/config-manager.js';
|
|
@@ -22,7 +23,7 @@ export class PlanningLLM {
|
|
|
22
23
|
async generateTODOList(userRequest, contextMessages) {
|
|
23
24
|
const toolSummary = toolRegistry.getToolSummaryForPlanning();
|
|
24
25
|
const optionalToolsInfo = toolRegistry.getEnabledOptionalToolsInfo();
|
|
25
|
-
const systemPrompt = buildPlanningSystemPrompt(toolSummary, optionalToolsInfo);
|
|
26
|
+
const systemPrompt = buildPlanningSystemPrompt(toolSummary, optionalToolsInfo, getWindowsUserDesktopPath() || undefined);
|
|
26
27
|
const clarificationMessages = [];
|
|
27
28
|
const messages = [
|
|
28
29
|
{
|