browse-code 0.2.2__tar.gz → 0.2.4__tar.gz
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.
- {browse_code-0.2.2 → browse_code-0.2.4}/PKG-INFO +1 -1
- browse_code-0.2.4/browse_code/__init__.py +1 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/cli.py +20 -9
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/content.js +1 -1
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/server.py +42 -1
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code.egg-info/PKG-INFO +1 -1
- {browse_code-0.2.2 → browse_code-0.2.4}/setup.py +1 -1
- browse_code-0.2.2/browse_code/__init__.py +0 -1
- {browse_code-0.2.2 → browse_code-0.2.4}/README.md +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/icon128.png +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/icon16.png +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/icon48.png +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/manifest.json +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/popup.html +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/popup.js +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code/extension/spoof.js +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code.egg-info/SOURCES.txt +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code.egg-info/dependency_links.txt +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code.egg-info/entry_points.txt +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code.egg-info/requires.txt +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/browse_code.egg-info/top_level.txt +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/pyproject.toml +0 -0
- {browse_code-0.2.2 → browse_code-0.2.4}/setup.cfg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.4"
|
|
@@ -19,14 +19,23 @@ console = Console()
|
|
|
19
19
|
PORT = 5505
|
|
20
20
|
HOST = "127.0.0.1"
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
██████╗ ██████╗ ██████╗ ██╗ ██╗███████╗███████╗
|
|
24
|
-
██╔══██╗██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔════╝
|
|
25
|
-
██████╔╝██████╔╝██║ ██║██║ █╗ ██║███████╗█████╗
|
|
26
|
-
██╔══██╗██╔══██╗██║ ██║██║███╗██║╚════██║██╔══╝
|
|
27
|
-
██████╔╝██║
|
|
28
|
-
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚══════╝╚═╝
|
|
29
|
-
|
|
22
|
+
ASCII_BROWSE = [
|
|
23
|
+
"██████╗ ██████╗ ██████╗ ██╗ ██╗███████╗███████╗ ",
|
|
24
|
+
"██╔══██╗██╔══██╗██╔═══██╗██║ ██║██╔════╝██╔════╝ ",
|
|
25
|
+
"██████╔╝██████╔╝██║ ██║██║ █╗ ██║███████╗█████╗ ",
|
|
26
|
+
"██╔══██╗██╔══██╗██║ ██║██║███╗██║╚════██║██╔══╝ ",
|
|
27
|
+
"██████╔╝██║ ██║╚██████╔╝╚███╔███╔╝███████║███████╗██╗",
|
|
28
|
+
"╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚══════╝╚══════╝╚═╝ "
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
ASCII_CODE = [
|
|
32
|
+
"██████╗ ██████╗ ██████╗ ███████╗",
|
|
33
|
+
"██╔════╝██╔═══██╗██╔══██╗██╔════╝",
|
|
34
|
+
"██║ ██║ ██║██║ ██║█████╗ ",
|
|
35
|
+
"██║ ██║ ██║██║ ██║██╔══╝ ",
|
|
36
|
+
"╚██████╗╚██████╔╝██████╔╝███████╗",
|
|
37
|
+
"╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝"
|
|
38
|
+
]
|
|
30
39
|
|
|
31
40
|
|
|
32
41
|
def get_data_dir():
|
|
@@ -64,7 +73,9 @@ def copy_to_clipboard(text):
|
|
|
64
73
|
|
|
65
74
|
def print_banner():
|
|
66
75
|
"""Print the Browse Code ASCII art banner."""
|
|
67
|
-
console.print(
|
|
76
|
+
console.print()
|
|
77
|
+
for b, c in zip(ASCII_BROWSE, ASCII_CODE):
|
|
78
|
+
console.print(f"[bold green]{b}[/bold green][bold red]{c}[/bold red]")
|
|
68
79
|
|
|
69
80
|
|
|
70
81
|
def setup_extension():
|
|
@@ -40,7 +40,7 @@ spoofScript.onload = function () { this.remove(); };
|
|
|
40
40
|
|
|
41
41
|
// Heartbeat: ping the server every 5 seconds so it knows the extension is connected
|
|
42
42
|
function pingServer() {
|
|
43
|
-
fetch(`${LOCAL_SERVER}/extension/ping`).catch(() => {});
|
|
43
|
+
fetch(`${LOCAL_SERVER}/extension/ping?v=0.2.4`).catch(() => {});
|
|
44
44
|
}
|
|
45
45
|
pingServer();
|
|
46
46
|
setInterval(pingServer, 5000);
|
|
@@ -15,9 +15,47 @@ from fastapi import FastAPI, HTTPException, Request
|
|
|
15
15
|
from fastapi.middleware.cors import CORSMiddleware
|
|
16
16
|
from pydantic import BaseModel
|
|
17
17
|
|
|
18
|
+
async def check_extension_connection():
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
try:
|
|
21
|
+
from rich.console import Console
|
|
22
|
+
from rich.panel import Panel
|
|
23
|
+
from rich import box
|
|
24
|
+
console = Console()
|
|
25
|
+
|
|
26
|
+
while True:
|
|
27
|
+
await asyncio.sleep(30) # Check every 30 seconds
|
|
28
|
+
if not is_extension_connected():
|
|
29
|
+
ext_path = str(Path.home() / ".browse_code" / "extension")
|
|
30
|
+
console.print()
|
|
31
|
+
console.print(
|
|
32
|
+
Panel(
|
|
33
|
+
"[bold yellow]Extension Not Connected![/bold yellow]\n\n"
|
|
34
|
+
"The server is running, but the browser extension hasn't connected.\n"
|
|
35
|
+
"To fix this:\n"
|
|
36
|
+
" 1. Ensure the [bold]Browse Code[/bold] extension is installed and enabled.\n"
|
|
37
|
+
" 2. Make sure Chrome is open.\n\n"
|
|
38
|
+
"[dim]If you haven't installed it yet:[/dim]\n"
|
|
39
|
+
" • Open [cyan]chrome://extensions/[/cyan]\n"
|
|
40
|
+
" • Enable [bold]Developer Mode[/bold] (top right)\n"
|
|
41
|
+
" • Click [bold]Load unpacked[/bold] and select this folder:\n"
|
|
42
|
+
f" [green]{ext_path}[/green]",
|
|
43
|
+
title="[bold yellow]Warning[/bold yellow]",
|
|
44
|
+
title_align="left",
|
|
45
|
+
border_style="yellow",
|
|
46
|
+
box=box.ROUNDED,
|
|
47
|
+
padding=(1, 2),
|
|
48
|
+
expand=False
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
except asyncio.CancelledError:
|
|
52
|
+
pass
|
|
53
|
+
|
|
18
54
|
@asynccontextmanager
|
|
19
55
|
async def lifespan(app: FastAPI):
|
|
56
|
+
task = asyncio.create_task(check_extension_connection())
|
|
20
57
|
yield
|
|
58
|
+
task.cancel()
|
|
21
59
|
|
|
22
60
|
|
|
23
61
|
app = FastAPI(title="Agent Bridge Backend", lifespan=lifespan)
|
|
@@ -135,8 +173,11 @@ def is_extension_connected():
|
|
|
135
173
|
return (time.time() - _last_extension_ping) < _HEARTBEAT_TIMEOUT
|
|
136
174
|
|
|
137
175
|
@app.get("/extension/ping")
|
|
138
|
-
async def extension_ping():
|
|
176
|
+
async def extension_ping(v: str = None):
|
|
139
177
|
global _last_extension_ping
|
|
178
|
+
if v != "0.2.4":
|
|
179
|
+
return {"status": "ignored"}
|
|
180
|
+
|
|
140
181
|
was_connected = is_extension_connected()
|
|
141
182
|
_last_extension_ping = time.time()
|
|
142
183
|
if not was_connected:
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="browse_code",
|
|
5
|
-
version="0.2.
|
|
5
|
+
version="0.2.4",
|
|
6
6
|
description="Turn any AI chatbot into an autonomous coding agent",
|
|
7
7
|
long_description=open("README.md").read(),
|
|
8
8
|
long_description_content_type="text/markdown",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.2.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|