luca 2.0.0 → 3.0.2

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 (532) hide show
  1. package/.github/workflows/release.yaml +170 -0
  2. package/AGENTS.md +99 -0
  3. package/CLAUDE.md +123 -0
  4. package/CNAME +1 -0
  5. package/README.md +275 -9
  6. package/RUNME.md +56 -0
  7. package/assistants/codingAssistant/ABOUT.md +5 -0
  8. package/assistants/codingAssistant/CORE.md +33 -0
  9. package/assistants/codingAssistant/hooks.ts +21 -0
  10. package/assistants/codingAssistant/tools.ts +12 -0
  11. package/assistants/inkbot/ABOUT.md +16 -0
  12. package/assistants/inkbot/CORE.md +330 -0
  13. package/assistants/inkbot/hooks.ts +6 -0
  14. package/assistants/inkbot/tools.ts +53 -0
  15. package/assistants/researcher/ABOUT.md +5 -0
  16. package/assistants/researcher/CORE.md +46 -0
  17. package/assistants/researcher/hooks.ts +16 -0
  18. package/assistants/researcher/tools.ts +237 -0
  19. package/bun.lock +2667 -0
  20. package/bunfig.toml +3 -0
  21. package/commands/audit-docs.ts +740 -0
  22. package/commands/build-bootstrap.ts +117 -0
  23. package/commands/build-python-bridge.ts +42 -0
  24. package/commands/build-scaffolds.ts +175 -0
  25. package/commands/bundle-consumer-project.ts +521 -0
  26. package/commands/generate-api-docs.ts +114 -0
  27. package/commands/inkbot.ts +874 -0
  28. package/commands/release.ts +80 -0
  29. package/commands/try-all-challenges.ts +543 -0
  30. package/commands/try-challenge.ts +100 -0
  31. package/dist/agi/container.server.d.ts +63 -0
  32. package/dist/agi/container.server.d.ts.map +1 -0
  33. package/dist/agi/endpoints/ask.d.ts +20 -0
  34. package/dist/agi/endpoints/ask.d.ts.map +1 -0
  35. package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
  36. package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
  37. package/dist/agi/endpoints/conversations.d.ts +18 -0
  38. package/dist/agi/endpoints/conversations.d.ts.map +1 -0
  39. package/dist/agi/endpoints/experts.d.ts +8 -0
  40. package/dist/agi/endpoints/experts.d.ts.map +1 -0
  41. package/dist/agi/feature.d.ts +9 -0
  42. package/dist/agi/feature.d.ts.map +1 -0
  43. package/dist/agi/features/assistant.d.ts +509 -0
  44. package/dist/agi/features/assistant.d.ts.map +1 -0
  45. package/dist/agi/features/assistants-manager.d.ts +236 -0
  46. package/dist/agi/features/assistants-manager.d.ts.map +1 -0
  47. package/dist/agi/features/autonomous-assistant.d.ts +281 -0
  48. package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
  49. package/dist/agi/features/browser-use.d.ts +479 -0
  50. package/dist/agi/features/browser-use.d.ts.map +1 -0
  51. package/dist/agi/features/claude-code.d.ts +824 -0
  52. package/dist/agi/features/claude-code.d.ts.map +1 -0
  53. package/dist/agi/features/conversation-history.d.ts +245 -0
  54. package/dist/agi/features/conversation-history.d.ts.map +1 -0
  55. package/dist/agi/features/conversation.d.ts +464 -0
  56. package/dist/agi/features/conversation.d.ts.map +1 -0
  57. package/dist/agi/features/docs-reader.d.ts +72 -0
  58. package/dist/agi/features/docs-reader.d.ts.map +1 -0
  59. package/dist/agi/features/file-tools.d.ts +110 -0
  60. package/dist/agi/features/file-tools.d.ts.map +1 -0
  61. package/dist/agi/features/luca-coder.d.ts +323 -0
  62. package/dist/agi/features/luca-coder.d.ts.map +1 -0
  63. package/dist/agi/features/openai-codex.d.ts +381 -0
  64. package/dist/agi/features/openai-codex.d.ts.map +1 -0
  65. package/dist/agi/features/openapi.d.ts +200 -0
  66. package/dist/agi/features/openapi.d.ts.map +1 -0
  67. package/dist/agi/features/skills-library.d.ts +167 -0
  68. package/dist/agi/features/skills-library.d.ts.map +1 -0
  69. package/dist/agi/index.d.ts +5 -0
  70. package/dist/agi/index.d.ts.map +1 -0
  71. package/dist/agi/lib/interceptor-chain.d.ts +44 -0
  72. package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
  73. package/dist/agi/lib/token-counter.d.ts +13 -0
  74. package/dist/agi/lib/token-counter.d.ts.map +1 -0
  75. package/dist/bootstrap/generated.d.ts +5 -0
  76. package/dist/bootstrap/generated.d.ts.map +1 -0
  77. package/dist/browser.d.ts +12 -0
  78. package/dist/browser.d.ts.map +1 -0
  79. package/dist/bus.d.ts +29 -0
  80. package/dist/bus.d.ts.map +1 -0
  81. package/dist/cli/build-info.d.ts +4 -0
  82. package/dist/cli/build-info.d.ts.map +1 -0
  83. package/dist/cli/cli.d.ts +3 -12
  84. package/dist/cli/cli.d.ts.map +1 -0
  85. package/dist/client.d.ts +60 -0
  86. package/dist/client.d.ts.map +1 -0
  87. package/dist/clients/civitai/index.d.ts +472 -0
  88. package/dist/clients/civitai/index.d.ts.map +1 -0
  89. package/dist/clients/client-template.d.ts +30 -0
  90. package/dist/clients/client-template.d.ts.map +1 -0
  91. package/dist/clients/comfyui/index.d.ts +281 -0
  92. package/dist/clients/comfyui/index.d.ts.map +1 -0
  93. package/dist/clients/elevenlabs/index.d.ts +197 -0
  94. package/dist/clients/elevenlabs/index.d.ts.map +1 -0
  95. package/dist/clients/graph.d.ts +64 -0
  96. package/dist/clients/graph.d.ts.map +1 -0
  97. package/dist/clients/openai/index.d.ts +247 -0
  98. package/dist/clients/openai/index.d.ts.map +1 -0
  99. package/dist/clients/rest.d.ts +92 -0
  100. package/dist/clients/rest.d.ts.map +1 -0
  101. package/dist/clients/supabase/index.d.ts +176 -0
  102. package/dist/clients/supabase/index.d.ts.map +1 -0
  103. package/dist/clients/websocket.d.ts +127 -0
  104. package/dist/clients/websocket.d.ts.map +1 -0
  105. package/dist/command.d.ts +163 -0
  106. package/dist/command.d.ts.map +1 -0
  107. package/dist/commands/bootstrap.d.ts +20 -0
  108. package/dist/commands/bootstrap.d.ts.map +1 -0
  109. package/dist/commands/chat.d.ts +37 -0
  110. package/dist/commands/chat.d.ts.map +1 -0
  111. package/dist/commands/code.d.ts +28 -0
  112. package/dist/commands/code.d.ts.map +1 -0
  113. package/dist/commands/console.d.ts +22 -0
  114. package/dist/commands/console.d.ts.map +1 -0
  115. package/dist/commands/describe.d.ts +50 -0
  116. package/dist/commands/describe.d.ts.map +1 -0
  117. package/dist/commands/eval.d.ts +23 -0
  118. package/dist/commands/eval.d.ts.map +1 -0
  119. package/dist/commands/help.d.ts +25 -0
  120. package/dist/commands/help.d.ts.map +1 -0
  121. package/dist/commands/index.d.ts +18 -0
  122. package/dist/commands/index.d.ts.map +1 -0
  123. package/dist/commands/introspect.d.ts +24 -0
  124. package/dist/commands/introspect.d.ts.map +1 -0
  125. package/dist/commands/mcp.d.ts +35 -0
  126. package/dist/commands/mcp.d.ts.map +1 -0
  127. package/dist/commands/prompt.d.ts +38 -0
  128. package/dist/commands/prompt.d.ts.map +1 -0
  129. package/dist/commands/run.d.ts +24 -0
  130. package/dist/commands/run.d.ts.map +1 -0
  131. package/dist/commands/sandbox-mcp.d.ts +34 -0
  132. package/dist/commands/sandbox-mcp.d.ts.map +1 -0
  133. package/dist/commands/save-api-docs.d.ts +21 -0
  134. package/dist/commands/save-api-docs.d.ts.map +1 -0
  135. package/dist/commands/scaffold.d.ts +24 -0
  136. package/dist/commands/scaffold.d.ts.map +1 -0
  137. package/dist/commands/select.d.ts +22 -0
  138. package/dist/commands/select.d.ts.map +1 -0
  139. package/dist/commands/serve.d.ts +29 -0
  140. package/dist/commands/serve.d.ts.map +1 -0
  141. package/dist/container-describer.d.ts +144 -0
  142. package/dist/container-describer.d.ts.map +1 -0
  143. package/dist/container.d.ts +451 -0
  144. package/dist/container.d.ts.map +1 -0
  145. package/dist/endpoint.d.ts +113 -0
  146. package/dist/endpoint.d.ts.map +1 -0
  147. package/dist/feature.d.ts +47 -0
  148. package/dist/feature.d.ts.map +1 -0
  149. package/dist/graft.d.ts +29 -0
  150. package/dist/graft.d.ts.map +1 -0
  151. package/dist/hash-object.d.ts +8 -0
  152. package/dist/hash-object.d.ts.map +1 -0
  153. package/dist/helper.d.ts +209 -0
  154. package/dist/helper.d.ts.map +1 -0
  155. package/dist/introspection/generated.node.d.ts +44623 -0
  156. package/dist/introspection/generated.node.d.ts.map +1 -0
  157. package/dist/introspection/generated.web.d.ts +1412 -0
  158. package/dist/introspection/generated.web.d.ts.map +1 -0
  159. package/dist/introspection/index.d.ts +156 -0
  160. package/dist/introspection/index.d.ts.map +1 -0
  161. package/dist/introspection/scan.d.ts +147 -0
  162. package/dist/introspection/scan.d.ts.map +1 -0
  163. package/dist/node/container.d.ts +256 -0
  164. package/dist/node/container.d.ts.map +1 -0
  165. package/dist/node/feature.d.ts +9 -0
  166. package/dist/node/feature.d.ts.map +1 -0
  167. package/dist/node/features/container-link.d.ts +213 -0
  168. package/dist/node/features/container-link.d.ts.map +1 -0
  169. package/dist/node/features/content-db.d.ts +354 -0
  170. package/dist/node/features/content-db.d.ts.map +1 -0
  171. package/dist/node/features/disk-cache.d.ts +236 -0
  172. package/dist/node/features/disk-cache.d.ts.map +1 -0
  173. package/dist/node/features/dns.d.ts +511 -0
  174. package/dist/node/features/dns.d.ts.map +1 -0
  175. package/dist/node/features/docker.d.ts +485 -0
  176. package/dist/node/features/docker.d.ts.map +1 -0
  177. package/dist/node/features/downloader.d.ts +73 -0
  178. package/dist/node/features/downloader.d.ts.map +1 -0
  179. package/dist/node/features/figlet-fonts.d.ts +4 -0
  180. package/dist/node/features/figlet-fonts.d.ts.map +1 -0
  181. package/dist/node/features/file-manager.d.ts +177 -0
  182. package/dist/node/features/file-manager.d.ts.map +1 -0
  183. package/dist/node/features/fs.d.ts +635 -0
  184. package/dist/node/features/fs.d.ts.map +1 -0
  185. package/dist/node/features/git.d.ts +329 -0
  186. package/dist/node/features/git.d.ts.map +1 -0
  187. package/dist/node/features/google-auth.d.ts +200 -0
  188. package/dist/node/features/google-auth.d.ts.map +1 -0
  189. package/dist/node/features/google-calendar.d.ts +194 -0
  190. package/dist/node/features/google-calendar.d.ts.map +1 -0
  191. package/dist/node/features/google-docs.d.ts +138 -0
  192. package/dist/node/features/google-docs.d.ts.map +1 -0
  193. package/dist/node/features/google-drive.d.ts +202 -0
  194. package/dist/node/features/google-drive.d.ts.map +1 -0
  195. package/dist/node/features/google-mail.d.ts +221 -0
  196. package/dist/node/features/google-mail.d.ts.map +1 -0
  197. package/dist/node/features/google-sheets.d.ts +157 -0
  198. package/dist/node/features/google-sheets.d.ts.map +1 -0
  199. package/dist/node/features/grep.d.ts +207 -0
  200. package/dist/node/features/grep.d.ts.map +1 -0
  201. package/dist/node/features/helpers.d.ts +236 -0
  202. package/dist/node/features/helpers.d.ts.map +1 -0
  203. package/dist/node/features/ink.d.ts +332 -0
  204. package/dist/node/features/ink.d.ts.map +1 -0
  205. package/dist/node/features/ipc-socket.d.ts +298 -0
  206. package/dist/node/features/ipc-socket.d.ts.map +1 -0
  207. package/dist/node/features/json-tree.d.ts +140 -0
  208. package/dist/node/features/json-tree.d.ts.map +1 -0
  209. package/dist/node/features/networking.d.ts +373 -0
  210. package/dist/node/features/networking.d.ts.map +1 -0
  211. package/dist/node/features/nlp.d.ts +125 -0
  212. package/dist/node/features/nlp.d.ts.map +1 -0
  213. package/dist/node/features/opener.d.ts +93 -0
  214. package/dist/node/features/opener.d.ts.map +1 -0
  215. package/dist/node/features/os.d.ts +168 -0
  216. package/dist/node/features/os.d.ts.map +1 -0
  217. package/dist/node/features/package-finder.d.ts +419 -0
  218. package/dist/node/features/package-finder.d.ts.map +1 -0
  219. package/dist/node/features/postgres.d.ts +173 -0
  220. package/dist/node/features/postgres.d.ts.map +1 -0
  221. package/dist/node/features/proc.d.ts +285 -0
  222. package/dist/node/features/proc.d.ts.map +1 -0
  223. package/dist/node/features/process-manager.d.ts +427 -0
  224. package/dist/node/features/process-manager.d.ts.map +1 -0
  225. package/dist/node/features/python.d.ts +477 -0
  226. package/dist/node/features/python.d.ts.map +1 -0
  227. package/dist/node/features/redis.d.ts +247 -0
  228. package/dist/node/features/redis.d.ts.map +1 -0
  229. package/dist/node/features/repl.d.ts +84 -0
  230. package/dist/node/features/repl.d.ts.map +1 -0
  231. package/dist/node/features/runpod.d.ts +527 -0
  232. package/dist/node/features/runpod.d.ts.map +1 -0
  233. package/dist/node/features/secure-shell.d.ts +145 -0
  234. package/dist/node/features/secure-shell.d.ts.map +1 -0
  235. package/dist/node/features/semantic-search.d.ts +207 -0
  236. package/dist/node/features/semantic-search.d.ts.map +1 -0
  237. package/dist/node/features/sqlite.d.ts +180 -0
  238. package/dist/node/features/sqlite.d.ts.map +1 -0
  239. package/dist/node/features/telegram.d.ts +173 -0
  240. package/dist/node/features/telegram.d.ts.map +1 -0
  241. package/dist/node/features/transpiler.d.ts +51 -0
  242. package/dist/node/features/transpiler.d.ts.map +1 -0
  243. package/dist/node/features/tts.d.ts +108 -0
  244. package/dist/node/features/tts.d.ts.map +1 -0
  245. package/dist/node/features/ui.d.ts +562 -0
  246. package/dist/node/features/ui.d.ts.map +1 -0
  247. package/dist/node/features/vault.d.ts +90 -0
  248. package/dist/node/features/vault.d.ts.map +1 -0
  249. package/dist/node/features/vm.d.ts +285 -0
  250. package/dist/node/features/vm.d.ts.map +1 -0
  251. package/dist/node/features/yaml-tree.d.ts +118 -0
  252. package/dist/node/features/yaml-tree.d.ts.map +1 -0
  253. package/dist/node/features/yaml.d.ts +127 -0
  254. package/dist/node/features/yaml.d.ts.map +1 -0
  255. package/dist/node.d.ts +67 -0
  256. package/dist/node.d.ts.map +1 -0
  257. package/dist/python/generated.d.ts +2 -0
  258. package/dist/python/generated.d.ts.map +1 -0
  259. package/dist/react/index.d.ts +36 -0
  260. package/dist/react/index.d.ts.map +1 -0
  261. package/dist/registry.d.ts +97 -0
  262. package/dist/registry.d.ts.map +1 -0
  263. package/dist/scaffolds/generated.d.ts +13 -0
  264. package/dist/scaffolds/generated.d.ts.map +1 -0
  265. package/dist/scaffolds/template.d.ts +11 -0
  266. package/dist/scaffolds/template.d.ts.map +1 -0
  267. package/dist/schemas/base.d.ts +254 -0
  268. package/dist/schemas/base.d.ts.map +1 -0
  269. package/dist/selector.d.ts +130 -0
  270. package/dist/selector.d.ts.map +1 -0
  271. package/dist/server.d.ts +89 -0
  272. package/dist/server.d.ts.map +1 -0
  273. package/dist/servers/express.d.ts +104 -0
  274. package/dist/servers/express.d.ts.map +1 -0
  275. package/dist/servers/mcp.d.ts +201 -0
  276. package/dist/servers/mcp.d.ts.map +1 -0
  277. package/dist/servers/socket.d.ts +121 -0
  278. package/dist/servers/socket.d.ts.map +1 -0
  279. package/dist/state.d.ts +24 -0
  280. package/dist/state.d.ts.map +1 -0
  281. package/dist/web/clients/socket.d.ts +37 -0
  282. package/dist/web/clients/socket.d.ts.map +1 -0
  283. package/dist/web/container.d.ts +55 -0
  284. package/dist/web/container.d.ts.map +1 -0
  285. package/dist/web/extension.d.ts +4 -0
  286. package/dist/web/extension.d.ts.map +1 -0
  287. package/dist/web/feature.d.ts +8 -0
  288. package/dist/web/feature.d.ts.map +1 -0
  289. package/dist/web/features/asset-loader.d.ts +35 -0
  290. package/dist/web/features/asset-loader.d.ts.map +1 -0
  291. package/dist/web/features/container-link.d.ts +167 -0
  292. package/dist/web/features/container-link.d.ts.map +1 -0
  293. package/dist/web/features/esbuild.d.ts +51 -0
  294. package/dist/web/features/esbuild.d.ts.map +1 -0
  295. package/dist/web/features/helpers.d.ts +140 -0
  296. package/dist/web/features/helpers.d.ts.map +1 -0
  297. package/dist/web/features/network.d.ts +69 -0
  298. package/dist/web/features/network.d.ts.map +1 -0
  299. package/dist/web/features/speech.d.ts +71 -0
  300. package/dist/web/features/speech.d.ts.map +1 -0
  301. package/dist/web/features/vault.d.ts +62 -0
  302. package/dist/web/features/vault.d.ts.map +1 -0
  303. package/dist/web/features/vm.d.ts +48 -0
  304. package/dist/web/features/vm.d.ts.map +1 -0
  305. package/dist/web/features/voice-recognition.d.ts +96 -0
  306. package/dist/web/features/voice-recognition.d.ts.map +1 -0
  307. package/dist/web/shims/isomorphic-vm.d.ts +22 -0
  308. package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
  309. package/index.html +1457 -0
  310. package/index.ts +1 -0
  311. package/install.sh +84 -0
  312. package/luca.cli.ts +16 -0
  313. package/luca.console.ts +9 -0
  314. package/main.py +6 -0
  315. package/package.json +219 -58
  316. package/public/index.html +1457 -0
  317. package/public/slides-ai-native.html +902 -0
  318. package/public/slides-intro.html +974 -0
  319. package/pyproject.toml +7 -0
  320. package/scripts/build-web.ts +28 -0
  321. package/scripts/examples/ask-luca-expert.ts +42 -0
  322. package/scripts/examples/assistant-questions.ts +12 -0
  323. package/scripts/examples/excalidraw-expert.ts +75 -0
  324. package/scripts/examples/expert-chat.ts +0 -0
  325. package/scripts/examples/file-manager.ts +14 -0
  326. package/scripts/examples/ideas.ts +12 -0
  327. package/scripts/examples/interactive-chat.ts +20 -0
  328. package/scripts/examples/openai-tool-calls.ts +113 -0
  329. package/scripts/examples/opening-a-web-browser.ts +5 -0
  330. package/scripts/examples/telegram-bot.ts +79 -0
  331. package/scripts/examples/using-assistant-with-mcp.ts +555 -0
  332. package/scripts/examples/using-claude-code.ts +10 -0
  333. package/scripts/examples/using-contentdb.ts +35 -0
  334. package/scripts/examples/using-conversations.ts +35 -0
  335. package/scripts/examples/using-disk-cache.ts +10 -0
  336. package/scripts/examples/using-docker-shell.ts +75 -0
  337. package/scripts/examples/using-elevenlabs.ts +25 -0
  338. package/scripts/examples/using-google-calendar.ts +57 -0
  339. package/scripts/examples/using-google-docs.ts +74 -0
  340. package/scripts/examples/using-google-drive.ts +74 -0
  341. package/scripts/examples/using-google-sheets.ts +89 -0
  342. package/scripts/examples/using-nlp.ts +55 -0
  343. package/scripts/examples/using-ollama.ts +11 -0
  344. package/scripts/examples/using-postgres.ts +55 -0
  345. package/scripts/examples/using-runpod.ts +32 -0
  346. package/scripts/examples/using-tts.ts +40 -0
  347. package/scripts/scaffold.ts +391 -0
  348. package/scripts/scratch.ts +15 -0
  349. package/scripts/stamp-build.sh +12 -0
  350. package/scripts/test-assistant-hooks.ts +13 -0
  351. package/scripts/test-docs-reader.ts +10 -0
  352. package/scripts/test-linux-binary.sh +80 -0
  353. package/scripts/update-introspection-data.ts +58 -0
  354. package/src/agi/README.md +14 -0
  355. package/src/agi/container.server.ts +156 -0
  356. package/src/agi/feature.ts +13 -0
  357. package/src/agi/features/agent-memory.ts +694 -0
  358. package/src/agi/features/assistant.ts +1653 -0
  359. package/src/agi/features/assistants-manager.ts +534 -0
  360. package/src/agi/features/autonomous-assistant.ts +431 -0
  361. package/src/agi/features/browser-use.ts +672 -0
  362. package/src/agi/features/claude-code.ts +1584 -0
  363. package/src/agi/features/coding-tools.ts +175 -0
  364. package/src/agi/features/conversation-history.ts +672 -0
  365. package/src/agi/features/conversation.ts +1494 -0
  366. package/src/agi/features/docs-reader.ts +167 -0
  367. package/src/agi/features/file-tools.ts +340 -0
  368. package/src/agi/features/luca-coder.ts +641 -0
  369. package/src/agi/features/mcp-bridge.ts +532 -0
  370. package/src/agi/features/openai-codex.ts +651 -0
  371. package/src/agi/features/openapi.ts +445 -0
  372. package/src/agi/features/skills-library.ts +557 -0
  373. package/src/agi/index.ts +6 -0
  374. package/src/agi/lib/interceptor-chain.ts +89 -0
  375. package/src/agi/lib/token-counter.ts +202 -0
  376. package/src/bootstrap/generated.ts +9791 -0
  377. package/src/browser.ts +25 -0
  378. package/src/bus.ts +122 -0
  379. package/src/cli/build-info.ts +4 -0
  380. package/src/cli/cli.ts +355 -0
  381. package/src/client.ts +170 -0
  382. package/src/clients/civitai/index.ts +537 -0
  383. package/src/clients/client-template.ts +41 -0
  384. package/src/clients/comfyui/index.ts +604 -0
  385. package/src/clients/elevenlabs/index.ts +317 -0
  386. package/src/clients/graph.ts +87 -0
  387. package/src/clients/openai/index.ts +456 -0
  388. package/src/clients/rest.ts +207 -0
  389. package/src/clients/supabase/index.ts +357 -0
  390. package/src/clients/voicebox/index.ts +300 -0
  391. package/src/clients/websocket.ts +251 -0
  392. package/src/command.ts +506 -0
  393. package/src/commands/bootstrap.ts +244 -0
  394. package/src/commands/chat.ts +309 -0
  395. package/src/commands/code.ts +371 -0
  396. package/src/commands/console.ts +189 -0
  397. package/src/commands/describe.ts +243 -0
  398. package/src/commands/eval.ts +67 -0
  399. package/src/commands/help.ts +240 -0
  400. package/src/commands/index.ts +19 -0
  401. package/src/commands/introspect.ts +218 -0
  402. package/src/commands/mcp.ts +64 -0
  403. package/src/commands/prompt.ts +1014 -0
  404. package/src/commands/run.ts +278 -0
  405. package/src/commands/sandbox-mcp.ts +343 -0
  406. package/src/commands/save-api-docs.ts +51 -0
  407. package/src/commands/scaffold.ts +225 -0
  408. package/src/commands/select.ts +99 -0
  409. package/src/commands/serve.ts +208 -0
  410. package/src/container-describer.ts +1091 -0
  411. package/src/container.ts +1199 -0
  412. package/src/endpoint.ts +365 -0
  413. package/src/entity.ts +173 -0
  414. package/src/feature.ts +118 -0
  415. package/src/graft.ts +181 -0
  416. package/src/hash-object.ts +97 -0
  417. package/src/helper.ts +849 -0
  418. package/src/introspection/generated.agi.ts +41200 -0
  419. package/src/introspection/generated.node.ts +28773 -0
  420. package/src/introspection/generated.web.ts +2272 -0
  421. package/src/introspection/index.ts +296 -0
  422. package/src/introspection/scan.ts +1136 -0
  423. package/src/node/container.ts +409 -0
  424. package/src/node/feature.ts +13 -0
  425. package/src/node/features/container-link.ts +559 -0
  426. package/src/node/features/content-db.ts +849 -0
  427. package/src/node/features/disk-cache.ts +388 -0
  428. package/src/node/features/display-result.ts +57 -0
  429. package/src/node/features/dns.ts +669 -0
  430. package/src/node/features/docker.ts +921 -0
  431. package/src/node/features/downloader.ts +79 -0
  432. package/src/node/features/figlet-fonts.ts +600 -0
  433. package/src/node/features/file-manager.ts +535 -0
  434. package/src/node/features/fs.ts +1050 -0
  435. package/src/node/features/git.ts +592 -0
  436. package/src/node/features/google-auth.ts +504 -0
  437. package/src/node/features/google-calendar.ts +306 -0
  438. package/src/node/features/google-docs.ts +412 -0
  439. package/src/node/features/google-drive.ts +346 -0
  440. package/src/node/features/google-mail.ts +540 -0
  441. package/src/node/features/google-sheets.ts +286 -0
  442. package/src/node/features/grep.ts +427 -0
  443. package/src/node/features/helpers.ts +762 -0
  444. package/src/node/features/ink.ts +490 -0
  445. package/src/node/features/ipc-socket.ts +649 -0
  446. package/src/node/features/json-tree.ts +170 -0
  447. package/src/node/features/networking.ts +961 -0
  448. package/src/node/features/nlp.ts +212 -0
  449. package/src/node/features/opener.ts +180 -0
  450. package/src/node/features/os.ts +403 -0
  451. package/src/node/features/package-finder.ts +540 -0
  452. package/src/node/features/postgres.ts +289 -0
  453. package/src/node/features/proc.ts +503 -0
  454. package/src/node/features/process-manager.ts +844 -0
  455. package/src/node/features/python.ts +912 -0
  456. package/src/node/features/redis.ts +446 -0
  457. package/src/node/features/repl.ts +212 -0
  458. package/src/node/features/runpod.ts +811 -0
  459. package/src/node/features/secure-shell.ts +261 -0
  460. package/src/node/features/semantic-search.ts +935 -0
  461. package/src/node/features/sqlite.ts +289 -0
  462. package/src/node/features/telegram.ts +343 -0
  463. package/src/node/features/transpiler.ts +160 -0
  464. package/src/node/features/tts.ts +185 -0
  465. package/src/node/features/ui.ts +791 -0
  466. package/src/node/features/vault.ts +153 -0
  467. package/src/node/features/vm.ts +462 -0
  468. package/src/node/features/yaml-tree.ts +148 -0
  469. package/src/node/features/yaml.ts +133 -0
  470. package/src/node.ts +76 -0
  471. package/src/python/bridge.py +220 -0
  472. package/src/python/generated.ts +226 -0
  473. package/src/react/index.ts +175 -0
  474. package/src/registry.ts +210 -0
  475. package/src/scaffolds/generated.ts +1814 -0
  476. package/src/scaffolds/template.ts +46 -0
  477. package/src/schemas/base.ts +296 -0
  478. package/src/selector.ts +352 -0
  479. package/src/server.ts +229 -0
  480. package/src/servers/express.ts +283 -0
  481. package/src/servers/mcp.ts +802 -0
  482. package/src/servers/socket.ts +258 -0
  483. package/src/state.ts +101 -0
  484. package/src/web/clients/socket.ts +99 -0
  485. package/src/web/container.ts +75 -0
  486. package/src/web/extension.ts +30 -0
  487. package/src/web/feature.ts +12 -0
  488. package/src/web/features/asset-loader.ts +72 -0
  489. package/src/web/features/container-link.ts +382 -0
  490. package/src/web/features/esbuild.ts +93 -0
  491. package/src/web/features/helpers.ts +291 -0
  492. package/src/web/features/network.ts +85 -0
  493. package/src/web/features/speech.ts +104 -0
  494. package/src/web/features/vault.ts +207 -0
  495. package/src/web/features/vm.ts +85 -0
  496. package/src/web/features/voice-recognition.ts +161 -0
  497. package/src/web/shims/isomorphic-vm.ts +149 -0
  498. package/tsconfig.build.json +12 -0
  499. package/tsconfig.json +58 -0
  500. package/uv.lock +8 -0
  501. package/LICENSE +0 -21
  502. package/dist/cli/cli.js +0 -48
  503. package/dist/cli/common.d.ts +0 -2
  504. package/dist/cli/common.js +0 -6
  505. package/dist/cli/index.d.ts +0 -2
  506. package/dist/cli/index.js +0 -5
  507. package/dist/cli/run.d.ts +0 -1
  508. package/dist/cli/run.js +0 -38
  509. package/dist/core/index.d.ts +0 -4
  510. package/dist/core/index.js +0 -32
  511. package/dist/core/read.d.ts +0 -2
  512. package/dist/core/read.js +0 -29
  513. package/dist/core/request.d.ts +0 -1
  514. package/dist/core/request.js +0 -2
  515. package/dist/core/write.d.ts +0 -2
  516. package/dist/core/write.js +0 -21
  517. package/dist/index.d.ts +0 -1
  518. package/dist/index.js +0 -5
  519. package/dist/utils/common.d.ts +0 -9
  520. package/dist/utils/common.js +0 -57
  521. package/dist/utils/consts.d.ts +0 -3
  522. package/dist/utils/consts.js +0 -11
  523. package/dist/utils/dict.d.ts +0 -1
  524. package/dist/utils/dict.js +0 -7
  525. package/dist/utils/index.d.ts +0 -5
  526. package/dist/utils/index.js +0 -21
  527. package/dist/utils/log.d.ts +0 -1
  528. package/dist/utils/log.js +0 -5
  529. package/dist/utils/types.d.ts +0 -1
  530. package/dist/utils/types.js +0 -2
  531. package/dist/utils/utils.test.d.ts +0 -1
  532. package/dist/utils/utils.test.js +0 -7
@@ -0,0 +1,427 @@
1
+ import { Feature } from '../feature.js'
2
+ import { FeatureStateSchema, FeatureOptionsSchema } from '../../schemas/base.js'
3
+
4
+ /** Shell-escape a string using single quotes (safe for all characters) */
5
+ function shellQuote(s: string): string {
6
+ return "'" + s.replace(/'/g, "'\\''") + "'"
7
+ }
8
+
9
+ export type GrepMatch = {
10
+ file: string
11
+ line: number
12
+ column?: number
13
+ content: string
14
+ }
15
+
16
+ export type GrepOptions = {
17
+ /** Pattern to search for (string or regex) */
18
+ pattern: string
19
+ /** Directory or file to search in (defaults to container cwd) */
20
+ path?: string
21
+ /** Glob patterns to include (e.g. '*.ts') */
22
+ include?: string | string[]
23
+ /** Glob patterns to exclude (e.g. 'node_modules') */
24
+ exclude?: string | string[]
25
+ /** Case insensitive search */
26
+ ignoreCase?: boolean
27
+ /** Treat pattern as a fixed string, not regex */
28
+ fixedStrings?: boolean
29
+ /** Search recursively (default: true) */
30
+ recursive?: boolean
31
+ /** Include hidden files */
32
+ hidden?: boolean
33
+ /** Max number of results to return */
34
+ maxResults?: number
35
+ /** Number of context lines before match */
36
+ before?: number
37
+ /** Number of context lines after match */
38
+ after?: number
39
+ /** Only return filenames, not match details */
40
+ filesOnly?: boolean
41
+ /** Invert match (return lines that don't match) */
42
+ invert?: boolean
43
+ /** Match whole words only */
44
+ wordMatch?: boolean
45
+ /** Additional raw flags to pass to grep/ripgrep */
46
+ rawFlags?: string[]
47
+ }
48
+
49
+ /**
50
+ * The Grep feature provides utilities for searching file contents using ripgrep (rg) or grep.
51
+ *
52
+ * Returns structured results as arrays of `{ file, line, column, content }` objects
53
+ * with paths relative to the container cwd. Also provides convenience methods for
54
+ * common search patterns.
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * const grep = container.feature('grep')
59
+ *
60
+ * // Basic search
61
+ * const results = await grep.search({ pattern: 'TODO' })
62
+ * // [{ file: 'src/index.ts', line: 42, column: 5, content: '// TODO: fix this' }, ...]
63
+ *
64
+ * // Find all imports of a module
65
+ * const imports = await grep.imports('lodash')
66
+ *
67
+ * // Find function/class/variable definitions
68
+ * const defs = await grep.definitions('MyClass')
69
+ *
70
+ * // Just get filenames containing a pattern
71
+ * const files = await grep.filesContaining('API_KEY')
72
+ * ```
73
+ *
74
+ * @extends Feature
75
+ */
76
+ export class Grep extends Feature {
77
+ static override shortcut = 'features.grep' as const
78
+ static override stateSchema = FeatureStateSchema
79
+ static override optionsSchema = FeatureOptionsSchema
80
+ static { Feature.register(this, 'grep') }
81
+
82
+ private _hasRipgrep: boolean | null = null
83
+ private _rgPath: string | null = null
84
+ private _grepPath: string | null = null
85
+
86
+ /** Whether ripgrep (rg) is available on this system */
87
+ get hasRipgrep(): boolean {
88
+ if (this._hasRipgrep !== null) return this._hasRipgrep
89
+ try {
90
+ this._rgPath = this.container.feature('proc').exec('which rg').trim()
91
+ this._hasRipgrep = true
92
+ } catch {
93
+ this._hasRipgrep = false
94
+ }
95
+ return this._hasRipgrep
96
+ }
97
+
98
+ /** Resolved path to the rg binary */
99
+ get rgPath(): string {
100
+ if (this._rgPath) return this._rgPath
101
+ this.hasRipgrep // triggers resolution
102
+ return this._rgPath || 'rg'
103
+ }
104
+
105
+ /** Resolved path to the grep binary */
106
+ get grepPath(): string {
107
+ if (this._grepPath) return this._grepPath
108
+ try {
109
+ this._grepPath = this.container.feature('proc').exec('which grep').trim()
110
+ } catch {
111
+ this._grepPath = 'grep'
112
+ }
113
+ return this._grepPath
114
+ }
115
+
116
+ /**
117
+ * Search for a pattern in files and return structured results.
118
+ *
119
+ * @param {GrepOptions} options - Search options
120
+ * @returns {Promise<GrepMatch[]>} Array of match objects with relative file paths
121
+ *
122
+ * @example
123
+ * ```typescript
124
+ * // Search for a pattern in TypeScript files
125
+ * const results = await grep.search({
126
+ * pattern: 'useState',
127
+ * include: '*.tsx',
128
+ * exclude: 'node_modules'
129
+ * })
130
+ *
131
+ * // Case insensitive search with context
132
+ * const results = await grep.search({
133
+ * pattern: 'error',
134
+ * ignoreCase: true,
135
+ * before: 2,
136
+ * after: 2
137
+ * })
138
+ * ```
139
+ */
140
+ async search(options: GrepOptions): Promise<GrepMatch[]> {
141
+ const cmd = this.buildCommand(options)
142
+ const proc = this.container.feature('proc')
143
+
144
+ try {
145
+ const output = proc.exec(cmd, {
146
+ cwd: this.container.cwd,
147
+ maxBuffer: 1024 * 1024 * 50,
148
+ })
149
+
150
+ if (!output.length) return []
151
+
152
+ return this.parseResults(output, options)
153
+ } catch {
154
+ // grep returns exit code 1 when no matches found
155
+ return []
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Find files containing a pattern. Returns just the relative file paths.
161
+ *
162
+ * @param {string} pattern - The pattern to search for
163
+ * @param {Omit<GrepOptions, 'pattern' | 'filesOnly'>} [options] - Additional search options
164
+ * @returns {Promise<string[]>} Array of relative file paths
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * const files = await grep.filesContaining('TODO')
169
+ * // ['src/index.ts', 'src/utils.ts']
170
+ * ```
171
+ */
172
+ async filesContaining(pattern: string, options: Omit<GrepOptions, 'pattern' | 'filesOnly'> = {}): Promise<string[]> {
173
+ const results = await this.search({ ...options, pattern, filesOnly: true })
174
+ return results.map(r => r.file)
175
+ }
176
+
177
+ /**
178
+ * Find import/require statements for a module or path.
179
+ *
180
+ * @param {string} moduleOrPath - The module name or path to search for in imports
181
+ * @param {Omit<GrepOptions, 'pattern'>} [options] - Additional search options
182
+ * @returns {Promise<GrepMatch[]>} Array of matches
183
+ *
184
+ * @example
185
+ * ```typescript
186
+ * const lodashImports = await grep.imports('lodash')
187
+ * const localImports = await grep.imports('./utils')
188
+ * ```
189
+ */
190
+ async imports(moduleOrPath: string, options: Omit<GrepOptions, 'pattern'> = {}): Promise<GrepMatch[]> {
191
+ const escaped = moduleOrPath.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
192
+ const pattern = `(import|require).*['"\`]${escaped}[/'"\`]?`
193
+ return this.search({ ...options, pattern })
194
+ }
195
+
196
+ /**
197
+ * Find function, class, type, or variable definitions matching a name.
198
+ *
199
+ * @param {string} name - The identifier name to search for definitions of
200
+ * @param {Omit<GrepOptions, 'pattern'>} [options] - Additional search options
201
+ * @returns {Promise<GrepMatch[]>} Array of matches
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * const defs = await grep.definitions('MyComponent')
206
+ * const classDefs = await grep.definitions('UserService')
207
+ * ```
208
+ */
209
+ async definitions(name: string, options: Omit<GrepOptions, 'pattern'> = {}): Promise<GrepMatch[]> {
210
+ const escaped = name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
211
+ const pattern = `(function|class|const|let|var|type|interface|enum|export)\\s+(async\\s+)?${escaped}\\b`
212
+ return this.search({ ...options, pattern })
213
+ }
214
+
215
+ /**
216
+ * Find TODO, FIXME, HACK, and XXX comments.
217
+ *
218
+ * @param {Omit<GrepOptions, 'pattern'>} [options] - Additional search options
219
+ * @returns {Promise<GrepMatch[]>} Array of matches
220
+ *
221
+ * @example
222
+ * ```typescript
223
+ * const todos = await grep.todos()
224
+ * const fixmes = await grep.todos({ include: '*.ts' })
225
+ * ```
226
+ */
227
+ async todos(options: Omit<GrepOptions, 'pattern'> = {}): Promise<GrepMatch[]> {
228
+ return this.search({ ...options, pattern: '(TODO|FIXME|HACK|XXX)\\b' })
229
+ }
230
+
231
+ /**
232
+ * Count the number of matches for a pattern.
233
+ *
234
+ * @param {string} pattern - The pattern to count
235
+ * @param {Omit<GrepOptions, 'pattern'>} [options] - Additional search options
236
+ * @returns {Promise<number>} Total number of matching lines
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * const count = await grep.count('console.log')
241
+ * console.log(`Found ${count} console.log statements`)
242
+ * ```
243
+ */
244
+ async count(pattern: string, options: Omit<GrepOptions, 'pattern'> = {}): Promise<number> {
245
+ const results = await this.search({ ...options, pattern })
246
+ return results.length
247
+ }
248
+
249
+ /**
250
+ * Search and replace across files. Returns the list of files that would be affected.
251
+ * Does NOT modify files — use the returned file list to do the replacement yourself.
252
+ *
253
+ * @param {string} pattern - The pattern to search for
254
+ * @param {Omit<GrepOptions, 'pattern'>} [options] - Additional search options
255
+ * @returns {Promise<{ file: string, matches: GrepMatch[] }[]>} Array of files with their matches, grouped by file
256
+ *
257
+ * @example
258
+ * ```typescript
259
+ * const affected = await grep.findForReplace('oldFunctionName')
260
+ * // [{ file: 'src/a.ts', matches: [...] }, { file: 'src/b.ts', matches: [...] }]
261
+ * ```
262
+ */
263
+ async findForReplace(pattern: string, options: Omit<GrepOptions, 'pattern'> = {}): Promise<{ file: string, matches: GrepMatch[] }[]> {
264
+ const results = await this.search({ ...options, pattern })
265
+ const grouped = new Map<string, GrepMatch[]>()
266
+
267
+ for (const match of results) {
268
+ if (!grouped.has(match.file)) grouped.set(match.file, [])
269
+ grouped.get(match.file)!.push(match)
270
+ }
271
+
272
+ return Array.from(grouped.entries()).map(([file, matches]) => ({ file, matches }))
273
+ }
274
+
275
+ /** Build the grep/rg command from options */
276
+ private buildCommand(options: GrepOptions): string {
277
+ const {
278
+ pattern,
279
+ path,
280
+ include,
281
+ exclude,
282
+ ignoreCase = false,
283
+ fixedStrings = false,
284
+ recursive = true,
285
+ hidden = false,
286
+ maxResults,
287
+ before,
288
+ after,
289
+ filesOnly = false,
290
+ invert = false,
291
+ wordMatch = false,
292
+ rawFlags = [],
293
+ } = options
294
+
295
+ const useRg = this.hasRipgrep
296
+ const flags: string[] = []
297
+
298
+ if (useRg) {
299
+ // ripgrep mode
300
+ flags.push('--no-heading', '--line-number', '--column')
301
+
302
+ if (filesOnly) flags.push('--files-with-matches')
303
+ if (ignoreCase) flags.push('--ignore-case')
304
+ if (fixedStrings) flags.push('--fixed-strings')
305
+ if (hidden) flags.push('--hidden')
306
+ if (invert) flags.push('--invert-match')
307
+ if (wordMatch) flags.push('--word-regexp')
308
+ if (maxResults) flags.push(`--max-count=${maxResults}`)
309
+ if (before) flags.push(`--before-context=${before}`)
310
+ if (after) flags.push(`--after-context=${after}`)
311
+
312
+ const includes = Array.isArray(include) ? include : (include ? [include] : [])
313
+ for (const g of includes) {
314
+ flags.push(`--glob=${shellQuote(g)}`)
315
+ }
316
+
317
+ const excludes = Array.isArray(exclude) ? exclude : (exclude ? [exclude] : [])
318
+ for (const g of excludes) {
319
+ flags.push(`--glob=${shellQuote('!' + g)}`)
320
+ }
321
+
322
+ flags.push(...rawFlags)
323
+
324
+ const searchPath = path || '.'
325
+ return `${this.rgPath} ${flags.join(' ')} -e ${shellQuote(pattern)} ${shellQuote(searchPath)}`
326
+ } else {
327
+ // fallback to grep — use -E for extended regex (supports ?, +, |, (), {})
328
+ flags.push('-r', '-n', '-E')
329
+
330
+ if (filesOnly) flags.push('-l')
331
+ if (ignoreCase) flags.push('-i')
332
+ if (fixedStrings) flags.push('-F')
333
+ if (invert) flags.push('-v')
334
+ if (wordMatch) flags.push('-w')
335
+ if (maxResults) flags.push(`-m ${maxResults}`)
336
+ if (before) flags.push(`-B ${before}`)
337
+ if (after) flags.push(`-A ${after}`)
338
+
339
+ const includes = Array.isArray(include) ? include : (include ? [include] : [])
340
+ for (const g of includes) {
341
+ flags.push(`--include=${shellQuote(g)}`)
342
+ }
343
+
344
+ const excludes = Array.isArray(exclude) ? exclude : (exclude ? [exclude] : [])
345
+ for (const g of excludes) {
346
+ flags.push(`--exclude-dir=${shellQuote(g)}`)
347
+ }
348
+
349
+ if (!recursive) {
350
+ const idx = flags.indexOf('-r')
351
+ if (idx !== -1) flags.splice(idx, 1)
352
+ }
353
+
354
+ flags.push(...rawFlags)
355
+
356
+ const searchPath = path || '.'
357
+ return `${this.grepPath} ${flags.join(' ')} -e ${shellQuote(pattern)} ${shellQuote(searchPath)}`
358
+ }
359
+ }
360
+
361
+ /** Parse raw grep/rg output into structured results */
362
+ private parseResults(output: string, options: GrepOptions): GrepMatch[] {
363
+ const cwd = this.container.cwd
364
+ const lines = output.split('\n').filter(l => l.length > 0)
365
+ const results: GrepMatch[] = []
366
+
367
+ if (options.filesOnly) {
368
+ for (const line of lines) {
369
+ const filePath = line.trim()
370
+ if (!filePath) continue
371
+ results.push({
372
+ file: this.relativize(filePath, cwd),
373
+ line: 0,
374
+ content: '',
375
+ })
376
+ }
377
+ return results
378
+ }
379
+
380
+ // Context lines (from -B/-A) are separated by -- and use - instead of :
381
+ // Skip separator lines
382
+ const useRg = this.hasRipgrep
383
+
384
+ for (const line of lines) {
385
+ if (line === '--') continue
386
+
387
+ // rg format: file:line:column:content
388
+ // grep format: file:line:content
389
+ let match: GrepMatch | null = null
390
+
391
+ if (useRg) {
392
+ const m = line.match(/^(.+?):(\d+):(\d+):(.*)$/)
393
+ if (m) {
394
+ match = {
395
+ file: this.relativize(m[1]!, cwd),
396
+ line: parseInt(m[2]!, 10),
397
+ column: parseInt(m[3]!, 10),
398
+ content: m[4]!,
399
+ }
400
+ }
401
+ } else {
402
+ const m = line.match(/^(.+?):(\d+):(.*)$/)
403
+ if (m) {
404
+ match = {
405
+ file: this.relativize(m[1]!, cwd),
406
+ line: parseInt(m[2]!, 10),
407
+ content: m[3]!,
408
+ }
409
+ }
410
+ }
411
+
412
+ if (match) results.push(match)
413
+ }
414
+
415
+ return results
416
+ }
417
+
418
+ /** Make a path relative to cwd */
419
+ private relativize(filePath: string, cwd: string): string {
420
+ // If already relative (starts with ./), just clean it
421
+ if (filePath.startsWith('./')) return filePath.slice(2)
422
+ if (filePath.startsWith('/')) return this.container.paths.relative(cwd, filePath)
423
+ return filePath
424
+ }
425
+ }
426
+
427
+ export default Grep