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,445 @@
1
+ import { Feature } from '../feature.js'
2
+ import { FeatureStateSchema, FeatureOptionsSchema, FeatureEventsSchema } from '../../schemas/base.js'
3
+ import { z } from 'zod'
4
+ import { camelCase } from 'lodash-es'
5
+
6
+ declare module '../../feature.js' {
7
+ interface AvailableFeatures {
8
+ openapi: typeof OpenAPI
9
+ }
10
+ }
11
+
12
+ export const OpenAPIStateSchema = FeatureStateSchema.extend({
13
+ loaded: z.boolean().default(false).describe('Whether the OpenAPI spec has been fetched and parsed'),
14
+ title: z.string().default('').describe('The API title from the spec info block'),
15
+ version: z.string().default('').describe('The API version from the spec info block'),
16
+ endpointCount: z.number().default(0).describe('Number of parsed endpoints in the spec'),
17
+ })
18
+
19
+ export const OpenAPIOptionsSchema = FeatureOptionsSchema.extend({
20
+ url: z.string().optional().describe('URL to the OpenAPI/Swagger spec or the API server base URL')
21
+ })
22
+
23
+ export const OpenAPIEventsSchema = FeatureEventsSchema.extend({
24
+ loaded: z.tuple([z.any().describe('The parsed OpenAPI spec object')]).describe('Fired after the spec is fetched and parsed'),
25
+ }).describe('OpenAPI events')
26
+
27
+ export type OpenAPIOptions = z.infer<typeof OpenAPIOptionsSchema>
28
+ export type OpenAPIState = z.infer<typeof OpenAPIStateSchema>
29
+
30
+
31
+
32
+ export interface EndpointInfo {
33
+ /** Human-friendly camelCase name derived from operationId */
34
+ name: string
35
+ /** Original operationId from the spec */
36
+ operationId: string
37
+ /** HTTP method (get, post, put, delete, patch, etc.) */
38
+ method: string
39
+ /** URL path template, e.g. /pets/{petId} */
40
+ path: string
41
+ /** Summary from the spec */
42
+ summary: string
43
+ /** Longer description from the spec */
44
+ description: string
45
+ /** Tags for grouping */
46
+ tags: string[]
47
+ /** Parameter definitions from the spec */
48
+ parameters: OpenAPIParameter[]
49
+ /** Request body schema if present */
50
+ requestBody: any
51
+ /** Response definitions keyed by status code */
52
+ responses: Record<string, any>
53
+ /** Whether the endpoint is deprecated */
54
+ deprecated: boolean
55
+ }
56
+
57
+ export interface OpenAPIParameter {
58
+ name: string
59
+ in: 'query' | 'path' | 'header' | 'cookie'
60
+ description: string
61
+ required: boolean
62
+ schema: any
63
+ }
64
+
65
+ export interface OpenAIFunctionDef {
66
+ name: string
67
+ description: string
68
+ parameters: {
69
+ type: 'object'
70
+ properties: Record<string, any>
71
+ required: string[]
72
+ }
73
+ }
74
+
75
+ export interface OpenAIToolDef {
76
+ type: 'function'
77
+ function: OpenAIFunctionDef
78
+ }
79
+
80
+ /**
81
+ * The OpenAPI feature loads an OpenAPI/Swagger spec from a URL and provides
82
+ * inspection and conversion utilities.
83
+ *
84
+ * Works in both browser and node environments since it uses fetch.
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * const api = container.feature('openapi', { url: 'https://petstore.swagger.io/v2' })
89
+ * await api.load()
90
+ *
91
+ * // Inspect all endpoints
92
+ * api.endpoints
93
+ *
94
+ * // Get a single endpoint by its friendly name
95
+ * api.endpoint('getPetById')
96
+ *
97
+ * // Convert to OpenAI tool definitions
98
+ * api.toOpenAITools()
99
+ *
100
+ * // Convert a single endpoint to a function definition
101
+ * api.toFunction('getPetById')
102
+ * ```
103
+ */
104
+ export class OpenAPI extends Feature<OpenAPIState, OpenAPIOptions> {
105
+ static override shortcut = 'features.openapi' as const
106
+ static override description = 'Load and inspect OpenAPI specs, convert endpoints to OpenAI tool/function definitions'
107
+ static override stateSchema = OpenAPIStateSchema
108
+ static override optionsSchema = OpenAPIOptionsSchema
109
+ static override eventsSchema = OpenAPIEventsSchema
110
+
111
+ static { Feature.register(this, 'openapi') }
112
+
113
+ /** Raw parsed spec document */
114
+ private _spec: any = null
115
+
116
+ /** Parsed endpoint map keyed by friendly name */
117
+ private _endpoints: Map<string, EndpointInfo> = new Map()
118
+
119
+ /** @returns Default state with loaded=false and empty metadata fields. */
120
+ override get initialState(): OpenAPIState {
121
+ return { enabled: false, loaded: false, title: '', version: '', endpointCount: 0 }
122
+ }
123
+
124
+ /** The base server URL derived from options, normalizing the openapi.json suffix */
125
+ get serverUrl(): string {
126
+ return this.options.url!.replace(/\/openapi\.json\/?$/, '').replace(/\/swagger\.json\/?$/, '').replace(/\/$/, '')
127
+ }
128
+
129
+ /** The URL that will be fetched for the spec document */
130
+ get specUrl(): string {
131
+ const url = this.options.url!
132
+ if (/\.(json|yaml|yml)(\?.*)?$/.test(url)) return url
133
+ return `${this.serverUrl}/openapi.json`
134
+ }
135
+
136
+ /** The raw spec object. Null before load() is called. */
137
+ get spec() {
138
+ return this._spec
139
+ }
140
+
141
+ /**
142
+ * Fetches and parses the OpenAPI spec from the configured URL.
143
+ * Populates `endpoints`, updates state with spec metadata.
144
+ *
145
+ * @returns {Promise<this>} This instance, for chaining
146
+ */
147
+ async load(): Promise<this> {
148
+ const response = await fetch(this.specUrl)
149
+
150
+ if (!response.ok) {
151
+ throw new Error(`Failed to load OpenAPI spec from ${this.specUrl}: ${response.status} ${response.statusText}`)
152
+ }
153
+
154
+ this._spec = await response.json()
155
+ this._endpoints = buildEndpointMap(this._spec)
156
+
157
+ this.setState({
158
+ loaded: true,
159
+ title: this._spec.info?.title || '',
160
+ version: this._spec.info?.version || '',
161
+ endpointCount: this._endpoints.size,
162
+ })
163
+
164
+ this.emit('started', this._spec)
165
+ return this
166
+ }
167
+
168
+ /** All parsed endpoints as an array */
169
+ get endpoints(): EndpointInfo[] {
170
+ return Array.from(this._endpoints.values())
171
+ }
172
+
173
+ /** All endpoint friendly names */
174
+ get endpointNames(): string[] {
175
+ return Array.from(this._endpoints.keys())
176
+ }
177
+
178
+ /** Map of endpoints grouped by tag */
179
+ get endpointsByTag(): Record<string, EndpointInfo[]> {
180
+ const result: Record<string, EndpointInfo[]> = {}
181
+ for (const ep of this._endpoints.values()) {
182
+ const tags = ep.tags.length ? ep.tags : ['untagged']
183
+ for (const tag of tags) {
184
+ if (!result[tag]) result[tag] = []
185
+ result[tag].push(ep)
186
+ }
187
+ }
188
+ return result
189
+ }
190
+
191
+ /**
192
+ * Get a single endpoint by its friendly name or operationId.
193
+ *
194
+ * @param {string} name - The friendly name or operationId to look up
195
+ * @returns {EndpointInfo | undefined} The endpoint info, or undefined if not found
196
+ */
197
+ endpoint(name: string): EndpointInfo | undefined {
198
+ return this._endpoints.get(name)
199
+ || this.endpoints.find((ep) => ep.operationId === name)
200
+ }
201
+
202
+ /**
203
+ * Convert all endpoints into OpenAI-compatible tool definitions.
204
+ *
205
+ * @param {Function} [filter] - Optional predicate to select which endpoints to include
206
+ * @returns {OpenAIToolDef[]} Array of tool definitions ready for the OpenAI tools parameter
207
+ */
208
+ toOpenAITools(filter?: (ep: EndpointInfo) => boolean): OpenAIToolDef[] {
209
+ const eps = filter ? this.endpoints.filter(filter) : this.endpoints
210
+ return eps.map((ep) => ({
211
+ type: 'function' as const,
212
+ function: endpointToFunction(ep),
213
+ }))
214
+ }
215
+
216
+ /**
217
+ * Convert a single endpoint (by name) to an OpenAI-compatible tool definition.
218
+ *
219
+ * @param {string} name - The endpoint friendly name or operationId
220
+ * @returns {OpenAIToolDef | undefined} The tool definition, or undefined if not found
221
+ */
222
+ toTool(name: string): OpenAIToolDef | undefined {
223
+ const ep = this.endpoint(name)
224
+ if (!ep) return undefined
225
+ return { type: 'function', function: endpointToFunction(ep) }
226
+ }
227
+
228
+ /**
229
+ * Convert all endpoints into OpenAI-compatible function definitions.
230
+ *
231
+ * @param {Function} [filter] - Optional predicate to select which endpoints to include
232
+ * @returns {OpenAIFunctionDef[]} Array of function definitions
233
+ */
234
+ toFunctions(filter?: (ep: EndpointInfo) => boolean): OpenAIFunctionDef[] {
235
+ const eps = filter ? this.endpoints.filter(filter) : this.endpoints
236
+ return eps.map(endpointToFunction)
237
+ }
238
+
239
+ /**
240
+ * Convert a single endpoint (by name) to an OpenAI function definition.
241
+ *
242
+ * @param {string} name - The endpoint friendly name or operationId
243
+ * @returns {OpenAIFunctionDef | undefined} The function definition, or undefined if not found
244
+ */
245
+ toFunction(name: string): OpenAIFunctionDef | undefined {
246
+ const ep = this.endpoint(name)
247
+ if (!ep) return undefined
248
+ return endpointToFunction(ep)
249
+ }
250
+
251
+ /**
252
+ * Return a compact JSON summary of all endpoints, useful for logging or REPL inspection.
253
+ *
254
+ * @returns {{ title: string, version: string, serverUrl: string, endpointCount: number, endpoints: object[] }} Serializable summary
255
+ */
256
+ toJSON() {
257
+ return {
258
+ title: this.state.get('title'),
259
+ version: this.state.get('version'),
260
+ serverUrl: this.serverUrl,
261
+ endpointCount: this._endpoints.size,
262
+ endpoints: this.endpoints.map((ep) => ({
263
+ name: ep.name,
264
+ method: ep.method.toUpperCase(),
265
+ path: ep.path,
266
+ summary: ep.summary,
267
+ tags: ep.tags,
268
+ deprecated: ep.deprecated,
269
+ })),
270
+ }
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Derive a human-friendly camelCase name from an operationId, or synthesize one from method + path.
276
+ */
277
+ function friendlyName(operationId: string | undefined, method: string, path: string): string {
278
+ if (operationId) return camelCase(operationId)
279
+
280
+ // Synthesize: GET /pets/{petId} -> getPetsPetId
281
+ const cleaned = path
282
+ .replace(/\{(\w+)\}/g, '$1')
283
+ .replace(/[^a-zA-Z0-9]+/g, ' ')
284
+ .trim()
285
+
286
+ return camelCase(`${method} ${cleaned}`)
287
+ }
288
+
289
+ /**
290
+ * Walk the spec paths and build a Map<friendlyName, EndpointInfo>.
291
+ */
292
+ function buildEndpointMap(spec: any): Map<string, EndpointInfo> {
293
+ const map = new Map<string, EndpointInfo>()
294
+ const paths = spec.paths || {}
295
+
296
+ for (const [path, pathItem] of Object.entries<any>(paths)) {
297
+ // Shared parameters at the path level
298
+ const sharedParams: OpenAPIParameter[] = (pathItem.parameters || []).map(normalizeParam)
299
+
300
+ for (const method of ['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace']) {
301
+ const operation = pathItem[method]
302
+ if (!operation) continue
303
+
304
+ const name = friendlyName(operation.operationId, method, path)
305
+ const opParams: OpenAPIParameter[] = (operation.parameters || []).map(normalizeParam)
306
+
307
+ // Merge path-level params with operation-level (operation overrides by name+in)
308
+ const paramKey = (p: OpenAPIParameter) => `${p.in}:${p.name}`
309
+ const merged = new Map<string, OpenAPIParameter>()
310
+ for (const p of sharedParams) merged.set(paramKey(p), p)
311
+ for (const p of opParams) merged.set(paramKey(p), p)
312
+
313
+ const endpoint: EndpointInfo = {
314
+ name,
315
+ operationId: operation.operationId || '',
316
+ method,
317
+ path,
318
+ summary: operation.summary || '',
319
+ description: operation.description || '',
320
+ tags: operation.tags || [],
321
+ parameters: Array.from(merged.values()),
322
+ requestBody: operation.requestBody || null,
323
+ responses: operation.responses || {},
324
+ deprecated: !!operation.deprecated,
325
+ }
326
+
327
+ map.set(name, endpoint)
328
+ }
329
+ }
330
+
331
+ return map
332
+ }
333
+
334
+ function normalizeParam(raw: any): OpenAPIParameter {
335
+ return {
336
+ name: raw.name || '',
337
+ in: raw.in || 'query',
338
+ description: raw.description || '',
339
+ required: !!raw.required,
340
+ schema: raw.schema || {},
341
+ }
342
+ }
343
+
344
+ /**
345
+ * Convert an EndpointInfo into an OpenAI-compatible function definition.
346
+ *
347
+ * Merges path, query, and header params + requestBody properties into a single
348
+ * flat `parameters` object, which is the format OpenAI expects.
349
+ */
350
+ function endpointToFunction(ep: EndpointInfo): OpenAIFunctionDef {
351
+ const properties: Record<string, any> = {}
352
+ const required: string[] = []
353
+
354
+ for (const param of ep.parameters) {
355
+ properties[param.name] = {
356
+ ...schemaToJsonSchema(param.schema),
357
+ description: param.description || `${param.in} parameter`,
358
+ }
359
+ if (param.required) required.push(param.name)
360
+ }
361
+
362
+ // Merge requestBody properties (for application/json)
363
+ const bodySchema = ep.requestBody?.content?.['application/json']?.schema
364
+ if (bodySchema) {
365
+ if (bodySchema.properties) {
366
+ for (const [key, val] of Object.entries<any>(bodySchema.properties)) {
367
+ properties[key] = schemaToJsonSchema(val)
368
+ }
369
+ if (bodySchema.required) {
370
+ for (const r of bodySchema.required) {
371
+ if (!required.includes(r)) required.push(r)
372
+ }
373
+ }
374
+ } else {
375
+ // If the body is a single schema without properties, expose it as "body"
376
+ properties['body'] = {
377
+ ...schemaToJsonSchema(bodySchema),
378
+ description: 'Request body',
379
+ }
380
+ }
381
+ }
382
+
383
+ const description = [ep.summary, ep.description]
384
+ .filter(Boolean)
385
+ .join(' — ')
386
+ || `${ep.method.toUpperCase()} ${ep.path}`
387
+
388
+ return {
389
+ name: ep.name,
390
+ description,
391
+ parameters: {
392
+ type: 'object',
393
+ properties,
394
+ required,
395
+ },
396
+ }
397
+ }
398
+
399
+ /**
400
+ * Lightweight conversion of an OpenAPI schema fragment to a JSON Schema-compatible
401
+ * fragment suitable for OpenAI function calling.
402
+ *
403
+ * Handles the common cases: primitives, arrays, objects, enums, $ref (as opaque string).
404
+ */
405
+ function schemaToJsonSchema(schema: any): any {
406
+ if (!schema) return { type: 'string' }
407
+
408
+ // Pass through $ref as a string description since we don't resolve refs here
409
+ if (schema.$ref) {
410
+ return { type: 'string', description: `Reference: ${schema.$ref}` }
411
+ }
412
+
413
+ const result: any = {}
414
+
415
+ if (schema.type) result.type = schema.type
416
+ if (schema.description) result.description = schema.description
417
+ if (schema.enum) result.enum = schema.enum
418
+ if (schema.default !== undefined) result.default = schema.default
419
+
420
+ if (schema.type === 'array' && schema.items) {
421
+ result.items = schemaToJsonSchema(schema.items)
422
+ }
423
+
424
+ if (schema.type === 'object' && schema.properties) {
425
+ result.properties = {}
426
+ for (const [key, val] of Object.entries<any>(schema.properties)) {
427
+ result.properties[key] = schemaToJsonSchema(val)
428
+ }
429
+ if (schema.required) result.required = schema.required
430
+ }
431
+
432
+ // oneOf / anyOf / allOf pass-through
433
+ if (schema.oneOf) result.oneOf = schema.oneOf.map(schemaToJsonSchema)
434
+ if (schema.anyOf) result.anyOf = schema.anyOf.map(schemaToJsonSchema)
435
+ if (schema.allOf) result.allOf = schema.allOf.map(schemaToJsonSchema)
436
+
437
+ // Default to string if nothing was set
438
+ if (!result.type && !result.oneOf && !result.anyOf && !result.allOf) {
439
+ result.type = 'string'
440
+ }
441
+
442
+ return result
443
+ }
444
+
445
+ export default OpenAPI