@hydra-acp/browser 0.1.12 → 0.1.14
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 +15 -15
- package/dist/config.js +1 -1
- package/dist/hydra/ws.js +1 -0
- package/dist/hydra/ws.js.map +1 -1
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/ui/index.html +193 -12
- package/dist/util/paths.js +11 -2
- package/dist/util/paths.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ with a separate per-host authkey instead.
|
|
|
19
19
|
hydra WSS <----------> | |
|
|
20
20
|
/acp +-------------------+
|
|
21
21
|
|
|
|
22
|
-
~/.hydra-acp
|
|
22
|
+
~/.hydra-acp/browser/
|
|
23
23
|
authkey
|
|
24
24
|
link
|
|
25
25
|
```
|
|
@@ -97,8 +97,8 @@ The extension exposes:
|
|
|
97
97
|
|
|
98
98
|
On startup, hydra spawns hydra-acp-browser with these env vars set:
|
|
99
99
|
`HYDRA_ACP_DAEMON_URL`, `HYDRA_ACP_TOKEN`, `HYDRA_ACP_WS_URL`. The
|
|
100
|
-
first launch generates `~/.hydra-acp
|
|
101
|
-
the open URL (with `?authkey=…`) to `~/.hydra-acp
|
|
100
|
+
first launch generates `~/.hydra-acp/browser/authkey` and writes
|
|
101
|
+
the open URL (with `?authkey=…`) to `~/.hydra-acp/browser/link`.
|
|
102
102
|
Stdout/stderr land in `~/.hydra-acp/extensions/hydra-acp-browser.log`.
|
|
103
103
|
Lifecycle is managed with
|
|
104
104
|
`hydra-acp extensions start|stop|restart hydra-acp-browser` —
|
|
@@ -107,7 +107,7 @@ The extension exposes:
|
|
|
107
107
|
shows up there on first launch).
|
|
108
108
|
|
|
109
109
|
3. **Run standalone (alternative).** Set `HYDRA_TOKEN` in
|
|
110
|
-
`~/.hydra-acp
|
|
110
|
+
`~/.hydra-acp/browser.conf` (or export `HYDRA_ACP_TOKEN`), then:
|
|
111
111
|
|
|
112
112
|
```sh
|
|
113
113
|
npm start
|
|
@@ -115,21 +115,21 @@ The extension exposes:
|
|
|
115
115
|
|
|
116
116
|
4. **Open the browser** to the URL printed on stderr. The first request
|
|
117
117
|
sets a cookie; subsequent requests are authenticated by the cookie
|
|
118
|
-
alone. The URL is also at `~/.hydra-acp
|
|
118
|
+
alone. The URL is also at `~/.hydra-acp/browser/link` for convenience.
|
|
119
119
|
|
|
120
120
|
## HTTPS
|
|
121
121
|
|
|
122
122
|
Optional on `127.0.0.1`, **required** for any non-loopback bind (the server
|
|
123
123
|
refuses otherwise — same rule as the hydra daemon). The simplest setup
|
|
124
|
-
is a self-signed cert in `~/.hydra-acp
|
|
124
|
+
is a self-signed cert in `~/.hydra-acp/browser/tls/`.
|
|
125
125
|
|
|
126
126
|
1. **Generate cert + key.** ECDSA P-256, 5-year validity, with a SAN
|
|
127
127
|
covering loopback. Add any extra hostnames you'll hit it from
|
|
128
128
|
(Tailscale name, LAN IP, etc.) to the SAN inline:
|
|
129
129
|
|
|
130
130
|
```sh
|
|
131
|
-
mkdir -p ~/.hydra-acp
|
|
132
|
-
cd ~/.hydra-acp
|
|
131
|
+
mkdir -p ~/.hydra-acp/browser/tls && chmod 700 ~/.hydra-acp/browser/tls
|
|
132
|
+
cd ~/.hydra-acp/browser/tls
|
|
133
133
|
|
|
134
134
|
SAN='subjectAltName=DNS:localhost,DNS:'"$(hostname)"',IP:127.0.0.1,IP:::1'
|
|
135
135
|
# ^ add ,DNS:my.tailnet.ts.net or ,IP:100.64.x.y if needed.
|
|
@@ -154,11 +154,11 @@ is a self-signed cert in `~/.hydra-acp-browser/tls/`.
|
|
|
154
154
|
Skipping `-addext "subjectAltName=…"` will make every browser reject
|
|
155
155
|
the cert with `NET::ERR_CERT_COMMON_NAME_INVALID`.
|
|
156
156
|
|
|
157
|
-
2. **Wire into config.** Append to `~/.hydra-acp
|
|
157
|
+
2. **Wire into config.** Append to `~/.hydra-acp/browser.conf`:
|
|
158
158
|
|
|
159
159
|
```sh
|
|
160
|
-
BROWSER_TLS_CERT=~/.hydra-acp
|
|
161
|
-
BROWSER_TLS_KEY=~/.hydra-acp
|
|
160
|
+
BROWSER_TLS_CERT=~/.hydra-acp/browser/tls/cert.pem
|
|
161
|
+
BROWSER_TLS_KEY=~/.hydra-acp/browser/tls/key.pem
|
|
162
162
|
```
|
|
163
163
|
|
|
164
164
|
To expose beyond loopback, also set:
|
|
@@ -178,7 +178,7 @@ is a self-signed cert in `~/.hydra-acp-browser/tls/`.
|
|
|
178
178
|
4. **Trust the cert.** Self-signed certs trip browser warnings.
|
|
179
179
|
- **Click-through:** open the URL, accept the warning. Per-site only.
|
|
180
180
|
- **Linux Chrome/Chromium:**
|
|
181
|
-
`certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n hydra-acp-browser -i ~/.hydra-acp
|
|
181
|
+
`certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n hydra-acp-browser -i ~/.hydra-acp/browser/tls/cert.pem`
|
|
182
182
|
- **macOS:** double-click `cert.pem`, add to System keychain, set
|
|
183
183
|
"Always Trust" in Get Info.
|
|
184
184
|
- **iOS:** AirDrop/email `cert.pem` to the device, install profile
|
|
@@ -197,7 +197,7 @@ HTTPS won't be sent over plain HTTP. Run
|
|
|
197
197
|
|
|
198
198
|
## Configuration keys
|
|
199
199
|
|
|
200
|
-
`~/.hydra-acp
|
|
200
|
+
`~/.hydra-acp/browser.conf` (KEY=VALUE). All keys are optional unless noted.
|
|
201
201
|
|
|
202
202
|
| Key | Default | Notes |
|
|
203
203
|
|------------------------------|----------------------------------------|-------|
|
|
@@ -205,8 +205,8 @@ HTTPS won't be sent over plain HTTP. Run
|
|
|
205
205
|
| `BROWSER_PORT` | `9099` | Listen port. |
|
|
206
206
|
| `BROWSER_TLS_CERT` | (none) | If set with `BROWSER_TLS_KEY`, listen on HTTPS. |
|
|
207
207
|
| `BROWSER_TLS_KEY` | (none) | Path to TLS key. |
|
|
208
|
-
| `BROWSER_AUTHKEY_FILE` | `~/.hydra-acp
|
|
209
|
-
| `BROWSER_LINK_FILE` | `~/.hydra-acp
|
|
208
|
+
| `BROWSER_AUTHKEY_FILE` | `~/.hydra-acp/browser/authkey` | Where the browser-side authkey lives. |
|
|
209
|
+
| `BROWSER_LINK_FILE` | `~/.hydra-acp/browser/link` | URL written for convenience. |
|
|
210
210
|
| `BROWSER_ALLOWED_HOSTS` | empty | Comma-sep extra Host values for DNS-rebind allowlist (e.g. Tailscale name). |
|
|
211
211
|
| `BROWSER_FILE_MAX_BYTES` | `262144` | Upper bound for `/api/files/read`. |
|
|
212
212
|
| `HYDRA_DAEMON_URL` | from env / `http://127.0.0.1:8765` | `HYDRA_ACP_DAEMON_URL` env wins. |
|
package/dist/config.js
CHANGED
|
@@ -72,7 +72,7 @@ export function loadConfig(path = paths.configFile()) {
|
|
|
72
72
|
`http://127.0.0.1:${DEFAULT_DAEMON_PORT}`;
|
|
73
73
|
const hydraToken = process.env.HYDRA_ACP_TOKEN ?? map.get("HYDRA_TOKEN") ?? "";
|
|
74
74
|
if (!hydraToken) {
|
|
75
|
-
throw new Error("Missing HYDRA_ACP_TOKEN env var (or HYDRA_TOKEN config key). When run as a hydra extension, hydra injects this automatically; otherwise set it in ~/.hydra-acp
|
|
75
|
+
throw new Error("Missing HYDRA_ACP_TOKEN env var (or HYDRA_TOKEN config key). When run as a hydra extension, hydra injects this automatically; otherwise set it in ~/.hydra-acp/browser.conf.");
|
|
76
76
|
}
|
|
77
77
|
const hydraWsUrl = process.env.HYDRA_ACP_WS_URL ??
|
|
78
78
|
map.get("HYDRA_WS_URL") ??
|
package/dist/hydra/ws.js
CHANGED
|
@@ -176,6 +176,7 @@ export async function runInitialize(conn, opts = {}) {
|
|
|
176
176
|
fs: { readTextFile: false, writeTextFile: false },
|
|
177
177
|
terminal: false,
|
|
178
178
|
},
|
|
179
|
+
clientInfo: { name: "hydra-acp-browser", version: pkg.version },
|
|
179
180
|
});
|
|
180
181
|
}
|
|
181
182
|
//# sourceMappingURL=ws.js.map
|
package/dist/hydra/ws.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/hydra/ws.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../src/hydra/ws.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { registerFileRoutes } from "./server/routes-files.js";
|
|
|
10
10
|
import { registerRootRoutes } from "./server/routes-root.js";
|
|
11
11
|
import { registerConfigRoutes } from "./server/routes-config.js";
|
|
12
12
|
import { attachWsBridge } from "./server/ws-bridge.js";
|
|
13
|
+
import { UpstreamConnection, runInitialize } from "./hydra/ws.js";
|
|
13
14
|
import { logger, setDebug } from "./util/log.js";
|
|
14
15
|
const log = logger("main");
|
|
15
16
|
function ensureLoopbackOrTls(host, hasTls) {
|
|
@@ -42,6 +43,10 @@ async function main(argv) {
|
|
|
42
43
|
registerConfigRoutes(app, ctx);
|
|
43
44
|
await app.listen({ host: config.browserHost, port: config.browserPort });
|
|
44
45
|
attachWsBridge(app.server, ctx);
|
|
46
|
+
// Register this process's version with the daemon using its own token so
|
|
47
|
+
// `hydra extension list` can show the version column. Fire-and-forget —
|
|
48
|
+
// a failure here is not fatal.
|
|
49
|
+
void registerVersion(config.hydraWsUrl, config.hydraToken);
|
|
45
50
|
const scheme = config.tls ? "https" : "http";
|
|
46
51
|
const url = `${scheme}://${displayHost(config.browserHost)}:${config.browserPort}/`;
|
|
47
52
|
writeLinkFile(config.linkFile, url);
|
|
@@ -62,6 +67,30 @@ async function main(argv) {
|
|
|
62
67
|
process.on("SIGINT", () => void shutdown("SIGINT"));
|
|
63
68
|
process.on("SIGTERM", () => void shutdown("SIGTERM"));
|
|
64
69
|
}
|
|
70
|
+
// Open a short-lived WS connection using the extension's own process token
|
|
71
|
+
// to call initialize and let the daemon record our version. This is separate
|
|
72
|
+
// from the per-session bridges that use user session tokens.
|
|
73
|
+
async function registerVersion(wsUrl, token) {
|
|
74
|
+
const conn = new UpstreamConnection({ daemonWsUrl: wsUrl, token });
|
|
75
|
+
await new Promise((resolve) => {
|
|
76
|
+
conn.once("open", () => resolve());
|
|
77
|
+
conn.once("error", () => resolve());
|
|
78
|
+
conn.once("close", () => resolve());
|
|
79
|
+
conn.start();
|
|
80
|
+
});
|
|
81
|
+
if (!conn.isConnected) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
await runInitialize(conn);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
void 0;
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
conn.stop();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
65
94
|
function displayHost(host) {
|
|
66
95
|
if (host === "0.0.0.0") {
|
|
67
96
|
return "127.0.0.1";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/index.html
CHANGED
|
@@ -10634,9 +10634,69 @@ pre code { background: transparent; padding: 0; }
|
|
|
10634
10634
|
c2.spinner = { toolCallIds: [], expanded: false };
|
|
10635
10635
|
insertAboveQueued({ kind: "spinner", spinner: c2.spinner });
|
|
10636
10636
|
}
|
|
10637
|
+
function isExitPlanModeTool(name) {
|
|
10638
|
+
if (!name) return false;
|
|
10639
|
+
return name.toLowerCase().replace(/[_\s-]/g, "") === "exitplanmode";
|
|
10640
|
+
}
|
|
10641
|
+
function readExitPlanMarkdown(update) {
|
|
10642
|
+
const rawInput = update.rawInput;
|
|
10643
|
+
if (!rawInput || typeof rawInput !== "object" || Array.isArray(rawInput)) {
|
|
10644
|
+
return null;
|
|
10645
|
+
}
|
|
10646
|
+
const plan = rawInput.plan;
|
|
10647
|
+
if (typeof plan !== "string" || plan.length === 0) return null;
|
|
10648
|
+
return plan;
|
|
10649
|
+
}
|
|
10650
|
+
function findExitPlanLogItem(toolCallId) {
|
|
10651
|
+
if (!state.current) return null;
|
|
10652
|
+
const log = state.current.log;
|
|
10653
|
+
for (let i = 0; i < log.length; i++) {
|
|
10654
|
+
const entry = log[i];
|
|
10655
|
+
if (entry.kind === "exit-plan-mode" && entry.toolCallId === toolCallId) {
|
|
10656
|
+
return { idx: i, item: entry };
|
|
10657
|
+
}
|
|
10658
|
+
}
|
|
10659
|
+
return null;
|
|
10660
|
+
}
|
|
10661
|
+
function applyExitPlanModeUpdate(update) {
|
|
10662
|
+
if (!state.current) return false;
|
|
10663
|
+
const toolCallId = String(update.toolCallId ?? "");
|
|
10664
|
+
if (!toolCallId) return false;
|
|
10665
|
+
const name = update.name ?? update.title;
|
|
10666
|
+
const existing = findExitPlanLogItem(toolCallId);
|
|
10667
|
+
if (!isExitPlanModeTool(name) && !existing) {
|
|
10668
|
+
return false;
|
|
10669
|
+
}
|
|
10670
|
+
const plan = readExitPlanMarkdown(update);
|
|
10671
|
+
const status = typeof update.status === "string" ? update.status : void 0;
|
|
10672
|
+
if (existing) {
|
|
10673
|
+
if (plan !== null) existing.item.plan = plan;
|
|
10674
|
+
if (status !== void 0) existing.item.status = status;
|
|
10675
|
+
return true;
|
|
10676
|
+
}
|
|
10677
|
+
if (plan === null) {
|
|
10678
|
+
return false;
|
|
10679
|
+
}
|
|
10680
|
+
closeOpenStream();
|
|
10681
|
+
const item = {
|
|
10682
|
+
kind: "exit-plan-mode",
|
|
10683
|
+
toolCallId,
|
|
10684
|
+
plan
|
|
10685
|
+
};
|
|
10686
|
+
if (status !== void 0) item.status = status;
|
|
10687
|
+
insertAboveQueued(item);
|
|
10688
|
+
return true;
|
|
10689
|
+
}
|
|
10637
10690
|
function onToolCall(update) {
|
|
10638
10691
|
if (!state.current) return;
|
|
10639
10692
|
closeOpenStream();
|
|
10693
|
+
if (applyExitPlanModeUpdate(update)) {
|
|
10694
|
+
maybeResolvePermissionByToolCall(
|
|
10695
|
+
String(update.toolCallId),
|
|
10696
|
+
typeof update.status === "string" ? update.status : void 0
|
|
10697
|
+
);
|
|
10698
|
+
return;
|
|
10699
|
+
}
|
|
10640
10700
|
const tc = {
|
|
10641
10701
|
toolCallId: String(update.toolCallId),
|
|
10642
10702
|
title: String(update.title ?? update.kind ?? "tool"),
|
|
@@ -10651,6 +10711,15 @@ pre code { background: transparent; padding: 0; }
|
|
|
10651
10711
|
}
|
|
10652
10712
|
function onToolCallUpdate(update) {
|
|
10653
10713
|
if (!state.current) return;
|
|
10714
|
+
if (applyExitPlanModeUpdate(update)) {
|
|
10715
|
+
if (typeof update.status === "string") {
|
|
10716
|
+
maybeResolvePermissionByToolCall(
|
|
10717
|
+
String(update.toolCallId),
|
|
10718
|
+
update.status
|
|
10719
|
+
);
|
|
10720
|
+
}
|
|
10721
|
+
return;
|
|
10722
|
+
}
|
|
10654
10723
|
const existing = state.current.toolCalls.get(String(update.toolCallId));
|
|
10655
10724
|
if (!existing) return;
|
|
10656
10725
|
if (typeof update.status === "string") {
|
|
@@ -10724,6 +10793,9 @@ pre code { background: transparent; padding: 0; }
|
|
|
10724
10793
|
messageId
|
|
10725
10794
|
};
|
|
10726
10795
|
state.current.queueByMessageId.set(messageId, entry);
|
|
10796
|
+
if (position === 0) {
|
|
10797
|
+
state.current.currentHeadMessageId = messageId;
|
|
10798
|
+
}
|
|
10727
10799
|
state.current.log.push({
|
|
10728
10800
|
kind: "stream",
|
|
10729
10801
|
role: "user",
|
|
@@ -11330,6 +11402,7 @@ pre code { background: transparent; padding: 0; }
|
|
|
11330
11402
|
if (frame.method === "bridge/ready") {
|
|
11331
11403
|
state.current.ready = true;
|
|
11332
11404
|
state.banner = null;
|
|
11405
|
+
state.current.reconnectAttempt = 0;
|
|
11333
11406
|
const params = frame.params ?? {};
|
|
11334
11407
|
if (typeof params.clientId === "string") {
|
|
11335
11408
|
state.current.ownClientId = params.clientId;
|
|
@@ -11413,6 +11486,8 @@ pre code { background: transparent; padding: 0; }
|
|
|
11413
11486
|
}
|
|
11414
11487
|
|
|
11415
11488
|
// src/ui/routing.ts
|
|
11489
|
+
var RECONNECT_DELAYS_MS = [1e3, 2e3, 4e3, 8e3, 16e3, 3e4];
|
|
11490
|
+
var RECONNECT_BANNER_ESCALATE_AT = 5;
|
|
11416
11491
|
function buildSessionHash(sessionId, load) {
|
|
11417
11492
|
const id = encodeURIComponent(sessionId);
|
|
11418
11493
|
return load ? `#/session/${id}?load=true` : `#/session/${id}`;
|
|
@@ -11497,16 +11572,21 @@ pre code { background: transparent; padding: 0; }
|
|
|
11497
11572
|
idleListeners: [],
|
|
11498
11573
|
readyListeners: [],
|
|
11499
11574
|
currentPlanEntry: null,
|
|
11500
|
-
daemonSupportsAmend: false
|
|
11575
|
+
daemonSupportsAmend: false,
|
|
11576
|
+
loadOnConnect: load,
|
|
11577
|
+
reconnectAttempt: 0
|
|
11501
11578
|
};
|
|
11502
11579
|
state.current = initial;
|
|
11503
11580
|
setState({ view: "chat" });
|
|
11581
|
+
connectChatSocket(initial);
|
|
11582
|
+
}
|
|
11583
|
+
function connectChatSocket(chat) {
|
|
11504
11584
|
const url = new URL("/ws", location.href);
|
|
11505
11585
|
url.protocol = location.protocol === "https:" ? "wss:" : "ws:";
|
|
11506
|
-
url.searchParams.set("session", sessionId);
|
|
11507
|
-
if (
|
|
11586
|
+
url.searchParams.set("session", chat.sessionId);
|
|
11587
|
+
if (chat.loadOnConnect) url.searchParams.set("load", "true");
|
|
11508
11588
|
const ws = new WebSocket(url.toString());
|
|
11509
|
-
|
|
11589
|
+
chat.ws = ws;
|
|
11510
11590
|
ws.addEventListener("open", () => {
|
|
11511
11591
|
});
|
|
11512
11592
|
ws.addEventListener("message", (ev) => {
|
|
@@ -11519,25 +11599,79 @@ pre code { background: transparent; padding: 0; }
|
|
|
11519
11599
|
handleFrame(parsed);
|
|
11520
11600
|
});
|
|
11521
11601
|
ws.addEventListener("close", () => {
|
|
11522
|
-
if (state.current
|
|
11523
|
-
|
|
11524
|
-
cancelAllQueued(state.current);
|
|
11525
|
-
setState({
|
|
11526
|
-
banner: { kind: "warn", text: "Disconnected from session." }
|
|
11527
|
-
});
|
|
11602
|
+
if (!state.current || state.current.ws !== ws) {
|
|
11603
|
+
return;
|
|
11528
11604
|
}
|
|
11605
|
+
scheduleReconnect(state.current);
|
|
11529
11606
|
});
|
|
11530
11607
|
ws.addEventListener("error", () => {
|
|
11531
|
-
setState({ banner: { kind: "bad", text: "Connection error." } });
|
|
11532
11608
|
});
|
|
11533
11609
|
}
|
|
11610
|
+
function scheduleReconnect(chat) {
|
|
11611
|
+
chat.ready = false;
|
|
11612
|
+
cancelAllQueued(chat);
|
|
11613
|
+
const attempt = chat.reconnectAttempt ?? 0;
|
|
11614
|
+
const delay = RECONNECT_DELAYS_MS[Math.min(attempt, RECONNECT_DELAYS_MS.length - 1)];
|
|
11615
|
+
const escalate = attempt >= RECONNECT_BANNER_ESCALATE_AT;
|
|
11616
|
+
setState({
|
|
11617
|
+
banner: escalate ? { kind: "bad", text: "Still disconnected \u2014 retrying\u2026" } : { kind: "warn", text: "Reconnecting\u2026" }
|
|
11618
|
+
});
|
|
11619
|
+
chat.reconnectTimer = setTimeout(() => {
|
|
11620
|
+
if (!state.current || state.current !== chat) {
|
|
11621
|
+
return;
|
|
11622
|
+
}
|
|
11623
|
+
chat.reconnectTimer = void 0;
|
|
11624
|
+
chat.reconnectAttempt = attempt + 1;
|
|
11625
|
+
resetChatStateForReconnect(chat);
|
|
11626
|
+
render();
|
|
11627
|
+
connectChatSocket(chat);
|
|
11628
|
+
}, delay);
|
|
11629
|
+
}
|
|
11630
|
+
function resetChatStateForReconnect(chat) {
|
|
11631
|
+
chat.ws = null;
|
|
11632
|
+
chat.ready = false;
|
|
11633
|
+
chat.log = [];
|
|
11634
|
+
chat.toolCalls = /* @__PURE__ */ new Map();
|
|
11635
|
+
chat.pendingPermissions = /* @__PURE__ */ new Map();
|
|
11636
|
+
chat.pendingRequestById = /* @__PURE__ */ new Map();
|
|
11637
|
+
chat.responseHandlers = /* @__PURE__ */ new Map();
|
|
11638
|
+
chat.spinner = null;
|
|
11639
|
+
chat.plan = null;
|
|
11640
|
+
chat.mode = null;
|
|
11641
|
+
chat.model = null;
|
|
11642
|
+
chat.modes = [];
|
|
11643
|
+
chat.models = [];
|
|
11644
|
+
chat.contextUsed = null;
|
|
11645
|
+
chat.contextSize = null;
|
|
11646
|
+
chat.cost = null;
|
|
11647
|
+
chat.busy = false;
|
|
11648
|
+
chat.recentOwnPrompts = [];
|
|
11649
|
+
chat.promptQueue = [];
|
|
11650
|
+
chat.queueByMessageId = /* @__PURE__ */ new Map();
|
|
11651
|
+
chat.ownPromptIds = /* @__PURE__ */ new Set();
|
|
11652
|
+
chat.inTurn = false;
|
|
11653
|
+
chat.idleListeners = [];
|
|
11654
|
+
chat.readyListeners = [];
|
|
11655
|
+
chat.currentPlanEntry = null;
|
|
11656
|
+
chat.daemonSupportsAmend = false;
|
|
11657
|
+
chat.ownClientId = void 0;
|
|
11658
|
+
chat.currentHeadMessageId = void 0;
|
|
11659
|
+
chat.nextId = void 0;
|
|
11660
|
+
}
|
|
11534
11661
|
function closeChat() {
|
|
11535
11662
|
setLocationHash("");
|
|
11536
11663
|
closeChatSocket();
|
|
11537
11664
|
setState({ view: "list", current: null });
|
|
11538
11665
|
}
|
|
11539
11666
|
function closeChatSocket() {
|
|
11540
|
-
if (state.current
|
|
11667
|
+
if (!state.current) {
|
|
11668
|
+
return;
|
|
11669
|
+
}
|
|
11670
|
+
if (state.current.reconnectTimer) {
|
|
11671
|
+
clearTimeout(state.current.reconnectTimer);
|
|
11672
|
+
state.current.reconnectTimer = void 0;
|
|
11673
|
+
}
|
|
11674
|
+
if (state.current.ws) {
|
|
11541
11675
|
try {
|
|
11542
11676
|
state.current.ws.close();
|
|
11543
11677
|
} catch {
|
|
@@ -12412,8 +12546,55 @@ Replace it? (Any live attach will be closed.)`
|
|
|
12412
12546
|
if (item.kind === "plan") {
|
|
12413
12547
|
return renderPlan(item.entries);
|
|
12414
12548
|
}
|
|
12549
|
+
if (item.kind === "exit-plan-mode") {
|
|
12550
|
+
return renderExitPlan(item);
|
|
12551
|
+
}
|
|
12415
12552
|
return document.createTextNode("");
|
|
12416
12553
|
}
|
|
12554
|
+
function renderExitPlan(item) {
|
|
12555
|
+
const node = el("div", { class: "msg agent plan-markdown" });
|
|
12556
|
+
node.appendChild(el("div", { class: "plan-header" }, "\u{1F4CB} Plan"));
|
|
12557
|
+
const body = el("div", { class: "body" });
|
|
12558
|
+
body.innerHTML = renderMarkdown(item.plan);
|
|
12559
|
+
node.appendChild(body);
|
|
12560
|
+
const footer = exitPlanFooter(item.status);
|
|
12561
|
+
if (footer !== null) node.appendChild(footer);
|
|
12562
|
+
return node;
|
|
12563
|
+
}
|
|
12564
|
+
function exitPlanFooter(status) {
|
|
12565
|
+
if (status === void 0) return null;
|
|
12566
|
+
switch (status) {
|
|
12567
|
+
case "completed":
|
|
12568
|
+
case "succeeded":
|
|
12569
|
+
case "ok":
|
|
12570
|
+
return el("div", { class: "plan-status plan-status-ok" }, "\u2713 Approved");
|
|
12571
|
+
case "failed":
|
|
12572
|
+
case "error":
|
|
12573
|
+
case "rejected":
|
|
12574
|
+
return el(
|
|
12575
|
+
"div",
|
|
12576
|
+
{ class: "plan-status plan-status-fail" },
|
|
12577
|
+
"\u2717 Rejected"
|
|
12578
|
+
);
|
|
12579
|
+
case "cancelled":
|
|
12580
|
+
return el(
|
|
12581
|
+
"div",
|
|
12582
|
+
{ class: "plan-status plan-status-cancelled" },
|
|
12583
|
+
"\u229D Cancelled"
|
|
12584
|
+
);
|
|
12585
|
+
case "pending":
|
|
12586
|
+
case "in_progress":
|
|
12587
|
+
case "running":
|
|
12588
|
+
case "updated":
|
|
12589
|
+
return el(
|
|
12590
|
+
"div",
|
|
12591
|
+
{ class: "plan-status plan-status-pending" },
|
|
12592
|
+
"awaiting approval\u2026"
|
|
12593
|
+
);
|
|
12594
|
+
default:
|
|
12595
|
+
return null;
|
|
12596
|
+
}
|
|
12597
|
+
}
|
|
12417
12598
|
function renderQueueChip(entry) {
|
|
12418
12599
|
if (entry.status === "queued" || entry.status === "pending") {
|
|
12419
12600
|
const ahead = Math.max(1, entry.aheadAtEnqueue);
|
package/dist/util/paths.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
1
2
|
import { homedir } from "node:os";
|
|
2
3
|
import { resolve } from "node:path";
|
|
3
|
-
const HOME_DIR =
|
|
4
|
+
const HOME_DIR = resolve(homedir(), ".hydra-acp", "browser");
|
|
5
|
+
const PRIMARY_CONF = resolve(homedir(), ".hydra-acp", "browser.conf");
|
|
6
|
+
const LEGACY_CONF = resolve(homedir(), ".hydra-acp-browser.conf");
|
|
4
7
|
export function expandHome(p) {
|
|
5
8
|
if (p.startsWith("~/")) {
|
|
6
9
|
return resolve(homedir(), p.slice(2));
|
|
@@ -15,7 +18,13 @@ export const paths = {
|
|
|
15
18
|
return `${HOME_DIR}/link`;
|
|
16
19
|
},
|
|
17
20
|
configFile() {
|
|
18
|
-
|
|
21
|
+
if (existsSync(PRIMARY_CONF)) {
|
|
22
|
+
return PRIMARY_CONF;
|
|
23
|
+
}
|
|
24
|
+
if (existsSync(LEGACY_CONF)) {
|
|
25
|
+
return LEGACY_CONF;
|
|
26
|
+
}
|
|
27
|
+
return PRIMARY_CONF;
|
|
19
28
|
},
|
|
20
29
|
};
|
|
21
30
|
//# sourceMappingURL=paths.js.map
|
package/dist/util/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,QAAQ,GAAG,GAAG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/util/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AACtE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;AAElE,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,QAAQ;QACN,OAAO,GAAG,QAAQ,OAAO,CAAC;IAC5B,CAAC;IACD,UAAU;QACR,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7B,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF,CAAC"}
|