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,24 @@
1
+ /**
2
+ * BoneCode Extension: Code Chunker
3
+ *
4
+ * Implements the chunk_file extension point from rag.bone.
5
+ * Supports multiple chunking strategies:
6
+ * - ast: Parse the file's AST and chunk by top-level symbols
7
+ * - sliding_window: Fixed-size overlapping windows
8
+ * - semantic: Paragraph/section-aware splitting
9
+ * - line_based: Simple line-count windows
10
+ *
11
+ * This file is preserved across BoneScript recompilation.
12
+ */
13
+ export interface CodeChunkResult {
14
+ content: string;
15
+ start_line: number;
16
+ end_line: number;
17
+ chunk_index: number;
18
+ symbol_name?: string;
19
+ symbol_type?: string;
20
+ language?: string;
21
+ metadata?: Record<string, unknown>;
22
+ }
23
+ export declare function detect_language(file_path: string): string;
24
+ export declare function chunk_file(file_path: string, content: string, strategy: string, chunk_size: number, overlap: number): CodeChunkResult[];
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+ /**
3
+ * BoneCode Extension: Code Chunker
4
+ *
5
+ * Implements the chunk_file extension point from rag.bone.
6
+ * Supports multiple chunking strategies:
7
+ * - ast: Parse the file's AST and chunk by top-level symbols
8
+ * - sliding_window: Fixed-size overlapping windows
9
+ * - semantic: Paragraph/section-aware splitting
10
+ * - line_based: Simple line-count windows
11
+ *
12
+ * This file is preserved across BoneScript recompilation.
13
+ */
14
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ var desc = Object.getOwnPropertyDescriptor(m, k);
17
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
+ desc = { enumerable: true, get: function() { return m[k]; } };
19
+ }
20
+ Object.defineProperty(o, k2, desc);
21
+ }) : (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ o[k2] = m[k];
24
+ }));
25
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
27
+ }) : function(o, v) {
28
+ o["default"] = v;
29
+ });
30
+ var __importStar = (this && this.__importStar) || function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ exports.chunk_file = exports.detect_language = void 0;
39
+ const path = __importStar(require("path"));
40
+ const logger_1 = require("../bone/output/session/src/logger");
41
+ // ─── Language Detection ───────────────────────────────────────────────────────
42
+ // <bonescript:ext:detect_language:begin>
43
+ function detect_language(file_path) {
44
+ const ext = path.extname(file_path).toLowerCase();
45
+ const langMap = {
46
+ ".ts": "typescript", ".tsx": "typescript",
47
+ ".js": "javascript", ".jsx": "javascript", ".mjs": "javascript", ".cjs": "javascript",
48
+ ".py": "python",
49
+ ".go": "go",
50
+ ".rs": "rust",
51
+ ".java": "java",
52
+ ".kt": "kotlin",
53
+ ".cs": "csharp",
54
+ ".cpp": "cpp", ".cc": "cpp", ".cxx": "cpp", ".h": "cpp", ".hpp": "cpp",
55
+ ".c": "c",
56
+ ".rb": "ruby",
57
+ ".php": "php",
58
+ ".swift": "swift",
59
+ ".scala": "scala",
60
+ ".r": "r",
61
+ ".sql": "sql",
62
+ ".sh": "bash", ".bash": "bash", ".zsh": "bash",
63
+ ".md": "markdown", ".mdx": "markdown",
64
+ ".json": "json",
65
+ ".yaml": "yaml", ".yml": "yaml",
66
+ ".toml": "toml",
67
+ ".xml": "xml",
68
+ ".html": "html", ".htm": "html",
69
+ ".css": "css", ".scss": "css", ".sass": "css", ".less": "css",
70
+ ".graphql": "graphql", ".gql": "graphql",
71
+ ".proto": "protobuf",
72
+ ".tf": "terraform", ".hcl": "terraform",
73
+ ".dockerfile": "dockerfile",
74
+ };
75
+ const basename = path.basename(file_path).toLowerCase();
76
+ if (basename === "dockerfile")
77
+ return "dockerfile";
78
+ if (basename === "makefile")
79
+ return "makefile";
80
+ return langMap[ext] || "text";
81
+ }
82
+ exports.detect_language = detect_language;
83
+ // <bonescript:ext:detect_language:end>
84
+ // ─── Main Chunker ─────────────────────────────────────────────────────────────
85
+ // <bonescript:ext:chunk_file:begin>
86
+ function chunk_file(file_path, content, strategy, chunk_size, overlap) {
87
+ const language = detect_language(file_path);
88
+ try {
89
+ switch (strategy) {
90
+ case "ast":
91
+ return chunkByAST(content, language, chunk_size, overlap);
92
+ case "sliding_window":
93
+ return chunkBySlidingWindow(content, chunk_size, overlap);
94
+ case "semantic":
95
+ return chunkBySemantic(content, language, chunk_size, overlap);
96
+ case "line_based":
97
+ default:
98
+ return chunkByLines(content, chunk_size, overlap);
99
+ }
100
+ }
101
+ catch (e) {
102
+ logger_1.logger.error("chunk_file_failed", {
103
+ event: "chunk",
104
+ metadata: { error: e.message, file_path, strategy },
105
+ });
106
+ // Fall back to line-based chunking on error
107
+ return chunkByLines(content, chunk_size, overlap);
108
+ }
109
+ }
110
+ exports.chunk_file = chunk_file;
111
+ // <bonescript:ext:chunk_file:end>
112
+ // ─── Chunking Strategies ──────────────────────────────────────────────────────
113
+ /**
114
+ * AST-based chunking: splits at top-level symbol boundaries.
115
+ * For TypeScript/JavaScript, splits at function/class/interface declarations.
116
+ * Falls back to sliding window for unsupported languages.
117
+ */
118
+ function chunkByAST(content, language, chunkSize, overlap) {
119
+ const lines = content.split("\n");
120
+ // Simple regex-based symbol detection (production would use tree-sitter)
121
+ const symbolPatterns = {
122
+ typescript: [
123
+ /^(export\s+)?(async\s+)?function\s+(\w+)/,
124
+ /^(export\s+)?(abstract\s+)?class\s+(\w+)/,
125
+ /^(export\s+)?interface\s+(\w+)/,
126
+ /^(export\s+)?type\s+(\w+)/,
127
+ /^(export\s+)?const\s+(\w+)\s*=/,
128
+ /^(export\s+)?enum\s+(\w+)/,
129
+ ],
130
+ javascript: [
131
+ /^(export\s+)?(async\s+)?function\s+(\w+)/,
132
+ /^(export\s+)?class\s+(\w+)/,
133
+ /^(export\s+)?const\s+(\w+)\s*=/,
134
+ ],
135
+ python: [
136
+ /^(async\s+)?def\s+(\w+)/,
137
+ /^class\s+(\w+)/,
138
+ ],
139
+ go: [
140
+ /^func\s+(\w+)/,
141
+ /^type\s+(\w+)\s+struct/,
142
+ /^type\s+(\w+)\s+interface/,
143
+ ],
144
+ };
145
+ const patterns = symbolPatterns[language] || symbolPatterns.typescript;
146
+ const chunks = [];
147
+ let currentStart = 0;
148
+ let currentLines = [];
149
+ let currentSymbol = null;
150
+ let chunkIndex = 0;
151
+ for (let i = 0; i < lines.length; i++) {
152
+ const line = lines[i];
153
+ let isSymbolStart = false;
154
+ let symbolName = "";
155
+ let symbolType = "";
156
+ for (const pattern of patterns) {
157
+ const match = line.match(pattern);
158
+ if (match) {
159
+ isSymbolStart = true;
160
+ symbolName = match[match.length - 1] || "";
161
+ symbolType = detectSymbolType(line);
162
+ break;
163
+ }
164
+ }
165
+ if (isSymbolStart && currentLines.length > 0) {
166
+ // Flush current chunk
167
+ const chunkContent = currentLines.join("\n");
168
+ if (chunkContent.trim().length > 0) {
169
+ chunks.push({
170
+ content: chunkContent,
171
+ start_line: currentStart + 1,
172
+ end_line: currentStart + currentLines.length,
173
+ chunk_index: chunkIndex++,
174
+ symbol_name: currentSymbol?.name,
175
+ symbol_type: currentSymbol?.type,
176
+ language,
177
+ });
178
+ }
179
+ // Start new chunk with overlap
180
+ const overlapLines = Math.floor(overlap / 80); // approximate lines from char count
181
+ currentStart = Math.max(0, i - overlapLines);
182
+ currentLines = lines.slice(currentStart, i);
183
+ currentSymbol = { name: symbolName, type: symbolType };
184
+ }
185
+ currentLines.push(line);
186
+ // Also split if chunk is getting too large (by character count)
187
+ const currentCharCount = currentLines.join("\n").length;
188
+ if (currentCharCount > chunkSize && currentLines.length > 10) {
189
+ const chunkContent = currentLines.join("\n");
190
+ chunks.push({
191
+ content: chunkContent,
192
+ start_line: currentStart + 1,
193
+ end_line: currentStart + currentLines.length,
194
+ chunk_index: chunkIndex++,
195
+ symbol_name: currentSymbol?.name,
196
+ symbol_type: currentSymbol?.type,
197
+ language,
198
+ });
199
+ const overlapLines = Math.floor(overlap / 80);
200
+ currentStart = currentStart + currentLines.length - overlapLines;
201
+ currentLines = currentLines.slice(-overlapLines);
202
+ currentSymbol = null;
203
+ }
204
+ }
205
+ // Flush remaining
206
+ if (currentLines.length > 0 && currentLines.join("\n").trim().length > 0) {
207
+ chunks.push({
208
+ content: currentLines.join("\n"),
209
+ start_line: currentStart + 1,
210
+ end_line: currentStart + currentLines.length,
211
+ chunk_index: chunkIndex++,
212
+ symbol_name: currentSymbol?.name,
213
+ symbol_type: currentSymbol?.type,
214
+ language,
215
+ });
216
+ }
217
+ return chunks.length > 0 ? chunks : chunkByLines(content, chunkSize, overlap);
218
+ }
219
+ /**
220
+ * Sliding window chunking: fixed-size overlapping character windows.
221
+ */
222
+ function chunkBySlidingWindow(content, chunkSize, overlap) {
223
+ const chunks = [];
224
+ const lines = content.split("\n");
225
+ let charPos = 0;
226
+ let linePos = 0;
227
+ let chunkIndex = 0;
228
+ while (charPos < content.length) {
229
+ const end = Math.min(charPos + chunkSize, content.length);
230
+ const chunkContent = content.slice(charPos, end);
231
+ // Count lines in this chunk
232
+ const chunkLines = chunkContent.split("\n");
233
+ const startLine = linePos + 1;
234
+ const endLine = linePos + chunkLines.length;
235
+ chunks.push({
236
+ content: chunkContent,
237
+ start_line: startLine,
238
+ end_line: endLine,
239
+ chunk_index: chunkIndex++,
240
+ });
241
+ if (end >= content.length)
242
+ break;
243
+ // Advance by (chunkSize - overlap) characters
244
+ const advance = chunkSize - overlap;
245
+ const advancedContent = content.slice(charPos, charPos + advance);
246
+ const advancedLines = advancedContent.split("\n").length - 1;
247
+ linePos += advancedLines;
248
+ charPos += advance;
249
+ }
250
+ return chunks;
251
+ }
252
+ /**
253
+ * Semantic chunking: splits at paragraph/section boundaries.
254
+ * Good for markdown, documentation, and prose-heavy files.
255
+ */
256
+ function chunkBySemantic(content, language, chunkSize, overlap) {
257
+ if (language === "markdown") {
258
+ return chunkMarkdown(content, chunkSize, overlap);
259
+ }
260
+ // For code, fall back to AST chunking
261
+ return chunkByAST(content, language, chunkSize, overlap);
262
+ }
263
+ function chunkMarkdown(content, chunkSize, overlap) {
264
+ const chunks = [];
265
+ const lines = content.split("\n");
266
+ let currentLines = [];
267
+ let currentStart = 0;
268
+ let chunkIndex = 0;
269
+ for (let i = 0; i < lines.length; i++) {
270
+ const line = lines[i];
271
+ const isHeading = /^#{1,6}\s/.test(line);
272
+ if (isHeading && currentLines.length > 0) {
273
+ const chunkContent = currentLines.join("\n");
274
+ if (chunkContent.trim().length > 0) {
275
+ chunks.push({
276
+ content: chunkContent,
277
+ start_line: currentStart + 1,
278
+ end_line: currentStart + currentLines.length,
279
+ chunk_index: chunkIndex++,
280
+ symbol_type: "block",
281
+ });
282
+ }
283
+ currentStart = i;
284
+ currentLines = [];
285
+ }
286
+ currentLines.push(line);
287
+ if (currentLines.join("\n").length > chunkSize) {
288
+ const chunkContent = currentLines.join("\n");
289
+ chunks.push({
290
+ content: chunkContent,
291
+ start_line: currentStart + 1,
292
+ end_line: currentStart + currentLines.length,
293
+ chunk_index: chunkIndex++,
294
+ symbol_type: "block",
295
+ });
296
+ const overlapLines = Math.max(1, Math.floor(overlap / 80));
297
+ currentStart = currentStart + currentLines.length - overlapLines;
298
+ currentLines = currentLines.slice(-overlapLines);
299
+ }
300
+ }
301
+ if (currentLines.length > 0 && currentLines.join("\n").trim().length > 0) {
302
+ chunks.push({
303
+ content: currentLines.join("\n"),
304
+ start_line: currentStart + 1,
305
+ end_line: currentStart + currentLines.length,
306
+ chunk_index: chunkIndex++,
307
+ symbol_type: "block",
308
+ });
309
+ }
310
+ return chunks;
311
+ }
312
+ /**
313
+ * Line-based chunking: simple fixed line-count windows.
314
+ */
315
+ function chunkByLines(content, chunkSize, overlap) {
316
+ const lines = content.split("\n");
317
+ const linesPerChunk = Math.max(10, Math.floor(chunkSize / 80)); // ~80 chars/line
318
+ const overlapLines = Math.max(0, Math.floor(overlap / 80));
319
+ const chunks = [];
320
+ let chunkIndex = 0;
321
+ for (let i = 0; i < lines.length; i += linesPerChunk - overlapLines) {
322
+ const end = Math.min(i + linesPerChunk, lines.length);
323
+ const chunkLines = lines.slice(i, end);
324
+ const chunkContent = chunkLines.join("\n");
325
+ if (chunkContent.trim().length > 0) {
326
+ chunks.push({
327
+ content: chunkContent,
328
+ start_line: i + 1,
329
+ end_line: end,
330
+ chunk_index: chunkIndex++,
331
+ });
332
+ }
333
+ if (end >= lines.length)
334
+ break;
335
+ }
336
+ return chunks;
337
+ }
338
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
339
+ function detectSymbolType(line) {
340
+ if (/\bfunction\b/.test(line))
341
+ return "function";
342
+ if (/\bclass\b/.test(line))
343
+ return "class";
344
+ if (/\binterface\b/.test(line))
345
+ return "interface";
346
+ if (/\btype\b/.test(line))
347
+ return "type";
348
+ if (/\benum\b/.test(line))
349
+ return "type";
350
+ if (/\bconst\b|\blet\b|\bvar\b/.test(line))
351
+ return "variable";
352
+ if (/\bimport\b/.test(line))
353
+ return "import";
354
+ if (/\bdef\b/.test(line))
355
+ return "function";
356
+ if (/\bstruct\b/.test(line))
357
+ return "class";
358
+ return "block";
359
+ }
360
+ //# sourceMappingURL=chunker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunker.js","sourceRoot":"","sources":["../../extensions/chunker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * BoneCode Extension: Embedding Provider
3
+ *
4
+ * Implements the embed_text and embed_batch extension points from rag.bone.
5
+ * Supports OpenAI, Ollama, Voyage AI, and any OpenAI-compatible endpoint.
6
+ *
7
+ * This file is preserved across BoneScript recompilation.
8
+ */
9
+ export type EmbeddingProvider = "openai" | "ollama" | "voyage" | "openai_compatible";
10
+ export interface EmbeddingConfig {
11
+ provider: EmbeddingProvider;
12
+ model: string;
13
+ apiKey?: string;
14
+ baseUrl?: string;
15
+ dimensions?: number;
16
+ }
17
+ export declare function embed_text(text: string, model: string): Promise<number[]>;
18
+ export declare function embed_batch(texts: string[], model: string): Promise<number[][]>;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * BoneCode Extension: Embedding Provider
4
+ *
5
+ * Implements the embed_text and embed_batch extension points from rag.bone.
6
+ * Supports OpenAI, Ollama, Voyage AI, and any OpenAI-compatible endpoint.
7
+ *
8
+ * This file is preserved across BoneScript recompilation.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.embed_batch = exports.embed_text = void 0;
12
+ const logger_1 = require("../bone/output/session/src/logger");
13
+ const metrics_1 = require("../bone/output/session/src/metrics");
14
+ function getConfig() {
15
+ const provider = (process.env.EMBEDDING_PROVIDER || "openai");
16
+ return {
17
+ provider,
18
+ model: process.env.EMBEDDING_MODEL || "text-embedding-3-small",
19
+ apiKey: process.env.EMBEDDING_API_KEY || process.env.OPENAI_API_KEY || "not-needed",
20
+ baseUrl: process.env.EMBEDDING_BASE_URL || process.env.OPENAI_BASE_URL,
21
+ dimensions: parseInt(process.env.EMBEDDING_DIMENSIONS || "1536"),
22
+ };
23
+ }
24
+ // ─── Single Embedding ─────────────────────────────────────────────────────────
25
+ // <bonescript:ext:embed_text:begin>
26
+ async function embed_text(text, model) {
27
+ const config = getConfig();
28
+ const effectiveModel = model || config.model;
29
+ try {
30
+ const embedding = await callEmbeddingAPI([text], effectiveModel, config);
31
+ (0, metrics_1.counter)("rag.embed.single", { provider: config.provider, model: effectiveModel });
32
+ return embedding[0];
33
+ }
34
+ catch (e) {
35
+ logger_1.logger.error("embed_text_failed", { event: "embed", metadata: { error: e.message, model: effectiveModel } });
36
+ throw e;
37
+ }
38
+ }
39
+ exports.embed_text = embed_text;
40
+ // <bonescript:ext:embed_text:end>
41
+ // ─── Batch Embedding ──────────────────────────────────────────────────────────
42
+ // <bonescript:ext:embed_batch:begin>
43
+ async function embed_batch(texts, model) {
44
+ const config = getConfig();
45
+ const effectiveModel = model || config.model;
46
+ if (texts.length === 0)
47
+ return [];
48
+ // Batch in chunks of 100 to respect API limits
49
+ const BATCH_SIZE = 100;
50
+ const results = [];
51
+ for (let i = 0; i < texts.length; i += BATCH_SIZE) {
52
+ const batch = texts.slice(i, i + BATCH_SIZE);
53
+ try {
54
+ const embeddings = await callEmbeddingAPI(batch, effectiveModel, config);
55
+ results.push(...embeddings);
56
+ (0, metrics_1.counter)("rag.embed.batch", {
57
+ provider: config.provider,
58
+ model: effectiveModel,
59
+ count: String(batch.length),
60
+ });
61
+ }
62
+ catch (e) {
63
+ logger_1.logger.error("embed_batch_failed", {
64
+ event: "embed_batch",
65
+ metadata: { error: e.message, batch_start: i, batch_size: batch.length },
66
+ });
67
+ throw e;
68
+ }
69
+ }
70
+ return results;
71
+ }
72
+ exports.embed_batch = embed_batch;
73
+ // <bonescript:ext:embed_batch:end>
74
+ // ─── Provider Implementations ─────────────────────────────────────────────────
75
+ async function callEmbeddingAPI(texts, model, config) {
76
+ switch (config.provider) {
77
+ case "openai":
78
+ case "openai_compatible":
79
+ return callOpenAIEmbedding(texts, model, config);
80
+ case "ollama":
81
+ return callOllamaEmbedding(texts, model, config);
82
+ case "voyage":
83
+ return callVoyageEmbedding(texts, model, config);
84
+ default:
85
+ throw new Error(`Unknown embedding provider: ${config.provider}`);
86
+ }
87
+ }
88
+ async function callOpenAIEmbedding(texts, model, config) {
89
+ const baseUrl = config.baseUrl || "https://api.openai.com/v1";
90
+ const response = await fetch(`${baseUrl}/embeddings`, {
91
+ method: "POST",
92
+ headers: {
93
+ "Content-Type": "application/json",
94
+ Authorization: `Bearer ${config.apiKey}`,
95
+ },
96
+ body: JSON.stringify({
97
+ input: texts,
98
+ model,
99
+ encoding_format: "float",
100
+ ...(config.dimensions ? { dimensions: config.dimensions } : {}),
101
+ }),
102
+ });
103
+ if (!response.ok) {
104
+ const err = await response.text();
105
+ throw new Error(`OpenAI embedding API error ${response.status}: ${err}`);
106
+ }
107
+ const data = await response.json();
108
+ // Sort by index to maintain order
109
+ return data.data.sort((a, b) => a.index - b.index).map((d) => d.embedding);
110
+ }
111
+ async function callOllamaEmbedding(texts, model, config) {
112
+ const baseUrl = config.baseUrl || "http://localhost:11434";
113
+ // Ollama doesn't support batch embedding natively — call sequentially
114
+ const results = [];
115
+ for (const text of texts) {
116
+ const response = await fetch(`${baseUrl}/api/embeddings`, {
117
+ method: "POST",
118
+ headers: { "Content-Type": "application/json" },
119
+ body: JSON.stringify({ model, prompt: text }),
120
+ });
121
+ if (!response.ok) {
122
+ const err = await response.text();
123
+ throw new Error(`Ollama embedding error ${response.status}: ${err}`);
124
+ }
125
+ const data = await response.json();
126
+ results.push(data.embedding);
127
+ }
128
+ return results;
129
+ }
130
+ async function callVoyageEmbedding(texts, model, config) {
131
+ const response = await fetch("https://api.voyageai.com/v1/embeddings", {
132
+ method: "POST",
133
+ headers: {
134
+ "Content-Type": "application/json",
135
+ Authorization: `Bearer ${config.apiKey}`,
136
+ },
137
+ body: JSON.stringify({
138
+ input: texts,
139
+ model: model || "voyage-code-2",
140
+ input_type: "document",
141
+ }),
142
+ });
143
+ if (!response.ok) {
144
+ const err = await response.text();
145
+ throw new Error(`Voyage embedding error ${response.status}: ${err}`);
146
+ }
147
+ const data = await response.json();
148
+ return data.data.sort((a, b) => a.index - b.index).map((d) => d.embedding);
149
+ }
150
+ //# sourceMappingURL=embedding_provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding_provider.js","sourceRoot":"","sources":["../../extensions/embedding_provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * BoneCode Extension: LLM Provider
3
+ *
4
+ * Implements the LLM provider extension points declared in agent.bone.
5
+ * Bridges BoneCode's agent domain to the Vercel AI SDK, supporting
6
+ * Anthropic, OpenAI, Google, Ollama, and any @ai-sdk/* provider.
7
+ *
8
+ * This file is preserved across BoneScript recompilation.
9
+ * Sentinel comments mark the preserved regions.
10
+ */
11
+ export interface ProviderConfig {
12
+ apiKey?: string;
13
+ baseUrl?: string;
14
+ model: string;
15
+ temperature?: number;
16
+ maxTokens?: number;
17
+ systemPrompt?: string;
18
+ }
19
+ export interface LLMStreamChunk {
20
+ type: "text_delta" | "tool_call" | "tool_result" | "finish" | "error";
21
+ content?: string;
22
+ toolName?: string;
23
+ toolInput?: Record<string, unknown>;
24
+ toolCallId?: string;
25
+ finishReason?: string;
26
+ usage?: {
27
+ inputTokens: number;
28
+ outputTokens: number;
29
+ };
30
+ error?: string;
31
+ }
32
+ export declare function send_prompt_to_llm(session_id: string, message_id: string): Promise<Record<string, unknown>>;
33
+ export declare function cancel_llm_request(session_id: string): Promise<void>;