@zoulabo/line-hive 0.2.17 โ 0.2.21
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 +16 -3
- package/dist/i18n.js +2 -2
- package/dist/i18n.js.map +1 -1
- package/dist/index.js +45 -10
- package/dist/index.js.map +1 -1
- package/dist/line/client.js +14 -0
- package/dist/line/client.js.map +1 -1
- package/dist/line/fileRelay.js +320 -0
- package/dist/line/fileRelay.js.map +1 -0
- package/dist/line/messages.js.map +1 -1
- package/dist/line/webhook.js +185 -1
- package/dist/line/webhook.js.map +1 -1
- package/dist/server.js +11 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/ask.js +119 -0
- package/dist/tools/ask.js.map +1 -1
- package/dist/tools/gitReview-template.js +14 -4
- package/dist/tools/gitReview-template.js.map +1 -1
- package/dist/tools/gitReview.js +2 -1
- package/dist/tools/gitReview.js.map +1 -1
- package/dist/tools/navBrowser.js +625 -0
- package/dist/tools/navBrowser.js.map +1 -0
- package/package.json +4 -2
- package/templates/line-notification.instructions.md +1 -0
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
<a href="https://www.npmjs.com/package/@zoulabo/line-hive"><img src="https://img.shields.io/npm/v/@zoulabo/line-hive?color=cb3837&label=npm" alt="npm version"></a>
|
|
14
14
|
<img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen" alt="Node.js โฅ18">
|
|
15
15
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License"></a>
|
|
16
|
-
<img src="https://img.shields.io/badge/tests-
|
|
16
|
+
<img src="https://img.shields.io/badge/tests-475%20passing-brightgreen" alt="475 tests passing">
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
- ๐ **Multi-language** โ English and Japanese, auto-detected from LINE profile
|
|
37
37
|
- ๐ง **Zero config tunnel** โ built-in ngrok management (or bring your own tunnel)
|
|
38
38
|
- ๐ก๏ธ **Security hardened** โ workspace-scoped file access, path containment, sandboxed PDF parsing
|
|
39
|
-
-
|
|
39
|
+
- ๏ฟฝ **Interactive file browser** โ agents send browsable file/folder links; view code with syntax highlighting and rendered Markdown in LINE's in-app browser
|
|
40
|
+
- ๏ฟฝ๐ **Access control** โ first user is auto-registered as primary admin; restricted mode activates on follow or status check, blocking other users by default
|
|
40
41
|
|
|
41
42
|
## Contents
|
|
42
43
|
|
|
@@ -308,6 +309,17 @@ npx @zoulabo/line-hive init --editor cursor # switch editor type
|
|
|
308
309
|
| `line_read_file` | Read content from a received file (PDF text, scanned PDFโimage, image resize, text decode) | No |
|
|
309
310
|
| `line_render_markdown` | Convert Markdown โ HTML with auto-injected CDN (Mermaid, highlight.js, KaTeX, Chart.js). TTL-managed. | No |
|
|
310
311
|
|
|
312
|
+
### File Browser
|
|
313
|
+
|
|
314
|
+
Agents can send browsable file and folder links via the `file:` prefix in `line_ask` messages. Users can also send `.` to browse the project root. Files open in LINE's in-app browser with:
|
|
315
|
+
|
|
316
|
+
- **Syntax highlighting** for code files (any text file viewable)
|
|
317
|
+
- **Rendered Markdown** with Mermaid diagrams, KaTeX math, and syntax highlighting
|
|
318
|
+
- **Inline images** (PNG, JPG, GIF, WebP, SVG)
|
|
319
|
+
- **Directory listings** with auto-appended README
|
|
320
|
+
- **Breadcrumb navigation** between files and directories
|
|
321
|
+
- **Cross-workspace relay** โ browse files from other open editors
|
|
322
|
+
|
|
311
323
|
### Recommended Pattern
|
|
312
324
|
|
|
313
325
|
```
|
|
@@ -327,6 +339,7 @@ Send these to your LINE bot:
|
|
|
327
339
|
|---------|--------|
|
|
328
340
|
| `?` / `s` | Show all agents with status |
|
|
329
341
|
| `q` | Show message queue with per-agent counts |
|
|
342
|
+
| `.` | Browse project root in LINE's in-app browser |
|
|
330
343
|
| Any other text | Route to targeted/waiting agent |
|
|
331
344
|
| โ
Continue (button) | Send a reply token to keep the conversation going |
|
|
332
345
|
| ๐ Status (button) | Same as `?` |
|
|
@@ -398,7 +411,7 @@ For standalone `npm start`:
|
|
|
398
411
|
|
|
399
412
|
Designed for **AI-agent-driven development**. The repo includes skill files (`.github/skills/`) that teach agents the codebase. Point your agent at the repo and let it work.
|
|
400
413
|
|
|
401
|
-
- `npm test` must pass (~
|
|
414
|
+
- `npm test` must pass (~475 tests, <1s)
|
|
402
415
|
- `npx tsc --noEmit` must be clean
|
|
403
416
|
- Let the agents read skills first, then write the code
|
|
404
417
|
|
package/dist/i18n.js
CHANGED
|
@@ -57,7 +57,7 @@ const en = {
|
|
|
57
57
|
daysAgo: (d) => `${d}d ago`,
|
|
58
58
|
// Misc
|
|
59
59
|
tapToConnect: () => "",
|
|
60
|
-
onboarding: () => `๐ฑ LINE Hive\n\nโโ ๐ฌ Triggers โโ\n? โ check status\nq โ message queue\n\nโโ ๐ Quick Replies โโ\nQuick replies appear only when the agent includes \`quickReplies\`.\n๐ฌ Drain (N) is auto-added when queued messages exist.\n๐ AgentName โ switch agent\n\nโโ ๐ก Tips โโ\nTap โ
regularly to keep reply tokens stocked.\n๐ Language auto-detected from your LINE profile. Ask the agent to change it.`,
|
|
60
|
+
onboarding: () => `๐ฑ LINE Hive\n\nโโ ๐ฌ Triggers โโ\n? โ check status\nq โ message queue\n. โ browse project\n\nโโ ๐ Quick Replies โโ\nQuick replies appear only when the agent includes \`quickReplies\`.\n๐ฌ Drain (N) is auto-added when queued messages exist.\n๐ AgentName โ switch agent\n\nโโ ๐ก Tips โโ\nTap โ
regularly to keep reply tokens stocked.\n๐ Language auto-detected from your LINE profile. Ask the agent to change it.\n๐ Agents can send browsable file/folder links.`,
|
|
61
61
|
waitingForReply: (duration) => `โ Waiting for your reply (${duration})`,
|
|
62
62
|
};
|
|
63
63
|
const ja = {
|
|
@@ -99,7 +99,7 @@ const ja = {
|
|
|
99
99
|
hoursAgo: (h) => `${h}ๆ้ๅ`,
|
|
100
100
|
daysAgo: (d) => `${d}ๆฅๅ`,
|
|
101
101
|
tapToConnect: () => "",
|
|
102
|
-
onboarding: () => `๐ฑ LINE Hive\n\nโโ ๐ฌ ใใชใฌใผ โโ\n? โ ในใใผใฟใน็ขบ่ช\nq โ ใกใใปใผใธใญใฅใผ\n\nโโ ๐ ใฏใคใใฏใชใใฉใค โโ\nใฏใคใใฏใชใใฉใคใฏใจใผใธใงใณใใ \`quickReplies\` ใไปใใใจใใ ใ่กจ็คบใใใพใใ\nใญใฅใผใใใๅ ดๅใฏ ๐ฌ Drain (N) ใ่ชๅ่ฟฝๅ ใใใพใใ\n๐ AgentName โ ใจใผใธใงใณใๅๆฟ\n\nโโ ๐ก ใใณใ โโ\nโ
ใๅฎๆ็ใซใฟใใใใฆใใผใฏใณใ่ฃๅ
ใใพใใใใ\n๐ ่จ่ชใฏLINE
|
|
102
|
+
onboarding: () => `๐ฑ LINE Hive\n\nโโ ๐ฌ ใใชใฌใผ โโ\n? โ ในใใผใฟใน็ขบ่ช\nq โ ใกใใปใผใธใญใฅใผ\n. โ ใใญใธใงใฏใ้ฒ่ฆง\n\nโโ ๐ ใฏใคใใฏใชใใฉใค โโ\nใฏใคใใฏใชใใฉใคใฏใจใผใธใงใณใใ \`quickReplies\` ใไปใใใจใใ ใ่กจ็คบใใใพใใ\nใญใฅใผใใใๅ ดๅใฏ ๐ฌ Drain (N) ใ่ชๅ่ฟฝๅ ใใใพใใ\n๐ AgentName โ ใจใผใธใงใณใๅๆฟ\n\nโโ ๐ก ใใณใ โโ\nโ
ใๅฎๆ็ใซใฟใใใใฆใใผใฏใณใ่ฃๅ
ใใพใใใใ\n๐ ่จ่ชใฏLINEใใญใใฃใผใซใใ่ชๅๆคๅบใใจใผใธใงใณใใซๅคๆดใไพ้ ผใงใใพใใ\n๐ ใจใผใธใงใณใใฏใใกใคใซ/ใใฉใซใใฎใใฉใฆใบใชใณใฏใ้ใใพใใ`,
|
|
103
103
|
waitingForReply: (duration) => `โ ่ฟไฟกใๅพ
ใฃใฆใใพใ (${duration})`,
|
|
104
104
|
};
|
|
105
105
|
const catalogs = { en, ja };
|
package/dist/i18n.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -11,9 +11,11 @@ import { StatusStore } from "./store/statusStore.js";
|
|
|
11
11
|
import { createLineClient } from "./line/client.js";
|
|
12
12
|
import { createServer } from "./server.js";
|
|
13
13
|
import { startWebhookServer } from "./line/webhook.js";
|
|
14
|
+
import { createRelayClient } from "./line/fileRelay.js";
|
|
14
15
|
import { startTunnel, stopTunnel } from "./tunnel.js";
|
|
15
16
|
import { installProjectInstructions, installClaudeCodeInstructions, ensureGitignoreEntries } from "./cli/config-writer.js";
|
|
16
17
|
import { DEFAULT_FILE_TTL_MS, CONFIG_WEBHOOK_HANDOVER } from "./constants.js";
|
|
18
|
+
import { cleanupNavSessions } from "./tools/navBrowser.js";
|
|
17
19
|
import { getServeDir } from "./util/toolHelpers.js";
|
|
18
20
|
const require = createRequire(import.meta.url);
|
|
19
21
|
const { version } = require("../package.json");
|
|
@@ -71,23 +73,29 @@ async function main() {
|
|
|
71
73
|
}
|
|
72
74
|
logger.info({ agentId: config.agentId, agentName: config.agentName }, "Agent registered");
|
|
73
75
|
// Start webhook server โ only the first agent claims the port
|
|
74
|
-
let
|
|
76
|
+
let webhookResult = null;
|
|
75
77
|
let tunnelHandle = null;
|
|
76
78
|
let ownsWebhook = false;
|
|
79
|
+
let relayClient = null;
|
|
77
80
|
/** Attempt to claim the webhook port and start tunnel */
|
|
78
81
|
function tryClaimWebhook() {
|
|
79
82
|
if (ownsWebhook)
|
|
80
83
|
return; // Already owns it
|
|
81
84
|
try {
|
|
82
|
-
|
|
85
|
+
webhookResult = startWebhookServer({
|
|
83
86
|
config,
|
|
84
87
|
messageStore,
|
|
85
88
|
statusStore,
|
|
86
89
|
lineClient,
|
|
87
90
|
logger
|
|
88
91
|
});
|
|
89
|
-
|
|
92
|
+
webhookResult.server.on("listening", () => {
|
|
90
93
|
ownsWebhook = true;
|
|
94
|
+
// Stop relay client if we just became the owner
|
|
95
|
+
if (relayClient) {
|
|
96
|
+
relayClient.close();
|
|
97
|
+
relayClient = null;
|
|
98
|
+
}
|
|
91
99
|
logger.info({ port: config.webhookPort }, "Port migration: claimed webhook server");
|
|
92
100
|
if (config.ngrokDomain) {
|
|
93
101
|
tunnelHandle = startTunnel({
|
|
@@ -102,14 +110,33 @@ async function main() {
|
|
|
102
110
|
});
|
|
103
111
|
// If the server fails to bind (EADDRINUSE), the error handler in
|
|
104
112
|
// startWebhookServer logs it but doesn't throw. We need to detect this.
|
|
105
|
-
|
|
106
|
-
|
|
113
|
+
webhookResult.server.on("error", () => {
|
|
114
|
+
webhookResult = null;
|
|
115
|
+
startRelayClientIfNeeded();
|
|
107
116
|
});
|
|
108
117
|
}
|
|
109
118
|
catch (err) {
|
|
110
119
|
logger.debug({ error: err instanceof Error ? err.message : err }, "Port still in use โ will retry on next heartbeat");
|
|
120
|
+
startRelayClientIfNeeded();
|
|
111
121
|
}
|
|
112
122
|
}
|
|
123
|
+
/** Start a relay client to connect to the webhook owner for cross-workspace nav */
|
|
124
|
+
function startRelayClientIfNeeded() {
|
|
125
|
+
if (relayClient || ownsWebhook)
|
|
126
|
+
return;
|
|
127
|
+
const workspacePath = process.env.WORKSPACE_PATH || process.cwd();
|
|
128
|
+
const baseUrl = config.ngrokDomain
|
|
129
|
+
? `https://${config.ngrokDomain}`
|
|
130
|
+
: `http://127.0.0.1:${config.webhookPort}`;
|
|
131
|
+
relayClient = createRelayClient({
|
|
132
|
+
serverUrl: `ws://127.0.0.1:${config.webhookPort}/ws/relay`,
|
|
133
|
+
agentId: config.agentId,
|
|
134
|
+
workspacePath,
|
|
135
|
+
baseUrl,
|
|
136
|
+
secret: config.lineChannelSecret,
|
|
137
|
+
logger,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
113
140
|
if (config.devServer) {
|
|
114
141
|
// Dev server mode: signal live server to release port, then claim it
|
|
115
142
|
logger.info({ port: config.webhookPort }, "Dev server mode โ requesting graceful handover");
|
|
@@ -190,11 +217,13 @@ async function main() {
|
|
|
190
217
|
}
|
|
191
218
|
stopTunnel(tunnelHandle, logger);
|
|
192
219
|
tunnelHandle = null;
|
|
193
|
-
if (
|
|
194
|
-
|
|
195
|
-
|
|
220
|
+
if (webhookResult) {
|
|
221
|
+
webhookResult.relayServer.close();
|
|
222
|
+
webhookResult.server.close();
|
|
223
|
+
webhookResult = null;
|
|
196
224
|
}
|
|
197
225
|
ownsWebhook = false;
|
|
226
|
+
startRelayClientIfNeeded();
|
|
198
227
|
}
|
|
199
228
|
}
|
|
200
229
|
// Port migration: if we don't own the webhook, check if port is free
|
|
@@ -223,6 +252,8 @@ async function main() {
|
|
|
223
252
|
const incomingMediaPaths = messageStore.cleanup();
|
|
224
253
|
messageStore.expireSessions(Date.now());
|
|
225
254
|
messageStore.cleanupDeadAgentSessions(config.heartbeatTimeoutMs);
|
|
255
|
+
// Clean up expired nav sessions
|
|
256
|
+
cleanupNavSessions();
|
|
226
257
|
// Clean up incoming media files from disk (returned by cleanup())
|
|
227
258
|
let incomingDeleted = 0;
|
|
228
259
|
for (const diskPath of incomingMediaPaths) {
|
|
@@ -265,8 +296,12 @@ async function main() {
|
|
|
265
296
|
clearInterval(cleanupTimer);
|
|
266
297
|
statusStore.unregister();
|
|
267
298
|
stopTunnel(tunnelHandle, logger);
|
|
268
|
-
if (
|
|
269
|
-
|
|
299
|
+
if (relayClient) {
|
|
300
|
+
relayClient.close();
|
|
301
|
+
}
|
|
302
|
+
if (webhookResult) {
|
|
303
|
+
webhookResult.relayServer.close();
|
|
304
|
+
webhookResult.server.close();
|
|
270
305
|
}
|
|
271
306
|
db.close();
|
|
272
307
|
process.exit(0);
|
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/line/client.js
CHANGED
|
@@ -68,6 +68,20 @@ export function createLineClient(config) {
|
|
|
68
68
|
return null;
|
|
69
69
|
}
|
|
70
70
|
},
|
|
71
|
+
async getBotBasicId() {
|
|
72
|
+
try {
|
|
73
|
+
const response = await fetch("https://api.line.me/v2/bot/info", {
|
|
74
|
+
headers: { Authorization: `Bearer ${config.lineChannelAccessToken}` },
|
|
75
|
+
});
|
|
76
|
+
if (!response.ok)
|
|
77
|
+
return null;
|
|
78
|
+
const data = await response.json();
|
|
79
|
+
return data.basicId ?? null;
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
71
85
|
};
|
|
72
86
|
}
|
|
73
87
|
//# sourceMappingURL=client.js.map
|
package/dist/line/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/line/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/line/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket File Relay โ cross-workspace file browsing.
|
|
3
|
+
*
|
|
4
|
+
* When multiple agents share one webhook server (different workspaces),
|
|
5
|
+
* the webhook owner handles nav requests. For files belonging to OTHER
|
|
6
|
+
* workspaces, the request is relayed via WebSocket to the owning agent.
|
|
7
|
+
*
|
|
8
|
+
* Two roles:
|
|
9
|
+
* - **Relay server**: runs on the webhook owner, accepts WS connections from observers
|
|
10
|
+
* - **Relay client**: runs on observer agents, connects to the webhook owner
|
|
11
|
+
*/
|
|
12
|
+
import { WebSocket, WebSocketServer } from "ws";
|
|
13
|
+
import { renderNavView, renderNavList } from "../tools/navBrowser.js";
|
|
14
|
+
const REQUEST_TIMEOUT_MS = 10000;
|
|
15
|
+
const HEARTBEAT_INTERVAL_MS = 30000;
|
|
16
|
+
/**
|
|
17
|
+
* Attach a WebSocket relay server to an existing HTTP server.
|
|
18
|
+
* Accepts connections on `/ws/relay` path.
|
|
19
|
+
*/
|
|
20
|
+
export function createRelayServer(httpServer, logger) {
|
|
21
|
+
const observers = new Map();
|
|
22
|
+
const pendingRequests = new Map();
|
|
23
|
+
const wss = new WebSocketServer({ noServer: true });
|
|
24
|
+
// Handle HTTP upgrade requests โ only accept /ws/relay path
|
|
25
|
+
httpServer.on("upgrade", (req, socket, head) => {
|
|
26
|
+
const url = new URL(req.url || "/", "http://localhost");
|
|
27
|
+
if (url.pathname !== "/ws/relay") {
|
|
28
|
+
socket.destroy();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
wss.handleUpgrade(req, socket, head, (ws) => {
|
|
32
|
+
wss.emit("connection", ws, req);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
// Heartbeat to detect dead connections
|
|
36
|
+
const heartbeatTimer = setInterval(() => {
|
|
37
|
+
for (const [agentId, obs] of observers) {
|
|
38
|
+
if (obs.ws.readyState !== WebSocket.OPEN) {
|
|
39
|
+
observers.delete(agentId);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
obs.ws.ping();
|
|
43
|
+
}
|
|
44
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
45
|
+
wss.on("connection", (ws) => {
|
|
46
|
+
let announced = false;
|
|
47
|
+
let obsAgentId = null;
|
|
48
|
+
// Close connection if no announce within 5s
|
|
49
|
+
const announceTimer = setTimeout(() => {
|
|
50
|
+
if (!announced) {
|
|
51
|
+
ws.close(4001, "No announce message received");
|
|
52
|
+
}
|
|
53
|
+
}, 5000);
|
|
54
|
+
ws.on("message", (data) => {
|
|
55
|
+
let msg;
|
|
56
|
+
try {
|
|
57
|
+
msg = JSON.parse(data.toString());
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return; // Ignore malformed
|
|
61
|
+
}
|
|
62
|
+
if (msg.type === "announce") {
|
|
63
|
+
clearTimeout(announceTimer);
|
|
64
|
+
announced = true;
|
|
65
|
+
obsAgentId = msg.agentId;
|
|
66
|
+
// Close previous connection for same agentId (reconnect)
|
|
67
|
+
const existing = observers.get(msg.agentId);
|
|
68
|
+
if (existing && existing.ws !== ws) {
|
|
69
|
+
existing.ws.close(4002, "Replaced by new connection");
|
|
70
|
+
}
|
|
71
|
+
observers.set(msg.agentId, {
|
|
72
|
+
ws,
|
|
73
|
+
agentId: msg.agentId,
|
|
74
|
+
workspacePath: msg.workspacePath,
|
|
75
|
+
});
|
|
76
|
+
logger?.info({ agentId: msg.agentId }, "Observer connected");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (msg.type === "fileResponse" || msg.type === "errorResponse") {
|
|
80
|
+
const pending = pendingRequests.get(msg.requestId);
|
|
81
|
+
if (pending) {
|
|
82
|
+
clearTimeout(pending.timer);
|
|
83
|
+
pendingRequests.delete(msg.requestId);
|
|
84
|
+
if (msg.type === "fileResponse") {
|
|
85
|
+
pending.resolve({ html: msg.html, status: msg.status });
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
pending.resolve({ html: msg.error, status: msg.status });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
ws.on("close", () => {
|
|
95
|
+
clearTimeout(announceTimer);
|
|
96
|
+
if (obsAgentId) {
|
|
97
|
+
// Only remove if this is still the active connection for this agent
|
|
98
|
+
const current = observers.get(obsAgentId);
|
|
99
|
+
if (current?.ws === ws) {
|
|
100
|
+
observers.delete(obsAgentId);
|
|
101
|
+
logger?.info({ agentId: obsAgentId }, "Observer disconnected");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
ws.on("error", (err) => {
|
|
106
|
+
logger?.warn({ error: err.message }, "Observer WS error");
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
function requestFile(agentId, navPath, mode) {
|
|
110
|
+
return new Promise((resolve) => {
|
|
111
|
+
const obs = observers.get(agentId);
|
|
112
|
+
if (!obs || obs.ws.readyState !== WebSocket.OPEN) {
|
|
113
|
+
resolve({ html: reconnectingPage(agentId), status: 503 });
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const requestId = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
117
|
+
const timer = setTimeout(() => {
|
|
118
|
+
pendingRequests.delete(requestId);
|
|
119
|
+
resolve({ html: "Gateway Timeout โ observer did not respond", status: 504 });
|
|
120
|
+
}, REQUEST_TIMEOUT_MS);
|
|
121
|
+
pendingRequests.set(requestId, { resolve, timer });
|
|
122
|
+
const request = {
|
|
123
|
+
type: "fileRequest",
|
|
124
|
+
requestId,
|
|
125
|
+
navPath,
|
|
126
|
+
mode,
|
|
127
|
+
};
|
|
128
|
+
try {
|
|
129
|
+
obs.ws.send(JSON.stringify(request));
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
clearTimeout(timer);
|
|
133
|
+
pendingRequests.delete(requestId);
|
|
134
|
+
resolve({ html: "Failed to send request to observer", status: 502 });
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
observers,
|
|
140
|
+
wss,
|
|
141
|
+
requestFile,
|
|
142
|
+
hasObserver: (agentId) => {
|
|
143
|
+
const obs = observers.get(agentId);
|
|
144
|
+
return !!obs && obs.ws.readyState === WebSocket.OPEN;
|
|
145
|
+
},
|
|
146
|
+
close: () => {
|
|
147
|
+
clearInterval(heartbeatTimer);
|
|
148
|
+
for (const [, pending] of pendingRequests) {
|
|
149
|
+
clearTimeout(pending.timer);
|
|
150
|
+
}
|
|
151
|
+
pendingRequests.clear();
|
|
152
|
+
wss.close();
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Create a relay client that connects to the webhook owner and responds
|
|
158
|
+
* to file requests by rendering local files.
|
|
159
|
+
*/
|
|
160
|
+
export function createRelayClient(opts) {
|
|
161
|
+
let ws = null;
|
|
162
|
+
let closed = false;
|
|
163
|
+
let isConnected = false;
|
|
164
|
+
let reconnectDelay = 1000;
|
|
165
|
+
const MAX_RECONNECT_DELAY = 30000;
|
|
166
|
+
let reconnectTimer = null;
|
|
167
|
+
let pongTimer = null;
|
|
168
|
+
function connect() {
|
|
169
|
+
if (closed)
|
|
170
|
+
return;
|
|
171
|
+
try {
|
|
172
|
+
ws = new WebSocket(opts.serverUrl);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
scheduleReconnect();
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
ws.on("open", () => {
|
|
179
|
+
isConnected = true;
|
|
180
|
+
reconnectDelay = 1000; // Reset backoff
|
|
181
|
+
opts.logger?.info({ serverUrl: opts.serverUrl }, "Relay client connected");
|
|
182
|
+
// Announce ourselves
|
|
183
|
+
const announce = {
|
|
184
|
+
type: "announce",
|
|
185
|
+
agentId: opts.agentId,
|
|
186
|
+
workspacePath: opts.workspacePath,
|
|
187
|
+
};
|
|
188
|
+
ws.send(JSON.stringify(announce));
|
|
189
|
+
});
|
|
190
|
+
ws.on("message", async (data) => {
|
|
191
|
+
let msg;
|
|
192
|
+
try {
|
|
193
|
+
msg = JSON.parse(data.toString());
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
if (msg.type === "fileRequest") {
|
|
199
|
+
await handleFileRequest(msg);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
ws.on("ping", () => {
|
|
203
|
+
// ws library auto-sends pong
|
|
204
|
+
});
|
|
205
|
+
ws.on("pong", () => {
|
|
206
|
+
if (pongTimer) {
|
|
207
|
+
clearTimeout(pongTimer);
|
|
208
|
+
pongTimer = null;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
ws.on("close", () => {
|
|
212
|
+
isConnected = false;
|
|
213
|
+
opts.logger?.info("Relay client disconnected");
|
|
214
|
+
scheduleReconnect();
|
|
215
|
+
});
|
|
216
|
+
ws.on("error", (err) => {
|
|
217
|
+
opts.logger?.debug({ error: err.message }, "Relay client error");
|
|
218
|
+
// 'close' event fires after 'error', so reconnect is handled there
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
function scheduleReconnect() {
|
|
222
|
+
if (closed || reconnectTimer)
|
|
223
|
+
return;
|
|
224
|
+
reconnectTimer = setTimeout(() => {
|
|
225
|
+
reconnectTimer = null;
|
|
226
|
+
connect();
|
|
227
|
+
}, reconnectDelay);
|
|
228
|
+
reconnectDelay = Math.min(reconnectDelay * 2, MAX_RECONNECT_DELAY);
|
|
229
|
+
}
|
|
230
|
+
async function handleFileRequest(req) {
|
|
231
|
+
if (!ws || ws.readyState !== WebSocket.OPEN)
|
|
232
|
+
return;
|
|
233
|
+
try {
|
|
234
|
+
const result = req.mode === "view"
|
|
235
|
+
? await renderNavView(opts.workspacePath, req.navPath, opts.baseUrl)
|
|
236
|
+
: await renderNavList(opts.workspacePath, req.navPath, opts.baseUrl);
|
|
237
|
+
const response = {
|
|
238
|
+
type: "fileResponse",
|
|
239
|
+
requestId: req.requestId,
|
|
240
|
+
html: result.html,
|
|
241
|
+
status: result.status,
|
|
242
|
+
};
|
|
243
|
+
ws.send(JSON.stringify(response));
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
const errorResp = {
|
|
247
|
+
type: "errorResponse",
|
|
248
|
+
requestId: req.requestId,
|
|
249
|
+
error: err instanceof Error ? err.message : "Unknown error",
|
|
250
|
+
status: 500,
|
|
251
|
+
};
|
|
252
|
+
ws.send(JSON.stringify(errorResp));
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Start connection
|
|
256
|
+
connect();
|
|
257
|
+
return {
|
|
258
|
+
get connected() { return isConnected; },
|
|
259
|
+
close() {
|
|
260
|
+
closed = true;
|
|
261
|
+
if (reconnectTimer) {
|
|
262
|
+
clearTimeout(reconnectTimer);
|
|
263
|
+
reconnectTimer = null;
|
|
264
|
+
}
|
|
265
|
+
if (pongTimer) {
|
|
266
|
+
clearTimeout(pongTimer);
|
|
267
|
+
pongTimer = null;
|
|
268
|
+
}
|
|
269
|
+
if (ws) {
|
|
270
|
+
ws.close();
|
|
271
|
+
ws = null;
|
|
272
|
+
}
|
|
273
|
+
isConnected = false;
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// โโโ Helper Pages โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
278
|
+
/**
|
|
279
|
+
* HTML page shown when an observer is not connected (reconnecting).
|
|
280
|
+
* Includes auto-refresh meta tag to retry after 3 seconds.
|
|
281
|
+
*/
|
|
282
|
+
function reconnectingPage(agentId) {
|
|
283
|
+
return `<!DOCTYPE html>
|
|
284
|
+
<html lang="en"><head>
|
|
285
|
+
<meta charset="utf-8">
|
|
286
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
287
|
+
<meta http-equiv="refresh" content="3">
|
|
288
|
+
<title>Reconnectingโฆ</title>
|
|
289
|
+
<style>
|
|
290
|
+
body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; margin: 0; padding: 2rem; background: #f8f9fa; }
|
|
291
|
+
.card { background: white; border-radius: 12px; padding: 2rem; max-width: 400px; margin: 2rem auto; text-align: center; box-shadow: 0 2px 8px rgba(0,0,0,.1); }
|
|
292
|
+
.spinner { display: inline-block; width: 24px; height: 24px; border: 3px solid #e0e0e0; border-top-color: #4a9eff; border-radius: 50%; animation: spin 1s linear infinite; margin-bottom: 1rem; }
|
|
293
|
+
@keyframes spin { to { transform: rotate(360deg); } }
|
|
294
|
+
h2 { margin: 0.5rem 0; color: #333; }
|
|
295
|
+
p { color: #666; font-size: 0.9rem; }
|
|
296
|
+
</style>
|
|
297
|
+
</head><body>
|
|
298
|
+
<div class="card">
|
|
299
|
+
<div class="spinner"></div>
|
|
300
|
+
<h2>Reconnectingโฆ</h2>
|
|
301
|
+
<p>Agent <code>${agentId.slice(0, 8)}</code> is reconnecting. This page will auto-refresh.</p>
|
|
302
|
+
</div>
|
|
303
|
+
</body></html>`;
|
|
304
|
+
}
|
|
305
|
+
// โโโ URL Parsing โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
306
|
+
/**
|
|
307
|
+
* Parse a nav path to extract an embedded agentId prefix.
|
|
308
|
+
* Format: `/nav/view/<agentId>/rest/of/path` โ { agentId, navPath: "rest/of/path" }
|
|
309
|
+
* If no valid agentId prefix, returns null (treat as local).
|
|
310
|
+
*
|
|
311
|
+
* AgentIds are always 12-char hex strings (SHA-256 prefix).
|
|
312
|
+
*/
|
|
313
|
+
export function parseAgentPath(navPath) {
|
|
314
|
+
// agentId is always 12 hex chars
|
|
315
|
+
const match = navPath.match(/^([0-9a-f]{12})\/(.*)/);
|
|
316
|
+
if (!match)
|
|
317
|
+
return null;
|
|
318
|
+
return { agentId: match[1], innerPath: match[2] };
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=fileRelay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileRelay.js","sourceRoot":"","sources":["../../src/line/fileRelay.ts"],"names":[],"mappings":"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"}
|