/** * Centralized tool prompts/descriptions. * Each prompt is either a string constant or a template function. */ // ============================================================================ // JavaScript REPL Tool // ============================================================================ export const JAVASCRIPT_REPL_DESCRIPTION = `# JavaScript REPL ## Purpose Execute JavaScript code in a sandboxed browser environment with full Web APIs. ## When to Use - Quick calculations or data transformations - Testing JavaScript code snippets in isolation - Processing data with libraries (XLSX, CSV, etc.) - Creating visualizations (charts, graphs) ## Environment - ES2023+ JavaScript (async/await, optional chaining, nullish coalescing, etc.) - All browser APIs: DOM, Canvas, WebGL, Fetch, Web Workers, WebSockets, Crypto, etc. - Import any npm package: await import('https://esm.run/package-name') ## Common Libraries - XLSX: const XLSX = await import('https://esm.run/xlsx'); - CSV: const Papa = (await import('https://esm.run/papaparse')).default; - Chart.js: const Chart = (await import('https://esm.run/chart.js/auto')).default; - Three.js: const THREE = await import('https://esm.run/three'); ## Persistence between tool calls - Objects stored on global scope do not persist between calls. - Use artifacts as a key-value JSON object store: - Use createOrUpdateArtifact(filename, content) to persist data between calls. JSON objects are auto-stringified. - Use listArtifacts() and getArtifact(filename) to read persisted data. JSON files are auto-parsed to objects. - Prefer to use a single artifact throughout the session to store intermediate data (e.g. 'data.json'). ## Input - You have access to the user's attachments via listAttachments(), readTextAttachment(id), and readBinaryAttachment(id) - You have access to previously created artifacts via listArtifacts() and getArtifact(filename) ## Output - All console.log() calls are captured for you to inspect. The user does not see these logs. - Create artifacts for file results (images, JSON, CSV, etc.) which persiste throughout the session and are accessible to you and the user. ## Example const data = [10, 20, 15, 25]; const sum = data.reduce((a, b) => a + b, 0); const avg = sum / data.length; console.log('Sum:', sum, 'Average:', avg); ## Important Notes - Graphics: Use fixed dimensions (800x600), NOT window.innerWidth/Height - Chart.js: Set options: { responsive: false, animation: false } - Three.js: renderer.setSize(800, 600) with matching aspect ratio`; // ============================================================================ // Artifacts Tool // ============================================================================ export const ARTIFACTS_BASE_DESCRIPTION = `Creates and manages file artifacts. Each artifact is a file with a filename and content. CRITICAL - ARTIFACT UPDATE WORKFLOW: 1. Creating new file? → Use 'create' 2. Changing specific section(s)? → Use 'update' (PREFERRED - token efficient) 3. Complete structural overhaul? → Use 'rewrite' (last resort only) ❌ NEVER regenerate entire documents to change small sections ✅ ALWAYS use 'update' for targeted edits (adding sources, fixing sections, appending to lists) Commands: 1. create: Create a new file - filename: Name with extension (required, e.g., 'summary.md', 'index.html') - title: Display name for the tab (optional, defaults to filename) - content: File content (required) - Use for: Brand new files only 2. update: Update part of an existing file (PREFERRED for edits) - filename: File to update (required) - old_str: Exact string to replace (required, can be multi-line) - new_str: Replacement string (required) - Use for: Adding sources, fixing typos, updating sections, appending content - Token efficient - only transmits the changed portion - Example: Adding source link to a section 3. rewrite: Completely replace a file's content (LAST RESORT) - filename: File to rewrite (required) - content: New content (required) - Use ONLY when: Complete structural overhaul needed - DO NOT use for: Adding one line, fixing one section, appending content 4. get: Retrieve the full content of a file - filename: File to retrieve (required) - Returns the complete file content 5. delete: Delete a file - filename: File to delete (required) 6. logs: Get console logs and errors (HTML files only) - filename: HTML file to get logs for (required) ANTI-PATTERNS TO AVOID: ❌ Using 'get' + modifying content + 'rewrite' to change one section ❌ Using createOrUpdateArtifact() in code for manual edits YOU make ✅ Use 'update' command for surgical, targeted modifications`; export const ARTIFACTS_RUNTIME_EXAMPLE = `- Example HTML artifact that processes a CSV attachment: `; export const ARTIFACTS_HTML_SECTION = ` For text/html artifacts: - Must be a single self-contained file - External scripts: Use CDNs like https://esm.sh, https://unpkg.com, or https://cdnjs.cloudflare.com - Preferred: Use https://esm.sh for npm packages (e.g., https://esm.sh/three for Three.js) - For ES modules, use: - For Three.js specifically: import from 'https://esm.sh/three' or 'https://esm.sh/three@0.160.0' - For addons: import from 'https://esm.sh/three/examples/jsm/controls/OrbitControls.js' - No localStorage/sessionStorage - use in-memory variables only - CSS should be included inline - CRITICAL REMINDER FOR HTML ARTIFACTS: - ALWAYS set a background color inline in