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.
Files changed (271) hide show
  1. package/README.md +145 -9
  2. package/bin/bonecode +47 -42
  3. package/compat/opencode_adapter.ts +188 -17
  4. package/dist/bone/output/agent/src/algorithms.d.ts +1 -0
  5. package/dist/bone/output/agent/src/algorithms.js +3 -0
  6. package/dist/bone/output/agent/src/algorithms.js.map +1 -0
  7. package/dist/bone/output/agent/src/audit.d.ts +3 -0
  8. package/dist/bone/output/agent/src/audit.js +40 -0
  9. package/dist/bone/output/agent/src/audit.js.map +1 -0
  10. package/dist/bone/output/agent/src/auth.d.ts +8 -0
  11. package/dist/bone/output/agent/src/auth.js +56 -0
  12. package/dist/bone/output/agent/src/auth.js.map +1 -0
  13. package/dist/bone/output/agent/src/db.d.ts +6 -0
  14. package/dist/bone/output/agent/src/db.js +63 -0
  15. package/dist/bone/output/agent/src/db.js.map +1 -0
  16. package/dist/bone/output/agent/src/events.d.ts +25 -0
  17. package/dist/bone/output/agent/src/events.js +184 -0
  18. package/dist/bone/output/agent/src/events.js.map +1 -0
  19. package/dist/bone/output/agent/src/logger.d.ts +28 -0
  20. package/dist/bone/output/agent/src/logger.js +45 -0
  21. package/dist/bone/output/agent/src/logger.js.map +1 -0
  22. package/dist/bone/output/agent/src/metrics.d.ts +5 -0
  23. package/dist/bone/output/agent/src/metrics.js +60 -0
  24. package/dist/bone/output/agent/src/metrics.js.map +1 -0
  25. package/dist/bone/output/agent/src/routes/agent_instance.d.ts +1 -0
  26. package/dist/bone/output/agent/src/routes/agent_instance.js +253 -0
  27. package/dist/bone/output/agent/src/routes/agent_instance.js.map +1 -0
  28. package/dist/bone/output/agent/src/routes/build_step.d.ts +1 -0
  29. package/dist/bone/output/agent/src/routes/build_step.js +133 -0
  30. package/dist/bone/output/agent/src/routes/build_step.js.map +1 -0
  31. package/dist/bone/output/agent/src/routes/plan.d.ts +1 -0
  32. package/dist/bone/output/agent/src/routes/plan.js +119 -0
  33. package/dist/bone/output/agent/src/routes/plan.js.map +1 -0
  34. package/dist/bone/output/agent/src/routes/task.d.ts +1 -0
  35. package/dist/bone/output/agent/src/routes/task.js +133 -0
  36. package/dist/bone/output/agent/src/routes/task.js.map +1 -0
  37. package/dist/bone/output/agent/src/routes/tool_call.d.ts +1 -0
  38. package/dist/bone/output/agent/src/routes/tool_call.js +190 -0
  39. package/dist/bone/output/agent/src/routes/tool_call.js.map +1 -0
  40. package/dist/bone/output/agent/src/state_machines/agent_instance.d.ts +9 -0
  41. package/dist/bone/output/agent/src/state_machines/agent_instance.js +22 -0
  42. package/dist/bone/output/agent/src/state_machines/agent_instance.js.map +1 -0
  43. package/dist/bone/output/agent/src/state_machines/build_step.d.ts +9 -0
  44. package/dist/bone/output/agent/src/state_machines/build_step.js +20 -0
  45. package/dist/bone/output/agent/src/state_machines/build_step.js.map +1 -0
  46. package/dist/bone/output/agent/src/state_machines/plan.d.ts +9 -0
  47. package/dist/bone/output/agent/src/state_machines/plan.js +20 -0
  48. package/dist/bone/output/agent/src/state_machines/plan.js.map +1 -0
  49. package/dist/bone/output/agent/src/state_machines/task.d.ts +9 -0
  50. package/dist/bone/output/agent/src/state_machines/task.js +20 -0
  51. package/dist/bone/output/agent/src/state_machines/task.js.map +1 -0
  52. package/dist/bone/output/agent/src/state_machines/tool_call.d.ts +9 -0
  53. package/dist/bone/output/agent/src/state_machines/tool_call.js +20 -0
  54. package/dist/bone/output/agent/src/state_machines/tool_call.js.map +1 -0
  55. package/dist/bone/output/rag/src/algorithms.d.ts +1 -0
  56. package/dist/bone/output/rag/src/algorithms.js +3 -0
  57. package/dist/bone/output/rag/src/algorithms.js.map +1 -0
  58. package/dist/bone/output/rag/src/auth.d.ts +8 -0
  59. package/dist/bone/output/rag/src/auth.js +56 -0
  60. package/dist/bone/output/rag/src/auth.js.map +1 -0
  61. package/dist/bone/output/rag/src/db.d.ts +6 -0
  62. package/dist/bone/output/rag/src/db.js +63 -0
  63. package/dist/bone/output/rag/src/db.js.map +1 -0
  64. package/dist/bone/output/rag/src/events.d.ts +25 -0
  65. package/dist/bone/output/rag/src/events.js +184 -0
  66. package/dist/bone/output/rag/src/events.js.map +1 -0
  67. package/dist/bone/output/rag/src/extensions.d.ts +83 -0
  68. package/dist/bone/output/rag/src/extensions.js +329 -0
  69. package/dist/bone/output/rag/src/extensions.js.map +1 -0
  70. package/dist/bone/output/rag/src/flows.d.ts +24 -0
  71. package/dist/bone/output/rag/src/flows.js +236 -0
  72. package/dist/bone/output/rag/src/flows.js.map +1 -0
  73. package/dist/bone/output/rag/src/logger.d.ts +28 -0
  74. package/dist/bone/output/rag/src/logger.js +45 -0
  75. package/dist/bone/output/rag/src/logger.js.map +1 -0
  76. package/dist/bone/output/rag/src/metrics.d.ts +5 -0
  77. package/dist/bone/output/rag/src/metrics.js +60 -0
  78. package/dist/bone/output/rag/src/metrics.js.map +1 -0
  79. package/dist/bone/output/rag/src/routes/code_chunk.d.ts +1 -0
  80. package/dist/bone/output/rag/src/routes/code_chunk.js +100 -0
  81. package/dist/bone/output/rag/src/routes/code_chunk.js.map +1 -0
  82. package/dist/bone/output/rag/src/routes/code_file.d.ts +1 -0
  83. package/dist/bone/output/rag/src/routes/code_file.js +127 -0
  84. package/dist/bone/output/rag/src/routes/code_file.js.map +1 -0
  85. package/dist/bone/output/rag/src/routes/indexing_job.d.ts +1 -0
  86. package/dist/bone/output/rag/src/routes/indexing_job.js +113 -0
  87. package/dist/bone/output/rag/src/routes/indexing_job.js.map +1 -0
  88. package/dist/bone/output/rag/src/routes/knowledge_base.d.ts +1 -0
  89. package/dist/bone/output/rag/src/routes/knowledge_base.js +242 -0
  90. package/dist/bone/output/rag/src/routes/knowledge_base.js.map +1 -0
  91. package/dist/bone/output/rag/src/routes/memory_entry.d.ts +1 -0
  92. package/dist/bone/output/rag/src/routes/memory_entry.js +113 -0
  93. package/dist/bone/output/rag/src/routes/memory_entry.js.map +1 -0
  94. package/dist/bone/output/rag/src/state_machines/code_file.d.ts +9 -0
  95. package/dist/bone/output/rag/src/state_machines/code_file.js +21 -0
  96. package/dist/bone/output/rag/src/state_machines/code_file.js.map +1 -0
  97. package/dist/bone/output/rag/src/state_machines/indexing_job.d.ts +9 -0
  98. package/dist/bone/output/rag/src/state_machines/indexing_job.js +20 -0
  99. package/dist/bone/output/rag/src/state_machines/indexing_job.js.map +1 -0
  100. package/dist/bone/output/rag/src/state_machines/knowledge_base.d.ts +9 -0
  101. package/dist/bone/output/rag/src/state_machines/knowledge_base.js +21 -0
  102. package/dist/bone/output/rag/src/state_machines/knowledge_base.js.map +1 -0
  103. package/dist/bone/output/rag/src/state_machines/memory_entry.d.ts +9 -0
  104. package/dist/bone/output/rag/src/state_machines/memory_entry.js +18 -0
  105. package/dist/bone/output/rag/src/state_machines/memory_entry.js.map +1 -0
  106. package/dist/bone/output/session/src/algorithms.d.ts +1 -0
  107. package/dist/bone/output/session/src/algorithms.js +3 -0
  108. package/dist/bone/output/session/src/algorithms.js.map +1 -0
  109. package/dist/bone/output/session/src/audit.d.ts +3 -0
  110. package/dist/bone/output/session/src/audit.js +40 -0
  111. package/dist/bone/output/session/src/audit.js.map +1 -0
  112. package/dist/bone/output/session/src/auth.d.ts +8 -0
  113. package/dist/bone/output/session/src/auth.js +56 -0
  114. package/dist/bone/output/session/src/auth.js.map +1 -0
  115. package/dist/bone/output/session/src/db.d.ts +6 -0
  116. package/dist/bone/output/session/src/db.js +63 -0
  117. package/dist/bone/output/session/src/db.js.map +1 -0
  118. package/dist/bone/output/session/src/events.d.ts +26 -0
  119. package/dist/bone/output/session/src/events.js +212 -0
  120. package/dist/bone/output/session/src/events.js.map +1 -0
  121. package/dist/bone/output/session/src/extensions.d.ts +41 -0
  122. package/dist/bone/output/session/src/extensions.js +217 -0
  123. package/dist/bone/output/session/src/extensions.js.map +1 -0
  124. package/dist/bone/output/session/src/logger.d.ts +28 -0
  125. package/dist/bone/output/session/src/logger.js +44 -0
  126. package/dist/bone/output/session/src/logger.js.map +1 -0
  127. package/dist/bone/output/session/src/metrics.d.ts +5 -0
  128. package/dist/bone/output/session/src/metrics.js +60 -0
  129. package/dist/bone/output/session/src/metrics.js.map +1 -0
  130. package/dist/bone/output/session/src/routes/message.d.ts +1 -0
  131. package/dist/bone/output/session/src/routes/message.js +120 -0
  132. package/dist/bone/output/session/src/routes/message.js.map +1 -0
  133. package/dist/bone/output/session/src/routes/part.d.ts +1 -0
  134. package/dist/bone/output/session/src/routes/part.js +106 -0
  135. package/dist/bone/output/session/src/routes/part.js.map +1 -0
  136. package/dist/bone/output/session/src/routes/permission.d.ts +1 -0
  137. package/dist/bone/output/session/src/routes/permission.js +106 -0
  138. package/dist/bone/output/session/src/routes/permission.js.map +1 -0
  139. package/dist/bone/output/session/src/routes/project.d.ts +1 -0
  140. package/dist/bone/output/session/src/routes/project.js +106 -0
  141. package/dist/bone/output/session/src/routes/project.js.map +1 -0
  142. package/dist/bone/output/session/src/routes/session.d.ts +1 -0
  143. package/dist/bone/output/session/src/routes/session.js +308 -0
  144. package/dist/bone/output/session/src/routes/session.js.map +1 -0
  145. package/dist/bone/output/session/src/state_machines/session.d.ts +9 -0
  146. package/dist/bone/output/session/src/state_machines/session.js +21 -0
  147. package/dist/bone/output/session/src/state_machines/session.js.map +1 -0
  148. package/dist/bone/output/session/src/websocket.d.ts +15 -0
  149. package/dist/bone/output/session/src/websocket.js +215 -0
  150. package/dist/bone/output/session/src/websocket.js.map +1 -0
  151. package/dist/bone/output/workspace/src/algorithms.d.ts +1 -0
  152. package/dist/bone/output/workspace/src/algorithms.js +3 -0
  153. package/dist/bone/output/workspace/src/algorithms.js.map +1 -0
  154. package/dist/bone/output/workspace/src/auth.d.ts +8 -0
  155. package/dist/bone/output/workspace/src/auth.js +56 -0
  156. package/dist/bone/output/workspace/src/auth.js.map +1 -0
  157. package/dist/bone/output/workspace/src/db.d.ts +6 -0
  158. package/dist/bone/output/workspace/src/db.js +63 -0
  159. package/dist/bone/output/workspace/src/db.js.map +1 -0
  160. package/dist/bone/output/workspace/src/events.d.ts +25 -0
  161. package/dist/bone/output/workspace/src/events.js +184 -0
  162. package/dist/bone/output/workspace/src/events.js.map +1 -0
  163. package/dist/bone/output/workspace/src/logger.d.ts +28 -0
  164. package/dist/bone/output/workspace/src/logger.js +45 -0
  165. package/dist/bone/output/workspace/src/logger.js.map +1 -0
  166. package/dist/bone/output/workspace/src/metrics.d.ts +5 -0
  167. package/dist/bone/output/workspace/src/metrics.js +60 -0
  168. package/dist/bone/output/workspace/src/metrics.js.map +1 -0
  169. package/dist/bone/output/workspace/src/routes/codebase.d.ts +1 -0
  170. package/dist/bone/output/workspace/src/routes/codebase.js +113 -0
  171. package/dist/bone/output/workspace/src/routes/codebase.js.map +1 -0
  172. package/dist/bone/output/workspace/src/routes/snapshot.d.ts +1 -0
  173. package/dist/bone/output/workspace/src/routes/snapshot.js +151 -0
  174. package/dist/bone/output/workspace/src/routes/snapshot.js.map +1 -0
  175. package/dist/bone/output/workspace/src/routes/workspace.d.ts +1 -0
  176. package/dist/bone/output/workspace/src/routes/workspace.js +209 -0
  177. package/dist/bone/output/workspace/src/routes/workspace.js.map +1 -0
  178. package/dist/bone/output/workspace/src/state_machines/codebase.d.ts +9 -0
  179. package/dist/bone/output/workspace/src/state_machines/codebase.js +19 -0
  180. package/dist/bone/output/workspace/src/state_machines/codebase.js.map +1 -0
  181. package/dist/bone/output/workspace/src/state_machines/snapshot.d.ts +9 -0
  182. package/dist/bone/output/workspace/src/state_machines/snapshot.js +18 -0
  183. package/dist/bone/output/workspace/src/state_machines/snapshot.js.map +1 -0
  184. package/dist/bone/output/workspace/src/state_machines/workspace.d.ts +9 -0
  185. package/dist/bone/output/workspace/src/state_machines/workspace.js +19 -0
  186. package/dist/bone/output/workspace/src/state_machines/workspace.js.map +1 -0
  187. package/dist/compat/opencode_adapter.d.ts +25 -0
  188. package/dist/compat/opencode_adapter.js +599 -0
  189. package/dist/compat/opencode_adapter.js.map +1 -0
  190. package/dist/extensions/chunker.d.ts +24 -0
  191. package/dist/extensions/chunker.js +360 -0
  192. package/dist/extensions/chunker.js.map +1 -0
  193. package/dist/extensions/embedding_provider.d.ts +18 -0
  194. package/dist/extensions/embedding_provider.js +150 -0
  195. package/dist/extensions/embedding_provider.js.map +1 -0
  196. package/dist/extensions/llm_provider.d.ts +33 -0
  197. package/dist/extensions/llm_provider.js +338 -0
  198. package/dist/extensions/llm_provider.js.map +1 -0
  199. package/dist/extensions/mcp_bridge.d.ts +44 -0
  200. package/dist/extensions/mcp_bridge.js +151 -0
  201. package/dist/extensions/mcp_bridge.js.map +1 -0
  202. package/dist/extensions/rag_search.d.ts +38 -0
  203. package/dist/extensions/rag_search.js +242 -0
  204. package/dist/extensions/rag_search.js.map +1 -0
  205. package/dist/extensions/snapshot.d.ts +14 -0
  206. package/dist/extensions/snapshot.js +158 -0
  207. package/dist/extensions/snapshot.js.map +1 -0
  208. package/dist/extensions/tool_executor.d.ts +28 -0
  209. package/dist/extensions/tool_executor.js +268 -0
  210. package/dist/extensions/tool_executor.js.map +1 -0
  211. package/dist/src/cli.d.ts +15 -0
  212. package/dist/src/cli.js +687 -0
  213. package/dist/src/cli.js.map +1 -0
  214. package/dist/src/config.d.ts +44 -0
  215. package/dist/src/config.js +165 -0
  216. package/dist/src/config.js.map +1 -0
  217. package/dist/src/context_builder.d.ts +51 -0
  218. package/dist/src/context_builder.js +558 -0
  219. package/dist/src/context_builder.js.map +1 -0
  220. package/dist/src/db_adapter.d.ts +24 -0
  221. package/dist/src/db_adapter.js +341 -0
  222. package/dist/src/db_adapter.js.map +1 -0
  223. package/dist/src/engine/session/compaction_logic.d.ts +11 -0
  224. package/dist/src/engine/session/compaction_logic.js +113 -0
  225. package/dist/src/engine/session/compaction_logic.js.map +1 -0
  226. package/dist/src/engine/session/instruction_loader.d.ts +5 -0
  227. package/dist/src/engine/session/instruction_loader.js +78 -0
  228. package/dist/src/engine/session/instruction_loader.js.map +1 -0
  229. package/dist/src/engine/session/overflow_check.d.ts +14 -0
  230. package/dist/src/engine/session/overflow_check.js +45 -0
  231. package/dist/src/engine/session/overflow_check.js.map +1 -0
  232. package/dist/src/engine/session/prompt.d.ts +45 -0
  233. package/dist/src/engine/session/prompt.js +584 -0
  234. package/dist/src/engine/session/prompt.js.map +1 -0
  235. package/dist/src/engine/session/provider_transform.d.ts +59 -0
  236. package/dist/src/engine/session/provider_transform.js +193 -0
  237. package/dist/src/engine/session/provider_transform.js.map +1 -0
  238. package/dist/src/engine/session/retry_logic.d.ts +12 -0
  239. package/dist/src/engine/session/retry_logic.js +72 -0
  240. package/dist/src/engine/session/retry_logic.js.map +1 -0
  241. package/dist/src/engine/session/system_prompt.d.ts +9 -0
  242. package/dist/src/engine/session/system_prompt.js +96 -0
  243. package/dist/src/engine/session/system_prompt.js.map +1 -0
  244. package/dist/src/engine/session/tool_registry.d.ts +5 -0
  245. package/dist/src/engine/session/tool_registry.js +117 -0
  246. package/dist/src/engine/session/tool_registry.js.map +1 -0
  247. package/dist/src/export.d.ts +13 -0
  248. package/dist/src/export.js +103 -0
  249. package/dist/src/export.js.map +1 -0
  250. package/dist/src/mdns.d.ts +7 -0
  251. package/dist/src/mdns.js +60 -0
  252. package/dist/src/mdns.js.map +1 -0
  253. package/dist/src/rag_worker.d.ts +38 -0
  254. package/dist/src/rag_worker.js +435 -0
  255. package/dist/src/rag_worker.js.map +1 -0
  256. package/dist/src/server.d.ts +11 -0
  257. package/dist/src/server.js +214 -0
  258. package/dist/src/server.js.map +1 -0
  259. package/dist/src/stats.d.ts +45 -0
  260. package/dist/src/stats.js +233 -0
  261. package/dist/src/stats.js.map +1 -0
  262. package/dist/src/tui.d.ts +29 -0
  263. package/dist/src/tui.js +1053 -0
  264. package/dist/src/tui.js.map +1 -0
  265. package/package.json +7 -4
  266. package/src/cli.ts +247 -5
  267. package/src/export.ts +122 -0
  268. package/src/mdns.ts +53 -0
  269. package/src/server.ts +32 -0
  270. package/src/stats.ts +290 -0
  271. package/src/tui.ts +749 -248
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ // Generated by BoneScript compiler.
3
+ // Extension points: implement the functions below.
4
+ // Code between sentinel comments is preserved on recompile.
5
+ // DO NOT remove the sentinel comments.
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.read_file_async = exports.bulk_insert_chunks = exports.detect_language = exports.scan_directory = exports.hybrid_search = exports.chunk_file = exports.embed_batch = exports.embed_text = void 0;
31
+ const fs = __importStar(require("fs"));
32
+ const path = __importStar(require("path"));
33
+ const db_1 = require("./db");
34
+ const metrics_1 = require("./metrics");
35
+ // ─── Shared fetch helper (uses env-configured embedding endpoint) ─────────────
36
+ async function embeddingFetch(body) {
37
+ const baseUrl = process.env.EMBEDDING_BASE_URL || process.env.OPENAI_BASE_URL || "https://api.openai.com/v1";
38
+ const apiKey = process.env.EMBEDDING_API_KEY || process.env.OPENAI_API_KEY || "not-needed";
39
+ return fetch(`${baseUrl}/embeddings`, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${apiKey}` },
42
+ body: JSON.stringify(body),
43
+ });
44
+ }
45
+ /**
46
+ * Extension point: embed_text
47
+ * STABLE: implementation required.
48
+ */
49
+ async function embed_text(text, model) {
50
+ // <bonescript:ext:embed_text:begin>
51
+ const effectiveModel = model || process.env.EMBEDDING_MODEL || "text-embedding-nomic-embed-text-v1.5";
52
+ const r = await embeddingFetch({ model: effectiveModel, input: text });
53
+ if (!r.ok)
54
+ throw new Error(`Embedding API error ${r.status}: ${await r.text()}`);
55
+ const data = await r.json();
56
+ (0, metrics_1.counter)("rag.embed.single", { model: effectiveModel });
57
+ return data.data[0].embedding;
58
+ // <bonescript:ext:embed_text:end>
59
+ }
60
+ exports.embed_text = embed_text;
61
+ /**
62
+ * Extension point: embed_batch
63
+ * STABLE: implementation required.
64
+ */
65
+ async function embed_batch(texts, model) {
66
+ // <bonescript:ext:embed_batch:begin>
67
+ if (texts.length === 0)
68
+ return [];
69
+ const effectiveModel = model || process.env.EMBEDDING_MODEL || "text-embedding-nomic-embed-text-v1.5";
70
+ const BATCH = 100;
71
+ const results = [];
72
+ for (let i = 0; i < texts.length; i += BATCH) {
73
+ const batch = texts.slice(i, i + BATCH);
74
+ const r = await embeddingFetch({ model: effectiveModel, input: batch });
75
+ if (!r.ok)
76
+ throw new Error(`Embedding batch API error ${r.status}: ${await r.text()}`);
77
+ const data = await r.json();
78
+ const sorted = data.data.sort((a, b) => a.index - b.index);
79
+ results.push(...sorted.map((d) => d.embedding));
80
+ (0, metrics_1.counter)("rag.embed.batch", { model: effectiveModel, count: String(batch.length) });
81
+ }
82
+ return results;
83
+ // <bonescript:ext:embed_batch:end>
84
+ }
85
+ exports.embed_batch = embed_batch;
86
+ /**
87
+ * Extension point: chunk_file
88
+ * STABLE: implementation required.
89
+ */
90
+ function chunk_file(file_path, content, strategy, chunk_size, overlap) {
91
+ // <bonescript:ext:chunk_file:begin>
92
+ const language = detect_language(file_path);
93
+ const lines = content.split("\n");
94
+ const linesPerChunk = Math.max(10, Math.floor(chunk_size / 80));
95
+ const overlapLines = Math.max(0, Math.floor(overlap / 80));
96
+ const chunks = [];
97
+ let chunkIndex = 0;
98
+ // AST-aware: detect symbol boundaries for TS/JS/Python/Go
99
+ const symbolPatterns = {
100
+ typescript: [/^(export\s+)?(async\s+)?function\s+(\w+)/, /^(export\s+)?(abstract\s+)?class\s+(\w+)/, /^(export\s+)?interface\s+(\w+)/, /^(export\s+)?const\s+(\w+)\s*=/],
101
+ javascript: [/^(export\s+)?(async\s+)?function\s+(\w+)/, /^(export\s+)?class\s+(\w+)/, /^(export\s+)?const\s+(\w+)\s*=/],
102
+ python: [/^(async\s+)?def\s+(\w+)/, /^class\s+(\w+)/],
103
+ go: [/^func\s+(\w+)/, /^type\s+(\w+)\s+struct/],
104
+ };
105
+ const patterns = strategy === "ast" ? (symbolPatterns[language] || []) : [];
106
+ let currentStart = 0;
107
+ let currentLines = [];
108
+ let currentSymbol = null;
109
+ const flush = () => {
110
+ const text = currentLines.join("\n").trim();
111
+ if (text.length > 0) {
112
+ chunks.push({
113
+ content: currentLines.join("\n"),
114
+ start_line: currentStart + 1,
115
+ end_line: currentStart + currentLines.length,
116
+ chunk_index: chunkIndex++,
117
+ language,
118
+ symbol_name: currentSymbol?.name,
119
+ symbol_type: currentSymbol?.type,
120
+ });
121
+ }
122
+ };
123
+ for (let i = 0; i < lines.length; i++) {
124
+ const line = lines[i];
125
+ let isSymbolBoundary = false;
126
+ let symbolName = "";
127
+ let symbolType = "block";
128
+ for (const pat of patterns) {
129
+ const m = line.match(pat);
130
+ if (m) {
131
+ isSymbolBoundary = true;
132
+ symbolName = m[m.length - 1] || "";
133
+ symbolType = /function|def|func/.test(line) ? "function" : /class/.test(line) ? "class" : /interface/.test(line) ? "interface" : "variable";
134
+ break;
135
+ }
136
+ }
137
+ if (isSymbolBoundary && currentLines.length > 0) {
138
+ flush();
139
+ const overlapStart = Math.max(0, i - overlapLines);
140
+ currentStart = overlapStart;
141
+ currentLines = lines.slice(overlapStart, i);
142
+ currentSymbol = { name: symbolName, type: symbolType };
143
+ }
144
+ currentLines.push(line);
145
+ // Also split on size overflow
146
+ if (currentLines.join("\n").length > chunk_size && currentLines.length > 10) {
147
+ flush();
148
+ const overlapStart = Math.max(0, currentStart + currentLines.length - overlapLines);
149
+ currentStart = overlapStart;
150
+ currentLines = lines.slice(overlapStart, i + 1);
151
+ currentSymbol = null;
152
+ }
153
+ }
154
+ flush();
155
+ // Fallback: if no chunks produced, use line-based sliding window
156
+ if (chunks.length === 0) {
157
+ for (let i = 0; i < lines.length; i += linesPerChunk - overlapLines) {
158
+ const end = Math.min(i + linesPerChunk, lines.length);
159
+ const text = lines.slice(i, end).join("\n").trim();
160
+ if (text.length > 0) {
161
+ chunks.push({ content: lines.slice(i, end).join("\n"), start_line: i + 1, end_line: end, chunk_index: chunkIndex++, language });
162
+ }
163
+ if (end >= lines.length)
164
+ break;
165
+ }
166
+ }
167
+ return chunks;
168
+ // <bonescript:ext:chunk_file:end>
169
+ }
170
+ exports.chunk_file = chunk_file;
171
+ /**
172
+ * Extension point: hybrid_search
173
+ * STABLE: implementation required.
174
+ */
175
+ async function hybrid_search(knowledge_base_id, query_embedding, query_text, filters, limit) {
176
+ // <bonescript:ext:hybrid_search:begin>
177
+ const embStr = "[" + query_embedding.join(",") + "]";
178
+ const result = await db_1.pool.query("SELECT * FROM bonecode_hybrid_search($1, $2::vector, $3, $4, $5, $6)", [knowledge_base_id, embStr, query_text, filters?.language || null, filters?.symbol_type || null, limit]);
179
+ (0, metrics_1.counter)("rag.search.hybrid", { knowledge_base_id, results: String(result.rows.length) });
180
+ return result.rows.map((row) => ({
181
+ chunk_id: row.chunk_id,
182
+ file_path: row.file_path,
183
+ content: row.content,
184
+ start_line: Number(row.start_line),
185
+ end_line: Number(row.end_line),
186
+ language: row.language,
187
+ symbol_name: row.symbol_name,
188
+ symbol_type: row.symbol_type,
189
+ score: row.rrf_score,
190
+ vector_score: row.vector_score,
191
+ text_score: row.text_score,
192
+ }));
193
+ // <bonescript:ext:hybrid_search:end>
194
+ }
195
+ exports.hybrid_search = hybrid_search;
196
+ /**
197
+ * Extension point: scan_directory
198
+ * STABLE: implementation required.
199
+ */
200
+ function scan_directory(root_path, ignore_patterns) {
201
+ // <bonescript:ext:scan_directory:begin>
202
+ const DEFAULT_IGNORE = [
203
+ "node_modules", ".git", "dist", "build", ".next", "__pycache__",
204
+ ".venv", "venv", "target", "vendor", ".cache", "coverage",
205
+ ...(ignore_patterns || []),
206
+ ];
207
+ const SUPPORTED_EXTS = new Set([
208
+ ".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs",
209
+ ".py", ".go", ".rs", ".java", ".kt", ".cs", ".cpp", ".c", ".h",
210
+ ".rb", ".php", ".swift", ".scala", ".r", ".sql",
211
+ ".md", ".mdx", ".json", ".yaml", ".yml", ".toml",
212
+ ".graphql", ".gql", ".proto",
213
+ ]);
214
+ const MAX_FILE_SIZE = 500 * 1024; // 500KB
215
+ const results = [];
216
+ function walk(dir) {
217
+ let entries;
218
+ try {
219
+ entries = fs.readdirSync(dir, { withFileTypes: true });
220
+ }
221
+ catch {
222
+ return;
223
+ }
224
+ for (const entry of entries) {
225
+ if (DEFAULT_IGNORE.some(ig => entry.name === ig || entry.name.startsWith(".")))
226
+ continue;
227
+ const fullPath = path.join(dir, entry.name);
228
+ if (entry.isDirectory()) {
229
+ walk(fullPath);
230
+ }
231
+ else if (entry.isFile()) {
232
+ const ext = path.extname(entry.name).toLowerCase();
233
+ if (!SUPPORTED_EXTS.has(ext))
234
+ continue;
235
+ try {
236
+ const stat = fs.statSync(fullPath);
237
+ if (stat.size > MAX_FILE_SIZE)
238
+ continue;
239
+ results.push(fullPath);
240
+ }
241
+ catch {
242
+ continue;
243
+ }
244
+ }
245
+ }
246
+ }
247
+ walk(root_path);
248
+ return results;
249
+ // <bonescript:ext:scan_directory:end>
250
+ }
251
+ exports.scan_directory = scan_directory;
252
+ /**
253
+ * Extension point: detect_language
254
+ * Optional.
255
+ */
256
+ function detect_language(file_path) {
257
+ // <bonescript:ext:detect_language:begin>
258
+ const ext = path.extname(file_path).toLowerCase();
259
+ const base = path.basename(file_path).toLowerCase();
260
+ if (base === "dockerfile")
261
+ return "dockerfile";
262
+ if (base === "makefile")
263
+ return "makefile";
264
+ const map = {
265
+ ".ts": "typescript", ".tsx": "typescript",
266
+ ".js": "javascript", ".jsx": "javascript", ".mjs": "javascript", ".cjs": "javascript",
267
+ ".py": "python", ".go": "go", ".rs": "rust", ".java": "java",
268
+ ".kt": "kotlin", ".cs": "csharp", ".cpp": "cpp", ".c": "c", ".h": "cpp",
269
+ ".rb": "ruby", ".php": "php", ".swift": "swift", ".scala": "scala",
270
+ ".sql": "sql", ".sh": "bash", ".bash": "bash",
271
+ ".md": "markdown", ".mdx": "markdown",
272
+ ".json": "json", ".yaml": "yaml", ".yml": "yaml", ".toml": "toml",
273
+ ".graphql": "graphql", ".gql": "graphql", ".proto": "protobuf",
274
+ };
275
+ return map[ext] || "text";
276
+ // <bonescript:ext:detect_language:end>
277
+ }
278
+ exports.detect_language = detect_language;
279
+ /**
280
+ * Extension point: bulk_insert_chunks
281
+ * STABLE: implementation required.
282
+ * Inserts all chunks for a file in a single parameterized query.
283
+ * Returns the number of chunks inserted.
284
+ */
285
+ async function bulk_insert_chunks(chunks) {
286
+ // <bonescript:ext:bulk_insert_chunks:begin>
287
+ if (chunks.length === 0)
288
+ return 0;
289
+ // Build a single multi-row INSERT for all chunks
290
+ const values = [];
291
+ const placeholders = chunks.map((c, i) => {
292
+ const base = i * 12;
293
+ const embStr = c.embedding ? "[" + c.embedding.join(",") + "]" : null;
294
+ values.push(c.id, c.code_file_id, c.knowledge_base_id, c.project_id, c.content, c.start_line, c.end_line, c.chunk_index, c.language, c.symbol_name || null, c.symbol_type || null, embStr);
295
+ return `($${base + 1},$${base + 2},$${base + 3},$${base + 4},$${base + 5},$${base + 6},$${base + 7},$${base + 8},$${base + 9},$${base + 10},$${base + 11},$${base + 12}::vector)`;
296
+ });
297
+ await db_1.pool.query(`INSERT INTO code_chunks
298
+ (id, code_file_id, knowledge_base_id, project_id, content, start_line, end_line,
299
+ chunk_index, language, symbol_name, symbol_type, embedding)
300
+ VALUES ${placeholders.join(",")}
301
+ ON CONFLICT DO NOTHING`, values);
302
+ (0, metrics_1.counter)("rag.chunks.inserted", { count: String(chunks.length) });
303
+ return chunks.length;
304
+ // <bonescript:ext:bulk_insert_chunks:end>
305
+ }
306
+ exports.bulk_insert_chunks = bulk_insert_chunks;
307
+ /**
308
+ * Extension point: read_file_async
309
+ * STABLE: implementation required.
310
+ * Reads a file and returns its content, hash, size, and mtime.
311
+ */
312
+ async function read_file_async(file_path) {
313
+ // <bonescript:ext:read_file_async:begin>
314
+ const fsPromises = require("fs/promises");
315
+ try {
316
+ const [content, stat] = await Promise.all([
317
+ fsPromises.readFile(file_path, "utf-8"),
318
+ fsPromises.stat(file_path),
319
+ ]);
320
+ const hash = require("crypto").createHash("sha256").update(content).digest("hex");
321
+ return { content, hash, size: stat.size, mtime: new Date(stat.mtimeMs).toISOString() };
322
+ }
323
+ catch {
324
+ return null; // File unreadable — skip
325
+ }
326
+ // <bonescript:ext:read_file_async:end>
327
+ }
328
+ exports.read_file_async = read_file_async;
329
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../../../bone/output/rag/src/extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface FlowStep {
2
+ name: string;
3
+ action: (ctx: any) => Promise<void>;
4
+ compensation: ((ctx: any) => Promise<void>) | null;
5
+ }
6
+ export interface FlowResult {
7
+ ok: boolean;
8
+ failed_step?: string;
9
+ compensated: string[];
10
+ error?: string;
11
+ }
12
+ export declare function executeFlow(name: string, steps: FlowStep[], ctx: any): Promise<FlowResult>;
13
+ export declare function execute_ingest_codebase_pipeline(ctx: {
14
+ req: any;
15
+ res: any;
16
+ auth: any;
17
+ client?: any;
18
+ }): Promise<FlowResult>;
19
+ export declare function execute_reindex_file_pipeline(ctx: {
20
+ req: any;
21
+ res: any;
22
+ auth: any;
23
+ client?: any;
24
+ }): Promise<FlowResult>;
@@ -0,0 +1,236 @@
1
+ "use strict";
2
+ // Generated by BoneScript compiler. DO NOT EDIT.
3
+ // Saga runtime — implements flow declarations with backward compensation.
4
+ //
5
+ // On step failure, executes compensations for ALL completed steps in reverse order.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.execute_reindex_file_pipeline = exports.execute_ingest_codebase_pipeline = exports.executeFlow = void 0;
8
+ const logger_1 = require("./logger");
9
+ const metrics_1 = require("./metrics");
10
+ async function executeFlow(name, steps, ctx) {
11
+ const completed = [];
12
+ for (const step of steps) {
13
+ try {
14
+ logger_1.logger.info("flow_step_started", { event: name + "." + step.name });
15
+ await step.action(ctx);
16
+ completed.push({ step: step.name, compensation: step.compensation });
17
+ (0, metrics_1.counter)("flow.step_completed", { flow: name, step: step.name });
18
+ }
19
+ catch (e) {
20
+ logger_1.logger.error("flow_step_failed", { event: name + "." + step.name, metadata: { error: e.message } });
21
+ (0, metrics_1.counter)("flow.step_failed", { flow: name, step: step.name });
22
+ // Backward compensation in reverse order
23
+ const compensated = [];
24
+ for (const c of [...completed].reverse()) {
25
+ if (!c.compensation)
26
+ continue;
27
+ try {
28
+ await c.compensation(ctx);
29
+ compensated.push(c.step);
30
+ logger_1.logger.info("flow_compensated", { event: name + "." + c.step });
31
+ }
32
+ catch (compErr) {
33
+ logger_1.logger.error("flow_compensation_failed", { event: name + "." + c.step, metadata: { error: compErr.message } });
34
+ // Continue with other compensations even if one fails
35
+ }
36
+ }
37
+ return { ok: false, failed_step: step.name, compensated, error: e.message };
38
+ }
39
+ }
40
+ (0, metrics_1.counter)("flow.completed", { flow: name });
41
+ return { ok: true, compensated: [] };
42
+ }
43
+ exports.executeFlow = executeFlow;
44
+ // Flow: ingest_codebase_pipeline
45
+ // ctx must contain: { req, res, auth, client? } for transactional flows
46
+ async function execute_ingest_codebase_pipeline(ctx) {
47
+ const steps = [
48
+ {
49
+ name: "scan",
50
+ action: async (ctx) => {
51
+ // Calls capability: scan_directory(knowledge_base, root_path)
52
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/scan-directory`, {
53
+ method: "POST",
54
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
55
+ body: JSON.stringify(ctx.req.body),
56
+ });
57
+ if (!response.ok)
58
+ throw new Error(`Step scan failed: ${await response.text()}`);
59
+ ctx.scan_result = await response.json();
60
+ },
61
+ compensation: async (ctx) => {
62
+ // Compensates: mark_kb_error(knowledge_base)
63
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/mark-kb-error`, {
64
+ method: "POST",
65
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
66
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
67
+ });
68
+ },
69
+ },
70
+ {
71
+ name: "chunk",
72
+ action: async (ctx) => {
73
+ // Calls capability: chunk_all_files(knowledge_base, file_list)
74
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/chunk-all-files`, {
75
+ method: "POST",
76
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
77
+ body: JSON.stringify(ctx.req.body),
78
+ });
79
+ if (!response.ok)
80
+ throw new Error(`Step chunk failed: ${await response.text()}`);
81
+ ctx.chunk_result = await response.json();
82
+ },
83
+ compensation: async (ctx) => {
84
+ // Compensates: delete_partial_chunks(knowledge_base)
85
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/delete-partial-chunks`, {
86
+ method: "POST",
87
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
88
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
89
+ });
90
+ },
91
+ },
92
+ {
93
+ name: "embed",
94
+ action: async (ctx) => {
95
+ // Calls capability: embed_all_chunks(knowledge_base)
96
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/embed-all-chunks`, {
97
+ method: "POST",
98
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
99
+ body: JSON.stringify(ctx.req.body),
100
+ });
101
+ if (!response.ok)
102
+ throw new Error(`Step embed failed: ${await response.text()}`);
103
+ ctx.embed_result = await response.json();
104
+ },
105
+ compensation: async (ctx) => {
106
+ // Compensates: delete_embeddings(knowledge_base)
107
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/delete-embeddings`, {
108
+ method: "POST",
109
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
110
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
111
+ });
112
+ },
113
+ },
114
+ {
115
+ name: "finalize",
116
+ action: async (ctx) => {
117
+ // Calls capability: mark_kb_ready(knowledge_base)
118
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/mark-kb-ready`, {
119
+ method: "POST",
120
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
121
+ body: JSON.stringify(ctx.req.body),
122
+ });
123
+ if (!response.ok)
124
+ throw new Error(`Step finalize failed: ${await response.text()}`);
125
+ ctx.finalize_result = await response.json();
126
+ },
127
+ compensation: async (ctx) => {
128
+ // Compensates: mark_kb_error(knowledge_base)
129
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/mark-kb-error`, {
130
+ method: "POST",
131
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
132
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
133
+ });
134
+ },
135
+ },
136
+ ];
137
+ return executeFlow("ingest_codebase_pipeline", steps, ctx);
138
+ }
139
+ exports.execute_ingest_codebase_pipeline = execute_ingest_codebase_pipeline;
140
+ // Flow: reindex_file_pipeline
141
+ // ctx must contain: { req, res, auth, client? } for transactional flows
142
+ async function execute_reindex_file_pipeline(ctx) {
143
+ const steps = [
144
+ {
145
+ name: "delete_old",
146
+ action: async (ctx) => {
147
+ // Calls capability: delete_file_chunks(knowledge_base, file_path)
148
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/delete-file-chunks`, {
149
+ method: "POST",
150
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
151
+ body: JSON.stringify(ctx.req.body),
152
+ });
153
+ if (!response.ok)
154
+ throw new Error(`Step delete_old failed: ${await response.text()}`);
155
+ ctx.delete_old_result = await response.json();
156
+ },
157
+ compensation: async (ctx) => {
158
+ // Compensates: restore_old_chunks(knowledge_base, file_path)
159
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/restore-old-chunks`, {
160
+ method: "POST",
161
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
162
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
163
+ });
164
+ },
165
+ },
166
+ {
167
+ name: "chunk",
168
+ action: async (ctx) => {
169
+ // Calls capability: chunk_file_for_index(knowledge_base, file_path)
170
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/chunk-file-for-index`, {
171
+ method: "POST",
172
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
173
+ body: JSON.stringify(ctx.req.body),
174
+ });
175
+ if (!response.ok)
176
+ throw new Error(`Step chunk failed: ${await response.text()}`);
177
+ ctx.chunk_result = await response.json();
178
+ },
179
+ compensation: async (ctx) => {
180
+ // Compensates: delete_new_chunks(knowledge_base, file_path)
181
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/delete-new-chunks`, {
182
+ method: "POST",
183
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
184
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
185
+ });
186
+ },
187
+ },
188
+ {
189
+ name: "embed",
190
+ action: async (ctx) => {
191
+ // Calls capability: embed_file_chunks(knowledge_base, file_path)
192
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/embed-file-chunks`, {
193
+ method: "POST",
194
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
195
+ body: JSON.stringify(ctx.req.body),
196
+ });
197
+ if (!response.ok)
198
+ throw new Error(`Step embed failed: ${await response.text()}`);
199
+ ctx.embed_result = await response.json();
200
+ },
201
+ compensation: async (ctx) => {
202
+ // Compensates: delete_new_embeddings(knowledge_base, file_path)
203
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/delete-new-embeddings`, {
204
+ method: "POST",
205
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
206
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
207
+ });
208
+ },
209
+ },
210
+ {
211
+ name: "update",
212
+ action: async (ctx) => {
213
+ // Calls capability: update_file_record(knowledge_base, file_path)
214
+ const response = await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/update-file-record`, {
215
+ method: "POST",
216
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
217
+ body: JSON.stringify(ctx.req.body),
218
+ });
219
+ if (!response.ok)
220
+ throw new Error(`Step update failed: ${await response.text()}`);
221
+ ctx.update_result = await response.json();
222
+ },
223
+ compensation: async (ctx) => {
224
+ // Compensates: restore_old_file_record(knowledge_base, file_path)
225
+ await fetch(`${process.env.SERVICE_BASE_URL || "http://localhost:3000"}/restore-old-file-record`, {
226
+ method: "POST",
227
+ headers: { "Content-Type": "application/json", "Authorization": ctx.req.headers.authorization || "" },
228
+ body: JSON.stringify({ ...ctx.req.body, _compensating: true }),
229
+ });
230
+ },
231
+ },
232
+ ];
233
+ return executeFlow("reindex_file_pipeline", steps, ctx);
234
+ }
235
+ exports.execute_reindex_file_pipeline = execute_reindex_file_pipeline;
236
+ //# sourceMappingURL=flows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flows.js","sourceRoot":"","sources":["../../../../../bone/output/rag/src/flows.ts"],"names":[],"mappings":"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"}