@hanzo/browser-extension 1.7.2
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/.github/workflows/docs.yml +44 -0
- package/.github/workflows/release.yml +55 -0
- package/LICENSE +21 -0
- package/README.md +126 -0
- package/dist/browser-extension/README.md +43 -0
- package/dist/browser-extension/ai-worker.js +30 -0
- package/dist/browser-extension/background-firefox.js +617 -0
- package/dist/browser-extension/background.js +2737 -0
- package/dist/browser-extension/browser-control.js +683 -0
- package/dist/browser-extension/cdp-bridge-server.js +444 -0
- package/dist/browser-extension/chrome/ai-worker.js +571 -0
- package/dist/browser-extension/chrome/background.js +2737 -0
- package/dist/browser-extension/chrome/callback.html +17 -0
- package/dist/browser-extension/chrome/content-script.js +1270 -0
- package/dist/browser-extension/chrome/icon128.png +0 -0
- package/dist/browser-extension/chrome/icon16.png +0 -0
- package/dist/browser-extension/chrome/icon32.png +0 -0
- package/dist/browser-extension/chrome/icon48.png +0 -0
- package/dist/browser-extension/chrome/manifest.json +57 -0
- package/dist/browser-extension/chrome/popup.css +519 -0
- package/dist/browser-extension/chrome/popup.html +242 -0
- package/dist/browser-extension/chrome/popup.js +267 -0
- package/dist/browser-extension/chrome/sidebar.css +1176 -0
- package/dist/browser-extension/chrome/sidebar.html +280 -0
- package/dist/browser-extension/chrome/sidebar.js +778 -0
- package/dist/browser-extension/cli.js +233 -0
- package/dist/browser-extension/content-script.js +1270 -0
- package/dist/browser-extension/firefox/ai-worker.js +571 -0
- package/dist/browser-extension/firefox/background.js +617 -0
- package/dist/browser-extension/firefox/callback.html +17 -0
- package/dist/browser-extension/firefox/content-script.js +1270 -0
- package/dist/browser-extension/firefox/icon128.png +0 -0
- package/dist/browser-extension/firefox/icon16.png +0 -0
- package/dist/browser-extension/firefox/icon32.png +0 -0
- package/dist/browser-extension/firefox/icon48.png +0 -0
- package/dist/browser-extension/firefox/manifest.json +66 -0
- package/dist/browser-extension/firefox/popup.css +519 -0
- package/dist/browser-extension/firefox/popup.html +242 -0
- package/dist/browser-extension/firefox/popup.js +267 -0
- package/dist/browser-extension/firefox/sidebar.css +1176 -0
- package/dist/browser-extension/firefox/sidebar.html +280 -0
- package/dist/browser-extension/firefox/sidebar.js +778 -0
- package/dist/browser-extension/hanzo-browser-extension-firefox-1.1.0.zip +0 -0
- package/dist/browser-extension/icon128.png +0 -0
- package/dist/browser-extension/icon16.png +0 -0
- package/dist/browser-extension/icon32.png +0 -0
- package/dist/browser-extension/icon48.png +0 -0
- package/dist/browser-extension/manifest.json +57 -0
- package/dist/browser-extension/package.json +41 -0
- package/dist/browser-extension/popup.css +468 -0
- package/dist/browser-extension/popup.html +191 -0
- package/dist/browser-extension/popup.js +267 -0
- package/dist/browser-extension/safari/Info.plist +21 -0
- package/dist/browser-extension/safari/ai-worker.js +571 -0
- package/dist/browser-extension/safari/background.js +2737 -0
- package/dist/browser-extension/safari/callback.html +17 -0
- package/dist/browser-extension/safari/content-script.js +1270 -0
- package/dist/browser-extension/safari/icon128.png +0 -0
- package/dist/browser-extension/safari/icon16.png +0 -0
- package/dist/browser-extension/safari/icon32.png +0 -0
- package/dist/browser-extension/safari/icon48.png +0 -0
- package/dist/browser-extension/safari/popup.css +519 -0
- package/dist/browser-extension/safari/popup.html +242 -0
- package/dist/browser-extension/safari/popup.js +267 -0
- package/dist/browser-extension/safari/sidebar.css +1176 -0
- package/dist/browser-extension/safari/sidebar.html +280 -0
- package/dist/browser-extension/safari/sidebar.js +778 -0
- package/dist/browser-extension/sidebar.css +718 -0
- package/dist/browser-extension/sidebar.html +184 -0
- package/dist/browser-extension/sidebar.js +778 -0
- package/dist/browser-extension/webgpu-ai.js +495 -0
- package/dist/cdp-bridge-server.js +411 -0
- package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.pbxproj +1047 -0
- package/dist/safari/Hanzo AI/Hanzo AI.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@1x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-128@2x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@1x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-16@2x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@1x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-256@2x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@1x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-32@2x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@1x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/mac-icon-512@2x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/AppIcon.appiconset/universal-icon-1024@1x.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/Contents.json +6 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/Contents.json +21 -0
- package/dist/safari/Hanzo AI/Shared (App)/Assets.xcassets/LargeIcon.imageset/icon128.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Resources/Base.lproj/Main.html +20 -0
- package/dist/safari/Hanzo AI/Shared (App)/Resources/Icon.png +0 -0
- package/dist/safari/Hanzo AI/Shared (App)/Resources/Script.js +24 -0
- package/dist/safari/Hanzo AI/Shared (App)/Resources/Style.css +61 -0
- package/dist/safari/Hanzo AI/Shared (App)/ViewController.swift +81 -0
- package/dist/safari/Hanzo AI/Shared (Extension)/SafariWebExtensionHandler.swift +42 -0
- package/dist/safari/Hanzo AI/iOS (App)/AppDelegate.swift +24 -0
- package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/LaunchScreen.storyboard +36 -0
- package/dist/safari/Hanzo AI/iOS (App)/Base.lproj/Main.storyboard +38 -0
- package/dist/safari/Hanzo AI/iOS (App)/Info.plist +27 -0
- package/dist/safari/Hanzo AI/iOS (App)/SceneDelegate.swift +18 -0
- package/dist/safari/Hanzo AI/iOS (Extension)/Info.plist +13 -0
- package/dist/safari/Hanzo AI/macOS (App)/AppDelegate.swift +21 -0
- package/dist/safari/Hanzo AI/macOS (App)/Base.lproj/Main.storyboard +124 -0
- package/dist/safari/Hanzo AI/macOS (App)/Info.plist +8 -0
- package/dist/safari/Hanzo AI/macOS (Extension)/Info.plist +13 -0
- package/docs/_config.yml +13 -0
- package/docs/_layouts/default.html +435 -0
- package/docs/index.md +54 -0
- package/install-extension.sh +75 -0
- package/manifest.json +29 -0
- package/package.json +32 -0
- package/src/ai-worker.js +571 -0
- package/src/callback.html +17 -0
- package/src/chat-widget.tsx +93 -0
- package/src/icon128.png +0 -0
- package/src/icon16.png +0 -0
- package/src/icon32.png +0 -0
- package/src/icon48.png +0 -0
- package/src/manifest-firefox.json +66 -0
- package/src/manifest.json +57 -0
- package/src/package.json +41 -0
- package/src/popup.css +519 -0
- package/src/popup.html +242 -0
- package/src/popup.js +192 -0
- package/src/sidebar.css +1176 -0
- package/src/sidebar.html +280 -0
- package/src/sidebar.js +884 -0
- package/src/webgpu.d.ts +131 -0
- package/test/claude-integration.test.ts +251 -0
- package/test/server-frameworks-edge-cases.test.ts +145 -0
- package/test/server-frameworks.test.ts +395 -0
- package/test-cdp-connection.js +140 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<title>Hanzo AI — Signing in...</title>
|
|
6
|
+
<style>
|
|
7
|
+
body { background: #000; color: #fff; font-family: system-ui, sans-serif; display: flex; align-items: center; justify-content: center; height: 100vh; margin: 0; }
|
|
8
|
+
.msg { text-align: center; opacity: 0.7; }
|
|
9
|
+
</style>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<div class="msg">
|
|
13
|
+
<p>Signing in to Hanzo AI...</p>
|
|
14
|
+
<p><small>This tab will close automatically.</small></p>
|
|
15
|
+
</div>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createRoot } from 'react-dom/client';
|
|
3
|
+
import { flushSync } from 'react-dom';
|
|
4
|
+
import {
|
|
5
|
+
Button,
|
|
6
|
+
Card,
|
|
7
|
+
CardContent,
|
|
8
|
+
CardDescription,
|
|
9
|
+
CardHeader,
|
|
10
|
+
CardTitle,
|
|
11
|
+
Textarea,
|
|
12
|
+
} from '@hanzo/ui/primitives-common';
|
|
13
|
+
|
|
14
|
+
function LoginPrompt() {
|
|
15
|
+
return (
|
|
16
|
+
<Card className="chat-modern-login-card">
|
|
17
|
+
<CardHeader>
|
|
18
|
+
<CardTitle>Chat with Zen AI models</CardTitle>
|
|
19
|
+
<CardDescription>Models enabled in Hanzo Cloud are loaded automatically.</CardDescription>
|
|
20
|
+
</CardHeader>
|
|
21
|
+
<CardContent>
|
|
22
|
+
<Button id="auth-btn" className="chat-modern-auth-btn" type="button">
|
|
23
|
+
Sign in
|
|
24
|
+
</Button>
|
|
25
|
+
<p className="auth-note">
|
|
26
|
+
Browser tools work without sign-in.{' '}
|
|
27
|
+
<a href="https://docs.hanzo.ai" target="_blank" rel="noreferrer">
|
|
28
|
+
Learn more
|
|
29
|
+
</a>
|
|
30
|
+
</p>
|
|
31
|
+
</CardContent>
|
|
32
|
+
</Card>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function ChatComposer() {
|
|
37
|
+
return (
|
|
38
|
+
<div className="chat-modern-composer">
|
|
39
|
+
<div className="model-selector">
|
|
40
|
+
<select id="model-select">
|
|
41
|
+
<option value="claude-sonnet-4-20250514">Claude Sonnet 4</option>
|
|
42
|
+
<option value="claude-opus-4-20250514">Claude Opus 4</option>
|
|
43
|
+
<option value="gpt-4o">GPT-4o</option>
|
|
44
|
+
<option value="zen-coder-flash">Zen Coder Flash</option>
|
|
45
|
+
<option value="zen-max">Zen Max</option>
|
|
46
|
+
</select>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div className="chat-flags">
|
|
50
|
+
<label className="flag-toggle">
|
|
51
|
+
<input type="checkbox" id="rag-enabled" defaultChecked />
|
|
52
|
+
<span>RAG</span>
|
|
53
|
+
</label>
|
|
54
|
+
<label className="flag-toggle">
|
|
55
|
+
<input type="checkbox" id="tab-context-enabled" defaultChecked />
|
|
56
|
+
<span>Tab Context</span>
|
|
57
|
+
</label>
|
|
58
|
+
<span id="rag-status" className="rag-status">
|
|
59
|
+
Ready
|
|
60
|
+
</span>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div className="input-row">
|
|
64
|
+
<Textarea id="chat-input" className="chat-modern-input" placeholder="Ask anything..." rows={1} />
|
|
65
|
+
<Button id="send-btn" className="send-btn chat-modern-send" title="Send" type="button">
|
|
66
|
+
<svg viewBox="0 0 20 20" fill="none" stroke="currentColor" aria-hidden="true">
|
|
67
|
+
<path d="M4 10l12-6-6 12-2-6-4-2z" strokeWidth="1.5" fill="currentColor" />
|
|
68
|
+
</svg>
|
|
69
|
+
</Button>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function mountModernChatWidget() {
|
|
76
|
+
const loginTarget = document.getElementById('chat-login-prompt');
|
|
77
|
+
if (loginTarget) {
|
|
78
|
+
loginTarget.innerHTML = '';
|
|
79
|
+
const loginRoot = createRoot(loginTarget);
|
|
80
|
+
flushSync(() => {
|
|
81
|
+
loginRoot.render(<LoginPrompt />);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const composerTarget = document.getElementById('chat-composer');
|
|
86
|
+
if (composerTarget) {
|
|
87
|
+
composerTarget.innerHTML = '';
|
|
88
|
+
const composerRoot = createRoot(composerTarget);
|
|
89
|
+
flushSync(() => {
|
|
90
|
+
composerRoot.render(<ChatComposer />);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
package/src/icon128.png
ADDED
|
Binary file
|
package/src/icon16.png
ADDED
|
Binary file
|
package/src/icon32.png
ADDED
|
Binary file
|
package/src/icon48.png
ADDED
|
Binary file
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 3,
|
|
3
|
+
"name": "Hanzo AI",
|
|
4
|
+
"version": "1.7.2",
|
|
5
|
+
"description": "AI-powered dev assistant — click-to-code navigation, source maps, WebGPU AI, and MCP integration for Claude Code.",
|
|
6
|
+
"permissions": [
|
|
7
|
+
"activeTab",
|
|
8
|
+
"identity",
|
|
9
|
+
"storage",
|
|
10
|
+
"tabs",
|
|
11
|
+
"webNavigation",
|
|
12
|
+
"scripting"
|
|
13
|
+
],
|
|
14
|
+
"host_permissions": [
|
|
15
|
+
"http://localhost/*",
|
|
16
|
+
"https://localhost/*",
|
|
17
|
+
"<all_urls>"
|
|
18
|
+
],
|
|
19
|
+
"content_security_policy": {
|
|
20
|
+
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
|
|
21
|
+
},
|
|
22
|
+
"content_scripts": [
|
|
23
|
+
{
|
|
24
|
+
"matches": ["<all_urls>"],
|
|
25
|
+
"js": ["content-script.js"],
|
|
26
|
+
"run_at": "document_idle"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"background": {
|
|
30
|
+
"scripts": ["background.js"],
|
|
31
|
+
"type": "module"
|
|
32
|
+
},
|
|
33
|
+
"action": {
|
|
34
|
+
"default_popup": "popup.html",
|
|
35
|
+
"default_icon": {
|
|
36
|
+
"16": "icon16.png",
|
|
37
|
+
"48": "icon48.png",
|
|
38
|
+
"128": "icon128.png"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"sidebar_action": {
|
|
42
|
+
"default_title": "Hanzo AI",
|
|
43
|
+
"default_panel": "sidebar.html",
|
|
44
|
+
"default_icon": {
|
|
45
|
+
"16": "icon16.png",
|
|
46
|
+
"48": "icon48.png"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"web_accessible_resources": [
|
|
50
|
+
{
|
|
51
|
+
"resources": ["ai-worker.js", "models/*"],
|
|
52
|
+
"matches": ["<all_urls>"]
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"browser_specific_settings": {
|
|
56
|
+
"gecko": {
|
|
57
|
+
"id": "hanzo-ai@hanzo.ai",
|
|
58
|
+
"strict_min_version": "109.0"
|
|
59
|
+
},
|
|
60
|
+
"gecko_android": {}
|
|
61
|
+
},
|
|
62
|
+
"data_collection_permissions": {
|
|
63
|
+
"purposes": ["functionality"],
|
|
64
|
+
"data_categories": ["technical_data"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 3,
|
|
3
|
+
"name": "Hanzo AI",
|
|
4
|
+
"version": "1.7.2",
|
|
5
|
+
"description": "AI-powered dev assistant — click-to-code navigation, source maps, WebGPU AI, and MCP integration for Claude Code.",
|
|
6
|
+
"permissions": [
|
|
7
|
+
"activeTab",
|
|
8
|
+
"identity",
|
|
9
|
+
"sidePanel",
|
|
10
|
+
"storage",
|
|
11
|
+
"tabs",
|
|
12
|
+
"webNavigation",
|
|
13
|
+
"scripting",
|
|
14
|
+
"debugger"
|
|
15
|
+
],
|
|
16
|
+
"host_permissions": [
|
|
17
|
+
"http://localhost/*",
|
|
18
|
+
"https://localhost/*",
|
|
19
|
+
"<all_urls>"
|
|
20
|
+
],
|
|
21
|
+
"content_security_policy": {
|
|
22
|
+
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
|
|
23
|
+
},
|
|
24
|
+
"content_scripts": [
|
|
25
|
+
{
|
|
26
|
+
"matches": ["<all_urls>"],
|
|
27
|
+
"js": ["content-script.js"],
|
|
28
|
+
"run_at": "document_idle"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"background": {
|
|
32
|
+
"service_worker": "background.js",
|
|
33
|
+
"type": "module"
|
|
34
|
+
},
|
|
35
|
+
"action": {
|
|
36
|
+
"default_popup": "popup.html",
|
|
37
|
+
"default_icon": {
|
|
38
|
+
"16": "icon16.png",
|
|
39
|
+
"48": "icon48.png",
|
|
40
|
+
"128": "icon128.png"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"side_panel": {
|
|
44
|
+
"default_path": "sidebar.html"
|
|
45
|
+
},
|
|
46
|
+
"icons": {
|
|
47
|
+
"16": "icon16.png",
|
|
48
|
+
"48": "icon48.png",
|
|
49
|
+
"128": "icon128.png"
|
|
50
|
+
},
|
|
51
|
+
"web_accessible_resources": [
|
|
52
|
+
{
|
|
53
|
+
"resources": ["ai-worker.js", "models/*"],
|
|
54
|
+
"matches": ["<all_urls>"]
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
package/src/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hanzo/browser-extension",
|
|
3
|
+
"version": "1.7.2",
|
|
4
|
+
"description": "Browser extension for click-to-code navigation with MCP integration",
|
|
5
|
+
"main": "cli.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"hanzo-browser-server": "./cli.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "node cli.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"cli.js",
|
|
14
|
+
"browser-extension-server.js",
|
|
15
|
+
"content-script.js",
|
|
16
|
+
"manifest.json",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"keywords": [
|
|
20
|
+
"mcp",
|
|
21
|
+
"browser",
|
|
22
|
+
"devtools",
|
|
23
|
+
"source-maps",
|
|
24
|
+
"react",
|
|
25
|
+
"vue",
|
|
26
|
+
"developer-tools"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"ws": "^8.18.0",
|
|
30
|
+
"commander": "^11.0.0",
|
|
31
|
+
"chalk": "^5.3.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/ws": "^8.5.0",
|
|
35
|
+
"typescript": "^5.0.0",
|
|
36
|
+
"esbuild": "^0.25.0"
|
|
37
|
+
},
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
40
|
+
}
|
|
41
|
+
}
|