@veewo/claw-core 0.1.93 → 0.1.94
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/dist/src/embedding-daemon.js +2 -2
- package/dist/src/embedding-daemon.js.map +1 -1
- package/dist/src/embedding-local-runtime.js +0 -2
- package/dist/src/embedding-local-runtime.js.map +1 -1
- package/dist/src/memory.d.ts +1 -0
- package/dist/src/memory.js +318 -70
- package/dist/src/memory.js.map +1 -1
- package/dist/src/search-daemon-protocol.d.ts +32 -0
- package/dist/src/search-daemon-protocol.js +183 -0
- package/dist/src/search-daemon-protocol.js.map +1 -0
- package/dist/src/search-daemon.d.ts +1 -0
- package/dist/src/search-daemon.js +112 -0
- package/dist/src/search-daemon.js.map +1 -0
- package/dist/src/search.d.ts +3 -0
- package/dist/src/search.js +4 -0
- package/dist/src/search.js.map +1 -0
- package/dist/src/templates/plans/default.js +1 -1
- package/dist/src/types.d.ts +4 -0
- package/package.json +5 -1
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import net from "node:net";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { ClawError } from "./errors.js";
|
|
5
|
+
import { searchMemoryAsync } from "./memory.js";
|
|
6
|
+
import { createSearchDaemonState, removeSearchDaemonState, } from "./search-daemon-protocol.js";
|
|
7
|
+
const DEFAULT_IDLE_TTL_MS = 10 * 60 * 1000;
|
|
8
|
+
const runtimeDir = resolveRuntimeDir(process.argv.slice(2));
|
|
9
|
+
const idleTtlMs = readPositiveInteger(process.env.CLAW_SEARCH_DAEMON_IDLE_TTL_MS, DEFAULT_IDLE_TTL_MS);
|
|
10
|
+
let state = null;
|
|
11
|
+
let activeRequests = 0;
|
|
12
|
+
let idleTimer = null;
|
|
13
|
+
let shuttingDown = false;
|
|
14
|
+
process.env.CLAW_SEARCH_DAEMON = "1";
|
|
15
|
+
fs.mkdirSync(runtimeDir, { recursive: true, mode: 0o700 });
|
|
16
|
+
const server = net.createServer((socket) => {
|
|
17
|
+
resetIdleTimer();
|
|
18
|
+
socket.setEncoding("utf-8");
|
|
19
|
+
let payload = "";
|
|
20
|
+
socket.on("data", (chunk) => {
|
|
21
|
+
payload += chunk;
|
|
22
|
+
const newline = payload.indexOf("\n");
|
|
23
|
+
if (newline < 0) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const raw = payload.slice(0, newline);
|
|
27
|
+
payload = payload.slice(newline + 1);
|
|
28
|
+
void handleRequest(raw).then((response) => socket.end(`${JSON.stringify(response)}\n`));
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
server.listen(0, "127.0.0.1", () => {
|
|
32
|
+
const address = server.address();
|
|
33
|
+
if (!address || typeof address === "string") {
|
|
34
|
+
void shutdown(1);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
state = createSearchDaemonState(runtimeDir, address.port);
|
|
38
|
+
resetIdleTimer();
|
|
39
|
+
});
|
|
40
|
+
process.on("SIGTERM", () => void shutdown(0));
|
|
41
|
+
process.on("SIGINT", () => void shutdown(0));
|
|
42
|
+
async function handleRequest(raw) {
|
|
43
|
+
let request;
|
|
44
|
+
try {
|
|
45
|
+
request = JSON.parse(raw);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return errorResponse("", "PROJECT_CONFIG_INVALID", "Search daemon request is not valid JSON.");
|
|
49
|
+
}
|
|
50
|
+
if (!state || request.token !== state.token || request.protocolVersion !== state.protocolVersion) {
|
|
51
|
+
return errorResponse(request.requestId, "PROJECT_CONFIG_INVALID", "Search daemon request authentication failed.");
|
|
52
|
+
}
|
|
53
|
+
activeRequests += 1;
|
|
54
|
+
resetIdleTimer();
|
|
55
|
+
try {
|
|
56
|
+
const output = await searchMemoryAsync(request.input);
|
|
57
|
+
return { ok: true, requestId: request.requestId, output };
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return error instanceof ClawError
|
|
61
|
+
? errorResponse(request.requestId, error.code, error.message, error.details)
|
|
62
|
+
: errorResponse(request.requestId, "UNEXPECTED_ERROR", error instanceof Error ? error.message : String(error));
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
activeRequests -= 1;
|
|
66
|
+
resetIdleTimer();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function errorResponse(requestId, code, message, details) {
|
|
70
|
+
return { ok: false, requestId, error: { code, message, ...(details ? { details } : {}) } };
|
|
71
|
+
}
|
|
72
|
+
function resetIdleTimer() {
|
|
73
|
+
if (idleTimer) {
|
|
74
|
+
clearTimeout(idleTimer);
|
|
75
|
+
}
|
|
76
|
+
idleTimer = setTimeout(() => {
|
|
77
|
+
if (activeRequests === 0) {
|
|
78
|
+
void shutdown(0);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
resetIdleTimer();
|
|
82
|
+
}
|
|
83
|
+
}, idleTtlMs);
|
|
84
|
+
idleTimer.unref();
|
|
85
|
+
}
|
|
86
|
+
async function shutdown(exitCode) {
|
|
87
|
+
if (shuttingDown) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
shuttingDown = true;
|
|
91
|
+
if (idleTimer) {
|
|
92
|
+
clearTimeout(idleTimer);
|
|
93
|
+
}
|
|
94
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
95
|
+
if (state) {
|
|
96
|
+
removeSearchDaemonState(runtimeDir, state.instanceId);
|
|
97
|
+
}
|
|
98
|
+
process.exitCode = exitCode;
|
|
99
|
+
}
|
|
100
|
+
function resolveRuntimeDir(args) {
|
|
101
|
+
const index = args.indexOf("--runtime-dir");
|
|
102
|
+
const value = index >= 0 ? args[index + 1] : null;
|
|
103
|
+
if (!value) {
|
|
104
|
+
throw new Error("Search daemon requires --runtime-dir.");
|
|
105
|
+
}
|
|
106
|
+
return path.resolve(value);
|
|
107
|
+
}
|
|
108
|
+
function readPositiveInteger(raw, fallback) {
|
|
109
|
+
const value = Number.parseInt(raw ?? "", 10);
|
|
110
|
+
return Number.isFinite(value) && value > 0 ? value : fallback;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=search-daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-daemon.js","sourceRoot":"","sources":["../../src/search-daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -597,6 +597,10 @@ export type MemorySearchResult = {
|
|
|
597
597
|
route: "task_fts" | "lexical_fast_path" | "hybrid";
|
|
598
598
|
queryEmbedding: "skipped" | "cache_hit" | "generated";
|
|
599
599
|
embeddingRuntime?: "mock" | "persistent_daemon" | "one_shot" | "remote";
|
|
600
|
+
vectorScanMs?: number;
|
|
601
|
+
fusionMs?: number;
|
|
602
|
+
vectorCount?: number;
|
|
603
|
+
vectorBytes?: number;
|
|
600
604
|
durationMs: number;
|
|
601
605
|
};
|
|
602
606
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veewo/claw-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.94",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Core workflow primitives for .claw project planning, recall, truth ingestion, and task closeout.",
|
|
6
6
|
"keywords": [
|
|
@@ -31,6 +31,10 @@
|
|
|
31
31
|
".": {
|
|
32
32
|
"types": "./dist/src/index.d.ts",
|
|
33
33
|
"default": "./dist/src/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./search": {
|
|
36
|
+
"types": "./dist/src/search.d.ts",
|
|
37
|
+
"default": "./dist/src/search.js"
|
|
34
38
|
}
|
|
35
39
|
},
|
|
36
40
|
"dependencies": {
|