@schlessera/brain-ui-server 0.13.1 → 0.14.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 +51 -12
- package/dist/agent/backend.d.ts +163 -37
- package/dist/agent/backend.d.ts.map +1 -1
- package/dist/agent/backend.js +281 -286
- package/dist/agent/backend.js.map +1 -1
- package/dist/app.d.ts +46 -5
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +94 -35
- package/dist/app.js.map +1 -1
- package/dist/brain/client.d.ts +41 -30
- package/dist/brain/client.d.ts.map +1 -1
- package/dist/brain/client.js +138 -132
- package/dist/brain/client.js.map +1 -1
- package/dist/config/env.d.ts +104 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +296 -0
- package/dist/config/env.js.map +1 -0
- package/dist/cron/scheduler.d.ts +16 -8
- package/dist/cron/scheduler.d.ts.map +1 -1
- package/dist/cron/scheduler.js +54 -53
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/db/brain-db.d.ts +50 -0
- package/dist/db/brain-db.d.ts.map +1 -0
- package/dist/db/brain-db.js +75 -0
- package/dist/db/brain-db.js.map +1 -0
- package/dist/db/client.d.ts +8 -6
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +12 -25
- package/dist/db/client.js.map +1 -1
- package/dist/db/settings.d.ts +5 -4
- package/dist/db/settings.d.ts.map +1 -1
- package/dist/db/settings.js +9 -12
- package/dist/db/settings.js.map +1 -1
- package/dist/files/walker.d.ts +6 -7
- package/dist/files/walker.d.ts.map +1 -1
- package/dist/files/walker.js +6 -9
- package/dist/files/walker.js.map +1 -1
- package/dist/graph/reader.d.ts +6 -6
- package/dist/graph/reader.d.ts.map +1 -1
- package/dist/graph/reader.js +22 -12
- package/dist/graph/reader.js.map +1 -1
- package/dist/index.d.ts +15 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -10
- package/dist/index.js.map +1 -1
- package/dist/middleware/auth.d.ts +17 -6
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +34 -43
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/origin.d.ts +1 -2
- package/dist/middleware/origin.d.ts.map +1 -1
- package/dist/middleware/origin.js +1 -7
- package/dist/middleware/origin.js.map +1 -1
- package/dist/middleware/passkeys.d.ts +29 -5
- package/dist/middleware/passkeys.d.ts.map +1 -1
- package/dist/middleware/passkeys.js +47 -76
- package/dist/middleware/passkeys.js.map +1 -1
- package/dist/middleware/tailscale.d.ts +14 -11
- package/dist/middleware/tailscale.d.ts.map +1 -1
- package/dist/middleware/tailscale.js +11 -10
- package/dist/middleware/tailscale.js.map +1 -1
- package/dist/routes/brain.d.ts +9 -154
- package/dist/routes/brain.d.ts.map +1 -1
- package/dist/routes/brain.js +187 -188
- package/dist/routes/brain.js.map +1 -1
- package/dist/routes/files.d.ts +4 -88
- package/dist/routes/files.d.ts.map +1 -1
- package/dist/routes/files.js +74 -71
- package/dist/routes/files.js.map +1 -1
- package/dist/routes/graph.d.ts +4 -255
- package/dist/routes/graph.d.ts.map +1 -1
- package/dist/routes/graph.js +67 -64
- package/dist/routes/graph.js.map +1 -1
- package/dist/routes/health.d.ts +8 -22
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +10 -10
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/models.d.ts +7 -90
- package/dist/routes/models.d.ts.map +1 -1
- package/dist/routes/models.js +53 -51
- package/dist/routes/models.js.map +1 -1
- package/dist/routes/providers.d.ts +5 -34
- package/dist/routes/providers.d.ts.map +1 -1
- package/dist/routes/providers.js +13 -11
- package/dist/routes/providers.js.map +1 -1
- package/dist/routes/sessions.d.ts +7 -78
- package/dist/routes/sessions.d.ts.map +1 -1
- package/dist/routes/sessions.js +35 -34
- package/dist/routes/sessions.js.map +1 -1
- package/dist/routes/share.d.ts +7 -60
- package/dist/routes/share.d.ts.map +1 -1
- package/dist/routes/share.js +80 -77
- package/dist/routes/share.js.map +1 -1
- package/dist/routes/voice.d.ts +8 -91
- package/dist/routes/voice.d.ts.map +1 -1
- package/dist/routes/voice.js +62 -59
- package/dist/routes/voice.js.map +1 -1
- package/dist/share/staging.d.ts +4 -4
- package/dist/share/staging.d.ts.map +1 -1
- package/dist/share/staging.js +7 -8
- package/dist/share/staging.js.map +1 -1
- package/dist/voice/deepgram-token.d.ts +1 -1
- package/dist/voice/deepgram-token.d.ts.map +1 -1
- package/dist/voice/deepgram-token.js +1 -2
- package/dist/voice/deepgram-token.js.map +1 -1
- package/dist/voice/keyterm-builder.d.ts +23 -8
- package/dist/voice/keyterm-builder.d.ts.map +1 -1
- package/dist/voice/keyterm-builder.js +67 -43
- package/dist/voice/keyterm-builder.js.map +1 -1
- package/dist/voice/speech-providers.d.ts +6 -4
- package/dist/voice/speech-providers.d.ts.map +1 -1
- package/dist/voice/speech-providers.js +28 -25
- package/dist/voice/speech-providers.js.map +1 -1
- package/dist/ws/bridge.d.ts.map +1 -1
- package/dist/ws/bridge.js +2 -3
- package/dist/ws/bridge.js.map +1 -1
- package/dist/ws/clients.d.ts +18 -10
- package/dist/ws/clients.d.ts.map +1 -1
- package/dist/ws/clients.js +35 -37
- package/dist/ws/clients.js.map +1 -1
- package/dist/ws/connection.d.ts.map +1 -1
- package/dist/ws/connection.js +5 -7
- package/dist/ws/connection.js.map +1 -1
- package/dist/ws/dispatch.d.ts.map +1 -1
- package/dist/ws/dispatch.js +1 -2
- package/dist/ws/dispatch.js.map +1 -1
- package/dist/ws/host.d.ts +16 -12
- package/dist/ws/host.d.ts.map +1 -1
- package/dist/ws/host.js +14 -23
- package/dist/ws/host.js.map +1 -1
- package/dist/ws/routing.d.ts +2 -1
- package/dist/ws/routing.d.ts.map +1 -1
- package/dist/ws/routing.js +5 -6
- package/dist/ws/routing.js.map +1 -1
- package/dist/ws/run-session.js +1 -1
- package/dist/ws/run-session.js.map +1 -1
- package/dist/ws/session-catalog.d.ts +2 -2
- package/dist/ws/session-catalog.d.ts.map +1 -1
- package/dist/ws/session-catalog.js +2 -3
- package/dist/ws/session-catalog.js.map +1 -1
- package/package.json +8 -5
- package/src/agent/backend.ts +509 -340
- package/src/app.ts +157 -36
- package/src/brain/client.ts +166 -143
- package/src/config/env.ts +401 -0
- package/src/cron/scheduler.ts +77 -59
- package/src/db/brain-db.ts +104 -0
- package/src/db/client.ts +12 -31
- package/src/db/settings.ts +12 -14
- package/src/files/walker.ts +6 -10
- package/src/graph/reader.ts +26 -15
- package/src/index.ts +56 -17
- package/src/middleware/auth.ts +51 -45
- package/src/middleware/origin.ts +1 -8
- package/src/middleware/passkeys.ts +72 -68
- package/src/middleware/tailscale.ts +22 -17
- package/src/routes/brain.ts +31 -30
- package/src/routes/files.ts +10 -7
- package/src/routes/graph.ts +9 -6
- package/src/routes/health.ts +17 -10
- package/src/routes/models.ts +19 -15
- package/src/routes/providers.ts +14 -15
- package/src/routes/sessions.ts +18 -11
- package/src/routes/share.ts +35 -24
- package/src/routes/voice.ts +78 -68
- package/src/share/staging.ts +10 -8
- package/src/voice/deepgram-token.ts +4 -2
- package/src/voice/keyterm-builder.ts +90 -56
- package/src/voice/speech-providers.ts +28 -24
- package/src/ws/bridge.ts +2 -3
- package/src/ws/clients.ts +38 -41
- package/src/ws/connection.ts +5 -7
- package/src/ws/dispatch.ts +1 -2
- package/src/ws/host.ts +24 -27
- package/src/ws/routing.ts +6 -10
- package/src/ws/run-session.ts +1 -1
- package/src/ws/session-catalog.ts +2 -3
- package/dist/ws/handler.d.ts +0 -34
- package/dist/ws/handler.d.ts.map +0 -1
- package/dist/ws/handler.js +0 -33
- package/dist/ws/handler.js.map +0 -1
- package/src/ws/handler.ts +0 -50
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/routes/brain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../src/routes/brain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,6BAA6B,CAAC;AAIrC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAqBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA4Q7D"}
|
package/dist/routes/brain.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { streamSSE } from "hono/streaming";
|
|
3
|
-
import {
|
|
4
|
-
import { buildKeyterms, writeCache } from "../voice/keyterm-builder.js";
|
|
3
|
+
import { subprocessEnv } from "../config/env.js";
|
|
4
|
+
import { buildKeyterms, writeCache, } from "../voice/keyterm-builder.js";
|
|
5
5
|
import { existsSync } from "fs";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
/**
|
|
@@ -23,71 +23,160 @@ function findWhatsupScript(brainPath) {
|
|
|
23
23
|
}
|
|
24
24
|
return null;
|
|
25
25
|
}
|
|
26
|
-
export
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
type: c.req.query("type"),
|
|
35
|
-
tag: c.req.query("tag"),
|
|
36
|
-
limit: c.req.query("limit") ? Number(c.req.query("limit")) : undefined,
|
|
37
|
-
mode: c.req.query("mode"),
|
|
38
|
-
});
|
|
39
|
-
return c.json({ results, warnings });
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
return c.json({ error: err instanceof Error ? err.message : "Search failed" }, 500);
|
|
43
|
-
}
|
|
44
|
-
})
|
|
45
|
-
.get("/brain/briefing", async (c) => {
|
|
46
|
-
try {
|
|
47
|
-
const content = await brainBriefing();
|
|
48
|
-
return c.json({ content });
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
return c.json({ error: err instanceof Error ? err.message : "Briefing failed" }, 500);
|
|
52
|
-
}
|
|
53
|
-
})
|
|
54
|
-
.post("/brain/whatsup", async (c) => {
|
|
55
|
-
const BRAIN_PATH = process.env.BRAIN_PATH ||
|
|
56
|
-
`${process.env.HOME || "/root"}/brain`;
|
|
57
|
-
// Defeat reverse-proxy buffering for SSE
|
|
58
|
-
c.header("X-Accel-Buffering", "no");
|
|
59
|
-
return streamSSE(c, async (stream) => {
|
|
60
|
-
const send = (data) => stream.writeSSE({ data: JSON.stringify(data) });
|
|
61
|
-
// Heartbeat keeps the proxy from idling out the connection while
|
|
62
|
-
// the upstream LLM call is in flight (~5-15s with no stdout)
|
|
63
|
-
const heartbeat = setInterval(() => {
|
|
64
|
-
stream
|
|
65
|
-
.writeSSE({ event: "ping", data: "" })
|
|
66
|
-
.catch(() => { });
|
|
67
|
-
}, 3000);
|
|
26
|
+
export function createBrainRoutes(deps) {
|
|
27
|
+
const { brain, brainPath, keyterms } = deps;
|
|
28
|
+
return new Hono()
|
|
29
|
+
.get("/brain/search", async (c) => {
|
|
30
|
+
const q = c.req.query("q");
|
|
31
|
+
if (!q) {
|
|
32
|
+
return c.json({ error: "Query parameter 'q' is required" }, 400);
|
|
33
|
+
}
|
|
68
34
|
try {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
35
|
+
const { results, warnings } = await brain.search(q, {
|
|
36
|
+
type: c.req.query("type"),
|
|
37
|
+
tag: c.req.query("tag"),
|
|
38
|
+
limit: c.req.query("limit") ? Number(c.req.query("limit")) : undefined,
|
|
39
|
+
mode: c.req.query("mode"),
|
|
40
|
+
});
|
|
41
|
+
return c.json({ results, warnings });
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
return c.json({ error: err instanceof Error ? err.message : "Search failed" }, 500);
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
.get("/brain/briefing", async (c) => {
|
|
48
|
+
try {
|
|
49
|
+
const content = await brain.briefing();
|
|
50
|
+
return c.json({ content });
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
return c.json({ error: err instanceof Error ? err.message : "Briefing failed" }, 500);
|
|
54
|
+
}
|
|
55
|
+
})
|
|
56
|
+
.post("/brain/whatsup", async (c) => {
|
|
57
|
+
// Defeat reverse-proxy buffering for SSE
|
|
58
|
+
c.header("X-Accel-Buffering", "no");
|
|
59
|
+
return streamSSE(c, async (stream) => {
|
|
60
|
+
const send = (data) => stream.writeSSE({ data: JSON.stringify(data) });
|
|
61
|
+
// Heartbeat keeps the proxy from idling out the connection while
|
|
62
|
+
// the upstream LLM call is in flight (~5-15s with no stdout)
|
|
63
|
+
const heartbeat = setInterval(() => {
|
|
64
|
+
stream
|
|
65
|
+
.writeSSE({ event: "ping", data: "" })
|
|
66
|
+
.catch(() => { });
|
|
67
|
+
}, 3000);
|
|
68
|
+
try {
|
|
69
|
+
await send({ type: "start", text: "Running whatsup briefing..." });
|
|
70
|
+
const script = findWhatsupScript(brainPath);
|
|
71
|
+
if (!script) {
|
|
72
|
+
// Terminate with the frames the client actually handles: it only
|
|
73
|
+
// reads "progress" and "done", so an "error" type would leave the
|
|
74
|
+
// panel spinning on an empty body.
|
|
75
|
+
await send({
|
|
76
|
+
type: "progress",
|
|
77
|
+
text: "whatsup script not found in the brain repo (looked for private/whatsup.ts and scripts/whatsup.ts).",
|
|
78
|
+
});
|
|
79
|
+
await send({ type: "done", success: false, text: "Not available" });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// --gemini: the default backend needs ANTHROPIC_API_KEY, which is no
|
|
83
|
+
// longer set (Claude runs on subscription auth, and the script's
|
|
84
|
+
// --claude backend uses --bare mode, which can't read the
|
|
85
|
+
// CLAUDE_CODE_OAUTH_TOKEN either).
|
|
86
|
+
const proc = Bun.spawn(["bun", script, "--gemini"], {
|
|
87
|
+
cwd: brainPath,
|
|
88
|
+
stdout: "pipe",
|
|
89
|
+
stderr: "pipe",
|
|
90
|
+
env: subprocessEnv({ NO_COLOR: "1" }),
|
|
91
|
+
});
|
|
92
|
+
const reader = proc.stdout.getReader();
|
|
93
|
+
const decoder = new TextDecoder();
|
|
94
|
+
let buffer = "";
|
|
95
|
+
try {
|
|
96
|
+
while (true) {
|
|
97
|
+
const { done, value } = await reader.read();
|
|
98
|
+
if (done)
|
|
99
|
+
break;
|
|
100
|
+
buffer += decoder.decode(value, { stream: true });
|
|
101
|
+
const lines = buffer.split("\n");
|
|
102
|
+
buffer = lines.pop() || "";
|
|
103
|
+
for (const line of lines) {
|
|
104
|
+
await send({ type: "progress", text: line });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (buffer.trim()) {
|
|
108
|
+
await send({ type: "progress", text: buffer });
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch { }
|
|
112
|
+
const exitCode = await proc.exited;
|
|
113
|
+
const stderr = await new Response(proc.stderr).text();
|
|
114
|
+
if (stderr.trim()) {
|
|
115
|
+
for (const line of stderr.split("\n")) {
|
|
116
|
+
if (line.trim())
|
|
117
|
+
await send({ type: "progress", text: line });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
75
120
|
await send({
|
|
76
|
-
type: "
|
|
77
|
-
|
|
121
|
+
type: "done",
|
|
122
|
+
success: exitCode === 0,
|
|
123
|
+
text: exitCode === 0
|
|
124
|
+
? "Briefing complete"
|
|
125
|
+
: `Failed (exit ${exitCode})`,
|
|
78
126
|
});
|
|
79
|
-
await send({ type: "done", success: false, text: "Not available" });
|
|
80
|
-
return;
|
|
81
127
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
128
|
+
finally {
|
|
129
|
+
clearInterval(heartbeat);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
})
|
|
133
|
+
.get("/brain/stats", async (c) => {
|
|
134
|
+
try {
|
|
135
|
+
const stats = await brain.stats();
|
|
136
|
+
return c.json(stats);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
return c.json({ error: err instanceof Error ? err.message : "Stats failed" }, 500);
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
.get("/brain/list", async (c) => {
|
|
143
|
+
try {
|
|
144
|
+
const results = await brain.list({
|
|
145
|
+
type: c.req.query("type"),
|
|
146
|
+
tag: c.req.query("tag"),
|
|
147
|
+
status: c.req.query("status"),
|
|
148
|
+
relevance: c.req.query("relevance"),
|
|
149
|
+
limit: c.req.query("limit") ? Number(c.req.query("limit")) : undefined,
|
|
150
|
+
});
|
|
151
|
+
return c.json({ results });
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
return c.json({ error: err instanceof Error ? err.message : "List failed" }, 500);
|
|
155
|
+
}
|
|
156
|
+
})
|
|
157
|
+
.post("/brain/sync", async (c) => {
|
|
158
|
+
// Stream sync output via SSE so the client sees live progress.
|
|
159
|
+
// brain sync spawns a nested Claude Code process that can take minutes.
|
|
160
|
+
return streamSSE(c, async (stream) => {
|
|
161
|
+
const send = (data) => stream.writeSSE({ data: JSON.stringify(data) });
|
|
162
|
+
await send({ type: "start", text: "Starting brain sync..." });
|
|
163
|
+
// The nested Claude process can be silent for minutes; without traffic
|
|
164
|
+
// the socket gets cut by idle timeouts (Bun's own, or a proxy's). SSE
|
|
165
|
+
// comment lines are ignored by EventSource and data-line parsers.
|
|
166
|
+
const keepalive = setInterval(() => {
|
|
167
|
+
stream.write(": keepalive\n\n").catch(() => { });
|
|
168
|
+
}, 15_000);
|
|
169
|
+
// Merge stderr into stdout — brain sync spawns a nested Claude Code
|
|
170
|
+
// process whose output goes to stderr. The command comes from
|
|
171
|
+
// brain.cliCommand() (packaged bin or legacy vendored script), passed to
|
|
172
|
+
// bash as positional args rather than interpolated into the script, so a
|
|
173
|
+
// BRAIN_PATH containing spaces or shell metacharacters stays inert.
|
|
174
|
+
const [cliBin, ...cliArgs] = brain.cliCommand();
|
|
175
|
+
const proc = Bun.spawn(["bash", "-c", '"$0" "$@" 2>&1', cliBin, ...cliArgs, "sync"], {
|
|
176
|
+
cwd: brainPath,
|
|
88
177
|
stdout: "pipe",
|
|
89
178
|
stderr: "pipe",
|
|
90
|
-
env: {
|
|
179
|
+
env: subprocessEnv({ NO_COLOR: "1" }),
|
|
91
180
|
});
|
|
92
181
|
const reader = proc.stdout.getReader();
|
|
93
182
|
const decoder = new TextDecoder();
|
|
@@ -101,7 +190,9 @@ export const brainRoutes = new Hono()
|
|
|
101
190
|
const lines = buffer.split("\n");
|
|
102
191
|
buffer = lines.pop() || "";
|
|
103
192
|
for (const line of lines) {
|
|
104
|
-
|
|
193
|
+
if (line.trim()) {
|
|
194
|
+
await send({ type: "progress", text: line });
|
|
195
|
+
}
|
|
105
196
|
}
|
|
106
197
|
}
|
|
107
198
|
if (buffer.trim()) {
|
|
@@ -109,142 +200,50 @@ export const brainRoutes = new Hono()
|
|
|
109
200
|
}
|
|
110
201
|
}
|
|
111
202
|
catch { }
|
|
203
|
+
finally {
|
|
204
|
+
clearInterval(keepalive);
|
|
205
|
+
}
|
|
112
206
|
const exitCode = await proc.exited;
|
|
113
|
-
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
207
|
+
// Rebuild voice keyterms cache after a successful sync.
|
|
208
|
+
if (exitCode === 0) {
|
|
209
|
+
try {
|
|
210
|
+
const cache = buildKeyterms(keyterms);
|
|
211
|
+
writeCache(keyterms, cache);
|
|
212
|
+
await send({
|
|
213
|
+
type: "progress",
|
|
214
|
+
text: `[voice] Rebuilt keyterms cache (${cache.count} terms)`,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
await send({
|
|
219
|
+
type: "progress",
|
|
220
|
+
text: `[voice] Keyterm rebuild failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
221
|
+
});
|
|
118
222
|
}
|
|
119
223
|
}
|
|
120
224
|
await send({
|
|
121
225
|
type: "done",
|
|
122
226
|
success: exitCode === 0,
|
|
123
|
-
text: exitCode === 0
|
|
124
|
-
? "Briefing complete"
|
|
125
|
-
: `Failed (exit ${exitCode})`,
|
|
227
|
+
text: exitCode === 0 ? "Sync completed" : `Sync failed (exit ${exitCode})`,
|
|
126
228
|
});
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
clearInterval(heartbeat);
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
})
|
|
133
|
-
.get("/brain/stats", async (c) => {
|
|
134
|
-
try {
|
|
135
|
-
const stats = await brainStats();
|
|
136
|
-
return c.json(stats);
|
|
137
|
-
}
|
|
138
|
-
catch (err) {
|
|
139
|
-
return c.json({ error: err instanceof Error ? err.message : "Stats failed" }, 500);
|
|
140
|
-
}
|
|
141
|
-
})
|
|
142
|
-
.get("/brain/list", async (c) => {
|
|
143
|
-
try {
|
|
144
|
-
const results = await brainList({
|
|
145
|
-
type: c.req.query("type"),
|
|
146
|
-
tag: c.req.query("tag"),
|
|
147
|
-
status: c.req.query("status"),
|
|
148
|
-
relevance: c.req.query("relevance"),
|
|
149
|
-
limit: c.req.query("limit") ? Number(c.req.query("limit")) : undefined,
|
|
150
229
|
});
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
})
|
|
157
|
-
.post("/brain/sync", async (c) => {
|
|
158
|
-
// Stream sync output via SSE so the client sees live progress.
|
|
159
|
-
// brain sync spawns a nested Claude Code process that can take minutes.
|
|
160
|
-
const BRAIN_PATH = process.env.BRAIN_PATH ||
|
|
161
|
-
`${process.env.HOME || "/root"}/brain`;
|
|
162
|
-
return streamSSE(c, async (stream) => {
|
|
163
|
-
const send = (data) => stream.writeSSE({ data: JSON.stringify(data) });
|
|
164
|
-
await send({ type: "start", text: "Starting brain sync..." });
|
|
165
|
-
// The nested Claude process can be silent for minutes; without traffic
|
|
166
|
-
// the socket gets cut by idle timeouts (Bun's own, or a proxy's). SSE
|
|
167
|
-
// comment lines are ignored by EventSource and data-line parsers.
|
|
168
|
-
const keepalive = setInterval(() => {
|
|
169
|
-
stream.write(": keepalive\n\n").catch(() => { });
|
|
170
|
-
}, 15_000);
|
|
171
|
-
// Merge stderr into stdout — brain sync spawns a nested Claude Code
|
|
172
|
-
// process whose output goes to stderr. The command comes from
|
|
173
|
-
// brainCliCommand() (packaged bin or legacy vendored script), passed to
|
|
174
|
-
// bash as positional args rather than interpolated into the script, so a
|
|
175
|
-
// BRAIN_PATH containing spaces or shell metacharacters stays inert.
|
|
176
|
-
const [cliBin, ...cliArgs] = brainCliCommand();
|
|
177
|
-
const proc = Bun.spawn(["bash", "-c", '"$0" "$@" 2>&1', cliBin, ...cliArgs, "sync"], {
|
|
178
|
-
cwd: BRAIN_PATH,
|
|
179
|
-
stdout: "pipe",
|
|
180
|
-
stderr: "pipe",
|
|
181
|
-
env: { ...process.env, NO_COLOR: "1" },
|
|
182
|
-
});
|
|
183
|
-
const reader = proc.stdout.getReader();
|
|
184
|
-
const decoder = new TextDecoder();
|
|
185
|
-
let buffer = "";
|
|
186
|
-
try {
|
|
187
|
-
while (true) {
|
|
188
|
-
const { done, value } = await reader.read();
|
|
189
|
-
if (done)
|
|
190
|
-
break;
|
|
191
|
-
buffer += decoder.decode(value, { stream: true });
|
|
192
|
-
const lines = buffer.split("\n");
|
|
193
|
-
buffer = lines.pop() || "";
|
|
194
|
-
for (const line of lines) {
|
|
195
|
-
if (line.trim()) {
|
|
196
|
-
await send({ type: "progress", text: line });
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
if (buffer.trim()) {
|
|
201
|
-
await send({ type: "progress", text: buffer });
|
|
202
|
-
}
|
|
230
|
+
})
|
|
231
|
+
.post("/brain/add", async (c) => {
|
|
232
|
+
const body = await c.req.json();
|
|
233
|
+
if (!body.content) {
|
|
234
|
+
return c.json({ error: "Field 'content' is required" }, 400);
|
|
203
235
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
236
|
+
try {
|
|
237
|
+
await brain.add(body.content, {
|
|
238
|
+
type: body.type,
|
|
239
|
+
title: body.title,
|
|
240
|
+
tags: body.tags,
|
|
241
|
+
});
|
|
242
|
+
return c.json({ success: true });
|
|
207
243
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (exitCode === 0) {
|
|
211
|
-
try {
|
|
212
|
-
const cache = buildKeyterms();
|
|
213
|
-
writeCache(cache);
|
|
214
|
-
await send({
|
|
215
|
-
type: "progress",
|
|
216
|
-
text: `[voice] Rebuilt keyterms cache (${cache.count} terms)`,
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
catch (err) {
|
|
220
|
-
await send({
|
|
221
|
-
type: "progress",
|
|
222
|
-
text: `[voice] Keyterm rebuild failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
223
|
-
});
|
|
224
|
-
}
|
|
244
|
+
catch (err) {
|
|
245
|
+
return c.json({ error: err instanceof Error ? err.message : "Add failed" }, 500);
|
|
225
246
|
}
|
|
226
|
-
await send({
|
|
227
|
-
type: "done",
|
|
228
|
-
success: exitCode === 0,
|
|
229
|
-
text: exitCode === 0 ? "Sync completed" : `Sync failed (exit ${exitCode})`,
|
|
230
|
-
});
|
|
231
247
|
});
|
|
232
|
-
}
|
|
233
|
-
.post("/brain/add", async (c) => {
|
|
234
|
-
const body = await c.req.json();
|
|
235
|
-
if (!body.content) {
|
|
236
|
-
return c.json({ error: "Field 'content' is required" }, 400);
|
|
237
|
-
}
|
|
238
|
-
try {
|
|
239
|
-
await brainAdd(body.content, {
|
|
240
|
-
type: body.type,
|
|
241
|
-
title: body.title,
|
|
242
|
-
tags: body.tags,
|
|
243
|
-
});
|
|
244
|
-
return c.json({ success: true });
|
|
245
|
-
}
|
|
246
|
-
catch (err) {
|
|
247
|
-
return c.json({ error: err instanceof Error ? err.message : "Add failed" }, 500);
|
|
248
|
-
}
|
|
249
|
-
});
|
|
248
|
+
}
|
|
250
249
|
//# sourceMappingURL=brain.js.map
|
package/dist/routes/brain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/routes/brain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"brain.js","sourceRoot":"","sources":["../../src/routes/brain.ts"],"names":[],"mappings":"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"}
|
package/dist/routes/files.d.ts
CHANGED
|
@@ -1,89 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
output: {
|
|
6
|
-
path: string;
|
|
7
|
-
entries: {
|
|
8
|
-
name: string;
|
|
9
|
-
path: string;
|
|
10
|
-
type: "dir" | "file";
|
|
11
|
-
size?: number | undefined;
|
|
12
|
-
mtime?: number | undefined;
|
|
13
|
-
}[];
|
|
14
|
-
};
|
|
15
|
-
outputFormat: "json";
|
|
16
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
17
|
-
} | {
|
|
18
|
-
input: {};
|
|
19
|
-
output: {
|
|
20
|
-
error: string;
|
|
21
|
-
size?: number | undefined;
|
|
22
|
-
};
|
|
23
|
-
outputFormat: "json";
|
|
24
|
-
status: 500 | 400 | 404 | 413;
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
} & {
|
|
28
|
-
"/files/content": {
|
|
29
|
-
$get: {
|
|
30
|
-
input: {};
|
|
31
|
-
output: {};
|
|
32
|
-
outputFormat: string;
|
|
33
|
-
status: import("hono/utils/http-status").StatusCode;
|
|
34
|
-
};
|
|
35
|
-
};
|
|
36
|
-
} & {
|
|
37
|
-
"/files/resolve": {
|
|
38
|
-
$get: {
|
|
39
|
-
input: {};
|
|
40
|
-
output: {
|
|
41
|
-
error: string;
|
|
42
|
-
size?: number | undefined;
|
|
43
|
-
};
|
|
44
|
-
outputFormat: "json";
|
|
45
|
-
status: 500 | 400 | 404 | 413;
|
|
46
|
-
} | {
|
|
47
|
-
input: {};
|
|
48
|
-
output: {
|
|
49
|
-
error: string;
|
|
50
|
-
};
|
|
51
|
-
outputFormat: "json";
|
|
52
|
-
status: 400;
|
|
53
|
-
} | {
|
|
54
|
-
input: {};
|
|
55
|
-
output: {
|
|
56
|
-
ancestors: string[];
|
|
57
|
-
exists: boolean;
|
|
58
|
-
type?: "dir" | "file" | undefined;
|
|
59
|
-
path: string;
|
|
60
|
-
};
|
|
61
|
-
outputFormat: "json";
|
|
62
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
} & {
|
|
66
|
-
"/files/wikilinks": {
|
|
67
|
-
$get: {
|
|
68
|
-
input: {};
|
|
69
|
-
output: {
|
|
70
|
-
error: string;
|
|
71
|
-
size?: number | undefined;
|
|
72
|
-
};
|
|
73
|
-
outputFormat: "json";
|
|
74
|
-
status: 500 | 400 | 404 | 413;
|
|
75
|
-
} | {
|
|
76
|
-
input: {};
|
|
77
|
-
output: {
|
|
78
|
-
generatedAt: number;
|
|
79
|
-
count: number;
|
|
80
|
-
slugs: {
|
|
81
|
-
[x: string]: string;
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
outputFormat: "json";
|
|
85
|
-
status: import("hono/utils/http-status").ContentfulStatusCode;
|
|
86
|
-
};
|
|
87
|
-
};
|
|
88
|
-
}, "/", "/files/wikilinks">;
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
export declare function createFilesRoutes(deps: {
|
|
3
|
+
brainRoot: string;
|
|
4
|
+
}): Hono;
|
|
89
5
|
//# sourceMappingURL=files.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/routes/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA4B5B,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyEnE"}
|