surf-cli 2.7.2 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +208 -13
- package/dist/content/index.js +116 -0
- package/dist/content/index.js.map +1 -0
- package/dist/manifest.json +2 -11
- package/dist/options/options.js +3 -3
- package/dist/options/options.js.map +1 -1
- package/dist/service-worker/index.js +261 -61
- package/dist/service-worker/index.js.map +1 -1
- package/native/abort.cjs +65 -0
- package/native/ai-queue.cjs +64 -0
- package/native/aistudio-build.cjs +21 -13
- package/native/aistudio-client.cjs +40 -20
- package/native/browser-lock.cjs +169 -0
- package/native/chatgpt-client.cjs +63 -30
- package/native/cli.cjs +947 -460
- package/native/client-transport.cjs +168 -0
- package/native/config.cjs +2 -2
- package/native/do-executor.cjs +25 -51
- package/native/do-parser.cjs +12 -0
- package/native/doctor.cjs +633 -0
- package/native/endpoint.cjs +174 -0
- package/native/file-transfer.cjs +734 -0
- package/native/gemini-client.cjs +244 -88
- package/native/grok-client.cjs +321 -212
- package/native/host-helpers.cjs +88 -16
- package/native/host-sessions.cjs +283 -0
- package/native/host.cjs +811 -616
- package/native/listener.cjs +20 -0
- package/native/mcp-server.cjs +60 -62
- package/native/network-export.cjs +113 -0
- package/native/perplexity-client.cjs +46 -17
- package/native/remote-auth.cjs +279 -0
- package/native/remote-transport.cjs +337 -0
- package/native/request-pending.cjs +148 -0
- package/native/socket-path.cjs +46 -0
- package/package.json +11 -9
- package/scripts/install-native-host.cjs +184 -51
- package/scripts/uninstall-native-host.cjs +93 -15
- package/skills/README.md +11 -5
- package/skills/deep-x-research/SKILL.md +106 -0
- package/skills/surf/SKILL.md +77 -22
- package/dist/content/accessibility-tree.js +0 -11
- package/dist/content/accessibility-tree.js.map +0 -1
- package/dist/content/visual-indicator.js +0 -111
- package/dist/content/visual-indicator.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"visual-indicator.js","sources":["../../src/content/visual-indicator.ts"],"sourcesContent":["const PI_COLOR = \"59, 178, 191\";\nconst DEFAULT_HEARTBEAT_INTERVAL = 10000;\n\nlet glowBorder: HTMLDivElement | null = null;\nlet stopButton: HTMLDivElement | null = null;\nlet staticIndicator: HTMLDivElement | null = null;\nlet isActive = false;\nlet isStaticActive = false;\nlet wasActiveBeforeToolUse = false;\nlet wasStaticActiveBeforeToolUse = false;\nlet heartbeatIntervalId: number | null = null;\nlet heartbeatIntervalMs = DEFAULT_HEARTBEAT_INTERVAL;\n\nchrome.storage.local.get(\"heartbeatInterval\").then(({ heartbeatInterval }) => {\n if (heartbeatInterval && typeof heartbeatInterval === \"number\") {\n heartbeatIntervalMs = heartbeatInterval * 1000;\n }\n});\n\nchrome.storage.onChanged.addListener((changes, areaName) => {\n if (areaName === \"local\" && changes.heartbeatInterval) {\n const newValue = changes.heartbeatInterval.newValue;\n if (newValue && typeof newValue === \"number\") {\n heartbeatIntervalMs = newValue * 1000;\n if (isStaticActive && heartbeatIntervalId) {\n clearInterval(heartbeatIntervalId);\n startHeartbeat();\n }\n }\n }\n});\n\nfunction startHeartbeat() {\n heartbeatIntervalId = window.setInterval(async () => {\n try {\n const response = await chrome.runtime.sendMessage({ type: \"STATIC_INDICATOR_HEARTBEAT\" });\n if (!response?.success) hideStaticIndicator();\n } catch {\n hideStaticIndicator();\n }\n }, heartbeatIntervalMs);\n}\n\nfunction injectStyles() {\n if (document.getElementById(\"pi-agent-styles\")) return;\n\n const style = document.createElement(\"style\");\n style.id = \"pi-agent-styles\";\n style.textContent = `\n @keyframes pi-pulse {\n 0% {\n box-shadow: \n inset 0 0 10px rgba(${PI_COLOR}, 0.5),\n inset 0 0 20px rgba(${PI_COLOR}, 0.3),\n inset 0 0 30px rgba(${PI_COLOR}, 0.1);\n }\n 50% {\n box-shadow: \n inset 0 0 15px rgba(${PI_COLOR}, 0.7),\n inset 0 0 25px rgba(${PI_COLOR}, 0.5),\n inset 0 0 35px rgba(${PI_COLOR}, 0.2);\n }\n 100% {\n box-shadow: \n inset 0 0 10px rgba(${PI_COLOR}, 0.5),\n inset 0 0 20px rgba(${PI_COLOR}, 0.3),\n inset 0 0 30px rgba(${PI_COLOR}, 0.1);\n }\n }\n `;\n document.head.appendChild(style);\n}\n\nfunction createGlowBorder(): HTMLDivElement {\n const el = document.createElement(\"div\");\n el.id = \"pi-agent-glow\";\n el.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 2147483646;\n opacity: 0;\n transition: opacity 0.3s ease-in-out;\n animation: pi-pulse 2s ease-in-out infinite;\n box-shadow: \n inset 0 0 10px rgba(${PI_COLOR}, 0.5),\n inset 0 0 20px rgba(${PI_COLOR}, 0.3),\n inset 0 0 30px rgba(${PI_COLOR}, 0.1);\n `;\n return el;\n}\n\nfunction createStopButton(): HTMLDivElement {\n const container = document.createElement(\"div\");\n container.id = \"pi-agent-stop-container\";\n container.style.cssText = `\n position: fixed;\n bottom: 16px;\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n z-index: 2147483647;\n `;\n\n const button = document.createElement(\"button\");\n button.id = \"pi-agent-stop-button\";\n button.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 256 256\" fill=\"currentColor\" style=\"margin-right: 12px; vertical-align: middle;\">\n <path d=\"M128,20A108,108,0,1,0,236,128,108.12,108.12,0,0,0,128,20Zm0,192a84,84,0,1,1,84-84A84.09,84.09,0,0,1,128,212Zm40-112v56a12,12,0,0,1-12,12H100a12,12,0,0,1-12-12V100a12,12,0,0,1,12-12h56A12,12,0,0,1,168,100Z\"></path>\n </svg>\n <span style=\"vertical-align: middle;\">Stop Surf</span>\n `;\n button.style.cssText = `\n position: relative;\n transform: translateY(100px);\n padding: 12px 16px;\n background: #FAF9F5;\n color: #141413;\n border: 0.5px solid rgba(31, 30, 29, 0.4);\n border-radius: 12px;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n box-shadow: \n 0 40px 80px rgba(${PI_COLOR}, 0.24),\n 0 4px 14px rgba(${PI_COLOR}, 0.24);\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n opacity: 0;\n user-select: none;\n pointer-events: auto;\n white-space: nowrap;\n margin: 0 auto;\n `;\n\n button.addEventListener(\"mouseenter\", () => {\n if (isActive) button.style.background = \"#F5F4F0\";\n });\n\n button.addEventListener(\"mouseleave\", () => {\n if (isActive) button.style.background = \"#FAF9F5\";\n });\n\n button.addEventListener(\"click\", async () => {\n await chrome.runtime.sendMessage({ type: \"STOP_AGENT\", fromTabId: \"CURRENT_TAB\" });\n });\n\n container.appendChild(button);\n return container;\n}\n\nfunction createStaticIndicator(): HTMLDivElement {\n const container = document.createElement(\"div\");\n container.id = \"pi-agent-static-indicator\";\n container.innerHTML = `\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style=\"width: 16px; height: 16px; margin-right: 8px; flex-shrink: 0;\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"rgb(${PI_COLOR})\"/>\n <text x=\"8\" y=\"11\" font-size=\"9\" fill=\"white\" text-anchor=\"middle\" font-weight=\"bold\">π</text>\n </svg>\n <span style=\"color: #141413; font-size: 14px;\">Surf is active in this tab group</span>\n <div style=\"width: 0.5px; height: 32px; background: rgba(31, 30, 29, 0.15); margin: 0 8px;\"></div>\n <button id=\"pi-static-chat-button\" style=\"display: inline-flex; align-items: center; justify-content: center; padding: 6px; background: transparent; border: none; cursor: pointer; width: 32px; height: 32px; border-radius: 8px; transition: background 0.2s;\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"#141413\">\n <path d=\"M10 2.5C14.1421 2.5 17.5 5.85786 17.5 10C17.5 14.1421 14.1421 17.5 10 17.5H3C2.79779 17.5 2.61549 17.3782 2.53809 17.1914C2.4607 17.0046 2.50349 16.7895 2.64648 16.6465L4.35547 14.9365C3.20124 13.6175 2.5 11.8906 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5Z\"/>\n </svg>\n </button>\n <button id=\"pi-static-close-button\" style=\"display: inline-flex; align-items: center; justify-content: center; padding: 6px; background: transparent; border: none; cursor: pointer; width: 32px; height: 32px; margin-left: 4px; border-radius: 8px; transition: background 0.2s;\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M15.1464 4.14642C15.3417 3.95121 15.6582 3.95118 15.8534 4.14642C16.0486 4.34168 16.0486 4.65822 15.8534 4.85346L10.7069 9.99997L15.8534 15.1465C16.0486 15.3417 16.0486 15.6583 15.8534 15.8535C15.6826 16.0244 15.4186 16.0461 15.2245 15.918L15.1464 15.8535L9.99989 10.707L4.85338 15.8535C4.65813 16.0486 4.34155 16.0486 4.14634 15.8535C3.95115 15.6583 3.95129 15.3418 4.14634 15.1465L9.29286 9.99997L4.14634 4.85346C3.95129 4.65818 3.95115 4.34162 4.14634 4.14642C4.34154 3.95128 4.65812 3.95138 4.85338 4.14642L9.99989 9.29294L15.1464 4.14642Z\" fill=\"#141413\"/>\n </svg>\n </button>\n `;\n container.style.cssText = `\n position: fixed;\n bottom: 16px;\n left: 50%;\n transform: translateX(-50%);\n display: inline-flex;\n align-items: center;\n padding: 6px 6px 6px 16px;\n background: #FAF9F5;\n border: 0.5px solid rgba(31, 30, 29, 0.30);\n border-radius: 14px;\n box-shadow: 0 40px 80px 0 rgba(0, 0, 0, 0.15);\n z-index: 2147483647;\n pointer-events: none;\n white-space: nowrap;\n user-select: none;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n `;\n\n const chatButton = container.querySelector(\"#pi-static-chat-button\") as HTMLButtonElement;\n const closeButton = container.querySelector(\"#pi-static-close-button\") as HTMLButtonElement;\n\n if (chatButton) {\n chatButton.style.pointerEvents = \"auto\";\n chatButton.addEventListener(\"mouseenter\", () => chatButton.style.background = \"#F0EEE6\");\n chatButton.addEventListener(\"mouseleave\", () => chatButton.style.background = \"transparent\");\n chatButton.addEventListener(\"click\", async () => {\n await chrome.runtime.sendMessage({ type: \"OPEN_SIDEPANEL\" });\n });\n }\n\n if (closeButton) {\n closeButton.style.pointerEvents = \"auto\";\n closeButton.addEventListener(\"mouseenter\", () => closeButton.style.background = \"#F0EEE6\");\n closeButton.addEventListener(\"mouseleave\", () => closeButton.style.background = \"transparent\");\n closeButton.addEventListener(\"click\", async () => {\n await chrome.runtime.sendMessage({ type: \"DISMISS_STATIC_INDICATOR\" });\n hideStaticIndicator();\n });\n }\n\n return container;\n}\n\nfunction showIndicators() {\n if (isActive) return;\n isActive = true;\n\n injectStyles();\n\n if (!glowBorder) {\n glowBorder = createGlowBorder();\n document.body.appendChild(glowBorder);\n } else {\n glowBorder.style.display = \"\";\n }\n\n if (!stopButton) {\n stopButton = createStopButton();\n document.body.appendChild(stopButton);\n } else {\n stopButton.style.display = \"\";\n }\n\n requestAnimationFrame(() => {\n if (glowBorder) glowBorder.style.opacity = \"1\";\n if (stopButton) {\n const btn = stopButton.querySelector(\"#pi-agent-stop-button\") as HTMLElement;\n if (btn) {\n btn.style.transform = \"translateY(0)\";\n btn.style.opacity = \"1\";\n }\n }\n });\n}\n\nfunction hideIndicators() {\n if (!isActive) return;\n isActive = false;\n\n if (glowBorder) glowBorder.style.opacity = \"0\";\n if (stopButton) {\n const btn = stopButton.querySelector(\"#pi-agent-stop-button\") as HTMLElement;\n if (btn) {\n btn.style.transform = \"translateY(100px)\";\n btn.style.opacity = \"0\";\n }\n }\n\n setTimeout(() => {\n if (!isActive) {\n if (glowBorder?.parentNode) {\n glowBorder.parentNode.removeChild(glowBorder);\n glowBorder = null;\n }\n if (stopButton?.parentNode) {\n stopButton.parentNode.removeChild(stopButton);\n stopButton = null;\n }\n }\n }, 300);\n}\n\nfunction showStaticIndicator() {\n if (isStaticActive) return;\n isStaticActive = true;\n\n if (!staticIndicator) {\n staticIndicator = createStaticIndicator();\n document.body.appendChild(staticIndicator);\n } else {\n staticIndicator.style.display = \"\";\n }\n\n if (heartbeatIntervalId) clearInterval(heartbeatIntervalId);\n startHeartbeat();\n}\n\nfunction hideStaticIndicator() {\n if (!isStaticActive) return;\n isStaticActive = false;\n\n if (heartbeatIntervalId) {\n clearInterval(heartbeatIntervalId);\n heartbeatIntervalId = null;\n }\n\n if (staticIndicator?.parentNode) {\n staticIndicator.parentNode.removeChild(staticIndicator);\n staticIndicator = null;\n }\n}\n\nchrome.runtime.onMessage.addListener((message, sender, sendResponse) => {\n switch (message.type) {\n case \"SHOW_AGENT_INDICATORS\":\n showIndicators();\n sendResponse({ success: true });\n return false;\n case \"HIDE_AGENT_INDICATORS\":\n hideIndicators();\n sendResponse({ success: true });\n return false;\n case \"HIDE_FOR_TOOL_USE\":\n wasActiveBeforeToolUse = isActive;\n wasStaticActiveBeforeToolUse = isStaticActive;\n if (glowBorder) glowBorder.style.display = \"none\";\n if (stopButton) stopButton.style.display = \"none\";\n if (staticIndicator && isStaticActive) staticIndicator.style.display = \"none\";\n sendResponse({ success: true });\n return false;\n case \"SHOW_AFTER_TOOL_USE\":\n if (wasActiveBeforeToolUse) {\n if (glowBorder) glowBorder.style.display = \"\";\n if (stopButton) stopButton.style.display = \"\";\n }\n if (wasStaticActiveBeforeToolUse && staticIndicator) {\n staticIndicator.style.display = \"\";\n }\n wasActiveBeforeToolUse = false;\n wasStaticActiveBeforeToolUse = false;\n sendResponse({ success: true });\n return false;\n case \"SHOW_STATIC_INDICATOR\":\n showStaticIndicator();\n sendResponse({ success: true });\n return false;\n case \"HIDE_STATIC_INDICATOR\":\n hideStaticIndicator();\n sendResponse({ success: true });\n return false;\n default:\n return false;\n }\n});\n\nwindow.addEventListener(\"beforeunload\", () => {\n hideIndicators();\n hideStaticIndicator();\n});\n"],"names":["PI_COLOR","glowBorder","stopButton","staticIndicator","isActive","isStaticActive","wasActiveBeforeToolUse","wasStaticActiveBeforeToolUse","heartbeatIntervalId","heartbeatIntervalMs","heartbeatInterval","changes","areaName","newValue","startHeartbeat","hideStaticIndicator","injectStyles","style","createGlowBorder","el","createStopButton","container","button","createStaticIndicator","chatButton","closeButton","showIndicators","btn","hideIndicators","showStaticIndicator","message","sender","sendResponse"],"mappings":"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"}
|