# cdp-tools Message Templates

This file contains all user-facing messages for the cdp-tools debugger. Messages use markdown formatting and support variable interpolation using `{{variable}}` syntax.

## Template Usage Status

Some templates are currently unused but kept for:
- Future error paths and edge cases
- Potential error conditions not yet encountered
- Consistency across similar tools
- Forward compatibility

**Currently unused templates (kept for future use):**
- BREAKPOINT_ALREADY_EXISTS - For duplicate breakpoint detection
- CHROME_LAUNCH_SUCCESS - For enhanced launch messages
- CONSOLE_MONITORING_ENABLED - For explicit monitoring activation
- DEBUGGER_CONNECT_SUCCESS - Reserved for verbose connection mode
- EXECUTION_CONTEXT_DESTROYED - For context destruction errors
- LINE_NOT_FOUND - For invalid line number errors
- LOGPOINT_SET_SUCCESS - For logpoint creation confirmation
- LOGPOINT_VALIDATE_SUCCESS - For logpoint validation feedback
- PLATFORM_UNSUPPORTED - For unsupported platform errors
- PORT_NOT_INSPECTABLE - For port availability errors
- SCRIPT_NOT_FOUND - For missing script errors
- SESSION_CLOSED - For session termination errors
- TIMEOUT_WAITING_FOR_PAUSE - For pause timeout errors

These templates should not be removed - they represent potential error conditions or future enhancements.

---

## Connection Messages

## CHROME_ALREADY_RUNNING

**Type:** error
**Code:** CHROME_RUNNING

Chrome is already running. You can either:

**Suggestions:**
- Use `killChrome()` to close the existing instance
- Use `connectDebugger()` to connect to the running instance instead

---

## CHROME_LAUNCH_SUCCESS

**Type:** success
**Summary:** Chrome launched and connected

Title: {{title}}, URL: {{url}}{{#viewport}}, Viewport: {{viewport.width}}x{{viewport.height}}{{/viewport}}{{#consoleStats}}

Console: {{consoleStats}}{{/consoleStats}}

{{#hasUserReference}}Ready to use! Use connectionReason: "{{reference}}" in tool calls.{{/hasUserReference}}{{^hasUserReference}}Ready to use! Use connectionReason: "{{reference}}" in tool calls, or rename with tab({ action: 'rename' }) first.{{/hasUserReference}}

---

## CHROME_CONNECTION_REUSED

**Type:** success
**Summary:** Chrome connection reused (already exists)

Title: {{title}}, URL: {{url}}

Ready to use! Use connectionReason: "{{reference}}" in tool calls.

---

## CHROME_LAUNCH_NO_CONNECT

**Type:** success

Chrome launched with debugging on port {{port}}

---

## CHROME_LAUNCH_AUTO_CONNECT_FAILED

**Type:** warning

Chrome launched successfully but auto-connect failed: {{error}}

**Note:** Use `connectDebugger()` to connect manually.

---

## DEBUGGER_CONNECT_SUCCESS

**Type:** success
**Summary:** Connected to {{runtimeType}} debugger

Host: {{host}}:{{port}}, Reference: {{reference}}

Features: {{features}}{{#consoleStats}}
Console: {{consoleStats}}{{/consoleStats}}{{#isChrome}}

Note: Console monitoring auto-enabled. Page auto-reloaded to capture initial logs.

IMPORTANT: Please provide a reference name for this tab using the renameTab tool.{{/isChrome}}{{#isNode}}

Note: Browser automation features are not available for Node.js debugging.
Console Monitoring: Enabled via CDP (logpoint output and console.log calls will be captured).{{/isNode}}

---

## DEBUGGER_CONNECT_FAILED

**Type:** error
**Code:** CONNECTION_FAILED

Failed to connect to debugger at {{host}}:{{port}}: {{error}}

**Suggestions:**
- Verify the debugger is running and listening on the specified port
- For Chrome: Launch with `launchChrome()` or start with `--remote-debugging-port={{port}}`
- For Node.js: Start with `node --inspect={{port}} app.js`

---

## DEBUGGER_NOT_RUNNING

**Type:** error
**Code:** NOT_RUNNING

{{message}}

**Note:** This error occurs when trying to connect to a debugger that is not running on the specified port.

---

## DEBUGGER_NOT_CONNECTED

**Type:** error
**Code:** NOT_CONNECTED
**Summary:** Debugger not connected

No active debugger connection found.

**Suggestions:**
- Use `launchChrome()` to launch Chrome with debugging enabled
- Use `connectDebugger()` to connect to an existing debugger instance

**Example:**
```javascript
// Launch Chrome
launchChrome({ url: 'http://localhost:3000' })

// Or connect to existing
connectDebugger({ host: 'localhost', port: 9222 })
```

---

## DEBUGGER_DISCONNECT_SUCCESS

**Type:** success

Disconnected from connection: {{reference}}

---

## PORT_NOT_INSPECTABLE

**Type:** error
**Code:** PORT_NOT_READY

Chrome debugging port {{port}} failed to become inspectable within the timeout period

**Suggestions:**
- Chrome may be starting slowly - try increasing the timeout
- Check if another process is using port {{port}}
- Verify Chrome launched successfully (check process list)

---

## CHROME_KILLED

**Type:** success

action:killed;port:{{port}};reason:{{reason}}

---

## CHROME_STATUS

**Type:** info

Chrome launcher status

{{#if lastCloseEvents.length}}
### Recent Close Events

{{#each lastCloseEvents}}
- **{{reason}}** (port {{port}}, PID {{pid}}) at {{timestamp}}{{#hasExitCode}} - exit code: {{exitCode}}{{/hasExitCode}}{{#signal}} - signal: {{signal}}{{/signal}}
{{/each}}
{{/if}}

---

## CHROME_LAUNCHER_RESET

**Type:** success

Chrome launcher state reset successfully

---

## CONNECTION_STATUS

**Type:** info

Connection status retrieved

---

## CONNECTIONS_LIST

**Type:** info

Active debugger connections ({{totalConnections}} total)

---

## CONNECTION_SWITCH_SUCCESS

**Type:** success

Switched to connection: {{reference}}

---

## CONNECTION_SWITCH_FAILED

**Type:** error
**Code:** CONNECTION_NOT_FOUND

Connection with reference "{{reference}}" not found

**Suggestion:** Use `listConnections()` to see all available connections.

---

## CONNECTION_NOT_FOUND

**Type:** error
**Code:** NO_CONNECTION
**Summary:** Connection not found

No active browser connection available.

**Suggestions:**
- Use `launchChrome()` to launch Chrome with debugging enabled
- Use `connectDebugger()` to connect to an existing debugger instance

---

## INVALID_REFERENCE

**Type:** error
**Code:** INVALID_REFERENCE

Invalid reference: {{error}}

**Requirements:**
- Reference must be exactly 3 words
- Words are separated by spaces

---

## REFERENCE_IN_USE

**Type:** error
**Code:** REFERENCE_IN_USE

Reference "{{reference}}" is already in use by another connection

**Suggestion:** Choose a different 3-word reference that describes this specific debugging activity.

---

## SOURCE_MAPS_LOADED

**Type:** success

Loaded {{count}} source maps from {{directory}}

---

## SOURCE_MAPS_FAILED

**Type:** error
**Code:** SOURCE_MAP_ERROR

Failed to load source maps: {{error}}

**Suggestions:**
- Verify the directory path is correct
- Ensure .js.map files exist in the directory
- Check file permissions

---

## SOURCE_CODE_SUCCESS

**Type:** success

Source code retrieved from {{url}} (lines {{startLine}}-{{endLine}})

---

## SOURCE_CODE_FAILED

**Type:** error
**Code:** SOURCE_CODE_ERROR

Failed to retrieve source code: {{error}}

---

## CODE_SEARCH_RESULTS

**Type:** info

Code search completed - found {{count}} matches

---

## FUNCTION_SEARCH_RESULTS

**Type:** info

Function search completed - found {{count}} matches for '{{functionName}}'

---

## Breakpoint Messages

## BREAKPOINT_SET_SUCCESS

**Type:** success
**Summary:** Breakpoint set

Location: {{url}}:{{resolvedLine}}, ID: {{breakpointId}}{{#wasAdjusted}}

⚠️ CDP resolved to {{resolvedLocation}} (requested {{requestedLocation}}) due to source mapping{{/wasAdjusted}}{{#condition}}
Condition: {{condition}}{{/condition}}

---

## BREAKPOINT_SET_FAILED

**Type:** error
**Code:** BREAKPOINT_FAILED
**Summary:** Failed to set breakpoint

Location: {{url}}:{{lineNumber}}
Reason: {{error}}

**Suggestions:**
- Verify the file URL is correct (use `file://` for local files or `http://` for web URLs)
- Ensure the line number exists in the source file
- Check that the debugger is paused or the script is already loaded

---

## BREAKPOINT_ALREADY_EXISTS

**Type:** error
**Code:** BREAKPOINT_EXISTS

A breakpoint already exists at {{url}}:{{lineNumber}}

**TIP:** Use `listBreakpoints()` to see all active breakpoints and their IDs.

---

## BREAKPOINT_REMOVE_SUCCESS

**Type:** success

Breakpoint {{breakpointId}} removed successfully

---

## BREAKPOINT_NOT_FOUND

**Type:** error
**Code:** BREAKPOINT_NOT_FOUND

Breakpoint {{breakpointId}} not found

**Suggestions:**
- Use `listBreakpoints()` to see all active breakpoints
- The breakpoint may have already been removed

---

## LOGPOINT_SET_SUCCESS

**Type:** success

Logpoint set at {{url}}:{{lineNumber}} (max executions: {{maxExecutions}})

**Breakpoint ID:** `{{breakpointId}}`
**Log message:** `{{logMessage}}`

**Note:** Logpoint will pause execution after {{maxExecutions}} executions. Use `resetLogpointCounter()` to reset the counter.

---

## LOGPOINT_VALIDATE_SUCCESS

**Type:** success

Logpoint validation successful! The expression can be evaluated at {{url}}:{{lineNumber}}

**Sample output:** {{sampleOutput}}

---

## LOGPOINT_VALIDATE_FAILED

**Type:** error
**Code:** LOGPOINT_INVALID

Logpoint validation failed: {{error}}

**Suggestions:**
- Check that the expressions in `{curly braces}` are valid JavaScript
- Ensure variables referenced exist in the scope at that line
- Try evaluating the expression manually with `evaluateExpression()`

---

## LOGPOINT_LIMIT_EXCEEDED

**Type:** warning
**Code:** LOGPOINT_LIMIT

Logpoint at {{url}}:{{lineNumber}} has reached execution limit ({{executionCount}}/{{maxExecutions}})

Captured logs:
{{logs}}

Options:
- Use resetLogpointCounter('{{breakpointId}}') to continue logging
- Use removeBreakpoint('{{breakpointId}}') to remove the logpoint
- Review the captured logs above

---

## LOGPOINT_COUNTER_RESET

**Type:** success

Logpoint {{breakpointId}} execution counter reset. It can now execute {{maxExecutions}} more times.

---

## Execution Messages

## EXECUTION_PAUSED

**Type:** success

Execution paused

---

## EXECUTION_RESUMED

**Type:** success

Execution resumed

---

## EXECUTION_STEP_OVER

**Type:** success

Stepped over to next line

---

## EXECUTION_STEP_INTO

**Type:** success

Stepped into function

---

## EXECUTION_STEP_OUT

**Type:** success

Stepped out of function

---

## CALL_STACK_SUCCESS

**Type:** success

Call Stack ({{frameCount}} frames){{#pausedLocation}} - Paused at: {{pausedLocation}}{{/pausedLocation}}

---

## VARIABLES_SUCCESS

**Type:** success

Variables for call frame {{callFrameId}}: {{returnedCount}} of {{totalCount}} total at depth {{usedDepth}}{{#filter}} (filtered by: {{filter}}){{/filter}}{{#includeGlobal}} (includes global scope){{/includeGlobal}}

---

## VARIABLES_DEPTH_REDUCED

**Type:** warning

Variables for call frame {{callFrameId}}: {{totalCount}} total (depth reduced from {{requestedDepth}} to {{usedDepth}}){{#filter}} (filtered by: {{filter}}){{/filter}}

Variable names/types shown. To inspect at full depth:
- Use `filter` parameter (e.g., filter: "^myVar$") to narrow results
- Use `evaluateExpression` (e.g., expression: "myVar") for specific values

---

## VARIABLES_NAMES_ONLY

**Type:** warning

Variables for call frame {{callFrameId}}: {{totalCount}} total (names only, values exceed limit)

Variable names listed by scope. To inspect values:
- Use `filter` parameter (e.g., filter: "^myVar$") to get values for matching variables
- Use `evaluateExpression` (e.g., expression: "myVar") to evaluate directly

---

## VARIABLES_COUNTS_ONLY

**Type:** warning

Variables for call frame {{callFrameId}}: {{totalCount}} total (counts only, names exceed limit)

Variable counts per scope shown. Too many variables to list names. To inspect:
- Use `filter` parameter to narrow scope (e.g., filter: "config|state|user")
- Use `includeGlobal: false` to exclude global scope (often has 100+ built-ins)
- Use `evaluateExpression` to check a specific variable directly

---

## VARIABLES_FILTER_INSUFFICIENT

**Type:** warning

Variables for call frame {{callFrameId}}: {{totalCount}} variables match filter "{{filter}}" (still exceeds limit)

The filter matches too many variables. Try:
- A more specific filter pattern (e.g., filter: "^exactName$" instead of "name")
- Use `evaluateExpression` to inspect a specific variable directly
- Use `includeGlobal: false` if global scope variables are included

---

## EVALUATE_EXPRESSION_SUCCESS

**Type:** success
**Summary:** Expression evaluated successfully

Expression: {{expression}}, Context: {{context}}

Result:
{{result}}

---

## EVALUATE_EXPRESSION_FAILED

**Type:** error
**Code:** EVALUATION_FAILED

Failed to evaluate expression: {{error}}

**Expression:** `{{expression}}`

**Suggestions:**
- Check that the expression is valid JavaScript
- Ensure variables referenced exist in the current scope
- If evaluating in a specific frame, verify the call frame ID is valid with `getCallStack()`

---

## NOT_PAUSED

**Type:** error
**Code:** NOT_PAUSED

Not currently paused at a breakpoint

**Suggestions:**
- Use `pause()` to pause execution
- Set a breakpoint with `setBreakpoint()` and trigger it
- Wait for execution to hit an existing breakpoint

---

## BREAKPOINT_ACKNOWLEDGED

**Type:** success

Breakpoint pause acknowledged at {{location}}

Other tools are now unblocked while execution remains paused. Use `execution({ action: 'resume' })` to continue execution.

---

## TIMEOUT_WAITING_FOR_PAUSE

**Type:** error
**Code:** TIMEOUT

Timeout waiting for execution to pause

**Suggestions:**
- The breakpoint may not be hit in the code path being executed
- Try increasing the timeout duration
- Verify the breakpoint is set at the correct location with `listBreakpoints()`

---

## Browser Automation Messages

## PAGE_NAVIGATE_SUCCESS

**Type:** success
**Summary:** Navigation complete

URL: {{url}}{{#title}}, Title: {{title}}{{/title}}{{#clickableElements}}

**Clickable elements:** {{clickableElements.total}} total ({{clickableElements.inViewport}} in viewport)

{{clickableElements.hint}}{{/clickableElements}}{{#console}}

**Console:** {{console.errors}} errors, {{console.warnings}} warnings{{#console.hint}} - {{console.hint}}{{/console.hint}}{{/console}}{{#network}}

**Network:** {{network.failed}} failed requests of {{network.total}} total - {{network.hint}}{{/network}}

---

## PAGE_GO_BACK_SUCCESS

**Type:** success

Navigated back{{#url}} to: {{url}}{{/url}}{{#clickableElements}}

**Clickable elements:** {{clickableElements.total}} total ({{clickableElements.inViewport}} in viewport){{/clickableElements}}{{#console}}

**Console:** {{console.errors}} errors, {{console.warnings}} warnings{{#console.hint}} - {{console.hint}}{{/console.hint}}{{/console}}{{#network}}

**Network:** {{network.failed}} failed requests of {{network.total}} total - {{network.hint}}{{/network}}

---

## PAGE_GO_FORWARD_SUCCESS

**Type:** success

Navigated forward{{#url}} to: {{url}}{{/url}}{{#clickableElements}}

**Clickable elements:** {{clickableElements.total}} total ({{clickableElements.inViewport}} in viewport){{/clickableElements}}{{#console}}

**Console:** {{console.errors}} errors, {{console.warnings}} warnings{{#console.hint}} - {{console.hint}}{{/console.hint}}{{/console}}{{#network}}

**Network:** {{network.failed}} failed requests of {{network.total}} total - {{network.hint}}{{/network}}

---

## PAGE_INFO_SUCCESS

**Type:** success
**Summary:** Page information

URL: {{url}}, Title: {{title}}

---

## PAGE_RELOAD_SUCCESS

**Type:** success

Page reloaded successfully{{#clickableElements}}

**Clickable elements:** {{clickableElements.total}} total ({{clickableElements.inViewport}} in viewport){{/clickableElements}}{{#console}}

**Console:** {{console.errors}} errors, {{console.warnings}} warnings{{#console.hint}} - {{console.hint}}{{/console.hint}}{{/console}}{{#network}}

**Network:** {{network.failed}} failed requests of {{network.total}} total - {{network.hint}}{{/network}}

---

## ELEMENT_NOT_FOUND

**Type:** error
**Code:** ELEMENT_NOT_FOUND

Element not found: `{{selector}}`

**Suggestions:**
- Verify the CSS selector is correct
- Use `querySelector()` to test if the element exists
- The element may not be visible or loaded yet - try waiting or reloading the page

---

## ELEMENT_CLICK_SUCCESS

**Type:** success
**Summary:** Element clicked

Selector: `{{selector}}`

---

## TEXT_TYPE_SUCCESS

**Type:** success

Text typed into `{{selector}}`: "{{text}}"

---

## KEY_PRESS_SUCCESS

**Type:** success

Key pressed: `{{key}}`

---

## ELEMENT_HOVER_SUCCESS

**Type:** success

Hovered over element: `{{selector}}`

---

## ELEMENT_FOCUS_SUCCESS

**Type:** success
**Summary:** Element focused

{{description}}, Selector: {{selector}}{{#nextTabbable}}

Next tab: {{nextTabbable}}{{/nextTabbable}}{{#warning}}

Warning: {{warning}}{{/warning}}

---

## FOCUS_NEXT_SUCCESS

**Type:** success
**Summary:** Tabbed forward{{#count}} {{count}} times{{/count}}

{{description}}, Selector: {{selector}}{{#nextTabbable}}

Next tab: {{nextTabbable}}{{/nextTabbable}}

---

## FOCUS_PREVIOUS_SUCCESS

**Type:** success
**Summary:** Tabbed backward{{#count}} {{count}} times{{/count}}

{{description}}, Selector: {{selector}}{{#nextTabbable}}

Next tab: {{nextTabbable}}{{/nextTabbable}}

---

## INVALID_ACTION

**Type:** error
**Code:** INVALID_ACTION

Invalid action: {{action}}

**Valid actions:** {{validActions}}

---

## ELEMENT_CLICK_WARNING

**Type:** warning

Element `{{selector}}` was clicked, but may not have a click handler attached. Verify the expected action occurred.

---

## ACTION_PAUSED_AT_BREAKPOINT

**Type:** success

{{action}} on `{{selector}}` triggered breakpoint at {{url}}:{{lineNumber}}

**Next steps:**
- Use `getCallStack()` to see the full call stack
- Use `getVariables()` to inspect variables at this location
- Use `stepOver()`, `stepInto()`, or `stepOut()` to continue debugging
- Use `resume()` to continue execution

---

## ELEMENT_BLOCKED_BY_MODAL

**Type:** error
**Code:** ELEMENT_BLOCKED

Cannot interact with element `{{selector}}` - blocked by {{modalDescription}}

**Modal details:**
- Type: {{modalType}}
- Selector: `{{modalSelector}}`
- Available dismiss strategies: {{availableStrategies}}

**Suggestions:**
- Use `dismissModal()` tool to remove the blocking modal first
- Enable `handleModals: true` parameter to automatically dismiss modals
- Use `detectModals()` to see all blocking elements on the page

{{#suggestion}}
**Hint:** {{suggestion}}
{{/suggestion}}

---

## SCREENSHOT_SAVED

**Type:** success
**Summary:** Screenshot saved

Path: {{filepath}}, Size: {{fileSize}}

---

## DOM_SNAPSHOT_SUCCESS

**Type:** success

DOM snapshot retrieved (depth: {{depth}})

---

## Monitoring Messages

## CONSOLE_MONITORING_ENABLED

**Type:** info

Console monitoring auto-enabled. Page auto-reloaded to capture initial logs.

---

## CONSOLE_CLEARED

**Type:** success

Console cleared successfully ({{count}} messages removed)

---

## CONSOLE_MESSAGES_LIST

**Type:** success
**Summary:** Console messages retrieved

Count: {{count}} of {{totalCount}} total{{#type}} (filtered by type: {{type}}){{/type}}

---

## CONSOLE_MESSAGE_DETAIL

**Type:** success

Console message [{{id}}] - Type: {{type}}, Timestamp: {{timestamp}}
Text: {{text}}

---

## CONSOLE_MESSAGES_RECENT

**Type:** success

Recent Console Messages: {{count}} of {{requestedCount}} requested ({{totalCount}} total){{#type}} (filtered by type: {{type}}){{/type}}

---

## CONSOLE_SEARCH_RESULTS

**Type:** success

Console Log Search: {{matchCount}} matches for pattern "{{pattern}}"{{#flags}} (flags: {{flags}}){{/flags}}{{#type}} (type: {{type}}){{/type}} out of {{totalSearched}} searched

---

## NETWORK_MONITORING_ENABLED

**Type:** success

Network monitoring enabled

---

## NETWORK_MONITORING_DISABLED

**Type:** success

Network monitoring disabled

---

## NETWORK_CONDITIONS_SET

**Type:** success

Network conditions set to **{{preset}}**

---

## NETWORK_REQUESTS_LIST

**Type:** success
**Summary:** Network requests retrieved

Count: {{count}} of {{totalCount}} total{{#resourceType}} (filtered by type: {{resourceType}}){{/resourceType}}

---

## NETWORK_REQUEST_DETAIL

**Type:** success

Network Request [{{id}}]: {{method}} {{url}}
Resource Type: {{resourceType}}, Status: {{status}}{{#failed}}
FAILED: {{errorText}}{{/failed}}

---

## NETWORK_SEARCH_RESULTS

**Type:** success

Network Request Search: {{matchCount}} matches for pattern "{{pattern}}"{{#flags}} (flags: {{flags}}){{/flags}}{{#filtersText}} (filters: {{filtersText}}){{/filtersText}} out of {{totalSearched}} searched

---

## NETWORK_REQUEST_NOT_FOUND

**Type:** error
**Code:** REQUEST_NOT_FOUND

Network request {{id}} not found

**Suggestions:**
- Use `listNetworkRequests()` to see all captured requests
- Ensure network monitoring was enabled before the request was made
- The request may have occurred before monitoring started

---

## Validation Errors

## SCRIPT_NOT_FOUND

**Type:** error
**Code:** SCRIPT_NOT_FOUND

Script not found for URL: {{url}}

**Suggestions:**
- Verify the URL is correct (use `file://` for local files)
- Ensure the script has been loaded by the browser
- For dynamically loaded scripts, wait for them to load before setting breakpoints
- Use `searchCode()` to find available scripts

---

## LINE_NOT_FOUND

**Type:** error
**Code:** LINE_NOT_FOUND

Line {{lineNumber}} not found in {{url}}

**Suggestions:**
- Verify the line number exists in the source file
- If using source maps, check that they're loaded correctly
- The file may have been modified - reload the page

---

## CALL_FRAME_NOT_FOUND

**Type:** error
**Code:** FRAME_NOT_FOUND

Call frame {{callFrameId}} not found

**Suggestions:**
- Use `getCallStack()` to get valid call frame IDs
- Ensure execution is still paused at a breakpoint
- The call stack may have changed if execution resumed

---

## INVALID_FILTER

**Type:** error
**Code:** INVALID_REGEX

Invalid filter regex: {{filter}}

{{error}}

**Suggestions:**
- Check regex syntax (e.g., escape special characters like `[`, `]`, `(`, `)`)
- Test your regex at regex101.com before using

---

## System Errors

## PLATFORM_UNSUPPORTED

**Type:** error
**Code:** PLATFORM_UNSUPPORTED

Unsupported platform: {{platform}}

**Note:** Chrome launching is only supported on macOS, Windows, and Linux.

---

## CHROME_SPAWN_FAILED

**Type:** error
**Code:** SPAWN_FAILED

Failed to spawn Chrome process: {{error}}

**Suggestions:**
- Verify Chrome is installed on your system
- Check that you have permission to execute Chrome
- On macOS: Chrome should be at `/Applications/Google Chrome.app`
- On Linux: Chrome/Chromium should be in your PATH

---

## PUPPETEER_NOT_CONNECTED

**Type:** error
**Code:** PUPPETEER_NOT_CONNECTED

Not connected to browser. This operation requires browser automation support.

**Suggestions:**
1. Launch Chrome with `launchChrome()` (automatically enables browser automation)
2. Or connect to Chrome: `connectDebugger({ host: 'localhost', port: 9222 })`

**Note:** Browser automation features (DOM interaction, screenshots, navigation) are only available when connected to Chrome, not Node.js.

---

## PAGE_NOT_LOADED

**Type:** error
**Code:** PAGE_NOT_LOADED

No page loaded. The tool `{{toolName}}` requires a web page to be loaded first.

**Suggestions:**
1. Navigate to a URL with `navigateTo({ url: 'https://example.com' })`
2. Or launch Chrome with a URL: `launchChrome({ url: 'https://example.com' })`

**Note:** Chrome starts with a blank page by default. You must navigate to a URL before using tools that interact with page content.

---

## NODEJS_NOT_SUPPORTED

**Type:** error
**Code:** FEATURE_NOT_SUPPORTED

This feature is not supported for Node.js debugging ({{feature}})

**Available for Node.js:**
- Breakpoints and debugging
- Code execution and evaluation
- Call stack inspection
- Console log monitoring

**Not available for Node.js:**
- Browser automation (DOM, screenshots, navigation)
- Network request monitoring

**Suggestion:** Use `launchChrome()` if you need browser automation features.

---

## EXECUTION_CONTEXT_DESTROYED

**Type:** error
**Code:** CONTEXT_DESTROYED

Execution context was destroyed (page may have navigated or reloaded)

**Suggestions:**
- Reload the page and try again
- Reconnect to the debugger with `connectDebugger()`
- Check if the page navigated unexpectedly

---

## SESSION_CLOSED

**Type:** error
**Code:** SESSION_CLOSED

Debugger session closed unexpectedly

**Suggestions:**
- The browser or Node.js process may have crashed or been closed
- Use `getDebuggerStatus()` to check connection status
- Reconnect with `connectDebugger()` or relaunch with `launchChrome()`

---

## COOKIE_SET_SUCCESS

**Type:** success

Cookie set: `{{name}}`

---

## LOCAL_STORAGE_SET_SUCCESS

**Type:** success

localStorage item set: `{{key}}` = "{{value}}"

---

## STORAGE_CLEARED

**Type:** success

Storage cleared successfully ({{types}})

---

## Variable Templates

Common variables used across messages:

- `{{port}}` - Port number (e.g., 9222)
- `{{host}}` - Hostname (e.g., localhost)
- `{{url}}` - File or page URL
- `{{lineNumber}}` - Line number in source code
- `{{columnNumber}}` - Column number in source code (optional)
- `{{breakpointId}}` - Unique breakpoint identifier
- `{{reference}}` - Connection reference name
- `{{runtimeType}}` - 'chrome' or 'node'
- `{{error}}` - Error message or details
- `{{selector}}` - CSS selector string
- `{{filepath}}` - File system path
- `{{fileSize}}` - Human-readable file size
- `{{id}}` - Generic identifier (request ID, log ID, etc.)
- `{{count}}` - Numeric count
- `{{logMessage}}` - Logpoint message template
- `{{maxExecutions}}` - Maximum execution count for logpoints
- `{{executionCount}}` - Current execution count
- `{{logs}}` - Formatted log output
- `{{feature}}` - Feature name
- `{{platform}}` - Operating system platform
- `{{types}}` - List of storage types
- `{{depth}}` - DOM traversal depth
- `{{sampleOutput}}` - Example output from validation
- `{{newReference}}` - New tab reference name
- `{{oldReference}}` - Old tab reference name
- `{{closedReference}}` - Closed tab reference
- `{{newActiveReference}}` - New active tab reference

---

## Tab Management Messages

## TAB_CREATE_SUCCESS

**Type:** success
**Summary:** New tab created and connected

Title: {{title}}, URL: {{url}}{{#consoleStats}}

Console: {{consoleStats}}{{/consoleStats}}

---

## TAB_LIST_EMPTY

**Type:** info
**Summary:** No Chrome tabs open

Use action "create" to create a new tab.

---

## TAB_LIST_SUCCESS

**Type:** list
**Summary:** {{count}} open tab(s)

{{tabList}}

Tip: Use action "switch" to switch tabs, or "create" to open a new one.

---

## TAB_CREATE_FAILED

**Type:** error
**Code:** TAB_CREATE_FAILED

Failed to create new tab: {{error}}

**Suggestions:**
- Ensure a Chrome browser is already running (use `launchChrome` first)
- Check that the browser connection is still active

---

## TAB_RENAME_SUCCESS

**Type:** success
**Summary:** Tab renamed

Old: {{oldReference}}, New: {{newReference}}

---

## TAB_SWITCH_SUCCESS

**Type:** success
**Summary:** Switched to tab

Title: {{title}}, URL: {{url}}

---

## TAB_CLOSE_SUCCESS

**Type:** success
**Summary:** Tab closed

New active: {{newActiveReference}}

---

## TAB_CLOSE_FAILED

**Type:** error
**Code:** TAB_CLOSE_FAILED

Failed to close tab: {{reference}}

**Suggestions:**
- Verify the reference is correct using `listTabs()`
- The tab may have already been closed

---

## DEBUG_LOGGING_ENABLED

**Type:** success
**Code:** DEBUG_LOGGING_ENABLED

{{message}}

Debug logs will be written to `.cdp-tools/logs/debug.log` and visible in the MCP server's stderr output.

---

## DEBUG_LOGGING_DISABLED

**Type:** success
**Code:** DEBUG_LOGGING_DISABLED

{{message}}

Debug logging is now disabled. No logs will be written.

---

## DEBUG_LOGGING_STATUS

**Type:** success
**Code:** DEBUG_LOGGING_STATUS

Debug logging is currently **{{status}}**.
{{#enabled}}
Logs are being written to: `{{logFile}}`
{{/enabled}}

---

## FILE_DOWNLOADED

**Type:** success
**Code:** FILE_DOWNLOADED

File downloaded successfully from `{{url}}`

Saved to: `{{filepath}}`
Size: {{size}}

---

## FILE_DOWNLOADED_OVERWROTE

**Type:** success
**Code:** FILE_DOWNLOADED_OVERWROTE

File downloaded and **overwrote existing file** at `{{filepath}}`

Downloaded from: `{{url}}`
Size: {{size}}

---

## FILE_ALREADY_EXISTS

**Type:** error
**Code:** FILE_ALREADY_EXISTS

**ERROR:** A file named `{{filename}}` already exists at this location.

**Existing file:**
- Path: `{{filepath}}`
- Size: {{existingSize}}
- Last modified: {{existingModified}}

**New file from `{{url}}`:**
- Size: {{newSize}}

Please choose a different, more descriptive filename or set `overwriteIfExists: true` to replace the existing file.

---

## CANNOT_OVERWRITE_NONEXISTENT

**Type:** error
**Code:** CANNOT_OVERWRITE_NONEXISTENT

**ERROR:** Cannot set `overwriteIfExists: true` for a file that doesn't exist yet.

The file `{{filename}}` does not exist at `{{filepath}}`.

Remove the `overwriteIfExists` parameter (it defaults to false) for new downloads.

---

## FILE_DOWNLOAD_FAILED

**Type:** error
**Code:** FILE_DOWNLOAD_FAILED

Failed to download file from `{{url}}`

{{#status}}HTTP {{status}}: {{statusText}}{{/status}}
{{#error}}Error: {{error}}{{/error}}

**Suggestions:**
- Verify the URL is correct and accessible
- Check your network connection
- Ensure the server is responding

---

## INVALID_FILENAME

**Type:** error
**Code:** INVALID_FILENAME

**ERROR:** Invalid filename `{{filename}}`

Reason: {{reason}}

Please use a valid filename without path separators or special characters.

---

## FILE_TOO_LARGE

**Type:** error
**Code:** FILE_TOO_LARGE

**ERROR:** File is too large to download

The file at `{{url}}` is {{size}}, which exceeds the maximum allowed size of {{maxSize}}.

For security and performance reasons, files larger than {{maxSize}} cannot be downloaded automatically.

---

## FILE_QUARANTINED

**Type:** error
**Code:** FILE_QUARANTINED

**WARNING:** File has been quarantined due to security concerns

**File:** `{{filename}}`
**Reason:** {{reason}}
**Size:** {{size}}
**Content-Type:** {{contentType}}
**Quarantine Location:** `{{quarantinePath}}`

The file was downloaded but renamed with a `.quarantined` extension and moved to quarantine to prevent accidental execution. If you trust this file, you can manually rename and move it from the quarantine location.

---

## FILE_SAVE_FAILED

**Type:** error
**Code:** FILE_SAVE_FAILED

**ERROR:** Failed to save file to disk

The file was downloaded successfully but could not be saved to `{{filepath}}`

Error: {{error}}

**Possible causes:**
- Disk is full
- No write permission to the directory
- File system error

---

## FILE_DOWNLOAD_NETWORK_ERROR

**Type:** error
**Code:** FILE_DOWNLOAD_NETWORK_ERROR

**ERROR:** Network error while downloading file

Failed to connect to `{{url}}`

Error: {{error}}

**Suggestions:**
- Check your internet connection
- Verify the URL is accessible
- Ensure the server is online

---

## PDF_SAVED

**Type:** success
**Code:** PDF_SAVED

PDF saved successfully to `{{filepath}}`
File size: {{fileSize}}
{{#engine}}Engine: {{engine}}{{/engine}}
{{#version}}Version: {{version}}{{/version}}

---

## PDF_GENERATED

**Type:** success
**Code:** PDF_GENERATED

PDF generated successfully
Size: {{size}}

{{note}}

---

## PDF_GENERATION_FAILED

**Type:** error
**Code:** PDF_GENERATION_FAILED

**ERROR:** Failed to generate PDF

Error: {{error}}

---

## WEASYPRINT_NOT_FOUND

**Type:** error
**Code:** WEASYPRINT_NOT_FOUND

**ERROR:** WeasyPrint is not installed or not found in PATH

WeasyPrint is required for advanced PDF generation with superior CSS page break support.

**Suggestions:**
- Install WeasyPrint: `pip install weasyprint`
- Verify installation: `weasyprint --version`
- Ensure WeasyPrint is in your system PATH
- Use `printToPDF` tool for basic PDF generation with Chrome instead

**Note:** WeasyPrint requires Python 3.7+ and additional system dependencies (Cairo, Pango, GdkPixbuf). See https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#installation

Error: {{error}}

---

## WEASYPRINT_EXECUTION_FAILED

**Type:** error
**Code:** WEASYPRINT_EXECUTION_FAILED

**ERROR:** WeasyPrint failed to generate PDF

The WeasyPrint process encountered an error during PDF generation.

Error: {{error}}

**Suggestions:**
- Check HTML/CSS syntax for errors
- Verify all referenced resources (images, stylesheets) are accessible
- Check WeasyPrint logs for detailed error information
- Try the `printToPDF` tool for basic PDF generation with Chrome instead

---

## Replay Messages

## REPLAY_ABORTED

**Type:** success
**Summary:** Replay aborted

**Replay aborted:** {{name}}

Completed {{completedSteps}}/{{totalSteps}} steps before abort.

---

## REPLAY_HISTORY

**Type:** success
**Summary:** Command history

Showing {{count}} of {{totalCount}} commands

---

## REPLAY_HISTORY_EMPTY

**Type:** info
**Summary:** Command history empty

No commands recorded yet. All tool calls are automatically recorded.

---

## REPLAY_SAVED_LIST

**Type:** list
**Summary:** {{count}} saved sequence(s)

---

## REPLAY_SAVED_EMPTY

**Type:** info
**Summary:** No saved sequences

No sequences saved to disk yet.

Location: `.cdp-tools/sequences/`

---

## REPLAY_RUN_SUCCESS

**Type:** success
**Summary:** {{sequenceName}}

Completed {{successful}}/{{total}} commands in {{duration}}s

---

## REPLAY_RUN_FAILED

**Type:** error
**Summary:** Failed at step {{failedStep}} ({{failedTool}})

Sequence: {{sequenceName}}

---

## REPLAY_PAUSED

**Type:** info
**Summary:** {{sequenceName}}

Paused at step {{pausedStep}} of {{total}}, {{remaining}} remaining

---

## REPLAY_SEQUENCE_CREATED

**Type:** success
**Summary:** Sequence created

Name: {{name}}, ID: {{id}}, Commands: {{commandCount}}

---

## REPLAY_SEQUENCE_DETAILS

**Type:** success
**Summary:** Sequence details

{{name}}: {{commandCount}} commands

---

## REPLAY_STEP_SUCCESS

**Type:** success
**Summary:** {{sequenceName}}

Executed {{stepCount}} step(s), {{remaining}} remaining

---

## REPLAY_STEP_COMPLETE

**Type:** success
**Summary:** {{sequenceName}}

All {{total}} steps executed successfully

---

## REPLAY_BREAKPOINT_HIT

**Type:** info
**Summary:** {{sequenceName}}

Breakpoint hit at {{location}}

---

## REPLAY_SEQUENCE_LIST

**Type:** list
**Summary:** {{count}} sequence(s) in memory

---

## REPLAY_SEQUENCE_LIST_EMPTY

**Type:** info
**Summary:** No sequences saved

No sequences saved yet in memory.

---

## REPLAY_ACTIVE_STATUS

**Type:** info
**Summary:** {{sequenceName}}

Paused at step {{currentStep}} of {{totalSteps}}

---

## REPLAY_STEP_FAILED

**Type:** error
**Summary:** Step failed

{{sequenceName}}: Failed at step {{failedStep}} ({{failedTool}})

---

## REPLAY_INSERT_PROMPT

**Type:** info
**Summary:** Insert commands

{{sequenceName}}: {{commandCount}} command(s) available to insert

---

## REPLAY_INSERT_SUCCESS

**Type:** success
**Summary:** Commands inserted

{{sequenceName}}: Inserted {{insertedCount}} command(s) after step {{insertAfter}}

---

## REPLAY_INSERT_NEW

**Type:** success
**Summary:** New sequence created

{{sequenceName}}: Created with {{insertedCount}} inserted command(s)

---

## REPLAY_DEBUG_STATE

**Type:** info
**Summary:** Debug state

Execution paused at {{location}}

---

## REPLAY_VARIABLE_PROMPT

**Type:** info
**Summary:** Variables found

{{sequenceName}}: {{variableCount}} customizable parameter(s)

---

## REPLAY_NO_COMMANDS_SINCE_PAUSE

**Type:** info
**Summary:** No commands to insert

No commands recorded since pause. Run some commands first.

---

## RECORDING_STARTED

**Type:** success

Command recording started. All tool calls will be recorded until you stop.

---

## RECORDING_STOPPED

**Type:** success

Recording stopped with {{commandCount}} commands. Use `export` to save to disk.

---

## SEQUENCE_EXPORTED

**Type:** success

Sequence "{{name}}" exported successfully!

**Sequence ID:** `{{sequenceId}}`
**Commands:** {{commandCount}}

---

## SEQUENCE_DELETED

**Type:** success

Sequence `{{sequenceId}}` deleted successfully.

---

## ALREADY_RECORDING

**Type:** error
**Code:** ALREADY_RECORDING

Already recording. Stop current recording first with `replay({ action: 'stopRecording' })`.

---

## NOT_RECORDING

**Type:** error
**Code:** NOT_RECORDING

Not currently recording. Start recording first with `replay({ action: 'startRecording' })`.

---

## NO_COMMANDS_RECORDED

**Type:** error
**Code:** NO_COMMANDS_RECORDED

No commands were recorded in this session.

---

## SEQUENCE_NOT_FOUND

**Type:** error
**Code:** SEQUENCE_NOT_FOUND

{{#message}}{{message}}{{/message}}{{^message}}Sequence `{{sequenceId}}` not found. Use `replay({ action: 'list' })` to see available sequences or `replay({ action: 'listSaved' })` to see saved files.{{/message}}

---

## NO_MATCHING_COMMANDS

**Type:** error
**Code:** NO_MATCHING_COMMANDS

No commands matched the provided IDs.

**Provided IDs:** {{providedIds}}

---

## SEQUENCE_EXPORTED_TO_DISK

**Type:** success

Sequence exported to disk successfully!

**Filename:** `{{filename}}`
**Location:** `.cdp-tools/sequences/`

---

## LOAD_FAILED

**Type:** error
**Code:** LOAD_FAILED

Failed to load sequence from disk.

**Filename:** `{{filename}}`
**Error:** {{error}}

**Suggestions:**
- Verify the filename is correct
- Check that the file exists in `.cdp-tools/sequences/`
- Use `replay({ action: 'listSaved' })` to see available files

---

## SEQUENCE_LOADED_FROM_DISK

**Type:** success

Sequence loaded.

**Sequence ID:** `{{sequenceId}}`
**Name:** {{name}}
**Commands:** {{commandCount}}

---

## SEQUENCE_LOADED_INTO_HISTORY

**Type:** success

Loaded {{commandCount}} commands from "{{name}}" into history.

Use `replay({ action: 'history' })` to view commands.

---

## SAVED_SEQUENCE_DELETED

**Type:** success

Sequence file "{{filename}}" deleted successfully.

---

## EXPORT_SUCCESS

**Type:** success
**Summary:** Exported

Test: `{{testFile}}`
{{#sequenceFile}}Sequence: `{{sequenceFile}}`{{/sequenceFile}}
Format: {{format}}

---

## EXPORT_SEQUENCE_SUCCESS

**Type:** success
**Summary:** Sequence exported

`{{filename}}` ({{location}})

---

## EXPORT_CONFLICT

**Type:** warning
**Summary:** File exists

`{{filepath}}` exists. Use `overwrite: true` or rename sequence.

---

## EXPORT_FAILED

**Type:** error
**Code:** EXPORT_FAILED

{{message}}

---

## RECORDING_STOPPED

**Type:** success
**Summary:** Sequence created

{{name}} ({{sequenceId}})
{{duration}}s, {{commandCount}} commands, {{startUrl}}
clicks:{{clicks}}, drags:{{drags}}, scrolls:{{scrolls}}, keys:{{keyPresses}}{{#navigations}}, nav:{{navigations}}{{/navigations}}{{#comments}}, comments:{{comments}}{{/comments}}
{{#timeline}}
Timeline: {{timeline}}
{{/timeline}}
{{#bugCount}}
🐛 **{{bugCount}} bug(s) recorded** - Use `issues({ action: 'list' })` to view
{{/bugCount}}
{{#featureCount}}
✨ **{{featureCount}} feature(s) requested** - Use `issues({ action: 'list' })` to view
{{/featureCount}}
{{#hasIssues}}
**Issues created:** {{issuesCreatedList}}
{{/hasIssues}}
{{^hasIssues}}
Next: `get/run/export({ name: "{{name}}" })`
{{/hasIssues}}

---

## RECORDING_NAME_CONFLICT

**Type:** warning
**Summary:** Name exists

"{{sequenceName}}" exists. Use `name: "new-name"` or `overwrite: true`.

---

## BUGS_BLOCKING

**Type:** error
**Code:** BUGS_BLOCKING

**BLOCKED: Bugs require acknowledgment**

The following bugs were recorded and must be acknowledged before tools can be used:

{{bugList}}

Use `issues({ action: 'acknowledge' })` to acknowledge.

---

## Issues Messages

## ISSUES_LIST

**Type:** success
**Summary:** Issues list

{{issuesList}}

{{count}} issues: {{bugCount}} bugs, {{featureCount}} features{{#pendingCount}}, {{pendingCount}} pending{{/pendingCount}}

---

## ISSUES_CREATED

**Type:** success
**Summary:** Issue created

**Issue #{{id}} created** ({{type}})

{{description}}{{#sequenceFile}}

Sequence: `{{sequenceFile}}`{{/sequenceFile}}

---

## ISSUES_NOT_FOUND

**Type:** error
**Code:** ISSUES_NOT_FOUND

Issue #{{id}} not found

{{message}}

---

## ISSUES_MISSING_ID

**Type:** error
**Code:** ISSUES_MISSING_ID

{{message}}

---

## ISSUES_MISSING_TYPE

**Type:** error
**Code:** ISSUES_MISSING_TYPE

{{message}}

---

## ISSUES_MISSING_DESCRIPTION

**Type:** error
**Code:** ISSUES_MISSING_DESCRIPTION

{{message}}

---

## ISSUES_MISSING_START_URL

**Type:** error
**Code:** ISSUES_MISSING_START_URL

{{message}}

---

## ISSUES_WORK_STARTED

**Type:** success
**Summary:** Working on issue #{{id}}

{{details}}{{#replayStarted}}
Sequence replay completed.{{/replayStarted}}{{#browserLaunched}}
Browser launched and navigated to start URL.{{/browserLaunched}}{{#recordingStarted}}
Recording started. Reproduce the issue, then stop the recording.{{/recordingStarted}}{{#connectionReason}}

Connection: `{{connectionReason}}`{{/connectionReason}}

---

## ISSUES_WORK_CANCELLED

**Type:** info
**Summary:** Work session cancelled for #{{id}}

Work session cancelled for {{type}} #{{id}}.

{{description}}

---

## ISSUES_VERIFICATION_CANCELLED

**Type:** info
**Summary:** Verification cancelled for #{{id}}

Verification cancelled for {{type}} #{{id}}.

{{description}}

---

## ISSUES_RESOLVED

**Type:** success
**Summary:** Issue #{{id}} {{status}}

**{{type}} #{{id}} marked as {{status}}**

{{description}}
{{#userComment}}

**User comment:** {{userComment}}
{{/userComment}}
{{#replayDetails}}

**Replay execution details:**
{{replayDetails}}
{{/replayDetails}}

---

## ISSUES_NOT_RESOLVED

**Type:** warning
**Summary:** Issue #{{id}} not resolved

**{{type}} #{{id}} - NOT RESOLVED**

User indicated this issue is not yet resolved. Status remains: {{status}}

{{description}}
{{#userComment}}

**User comment:** {{userComment}}
{{/userComment}}
{{#replayDetails}}

**Replay execution details:**
{{replayDetails}}
{{/replayDetails}}

---

## ISSUES_REPLAY_FAILED

**Type:** error
**Code:** ISSUES_REPLAY_FAILED
**Summary:** {{type}} #{{id}} replay failed

{{replayDetails}}

---

## ISSUES_MISSING_CONNECTION

**Type:** error
**Code:** ISSUES_MISSING_CONNECTION

{{message}}

---

## ISSUES_NO_PAGE_ACCESS

**Type:** error
**Code:** ISSUES_NO_PAGE_ACCESS

{{message}}

---

## ISSUES_PAGE_ERROR

**Type:** error
**Code:** ISSUES_PAGE_ERROR

{{message}}

---

## ISSUES_CHROME_LAUNCH_FAILED

**Type:** error
**Code:** ISSUES_CHROME_LAUNCH_FAILED

{{message}}

---

## ISSUES_INVALID_CONNECTION

**Type:** error
**Code:** ISSUES_INVALID_CONNECTION

{{message}}

---

## ISSUES_ACKNOWLEDGED

**Type:** success
**Summary:** Bugs acknowledged ({{count}})

**Bugs acknowledged** ({{count}})

The following bugs have been acknowledged and must be added to your TODO list:

{{bugList}}

**IMPORTANT**: Start a non-blocking agent to investigate each bug immediately.
The agent should analyze the issue, report findings, and propose a fix - but NOT make changes.
Add each bug to your TODO list and track investigation progress.

---

## ISSUES_NONE_PENDING

**Type:** success
**Summary:** No pending bugs

{{message}}

---

## ISSUES_INVALID_ACTION

**Type:** error
**Code:** ISSUES_INVALID_ACTION

Unknown action: {{action}}

{{message}}

---

## ISSUES_SEQUENCE_NOT_FOUND

**Type:** error
**Code:** ISSUES_SEQUENCE_NOT_FOUND

Sequence "{{sequenceName}}" not found

{{message}}

---

## ISSUES_SEQUENCE_COPY_FAILED

**Type:** error
**Code:** ISSUES_SEQUENCE_COPY_FAILED

Failed to copy sequence "{{sequenceName}}"

{{error}}

---

## ISSUES_SEQUENCE_RERECORDED

**Type:** success
**Summary:** New sequence recorded for {{type}} #{{id}}

{{recordingDetails}}

**ACTION REQUIRED:** The sequence has been updated. Run `issues({ action: 'resolve', id: {{id}} })` again to verify the fix with the new sequence.

---

## MISSING_CONNECTION

**Type:** error
**Code:** MISSING_CONNECTION

{{message}}

**Tools needing connection:** {{toolsNeedingConnection}}

{{suggestion}}

---

## MISSING_PARAMETER

**Type:** error
**Code:** MISSING_PARAMETER

Missing required parameter: {{missing}}

**Action:** {{action}}
**Message:** {{message}}

---

## Server Messages

## SERVER_START_SUCCESS

**Type:** success
**Summary:** Server started and ready

{{id}} (PID: {{pid}}){{#port}}, Port: {{port}}{{/port}}{{#autoRun}}, Auto-run: enabled{{/autoRun}}

Logs: server({ action: "logs", serverId: "{{id}}" })

---

## SERVER_START_PENDING

**Type:** success
**Summary:** Server starting (waiting for port)

{{id}} (PID: {{pid}}){{#autoRun}}, Auto-run: enabled{{/autoRun}}
**Status:** Waiting for port detection

The server process started but hasn't reported its port yet.
- Check logs: `server({ action: 'logs', serverId: '{{id}}' })`
- Port detection continues in background (30s timeout)
- If port not detected, tools will be blocked until acknowledged

---

## SERVER_STOP_SUCCESS

**Type:** success

Server `{{serverId}}` stopped.

---

## SERVER_RESTART_SUCCESS

**Type:** success
**Summary:** Server restarted and ready

{{id}} (PID: {{pid}}){{#port}}, Port: {{port}}{{/port}}{{#autoRun}}, Auto-run: enabled{{/autoRun}}

---

## SERVER_LIST_SUCCESS

**Type:** success

{{count}} server(s) ({{runningCount}} running, {{stoppedCount}} stopped)

{{serverList}}

**Actions:**
- Stop: `server({ action: "stop", serverId: "<id>" })`
- Restart: `server({ action: "restart", serverId: "<id>" })`
- Logs: `server({ action: "logs", serverId: "<id>" })`

---

## SERVER_LIST_EMPTY

**Type:** success

No servers running.

Use `server({ action: "start", command: "<cmd>", cwd: "<dir>", id: "<name>" })` to start a server.

---

## SERVER_LOGS_FILE

**Type:** success

Logs for {{serverId}}

{{#running}}Running{{/running}}{{^running}}Stopped{{/running}}{{#autoRun}} (auto-run){{/autoRun}}
{{#port}}Port: {{port}}{{/port}}
{{#uptime}}Uptime: {{uptime}}{{/uptime}}

stdout: {{stdoutPath}}
stderr: {{stderrPath}}

---

## SERVER_LOGS_COMMAND

**Type:** success

Logs for {{serverId}}

{{#running}}Running{{/running}}{{^running}}Stopped{{/running}}{{#autoRun}} (auto-run){{/autoRun}}
{{#port}}Port: {{port}}{{/port}}
{{#uptime}}Uptime: {{uptime}}{{/uptime}}

View logs: {{command}}

---

## SERVER_LOGS_UNAVAILABLE

**Type:** error

Log access not available for server {{serverId}}.

---

## SERVER_STOP_ALL_SUCCESS

**Type:** success

Stopped {{count}} server(s): {{serverIds}}

---

## SERVER_STOP_ALL_EMPTY

**Type:** success

No servers were running.

---

## SERVER_AUTORUN_ENABLED

**Type:** success

Auto-run enabled for `{{serverId}}`.

Server will automatically start when MCP server starts.

---

## SERVER_AUTORUN_DISABLED

**Type:** success

Auto-run disabled for `{{serverId}}`.

Server will not auto-start when MCP server starts.

---

## SERVER_NOT_FOUND

**Type:** error
**Code:** SERVER_NOT_FOUND

Server `{{serverId}}` not found.

**Suggestions:**
- Use `server({ action: "list" })` to see running servers
- Check the server ID you provided when starting the server

---

## SERVER_ALREADY_RUNNING

**Type:** error
**Code:** SERVER_ALREADY_RUNNING

Server `{{serverId}}` is already running (PID: {{pid}}).

**Suggestions:**
- Use `server({ action: "stop", serverId: "{{serverId}}" })` to stop it first
- Use `server({ action: "restart", serverId: "{{serverId}}" })` to restart it

---

## SERVER_START_FAILED

**Type:** error
**Code:** SERVER_START_FAILED

Failed to start server: {{error}}

---

## SERVER_MISSING_COMMAND

**Type:** error
**Code:** MISSING_PARAMETER

Missing required parameter: `command`

Provide the command to run (e.g., "npm run dev", "flask run", "python manage.py runserver").

---

## SERVER_MISSING_CWD

**Type:** error
**Code:** MISSING_PARAMETER

Missing required parameter: `cwd`

Provide the working directory for the server command.

---

## SERVER_MISSING_ID

**Type:** error
**Code:** MISSING_PARAMETER

Missing required parameter: `id`

Provide a unique identifier for this server (e.g., "flask-api", "next-frontend").

---

## SERVER_MISSING_SERVER_ID

**Type:** error
**Code:** MISSING_PARAMETER

Missing required parameter: `serverId`

Use `server({ action: "list" })` to see running servers.

---

## SERVER_MISSING_AUTORUN

**Type:** error
**Code:** MISSING_PARAMETER

Missing required parameter: `autoRun`

Set to `true` to enable auto-start on MCP startup, or `false` to disable.

---

## SERVER_LOGS_CLEARED

**Type:** success

Logs cleared for `{{serverId}}`.

**Log directory:** `{{logDir}}`

---

## SERVER_REMOVED

**Type:** success

Server `{{serverId}}` removed from config.

---

## Port Monitoring Messages

## PORT_MONITOR_STARTED

**Type:** success
**Summary:** Port monitoring started

Now monitoring port {{port}} at level `{{level}}`{{#description}} ({{description}}){{/description}}{{#interval}} with custom interval {{interval}}ms{{/interval}}.

The port will be checked via TCP connection probes. If the port goes down, tool responses will be affected based on the monitoring level:
- `inform`: Info line prepended to responses
- `error`: Error line prepended to responses
- `block`: All tools blocked until acknowledged

**Default intervals:** block=1000ms, error=2000ms, inform=5000ms (configurable in `.cdp-tools/config.json`)

---

## PORT_MONITOR_STOPPED

**Type:** success
**Summary:** Port monitoring stopped

Stopped monitoring port {{port}}.

---

## PORT_MONITOR_LIST

**Type:** list
**Summary:** {{count}} monitored port(s)

**Up:** {{upCount}} | **Down:** {{downCount}} | **Connecting:** {{connectingCount}}

{{portList}}

---

## PORT_MONITOR_LIST_EMPTY

**Type:** success

No ports are currently being monitored.

Use `server({ action: 'monitorPort', port: <port>, monitoringLevel: 'inform'|'error'|'block' })` to start monitoring.

---

## PORT_ACKNOWLEDGED

**Type:** success
**Summary:** Port failure acknowledged

Acknowledged failure for port {{port}}. Tool execution will now continue.

**Note:** The port is still being monitored. If it comes back up and fails again, you will need to acknowledge again.

---

## PORT_MISSING_PORT

**Type:** error
**Code:** MISSING_PORT

Port number is required.

**Example:**
```
server({ action: 'monitorPort', port: 3000, monitoringLevel: 'error' })
```

---

## PORT_MISSING_LEVEL

**Type:** error
**Code:** MISSING_LEVEL

Monitoring level is required. Choose one of: `inform`, `error`, or `block`.

- `inform`: Info line prepended to tool responses when port is down
- `error`: Error line prepended to tool responses when port is down
- `block`: All tools blocked until failure is acknowledged

**Example:**
```
server({ action: 'monitorPort', port: 3000, monitoringLevel: 'block' })
```

---

## PORT_NOT_MONITORED

**Type:** error
**Code:** NOT_MONITORED

Port {{port}} is not being monitored.

Use `server({ action: 'listMonitored' })` to see all monitored ports.

---

## PORT_ACK_FAILED

**Type:** error
**Code:** ACK_FAILED

Cannot acknowledge port {{port}}. Either the port is not being monitored, or it is not currently in a failed state.

Use `server({ action: 'listMonitored' })` to check the current status of monitored ports.

---

## Startup Timeout Messages

## STARTUP_ACKNOWLEDGED

**Type:** success
**Summary:** Startup timeout acknowledged

Acknowledged startup timeout for server "{{serverId}}". Tool execution will now continue.

**Note:** The server is still running but port detection has stopped. If you know the port, you can manually monitor it with `server({ action: 'monitorPort', port: <port> })`.

---

## STARTUP_ACKNOWLEDGED_DIED

**Type:** success
**Summary:** Server failure acknowledged

Acknowledged that server "{{serverId}}" died during startup. Tool execution will now continue.

Check logs with `server({ action: 'logs', serverId: '{{serverId}}' })` to investigate the failure, then restart with `server({ action: 'restart', serverId: '{{serverId}}' })`.

---

## STARTUP_ACK_FAILED

**Type:** error
**Code:** ACK_FAILED

Cannot acknowledge startup for server "{{serverId}}". {{error}}

Use `server({ action: 'list' })` to see running servers.

---

## STARTUP_EXTENDED

**Type:** success
**Summary:** Startup timeout extended

Extended startup timeout for server "{{serverId}}" by {{timeout}}. Port detection has resumed.

Use `server({ action: 'logs', serverId: '{{serverId}}' })` to check server startup progress.

---

## STARTUP_EXTEND_FAILED

**Type:** error
**Code:** EXTEND_FAILED

Cannot extend startup timeout for server "{{serverId}}". {{error}}

If the server died, use `server({ action: 'restart', serverId: '{{serverId}}' })` to restart it.

---

## Config Messages

## CONFIG_STATUS

**Type:** info
**Summary:** Config status

**Loaded from:** {{loadedFrom}}
**Location:** {{location}}

| Path | Exists |
|------|--------|
| Local: {{localPath}} | {{localExists}} |
| Global: {{globalPath}} | {{globalExists}} |

---

## CONFIG_USE_LOCAL_SUCCESS

**Type:** success
**Summary:** Switched to local config

Now using local config at {{path}}.{{#seeded}}

Config was seeded from global settings.{{/seeded}}

---

## CONFIG_USE_GLOBAL_SUCCESS

**Type:** success
**Summary:** Switched to global config

Now using global config at {{path}}.

---

## CONFIG_RESET_SUCCESS

**Type:** success
**Summary:** Config reset to defaults

Configuration has been reset to defaults and saved.

---

## CONFIG_BACKUP_SUCCESS

**Type:** success
**Summary:** Config backed up

Backup created at {{path}}.

---

## CONFIG_BACKUP_FAILED

**Type:** error
**Code:** BACKUP_FAILED

No config file to backup. Load a config first.

---

## CONFIG_CLONE_SUCCESS

**Type:** success
**Summary:** Cloned global config to local

Created local config at {{path}} from global settings.

---

## CONFIG_CLONE_NO_GLOBAL

**Type:** error
**Code:** NO_GLOBAL_CONFIG

No global config exists to clone from.

---

## CONFIG_SHOW

**Type:** info
**Summary:** Current configuration

```json
{{config}}
```

---

## TOOLS_LIST

**Type:** info

{{toolsJson}}

---

## TOOLS_LIST_CONFLICT

**Type:** error

Dependency conflicts detected. All tools are blocked until resolved.

{{#each conflicts}}
{{this}}
{{/each}}

---

## Navigation Messages

## NAVIGATION_FAILED

**Type:** error
**Code:** NAVIGATION_FAILED

Navigation failed: {{message}}

---

## Dashboard Messages

## DASHBOARD_OPEN

**Type:** success

Dashboard available at {{url}}

**Session type:** {{type}}

---

## DASHBOARD_STATUS

**Type:** success

**Dashboard Status**

| Property | Value |
|----------|-------|
| Session ID | {{shortId}} |
| Full ID | {{sessionId}} |
| PID | {{pid}} |
| Type | {{type}} |
| Port | {{port}} |
| URL | {{url}} |
| Sessions | {{sessionCount}} |

---

## DASHBOARD_STOPPED

**Type:** success

{{message}}

---

## DASHBOARD_NOT_AVAILABLE

**Type:** error
**Code:** DASHBOARD_NOT_AVAILABLE

Dashboard is not available: {{reason}}

---

## DASHBOARD_NOT_HUB

**Type:** error
**Code:** DASHBOARD_NOT_HUB

{{reason}}

**Suggestions:**
- The hub is running in a different session
- Use `dashboard({ action: "status" })` to see which session is the hub

---

