{"version":3,"sources":["../src/tools/index.ts","../src/tools/manage-tools.ts"],"names":["SELF_MODIFY_TOOLS","MANAGE_MESSAGES_TOOLS","SCHEDULER_TOOLS","GALLERY_TOOLS","MESH_TOOLS","MULTI_AGENT_TOOLS","WRITING_TOOLS","CORE_TOOLS","MEMORY_TOOLS","CLIPBOARD_TOOLS","GITHUB_TOOLS","KNOWLEDGE_GRAPH_TOOLS","VISION_TOOLS","AUDIO_TOOLS","OPENAI_IMAGE_TOOLS","TELEGRAM_TOOLS","NOTIFICATION_TOOLS","GEOLOCATION_TOOLS","PANEL_TOOLS","TRANSFORMERS_TOOLS","DOM_TOOLS","VIRTUAL_CURSOR_TOOLS","WEBCONTAINER_TOOLS","WEBGPU_TOOLS","NETWORK_INTERCEPT_TOOLS","FILE_SYSTEM_TOOLS","OFFSCREEN_CANVAS_TOOLS","STREAMING_TOOLS","NPM_TOOLS","tool","z","loadCustomTools","idbGet","idbDel","idbSet"],"mappings":"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","file":"chunk-XZFISCST.cjs","sourcesContent":["/**\n * tools/index.ts — Single entry point for all careless v2 tools.\n *\n * buildTools(settings) returns full tool array based on feature flags\n * AND per-tool enable/disable from settings.disabledTools.\n */\nimport type { Settings } from '../types/index'\nimport { WRITING_TOOLS } from './time-tools'\nimport { CORE_TOOLS } from './core'\nimport { MEMORY_TOOLS } from './memory'\nimport { CLIPBOARD_TOOLS } from './clipboard'\nimport { VISION_TOOLS } from './vision'\nimport { AUDIO_TOOLS } from './audio'\nimport { KNOWLEDGE_GRAPH_TOOLS } from './knowledge-graph'\nimport { NOTIFICATION_TOOLS } from './notification'\nimport { GEOLOCATION_TOOLS } from './geolocation'\nimport { TELEGRAM_TOOLS } from './telegram'\nimport { PANEL_TOOLS } from './panel'\nimport { GITHUB_TOOLS } from './github'\nimport { OPENAI_IMAGE_TOOLS } from './openai-image'\nimport { MESH_TOOLS as MESH_COORD_TOOLS } from './mesh'\nimport { SELF_MODIFY_TOOLS, buildCustomTools } from './self-modify'\nimport { SCHEDULER_TOOLS } from './scheduler'\nimport { GALLERY_TOOLS } from './gallery'\nimport { MANAGE_MESSAGES_TOOLS } from './manage-messages'\nimport { MANAGE_TOOLS_TOOLS } from './manage-tools'\nimport { MULTI_AGENT_TOOLS } from './multi-agent'\n// 🧪 Experimental (Tier 4)\nimport { TRANSFORMERS_TOOLS } from './transformers-js'\nimport { DOM_TOOLS } from './dom'\nimport { WEBCONTAINER_TOOLS } from './webcontainer'\nimport { WEBGPU_TOOLS } from './webgpu'\nimport { NETWORK_INTERCEPT_TOOLS } from './network-intercept'\nimport { FILE_SYSTEM_TOOLS } from './file-system'\nimport { OFFSCREEN_CANVAS_TOOLS } from './offscreen-canvas'\nimport { VIRTUAL_CURSOR_TOOLS } from './virtual-cursor'\n// 🎥 Streaming media (camera/mic/screen → Transformers.js with UI overlay)\nimport { STREAMING_TOOLS } from './streaming-media'\nimport { NPM_TOOLS } from './npm'\n\nexport { buildCustomTools } from './self-modify'\nexport { startScheduler } from './scheduler'\n\n/** Tool catalog — grouped for UI enable/disable in Settings > Tools */\nexport const TOOL_GROUPS: { id: string; label: string; tools: any[] }[] = [\n  { id: 'self-modify', label: 'Self-modification (create_tool, update_self_prompt)', tools: SELF_MODIFY_TOOLS },\n  { id: 'manage', label: 'Self-management (manage_messages, manage_tools)', tools: [...MANAGE_MESSAGES_TOOLS, ...MANAGE_TOOLS_TOOLS] },\n  { id: 'scheduler', label: 'Scheduler (recurring tasks, notifications)', tools: SCHEDULER_TOOLS },\n  { id: 'gallery', label: 'Gallery (save/recall UI panels, charts, 3D scenes)', tools: GALLERY_TOOLS },\n  { id: 'mesh-coord', label: 'Mesh coordination (invoke, broadcast, ring context)', tools: MESH_COORD_TOOLS },\n  { id: 'multi-agent', label: 'Multi-agent (spawn, invoke, broadcast, list, kill, update)', tools: MULTI_AGENT_TOOLS },\n  { id: 'writing', label: 'Writing', tools: WRITING_TOOLS },\n  { id: 'core', label: 'Core (render_ui, eval, storage, fetch)', tools: CORE_TOOLS },\n  { id: 'memory', label: 'Memory', tools: MEMORY_TOOLS },\n  { id: 'clipboard', label: 'Clipboard', tools: CLIPBOARD_TOOLS },\n  { id: 'research', label: 'Research (github)', tools: GITHUB_TOOLS },\n  { id: 'knowledge', label: 'Knowledge graph', tools: KNOWLEDGE_GRAPH_TOOLS },\n  { id: 'vision', label: 'Vision (screenshot, camera)', tools: VISION_TOOLS },\n  { id: 'audio', label: 'Audio (speech)', tools: AUDIO_TOOLS },\n  { id: 'image-gen', label: 'Image generation', tools: OPENAI_IMAGE_TOOLS },\n  { id: 'messaging', label: 'Messaging (telegram)', tools: TELEGRAM_TOOLS },\n  { id: 'system', label: 'System (notifications, geolocation)', tools: [...NOTIFICATION_TOOLS, ...GEOLOCATION_TOOLS] },\n  { id: 'utility', label: 'Utility (panels)', tools: PANEL_TOOLS },\n  // 🧪 Experimental (Tier 4) — browser-native superpowers\n  { id: 'transformers', label: '🧪 Transformers.js (on-device ML: TTS, STT, VLM, embeddings, classification)', tools: TRANSFORMERS_TOOLS },\n  { id: 'dom', label: '🧪 DOM (query, mutate, observe — agent manipulates its own page)', tools: DOM_TOOLS },\n  { id: 'virtual-cursor', label: '🖱️ Virtual cursor (visible, agent-controlled overlay — move/click/type/highlight for demos)', tools: VIRTUAL_CURSOR_TOOLS },\n  { id: 'webcontainer', label: '🧪 WebContainer (full Node.js in the browser — npm install, dev servers)', tools: WEBCONTAINER_TOOLS },\n  { id: 'webgpu', label: '🧪 WebGPU (compute shaders — GPU math kernels)', tools: WEBGPU_TOOLS },\n  { id: 'network-intercept', label: '🧪 Network intercept (log/block/mock/delay fetch requests)', tools: NETWORK_INTERCEPT_TOOLS },\n  { id: 'file-system', label: '🧪 File System Access (real local disk — read/write user files)', tools: FILE_SYSTEM_TOOLS },\n  { id: 'offscreen-canvas', label: '🧪 OffscreenCanvas (render PNGs off the main thread in a Worker)', tools: OFFSCREEN_CANVAS_TOOLS },\n  { id: 'streaming', label: '🎥 Live streaming (camera/mic/screen → Transformers.js, inline video panels + overlay drawing)', tools: STREAMING_TOOLS },\n  { id: 'npm', label: '📦 npm packages (load any package via esm.sh, run Node-only ones via WebContainer)', tools: NPM_TOOLS },\n]\n\n/** Flat list of every tool name — for the per-tool toggle UI. */\nexport function getAllToolNames(): string[] {\n  const names: string[] = []\n  for (const g of TOOL_GROUPS) for (const t of g.tools) names.push(t.name)\n  return Array.from(new Set(names)).sort()\n}\n\nexport function buildTools(settings: Settings) {\n  if (settings.enableTools === false) return []\n  const disabled = new Set(settings.disabledTools || [])\n\n  const tools: any[] = []\n  for (const group of TOOL_GROUPS) {\n    // Respect high-level feature flags\n    if (group.id === 'vision' && settings.enableVision === false) continue\n    if (group.id === 'mesh-coord' && settings.enableMesh === false) continue\n    if (group.id === 'memory' && settings.enableMemory === false) continue\n    for (const t of group.tools) {\n      if (!disabled.has(t.name)) tools.push(t)\n    }\n  }\n  return tools\n}\n","/**\n * manage_tools — introspect, enable, disable, and hot-create tools at runtime.\n *\n * Inspired by devduck's manage_tools + leverages the careless custom-tools store.\n *\n * Actions:\n *  - list         → all registered tools (grouped) + enabled/disabled state\n *  - groups       → list tool groups only\n *  - active       → list currently-active tool names (after settings filter)\n *  - disable      → add tool(s) to settings.disabledTools (by name)\n *  - enable       → remove tool(s) from settings.disabledTools\n *  - disable_group→ disable every tool in a group\n *  - enable_group → enable every tool in a group\n *  - custom_list  → list user-created custom tools\n *  - custom_delete→ delete a custom tool\n *  - reload       → fire a rebuild event (agent will pick up on next turn)\n *\n * All actions that mutate settings update the `careless-settings` localStorage\n * entry and emit a `storage` event so useSettings refreshes cross-component.\n *\n * Concurrency: mutation ops are serialized via an async chain (writeLock) so\n * parallel calls queue instead of racing. See manage-tools.log.md bug #1.\n */\nimport { tool } from '@strands-agents/sdk'\nimport { z } from 'zod'\nimport { TOOL_GROUPS, getAllToolNames, buildTools } from './index'\nimport { loadCustomTools } from './self-modify'\nimport { get as idbGet, set as idbSet, del as idbDel } from 'idb-keyval'\n\nconst SETTINGS_KEY = 'careless-settings'\nconst CUSTOM_TOOLS_KEY = 'careless-custom-tools'\n\n/** Never let the agent disable these — disabling them would brick self-recovery. */\nconst PROTECTED_TOOLS = new Set([\n  'manage_tools',\n  'manage_messages',\n  'update_self_prompt',\n  'create_tool',\n])\n\ninterface StoredSettings {\n  disabledTools?: string[]\n  enableTools?: boolean\n  enableVision?: boolean\n  enableMesh?: boolean\n  enableMemory?: boolean\n  [k: string]: unknown\n}\n\nfunction loadSettings(): StoredSettings {\n  try {\n    const raw = localStorage.getItem(SETTINGS_KEY)\n    return raw ? JSON.parse(raw) : {}\n  } catch { return {} }\n}\n\nfunction saveSettings(s: StoredSettings) {\n  localStorage.setItem(SETTINGS_KEY, JSON.stringify(s))\n  window.dispatchEvent(new StorageEvent('storage', { key: SETTINGS_KEY, newValue: JSON.stringify(s) }))\n  window.dispatchEvent(new CustomEvent('careless:settings-changed', { detail: s }))\n  window.dispatchEvent(new CustomEvent('careless:tools-changed'))\n}\n\n/** Serialize mutations — fixes the concurrent-write race documented in manage-tools.log.md */\nlet writeLock: Promise<void> = Promise.resolve()\nfunction serialize<T>(fn: () => Promise<T>): Promise<T> {\n  const next = writeLock.then(fn, fn)\n  writeLock = next.then(() => undefined, () => undefined)\n  return next\n}\n\nfunction groupToolNames(groupId: string): string[] {\n  const g = TOOL_GROUPS.find(x => x.id === groupId)\n  return g ? g.tools.map(t => t.name) : []\n}\n\nfunction flattenBuiltins() {\n  const out: { name: string; group: string; group_label: string; description?: string }[] = []\n  for (const g of TOOL_GROUPS) {\n    for (const t of g.tools) {\n      out.push({ name: t.name, group: g.id, group_label: g.label, description: (t as { description?: string }).description })\n    }\n  }\n  return out\n}\n\nexport const manageToolsTool = tool({\n  name: 'manage_tools',\n  description:\n    'Introspect & modify the tool registry. Actions: list | groups | active | disable | enable | ' +\n    'disable_group | enable_group | custom_list | custom_delete | reload. ' +\n    'Mutations persist to settings (localStorage) and emit a reload event. ' +\n    'Mutations are serialized (parallel-safe). Protected tools (manage_*, update_self_prompt, create_tool) cannot be disabled.',\n  inputSchema: z.object({\n    action: z.enum([\n      'list', 'groups', 'active',\n      'disable', 'enable',\n      'disable_group', 'enable_group',\n      'custom_list', 'custom_delete',\n      'reload',\n    ]),\n    name: z.string().optional().describe('Tool name (or comma-separated list) for enable/disable/custom_delete'),\n    group: z.string().optional().describe('Group id for disable_group/enable_group (see groups action)'),\n    filter: z.string().optional().describe('Substring filter for list action — applies to both builtin and custom tools'),\n  }),\n  callback: async (input) => {\n    try {\n      if (input.action === 'list') {\n        const settings = loadSettings()\n        const disabledSet = new Set(settings.disabledTools || [])\n        const builtins = flattenBuiltins()\n        const custom = (await loadCustomTools()).map(t => ({\n          name: t.name, group: 'custom', group_label: 'User-created',\n          description: t.description,\n        }))\n\n        // Apply filter to BOTH builtin and custom (fixes bug #2)\n        const filterFn = (t: { name: string; group: string; description?: string }) =>\n          !input.filter ||\n          t.name.toLowerCase().includes(input.filter.toLowerCase()) ||\n          t.group.toLowerCase().includes(input.filter.toLowerCase()) ||\n          (t.description || '').toLowerCase().includes(input.filter.toLowerCase())\n\n        const builtinsFiltered = builtins.filter(filterFn).map(t => ({ ...t, enabled: !disabledSet.has(t.name), protected: PROTECTED_TOOLS.has(t.name) }))\n        const customFiltered = custom.filter(filterFn).map(t => ({ ...t, enabled: !disabledSet.has(t.name), protected: false }))\n\n        return JSON.stringify({\n          status: 'success',\n          filter: input.filter || null,\n          total: builtinsFiltered.length + customFiltered.length,\n          builtin_count: builtinsFiltered.length,\n          custom_count: customFiltered.length,\n          disabled_count: disabledSet.size,\n          tools: builtinsFiltered,\n          custom_tools: customFiltered,\n        })\n      }\n\n      if (input.action === 'groups') {\n        const settings = loadSettings()\n        const disabledSet = new Set(settings.disabledTools || [])\n        const groups = TOOL_GROUPS.map(g => ({\n          id: g.id,\n          label: g.label,\n          count: g.tools.length,\n          tool_names: g.tools.map(t => t.name),\n          disabled_in_group: g.tools.filter(t => disabledSet.has(t.name)).length,\n        }))\n        return JSON.stringify({ status: 'success', count: groups.length, groups })\n      }\n\n      if (input.action === 'active') {\n        const settings = loadSettings()\n        const live = buildTools(settings as never)\n        const names = live.map((t: { name: string }) => t.name).sort()\n        return JSON.stringify({ status: 'success', count: names.length, active_tools: names })\n      }\n\n      if (input.action === 'disable' || input.action === 'enable') {\n        const targets = (input.name || '').split(',').map(s => s.trim()).filter(Boolean)\n        if (!targets.length) return JSON.stringify({ status: 'error', error: 'name parameter required' })\n\n        return serialize(async () => {\n          const settings = loadSettings()\n          const disabledSet = new Set(settings.disabledTools || [])\n          const allNames = new Set([...getAllToolNames(), ...(await loadCustomTools()).map(t => t.name)])\n\n          const unknown = targets.filter(t => !allNames.has(t))\n          const knownAll = targets.filter(t => allNames.has(t))\n\n          // Footgun guard: refuse to disable protected tools\n          let rejected: string[] = []\n          let known = knownAll\n          if (input.action === 'disable') {\n            rejected = knownAll.filter(t => PROTECTED_TOOLS.has(t))\n            known = knownAll.filter(t => !PROTECTED_TOOLS.has(t))\n          }\n\n          // Track no-ops for idempotency signal\n          const before = new Set(disabledSet)\n          if (input.action === 'disable') known.forEach(n => disabledSet.add(n))\n          else known.forEach(n => disabledSet.delete(n))\n\n          const changed = known.filter(n => (input.action === 'disable' ? !before.has(n) : before.has(n)))\n          const noop = known.filter(n => !changed.includes(n))\n\n          settings.disabledTools = Array.from(disabledSet)\n          saveSettings(settings)\n\n          return JSON.stringify({\n            status: 'success',\n            action: input.action,\n            applied: changed,     // actually flipped state\n            no_op: noop,          // already in desired state\n            rejected_protected: rejected,  // protected tools refused\n            unknown,\n            disabled_now: settings.disabledTools.length,\n            disabled_list: settings.disabledTools,\n          })\n        })\n      }\n\n      if (input.action === 'disable_group' || input.action === 'enable_group') {\n        if (!input.group) return JSON.stringify({ status: 'error', error: 'group parameter required' })\n        const names = groupToolNames(input.group)\n        if (!names.length) return JSON.stringify({ status: 'error', error: `group '${input.group}' not found` })\n\n        return serialize(async () => {\n          const settings = loadSettings()\n          const disabledSet = new Set(settings.disabledTools || [])\n          const before = new Set(disabledSet)\n\n          let rejected: string[] = []\n          let affected = names\n          if (input.action === 'disable_group') {\n            rejected = names.filter(n => PROTECTED_TOOLS.has(n))\n            affected = names.filter(n => !PROTECTED_TOOLS.has(n))\n          }\n\n          if (input.action === 'disable_group') affected.forEach(n => disabledSet.add(n))\n          else affected.forEach(n => disabledSet.delete(n))\n\n          const changed = affected.filter(n => (input.action === 'disable_group' ? !before.has(n) : before.has(n)))\n          const noop = affected.filter(n => !changed.includes(n))\n\n          settings.disabledTools = Array.from(disabledSet)\n          saveSettings(settings)\n\n          return JSON.stringify({\n            status: 'success',\n            action: input.action,\n            group: input.group,\n            changed,               // actually flipped\n            no_op: noop,           // already in desired state\n            rejected_protected: rejected,\n            disabled_now: settings.disabledTools.length,\n          })\n        })\n      }\n\n      if (input.action === 'custom_list') {\n        const tools = await loadCustomTools()\n        return JSON.stringify({\n          status: 'success', count: tools.length,\n          tools: tools.map(t => ({\n            name: t.name,\n            description: t.description,\n            created_at: t.createdAt,\n            params: Object.keys(t.params || {}),\n          })),\n        })\n      }\n\n      if (input.action === 'custom_delete') {\n        if (!input.name) return JSON.stringify({ status: 'error', error: 'name parameter required' })\n        const targets = input.name.split(',').map(s => s.trim()).filter(Boolean)\n\n        return serialize(async () => {\n          const all = (await idbGet<Array<{ name: string }>>(CUSTOM_TOOLS_KEY)) || []\n          const keep = all.filter(t => !targets.includes(t.name))\n          if (keep.length === all.length) {\n            return JSON.stringify({ status: 'error', error: `No custom tool matched: ${targets.join(', ')}` })\n          }\n          if (keep.length === 0) await idbDel(CUSTOM_TOOLS_KEY)\n          else await idbSet(CUSTOM_TOOLS_KEY, keep)\n          window.dispatchEvent(new CustomEvent('careless:custom-tools-changed'))\n          window.dispatchEvent(new CustomEvent('careless:tools-changed'))\n          return JSON.stringify({\n            status: 'success',\n            deleted: all.length - keep.length,\n            deleted_names: all.filter(t => targets.includes(t.name)).map(t => t.name),\n            remaining: keep.length,\n          })\n        })\n      }\n\n      if (input.action === 'reload') {\n        window.dispatchEvent(new CustomEvent('careless:tools-changed'))\n        window.dispatchEvent(new CustomEvent('careless:custom-tools-changed'))\n        return JSON.stringify({ status: 'success', note: 'Reload events fired. Agent picks up fresh tools on next turn.' })\n      }\n\n      return JSON.stringify({ status: 'error', error: 'unknown action' })\n    } catch (err: unknown) {\n      return JSON.stringify({ status: 'error', error: (err as Error).message })\n    }\n  },\n})\n\nexport const MANAGE_TOOLS_TOOLS = [manageToolsTool]\n"]}