bonecode 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/ARCHITECTURE.md +183 -0
  2. package/README.md +71 -0
  3. package/bin/bonecode +62 -0
  4. package/bone/migrations/rag_vectors.sql +258 -0
  5. package/bone/output/agent/.dockerignore +7 -0
  6. package/bone/output/agent/.env.example +36 -0
  7. package/bone/output/agent/.github/workflows/ci.yaml +58 -0
  8. package/bone/output/agent/AgentDomain.bone.map +350 -0
  9. package/bone/output/agent/AgentDomain.postman_collection.json +958 -0
  10. package/bone/output/agent/Dockerfile +22 -0
  11. package/bone/output/agent/README.md +47 -0
  12. package/bone/output/agent/admin/index.html +740 -0
  13. package/bone/output/agent/docker-compose.yaml +22 -0
  14. package/bone/output/agent/k8s/deployment.yaml +75 -0
  15. package/bone/output/agent/migrations/agent.sql +36 -0
  16. package/bone/output/agent/migrations/agent_instance.sql +36 -0
  17. package/bone/output/agent/migrations/audit_log.sql +18 -0
  18. package/bone/output/agent/migrations/build_step.sql +34 -0
  19. package/bone/output/agent/migrations/event_outbox.sql +31 -0
  20. package/bone/output/agent/migrations/plan.sql +30 -0
  21. package/bone/output/agent/migrations/task.sql +30 -0
  22. package/bone/output/agent/migrations/tool_call.sql +33 -0
  23. package/bone/output/agent/openapi.yaml +1116 -0
  24. package/bone/output/agent/package.json +36 -0
  25. package/bone/output/agent/schema.graphql +233 -0
  26. package/bone/output/agent/sdk/client.ts +231 -0
  27. package/bone/output/agent/src/algorithms.ts +2 -0
  28. package/bone/output/agent/src/audit.ts +44 -0
  29. package/bone/output/agent/src/auth.ts +57 -0
  30. package/bone/output/agent/src/cron.ts +12 -0
  31. package/bone/output/agent/src/db.ts +32 -0
  32. package/bone/output/agent/src/debug.ts +66 -0
  33. package/bone/output/agent/src/events.ts +243 -0
  34. package/bone/output/agent/src/extensions.ts +54 -0
  35. package/bone/output/agent/src/failure_rules.ts +323 -0
  36. package/bone/output/agent/src/flows.ts +168 -0
  37. package/bone/output/agent/src/health.ts +43 -0
  38. package/bone/output/agent/src/index.ts +100 -0
  39. package/bone/output/agent/src/logger.ts +66 -0
  40. package/bone/output/agent/src/metrics.ts +75 -0
  41. package/bone/output/agent/src/migrate.ts +352 -0
  42. package/bone/output/agent/src/migration_diff.ts +108 -0
  43. package/bone/output/agent/src/notify.ts +125 -0
  44. package/bone/output/agent/src/routes/agent_instance.ts +234 -0
  45. package/bone/output/agent/src/routes/build_step.ts +105 -0
  46. package/bone/output/agent/src/routes/plan.ts +91 -0
  47. package/bone/output/agent/src/routes/task.ts +105 -0
  48. package/bone/output/agent/src/routes/tool_call.ts +166 -0
  49. package/bone/output/agent/src/schemas.ts +384 -0
  50. package/bone/output/agent/src/state_machines/agent_instance.ts +24 -0
  51. package/bone/output/agent/src/state_machines/build_step.ts +22 -0
  52. package/bone/output/agent/src/state_machines/plan.ts +22 -0
  53. package/bone/output/agent/src/state_machines/task.ts +22 -0
  54. package/bone/output/agent/src/state_machines/tool_call.ts +22 -0
  55. package/bone/output/agent/src/tests.ts +362 -0
  56. package/bone/output/agent/src/websocket.ts +201 -0
  57. package/bone/output/agent/tsconfig.json +25 -0
  58. package/bone/output/rag/.dockerignore +7 -0
  59. package/bone/output/rag/.env.example +36 -0
  60. package/bone/output/rag/.github/workflows/ci.yaml +58 -0
  61. package/bone/output/rag/Dockerfile +22 -0
  62. package/bone/output/rag/RAGDomain.bone.map +287 -0
  63. package/bone/output/rag/RAGDomain.postman_collection.json +923 -0
  64. package/bone/output/rag/README.md +47 -0
  65. package/bone/output/rag/admin/index.html +818 -0
  66. package/bone/output/rag/docker-compose.yaml +22 -0
  67. package/bone/output/rag/k8s/deployment.yaml +75 -0
  68. package/bone/output/rag/migrations/audit_log.sql +18 -0
  69. package/bone/output/rag/migrations/code_chunk.sql +34 -0
  70. package/bone/output/rag/migrations/code_file.sql +33 -0
  71. package/bone/output/rag/migrations/event_outbox.sql +31 -0
  72. package/bone/output/rag/migrations/indexing_job.sql +33 -0
  73. package/bone/output/rag/migrations/knowledge_base.sql +35 -0
  74. package/bone/output/rag/migrations/memory_entry.sql +34 -0
  75. package/bone/output/rag/openapi.yaml +1097 -0
  76. package/bone/output/rag/package.json +36 -0
  77. package/bone/output/rag/schema.graphql +245 -0
  78. package/bone/output/rag/sdk/client.ts +234 -0
  79. package/bone/output/rag/src/algorithms.ts +2 -0
  80. package/bone/output/rag/src/audit.ts +37 -0
  81. package/bone/output/rag/src/auth.ts +57 -0
  82. package/bone/output/rag/src/cron.ts +12 -0
  83. package/bone/output/rag/src/db.ts +32 -0
  84. package/bone/output/rag/src/debug.ts +66 -0
  85. package/bone/output/rag/src/events.ts +243 -0
  86. package/bone/output/rag/src/extensions.ts +350 -0
  87. package/bone/output/rag/src/failure_rules.ts +315 -0
  88. package/bone/output/rag/src/flows.ts +239 -0
  89. package/bone/output/rag/src/health.ts +43 -0
  90. package/bone/output/rag/src/index.ts +95 -0
  91. package/bone/output/rag/src/logger.ts +66 -0
  92. package/bone/output/rag/src/metrics.ts +75 -0
  93. package/bone/output/rag/src/migrate.ts +364 -0
  94. package/bone/output/rag/src/migration_diff.ts +108 -0
  95. package/bone/output/rag/src/notify.ts +99 -0
  96. package/bone/output/rag/src/routes/code_chunk.ts +75 -0
  97. package/bone/output/rag/src/routes/code_file.ts +101 -0
  98. package/bone/output/rag/src/routes/indexing_job.ts +87 -0
  99. package/bone/output/rag/src/routes/knowledge_base.ts +230 -0
  100. package/bone/output/rag/src/routes/memory_entry.ts +87 -0
  101. package/bone/output/rag/src/schemas.ts +394 -0
  102. package/bone/output/rag/src/state_machines/code_file.ts +23 -0
  103. package/bone/output/rag/src/state_machines/indexing_job.ts +22 -0
  104. package/bone/output/rag/src/state_machines/knowledge_base.ts +23 -0
  105. package/bone/output/rag/src/state_machines/memory_entry.ts +20 -0
  106. package/bone/output/rag/src/tests.ts +340 -0
  107. package/bone/output/rag/tsconfig.json +25 -0
  108. package/bone/output/session/.dockerignore +7 -0
  109. package/bone/output/session/.env.example +36 -0
  110. package/bone/output/session/.github/workflows/ci.yaml +58 -0
  111. package/bone/output/session/Dockerfile +22 -0
  112. package/bone/output/session/README.md +47 -0
  113. package/bone/output/session/SessionDomain.bone.map +350 -0
  114. package/bone/output/session/SessionDomain.postman_collection.json +958 -0
  115. package/bone/output/session/admin/index.html +667 -0
  116. package/bone/output/session/docker-compose.yaml +22 -0
  117. package/bone/output/session/k8s/deployment.yaml +75 -0
  118. package/bone/output/session/migrations/audit_log.sql +18 -0
  119. package/bone/output/session/migrations/event_outbox.sql +31 -0
  120. package/bone/output/session/migrations/message.sql +31 -0
  121. package/bone/output/session/migrations/part.sql +28 -0
  122. package/bone/output/session/migrations/permission.sql +28 -0
  123. package/bone/output/session/migrations/project.sql +28 -0
  124. package/bone/output/session/migrations/session.sql +38 -0
  125. package/bone/output/session/openapi.yaml +1101 -0
  126. package/bone/output/session/package.json +36 -0
  127. package/bone/output/session/schema.graphql +222 -0
  128. package/bone/output/session/sdk/client.ts +225 -0
  129. package/bone/output/session/src/algorithms.ts +2 -0
  130. package/bone/output/session/src/audit.ts +44 -0
  131. package/bone/output/session/src/auth.ts +57 -0
  132. package/bone/output/session/src/cron.ts +12 -0
  133. package/bone/output/session/src/db.ts +32 -0
  134. package/bone/output/session/src/debug.ts +66 -0
  135. package/bone/output/session/src/events.ts +270 -0
  136. package/bone/output/session/src/extensions.ts +215 -0
  137. package/bone/output/session/src/failure_rules.ts +284 -0
  138. package/bone/output/session/src/flows.ts +168 -0
  139. package/bone/output/session/src/health.ts +43 -0
  140. package/bone/output/session/src/index.ts +100 -0
  141. package/bone/output/session/src/logger.ts +66 -0
  142. package/bone/output/session/src/metrics.ts +75 -0
  143. package/bone/output/session/src/migrate.ts +332 -0
  144. package/bone/output/session/src/migration_diff.ts +108 -0
  145. package/bone/output/session/src/notify.ts +112 -0
  146. package/bone/output/session/src/routes/message.ts +93 -0
  147. package/bone/output/session/src/routes/part.ts +79 -0
  148. package/bone/output/session/src/routes/permission.ts +79 -0
  149. package/bone/output/session/src/routes/project.ts +79 -0
  150. package/bone/output/session/src/routes/session.ts +294 -0
  151. package/bone/output/session/src/schemas.ts +357 -0
  152. package/bone/output/session/src/state_machines/session.ts +23 -0
  153. package/bone/output/session/src/tests.ts +326 -0
  154. package/bone/output/session/src/websocket.ts +201 -0
  155. package/bone/output/session/tsconfig.json +25 -0
  156. package/bone/output/workspace/.dockerignore +7 -0
  157. package/bone/output/workspace/.env.example +36 -0
  158. package/bone/output/workspace/.github/workflows/ci.yaml +58 -0
  159. package/bone/output/workspace/Dockerfile +22 -0
  160. package/bone/output/workspace/README.md +45 -0
  161. package/bone/output/workspace/WorkspaceDomain.bone.map +189 -0
  162. package/bone/output/workspace/WorkspaceDomain.postman_collection.json +621 -0
  163. package/bone/output/workspace/admin/index.html +485 -0
  164. package/bone/output/workspace/docker-compose.yaml +22 -0
  165. package/bone/output/workspace/k8s/deployment.yaml +75 -0
  166. package/bone/output/workspace/migrations/audit_log.sql +18 -0
  167. package/bone/output/workspace/migrations/codebase.sql +34 -0
  168. package/bone/output/workspace/migrations/event_outbox.sql +31 -0
  169. package/bone/output/workspace/migrations/snapshot.sql +32 -0
  170. package/bone/output/workspace/migrations/workspace.sql +33 -0
  171. package/bone/output/workspace/openapi.yaml +721 -0
  172. package/bone/output/workspace/package.json +36 -0
  173. package/bone/output/workspace/schema.graphql +153 -0
  174. package/bone/output/workspace/sdk/client.ts +155 -0
  175. package/bone/output/workspace/src/algorithms.ts +2 -0
  176. package/bone/output/workspace/src/audit.ts +37 -0
  177. package/bone/output/workspace/src/auth.ts +57 -0
  178. package/bone/output/workspace/src/cron.ts +12 -0
  179. package/bone/output/workspace/src/db.ts +32 -0
  180. package/bone/output/workspace/src/debug.ts +66 -0
  181. package/bone/output/workspace/src/events.ts +243 -0
  182. package/bone/output/workspace/src/extensions.ts +44 -0
  183. package/bone/output/workspace/src/failure_rules.ts +153 -0
  184. package/bone/output/workspace/src/health.ts +43 -0
  185. package/bone/output/workspace/src/index.ts +89 -0
  186. package/bone/output/workspace/src/logger.ts +66 -0
  187. package/bone/output/workspace/src/metrics.ts +75 -0
  188. package/bone/output/workspace/src/migrate.ts +220 -0
  189. package/bone/output/workspace/src/migration_diff.ts +108 -0
  190. package/bone/output/workspace/src/notify.ts +73 -0
  191. package/bone/output/workspace/src/routes/codebase.ts +87 -0
  192. package/bone/output/workspace/src/routes/snapshot.ts +127 -0
  193. package/bone/output/workspace/src/routes/workspace.ts +190 -0
  194. package/bone/output/workspace/src/schemas.ts +231 -0
  195. package/bone/output/workspace/src/state_machines/codebase.ts +21 -0
  196. package/bone/output/workspace/src/state_machines/snapshot.ts +20 -0
  197. package/bone/output/workspace/src/state_machines/workspace.ts +21 -0
  198. package/bone/output/workspace/src/tests.ts +249 -0
  199. package/bone/output/workspace/tsconfig.json +25 -0
  200. package/compat/opencode_adapter.ts +410 -0
  201. package/package.json +69 -0
  202. package/scripts/check_benchmark_session.js +34 -0
  203. package/scripts/check_finish_event.js +24 -0
  204. package/scripts/check_parts.js +15 -0
  205. package/scripts/compile.js +79 -0
  206. package/scripts/copy_opencode.ps1 +53 -0
  207. package/scripts/create_functions.sql +129 -0
  208. package/scripts/migrate.js +85 -0
  209. package/scripts/migrate_from_opencode.ts +218 -0
  210. package/scripts/test_agent_loop.js +101 -0
  211. package/scripts/test_api.ps1 +116 -0
  212. package/scripts/test_context_builder.js +136 -0
  213. package/scripts/test_context_builder.ts +97 -0
  214. package/scripts/test_rag.js +189 -0
  215. package/scripts/test_stream_events.js +36 -0
  216. package/scripts/test_websocket_and_saga.js +216 -0
  217. package/src/cli.ts +475 -0
  218. package/src/config.ts +162 -0
  219. package/src/context_builder.ts +598 -0
  220. package/src/engine/account/account.sql.ts +39 -0
  221. package/src/engine/account/account.ts +456 -0
  222. package/src/engine/account/repo.ts +166 -0
  223. package/src/engine/account/schema.ts +99 -0
  224. package/src/engine/account/url.ts +8 -0
  225. package/src/engine/acp/README.md +174 -0
  226. package/src/engine/acp/agent.ts +1968 -0
  227. package/src/engine/acp/runtime.ts +22 -0
  228. package/src/engine/acp/session.ts +122 -0
  229. package/src/engine/acp/types.ts +24 -0
  230. package/src/engine/agent/agent.ts +463 -0
  231. package/src/engine/agent/generate.txt +75 -0
  232. package/src/engine/agent/prompt/compaction.txt +9 -0
  233. package/src/engine/agent/prompt/explore.txt +18 -0
  234. package/src/engine/agent/prompt/scout.txt +36 -0
  235. package/src/engine/agent/prompt/summary.txt +11 -0
  236. package/src/engine/agent/prompt/title.txt +44 -0
  237. package/src/engine/agent/subagent-permissions.ts +34 -0
  238. package/src/engine/auth/index.ts +96 -0
  239. package/src/engine/background/background/job.ts +200 -0
  240. package/src/engine/background/job.ts +200 -0
  241. package/src/engine/bus/bus-event.ts +45 -0
  242. package/src/engine/bus/global.ts +22 -0
  243. package/src/engine/bus/index.ts +203 -0
  244. package/src/engine/command/command/index.ts +181 -0
  245. package/src/engine/command/command/template/initialize.txt +66 -0
  246. package/src/engine/command/command/template/review.txt +101 -0
  247. package/src/engine/command/index.ts +181 -0
  248. package/src/engine/command/template/initialize.txt +66 -0
  249. package/src/engine/command/template/review.txt +101 -0
  250. package/src/engine/config/agent.ts +172 -0
  251. package/src/engine/config/attachment.ts +25 -0
  252. package/src/engine/config/command.ts +62 -0
  253. package/src/engine/config/config.ts +833 -0
  254. package/src/engine/config/console-state.ts +14 -0
  255. package/src/engine/config/entry-name.ts +16 -0
  256. package/src/engine/config/error.ts +23 -0
  257. package/src/engine/config/formatter.ts +13 -0
  258. package/src/engine/config/layout.ts +6 -0
  259. package/src/engine/config/lsp.ts +43 -0
  260. package/src/engine/config/managed.ts +71 -0
  261. package/src/engine/config/markdown.ts +96 -0
  262. package/src/engine/config/mcp.ts +56 -0
  263. package/src/engine/config/model-id.ts +5 -0
  264. package/src/engine/config/parse.ts +79 -0
  265. package/src/engine/config/paths.ts +45 -0
  266. package/src/engine/config/permission.ts +58 -0
  267. package/src/engine/config/plugin.ts +84 -0
  268. package/src/engine/config/provider.ts +111 -0
  269. package/src/engine/config/reference.ts +23 -0
  270. package/src/engine/config/server.ts +19 -0
  271. package/src/engine/config/skills.ts +14 -0
  272. package/src/engine/config/variable.ts +90 -0
  273. package/src/engine/control-plane/adapters/index.ts +41 -0
  274. package/src/engine/control-plane/adapters/worktree.ts +96 -0
  275. package/src/engine/control-plane/dev/README.md +19 -0
  276. package/src/engine/control-plane/dev/debug-workspace-plugin.ts +73 -0
  277. package/src/engine/control-plane/schema.ts +14 -0
  278. package/src/engine/control-plane/types.ts +59 -0
  279. package/src/engine/control-plane/util.ts +39 -0
  280. package/src/engine/control-plane/workspace-adapter-runtime.ts +51 -0
  281. package/src/engine/control-plane/workspace-context.ts +26 -0
  282. package/src/engine/control-plane/workspace.sql.ts +20 -0
  283. package/src/engine/control-plane/workspace.ts +1072 -0
  284. package/src/engine/data-migration.ts +161 -0
  285. package/src/engine/effect/app-runtime.ts +143 -0
  286. package/src/engine/effect/bootstrap-runtime.ts +29 -0
  287. package/src/engine/effect/bridge.ts +84 -0
  288. package/src/engine/effect/config-service.ts +67 -0
  289. package/src/engine/effect/instance-ref.ts +11 -0
  290. package/src/engine/effect/instance-registry.ts +12 -0
  291. package/src/engine/effect/instance-state.ts +72 -0
  292. package/src/engine/effect/promise.ts +17 -0
  293. package/src/engine/effect/run-service.ts +47 -0
  294. package/src/engine/effect/runner.ts +217 -0
  295. package/src/engine/effect/runtime-flags.ts +74 -0
  296. package/src/engine/effect/service-use.ts +38 -0
  297. package/src/engine/env/index.ts +37 -0
  298. package/src/engine/event-v2-bridge.ts +89 -0
  299. package/src/engine/file/file/ignore.ts +81 -0
  300. package/src/engine/file/file/index.ts +651 -0
  301. package/src/engine/file/file/protected.ts +59 -0
  302. package/src/engine/file/file/ripgrep.ts +481 -0
  303. package/src/engine/file/file/watcher.ts +167 -0
  304. package/src/engine/file/ignore.ts +81 -0
  305. package/src/engine/file/index.ts +651 -0
  306. package/src/engine/file/protected.ts +59 -0
  307. package/src/engine/file/ripgrep.ts +481 -0
  308. package/src/engine/file/watcher.ts +167 -0
  309. package/src/engine/format/format/formatter.ts +404 -0
  310. package/src/engine/format/format/index.ts +209 -0
  311. package/src/engine/format/formatter.ts +404 -0
  312. package/src/engine/format/index.ts +209 -0
  313. package/src/engine/git/git/index.ts +347 -0
  314. package/src/engine/git/index.ts +347 -0
  315. package/src/engine/id/id.ts +80 -0
  316. package/src/engine/ide/index.ts +70 -0
  317. package/src/engine/image/image/image.ts +176 -0
  318. package/src/engine/image/image.ts +176 -0
  319. package/src/engine/index.ts +251 -0
  320. package/src/engine/installation/index.ts +327 -0
  321. package/src/engine/lsp/client.ts +707 -0
  322. package/src/engine/lsp/diagnostic.ts +29 -0
  323. package/src/engine/lsp/language.ts +121 -0
  324. package/src/engine/lsp/launch.ts +21 -0
  325. package/src/engine/lsp/lsp/client.ts +707 -0
  326. package/src/engine/lsp/lsp/diagnostic.ts +29 -0
  327. package/src/engine/lsp/lsp/language.ts +121 -0
  328. package/src/engine/lsp/lsp/launch.ts +21 -0
  329. package/src/engine/lsp/lsp/lsp.ts +507 -0
  330. package/src/engine/lsp/lsp/server.ts +2064 -0
  331. package/src/engine/lsp/lsp.ts +507 -0
  332. package/src/engine/lsp/server.ts +2064 -0
  333. package/src/engine/mcp/auth.ts +146 -0
  334. package/src/engine/mcp/index.ts +958 -0
  335. package/src/engine/mcp/mcp/auth.ts +146 -0
  336. package/src/engine/mcp/mcp/index.ts +958 -0
  337. package/src/engine/mcp/mcp/oauth-callback.ts +232 -0
  338. package/src/engine/mcp/mcp/oauth-provider.ts +214 -0
  339. package/src/engine/mcp/oauth-callback.ts +232 -0
  340. package/src/engine/mcp/oauth-provider.ts +214 -0
  341. package/src/engine/node.ts +6 -0
  342. package/src/engine/patch/index.ts +689 -0
  343. package/src/engine/patch/patch/index.ts +689 -0
  344. package/src/engine/permission/arity.ts +163 -0
  345. package/src/engine/permission/evaluate.ts +15 -0
  346. package/src/engine/permission/index.ts +306 -0
  347. package/src/engine/permission/permission/arity.ts +163 -0
  348. package/src/engine/permission/permission/evaluate.ts +15 -0
  349. package/src/engine/permission/permission/index.ts +306 -0
  350. package/src/engine/permission/permission/schema.ts +13 -0
  351. package/src/engine/permission/schema.ts +13 -0
  352. package/src/engine/plugin/azure.ts +26 -0
  353. package/src/engine/plugin/cloudflare.ts +76 -0
  354. package/src/engine/plugin/codex.ts +622 -0
  355. package/src/engine/plugin/digitalocean.ts +411 -0
  356. package/src/engine/plugin/github-copilot/copilot.ts +394 -0
  357. package/src/engine/plugin/github-copilot/models.ts +196 -0
  358. package/src/engine/plugin/index.ts +295 -0
  359. package/src/engine/plugin/install.ts +439 -0
  360. package/src/engine/plugin/loader.ts +216 -0
  361. package/src/engine/plugin/meta.ts +188 -0
  362. package/src/engine/plugin/shared.ts +323 -0
  363. package/src/engine/project/bootstrap-service.ts +9 -0
  364. package/src/engine/project/bootstrap.ts +75 -0
  365. package/src/engine/project/instance-context.ts +24 -0
  366. package/src/engine/project/instance-layer.ts +11 -0
  367. package/src/engine/project/instance-runtime.ts +16 -0
  368. package/src/engine/project/instance-store.ts +193 -0
  369. package/src/engine/project/project.sql.ts +17 -0
  370. package/src/engine/project/project.ts +537 -0
  371. package/src/engine/project/schema.ts +13 -0
  372. package/src/engine/project/vcs.ts +405 -0
  373. package/src/engine/provider/auth.ts +225 -0
  374. package/src/engine/provider/error.ts +204 -0
  375. package/src/engine/provider/model-status.ts +8 -0
  376. package/src/engine/provider/provider.ts +1843 -0
  377. package/src/engine/provider/schema.ts +30 -0
  378. package/src/engine/provider/sdk/copilot/AGENTS.md +1 -0
  379. package/src/engine/provider/transform.ts +1376 -0
  380. package/src/engine/pty/index.ts +365 -0
  381. package/src/engine/pty/input.ts +24 -0
  382. package/src/engine/pty/pty/index.ts +365 -0
  383. package/src/engine/pty/pty/input.ts +24 -0
  384. package/src/engine/pty/pty/pty.bun.ts +26 -0
  385. package/src/engine/pty/pty/pty.node.ts +27 -0
  386. package/src/engine/pty/pty/pty.ts +25 -0
  387. package/src/engine/pty/pty/schema.ts +14 -0
  388. package/src/engine/pty/pty/ticket.ts +68 -0
  389. package/src/engine/pty/pty.bun.ts +26 -0
  390. package/src/engine/pty/pty.node.ts +27 -0
  391. package/src/engine/pty/pty.ts +25 -0
  392. package/src/engine/pty/schema.ts +14 -0
  393. package/src/engine/pty/ticket.ts +68 -0
  394. package/src/engine/question/index.ts +213 -0
  395. package/src/engine/question/question/index.ts +213 -0
  396. package/src/engine/question/question/schema.ts +10 -0
  397. package/src/engine/question/schema.ts +10 -0
  398. package/src/engine/reference/reference/reference.ts +241 -0
  399. package/src/engine/reference/reference/repository-cache.ts +147 -0
  400. package/src/engine/reference/reference.ts +241 -0
  401. package/src/engine/reference/repository-cache.ts +147 -0
  402. package/src/engine/session/compaction.ts +651 -0
  403. package/src/engine/session/compaction_logic.ts +120 -0
  404. package/src/engine/session/instruction.ts +238 -0
  405. package/src/engine/session/instruction_loader.ts +54 -0
  406. package/src/engine/session/llm.ts +459 -0
  407. package/src/engine/session/message-error.ts +14 -0
  408. package/src/engine/session/message-v2.ts +1202 -0
  409. package/src/engine/session/message.ts +146 -0
  410. package/src/engine/session/overflow.ts +32 -0
  411. package/src/engine/session/overflow_check.ts +46 -0
  412. package/src/engine/session/processor.ts +823 -0
  413. package/src/engine/session/prompt/anthropic.txt +105 -0
  414. package/src/engine/session/prompt/beast.txt +147 -0
  415. package/src/engine/session/prompt/build-switch.txt +5 -0
  416. package/src/engine/session/prompt/codex.txt +79 -0
  417. package/src/engine/session/prompt/copilot-gpt-5.txt +143 -0
  418. package/src/engine/session/prompt/default.txt +105 -0
  419. package/src/engine/session/prompt/gemini.txt +155 -0
  420. package/src/engine/session/prompt/gpt.txt +107 -0
  421. package/src/engine/session/prompt/kimi.txt +95 -0
  422. package/src/engine/session/prompt/max-steps.txt +16 -0
  423. package/src/engine/session/prompt/plan-reminder-anthropic.txt +67 -0
  424. package/src/engine/session/prompt/plan.txt +26 -0
  425. package/src/engine/session/prompt/trinity.txt +97 -0
  426. package/src/engine/session/prompt.ts +671 -0
  427. package/src/engine/session/provider_transform.ts +187 -0
  428. package/src/engine/session/retry.ts +200 -0
  429. package/src/engine/session/retry_logic.ts +65 -0
  430. package/src/engine/session/revert.ts +162 -0
  431. package/src/engine/session/run-state.ts +153 -0
  432. package/src/engine/session/schema.ts +26 -0
  433. package/src/engine/session/session.sql.ts +137 -0
  434. package/src/engine/session/session.ts +1011 -0
  435. package/src/engine/session/status.ts +94 -0
  436. package/src/engine/session/summary.ts +164 -0
  437. package/src/engine/session/system.ts +84 -0
  438. package/src/engine/session/system_prompt.ts +65 -0
  439. package/src/engine/session/todo.ts +81 -0
  440. package/src/engine/session/tool_registry.ts +162 -0
  441. package/src/engine/share/session.ts +61 -0
  442. package/src/engine/share/share-next.ts +376 -0
  443. package/src/engine/share/share.sql.ts +13 -0
  444. package/src/engine/shell/shell/shell.ts +215 -0
  445. package/src/engine/shell/shell.ts +215 -0
  446. package/src/engine/skill/discovery.ts +116 -0
  447. package/src/engine/skill/index.ts +336 -0
  448. package/src/engine/skill/prompt/customize-opencode.md +377 -0
  449. package/src/engine/skill/skill/discovery.ts +116 -0
  450. package/src/engine/skill/skill/index.ts +336 -0
  451. package/src/engine/skill/skill/prompt/customize-opencode.md +377 -0
  452. package/src/engine/snapshot/index.ts +762 -0
  453. package/src/engine/snapshot/snapshot/index.ts +762 -0
  454. package/src/engine/sync/README.md +179 -0
  455. package/src/engine/sync/event.sql.ts +17 -0
  456. package/src/engine/sync/index.ts +410 -0
  457. package/src/engine/sync/schema.ts +11 -0
  458. package/src/engine/temporary.ts +33 -0
  459. package/src/engine/tool/apply_patch.ts +313 -0
  460. package/src/engine/tool/apply_patch.txt +33 -0
  461. package/src/engine/tool/edit.ts +711 -0
  462. package/src/engine/tool/edit.txt +10 -0
  463. package/src/engine/tool/external-directory.ts +49 -0
  464. package/src/engine/tool/glob.ts +103 -0
  465. package/src/engine/tool/glob.txt +6 -0
  466. package/src/engine/tool/grep.ts +156 -0
  467. package/src/engine/tool/grep.txt +8 -0
  468. package/src/engine/tool/invalid.ts +21 -0
  469. package/src/engine/tool/json-schema.ts +164 -0
  470. package/src/engine/tool/lsp.ts +113 -0
  471. package/src/engine/tool/lsp.txt +24 -0
  472. package/src/engine/tool/mcp-websearch.ts +96 -0
  473. package/src/engine/tool/plan-enter.txt +14 -0
  474. package/src/engine/tool/plan-exit.txt +13 -0
  475. package/src/engine/tool/plan.ts +78 -0
  476. package/src/engine/tool/question.ts +44 -0
  477. package/src/engine/tool/question.txt +10 -0
  478. package/src/engine/tool/read.ts +337 -0
  479. package/src/engine/tool/read.txt +14 -0
  480. package/src/engine/tool/registry.ts +472 -0
  481. package/src/engine/tool/repo_clone.ts +80 -0
  482. package/src/engine/tool/repo_clone.txt +5 -0
  483. package/src/engine/tool/repo_overview.ts +279 -0
  484. package/src/engine/tool/repo_overview.txt +4 -0
  485. package/src/engine/tool/schema.ts +14 -0
  486. package/src/engine/tool/shell/id.ts +19 -0
  487. package/src/engine/tool/shell/prompt.ts +295 -0
  488. package/src/engine/tool/shell/shell.txt +77 -0
  489. package/src/engine/tool/shell.ts +647 -0
  490. package/src/engine/tool/skill.ts +75 -0
  491. package/src/engine/tool/skill.txt +5 -0
  492. package/src/engine/tool/task.ts +337 -0
  493. package/src/engine/tool/task.txt +58 -0
  494. package/src/engine/tool/task_status.ts +179 -0
  495. package/src/engine/tool/task_status.txt +13 -0
  496. package/src/engine/tool/todo.ts +57 -0
  497. package/src/engine/tool/todowrite.txt +167 -0
  498. package/src/engine/tool/tool/apply_patch.ts +313 -0
  499. package/src/engine/tool/tool/apply_patch.txt +33 -0
  500. package/src/engine/tool/tool/edit.ts +711 -0
  501. package/src/engine/tool/tool/edit.txt +10 -0
  502. package/src/engine/tool/tool/external-directory.ts +49 -0
  503. package/src/engine/tool/tool/glob.ts +103 -0
  504. package/src/engine/tool/tool/glob.txt +6 -0
  505. package/src/engine/tool/tool/grep.ts +156 -0
  506. package/src/engine/tool/tool/grep.txt +8 -0
  507. package/src/engine/tool/tool/invalid.ts +21 -0
  508. package/src/engine/tool/tool/json-schema.ts +164 -0
  509. package/src/engine/tool/tool/lsp.ts +113 -0
  510. package/src/engine/tool/tool/lsp.txt +24 -0
  511. package/src/engine/tool/tool/mcp-websearch.ts +96 -0
  512. package/src/engine/tool/tool/plan-enter.txt +14 -0
  513. package/src/engine/tool/tool/plan-exit.txt +13 -0
  514. package/src/engine/tool/tool/plan.ts +78 -0
  515. package/src/engine/tool/tool/question.ts +44 -0
  516. package/src/engine/tool/tool/question.txt +10 -0
  517. package/src/engine/tool/tool/read.ts +337 -0
  518. package/src/engine/tool/tool/read.txt +14 -0
  519. package/src/engine/tool/tool/registry.ts +472 -0
  520. package/src/engine/tool/tool/repo_clone.ts +80 -0
  521. package/src/engine/tool/tool/repo_clone.txt +5 -0
  522. package/src/engine/tool/tool/repo_overview.ts +279 -0
  523. package/src/engine/tool/tool/repo_overview.txt +4 -0
  524. package/src/engine/tool/tool/schema.ts +14 -0
  525. package/src/engine/tool/tool/shell/id.ts +19 -0
  526. package/src/engine/tool/tool/shell/prompt.ts +295 -0
  527. package/src/engine/tool/tool/shell/shell.txt +77 -0
  528. package/src/engine/tool/tool/shell.ts +647 -0
  529. package/src/engine/tool/tool/skill.ts +75 -0
  530. package/src/engine/tool/tool/skill.txt +5 -0
  531. package/src/engine/tool/tool/task.ts +337 -0
  532. package/src/engine/tool/tool/task.txt +58 -0
  533. package/src/engine/tool/tool/task_status.ts +179 -0
  534. package/src/engine/tool/tool/task_status.txt +13 -0
  535. package/src/engine/tool/tool/todo.ts +57 -0
  536. package/src/engine/tool/tool/todowrite.txt +167 -0
  537. package/src/engine/tool/tool/tool.ts +164 -0
  538. package/src/engine/tool/tool/truncate.ts +160 -0
  539. package/src/engine/tool/tool/truncation-dir.ts +4 -0
  540. package/src/engine/tool/tool/webfetch.ts +192 -0
  541. package/src/engine/tool/tool/webfetch.txt +13 -0
  542. package/src/engine/tool/tool/websearch.ts +143 -0
  543. package/src/engine/tool/tool/websearch.txt +14 -0
  544. package/src/engine/tool/tool/write.ts +104 -0
  545. package/src/engine/tool/tool/write.txt +8 -0
  546. package/src/engine/tool/tool.ts +164 -0
  547. package/src/engine/tool/truncate.ts +160 -0
  548. package/src/engine/tool/truncation-dir.ts +4 -0
  549. package/src/engine/tool/webfetch.ts +192 -0
  550. package/src/engine/tool/webfetch.txt +13 -0
  551. package/src/engine/tool/websearch.ts +143 -0
  552. package/src/engine/tool/websearch.txt +14 -0
  553. package/src/engine/tool/write.ts +104 -0
  554. package/src/engine/tool/write.txt +8 -0
  555. package/src/engine/util/archive.ts +17 -0
  556. package/src/engine/util/bom.ts +31 -0
  557. package/src/engine/util/data-url.ts +9 -0
  558. package/src/engine/util/defer.ts +10 -0
  559. package/src/engine/util/effect-http-client.ts +11 -0
  560. package/src/engine/util/error.ts +88 -0
  561. package/src/engine/util/filesystem.ts +252 -0
  562. package/src/engine/util/format.ts +20 -0
  563. package/src/engine/util/iife.ts +3 -0
  564. package/src/engine/util/lazy.ts +20 -0
  565. package/src/engine/util/local-context.ts +25 -0
  566. package/src/engine/util/locale.ts +86 -0
  567. package/src/engine/util/media.ts +26 -0
  568. package/src/engine/util/process.ts +176 -0
  569. package/src/engine/util/queue.ts +32 -0
  570. package/src/engine/util/record.ts +3 -0
  571. package/src/engine/util/repository.ts +158 -0
  572. package/src/engine/util/rpc.ts +66 -0
  573. package/src/engine/util/signal.ts +12 -0
  574. package/src/engine/util/timeout.ts +13 -0
  575. package/src/engine/util/token.ts +7 -0
  576. package/src/engine/util/util/archive.ts +17 -0
  577. package/src/engine/util/util/bom.ts +31 -0
  578. package/src/engine/util/util/data-url.ts +9 -0
  579. package/src/engine/util/util/defer.ts +10 -0
  580. package/src/engine/util/util/effect-http-client.ts +11 -0
  581. package/src/engine/util/util/error.ts +88 -0
  582. package/src/engine/util/util/filesystem.ts +252 -0
  583. package/src/engine/util/util/format.ts +20 -0
  584. package/src/engine/util/util/iife.ts +3 -0
  585. package/src/engine/util/util/lazy.ts +20 -0
  586. package/src/engine/util/util/local-context.ts +25 -0
  587. package/src/engine/util/util/locale.ts +86 -0
  588. package/src/engine/util/util/media.ts +26 -0
  589. package/src/engine/util/util/process.ts +176 -0
  590. package/src/engine/util/util/queue.ts +32 -0
  591. package/src/engine/util/util/record.ts +3 -0
  592. package/src/engine/util/util/repository.ts +158 -0
  593. package/src/engine/util/util/rpc.ts +66 -0
  594. package/src/engine/util/util/signal.ts +12 -0
  595. package/src/engine/util/util/timeout.ts +13 -0
  596. package/src/engine/util/util/token.ts +7 -0
  597. package/src/engine/util/util/which.ts +14 -0
  598. package/src/engine/util/util/wildcard.ts +59 -0
  599. package/src/engine/util/which.ts +14 -0
  600. package/src/engine/util/wildcard.ts +59 -0
  601. package/src/engine/worktree/index.ts +621 -0
  602. package/src/rag_worker.ts +519 -0
  603. package/src/server.ts +201 -0
  604. package/src/tui.ts +637 -0
  605. package/tsconfig.json +24 -0
@@ -0,0 +1,340 @@
1
+ // Generated by BoneScript compiler. DO NOT EDIT.
2
+ // Regression tests derived from capability declarations.
3
+ // Run: npx ts-node src/tests.ts
4
+
5
+ import * as http from "http";
6
+
7
+ const BASE_URL = process.env.TEST_BASE_URL || "http://localhost:3000";
8
+ const AUTH_TOKEN = process.env.TEST_AUTH_TOKEN || "";
9
+
10
+ let passed = 0;
11
+ let failed = 0;
12
+
13
+ async function request(method: string, path: string, body?: any): Promise<{ status: number; data: any }> {
14
+ const url = new URL(path, BASE_URL);
15
+ const res = await fetch(url.toString(), {
16
+ method,
17
+ headers: {
18
+ "Content-Type": "application/json",
19
+ ...(AUTH_TOKEN ? { "Authorization": `Bearer ${AUTH_TOKEN}` } : {}),
20
+ },
21
+ body: body ? JSON.stringify(body) : undefined,
22
+ });
23
+ const data = await res.json().catch(() => ({}));
24
+ return { status: res.status, data };
25
+ }
26
+
27
+ async function test(name: string, fn: () => Promise<void>): Promise<void> {
28
+ try {
29
+ await fn();
30
+ console.log(` ✓ ${name}`);
31
+ passed++;
32
+ } catch (e: any) {
33
+ console.log(` ✗ ${name}: ${e.message}`);
34
+ failed++;
35
+ }
36
+ }
37
+
38
+ function assert(condition: boolean, message: string): void {
39
+ if (!condition) throw new Error(message);
40
+ }
41
+
42
+ (async () => {
43
+ // ─── KnowledgeBaseService Tests ─────────────────────────────────────────────────────
44
+
45
+ console.log("\nKnowledgeBaseService — CRUD");
46
+
47
+ let __knowledge_base_id: string;
48
+
49
+ await test("POST /knowledge_bases — creates entity", async () => {
50
+ const { status, data } = await request("POST", "/knowledge_bases", {"project_id":"00000000-0000-0000-0000-000000000001","name":"test_value","description":null,"embedding_model":"test_value","embedding_dimensions":1,"chunk_strategy":"test_value","chunk_size":1,"chunk_overlap":1,"total_files":1,"total_chunks":1,"last_indexed_at":null});
51
+ assert(status === 201, `Expected 201, got ${status}: ${JSON.stringify(data)}`);
52
+ assert(data.id, "Response must have id");
53
+ __knowledge_base_id = data.id;
54
+ });
55
+
56
+ await test("GET /knowledge_bases/:id — reads entity", async () => {
57
+ const { status, data } = await request("GET", `/knowledge_bases/${__knowledge_base_id}`);
58
+ assert(status === 200, `Expected 200, got ${status}`);
59
+ assert(data.id === __knowledge_base_id, "ID must match");
60
+ });
61
+
62
+ await test("GET /knowledge_bases — lists entities", async () => {
63
+ const { status, data } = await request("GET", "/knowledge_bases");
64
+ assert(status === 200, `Expected 200, got ${status}`);
65
+ assert(Array.isArray(data.items), "Response must have items array");
66
+ assert(typeof data.total === "number", "Response must have total");
67
+ });
68
+
69
+ await test("GET /knowledge_bases — rejects unauthenticated", async () => {
70
+ const res = await fetch(`${BASE_URL}/knowledge_bases`);
71
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
72
+ });
73
+
74
+ await test("POST /knowledge_bases/ingest-codebase — capability executes", async () => {
75
+ const { status, data } = await request("POST", "/knowledge_bases/ingest-codebase", {
76
+ knowledge_base_id: __knowledge_base_id,
77
+ });
78
+ // Capability may return 200 (success) or 422 (precondition failed) — both are valid
79
+ assert([200, 422].includes(status), `Expected 200 or 422, got ${status}: ${JSON.stringify(data)}`);
80
+ });
81
+
82
+ await test("POST /knowledge_bases/ingest-codebase — returns 401 without auth", async () => {
83
+ const res = await fetch(`${BASE_URL}/knowledge_bases/ingest-codebase`, { method: "POST" });
84
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
85
+ });
86
+
87
+ await test("POST /knowledge_bases/index-file — capability executes", async () => {
88
+ const { status, data } = await request("POST", "/knowledge_bases/index-file", {
89
+ knowledge_base_id: __knowledge_base_id,
90
+ });
91
+ // Capability may return 200 (success) or 422 (precondition failed) — both are valid
92
+ assert([200, 422].includes(status), `Expected 200 or 422, got ${status}: ${JSON.stringify(data)}`);
93
+ });
94
+
95
+ await test("POST /knowledge_bases/index-file — returns 401 without auth", async () => {
96
+ const res = await fetch(`${BASE_URL}/knowledge_bases/index-file`, { method: "POST" });
97
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
98
+ });
99
+
100
+ await test("POST /knowledge_bases/retrieve-context — capability executes", async () => {
101
+ const { status, data } = await request("POST", "/knowledge_bases/retrieve-context", {
102
+ knowledge_base_id: __knowledge_base_id,
103
+ });
104
+ // Capability may return 200 (success) or 422 (precondition failed) — both are valid
105
+ assert([200, 422].includes(status), `Expected 200 or 422, got ${status}: ${JSON.stringify(data)}`);
106
+ });
107
+
108
+ await test("POST /knowledge_bases/retrieve-context — returns 401 without auth", async () => {
109
+ const res = await fetch(`${BASE_URL}/knowledge_bases/retrieve-context`, { method: "POST" });
110
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
111
+ });
112
+
113
+ await test("POST /knowledge_bases/semantic-search — capability executes", async () => {
114
+ const { status, data } = await request("POST", "/knowledge_bases/semantic-search", {
115
+ knowledge_base_id: __knowledge_base_id,
116
+ });
117
+ // Capability may return 200 (success) or 422 (precondition failed) — both are valid
118
+ assert([200, 422].includes(status), `Expected 200 or 422, got ${status}: ${JSON.stringify(data)}`);
119
+ });
120
+
121
+ await test("POST /knowledge_bases/semantic-search — returns 401 without auth", async () => {
122
+ const res = await fetch(`${BASE_URL}/knowledge_bases/semantic-search`, { method: "POST" });
123
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
124
+ });
125
+
126
+ // State machine: KnowledgeBase
127
+ await test("PUT /knowledge_bases/:id — rejects invalid state transition", async () => {
128
+ const { status, data } = await request("PUT", `/knowledge_bases/${__knowledge_base_id}`, {
129
+ state: "__invalid_state__",
130
+ });
131
+ assert(status === 422, `Expected 422 for invalid transition, got ${status}`);
132
+ assert(data.error?.code === "INVALID_TRANSITION", "Error code must be INVALID_TRANSITION");
133
+ });
134
+
135
+ await test("DELETE /knowledge_bases/:id — deletes entity", async () => {
136
+ const { status } = await request("DELETE", `/knowledge_bases/${__knowledge_base_id}`);
137
+ assert(status === 204, `Expected 204, got ${status}`);
138
+ });
139
+
140
+ await test("GET /knowledge_bases/:id — returns 404 after delete", async () => {
141
+ const { status } = await request("GET", `/knowledge_bases/${__knowledge_base_id}`);
142
+ assert(status === 404, `Expected 404, got ${status}`);
143
+ });
144
+
145
+ // ─── CodeFileService Tests ─────────────────────────────────────────────────────
146
+
147
+ console.log("\nCodeFileService — CRUD");
148
+
149
+ let __code_file_id: string;
150
+
151
+ await test("POST /code_files — creates entity", async () => {
152
+ const { status, data } = await request("POST", "/code_files", {"knowledge_base_id":"00000000-0000-0000-0000-000000000001","project_id":"00000000-0000-0000-0000-000000000001","file_path":"test_value","language":null,"file_hash":"test_value","file_size_bytes":1,"total_chunks":1,"last_modified_at":"2024-01-01T00:00:00.000Z","metadata":null});
153
+ assert(status === 201, `Expected 201, got ${status}: ${JSON.stringify(data)}`);
154
+ assert(data.id, "Response must have id");
155
+ __code_file_id = data.id;
156
+ });
157
+
158
+ await test("GET /code_files/:id — reads entity", async () => {
159
+ const { status, data } = await request("GET", `/code_files/${__code_file_id}`);
160
+ assert(status === 200, `Expected 200, got ${status}`);
161
+ assert(data.id === __code_file_id, "ID must match");
162
+ });
163
+
164
+ await test("GET /code_files — lists entities", async () => {
165
+ const { status, data } = await request("GET", "/code_files");
166
+ assert(status === 200, `Expected 200, got ${status}`);
167
+ assert(Array.isArray(data.items), "Response must have items array");
168
+ assert(typeof data.total === "number", "Response must have total");
169
+ });
170
+
171
+ await test("GET /code_files — rejects unauthenticated", async () => {
172
+ const res = await fetch(`${BASE_URL}/code_files`);
173
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
174
+ });
175
+
176
+ // State machine: CodeFile
177
+ await test("PUT /code_files/:id — rejects invalid state transition", async () => {
178
+ const { status, data } = await request("PUT", `/code_files/${__code_file_id}`, {
179
+ state: "__invalid_state__",
180
+ });
181
+ assert(status === 422, `Expected 422 for invalid transition, got ${status}`);
182
+ assert(data.error?.code === "INVALID_TRANSITION", "Error code must be INVALID_TRANSITION");
183
+ });
184
+
185
+ await test("DELETE /code_files/:id — deletes entity", async () => {
186
+ const { status } = await request("DELETE", `/code_files/${__code_file_id}`);
187
+ assert(status === 204, `Expected 204, got ${status}`);
188
+ });
189
+
190
+ await test("GET /code_files/:id — returns 404 after delete", async () => {
191
+ const { status } = await request("GET", `/code_files/${__code_file_id}`);
192
+ assert(status === 404, `Expected 404, got ${status}`);
193
+ });
194
+
195
+ // ─── CodeChunkService Tests ─────────────────────────────────────────────────────
196
+
197
+ console.log("\nCodeChunkService — CRUD");
198
+
199
+ let __code_chunk_id: string;
200
+
201
+ await test("POST /code_chunks — creates entity", async () => {
202
+ const { status, data } = await request("POST", "/code_chunks", {"code_file_id":"00000000-0000-0000-0000-000000000001","knowledge_base_id":"00000000-0000-0000-0000-000000000001","project_id":"00000000-0000-0000-0000-000000000001","content":"test_value","start_line":1,"end_line":1,"chunk_index":1,"language":null,"symbol_name":null,"symbol_type":null,"metadata":null});
203
+ assert(status === 201, `Expected 201, got ${status}: ${JSON.stringify(data)}`);
204
+ assert(data.id, "Response must have id");
205
+ __code_chunk_id = data.id;
206
+ });
207
+
208
+ await test("GET /code_chunks/:id — reads entity", async () => {
209
+ const { status, data } = await request("GET", `/code_chunks/${__code_chunk_id}`);
210
+ assert(status === 200, `Expected 200, got ${status}`);
211
+ assert(data.id === __code_chunk_id, "ID must match");
212
+ });
213
+
214
+ await test("GET /code_chunks — lists entities", async () => {
215
+ const { status, data } = await request("GET", "/code_chunks");
216
+ assert(status === 200, `Expected 200, got ${status}`);
217
+ assert(Array.isArray(data.items), "Response must have items array");
218
+ assert(typeof data.total === "number", "Response must have total");
219
+ });
220
+
221
+ await test("GET /code_chunks — rejects unauthenticated", async () => {
222
+ const res = await fetch(`${BASE_URL}/code_chunks`);
223
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
224
+ });
225
+
226
+ await test("DELETE /code_chunks/:id — deletes entity", async () => {
227
+ const { status } = await request("DELETE", `/code_chunks/${__code_chunk_id}`);
228
+ assert(status === 204, `Expected 204, got ${status}`);
229
+ });
230
+
231
+ await test("GET /code_chunks/:id — returns 404 after delete", async () => {
232
+ const { status } = await request("GET", `/code_chunks/${__code_chunk_id}`);
233
+ assert(status === 404, `Expected 404, got ${status}`);
234
+ });
235
+
236
+ // ─── MemoryEntryService Tests ─────────────────────────────────────────────────────
237
+
238
+ console.log("\nMemoryEntryService — CRUD");
239
+
240
+ let __memory_entry_id: string;
241
+
242
+ await test("POST /memory_entrys — creates entity", async () => {
243
+ const { status, data } = await request("POST", "/memory_entrys", {"session_id":"00000000-0000-0000-0000-000000000001","project_id":"00000000-0000-0000-0000-000000000001","agent_id":null,"memory_type":"test_value","content":"test_value","importance":1,"access_count":1,"last_accessed_at":null,"expires_at":null,"metadata":null});
244
+ assert(status === 201, `Expected 201, got ${status}: ${JSON.stringify(data)}`);
245
+ assert(data.id, "Response must have id");
246
+ __memory_entry_id = data.id;
247
+ });
248
+
249
+ await test("GET /memory_entrys/:id — reads entity", async () => {
250
+ const { status, data } = await request("GET", `/memory_entrys/${__memory_entry_id}`);
251
+ assert(status === 200, `Expected 200, got ${status}`);
252
+ assert(data.id === __memory_entry_id, "ID must match");
253
+ });
254
+
255
+ await test("GET /memory_entrys — lists entities", async () => {
256
+ const { status, data } = await request("GET", "/memory_entrys");
257
+ assert(status === 200, `Expected 200, got ${status}`);
258
+ assert(Array.isArray(data.items), "Response must have items array");
259
+ assert(typeof data.total === "number", "Response must have total");
260
+ });
261
+
262
+ await test("GET /memory_entrys — rejects unauthenticated", async () => {
263
+ const res = await fetch(`${BASE_URL}/memory_entrys`);
264
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
265
+ });
266
+
267
+ // State machine: MemoryEntry
268
+ await test("PUT /memory_entrys/:id — rejects invalid state transition", async () => {
269
+ const { status, data } = await request("PUT", `/memory_entrys/${__memory_entry_id}`, {
270
+ state: "__invalid_state__",
271
+ });
272
+ assert(status === 422, `Expected 422 for invalid transition, got ${status}`);
273
+ assert(data.error?.code === "INVALID_TRANSITION", "Error code must be INVALID_TRANSITION");
274
+ });
275
+
276
+ await test("DELETE /memory_entrys/:id — deletes entity", async () => {
277
+ const { status } = await request("DELETE", `/memory_entrys/${__memory_entry_id}`);
278
+ assert(status === 204, `Expected 204, got ${status}`);
279
+ });
280
+
281
+ await test("GET /memory_entrys/:id — returns 404 after delete", async () => {
282
+ const { status } = await request("GET", `/memory_entrys/${__memory_entry_id}`);
283
+ assert(status === 404, `Expected 404, got ${status}`);
284
+ });
285
+
286
+ // ─── IndexingJobService Tests ─────────────────────────────────────────────────────
287
+
288
+ console.log("\nIndexingJobService — CRUD");
289
+
290
+ let __indexing_job_id: string;
291
+
292
+ await test("POST /indexing_jobs — creates entity", async () => {
293
+ const { status, data } = await request("POST", "/indexing_jobs", {"knowledge_base_id":"00000000-0000-0000-0000-000000000001","project_id":"00000000-0000-0000-0000-000000000001","job_type":"test_value","file_paths":{},"files_total":1,"files_processed":1,"chunks_total":1,"chunks_embedded":1,"error":null});
294
+ assert(status === 201, `Expected 201, got ${status}: ${JSON.stringify(data)}`);
295
+ assert(data.id, "Response must have id");
296
+ __indexing_job_id = data.id;
297
+ });
298
+
299
+ await test("GET /indexing_jobs/:id — reads entity", async () => {
300
+ const { status, data } = await request("GET", `/indexing_jobs/${__indexing_job_id}`);
301
+ assert(status === 200, `Expected 200, got ${status}`);
302
+ assert(data.id === __indexing_job_id, "ID must match");
303
+ });
304
+
305
+ await test("GET /indexing_jobs — lists entities", async () => {
306
+ const { status, data } = await request("GET", "/indexing_jobs");
307
+ assert(status === 200, `Expected 200, got ${status}`);
308
+ assert(Array.isArray(data.items), "Response must have items array");
309
+ assert(typeof data.total === "number", "Response must have total");
310
+ });
311
+
312
+ await test("GET /indexing_jobs — rejects unauthenticated", async () => {
313
+ const res = await fetch(`${BASE_URL}/indexing_jobs`);
314
+ assert(res.status === 401, `Expected 401, got ${res.status}`);
315
+ });
316
+
317
+ // State machine: IndexingJob
318
+ await test("PUT /indexing_jobs/:id — rejects invalid state transition", async () => {
319
+ const { status, data } = await request("PUT", `/indexing_jobs/${__indexing_job_id}`, {
320
+ state: "__invalid_state__",
321
+ });
322
+ assert(status === 422, `Expected 422 for invalid transition, got ${status}`);
323
+ assert(data.error?.code === "INVALID_TRANSITION", "Error code must be INVALID_TRANSITION");
324
+ });
325
+
326
+ await test("DELETE /indexing_jobs/:id — deletes entity", async () => {
327
+ const { status } = await request("DELETE", `/indexing_jobs/${__indexing_job_id}`);
328
+ assert(status === 204, `Expected 204, got ${status}`);
329
+ });
330
+
331
+ await test("GET /indexing_jobs/:id — returns 404 after delete", async () => {
332
+ const { status } = await request("GET", `/indexing_jobs/${__indexing_job_id}`);
333
+ assert(status === 404, `Expected 404, got ${status}`);
334
+ });
335
+
336
+ console.log(`\n════════════════════════════════════════`);
337
+ console.log(`Results: ${passed} passed, ${failed} failed`);
338
+ console.log("═".repeat(40));
339
+ if (failed > 0) process.exit(1);
340
+ })().catch(e => { console.error(e); process.exit(1); });
@@ -0,0 +1,25 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "commonjs",
5
+ "lib": [
6
+ "ES2020",
7
+ "DOM"
8
+ ],
9
+ "outDir": "./dist",
10
+ "rootDir": "./src",
11
+ "strict": true,
12
+ "esModuleInterop": true,
13
+ "skipLibCheck": true,
14
+ "forceConsistentCasingInFileNames": true,
15
+ "declaration": true,
16
+ "sourceMap": true
17
+ },
18
+ "include": [
19
+ "src/**/*"
20
+ ],
21
+ "exclude": [
22
+ "node_modules",
23
+ "dist"
24
+ ]
25
+ }
@@ -0,0 +1,7 @@
1
+ node_modules
2
+ dist
3
+ .env
4
+ *.log
5
+ .git
6
+ *.bone
7
+ *.bone.map
@@ -0,0 +1,36 @@
1
+ # SessionDomain Environment Variables
2
+ # Copy this file to .env and fill in real values. Never commit .env to source control.
3
+
4
+ # --- Required in production ---
5
+ # Generate with: node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
6
+ JWT_SECRET=
7
+
8
+ # --- Database ---
9
+ DATABASE_URL=postgresql://postgres:postgres@localhost:5432/session_domain
10
+
11
+ # --- Redis (optional, used by some domain templates) ---
12
+ REDIS_URL=redis://localhost:6379
13
+
14
+ # --- Server ---
15
+ PORT=3000
16
+ NODE_ENV=development
17
+
18
+ # --- CORS ---
19
+ # Comma-separated list of allowed origins. Leave empty to disallow all cross-origin requests.
20
+ # Example: ALLOWED_ORIGINS=https://app.example.com,https://admin.example.com
21
+ ALLOWED_ORIGINS=
22
+
23
+ # --- Event delivery mode ---
24
+ # in_process: in-memory, fast, no durability guarantees (default for development)
25
+ # durable: Postgres-backed transactional outbox (recommended for production)
26
+ EVENT_MODE=in_process
27
+ EVENT_WORKER_INTERVAL_MS=1000
28
+
29
+ # --- Request timeout ---
30
+ REQUEST_TIMEOUT_MS=30000
31
+
32
+ # --- Notifications ---
33
+ # NOTIFY_PROVIDER=log|resend|sendgrid (default: log)
34
+ NOTIFY_PROVIDER=log
35
+ NOTIFY_API_KEY=
36
+ NOTIFY_FROM_EMAIL=noreply@example.com
@@ -0,0 +1,58 @@
1
+ # Generated by BoneScript compiler.
2
+ name: CI/CD
3
+
4
+ on:
5
+ push:
6
+ branches: [main]
7
+ pull_request:
8
+ branches: [main]
9
+
10
+ jobs:
11
+ test:
12
+ runs-on: ubuntu-latest
13
+ services:
14
+ postgres:
15
+ image: postgres:16
16
+ env:
17
+ POSTGRES_DB: session_domain_test
18
+ POSTGRES_USER: postgres
19
+ POSTGRES_PASSWORD: postgres
20
+ ports:
21
+ - 5432:5432
22
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
23
+
24
+ steps:
25
+ - uses: actions/checkout@v4
26
+ - uses: actions/setup-node@v4
27
+ with:
28
+ node-version: 20
29
+ cache: npm
30
+
31
+ - name: Install dependencies
32
+ run: npm ci
33
+
34
+ - name: Type check
35
+ run: npx tsc --noEmit
36
+
37
+ - name: Run migrations
38
+ run: npm run migrate
39
+ env:
40
+ DATABASE_URL: postgresql://postgres:postgres@localhost:5432/session_domain_test
41
+
42
+ - name: Run tests
43
+ run: npx ts-node src/tests.ts
44
+ env:
45
+ DATABASE_URL: postgresql://postgres:postgres@localhost:5432/session_domain_test
46
+ JWT_SECRET: test-secret
47
+ TEST_BASE_URL: http://localhost:3000
48
+
49
+ build:
50
+ needs: test
51
+ runs-on: ubuntu-latest
52
+ if: github.ref == 'refs/heads/main'
53
+ steps:
54
+ - uses: actions/checkout@v4
55
+ - name: Build Docker image
56
+ run: docker build -t session-domain:${{ github.sha }} .
57
+ - name: Tag as latest
58
+ run: docker tag session-domain:${{ github.sha }} session-domain:latest
@@ -0,0 +1,22 @@
1
+ # Generated by BoneScript compiler.
2
+ FROM node:20-alpine AS builder
3
+ WORKDIR /app
4
+ COPY package*.json ./
5
+ RUN npm ci --only=production
6
+ COPY . .
7
+ RUN npm run build
8
+
9
+ FROM node:20-alpine AS runtime
10
+ WORKDIR /app
11
+ ENV NODE_ENV=production
12
+ COPY --from=builder /app/dist ./dist
13
+ COPY --from=builder /app/node_modules ./node_modules
14
+ COPY --from=builder /app/package.json ./
15
+
16
+ # Health check
17
+ HEALTHCHECK --interval=10s --timeout=5s --start-period=30s --retries=3 \
18
+ CMD wget -qO- http://localhost:3000/health/live || exit 1
19
+
20
+ EXPOSE 3000
21
+ USER node
22
+ CMD ["node", "dist/index.js"]
@@ -0,0 +1,47 @@
1
+ # SessionDomain
2
+
3
+ Generated by BoneScript compiler. Source hash: 40fdc4c964bb2a50
4
+
5
+ ## Quick Start
6
+
7
+ ```bash
8
+ # Start dependencies
9
+ docker compose up -d
10
+
11
+ # Install
12
+ npm install
13
+
14
+ # Run migrations
15
+ npm run migrate
16
+
17
+ # Start server
18
+ npm run dev
19
+ ```
20
+
21
+ ## API Routes
22
+
23
+ - `/projects` — ProjectService
24
+ - `/sessions` — SessionService
25
+ - `/messages` — MessageService
26
+ - `/parts` — PartService
27
+ - `/permissions` — PermissionService
28
+
29
+ Each route supports:
30
+ - `GET /` — List (paginated)
31
+ - `GET /:id` — Read
32
+ - `POST /` — Create
33
+ - `PUT /:id` — Update
34
+ - `DELETE /:id` — Delete
35
+
36
+ Plus capability-specific endpoints.
37
+
38
+ ## Auth
39
+
40
+ Send a Bearer token in the Authorization header:
41
+ ```
42
+ Authorization: Bearer <jwt-token>
43
+ ```
44
+
45
+ ## Environment
46
+
47
+ Copy `.env.example` to `.env` and configure.