@soederpop/luca 0.1.2 → 0.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 (381) hide show
  1. package/.github/workflows/release.yaml +167 -0
  2. package/CLAUDE.md +2 -0
  3. package/README.md +3 -0
  4. package/assistants/codingAssistant/ABOUT.md +3 -0
  5. package/assistants/codingAssistant/CORE.md +22 -17
  6. package/assistants/codingAssistant/hooks.ts +17 -4
  7. package/assistants/codingAssistant/tools.ts +1 -106
  8. package/assistants/inkbot/ABOUT.md +5 -0
  9. package/assistants/inkbot/CORE.md +71 -0
  10. package/assistants/inkbot/hooks.ts +14 -0
  11. package/assistants/inkbot/tools.ts +47 -0
  12. package/bun.lock +20 -4
  13. package/commands/inkbot.ts +353 -0
  14. package/commands/release.ts +75 -181
  15. package/dist/agi/container.server.d.ts +63 -0
  16. package/dist/agi/container.server.d.ts.map +1 -0
  17. package/dist/agi/endpoints/ask.d.ts +20 -0
  18. package/dist/agi/endpoints/ask.d.ts.map +1 -0
  19. package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
  20. package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
  21. package/dist/agi/endpoints/conversations.d.ts +18 -0
  22. package/dist/agi/endpoints/conversations.d.ts.map +1 -0
  23. package/dist/agi/endpoints/experts.d.ts +8 -0
  24. package/dist/agi/endpoints/experts.d.ts.map +1 -0
  25. package/dist/agi/feature.d.ts +9 -0
  26. package/dist/agi/feature.d.ts.map +1 -0
  27. package/dist/agi/features/assistant.d.ts +509 -0
  28. package/dist/agi/features/assistant.d.ts.map +1 -0
  29. package/dist/agi/features/assistants-manager.d.ts +236 -0
  30. package/dist/agi/features/assistants-manager.d.ts.map +1 -0
  31. package/dist/agi/features/autonomous-assistant.d.ts +281 -0
  32. package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
  33. package/dist/agi/features/browser-use.d.ts +479 -0
  34. package/dist/agi/features/browser-use.d.ts.map +1 -0
  35. package/dist/agi/features/claude-code.d.ts +824 -0
  36. package/dist/agi/features/claude-code.d.ts.map +1 -0
  37. package/dist/agi/features/conversation-history.d.ts +245 -0
  38. package/dist/agi/features/conversation-history.d.ts.map +1 -0
  39. package/dist/agi/features/conversation.d.ts +464 -0
  40. package/dist/agi/features/conversation.d.ts.map +1 -0
  41. package/dist/agi/features/docs-reader.d.ts +72 -0
  42. package/dist/agi/features/docs-reader.d.ts.map +1 -0
  43. package/dist/agi/features/file-tools.d.ts +110 -0
  44. package/dist/agi/features/file-tools.d.ts.map +1 -0
  45. package/dist/agi/features/luca-coder.d.ts +323 -0
  46. package/dist/agi/features/luca-coder.d.ts.map +1 -0
  47. package/dist/agi/features/openai-codex.d.ts +381 -0
  48. package/dist/agi/features/openai-codex.d.ts.map +1 -0
  49. package/dist/agi/features/openapi.d.ts +200 -0
  50. package/dist/agi/features/openapi.d.ts.map +1 -0
  51. package/dist/agi/features/skills-library.d.ts +167 -0
  52. package/dist/agi/features/skills-library.d.ts.map +1 -0
  53. package/dist/agi/index.d.ts +5 -0
  54. package/dist/agi/index.d.ts.map +1 -0
  55. package/dist/agi/lib/interceptor-chain.d.ts +44 -0
  56. package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
  57. package/dist/agi/lib/token-counter.d.ts +13 -0
  58. package/dist/agi/lib/token-counter.d.ts.map +1 -0
  59. package/dist/bootstrap/generated.d.ts +5 -0
  60. package/dist/bootstrap/generated.d.ts.map +1 -0
  61. package/dist/browser.d.ts +12 -0
  62. package/dist/browser.d.ts.map +1 -0
  63. package/dist/bus.d.ts +29 -0
  64. package/dist/bus.d.ts.map +1 -0
  65. package/dist/cli/build-info.d.ts +4 -0
  66. package/dist/cli/build-info.d.ts.map +1 -0
  67. package/dist/cli/cli.d.ts +3 -0
  68. package/dist/cli/cli.d.ts.map +1 -0
  69. package/dist/client.d.ts +60 -0
  70. package/dist/client.d.ts.map +1 -0
  71. package/dist/clients/civitai/index.d.ts +472 -0
  72. package/dist/clients/civitai/index.d.ts.map +1 -0
  73. package/dist/clients/client-template.d.ts +30 -0
  74. package/dist/clients/client-template.d.ts.map +1 -0
  75. package/dist/clients/comfyui/index.d.ts +281 -0
  76. package/dist/clients/comfyui/index.d.ts.map +1 -0
  77. package/dist/clients/elevenlabs/index.d.ts +197 -0
  78. package/dist/clients/elevenlabs/index.d.ts.map +1 -0
  79. package/dist/clients/graph.d.ts +64 -0
  80. package/dist/clients/graph.d.ts.map +1 -0
  81. package/dist/clients/openai/index.d.ts +247 -0
  82. package/dist/clients/openai/index.d.ts.map +1 -0
  83. package/dist/clients/rest.d.ts +92 -0
  84. package/dist/clients/rest.d.ts.map +1 -0
  85. package/dist/clients/supabase/index.d.ts +176 -0
  86. package/dist/clients/supabase/index.d.ts.map +1 -0
  87. package/dist/clients/websocket.d.ts +127 -0
  88. package/dist/clients/websocket.d.ts.map +1 -0
  89. package/dist/command.d.ts +163 -0
  90. package/dist/command.d.ts.map +1 -0
  91. package/dist/commands/bootstrap.d.ts +20 -0
  92. package/dist/commands/bootstrap.d.ts.map +1 -0
  93. package/dist/commands/chat.d.ts +37 -0
  94. package/dist/commands/chat.d.ts.map +1 -0
  95. package/dist/commands/code.d.ts +28 -0
  96. package/dist/commands/code.d.ts.map +1 -0
  97. package/dist/commands/console.d.ts +22 -0
  98. package/dist/commands/console.d.ts.map +1 -0
  99. package/dist/commands/describe.d.ts +50 -0
  100. package/dist/commands/describe.d.ts.map +1 -0
  101. package/dist/commands/eval.d.ts +23 -0
  102. package/dist/commands/eval.d.ts.map +1 -0
  103. package/dist/commands/help.d.ts +25 -0
  104. package/dist/commands/help.d.ts.map +1 -0
  105. package/dist/commands/index.d.ts +18 -0
  106. package/dist/commands/index.d.ts.map +1 -0
  107. package/dist/commands/introspect.d.ts +24 -0
  108. package/dist/commands/introspect.d.ts.map +1 -0
  109. package/dist/commands/mcp.d.ts +35 -0
  110. package/dist/commands/mcp.d.ts.map +1 -0
  111. package/dist/commands/prompt.d.ts +38 -0
  112. package/dist/commands/prompt.d.ts.map +1 -0
  113. package/dist/commands/run.d.ts +24 -0
  114. package/dist/commands/run.d.ts.map +1 -0
  115. package/dist/commands/sandbox-mcp.d.ts +34 -0
  116. package/dist/commands/sandbox-mcp.d.ts.map +1 -0
  117. package/dist/commands/save-api-docs.d.ts +21 -0
  118. package/dist/commands/save-api-docs.d.ts.map +1 -0
  119. package/dist/commands/scaffold.d.ts +24 -0
  120. package/dist/commands/scaffold.d.ts.map +1 -0
  121. package/dist/commands/select.d.ts +22 -0
  122. package/dist/commands/select.d.ts.map +1 -0
  123. package/dist/commands/serve.d.ts +29 -0
  124. package/dist/commands/serve.d.ts.map +1 -0
  125. package/dist/container-describer.d.ts +144 -0
  126. package/dist/container-describer.d.ts.map +1 -0
  127. package/dist/container.d.ts +451 -0
  128. package/dist/container.d.ts.map +1 -0
  129. package/dist/endpoint.d.ts +113 -0
  130. package/dist/endpoint.d.ts.map +1 -0
  131. package/dist/feature.d.ts +47 -0
  132. package/dist/feature.d.ts.map +1 -0
  133. package/dist/graft.d.ts +29 -0
  134. package/dist/graft.d.ts.map +1 -0
  135. package/dist/hash-object.d.ts +8 -0
  136. package/dist/hash-object.d.ts.map +1 -0
  137. package/dist/helper.d.ts +209 -0
  138. package/dist/helper.d.ts.map +1 -0
  139. package/dist/introspection/generated.node.d.ts +44623 -0
  140. package/dist/introspection/generated.node.d.ts.map +1 -0
  141. package/dist/introspection/generated.web.d.ts +1412 -0
  142. package/dist/introspection/generated.web.d.ts.map +1 -0
  143. package/dist/introspection/index.d.ts +156 -0
  144. package/dist/introspection/index.d.ts.map +1 -0
  145. package/dist/introspection/scan.d.ts +147 -0
  146. package/dist/introspection/scan.d.ts.map +1 -0
  147. package/dist/node/container.d.ts +256 -0
  148. package/dist/node/container.d.ts.map +1 -0
  149. package/dist/node/feature.d.ts +9 -0
  150. package/dist/node/feature.d.ts.map +1 -0
  151. package/dist/node/features/container-link.d.ts +213 -0
  152. package/dist/node/features/container-link.d.ts.map +1 -0
  153. package/dist/node/features/content-db.d.ts +354 -0
  154. package/dist/node/features/content-db.d.ts.map +1 -0
  155. package/dist/node/features/disk-cache.d.ts +236 -0
  156. package/dist/node/features/disk-cache.d.ts.map +1 -0
  157. package/dist/node/features/dns.d.ts +511 -0
  158. package/dist/node/features/dns.d.ts.map +1 -0
  159. package/dist/node/features/docker.d.ts +485 -0
  160. package/dist/node/features/docker.d.ts.map +1 -0
  161. package/dist/node/features/downloader.d.ts +73 -0
  162. package/dist/node/features/downloader.d.ts.map +1 -0
  163. package/dist/node/features/figlet-fonts.d.ts +4 -0
  164. package/dist/node/features/figlet-fonts.d.ts.map +1 -0
  165. package/dist/node/features/file-manager.d.ts +177 -0
  166. package/dist/node/features/file-manager.d.ts.map +1 -0
  167. package/dist/node/features/fs.d.ts +635 -0
  168. package/dist/node/features/fs.d.ts.map +1 -0
  169. package/dist/node/features/git.d.ts +329 -0
  170. package/dist/node/features/git.d.ts.map +1 -0
  171. package/dist/node/features/google-auth.d.ts +200 -0
  172. package/dist/node/features/google-auth.d.ts.map +1 -0
  173. package/dist/node/features/google-calendar.d.ts +194 -0
  174. package/dist/node/features/google-calendar.d.ts.map +1 -0
  175. package/dist/node/features/google-docs.d.ts +138 -0
  176. package/dist/node/features/google-docs.d.ts.map +1 -0
  177. package/dist/node/features/google-drive.d.ts +202 -0
  178. package/dist/node/features/google-drive.d.ts.map +1 -0
  179. package/dist/node/features/google-mail.d.ts +221 -0
  180. package/dist/node/features/google-mail.d.ts.map +1 -0
  181. package/dist/node/features/google-sheets.d.ts +157 -0
  182. package/dist/node/features/google-sheets.d.ts.map +1 -0
  183. package/dist/node/features/grep.d.ts +207 -0
  184. package/dist/node/features/grep.d.ts.map +1 -0
  185. package/dist/node/features/helpers.d.ts +236 -0
  186. package/dist/node/features/helpers.d.ts.map +1 -0
  187. package/dist/node/features/ink.d.ts +332 -0
  188. package/dist/node/features/ink.d.ts.map +1 -0
  189. package/dist/node/features/ipc-socket.d.ts +298 -0
  190. package/dist/node/features/ipc-socket.d.ts.map +1 -0
  191. package/dist/node/features/json-tree.d.ts +140 -0
  192. package/dist/node/features/json-tree.d.ts.map +1 -0
  193. package/dist/node/features/networking.d.ts +373 -0
  194. package/dist/node/features/networking.d.ts.map +1 -0
  195. package/dist/node/features/nlp.d.ts +125 -0
  196. package/dist/node/features/nlp.d.ts.map +1 -0
  197. package/dist/node/features/opener.d.ts +93 -0
  198. package/dist/node/features/opener.d.ts.map +1 -0
  199. package/dist/node/features/os.d.ts +168 -0
  200. package/dist/node/features/os.d.ts.map +1 -0
  201. package/dist/node/features/package-finder.d.ts +419 -0
  202. package/dist/node/features/package-finder.d.ts.map +1 -0
  203. package/dist/node/features/postgres.d.ts +173 -0
  204. package/dist/node/features/postgres.d.ts.map +1 -0
  205. package/dist/node/features/proc.d.ts +285 -0
  206. package/dist/node/features/proc.d.ts.map +1 -0
  207. package/dist/node/features/process-manager.d.ts +427 -0
  208. package/dist/node/features/process-manager.d.ts.map +1 -0
  209. package/dist/node/features/python.d.ts +477 -0
  210. package/dist/node/features/python.d.ts.map +1 -0
  211. package/dist/node/features/redis.d.ts +247 -0
  212. package/dist/node/features/redis.d.ts.map +1 -0
  213. package/dist/node/features/repl.d.ts +84 -0
  214. package/dist/node/features/repl.d.ts.map +1 -0
  215. package/dist/node/features/runpod.d.ts +527 -0
  216. package/dist/node/features/runpod.d.ts.map +1 -0
  217. package/dist/node/features/secure-shell.d.ts +145 -0
  218. package/dist/node/features/secure-shell.d.ts.map +1 -0
  219. package/dist/node/features/semantic-search.d.ts +207 -0
  220. package/dist/node/features/semantic-search.d.ts.map +1 -0
  221. package/dist/node/features/sqlite.d.ts +180 -0
  222. package/dist/node/features/sqlite.d.ts.map +1 -0
  223. package/dist/node/features/telegram.d.ts +173 -0
  224. package/dist/node/features/telegram.d.ts.map +1 -0
  225. package/dist/node/features/transpiler.d.ts +51 -0
  226. package/dist/node/features/transpiler.d.ts.map +1 -0
  227. package/dist/node/features/tts.d.ts +108 -0
  228. package/dist/node/features/tts.d.ts.map +1 -0
  229. package/dist/node/features/ui.d.ts +562 -0
  230. package/dist/node/features/ui.d.ts.map +1 -0
  231. package/dist/node/features/vault.d.ts +90 -0
  232. package/dist/node/features/vault.d.ts.map +1 -0
  233. package/dist/node/features/vm.d.ts +285 -0
  234. package/dist/node/features/vm.d.ts.map +1 -0
  235. package/dist/node/features/yaml-tree.d.ts +118 -0
  236. package/dist/node/features/yaml-tree.d.ts.map +1 -0
  237. package/dist/node/features/yaml.d.ts +127 -0
  238. package/dist/node/features/yaml.d.ts.map +1 -0
  239. package/dist/node.d.ts +67 -0
  240. package/dist/node.d.ts.map +1 -0
  241. package/dist/python/generated.d.ts +2 -0
  242. package/dist/python/generated.d.ts.map +1 -0
  243. package/dist/react/index.d.ts +36 -0
  244. package/dist/react/index.d.ts.map +1 -0
  245. package/dist/registry.d.ts +97 -0
  246. package/dist/registry.d.ts.map +1 -0
  247. package/dist/scaffolds/generated.d.ts +13 -0
  248. package/dist/scaffolds/generated.d.ts.map +1 -0
  249. package/dist/scaffolds/template.d.ts +11 -0
  250. package/dist/scaffolds/template.d.ts.map +1 -0
  251. package/dist/schemas/base.d.ts +254 -0
  252. package/dist/schemas/base.d.ts.map +1 -0
  253. package/dist/selector.d.ts +130 -0
  254. package/dist/selector.d.ts.map +1 -0
  255. package/dist/server.d.ts +89 -0
  256. package/dist/server.d.ts.map +1 -0
  257. package/dist/servers/express.d.ts +104 -0
  258. package/dist/servers/express.d.ts.map +1 -0
  259. package/dist/servers/mcp.d.ts +201 -0
  260. package/dist/servers/mcp.d.ts.map +1 -0
  261. package/dist/servers/socket.d.ts +121 -0
  262. package/dist/servers/socket.d.ts.map +1 -0
  263. package/dist/state.d.ts +24 -0
  264. package/dist/state.d.ts.map +1 -0
  265. package/dist/web/clients/socket.d.ts +37 -0
  266. package/dist/web/clients/socket.d.ts.map +1 -0
  267. package/dist/web/container.d.ts +55 -0
  268. package/dist/web/container.d.ts.map +1 -0
  269. package/dist/web/extension.d.ts +4 -0
  270. package/dist/web/extension.d.ts.map +1 -0
  271. package/dist/web/feature.d.ts +8 -0
  272. package/dist/web/feature.d.ts.map +1 -0
  273. package/dist/web/features/asset-loader.d.ts +35 -0
  274. package/dist/web/features/asset-loader.d.ts.map +1 -0
  275. package/dist/web/features/container-link.d.ts +167 -0
  276. package/dist/web/features/container-link.d.ts.map +1 -0
  277. package/dist/web/features/esbuild.d.ts +51 -0
  278. package/dist/web/features/esbuild.d.ts.map +1 -0
  279. package/dist/web/features/helpers.d.ts +140 -0
  280. package/dist/web/features/helpers.d.ts.map +1 -0
  281. package/dist/web/features/network.d.ts +69 -0
  282. package/dist/web/features/network.d.ts.map +1 -0
  283. package/dist/web/features/speech.d.ts +71 -0
  284. package/dist/web/features/speech.d.ts.map +1 -0
  285. package/dist/web/features/vault.d.ts +62 -0
  286. package/dist/web/features/vault.d.ts.map +1 -0
  287. package/dist/web/features/vm.d.ts +48 -0
  288. package/dist/web/features/vm.d.ts.map +1 -0
  289. package/dist/web/features/voice-recognition.d.ts +96 -0
  290. package/dist/web/features/voice-recognition.d.ts.map +1 -0
  291. package/dist/web/shims/isomorphic-vm.d.ts +22 -0
  292. package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
  293. package/docs/apis/features/agi/assistant.md +1 -0
  294. package/docs/apis/features/agi/assistants-manager.md +62 -2
  295. package/docs/apis/features/agi/auto-assistant.md +11 -109
  296. package/docs/apis/features/agi/claude-code.md +138 -0
  297. package/docs/apis/features/agi/conversation.md +60 -31
  298. package/docs/apis/features/agi/luca-coder.md +407 -0
  299. package/docs/apis/features/agi/openapi.md +2 -2
  300. package/docs/apis/features/agi/skills-library.md +12 -0
  301. package/docs/apis/features/node/python.md +81 -11
  302. package/docs/apis/features/node/transpiler.md +74 -0
  303. package/docs/apis/features/web/esbuild.md +0 -6
  304. package/docs/apis/servers/mcp.md +2 -2
  305. package/docs/examples/entity.md +124 -0
  306. package/docs/ideas/assistant-factory-pattern.md +142 -0
  307. package/package.json +74 -21
  308. package/src/agi/container.server.ts +10 -0
  309. package/src/agi/feature.ts +13 -0
  310. package/src/agi/features/agent-memory.ts +694 -0
  311. package/src/agi/features/assistant.ts +37 -26
  312. package/src/agi/features/assistants-manager.ts +95 -5
  313. package/src/agi/features/autonomous-assistant.ts +1 -5
  314. package/src/agi/features/browser-use.ts +32 -2
  315. package/src/agi/features/claude-code.ts +165 -1
  316. package/src/agi/features/coding-tools.ts +175 -0
  317. package/src/agi/features/conversation-history.ts +2 -6
  318. package/src/agi/features/conversation.ts +95 -3
  319. package/src/agi/features/docs-reader.ts +2 -1
  320. package/src/agi/features/file-tools.ts +35 -28
  321. package/src/agi/features/luca-coder.ts +1 -5
  322. package/src/agi/features/openai-codex.ts +1 -1
  323. package/src/agi/features/openapi.ts +3 -3
  324. package/src/agi/features/skills-library.ts +111 -13
  325. package/src/agi/lib/interceptor-chain.ts +10 -0
  326. package/src/agi/lib/token-counter.ts +1 -1
  327. package/src/bootstrap/generated.ts +126 -1
  328. package/src/bus.ts +27 -5
  329. package/src/cli/build-info.ts +2 -2
  330. package/src/client.ts +2 -2
  331. package/src/clients/elevenlabs/index.ts +5 -0
  332. package/src/clients/voicebox/index.ts +300 -0
  333. package/src/commands/bootstrap.ts +2 -1
  334. package/src/commands/chat.ts +1 -0
  335. package/src/commands/code.ts +4 -2
  336. package/src/commands/prompt.ts +34 -34
  337. package/src/commands/sandbox-mcp.ts +69 -163
  338. package/src/commands/save-api-docs.ts +10 -8
  339. package/src/commands/select.ts +8 -3
  340. package/src/container-describer.ts +70 -84
  341. package/src/container.ts +93 -3
  342. package/src/endpoint.ts +1 -1
  343. package/src/entity.ts +173 -0
  344. package/src/feature.ts +3 -3
  345. package/src/helper.ts +8 -4
  346. package/src/introspection/generated.agi.ts +3012 -1356
  347. package/src/introspection/generated.node.ts +179 -33
  348. package/src/introspection/generated.web.ts +95 -3
  349. package/src/introspection/scan.ts +1 -1
  350. package/src/node/container.ts +1 -1
  351. package/src/node/features/content-db.ts +57 -30
  352. package/src/node/features/file-manager.ts +10 -9
  353. package/src/node/features/git.ts +5 -5
  354. package/src/node/features/helpers.ts +1 -1
  355. package/src/node/features/json-tree.ts +1 -1
  356. package/src/node/features/os.ts +3 -3
  357. package/src/node/features/package-finder.ts +1 -1
  358. package/src/node/features/process-manager.ts +51 -18
  359. package/src/node/features/python.ts +3 -3
  360. package/src/node/features/redis.ts +1 -1
  361. package/src/node/features/repl.ts +2 -2
  362. package/src/node/features/transpiler.ts +2 -2
  363. package/src/node/features/ui.ts +1 -1
  364. package/src/node/features/vm.ts +3 -3
  365. package/src/node/features/yaml-tree.ts +1 -1
  366. package/src/node.ts +1 -0
  367. package/src/python/generated.ts +1 -1
  368. package/src/scaffolds/generated.ts +1 -1
  369. package/src/selector.ts +74 -4
  370. package/src/server.ts +2 -2
  371. package/src/servers/mcp.ts +6 -6
  372. package/src/web/features/helpers.ts +1 -1
  373. package/src/web/features/network.ts +1 -0
  374. package/test/assistant.test.ts +14 -5
  375. package/test/conversation.test.ts +220 -0
  376. package/test-integration/memory.test.ts +204 -0
  377. package/tsconfig.build.json +12 -0
  378. package/tsconfig.json +1 -1
  379. package/scripts/examples/telegram-ink-ui.ts +0 -302
  380. package/scripts/examples/using-openai-codex.ts +0 -23
  381. package/scripts/examples/vm-loading-esm-modules.ts +0 -16
@@ -0,0 +1,207 @@
1
+ import { z } from 'zod';
2
+ import { Feature } from '../feature.js';
3
+ import { Database } from 'bun:sqlite';
4
+ declare module '@soederpop/luca/feature' {
5
+ interface AvailableFeatures {
6
+ semanticSearch: typeof SemanticSearch;
7
+ }
8
+ }
9
+ export declare const SemanticSearchOptionsSchema: z.ZodObject<{
10
+ name: z.ZodOptional<z.ZodString>;
11
+ _cacheKey: z.ZodOptional<z.ZodString>;
12
+ cached: z.ZodOptional<z.ZodBoolean>;
13
+ enable: z.ZodOptional<z.ZodBoolean>;
14
+ dbPath: z.ZodDefault<z.ZodString>;
15
+ embeddingModel: z.ZodDefault<z.ZodString>;
16
+ embeddingProvider: z.ZodDefault<z.ZodEnum<{
17
+ local: "local";
18
+ openai: "openai";
19
+ }>>;
20
+ chunkStrategy: z.ZodDefault<z.ZodEnum<{
21
+ fixed: "fixed";
22
+ section: "section";
23
+ document: "document";
24
+ }>>;
25
+ chunkSize: z.ZodDefault<z.ZodNumber>;
26
+ chunkOverlap: z.ZodDefault<z.ZodNumber>;
27
+ }, z.core.$strip>;
28
+ export declare const SemanticSearchStateSchema: z.ZodObject<{
29
+ enabled: z.ZodDefault<z.ZodBoolean>;
30
+ indexed: z.ZodDefault<z.ZodNumber>;
31
+ embedded: z.ZodDefault<z.ZodNumber>;
32
+ lastIndexedAt: z.ZodDefault<z.ZodNullable<z.ZodString>>;
33
+ dbReady: z.ZodDefault<z.ZodBoolean>;
34
+ }, z.core.$loose>;
35
+ export type SemanticSearchOptions = z.infer<typeof SemanticSearchOptionsSchema>;
36
+ export type SemanticSearchState = z.infer<typeof SemanticSearchStateSchema>;
37
+ export declare const SemanticSearchEventsSchema: z.ZodObject<{
38
+ stateChange: z.ZodTuple<[z.ZodAny], null>;
39
+ enabled: z.ZodTuple<[], null>;
40
+ modelLoaded: z.ZodTuple<[], null>;
41
+ dbReady: z.ZodTuple<[], null>;
42
+ indexed: z.ZodTuple<[z.ZodObject<{
43
+ documents: z.ZodNumber;
44
+ chunks: z.ZodNumber;
45
+ }, z.core.$strip>], null>;
46
+ modelDisposed: z.ZodTuple<[], null>;
47
+ }, z.core.$strip>;
48
+ export interface Chunk {
49
+ pathId: string;
50
+ section?: string;
51
+ headingPath?: string;
52
+ seq: number;
53
+ content: string;
54
+ contentHash: string;
55
+ }
56
+ export interface SearchResult {
57
+ pathId: string;
58
+ model: string;
59
+ title: string;
60
+ meta: Record<string, any>;
61
+ score: number;
62
+ snippet: string;
63
+ matchedSection?: string;
64
+ headingPath?: string;
65
+ }
66
+ export interface SearchOptions {
67
+ limit?: number;
68
+ model?: string;
69
+ where?: Record<string, any>;
70
+ }
71
+ export interface HybridSearchOptions extends SearchOptions {
72
+ ftsWeight?: number;
73
+ vecWeight?: number;
74
+ }
75
+ export interface IndexStatus {
76
+ documentCount: number;
77
+ chunkCount: number;
78
+ embeddingCount: number;
79
+ lastIndexedAt: string | null;
80
+ provider: string;
81
+ model: string;
82
+ dimensions: number;
83
+ dbSizeBytes: number;
84
+ }
85
+ export interface DocumentInput {
86
+ pathId: string;
87
+ model?: string;
88
+ title?: string;
89
+ slug?: string;
90
+ meta?: Record<string, any>;
91
+ content: string;
92
+ sections?: Array<{
93
+ heading: string;
94
+ headingPath: string;
95
+ content: string;
96
+ level: number;
97
+ }>;
98
+ }
99
+ /**
100
+ * Semantic search feature providing BM25 keyword search, vector similarity search,
101
+ * and hybrid search with Reciprocal Rank Fusion over a SQLite-backed index.
102
+ *
103
+ * Uses bun:sqlite for FTS5 keyword search and BLOB-stored embeddings with
104
+ * JavaScript cosine similarity for vector search.
105
+ *
106
+ * @extends Feature
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const search = container.feature('semanticSearch', {
111
+ * dbPath: '.contentbase/search.sqlite',
112
+ * embeddingProvider: 'local',
113
+ * })
114
+ * await search.initDb()
115
+ * await search.indexDocuments(docs)
116
+ * const results = await search.hybridSearch('how does authentication work')
117
+ * ```
118
+ */
119
+ export declare class SemanticSearch extends Feature<SemanticSearchState, SemanticSearchOptions> {
120
+ static stateSchema: z.ZodObject<{
121
+ enabled: z.ZodDefault<z.ZodBoolean>;
122
+ indexed: z.ZodDefault<z.ZodNumber>;
123
+ embedded: z.ZodDefault<z.ZodNumber>;
124
+ lastIndexedAt: z.ZodDefault<z.ZodNullable<z.ZodString>>;
125
+ dbReady: z.ZodDefault<z.ZodBoolean>;
126
+ }, z.core.$loose>;
127
+ static optionsSchema: z.ZodObject<{
128
+ name: z.ZodOptional<z.ZodString>;
129
+ _cacheKey: z.ZodOptional<z.ZodString>;
130
+ cached: z.ZodOptional<z.ZodBoolean>;
131
+ enable: z.ZodOptional<z.ZodBoolean>;
132
+ dbPath: z.ZodDefault<z.ZodString>;
133
+ embeddingModel: z.ZodDefault<z.ZodString>;
134
+ embeddingProvider: z.ZodDefault<z.ZodEnum<{
135
+ local: "local";
136
+ openai: "openai";
137
+ }>>;
138
+ chunkStrategy: z.ZodDefault<z.ZodEnum<{
139
+ fixed: "fixed";
140
+ section: "section";
141
+ document: "document";
142
+ }>>;
143
+ chunkSize: z.ZodDefault<z.ZodNumber>;
144
+ chunkOverlap: z.ZodDefault<z.ZodNumber>;
145
+ }, z.core.$strip>;
146
+ static eventsSchema: z.ZodObject<{
147
+ stateChange: z.ZodTuple<[z.ZodAny], null>;
148
+ enabled: z.ZodTuple<[], null>;
149
+ modelLoaded: z.ZodTuple<[], null>;
150
+ dbReady: z.ZodTuple<[], null>;
151
+ indexed: z.ZodTuple<[z.ZodObject<{
152
+ documents: z.ZodNumber;
153
+ chunks: z.ZodNumber;
154
+ }, z.core.$strip>], null>;
155
+ modelDisposed: z.ZodTuple<[], null>;
156
+ }, z.core.$strip>;
157
+ static shortcut: "features.semanticSearch";
158
+ private _db;
159
+ private _llamaContext;
160
+ private _llamaModel;
161
+ private _llamaInstance;
162
+ private _idleTimer;
163
+ private _dimensions;
164
+ get initialState(): SemanticSearchState;
165
+ constructor(options: SemanticSearchOptions, context: any);
166
+ private get resolvedDbPath();
167
+ get db(): Database;
168
+ get dimensions(): number;
169
+ initDb(): Promise<void>;
170
+ private _createTables;
171
+ private _writeMeta;
172
+ private _verifyMeta;
173
+ insertDocument(doc: DocumentInput): void;
174
+ insertChunk(chunk: Chunk, embedding: Float32Array): void;
175
+ removeDocument(pathId: string): void;
176
+ getStats(): IndexStatus;
177
+ embed(texts: string[]): Promise<number[][]>;
178
+ private _embedLocal;
179
+ private _embedOpenAI;
180
+ ensureModel(): Promise<void>;
181
+ private _ensureLocalModel;
182
+ private _resetIdleTimer;
183
+ disposeModel(): Promise<void>;
184
+ getDimensions(): number;
185
+ chunkDocument(doc: DocumentInput, strategy?: 'section' | 'fixed' | 'document'): Chunk[];
186
+ search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
187
+ vectorSearch(query: string, options?: SearchOptions): Promise<SearchResult[]>;
188
+ hybridSearch(query: string, options?: HybridSearchOptions): Promise<SearchResult[]>;
189
+ deepSearch(_query: string, _options?: SearchOptions): Promise<SearchResult[]>;
190
+ private _fuseRRF;
191
+ private _buildWhereClause;
192
+ private _matchesFilters;
193
+ indexDocuments(docs: DocumentInput[]): Promise<void>;
194
+ reindex(pathIds?: string[]): Promise<void>;
195
+ removeStale(currentPathIds: string[]): void;
196
+ needsReindex(doc: DocumentInput): boolean;
197
+ status(): IndexStatus;
198
+ static readonly PINNED_LLAMA_VERSION = "3.17.1";
199
+ /**
200
+ * Install node-llama-cpp into the user's project for local embedding support.
201
+ * Detects package manager from lockfile presence and verifies the native addon loads.
202
+ */
203
+ installLocalEmbeddings(cwd: string): Promise<void>;
204
+ close(): Promise<void>;
205
+ }
206
+ export default SemanticSearch;
207
+ //# sourceMappingURL=semantic-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../../src/node/features/semantic-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import { z } from 'zod';
2
+ import { Database } from 'bun:sqlite';
3
+ import { Feature } from '../feature.js';
4
+ import type { ContainerContext } from '../../container.js';
5
+ type SqlValue = string | number | boolean | bigint | Uint8Array | Buffer | null;
6
+ export declare const SqliteStateSchema: z.ZodObject<{
7
+ enabled: z.ZodDefault<z.ZodBoolean>;
8
+ connected: z.ZodDefault<z.ZodBoolean>;
9
+ path: z.ZodDefault<z.ZodString>;
10
+ lastQuery: z.ZodOptional<z.ZodString>;
11
+ lastChanges: z.ZodOptional<z.ZodNumber>;
12
+ lastInsertRowid: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
13
+ lastError: z.ZodOptional<z.ZodString>;
14
+ }, z.core.$loose>;
15
+ export declare const SqliteOptionsSchema: z.ZodObject<{
16
+ name: z.ZodOptional<z.ZodString>;
17
+ _cacheKey: z.ZodOptional<z.ZodString>;
18
+ cached: z.ZodOptional<z.ZodBoolean>;
19
+ enable: z.ZodOptional<z.ZodBoolean>;
20
+ path: z.ZodOptional<z.ZodString>;
21
+ readonly: z.ZodOptional<z.ZodBoolean>;
22
+ readwrite: z.ZodOptional<z.ZodBoolean>;
23
+ create: z.ZodOptional<z.ZodBoolean>;
24
+ }, z.core.$strip>;
25
+ export type SqliteState = z.infer<typeof SqliteStateSchema>;
26
+ export type SqliteOptions = z.infer<typeof SqliteOptionsSchema>;
27
+ export declare const SqliteEventsSchema: z.ZodObject<{
28
+ stateChange: z.ZodTuple<[z.ZodAny], null>;
29
+ enabled: z.ZodTuple<[], null>;
30
+ query: z.ZodTuple<[z.ZodString, z.ZodArray<z.ZodAny>, z.ZodNumber], null>;
31
+ execute: z.ZodTuple<[z.ZodString, z.ZodArray<z.ZodAny>, z.ZodNumber], null>;
32
+ error: z.ZodTuple<[z.ZodAny], null>;
33
+ closed: z.ZodTuple<[], null>;
34
+ }, z.core.$strip>;
35
+ /**
36
+ * SQLite feature for safe SQL execution through Bun's native sqlite binding.
37
+ *
38
+ * Supports:
39
+ * - parameterized query execution (`query` / `execute`)
40
+ * - tagged-template query execution (`sql`) to avoid manual placeholder wiring
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const sqlite = container.feature('sqlite', { path: 'data/app.db' })
45
+ *
46
+ * await sqlite.execute(
47
+ * 'create table if not exists users (id integer primary key, email text not null unique)'
48
+ * )
49
+ *
50
+ * await sqlite.execute('insert into users (email) values (?)', ['hello@example.com'])
51
+ *
52
+ * const users = await sqlite.sql<{ id: number; email: string }>`
53
+ * select id, email from users where email = ${'hello@example.com'}
54
+ * `
55
+ * ```
56
+ */
57
+ export declare class Sqlite extends Feature<SqliteState, SqliteOptions> {
58
+ static shortcut: "features.sqlite";
59
+ static stateSchema: z.ZodObject<{
60
+ enabled: z.ZodDefault<z.ZodBoolean>;
61
+ connected: z.ZodDefault<z.ZodBoolean>;
62
+ path: z.ZodDefault<z.ZodString>;
63
+ lastQuery: z.ZodOptional<z.ZodString>;
64
+ lastChanges: z.ZodOptional<z.ZodNumber>;
65
+ lastInsertRowid: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>;
66
+ lastError: z.ZodOptional<z.ZodString>;
67
+ }, z.core.$loose>;
68
+ static optionsSchema: z.ZodObject<{
69
+ name: z.ZodOptional<z.ZodString>;
70
+ _cacheKey: z.ZodOptional<z.ZodString>;
71
+ cached: z.ZodOptional<z.ZodBoolean>;
72
+ enable: z.ZodOptional<z.ZodBoolean>;
73
+ path: z.ZodOptional<z.ZodString>;
74
+ readonly: z.ZodOptional<z.ZodBoolean>;
75
+ readwrite: z.ZodOptional<z.ZodBoolean>;
76
+ create: z.ZodOptional<z.ZodBoolean>;
77
+ }, z.core.$strip>;
78
+ static eventsSchema: z.ZodObject<{
79
+ stateChange: z.ZodTuple<[z.ZodAny], null>;
80
+ enabled: z.ZodTuple<[], null>;
81
+ query: z.ZodTuple<[z.ZodString, z.ZodArray<z.ZodAny>, z.ZodNumber], null>;
82
+ execute: z.ZodTuple<[z.ZodString, z.ZodArray<z.ZodAny>, z.ZodNumber], null>;
83
+ error: z.ZodTuple<[z.ZodAny], null>;
84
+ closed: z.ZodTuple<[], null>;
85
+ }, z.core.$strip>;
86
+ private _db;
87
+ /**
88
+ * Default state for the SQLite feature before a database is opened.
89
+ * @returns The initial SqliteState with `connected: false` and in-memory path
90
+ */
91
+ get initialState(): SqliteState;
92
+ constructor(options: SqliteOptions, context: ContainerContext);
93
+ /** Returns the underlying Bun sqlite database instance. */
94
+ get db(): Database;
95
+ /**
96
+ * Executes a SELECT-like query and returns result rows.
97
+ *
98
+ * Use sqlite placeholders (`?`) for `params`.
99
+ *
100
+ * @param queryText - The SQL query string with optional `?` placeholders
101
+ * @param params - Ordered array of values to bind to the placeholders
102
+ * @returns Promise resolving to an array of typed result rows
103
+ * @throws {Error} When query text is empty or params contain `undefined`
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const db = container.feature('sqlite', { path: 'app.db' })
108
+ * const users = await db.query<{ id: number; email: string }>(
109
+ * 'SELECT id, email FROM users WHERE active = ?',
110
+ * [1]
111
+ * )
112
+ * ```
113
+ */
114
+ query<T extends object = Record<string, unknown>>(queryText: string, params?: SqlValue[]): Promise<T[]>;
115
+ /**
116
+ * Executes a write/update/delete statement and returns metadata.
117
+ *
118
+ * Use sqlite placeholders (`?`) for `params`.
119
+ *
120
+ * @param queryText - The SQL statement string with optional `?` placeholders
121
+ * @param params - Ordered array of values to bind to the placeholders
122
+ * @returns Promise resolving to `{ changes, lastInsertRowid }` metadata
123
+ * @throws {Error} When query text is empty or params contain `undefined`
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const db = container.feature('sqlite', { path: 'app.db' })
128
+ * const { changes, lastInsertRowid } = await db.execute(
129
+ * 'INSERT INTO users (email) VALUES (?)',
130
+ * ['hello@example.com']
131
+ * )
132
+ * console.log(`Inserted row ${lastInsertRowid}, ${changes} change(s)`)
133
+ * ```
134
+ */
135
+ execute(queryText: string, params?: SqlValue[]): Promise<{
136
+ changes: number;
137
+ lastInsertRowid: number | bigint | null;
138
+ }>;
139
+ /**
140
+ * Safe tagged-template SQL helper.
141
+ *
142
+ * Values become bound parameters automatically, preventing SQL injection.
143
+ *
144
+ * @param strings - Template literal string segments
145
+ * @param values - Interpolated values that become bound `?` parameters
146
+ * @returns Promise resolving to an array of typed result rows
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const db = container.feature('sqlite', { path: 'app.db' })
151
+ * const email = 'hello@example.com'
152
+ * const rows = await db.sql<{ id: number }>`
153
+ * SELECT id FROM users WHERE email = ${email}
154
+ * `
155
+ * ```
156
+ */
157
+ sql<T extends object = Record<string, unknown>>(strings: TemplateStringsArray, ...values: SqlValue[]): Promise<T[]>;
158
+ /**
159
+ * Closes the sqlite database and updates feature state.
160
+ *
161
+ * Emits `closed` after the database handle is released.
162
+ *
163
+ * @returns This Sqlite feature instance for method chaining
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * const db = container.feature('sqlite', { path: 'app.db' })
168
+ * // ... run queries ...
169
+ * db.close()
170
+ * ```
171
+ */
172
+ close(): this;
173
+ }
174
+ export default Sqlite;
175
+ declare module '../../feature.js' {
176
+ interface AvailableFeatures {
177
+ sqlite: typeof Sqlite;
178
+ }
179
+ }
180
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/node/features/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,IAAI,CAAA;AAE/E,eAAO,MAAM,iBAAiB;;;;;;;;iBAO5B,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;iBAK9B,CAAA;AAEF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,kBAAkB;;;;;;;iBAe7B,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,MAAO,SAAQ,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC;IAC7D,OAAgB,QAAQ,EAAG,iBAAiB,CAAS;IACrD,OAAgB,WAAW;;;;;;;;sBAAoB;IAC/C,OAAgB,aAAa;;;;;;;;;sBAAsB;IACnD,OAAgB,YAAY;;;;;;;sBAAqB;IAGjD,OAAO,CAAC,GAAG,CAAU;IAErB;;;OAGG;IACH,IAAa,YAAY,IAAI,WAAW,CAMvC;gBAEW,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB;IAiB7D,2DAA2D;IAC3D,IAAI,EAAE,aAEL;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACG,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,QAAQ,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IA0BjH;;;;;;;;;;;;;;;;;;;OAmBG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,QAAQ,EAAO,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IA+BhI;;;;;;;;;;;;;;;;;OAiBG;IACG,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKzH;;;;;;;;;;;;;OAaG;IACH,KAAK;CAMN;AAED,eAAe,MAAM,CAAA;AACrB,OAAO,QAAQ,kBAAkB,CAAC;IAChC,UAAU,iBAAiB;QACzB,MAAM,EAAE,OAAO,MAAM,CAAA;KACtB;CACF"}
@@ -0,0 +1,173 @@
1
+ import { z } from 'zod';
2
+ import { Feature } from '../feature.js';
3
+ import { Bot, type Context, type Middleware } from 'grammy';
4
+ type UserFromGetMe = Awaited<ReturnType<Bot['api']['getMe']>>;
5
+ export declare const TelegramBotInfoSchema: z.ZodObject<{
6
+ id: z.ZodNumber;
7
+ firstName: z.ZodString;
8
+ username: z.ZodOptional<z.ZodString>;
9
+ canJoinGroups: z.ZodOptional<z.ZodBoolean>;
10
+ canReadAllGroupMessages: z.ZodOptional<z.ZodBoolean>;
11
+ }, z.core.$strip>;
12
+ export declare const TelegramStateSchema: z.ZodObject<{
13
+ enabled: z.ZodDefault<z.ZodBoolean>;
14
+ mode: z.ZodDefault<z.ZodEnum<{
15
+ polling: "polling";
16
+ webhook: "webhook";
17
+ idle: "idle";
18
+ }>>;
19
+ isRunning: z.ZodDefault<z.ZodBoolean>;
20
+ webhookUrl: z.ZodOptional<z.ZodString>;
21
+ commandsRegistered: z.ZodDefault<z.ZodArray<z.ZodString>>;
22
+ lastError: z.ZodOptional<z.ZodString>;
23
+ botInfo: z.ZodOptional<z.ZodObject<{
24
+ id: z.ZodNumber;
25
+ firstName: z.ZodString;
26
+ username: z.ZodOptional<z.ZodString>;
27
+ canJoinGroups: z.ZodOptional<z.ZodBoolean>;
28
+ canReadAllGroupMessages: z.ZodOptional<z.ZodBoolean>;
29
+ }, z.core.$strip>>;
30
+ }, z.core.$loose>;
31
+ export type TelegramState = z.infer<typeof TelegramStateSchema>;
32
+ export declare const TelegramOptionsSchema: z.ZodObject<{
33
+ name: z.ZodOptional<z.ZodString>;
34
+ _cacheKey: z.ZodOptional<z.ZodString>;
35
+ cached: z.ZodOptional<z.ZodBoolean>;
36
+ enable: z.ZodOptional<z.ZodBoolean>;
37
+ token: z.ZodOptional<z.ZodString>;
38
+ mode: z.ZodDefault<z.ZodEnum<{
39
+ polling: "polling";
40
+ webhook: "webhook";
41
+ }>>;
42
+ webhookUrl: z.ZodOptional<z.ZodString>;
43
+ webhookPath: z.ZodDefault<z.ZodString>;
44
+ webhookPort: z.ZodOptional<z.ZodNumber>;
45
+ autoStart: z.ZodOptional<z.ZodBoolean>;
46
+ dropPendingUpdates: z.ZodOptional<z.ZodBoolean>;
47
+ pollingTimeout: z.ZodDefault<z.ZodNumber>;
48
+ pollingLimit: z.ZodOptional<z.ZodNumber>;
49
+ allowedUpdates: z.ZodOptional<z.ZodArray<z.ZodString>>;
50
+ }, z.core.$strip>;
51
+ export type TelegramOptions = z.infer<typeof TelegramOptionsSchema>;
52
+ export declare const TelegramEventsSchema: z.ZodObject<{
53
+ stateChange: z.ZodTuple<[z.ZodAny], null>;
54
+ enabled: z.ZodTuple<[], null>;
55
+ started: z.ZodTuple<[z.ZodObject<{
56
+ mode: z.ZodString;
57
+ }, z.core.$strip>], null>;
58
+ stopped: z.ZodTuple<[], null>;
59
+ error: z.ZodTuple<[z.ZodAny], null>;
60
+ command: z.ZodTuple<[z.ZodString, z.ZodAny], null>;
61
+ webhook_ready: z.ZodTuple<[z.ZodString], null>;
62
+ }, z.core.$strip>;
63
+ /**
64
+ * Telegram bot feature powered by grammY.
65
+ *
66
+ * Supports both long-polling and webhook modes. Exposes the grammY Bot instance
67
+ * directly for full API access while bridging events to Luca's event bus.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const tg = container.feature('telegram', { autoStart: true })
72
+ * tg.command('start', (ctx) => ctx.reply('Hello!'))
73
+ * tg.handle('message:text', (ctx) => ctx.reply(`Echo: ${ctx.message.text}`))
74
+ * ```
75
+ */
76
+ export declare class Telegram extends Feature<TelegramState, TelegramOptions> {
77
+ static shortcut: "features.telegram";
78
+ static envVars: string[];
79
+ static stateSchema: z.ZodObject<{
80
+ enabled: z.ZodDefault<z.ZodBoolean>;
81
+ mode: z.ZodDefault<z.ZodEnum<{
82
+ polling: "polling";
83
+ webhook: "webhook";
84
+ idle: "idle";
85
+ }>>;
86
+ isRunning: z.ZodDefault<z.ZodBoolean>;
87
+ webhookUrl: z.ZodOptional<z.ZodString>;
88
+ commandsRegistered: z.ZodDefault<z.ZodArray<z.ZodString>>;
89
+ lastError: z.ZodOptional<z.ZodString>;
90
+ botInfo: z.ZodOptional<z.ZodObject<{
91
+ id: z.ZodNumber;
92
+ firstName: z.ZodString;
93
+ username: z.ZodOptional<z.ZodString>;
94
+ canJoinGroups: z.ZodOptional<z.ZodBoolean>;
95
+ canReadAllGroupMessages: z.ZodOptional<z.ZodBoolean>;
96
+ }, z.core.$strip>>;
97
+ }, z.core.$loose>;
98
+ static optionsSchema: z.ZodObject<{
99
+ name: z.ZodOptional<z.ZodString>;
100
+ _cacheKey: z.ZodOptional<z.ZodString>;
101
+ cached: z.ZodOptional<z.ZodBoolean>;
102
+ enable: z.ZodOptional<z.ZodBoolean>;
103
+ token: z.ZodOptional<z.ZodString>;
104
+ mode: z.ZodDefault<z.ZodEnum<{
105
+ polling: "polling";
106
+ webhook: "webhook";
107
+ }>>;
108
+ webhookUrl: z.ZodOptional<z.ZodString>;
109
+ webhookPath: z.ZodDefault<z.ZodString>;
110
+ webhookPort: z.ZodOptional<z.ZodNumber>;
111
+ autoStart: z.ZodOptional<z.ZodBoolean>;
112
+ dropPendingUpdates: z.ZodOptional<z.ZodBoolean>;
113
+ pollingTimeout: z.ZodDefault<z.ZodNumber>;
114
+ pollingLimit: z.ZodOptional<z.ZodNumber>;
115
+ allowedUpdates: z.ZodOptional<z.ZodArray<z.ZodString>>;
116
+ }, z.core.$strip>;
117
+ static eventsSchema: z.ZodObject<{
118
+ stateChange: z.ZodTuple<[z.ZodAny], null>;
119
+ enabled: z.ZodTuple<[], null>;
120
+ started: z.ZodTuple<[z.ZodObject<{
121
+ mode: z.ZodString;
122
+ }, z.core.$strip>], null>;
123
+ stopped: z.ZodTuple<[], null>;
124
+ error: z.ZodTuple<[z.ZodAny], null>;
125
+ command: z.ZodTuple<[z.ZodString, z.ZodAny], null>;
126
+ webhook_ready: z.ZodTuple<[z.ZodString], null>;
127
+ }, z.core.$strip>;
128
+ private _bot?;
129
+ get initialState(): TelegramState;
130
+ /** Bot token from options or TELEGRAM_BOT_TOKEN env var. */
131
+ get token(): string;
132
+ /** The grammY Bot instance. Created lazily on first access. */
133
+ get bot(): Bot;
134
+ /** Whether the bot is currently receiving updates. */
135
+ get isRunning(): boolean;
136
+ /** Current operation mode: 'polling', 'webhook', or 'idle'. */
137
+ get mode(): 'polling' | 'webhook' | 'idle';
138
+ /** Access chalk colors via the container's UI feature. */
139
+ private get c();
140
+ enable(options?: any): Promise<this>;
141
+ /** Start the bot in the configured mode (polling or webhook). */
142
+ start(): Promise<this>;
143
+ /** Stop the bot gracefully. */
144
+ stop(): Promise<this>;
145
+ /** Register a command handler. Also emits 'command' on the Luca event bus. */
146
+ command(name: string, handler: (ctx: Context) => any): this;
147
+ /**
148
+ * Register a grammY update handler (filter query).
149
+ * Named 'handle' to avoid collision with the inherited on() event bus method.
150
+ *
151
+ * @example
152
+ * ```typescript
153
+ * tg.handle('message:text', (ctx) => ctx.reply('Got text'))
154
+ * tg.handle('callback_query:data', (ctx) => ctx.answerCallbackQuery('Clicked'))
155
+ * ```
156
+ */
157
+ handle(filter: Parameters<Bot['on']>[0], handler: (ctx: any) => any): this;
158
+ /** Add grammY middleware. */
159
+ use(...middleware: Middleware[]): this;
160
+ /** Start long-polling mode. */
161
+ startPolling(dropPendingUpdates?: boolean): Promise<this>;
162
+ /** Set up webhook mode with an Express server. */
163
+ setupWebhook(url?: string, path?: string): Promise<this>;
164
+ /** Remove the webhook from Telegram. */
165
+ deleteWebhook(): Promise<this>;
166
+ /** Get bot info from Telegram API. */
167
+ getMe(): Promise<UserFromGetMe>;
168
+ /** Print a diagnostic summary of the bot's current state. */
169
+ diagnostics(): this;
170
+ private _setupErrorHandling;
171
+ }
172
+ export default Telegram;
173
+ //# sourceMappingURL=telegram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/node/features/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,GAAG,EAAmB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAA;AAE5E,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AAE7D,eAAO,MAAM,qBAAqB;;;;;;iBAMhC,CAAA;AAEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;iBAa9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;iBAqBhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAM/B,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,qBAAa,QAAS,SAAQ,OAAO,CAAC,aAAa,EAAE,eAAe,CAAC;IACnE,OAAgB,QAAQ,EAAG,mBAAmB,CAAS;IACvD,OAAgB,OAAO,WAAyB;IAChD,OAAgB,WAAW;;;;;;;;;;;;;;;;;;sBAAsB;IACjD,OAAgB,aAAa;;;;;;;;;;;;;;;;;;sBAAwB;IACrD,OAAgB,YAAY;;;;;;;;;;sBAAuB;IAGnD,OAAO,CAAC,IAAI,CAAC,CAAK;IAElB,IAAa,YAAY,IAAI,aAAa,CAOzC;IAED,4DAA4D;IAC5D,IAAI,KAAK,IAAI,MAAM,CAMlB;IAED,+DAA+D;IAC/D,IAAI,GAAG,IAAI,GAAG,CAMb;IAED,sDAAsD;IACtD,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,+DAA+D;IAC/D,IAAI,IAAI,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,CAEzC;IAED,0DAA0D;IAC1D,OAAO,KAAK,CAAC,GAEZ;IAEc,MAAM,CAAC,OAAO,GAAE,GAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvD,iEAAiE;IAC3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,+BAA+B;IACzB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3B,8EAA8E;IAC9E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,GAAG,GAAG,IAAI;IAa3D;;;;;;;;;OASG;IACH,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,GAAG,IAAI;IAK1E,6BAA6B;IAC7B,GAAG,CAAC,GAAG,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI;IAOtC,+BAA+B;IACzB,YAAY,CAAC,kBAAkB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B/D,kDAAkD;IAC5C,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsC9D,wCAAwC;IAClC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,sCAAsC;IAChC,KAAK,IAAI,OAAO,CAAC,aAAa,CAAC;IAIrC,6DAA6D;IAC7D,WAAW,IAAI,IAAI;IAyBnB,OAAO,CAAC,mBAAmB;CAO5B;AAED,eAAe,QAAQ,CAAA"}
@@ -0,0 +1,51 @@
1
+ import { Feature } from '../feature.js';
2
+ export interface TransformOptions {
3
+ loader?: 'ts' | 'tsx' | 'jsx' | 'js';
4
+ format?: 'esm' | 'cjs';
5
+ minify?: boolean;
6
+ }
7
+ export interface TransformResult {
8
+ code: string;
9
+ map: string;
10
+ warnings: any[];
11
+ }
12
+ /**
13
+ * Transpile TypeScript, TSX, and JSX to JavaScript at runtime using Bun's
14
+ * built-in transpiler. Compile code strings on the fly without touching the
15
+ * filesystem or spawning external processes.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const transpiler = container.feature('transpiler')
20
+ * const result = transpiler.transformSync('const x: number = 1')
21
+ * console.log(result.code) // 'const x = 1;\n'
22
+ * ```
23
+ */
24
+ export declare class Transpiler extends Feature {
25
+ static shortcut: "features.transpiler";
26
+ static stateSchema: import("zod").ZodObject<{
27
+ enabled: import("zod").ZodDefault<import("zod").ZodBoolean>;
28
+ }, import("zod/v4/core").$loose>;
29
+ static optionsSchema: import("zod").ZodObject<{
30
+ name: import("zod").ZodOptional<import("zod").ZodString>;
31
+ _cacheKey: import("zod").ZodOptional<import("zod").ZodString>;
32
+ cached: import("zod").ZodOptional<import("zod").ZodBoolean>;
33
+ enable: import("zod").ZodOptional<import("zod").ZodBoolean>;
34
+ }, import("zod/v4/core").$strip>;
35
+ /**
36
+ * Transform code synchronously
37
+ * @param code - The code to transform
38
+ * @param options - Transform options (loader, format, minify)
39
+ * @returns The transformed code as { code, map, warnings }
40
+ */
41
+ transformSync(code: string, options?: TransformOptions): TransformResult;
42
+ /**
43
+ * Transform code asynchronously
44
+ * @param code - The code to transform
45
+ * @param options - Transform options (loader, format, minify)
46
+ * @returns The transformed code as { code, map, warnings }
47
+ */
48
+ transform(code: string, options?: TransformOptions): Promise<TransformResult>;
49
+ }
50
+ export default Transpiler;
51
+ //# sourceMappingURL=transpiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transpiler.d.ts","sourceRoot":"","sources":["../../../src/node/features/transpiler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAGvC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,CAAA;IACpC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,GAAG,EAAE,CAAA;CAChB;AA+DD;;;;;;;;;;;GAWG;AACH,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAgB,QAAQ,EAAG,qBAAqB,CAAS;IACzD,OAAgB,WAAW;;qCAAqB;IAChD,OAAgB,aAAa;;;;;qCAAuB;IAGpD;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,eAAe;IAc5E;;;;;OAKG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;CAaxF;AAED,eAAe,UAAU,CAAA"}