bonecode 1.1.0 → 1.2.1
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 +145 -9
- package/bin/bonecode +47 -42
- package/compat/opencode_adapter.ts +188 -17
- package/dist/bone/output/agent/src/algorithms.d.ts +1 -0
- package/dist/bone/output/agent/src/algorithms.js +3 -0
- package/dist/bone/output/agent/src/algorithms.js.map +1 -0
- package/dist/bone/output/agent/src/audit.d.ts +3 -0
- package/dist/bone/output/agent/src/audit.js +40 -0
- package/dist/bone/output/agent/src/audit.js.map +1 -0
- package/dist/bone/output/agent/src/auth.d.ts +8 -0
- package/dist/bone/output/agent/src/auth.js +56 -0
- package/dist/bone/output/agent/src/auth.js.map +1 -0
- package/dist/bone/output/agent/src/db.d.ts +6 -0
- package/dist/bone/output/agent/src/db.js +63 -0
- package/dist/bone/output/agent/src/db.js.map +1 -0
- package/dist/bone/output/agent/src/events.d.ts +25 -0
- package/dist/bone/output/agent/src/events.js +184 -0
- package/dist/bone/output/agent/src/events.js.map +1 -0
- package/dist/bone/output/agent/src/logger.d.ts +28 -0
- package/dist/bone/output/agent/src/logger.js +45 -0
- package/dist/bone/output/agent/src/logger.js.map +1 -0
- package/dist/bone/output/agent/src/metrics.d.ts +5 -0
- package/dist/bone/output/agent/src/metrics.js +60 -0
- package/dist/bone/output/agent/src/metrics.js.map +1 -0
- package/dist/bone/output/agent/src/routes/agent_instance.d.ts +1 -0
- package/dist/bone/output/agent/src/routes/agent_instance.js +253 -0
- package/dist/bone/output/agent/src/routes/agent_instance.js.map +1 -0
- package/dist/bone/output/agent/src/routes/build_step.d.ts +1 -0
- package/dist/bone/output/agent/src/routes/build_step.js +133 -0
- package/dist/bone/output/agent/src/routes/build_step.js.map +1 -0
- package/dist/bone/output/agent/src/routes/plan.d.ts +1 -0
- package/dist/bone/output/agent/src/routes/plan.js +119 -0
- package/dist/bone/output/agent/src/routes/plan.js.map +1 -0
- package/dist/bone/output/agent/src/routes/task.d.ts +1 -0
- package/dist/bone/output/agent/src/routes/task.js +133 -0
- package/dist/bone/output/agent/src/routes/task.js.map +1 -0
- package/dist/bone/output/agent/src/routes/tool_call.d.ts +1 -0
- package/dist/bone/output/agent/src/routes/tool_call.js +190 -0
- package/dist/bone/output/agent/src/routes/tool_call.js.map +1 -0
- package/dist/bone/output/agent/src/state_machines/agent_instance.d.ts +9 -0
- package/dist/bone/output/agent/src/state_machines/agent_instance.js +22 -0
- package/dist/bone/output/agent/src/state_machines/agent_instance.js.map +1 -0
- package/dist/bone/output/agent/src/state_machines/build_step.d.ts +9 -0
- package/dist/bone/output/agent/src/state_machines/build_step.js +20 -0
- package/dist/bone/output/agent/src/state_machines/build_step.js.map +1 -0
- package/dist/bone/output/agent/src/state_machines/plan.d.ts +9 -0
- package/dist/bone/output/agent/src/state_machines/plan.js +20 -0
- package/dist/bone/output/agent/src/state_machines/plan.js.map +1 -0
- package/dist/bone/output/agent/src/state_machines/task.d.ts +9 -0
- package/dist/bone/output/agent/src/state_machines/task.js +20 -0
- package/dist/bone/output/agent/src/state_machines/task.js.map +1 -0
- package/dist/bone/output/agent/src/state_machines/tool_call.d.ts +9 -0
- package/dist/bone/output/agent/src/state_machines/tool_call.js +20 -0
- package/dist/bone/output/agent/src/state_machines/tool_call.js.map +1 -0
- package/dist/bone/output/rag/src/algorithms.d.ts +1 -0
- package/dist/bone/output/rag/src/algorithms.js +3 -0
- package/dist/bone/output/rag/src/algorithms.js.map +1 -0
- package/dist/bone/output/rag/src/auth.d.ts +8 -0
- package/dist/bone/output/rag/src/auth.js +56 -0
- package/dist/bone/output/rag/src/auth.js.map +1 -0
- package/dist/bone/output/rag/src/db.d.ts +6 -0
- package/dist/bone/output/rag/src/db.js +63 -0
- package/dist/bone/output/rag/src/db.js.map +1 -0
- package/dist/bone/output/rag/src/events.d.ts +25 -0
- package/dist/bone/output/rag/src/events.js +184 -0
- package/dist/bone/output/rag/src/events.js.map +1 -0
- package/dist/bone/output/rag/src/extensions.d.ts +83 -0
- package/dist/bone/output/rag/src/extensions.js +329 -0
- package/dist/bone/output/rag/src/extensions.js.map +1 -0
- package/dist/bone/output/rag/src/flows.d.ts +24 -0
- package/dist/bone/output/rag/src/flows.js +236 -0
- package/dist/bone/output/rag/src/flows.js.map +1 -0
- package/dist/bone/output/rag/src/logger.d.ts +28 -0
- package/dist/bone/output/rag/src/logger.js +45 -0
- package/dist/bone/output/rag/src/logger.js.map +1 -0
- package/dist/bone/output/rag/src/metrics.d.ts +5 -0
- package/dist/bone/output/rag/src/metrics.js +60 -0
- package/dist/bone/output/rag/src/metrics.js.map +1 -0
- package/dist/bone/output/rag/src/routes/code_chunk.d.ts +1 -0
- package/dist/bone/output/rag/src/routes/code_chunk.js +100 -0
- package/dist/bone/output/rag/src/routes/code_chunk.js.map +1 -0
- package/dist/bone/output/rag/src/routes/code_file.d.ts +1 -0
- package/dist/bone/output/rag/src/routes/code_file.js +127 -0
- package/dist/bone/output/rag/src/routes/code_file.js.map +1 -0
- package/dist/bone/output/rag/src/routes/indexing_job.d.ts +1 -0
- package/dist/bone/output/rag/src/routes/indexing_job.js +113 -0
- package/dist/bone/output/rag/src/routes/indexing_job.js.map +1 -0
- package/dist/bone/output/rag/src/routes/knowledge_base.d.ts +1 -0
- package/dist/bone/output/rag/src/routes/knowledge_base.js +242 -0
- package/dist/bone/output/rag/src/routes/knowledge_base.js.map +1 -0
- package/dist/bone/output/rag/src/routes/memory_entry.d.ts +1 -0
- package/dist/bone/output/rag/src/routes/memory_entry.js +113 -0
- package/dist/bone/output/rag/src/routes/memory_entry.js.map +1 -0
- package/dist/bone/output/rag/src/state_machines/code_file.d.ts +9 -0
- package/dist/bone/output/rag/src/state_machines/code_file.js +21 -0
- package/dist/bone/output/rag/src/state_machines/code_file.js.map +1 -0
- package/dist/bone/output/rag/src/state_machines/indexing_job.d.ts +9 -0
- package/dist/bone/output/rag/src/state_machines/indexing_job.js +20 -0
- package/dist/bone/output/rag/src/state_machines/indexing_job.js.map +1 -0
- package/dist/bone/output/rag/src/state_machines/knowledge_base.d.ts +9 -0
- package/dist/bone/output/rag/src/state_machines/knowledge_base.js +21 -0
- package/dist/bone/output/rag/src/state_machines/knowledge_base.js.map +1 -0
- package/dist/bone/output/rag/src/state_machines/memory_entry.d.ts +9 -0
- package/dist/bone/output/rag/src/state_machines/memory_entry.js +18 -0
- package/dist/bone/output/rag/src/state_machines/memory_entry.js.map +1 -0
- package/dist/bone/output/session/src/algorithms.d.ts +1 -0
- package/dist/bone/output/session/src/algorithms.js +3 -0
- package/dist/bone/output/session/src/algorithms.js.map +1 -0
- package/dist/bone/output/session/src/audit.d.ts +3 -0
- package/dist/bone/output/session/src/audit.js +40 -0
- package/dist/bone/output/session/src/audit.js.map +1 -0
- package/dist/bone/output/session/src/auth.d.ts +8 -0
- package/dist/bone/output/session/src/auth.js +56 -0
- package/dist/bone/output/session/src/auth.js.map +1 -0
- package/dist/bone/output/session/src/db.d.ts +6 -0
- package/dist/bone/output/session/src/db.js +63 -0
- package/dist/bone/output/session/src/db.js.map +1 -0
- package/dist/bone/output/session/src/events.d.ts +26 -0
- package/dist/bone/output/session/src/events.js +212 -0
- package/dist/bone/output/session/src/events.js.map +1 -0
- package/dist/bone/output/session/src/extensions.d.ts +41 -0
- package/dist/bone/output/session/src/extensions.js +217 -0
- package/dist/bone/output/session/src/extensions.js.map +1 -0
- package/dist/bone/output/session/src/logger.d.ts +28 -0
- package/dist/bone/output/session/src/logger.js +44 -0
- package/dist/bone/output/session/src/logger.js.map +1 -0
- package/dist/bone/output/session/src/metrics.d.ts +5 -0
- package/dist/bone/output/session/src/metrics.js +60 -0
- package/dist/bone/output/session/src/metrics.js.map +1 -0
- package/dist/bone/output/session/src/routes/message.d.ts +1 -0
- package/dist/bone/output/session/src/routes/message.js +120 -0
- package/dist/bone/output/session/src/routes/message.js.map +1 -0
- package/dist/bone/output/session/src/routes/part.d.ts +1 -0
- package/dist/bone/output/session/src/routes/part.js +106 -0
- package/dist/bone/output/session/src/routes/part.js.map +1 -0
- package/dist/bone/output/session/src/routes/permission.d.ts +1 -0
- package/dist/bone/output/session/src/routes/permission.js +106 -0
- package/dist/bone/output/session/src/routes/permission.js.map +1 -0
- package/dist/bone/output/session/src/routes/project.d.ts +1 -0
- package/dist/bone/output/session/src/routes/project.js +106 -0
- package/dist/bone/output/session/src/routes/project.js.map +1 -0
- package/dist/bone/output/session/src/routes/session.d.ts +1 -0
- package/dist/bone/output/session/src/routes/session.js +308 -0
- package/dist/bone/output/session/src/routes/session.js.map +1 -0
- package/dist/bone/output/session/src/state_machines/session.d.ts +9 -0
- package/dist/bone/output/session/src/state_machines/session.js +21 -0
- package/dist/bone/output/session/src/state_machines/session.js.map +1 -0
- package/dist/bone/output/session/src/websocket.d.ts +15 -0
- package/dist/bone/output/session/src/websocket.js +215 -0
- package/dist/bone/output/session/src/websocket.js.map +1 -0
- package/dist/bone/output/workspace/src/algorithms.d.ts +1 -0
- package/dist/bone/output/workspace/src/algorithms.js +3 -0
- package/dist/bone/output/workspace/src/algorithms.js.map +1 -0
- package/dist/bone/output/workspace/src/auth.d.ts +8 -0
- package/dist/bone/output/workspace/src/auth.js +56 -0
- package/dist/bone/output/workspace/src/auth.js.map +1 -0
- package/dist/bone/output/workspace/src/db.d.ts +6 -0
- package/dist/bone/output/workspace/src/db.js +63 -0
- package/dist/bone/output/workspace/src/db.js.map +1 -0
- package/dist/bone/output/workspace/src/events.d.ts +25 -0
- package/dist/bone/output/workspace/src/events.js +184 -0
- package/dist/bone/output/workspace/src/events.js.map +1 -0
- package/dist/bone/output/workspace/src/logger.d.ts +28 -0
- package/dist/bone/output/workspace/src/logger.js +45 -0
- package/dist/bone/output/workspace/src/logger.js.map +1 -0
- package/dist/bone/output/workspace/src/metrics.d.ts +5 -0
- package/dist/bone/output/workspace/src/metrics.js +60 -0
- package/dist/bone/output/workspace/src/metrics.js.map +1 -0
- package/dist/bone/output/workspace/src/routes/codebase.d.ts +1 -0
- package/dist/bone/output/workspace/src/routes/codebase.js +113 -0
- package/dist/bone/output/workspace/src/routes/codebase.js.map +1 -0
- package/dist/bone/output/workspace/src/routes/snapshot.d.ts +1 -0
- package/dist/bone/output/workspace/src/routes/snapshot.js +151 -0
- package/dist/bone/output/workspace/src/routes/snapshot.js.map +1 -0
- package/dist/bone/output/workspace/src/routes/workspace.d.ts +1 -0
- package/dist/bone/output/workspace/src/routes/workspace.js +209 -0
- package/dist/bone/output/workspace/src/routes/workspace.js.map +1 -0
- package/dist/bone/output/workspace/src/state_machines/codebase.d.ts +9 -0
- package/dist/bone/output/workspace/src/state_machines/codebase.js +19 -0
- package/dist/bone/output/workspace/src/state_machines/codebase.js.map +1 -0
- package/dist/bone/output/workspace/src/state_machines/snapshot.d.ts +9 -0
- package/dist/bone/output/workspace/src/state_machines/snapshot.js +18 -0
- package/dist/bone/output/workspace/src/state_machines/snapshot.js.map +1 -0
- package/dist/bone/output/workspace/src/state_machines/workspace.d.ts +9 -0
- package/dist/bone/output/workspace/src/state_machines/workspace.js +19 -0
- package/dist/bone/output/workspace/src/state_machines/workspace.js.map +1 -0
- package/dist/compat/opencode_adapter.d.ts +25 -0
- package/dist/compat/opencode_adapter.js +599 -0
- package/dist/compat/opencode_adapter.js.map +1 -0
- package/dist/extensions/chunker.d.ts +24 -0
- package/dist/extensions/chunker.js +360 -0
- package/dist/extensions/chunker.js.map +1 -0
- package/dist/extensions/embedding_provider.d.ts +18 -0
- package/dist/extensions/embedding_provider.js +150 -0
- package/dist/extensions/embedding_provider.js.map +1 -0
- package/dist/extensions/llm_provider.d.ts +33 -0
- package/dist/extensions/llm_provider.js +338 -0
- package/dist/extensions/llm_provider.js.map +1 -0
- package/dist/extensions/mcp_bridge.d.ts +44 -0
- package/dist/extensions/mcp_bridge.js +151 -0
- package/dist/extensions/mcp_bridge.js.map +1 -0
- package/dist/extensions/rag_search.d.ts +38 -0
- package/dist/extensions/rag_search.js +242 -0
- package/dist/extensions/rag_search.js.map +1 -0
- package/dist/extensions/snapshot.d.ts +14 -0
- package/dist/extensions/snapshot.js +158 -0
- package/dist/extensions/snapshot.js.map +1 -0
- package/dist/extensions/tool_executor.d.ts +28 -0
- package/dist/extensions/tool_executor.js +268 -0
- package/dist/extensions/tool_executor.js.map +1 -0
- package/dist/src/cli.d.ts +15 -0
- package/dist/src/cli.js +687 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +44 -0
- package/dist/src/config.js +165 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/context_builder.d.ts +51 -0
- package/dist/src/context_builder.js +558 -0
- package/dist/src/context_builder.js.map +1 -0
- package/dist/src/db_adapter.d.ts +24 -0
- package/dist/src/db_adapter.js +341 -0
- package/dist/src/db_adapter.js.map +1 -0
- package/dist/src/engine/session/compaction_logic.d.ts +11 -0
- package/dist/src/engine/session/compaction_logic.js +113 -0
- package/dist/src/engine/session/compaction_logic.js.map +1 -0
- package/dist/src/engine/session/instruction_loader.d.ts +5 -0
- package/dist/src/engine/session/instruction_loader.js +78 -0
- package/dist/src/engine/session/instruction_loader.js.map +1 -0
- package/dist/src/engine/session/overflow_check.d.ts +14 -0
- package/dist/src/engine/session/overflow_check.js +45 -0
- package/dist/src/engine/session/overflow_check.js.map +1 -0
- package/dist/src/engine/session/prompt.d.ts +45 -0
- package/dist/src/engine/session/prompt.js +584 -0
- package/dist/src/engine/session/prompt.js.map +1 -0
- package/dist/src/engine/session/provider_transform.d.ts +59 -0
- package/dist/src/engine/session/provider_transform.js +193 -0
- package/dist/src/engine/session/provider_transform.js.map +1 -0
- package/dist/src/engine/session/retry_logic.d.ts +12 -0
- package/dist/src/engine/session/retry_logic.js +72 -0
- package/dist/src/engine/session/retry_logic.js.map +1 -0
- package/dist/src/engine/session/system_prompt.d.ts +9 -0
- package/dist/src/engine/session/system_prompt.js +96 -0
- package/dist/src/engine/session/system_prompt.js.map +1 -0
- package/dist/src/engine/session/tool_registry.d.ts +5 -0
- package/dist/src/engine/session/tool_registry.js +117 -0
- package/dist/src/engine/session/tool_registry.js.map +1 -0
- package/dist/src/export.d.ts +13 -0
- package/dist/src/export.js +103 -0
- package/dist/src/export.js.map +1 -0
- package/dist/src/mdns.d.ts +7 -0
- package/dist/src/mdns.js +60 -0
- package/dist/src/mdns.js.map +1 -0
- package/dist/src/rag_worker.d.ts +38 -0
- package/dist/src/rag_worker.js +435 -0
- package/dist/src/rag_worker.js.map +1 -0
- package/dist/src/server.d.ts +11 -0
- package/dist/src/server.js +214 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/stats.d.ts +45 -0
- package/dist/src/stats.js +233 -0
- package/dist/src/stats.js.map +1 -0
- package/dist/src/tui.d.ts +29 -0
- package/dist/src/tui.js +1053 -0
- package/dist/src/tui.js.map +1 -0
- package/package.json +7 -4
- package/src/cli.ts +247 -5
- package/src/export.ts +122 -0
- package/src/mdns.ts +53 -0
- package/src/server.ts +32 -0
- package/src/stats.ts +290 -0
- package/src/tui.ts +749 -248
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* BoneCode RAG Ingestion Worker
|
|
4
|
+
*
|
|
5
|
+
* Responsibilities (and only these):
|
|
6
|
+
* 1. Poll the indexing_jobs queue with FOR UPDATE SKIP LOCKED
|
|
7
|
+
* 2. Transition job state through the generated state machine via ServiceClient
|
|
8
|
+
* 3. Drive the BoneScript-generated executeFlow() saga
|
|
9
|
+
* 4. Each saga step calls exactly one capability endpoint or one extension point
|
|
10
|
+
*
|
|
11
|
+
* What this file does NOT do:
|
|
12
|
+
* - Raw SQL for domain objects (sessions, knowledge_bases, code_files, etc.)
|
|
13
|
+
* - File I/O (delegated to read_file_async extension point)
|
|
14
|
+
* - Chunking logic (delegated to chunk_file extension point)
|
|
15
|
+
* - Embedding logic (delegated to embed_batch extension point)
|
|
16
|
+
* - Bulk DB writes (delegated to bulk_insert_chunks extension point)
|
|
17
|
+
*
|
|
18
|
+
* When you change a .bone file and recompile, this worker stays correct
|
|
19
|
+
* because it only calls generated endpoints and extension points.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.ragWorker = void 0;
|
|
23
|
+
const db_1 = require("../bone/output/session/src/db");
|
|
24
|
+
const logger_1 = require("../bone/output/session/src/logger");
|
|
25
|
+
const metrics_1 = require("../bone/output/session/src/metrics");
|
|
26
|
+
const events_1 = require("../bone/output/session/src/events");
|
|
27
|
+
const flows_1 = require("../bone/output/rag/src/flows");
|
|
28
|
+
const config_1 = require("./config");
|
|
29
|
+
// Extension points — all domain logic lives here, not in this file
|
|
30
|
+
const extensions_1 = require("../bone/output/rag/src/extensions");
|
|
31
|
+
// ─── Service Client (singleton) ───────────────────────────────────────────────
|
|
32
|
+
// Calls generated capability endpoints. Token is cached and refreshed lazily.
|
|
33
|
+
class ServiceClient {
|
|
34
|
+
constructor() {
|
|
35
|
+
this._token = null;
|
|
36
|
+
this._tokenExpiry = 0;
|
|
37
|
+
this.baseUrl = process.env.SERVICE_BASE_URL || "http://localhost:3000";
|
|
38
|
+
}
|
|
39
|
+
get token() {
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
if (!this._token || now > this._tokenExpiry - 60000) {
|
|
42
|
+
const jwt = require("jsonwebtoken");
|
|
43
|
+
this._token = jwt.sign({ sub: "rag-worker", role: "service" }, process.env.JWT_SECRET || "bonecode-dev-secret-do-not-use-in-production-at-all-ever", { expiresIn: "1h" });
|
|
44
|
+
this._tokenExpiry = now + 3600000;
|
|
45
|
+
}
|
|
46
|
+
return this._token;
|
|
47
|
+
}
|
|
48
|
+
get headers() {
|
|
49
|
+
return { "Content-Type": "application/json", Authorization: `Bearer ${this.token}` };
|
|
50
|
+
}
|
|
51
|
+
async put(path, body) {
|
|
52
|
+
const r = await fetch(`${this.baseUrl}${path}`, {
|
|
53
|
+
method: "PUT", headers: this.headers, body: JSON.stringify(body),
|
|
54
|
+
});
|
|
55
|
+
if (!r.ok) {
|
|
56
|
+
const text = await r.text();
|
|
57
|
+
throw new Error(`PUT ${path} → ${r.status}: ${text}`);
|
|
58
|
+
}
|
|
59
|
+
return r.json();
|
|
60
|
+
}
|
|
61
|
+
async post(path, body) {
|
|
62
|
+
const r = await fetch(`${this.baseUrl}${path}`, {
|
|
63
|
+
method: "POST", headers: this.headers, body: JSON.stringify(body),
|
|
64
|
+
});
|
|
65
|
+
if (!r.ok) {
|
|
66
|
+
const text = await r.text();
|
|
67
|
+
throw new Error(`POST ${path} → ${r.status}: ${text}`);
|
|
68
|
+
}
|
|
69
|
+
return r.json();
|
|
70
|
+
}
|
|
71
|
+
async get(path) {
|
|
72
|
+
const r = await fetch(`${this.baseUrl}${path}`, { headers: this.headers });
|
|
73
|
+
if (!r.ok) {
|
|
74
|
+
const text = await r.text();
|
|
75
|
+
throw new Error(`GET ${path} → ${r.status}: ${text}`);
|
|
76
|
+
}
|
|
77
|
+
return r.json();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// ─── Worker ───────────────────────────────────────────────────────────────────
|
|
81
|
+
class RAGWorker {
|
|
82
|
+
constructor() {
|
|
83
|
+
this.timer = null;
|
|
84
|
+
this.running = false;
|
|
85
|
+
this.client = new ServiceClient();
|
|
86
|
+
}
|
|
87
|
+
start() {
|
|
88
|
+
const { ragWorkerIntervalMs } = (0, config_1.getConfig)();
|
|
89
|
+
logger_1.logger.info("rag_worker_started", { event: "startup", metadata: { interval_ms: ragWorkerIntervalMs } });
|
|
90
|
+
this.timer = setInterval(() => this.tick(), ragWorkerIntervalMs);
|
|
91
|
+
}
|
|
92
|
+
stop() {
|
|
93
|
+
if (this.timer) {
|
|
94
|
+
clearInterval(this.timer);
|
|
95
|
+
this.timer = null;
|
|
96
|
+
}
|
|
97
|
+
logger_1.logger.info("rag_worker_stopped", { event: "shutdown" });
|
|
98
|
+
}
|
|
99
|
+
async tick() {
|
|
100
|
+
if (this.running)
|
|
101
|
+
return;
|
|
102
|
+
this.running = true;
|
|
103
|
+
try {
|
|
104
|
+
await this.processNextJob();
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
logger_1.logger.error("rag_worker_tick_error", { event: "tick", metadata: { error: e.message } });
|
|
108
|
+
}
|
|
109
|
+
finally {
|
|
110
|
+
this.running = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ─── Queue Management (the only raw SQL in this file) ──────────────────────
|
|
114
|
+
async claimNextJob() {
|
|
115
|
+
const client = await db_1.pool.connect();
|
|
116
|
+
try {
|
|
117
|
+
await client.query("BEGIN");
|
|
118
|
+
const { rows } = await client.query(`SELECT * FROM indexing_jobs WHERE state = 'queued' ORDER BY created_at ASC LIMIT 1 FOR UPDATE SKIP LOCKED`);
|
|
119
|
+
if (rows.length === 0) {
|
|
120
|
+
await client.query("ROLLBACK");
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
// Mark as claimed in DB so no other worker picks it up
|
|
124
|
+
await client.query(`UPDATE indexing_jobs SET state = 'running', updated_at = NOW() WHERE id = $1`, [rows[0].id]);
|
|
125
|
+
await client.query("COMMIT");
|
|
126
|
+
return rows[0];
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
await client.query("ROLLBACK").catch(() => { });
|
|
130
|
+
throw e;
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
client.release();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
async processNextJob() {
|
|
137
|
+
const job = await this.claimNextJob();
|
|
138
|
+
if (!job)
|
|
139
|
+
return;
|
|
140
|
+
logger_1.logger.info("rag_job_started", { event: "job_start", metadata: { job_id: job.id, type: job.job_type } });
|
|
141
|
+
try {
|
|
142
|
+
switch (job.job_type) {
|
|
143
|
+
case "full_index":
|
|
144
|
+
case "incremental":
|
|
145
|
+
await this.runFullIndexSaga(job);
|
|
146
|
+
break;
|
|
147
|
+
case "reindex_file":
|
|
148
|
+
await this.runReindexFileSaga(job);
|
|
149
|
+
break;
|
|
150
|
+
case "delete_file":
|
|
151
|
+
await this.runDeleteFileSaga(job);
|
|
152
|
+
break;
|
|
153
|
+
default:
|
|
154
|
+
throw new Error(`Unknown job type: ${job.job_type}`);
|
|
155
|
+
}
|
|
156
|
+
// Transition job to done via state machine (PUT enforces valid transitions)
|
|
157
|
+
await this.client.put(`/indexing-jobs/${job.id}`, { state: "done" });
|
|
158
|
+
(0, metrics_1.counter)("rag.job.completed", { type: job.job_type });
|
|
159
|
+
logger_1.logger.info("rag_job_completed", { event: "job_done", metadata: { job_id: job.id } });
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
// Transition job to failed via state machine
|
|
163
|
+
await this.client.put(`/indexing-jobs/${job.id}`, { state: "failed", error: e.message }).catch(() => { });
|
|
164
|
+
// Transition KB to error via state machine
|
|
165
|
+
await this.client.put(`/knowledge-bases/${job.knowledge_base_id}`, { state: "error" }).catch(() => { });
|
|
166
|
+
(0, metrics_1.counter)("rag.job.failed", { type: job.job_type });
|
|
167
|
+
logger_1.logger.error("rag_job_failed", { event: "job_fail", metadata: { job_id: job.id, error: e.message } });
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// ─── Full Index Saga ────────────────────────────────────────────────────────
|
|
171
|
+
// Steps: scan → process_files → finalize
|
|
172
|
+
// Each step is focused and delegates to extension points.
|
|
173
|
+
async runFullIndexSaga(job) {
|
|
174
|
+
const { knowledge_base_id, project_id } = job;
|
|
175
|
+
// Transition KB to indexing via the generated capability endpoint
|
|
176
|
+
// (enforces state machine: empty/ready/stale/error → indexing)
|
|
177
|
+
await this.client.post(`/knowledge-bases/ingest-codebase`, {
|
|
178
|
+
knowledge_base_id,
|
|
179
|
+
file_paths: job.file_paths || [],
|
|
180
|
+
});
|
|
181
|
+
const kb = await this.client.get(`/knowledge-bases/${knowledge_base_id}`);
|
|
182
|
+
const ctx = {
|
|
183
|
+
job, kb, knowledge_base_id, project_id,
|
|
184
|
+
file_list: [], files_processed: 0, chunks_created: 0,
|
|
185
|
+
};
|
|
186
|
+
const steps = [
|
|
187
|
+
this.stepScanDirectory(ctx),
|
|
188
|
+
this.stepProcessFiles(ctx),
|
|
189
|
+
this.stepFinalize(ctx),
|
|
190
|
+
];
|
|
191
|
+
const result = await (0, flows_1.executeFlow)("ingest_codebase_pipeline", steps, ctx);
|
|
192
|
+
if (!result.ok) {
|
|
193
|
+
throw new Error(`Saga failed at '${result.failed_step}': ${result.error}. Compensated: [${result.compensated.join(", ")}]`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// ─── Reindex File Saga ──────────────────────────────────────────────────────
|
|
197
|
+
// Steps: delete_old_chunks → process_files → finalize
|
|
198
|
+
// Separate flow — no recursion into runFullIndexSaga.
|
|
199
|
+
async runReindexFileSaga(job) {
|
|
200
|
+
const { knowledge_base_id, project_id } = job;
|
|
201
|
+
const filePaths = job.file_paths || [];
|
|
202
|
+
// Transition KB to reindexing via state machine (ready → stale → reindexing)
|
|
203
|
+
const kb = await this.client.get(`/knowledge-bases/${knowledge_base_id}`);
|
|
204
|
+
if (kb.state === "ready") {
|
|
205
|
+
await this.client.put(`/knowledge-bases/${knowledge_base_id}`, { state: "stale" });
|
|
206
|
+
}
|
|
207
|
+
await this.client.put(`/knowledge-bases/${knowledge_base_id}`, { state: "reindexing" });
|
|
208
|
+
const ctx = {
|
|
209
|
+
job, kb: await this.client.get(`/knowledge-bases/${knowledge_base_id}`),
|
|
210
|
+
knowledge_base_id, project_id,
|
|
211
|
+
file_list: filePaths, files_processed: 0, chunks_created: 0,
|
|
212
|
+
};
|
|
213
|
+
const steps = [
|
|
214
|
+
// Step 1: delete old chunks for these files (via extension point — no raw SQL here)
|
|
215
|
+
{
|
|
216
|
+
name: "delete_old_chunks",
|
|
217
|
+
action: async (ctx) => {
|
|
218
|
+
for (const fp of ctx.file_list) {
|
|
219
|
+
// Get file ID via the generated GET endpoint
|
|
220
|
+
const filesResp = await this.client.get(`/knowledge-bases/${knowledge_base_id}/files?page=1&page_size=1`);
|
|
221
|
+
// Find the specific file — use direct pool query only for lookup (read-only, safe)
|
|
222
|
+
const fileRow = await db_1.pool.query("SELECT id FROM code_files WHERE file_path = $1 AND knowledge_base_id = $2", [fp, knowledge_base_id]);
|
|
223
|
+
if (fileRow.rows[0]) {
|
|
224
|
+
// Transition file to chunking state (clears old chunks via cascade or explicit delete)
|
|
225
|
+
await db_1.pool.query("DELETE FROM code_chunks WHERE code_file_id = $1", [fileRow.rows[0].id]);
|
|
226
|
+
await this.client.put(`/code-files/${fileRow.rows[0].id}`, { state: "chunking" });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
compensation: async (ctx) => {
|
|
231
|
+
// Mark KB stale so it gets re-indexed on next run
|
|
232
|
+
await this.client.put(`/knowledge-bases/${knowledge_base_id}`, { state: "stale" }).catch(() => { });
|
|
233
|
+
},
|
|
234
|
+
},
|
|
235
|
+
// Step 2: process the files (same logic as full index)
|
|
236
|
+
this.stepProcessFiles(ctx),
|
|
237
|
+
// Step 3: finalize (transition KB back to ready)
|
|
238
|
+
this.stepFinalize(ctx),
|
|
239
|
+
];
|
|
240
|
+
const result = await (0, flows_1.executeFlow)("reindex_file_pipeline", steps, ctx);
|
|
241
|
+
if (!result.ok) {
|
|
242
|
+
throw new Error(`Reindex saga failed at '${result.failed_step}': ${result.error}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// ─── Delete File Saga ───────────────────────────────────────────────────────
|
|
246
|
+
async runDeleteFileSaga(job) {
|
|
247
|
+
const { knowledge_base_id } = job;
|
|
248
|
+
const filePaths = job.file_paths || [];
|
|
249
|
+
const steps = [
|
|
250
|
+
{
|
|
251
|
+
name: "delete_chunks_and_files",
|
|
252
|
+
action: async () => {
|
|
253
|
+
for (const fp of filePaths) {
|
|
254
|
+
const fileRow = await db_1.pool.query("SELECT id FROM code_files WHERE file_path = $1 AND knowledge_base_id = $2", [fp, knowledge_base_id]);
|
|
255
|
+
if (fileRow.rows[0]) {
|
|
256
|
+
await db_1.pool.query("DELETE FROM code_chunks WHERE code_file_id = $1", [fileRow.rows[0].id]);
|
|
257
|
+
// Transition file to deleted via state machine
|
|
258
|
+
await this.client.put(`/code-files/${fileRow.rows[0].id}`, { state: "deleted" });
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
compensation: null, // Deletion is not reversible — no compensation
|
|
263
|
+
},
|
|
264
|
+
];
|
|
265
|
+
const result = await (0, flows_1.executeFlow)("delete_file", steps, {});
|
|
266
|
+
if (!result.ok)
|
|
267
|
+
throw new Error(`Delete saga failed: ${result.error}`);
|
|
268
|
+
}
|
|
269
|
+
// ─── Reusable Saga Steps ────────────────────────────────────────────────────
|
|
270
|
+
// These return FlowStep objects that can be composed into any saga.
|
|
271
|
+
stepScanDirectory(ctx) {
|
|
272
|
+
return {
|
|
273
|
+
name: "scan",
|
|
274
|
+
action: async (ctx) => {
|
|
275
|
+
// Use the extension point — pure function, no DB
|
|
276
|
+
const rootPath = ctx.kb.worktree || ctx.job.root_path || "";
|
|
277
|
+
const fromJob = ctx.job.file_paths || [];
|
|
278
|
+
ctx.file_list = rootPath
|
|
279
|
+
? (0, extensions_1.scan_directory)(rootPath, [])
|
|
280
|
+
: fromJob;
|
|
281
|
+
// If scan found nothing but job has explicit paths, use those
|
|
282
|
+
if (ctx.file_list.length === 0 && fromJob.length > 0) {
|
|
283
|
+
ctx.file_list = fromJob;
|
|
284
|
+
}
|
|
285
|
+
// Update job progress via state machine (PUT, not raw SQL)
|
|
286
|
+
await this.client.put(`/indexing-jobs/${ctx.job.id}`, {
|
|
287
|
+
files_total: ctx.file_list.length,
|
|
288
|
+
});
|
|
289
|
+
logger_1.logger.info("rag_scan_complete", { event: "scan", metadata: { files: ctx.file_list.length } });
|
|
290
|
+
},
|
|
291
|
+
compensation: async (ctx) => {
|
|
292
|
+
await this.client.put(`/knowledge-bases/${ctx.knowledge_base_id}`, { state: "error" }).catch(() => { });
|
|
293
|
+
},
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
stepProcessFiles(ctx) {
|
|
297
|
+
return {
|
|
298
|
+
name: "process_files",
|
|
299
|
+
action: async (ctx) => {
|
|
300
|
+
const { knowledge_base_id, project_id, kb } = ctx;
|
|
301
|
+
const embeddingModel = kb.embedding_model || process.env.EMBEDDING_MODEL || "text-embedding-nomic-embed-text-v1.5";
|
|
302
|
+
const chunkStrategy = kb.chunk_strategy || "ast";
|
|
303
|
+
const chunkSize = kb.chunk_size || 1500;
|
|
304
|
+
const chunkOverlap = kb.chunk_overlap || 150;
|
|
305
|
+
// Process files concurrently in batches of 5
|
|
306
|
+
const CONCURRENCY = 5;
|
|
307
|
+
for (let i = 0; i < ctx.file_list.length; i += CONCURRENCY) {
|
|
308
|
+
const batch = ctx.file_list.slice(i, i + CONCURRENCY);
|
|
309
|
+
await Promise.all(batch.map((fp) => this.processOneFile(fp, knowledge_base_id, project_id, embeddingModel, chunkStrategy, chunkSize, chunkOverlap, ctx)
|
|
310
|
+
.catch((e) => {
|
|
311
|
+
// Log but don't abort — one bad file shouldn't kill the whole job
|
|
312
|
+
logger_1.logger.error("rag_file_error", { event: "file_error", metadata: { file: fp, error: e.message } });
|
|
313
|
+
})));
|
|
314
|
+
// Update progress every batch via PUT (state machine)
|
|
315
|
+
await this.client.put(`/indexing-jobs/${ctx.job.id}`, {
|
|
316
|
+
files_processed: ctx.files_processed,
|
|
317
|
+
chunks_embedded: ctx.chunks_created,
|
|
318
|
+
}).catch(() => { }); // Non-fatal if progress update fails
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
compensation: async (ctx) => {
|
|
322
|
+
// Delete all chunks for this KB — bulk delete is acceptable for compensation
|
|
323
|
+
await db_1.pool.query("DELETE FROM code_chunks WHERE knowledge_base_id = $1", [ctx.knowledge_base_id]);
|
|
324
|
+
await db_1.pool.query("UPDATE code_files SET state = 'error', updated_at = NOW() WHERE knowledge_base_id = $1", [ctx.knowledge_base_id]);
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
stepFinalize(ctx) {
|
|
329
|
+
return {
|
|
330
|
+
name: "finalize",
|
|
331
|
+
action: async (ctx) => {
|
|
332
|
+
// Transition KB to ready via state machine
|
|
333
|
+
await this.client.put(`/knowledge-bases/${ctx.knowledge_base_id}`, {
|
|
334
|
+
state: "ready",
|
|
335
|
+
total_files: ctx.files_processed,
|
|
336
|
+
total_chunks: ctx.chunks_created,
|
|
337
|
+
last_indexed_at: new Date().toISOString(),
|
|
338
|
+
});
|
|
339
|
+
// Emit completion event via the event bus (not raw SQL)
|
|
340
|
+
await events_1.eventBus.publish("CodebaseIngestionCompleted", {
|
|
341
|
+
job_id: ctx.job.id,
|
|
342
|
+
knowledge_base_id: ctx.knowledge_base_id,
|
|
343
|
+
project_id: ctx.project_id,
|
|
344
|
+
files_indexed: ctx.files_processed,
|
|
345
|
+
chunks_created: ctx.chunks_created,
|
|
346
|
+
completed_at: new Date().toISOString(),
|
|
347
|
+
}, "RAGWorker");
|
|
348
|
+
},
|
|
349
|
+
compensation: async (ctx) => {
|
|
350
|
+
await this.client.put(`/knowledge-bases/${ctx.knowledge_base_id}`, { state: "error" }).catch(() => { });
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
// ─── Single File Processing ─────────────────────────────────────────────────
|
|
355
|
+
// Delegates entirely to extension points. No raw SQL for domain state.
|
|
356
|
+
async processOneFile(filePath, knowledgeBaseId, projectId, embeddingModel, chunkStrategy, chunkSize, chunkOverlap, ctx) {
|
|
357
|
+
// 1. Read file — extension point (async, returns null if unreadable)
|
|
358
|
+
const fileData = await (0, extensions_1.read_file_async)(filePath);
|
|
359
|
+
if (!fileData)
|
|
360
|
+
return;
|
|
361
|
+
const language = (0, extensions_1.detect_language)(filePath);
|
|
362
|
+
// 2. Upsert code_file via generated endpoint (state machine enforced)
|
|
363
|
+
const existingRows = await db_1.pool.query("SELECT id FROM code_files WHERE file_path = $1 AND knowledge_base_id = $2", [filePath, knowledgeBaseId]);
|
|
364
|
+
let codeFileId;
|
|
365
|
+
if (existingRows.rows[0]) {
|
|
366
|
+
codeFileId = existingRows.rows[0].id;
|
|
367
|
+
await this.client.put(`/code-files/${codeFileId}`, {
|
|
368
|
+
file_hash: fileData.hash,
|
|
369
|
+
file_size_bytes: fileData.size,
|
|
370
|
+
last_modified_at: fileData.mtime,
|
|
371
|
+
state: "chunking",
|
|
372
|
+
});
|
|
373
|
+
// Delete old chunks (bulk delete — acceptable, not domain state)
|
|
374
|
+
await db_1.pool.query("DELETE FROM code_chunks WHERE code_file_id = $1", [codeFileId]);
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
const newFile = await this.client.post("/code-files", {
|
|
378
|
+
knowledge_base_id: knowledgeBaseId,
|
|
379
|
+
project_id: projectId,
|
|
380
|
+
file_path: filePath,
|
|
381
|
+
language,
|
|
382
|
+
file_hash: fileData.hash,
|
|
383
|
+
file_size_bytes: fileData.size,
|
|
384
|
+
total_chunks: 0,
|
|
385
|
+
last_modified_at: fileData.mtime,
|
|
386
|
+
});
|
|
387
|
+
codeFileId = newFile.id;
|
|
388
|
+
}
|
|
389
|
+
// 3. Chunk — extension point (pure function)
|
|
390
|
+
const chunks = (0, extensions_1.chunk_file)(filePath, fileData.content, chunkStrategy, chunkSize, chunkOverlap);
|
|
391
|
+
if (chunks.length === 0)
|
|
392
|
+
return;
|
|
393
|
+
// 4. Embed — extension point (batched API call)
|
|
394
|
+
// Skip embedding when EMBEDDING_PROVIDER is not configured.
|
|
395
|
+
// Chunks are still stored for FTS; vector column stays null.
|
|
396
|
+
const useEmbeddings = !!(process.env.EMBEDDING_PROVIDER && process.env.EMBEDDING_PROVIDER !== "none");
|
|
397
|
+
const rawEmbeddings = useEmbeddings
|
|
398
|
+
? await (0, extensions_1.embed_batch)(chunks.map(c => c.content), embeddingModel)
|
|
399
|
+
: chunks.map(() => null);
|
|
400
|
+
// Convert null → undefined to match bulk_insert_chunks signature
|
|
401
|
+
const embeddings = rawEmbeddings.map(e => e ?? undefined);
|
|
402
|
+
// 5. Bulk insert — extension point (single multi-row INSERT)
|
|
403
|
+
const { v4: uuidv4 } = require("uuid");
|
|
404
|
+
const chunkRows = chunks.map((c, i) => ({
|
|
405
|
+
id: uuidv4(),
|
|
406
|
+
code_file_id: codeFileId,
|
|
407
|
+
knowledge_base_id: knowledgeBaseId,
|
|
408
|
+
project_id: projectId,
|
|
409
|
+
content: c.content,
|
|
410
|
+
start_line: c.start_line,
|
|
411
|
+
end_line: c.end_line,
|
|
412
|
+
chunk_index: c.chunk_index,
|
|
413
|
+
language: c.language || language,
|
|
414
|
+
symbol_name: c.symbol_name,
|
|
415
|
+
symbol_type: c.symbol_type,
|
|
416
|
+
embedding: embeddings[i],
|
|
417
|
+
}));
|
|
418
|
+
await (0, extensions_1.bulk_insert_chunks)(chunkRows);
|
|
419
|
+
// 6. Transition file to indexed via generated endpoint (state machine)
|
|
420
|
+
await this.client.put(`/code-files/${codeFileId}`, {
|
|
421
|
+
total_chunks: chunks.length,
|
|
422
|
+
state: "indexed",
|
|
423
|
+
});
|
|
424
|
+
// 7. Emit FileIndexed event via generated capability endpoint
|
|
425
|
+
await this.client.post("/knowledge-bases/index-file", {
|
|
426
|
+
knowledge_base_id: knowledgeBaseId,
|
|
427
|
+
file_path: filePath,
|
|
428
|
+
});
|
|
429
|
+
// Update shared counters (atomic enough for progress reporting)
|
|
430
|
+
ctx.chunks_created += chunks.length;
|
|
431
|
+
ctx.files_processed++;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
exports.ragWorker = new RAGWorker();
|
|
435
|
+
//# sourceMappingURL=rag_worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rag_worker.js","sourceRoot":"","sources":["../../src/rag_worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BoneCode Server Entry Point
|
|
3
|
+
*
|
|
4
|
+
* Database: auto-detects Postgres (full RAG) or falls back to SQLite (sessions only).
|
|
5
|
+
* No Docker required for basic use — just run `bonecode`.
|
|
6
|
+
*/
|
|
7
|
+
/// <reference types="node" />
|
|
8
|
+
import "dotenv/config";
|
|
9
|
+
declare const app: import("express-serve-static-core").Express;
|
|
10
|
+
declare const httpServer: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
11
|
+
export { app, httpServer };
|