luca 1.1.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (754) hide show
  1. package/.github/workflows/release.yaml +169 -0
  2. package/AGENTS.md +99 -0
  3. package/CLAUDE.md +115 -0
  4. package/CNAME +1 -0
  5. package/README.md +257 -8
  6. package/RUNME.md +56 -0
  7. package/assistants/codingAssistant/ABOUT.md +5 -0
  8. package/assistants/codingAssistant/CORE.md +28 -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 +2769 -0
  20. package/bunfig.toml +3 -0
  21. package/commands/audit-docs.ts +740 -0
  22. package/commands/build-bootstrap.ts +118 -0
  23. package/commands/build-python-bridge.ts +43 -0
  24. package/commands/build-scaffolds.ts +176 -0
  25. package/commands/generate-api-docs.ts +114 -0
  26. package/commands/inkbot.ts +874 -0
  27. package/commands/release.ts +80 -0
  28. package/commands/try-all-challenges.ts +543 -0
  29. package/commands/try-challenge.ts +100 -0
  30. package/dist/agi/container.server.d.ts +63 -0
  31. package/dist/agi/container.server.d.ts.map +1 -0
  32. package/dist/agi/endpoints/ask.d.ts +20 -0
  33. package/dist/agi/endpoints/ask.d.ts.map +1 -0
  34. package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
  35. package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
  36. package/dist/agi/endpoints/conversations.d.ts +18 -0
  37. package/dist/agi/endpoints/conversations.d.ts.map +1 -0
  38. package/dist/agi/endpoints/experts.d.ts +8 -0
  39. package/dist/agi/endpoints/experts.d.ts.map +1 -0
  40. package/dist/agi/feature.d.ts +9 -0
  41. package/dist/agi/feature.d.ts.map +1 -0
  42. package/dist/agi/features/assistant.d.ts +509 -0
  43. package/dist/agi/features/assistant.d.ts.map +1 -0
  44. package/dist/agi/features/assistants-manager.d.ts +236 -0
  45. package/dist/agi/features/assistants-manager.d.ts.map +1 -0
  46. package/dist/agi/features/autonomous-assistant.d.ts +281 -0
  47. package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
  48. package/dist/agi/features/browser-use.d.ts +479 -0
  49. package/dist/agi/features/browser-use.d.ts.map +1 -0
  50. package/dist/agi/features/claude-code.d.ts +824 -0
  51. package/dist/agi/features/claude-code.d.ts.map +1 -0
  52. package/dist/agi/features/conversation-history.d.ts +245 -0
  53. package/dist/agi/features/conversation-history.d.ts.map +1 -0
  54. package/dist/agi/features/conversation.d.ts +464 -0
  55. package/dist/agi/features/conversation.d.ts.map +1 -0
  56. package/dist/agi/features/docs-reader.d.ts +72 -0
  57. package/dist/agi/features/docs-reader.d.ts.map +1 -0
  58. package/dist/agi/features/file-tools.d.ts +110 -0
  59. package/dist/agi/features/file-tools.d.ts.map +1 -0
  60. package/dist/agi/features/luca-coder.d.ts +323 -0
  61. package/dist/agi/features/luca-coder.d.ts.map +1 -0
  62. package/dist/agi/features/openai-codex.d.ts +381 -0
  63. package/dist/agi/features/openai-codex.d.ts.map +1 -0
  64. package/dist/agi/features/openapi.d.ts +200 -0
  65. package/dist/agi/features/openapi.d.ts.map +1 -0
  66. package/dist/agi/features/skills-library.d.ts +167 -0
  67. package/dist/agi/features/skills-library.d.ts.map +1 -0
  68. package/dist/agi/index.d.ts +5 -0
  69. package/dist/agi/index.d.ts.map +1 -0
  70. package/dist/agi/lib/interceptor-chain.d.ts +44 -0
  71. package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
  72. package/dist/agi/lib/token-counter.d.ts +13 -0
  73. package/dist/agi/lib/token-counter.d.ts.map +1 -0
  74. package/dist/bootstrap/generated.d.ts +5 -0
  75. package/dist/bootstrap/generated.d.ts.map +1 -0
  76. package/dist/browser.d.ts +12 -0
  77. package/dist/browser.d.ts.map +1 -0
  78. package/dist/bus.d.ts +29 -0
  79. package/dist/bus.d.ts.map +1 -0
  80. package/dist/cli/build-info.d.ts +4 -0
  81. package/dist/cli/build-info.d.ts.map +1 -0
  82. package/dist/cli/cli.d.ts +3 -0
  83. package/dist/cli/cli.d.ts.map +1 -0
  84. package/dist/client.d.ts +60 -0
  85. package/dist/client.d.ts.map +1 -0
  86. package/dist/clients/civitai/index.d.ts +472 -0
  87. package/dist/clients/civitai/index.d.ts.map +1 -0
  88. package/dist/clients/client-template.d.ts +30 -0
  89. package/dist/clients/client-template.d.ts.map +1 -0
  90. package/dist/clients/comfyui/index.d.ts +281 -0
  91. package/dist/clients/comfyui/index.d.ts.map +1 -0
  92. package/dist/clients/elevenlabs/index.d.ts +197 -0
  93. package/dist/clients/elevenlabs/index.d.ts.map +1 -0
  94. package/dist/clients/graph.d.ts +64 -0
  95. package/dist/clients/graph.d.ts.map +1 -0
  96. package/dist/clients/openai/index.d.ts +247 -0
  97. package/dist/clients/openai/index.d.ts.map +1 -0
  98. package/dist/clients/rest.d.ts +92 -0
  99. package/dist/clients/rest.d.ts.map +1 -0
  100. package/dist/clients/supabase/index.d.ts +176 -0
  101. package/dist/clients/supabase/index.d.ts.map +1 -0
  102. package/dist/clients/websocket.d.ts +127 -0
  103. package/dist/clients/websocket.d.ts.map +1 -0
  104. package/dist/command.d.ts +163 -0
  105. package/dist/command.d.ts.map +1 -0
  106. package/dist/commands/bootstrap.d.ts +20 -0
  107. package/dist/commands/bootstrap.d.ts.map +1 -0
  108. package/dist/commands/chat.d.ts +37 -0
  109. package/dist/commands/chat.d.ts.map +1 -0
  110. package/dist/commands/code.d.ts +28 -0
  111. package/dist/commands/code.d.ts.map +1 -0
  112. package/dist/commands/console.d.ts +22 -0
  113. package/dist/commands/console.d.ts.map +1 -0
  114. package/dist/commands/describe.d.ts +50 -0
  115. package/dist/commands/describe.d.ts.map +1 -0
  116. package/dist/commands/eval.d.ts +23 -0
  117. package/dist/commands/eval.d.ts.map +1 -0
  118. package/dist/commands/help.d.ts +25 -0
  119. package/dist/commands/help.d.ts.map +1 -0
  120. package/dist/commands/index.d.ts +18 -0
  121. package/dist/commands/index.d.ts.map +1 -0
  122. package/dist/commands/introspect.d.ts +24 -0
  123. package/dist/commands/introspect.d.ts.map +1 -0
  124. package/dist/commands/mcp.d.ts +35 -0
  125. package/dist/commands/mcp.d.ts.map +1 -0
  126. package/dist/commands/prompt.d.ts +38 -0
  127. package/dist/commands/prompt.d.ts.map +1 -0
  128. package/dist/commands/run.d.ts +24 -0
  129. package/dist/commands/run.d.ts.map +1 -0
  130. package/dist/commands/sandbox-mcp.d.ts +34 -0
  131. package/dist/commands/sandbox-mcp.d.ts.map +1 -0
  132. package/dist/commands/save-api-docs.d.ts +21 -0
  133. package/dist/commands/save-api-docs.d.ts.map +1 -0
  134. package/dist/commands/scaffold.d.ts +24 -0
  135. package/dist/commands/scaffold.d.ts.map +1 -0
  136. package/dist/commands/select.d.ts +22 -0
  137. package/dist/commands/select.d.ts.map +1 -0
  138. package/dist/commands/serve.d.ts +29 -0
  139. package/dist/commands/serve.d.ts.map +1 -0
  140. package/dist/container-describer.d.ts +144 -0
  141. package/dist/container-describer.d.ts.map +1 -0
  142. package/dist/container.d.ts +451 -0
  143. package/dist/container.d.ts.map +1 -0
  144. package/dist/endpoint.d.ts +113 -0
  145. package/dist/endpoint.d.ts.map +1 -0
  146. package/dist/feature.d.ts +47 -0
  147. package/dist/feature.d.ts.map +1 -0
  148. package/dist/graft.d.ts +29 -0
  149. package/dist/graft.d.ts.map +1 -0
  150. package/dist/hash-object.d.ts +8 -0
  151. package/dist/hash-object.d.ts.map +1 -0
  152. package/dist/helper.d.ts +209 -0
  153. package/dist/helper.d.ts.map +1 -0
  154. package/dist/introspection/generated.node.d.ts +44623 -0
  155. package/dist/introspection/generated.node.d.ts.map +1 -0
  156. package/dist/introspection/generated.web.d.ts +1412 -0
  157. package/dist/introspection/generated.web.d.ts.map +1 -0
  158. package/dist/introspection/index.d.ts +156 -0
  159. package/dist/introspection/index.d.ts.map +1 -0
  160. package/dist/introspection/scan.d.ts +147 -0
  161. package/dist/introspection/scan.d.ts.map +1 -0
  162. package/dist/node/container.d.ts +256 -0
  163. package/dist/node/container.d.ts.map +1 -0
  164. package/dist/node/feature.d.ts +9 -0
  165. package/dist/node/feature.d.ts.map +1 -0
  166. package/dist/node/features/container-link.d.ts +213 -0
  167. package/dist/node/features/container-link.d.ts.map +1 -0
  168. package/dist/node/features/content-db.d.ts +354 -0
  169. package/dist/node/features/content-db.d.ts.map +1 -0
  170. package/dist/node/features/disk-cache.d.ts +236 -0
  171. package/dist/node/features/disk-cache.d.ts.map +1 -0
  172. package/dist/node/features/dns.d.ts +511 -0
  173. package/dist/node/features/dns.d.ts.map +1 -0
  174. package/dist/node/features/docker.d.ts +485 -0
  175. package/dist/node/features/docker.d.ts.map +1 -0
  176. package/dist/node/features/downloader.d.ts +73 -0
  177. package/dist/node/features/downloader.d.ts.map +1 -0
  178. package/dist/node/features/figlet-fonts.d.ts +4 -0
  179. package/dist/node/features/figlet-fonts.d.ts.map +1 -0
  180. package/dist/node/features/file-manager.d.ts +177 -0
  181. package/dist/node/features/file-manager.d.ts.map +1 -0
  182. package/dist/node/features/fs.d.ts +635 -0
  183. package/dist/node/features/fs.d.ts.map +1 -0
  184. package/dist/node/features/git.d.ts +329 -0
  185. package/dist/node/features/git.d.ts.map +1 -0
  186. package/dist/node/features/google-auth.d.ts +200 -0
  187. package/dist/node/features/google-auth.d.ts.map +1 -0
  188. package/dist/node/features/google-calendar.d.ts +194 -0
  189. package/dist/node/features/google-calendar.d.ts.map +1 -0
  190. package/dist/node/features/google-docs.d.ts +138 -0
  191. package/dist/node/features/google-docs.d.ts.map +1 -0
  192. package/dist/node/features/google-drive.d.ts +202 -0
  193. package/dist/node/features/google-drive.d.ts.map +1 -0
  194. package/dist/node/features/google-mail.d.ts +221 -0
  195. package/dist/node/features/google-mail.d.ts.map +1 -0
  196. package/dist/node/features/google-sheets.d.ts +157 -0
  197. package/dist/node/features/google-sheets.d.ts.map +1 -0
  198. package/dist/node/features/grep.d.ts +207 -0
  199. package/dist/node/features/grep.d.ts.map +1 -0
  200. package/dist/node/features/helpers.d.ts +236 -0
  201. package/dist/node/features/helpers.d.ts.map +1 -0
  202. package/dist/node/features/ink.d.ts +332 -0
  203. package/dist/node/features/ink.d.ts.map +1 -0
  204. package/dist/node/features/ipc-socket.d.ts +298 -0
  205. package/dist/node/features/ipc-socket.d.ts.map +1 -0
  206. package/dist/node/features/json-tree.d.ts +140 -0
  207. package/dist/node/features/json-tree.d.ts.map +1 -0
  208. package/dist/node/features/networking.d.ts +373 -0
  209. package/dist/node/features/networking.d.ts.map +1 -0
  210. package/dist/node/features/nlp.d.ts +125 -0
  211. package/dist/node/features/nlp.d.ts.map +1 -0
  212. package/dist/node/features/opener.d.ts +93 -0
  213. package/dist/node/features/opener.d.ts.map +1 -0
  214. package/dist/node/features/os.d.ts +168 -0
  215. package/dist/node/features/os.d.ts.map +1 -0
  216. package/dist/node/features/package-finder.d.ts +419 -0
  217. package/dist/node/features/package-finder.d.ts.map +1 -0
  218. package/dist/node/features/postgres.d.ts +173 -0
  219. package/dist/node/features/postgres.d.ts.map +1 -0
  220. package/dist/node/features/proc.d.ts +285 -0
  221. package/dist/node/features/proc.d.ts.map +1 -0
  222. package/dist/node/features/process-manager.d.ts +427 -0
  223. package/dist/node/features/process-manager.d.ts.map +1 -0
  224. package/dist/node/features/python.d.ts +477 -0
  225. package/dist/node/features/python.d.ts.map +1 -0
  226. package/dist/node/features/redis.d.ts +247 -0
  227. package/dist/node/features/redis.d.ts.map +1 -0
  228. package/dist/node/features/repl.d.ts +84 -0
  229. package/dist/node/features/repl.d.ts.map +1 -0
  230. package/dist/node/features/runpod.d.ts +527 -0
  231. package/dist/node/features/runpod.d.ts.map +1 -0
  232. package/dist/node/features/secure-shell.d.ts +145 -0
  233. package/dist/node/features/secure-shell.d.ts.map +1 -0
  234. package/dist/node/features/semantic-search.d.ts +207 -0
  235. package/dist/node/features/semantic-search.d.ts.map +1 -0
  236. package/dist/node/features/sqlite.d.ts +180 -0
  237. package/dist/node/features/sqlite.d.ts.map +1 -0
  238. package/dist/node/features/telegram.d.ts +173 -0
  239. package/dist/node/features/telegram.d.ts.map +1 -0
  240. package/dist/node/features/transpiler.d.ts +51 -0
  241. package/dist/node/features/transpiler.d.ts.map +1 -0
  242. package/dist/node/features/tts.d.ts +108 -0
  243. package/dist/node/features/tts.d.ts.map +1 -0
  244. package/dist/node/features/ui.d.ts +562 -0
  245. package/dist/node/features/ui.d.ts.map +1 -0
  246. package/dist/node/features/vault.d.ts +90 -0
  247. package/dist/node/features/vault.d.ts.map +1 -0
  248. package/dist/node/features/vm.d.ts +285 -0
  249. package/dist/node/features/vm.d.ts.map +1 -0
  250. package/dist/node/features/yaml-tree.d.ts +118 -0
  251. package/dist/node/features/yaml-tree.d.ts.map +1 -0
  252. package/dist/node/features/yaml.d.ts +127 -0
  253. package/dist/node/features/yaml.d.ts.map +1 -0
  254. package/dist/node.d.ts +67 -0
  255. package/dist/node.d.ts.map +1 -0
  256. package/dist/python/generated.d.ts +2 -0
  257. package/dist/python/generated.d.ts.map +1 -0
  258. package/dist/react/index.d.ts +36 -0
  259. package/dist/react/index.d.ts.map +1 -0
  260. package/dist/registry.d.ts +97 -0
  261. package/dist/registry.d.ts.map +1 -0
  262. package/dist/scaffolds/generated.d.ts +13 -0
  263. package/dist/scaffolds/generated.d.ts.map +1 -0
  264. package/dist/scaffolds/template.d.ts +11 -0
  265. package/dist/scaffolds/template.d.ts.map +1 -0
  266. package/dist/schemas/base.d.ts +254 -0
  267. package/dist/schemas/base.d.ts.map +1 -0
  268. package/dist/selector.d.ts +130 -0
  269. package/dist/selector.d.ts.map +1 -0
  270. package/dist/server.d.ts +89 -0
  271. package/dist/server.d.ts.map +1 -0
  272. package/dist/servers/express.d.ts +104 -0
  273. package/dist/servers/express.d.ts.map +1 -0
  274. package/dist/servers/mcp.d.ts +201 -0
  275. package/dist/servers/mcp.d.ts.map +1 -0
  276. package/dist/servers/socket.d.ts +121 -0
  277. package/dist/servers/socket.d.ts.map +1 -0
  278. package/dist/state.d.ts +24 -0
  279. package/dist/state.d.ts.map +1 -0
  280. package/dist/web/clients/socket.d.ts +37 -0
  281. package/dist/web/clients/socket.d.ts.map +1 -0
  282. package/dist/web/container.d.ts +55 -0
  283. package/dist/web/container.d.ts.map +1 -0
  284. package/dist/web/extension.d.ts +4 -0
  285. package/dist/web/extension.d.ts.map +1 -0
  286. package/dist/web/feature.d.ts +8 -0
  287. package/dist/web/feature.d.ts.map +1 -0
  288. package/dist/web/features/asset-loader.d.ts +35 -0
  289. package/dist/web/features/asset-loader.d.ts.map +1 -0
  290. package/dist/web/features/container-link.d.ts +167 -0
  291. package/dist/web/features/container-link.d.ts.map +1 -0
  292. package/dist/web/features/esbuild.d.ts +51 -0
  293. package/dist/web/features/esbuild.d.ts.map +1 -0
  294. package/dist/web/features/helpers.d.ts +140 -0
  295. package/dist/web/features/helpers.d.ts.map +1 -0
  296. package/dist/web/features/network.d.ts +69 -0
  297. package/dist/web/features/network.d.ts.map +1 -0
  298. package/dist/web/features/speech.d.ts +71 -0
  299. package/dist/web/features/speech.d.ts.map +1 -0
  300. package/dist/web/features/vault.d.ts +62 -0
  301. package/dist/web/features/vault.d.ts.map +1 -0
  302. package/dist/web/features/vm.d.ts +48 -0
  303. package/dist/web/features/vm.d.ts.map +1 -0
  304. package/dist/web/features/voice-recognition.d.ts +96 -0
  305. package/dist/web/features/voice-recognition.d.ts.map +1 -0
  306. package/dist/web/shims/isomorphic-vm.d.ts +22 -0
  307. package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
  308. package/docs/CLI.md +335 -0
  309. package/docs/CNAME +1 -0
  310. package/docs/README.md +60 -0
  311. package/docs/TABLE-OF-CONTENTS.md +183 -0
  312. package/docs/apis/clients/elevenlabs.md +308 -0
  313. package/docs/apis/clients/graph.md +107 -0
  314. package/docs/apis/clients/openai.md +429 -0
  315. package/docs/apis/clients/rest.md +161 -0
  316. package/docs/apis/clients/websocket.md +174 -0
  317. package/docs/apis/features/agi/assistant.md +625 -0
  318. package/docs/apis/features/agi/assistants-manager.md +282 -0
  319. package/docs/apis/features/agi/auto-assistant.md +279 -0
  320. package/docs/apis/features/agi/browser-use.md +802 -0
  321. package/docs/apis/features/agi/claude-code.md +884 -0
  322. package/docs/apis/features/agi/conversation-history.md +364 -0
  323. package/docs/apis/features/agi/conversation.md +548 -0
  324. package/docs/apis/features/agi/docs-reader.md +99 -0
  325. package/docs/apis/features/agi/file-tools.md +163 -0
  326. package/docs/apis/features/agi/luca-coder.md +407 -0
  327. package/docs/apis/features/agi/openai-codex.md +396 -0
  328. package/docs/apis/features/agi/openapi.md +138 -0
  329. package/docs/apis/features/agi/semantic-search.md +387 -0
  330. package/docs/apis/features/agi/skills-library.md +239 -0
  331. package/docs/apis/features/node/container-link.md +192 -0
  332. package/docs/apis/features/node/content-db.md +450 -0
  333. package/docs/apis/features/node/disk-cache.md +379 -0
  334. package/docs/apis/features/node/dns.md +652 -0
  335. package/docs/apis/features/node/docker.md +706 -0
  336. package/docs/apis/features/node/downloader.md +81 -0
  337. package/docs/apis/features/node/esbuild.md +60 -0
  338. package/docs/apis/features/node/file-manager.md +191 -0
  339. package/docs/apis/features/node/fs.md +1217 -0
  340. package/docs/apis/features/node/git.md +371 -0
  341. package/docs/apis/features/node/google-auth.md +193 -0
  342. package/docs/apis/features/node/google-calendar.md +202 -0
  343. package/docs/apis/features/node/google-docs.md +173 -0
  344. package/docs/apis/features/node/google-drive.md +246 -0
  345. package/docs/apis/features/node/google-mail.md +214 -0
  346. package/docs/apis/features/node/google-sheets.md +194 -0
  347. package/docs/apis/features/node/grep.md +292 -0
  348. package/docs/apis/features/node/helpers.md +164 -0
  349. package/docs/apis/features/node/ink.md +334 -0
  350. package/docs/apis/features/node/ipc-socket.md +249 -0
  351. package/docs/apis/features/node/json-tree.md +86 -0
  352. package/docs/apis/features/node/networking.md +316 -0
  353. package/docs/apis/features/node/nlp.md +133 -0
  354. package/docs/apis/features/node/opener.md +97 -0
  355. package/docs/apis/features/node/os.md +146 -0
  356. package/docs/apis/features/node/package-finder.md +392 -0
  357. package/docs/apis/features/node/postgres.md +234 -0
  358. package/docs/apis/features/node/proc.md +399 -0
  359. package/docs/apis/features/node/process-manager.md +305 -0
  360. package/docs/apis/features/node/python.md +604 -0
  361. package/docs/apis/features/node/redis.md +380 -0
  362. package/docs/apis/features/node/repl.md +88 -0
  363. package/docs/apis/features/node/runpod.md +674 -0
  364. package/docs/apis/features/node/secure-shell.md +176 -0
  365. package/docs/apis/features/node/semantic-search.md +408 -0
  366. package/docs/apis/features/node/sqlite.md +233 -0
  367. package/docs/apis/features/node/telegram.md +279 -0
  368. package/docs/apis/features/node/transpiler.md +74 -0
  369. package/docs/apis/features/node/tts.md +133 -0
  370. package/docs/apis/features/node/ui.md +701 -0
  371. package/docs/apis/features/node/vault.md +59 -0
  372. package/docs/apis/features/node/vm.md +75 -0
  373. package/docs/apis/features/node/yaml-tree.md +85 -0
  374. package/docs/apis/features/node/yaml.md +176 -0
  375. package/docs/apis/features/web/asset-loader.md +59 -0
  376. package/docs/apis/features/web/container-link.md +192 -0
  377. package/docs/apis/features/web/esbuild.md +54 -0
  378. package/docs/apis/features/web/helpers.md +164 -0
  379. package/docs/apis/features/web/network.md +44 -0
  380. package/docs/apis/features/web/speech.md +69 -0
  381. package/docs/apis/features/web/vault.md +59 -0
  382. package/docs/apis/features/web/vm.md +75 -0
  383. package/docs/apis/features/web/voice.md +84 -0
  384. package/docs/apis/servers/express.md +171 -0
  385. package/docs/apis/servers/mcp.md +238 -0
  386. package/docs/apis/servers/websocket.md +170 -0
  387. package/docs/bootstrap/CLAUDE.md +101 -0
  388. package/docs/bootstrap/SKILL.md +341 -0
  389. package/docs/bootstrap/templates/about-command.ts +41 -0
  390. package/docs/bootstrap/templates/docs-models.ts +22 -0
  391. package/docs/bootstrap/templates/docs-readme.md +43 -0
  392. package/docs/bootstrap/templates/example-feature.ts +53 -0
  393. package/docs/bootstrap/templates/health-endpoint.ts +15 -0
  394. package/docs/bootstrap/templates/luca-cli.ts +30 -0
  395. package/docs/bootstrap/templates/runme.md +54 -0
  396. package/docs/challenges/caching-proxy.md +16 -0
  397. package/docs/challenges/content-db-round-trip.md +14 -0
  398. package/docs/challenges/custom-command.md +9 -0
  399. package/docs/challenges/file-watcher-pipeline.md +11 -0
  400. package/docs/challenges/grep-audit-report.md +15 -0
  401. package/docs/challenges/multi-feature-dashboard.md +14 -0
  402. package/docs/challenges/process-orchestrator.md +17 -0
  403. package/docs/challenges/rest-api-server-with-client.md +12 -0
  404. package/docs/challenges/script-runner-with-vm.md +11 -0
  405. package/docs/challenges/simple-rest-api.md +15 -0
  406. package/docs/challenges/websocket-serve-and-client.md +11 -0
  407. package/docs/challenges/yaml-config-system.md +14 -0
  408. package/docs/command-system-overhaul.md +94 -0
  409. package/docs/documentation-audit.md +134 -0
  410. package/docs/examples/assistant/CORE.md +18 -0
  411. package/docs/examples/assistant/hooks.ts +3 -0
  412. package/docs/examples/assistant/tools.ts +10 -0
  413. package/docs/examples/assistant-hooks-reference.ts +171 -0
  414. package/docs/examples/assistant-with-process-manager.md +84 -0
  415. package/docs/examples/content-db.md +77 -0
  416. package/docs/examples/disk-cache.md +83 -0
  417. package/docs/examples/docker.md +101 -0
  418. package/docs/examples/downloader.md +70 -0
  419. package/docs/examples/entity.md +124 -0
  420. package/docs/examples/esbuild.md +80 -0
  421. package/docs/examples/feature-as-tool-provider.md +143 -0
  422. package/docs/examples/file-manager.md +82 -0
  423. package/docs/examples/fs.md +83 -0
  424. package/docs/examples/git.md +85 -0
  425. package/docs/examples/google-auth.md +88 -0
  426. package/docs/examples/google-calendar.md +94 -0
  427. package/docs/examples/google-docs.md +82 -0
  428. package/docs/examples/google-drive.md +96 -0
  429. package/docs/examples/google-sheets.md +95 -0
  430. package/docs/examples/grep.md +85 -0
  431. package/docs/examples/ink-blocks.md +75 -0
  432. package/docs/examples/ink-renderer.md +41 -0
  433. package/docs/examples/ink.md +103 -0
  434. package/docs/examples/ipc-socket.md +103 -0
  435. package/docs/examples/json-tree.md +91 -0
  436. package/docs/examples/networking.md +58 -0
  437. package/docs/examples/nlp.md +91 -0
  438. package/docs/examples/opener.md +78 -0
  439. package/docs/examples/os.md +72 -0
  440. package/docs/examples/package-finder.md +89 -0
  441. package/docs/examples/postgres.md +91 -0
  442. package/docs/examples/proc.md +81 -0
  443. package/docs/examples/process-manager.md +79 -0
  444. package/docs/examples/python.md +132 -0
  445. package/docs/examples/repl.md +93 -0
  446. package/docs/examples/runpod.md +119 -0
  447. package/docs/examples/secure-shell.md +92 -0
  448. package/docs/examples/sqlite.md +86 -0
  449. package/docs/examples/structured-output-with-assistants.md +144 -0
  450. package/docs/examples/telegram.md +77 -0
  451. package/docs/examples/tts.md +86 -0
  452. package/docs/examples/ui.md +80 -0
  453. package/docs/examples/vault.md +70 -0
  454. package/docs/examples/vm.md +86 -0
  455. package/docs/examples/websocket-ask-and-reply-example.md +128 -0
  456. package/docs/examples/yaml-tree.md +93 -0
  457. package/docs/examples/yaml.md +104 -0
  458. package/docs/ideas/assistant-factory-pattern.md +142 -0
  459. package/docs/in-memory-fs.md +4 -0
  460. package/docs/introspection-audit.md +49 -0
  461. package/docs/introspection.md +164 -0
  462. package/docs/mcp/readme.md +162 -0
  463. package/docs/models.ts +41 -0
  464. package/docs/philosophy.md +86 -0
  465. package/docs/principles.md +7 -0
  466. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
  467. package/docs/prompts/check-for-undocumented-features.md +27 -0
  468. package/docs/prompts/mcp-test-easy-command.md +27 -0
  469. package/docs/scaffolds/client.md +149 -0
  470. package/docs/scaffolds/command.md +120 -0
  471. package/docs/scaffolds/endpoint.md +171 -0
  472. package/docs/scaffolds/feature.md +158 -0
  473. package/docs/scaffolds/selector.md +91 -0
  474. package/docs/scaffolds/server.md +196 -0
  475. package/docs/selectors.md +115 -0
  476. package/docs/sessions/custom-command/attempt-log-2.md +195 -0
  477. package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +728 -0
  478. package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +555 -0
  479. package/docs/sessions/grep-audit-report/attempt-log-1.md +289 -0
  480. package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +679 -0
  481. package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +1 -0
  482. package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +920 -0
  483. package/docs/sessions/simple-rest-api/attempt-log-1.md +593 -0
  484. package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +995 -0
  485. package/docs/tutorials/00-bootstrap.md +166 -0
  486. package/docs/tutorials/01-getting-started.md +106 -0
  487. package/docs/tutorials/02-container.md +210 -0
  488. package/docs/tutorials/03-scripts.md +194 -0
  489. package/docs/tutorials/04-features-overview.md +196 -0
  490. package/docs/tutorials/05-state-and-events.md +171 -0
  491. package/docs/tutorials/06-servers.md +157 -0
  492. package/docs/tutorials/07-endpoints.md +198 -0
  493. package/docs/tutorials/08-commands.md +252 -0
  494. package/docs/tutorials/09-clients.md +162 -0
  495. package/docs/tutorials/10-creating-features.md +203 -0
  496. package/docs/tutorials/11-contentbase.md +191 -0
  497. package/docs/tutorials/12-assistants.md +215 -0
  498. package/docs/tutorials/13-introspection.md +157 -0
  499. package/docs/tutorials/14-type-system.md +174 -0
  500. package/docs/tutorials/15-project-patterns.md +222 -0
  501. package/docs/tutorials/16-google-features.md +534 -0
  502. package/docs/tutorials/17-tui-blocks.md +530 -0
  503. package/docs/tutorials/18-semantic-search.md +334 -0
  504. package/docs/tutorials/19-python-sessions.md +401 -0
  505. package/docs/tutorials/20-browser-esm.md +234 -0
  506. package/index.html +1430 -0
  507. package/index.ts +1 -0
  508. package/install.sh +84 -0
  509. package/luca.cli.ts +16 -0
  510. package/luca.console.ts +9 -0
  511. package/main.py +6 -0
  512. package/package.json +219 -66
  513. package/public/index.html +1430 -0
  514. package/public/slides-ai-native.html +902 -0
  515. package/public/slides-intro.html +974 -0
  516. package/pyproject.toml +7 -0
  517. package/scripts/build-web.ts +28 -0
  518. package/scripts/examples/ask-luca-expert.ts +42 -0
  519. package/scripts/examples/assistant-questions.ts +12 -0
  520. package/scripts/examples/excalidraw-expert.ts +75 -0
  521. package/scripts/examples/expert-chat.ts +0 -0
  522. package/scripts/examples/file-manager.ts +14 -0
  523. package/scripts/examples/ideas.ts +12 -0
  524. package/scripts/examples/interactive-chat.ts +20 -0
  525. package/scripts/examples/openai-tool-calls.ts +113 -0
  526. package/scripts/examples/opening-a-web-browser.ts +5 -0
  527. package/scripts/examples/telegram-bot.ts +79 -0
  528. package/scripts/examples/using-assistant-with-mcp.ts +555 -0
  529. package/scripts/examples/using-claude-code.ts +10 -0
  530. package/scripts/examples/using-contentdb.ts +35 -0
  531. package/scripts/examples/using-conversations.ts +35 -0
  532. package/scripts/examples/using-disk-cache.ts +10 -0
  533. package/scripts/examples/using-docker-shell.ts +75 -0
  534. package/scripts/examples/using-elevenlabs.ts +25 -0
  535. package/scripts/examples/using-google-calendar.ts +57 -0
  536. package/scripts/examples/using-google-docs.ts +74 -0
  537. package/scripts/examples/using-google-drive.ts +74 -0
  538. package/scripts/examples/using-google-sheets.ts +89 -0
  539. package/scripts/examples/using-nlp.ts +55 -0
  540. package/scripts/examples/using-ollama.ts +11 -0
  541. package/scripts/examples/using-postgres.ts +55 -0
  542. package/scripts/examples/using-runpod.ts +32 -0
  543. package/scripts/examples/using-tts.ts +40 -0
  544. package/scripts/scaffold.ts +391 -0
  545. package/scripts/scratch.ts +15 -0
  546. package/scripts/stamp-build.sh +12 -0
  547. package/scripts/test-assistant-hooks.ts +13 -0
  548. package/scripts/test-docs-reader.ts +10 -0
  549. package/scripts/test-linux-binary.sh +80 -0
  550. package/scripts/update-introspection-data.ts +58 -0
  551. package/src/agi/README.md +14 -0
  552. package/src/agi/container.server.ts +152 -0
  553. package/src/agi/endpoints/ask.ts +60 -0
  554. package/src/agi/endpoints/conversations/[id].ts +45 -0
  555. package/src/agi/endpoints/conversations.ts +31 -0
  556. package/src/agi/endpoints/experts.ts +37 -0
  557. package/src/agi/feature.ts +13 -0
  558. package/src/agi/features/agent-memory.ts +694 -0
  559. package/src/agi/features/assistant.ts +1624 -0
  560. package/src/agi/features/assistants-manager.ts +418 -0
  561. package/src/agi/features/autonomous-assistant.ts +431 -0
  562. package/src/agi/features/browser-use.ts +653 -0
  563. package/src/agi/features/claude-code.ts +1538 -0
  564. package/src/agi/features/coding-tools.ts +175 -0
  565. package/src/agi/features/conversation-history.ts +495 -0
  566. package/src/agi/features/conversation.ts +1323 -0
  567. package/src/agi/features/docs-reader.ts +167 -0
  568. package/src/agi/features/file-tools.ts +293 -0
  569. package/src/agi/features/luca-coder.ts +639 -0
  570. package/src/agi/features/openai-codex.ts +651 -0
  571. package/src/agi/features/openapi.ts +445 -0
  572. package/src/agi/features/skills-library.ts +478 -0
  573. package/src/agi/index.ts +6 -0
  574. package/src/agi/lib/interceptor-chain.ts +89 -0
  575. package/src/agi/lib/token-counter.ts +122 -0
  576. package/src/bootstrap/generated.ts +9792 -0
  577. package/src/browser.ts +25 -0
  578. package/src/bus.ts +122 -0
  579. package/src/cli/build-info.ts +4 -0
  580. package/src/cli/cli.ts +355 -0
  581. package/src/client.ts +170 -0
  582. package/src/clients/civitai/index.ts +537 -0
  583. package/src/clients/client-template.ts +41 -0
  584. package/src/clients/comfyui/index.ts +604 -0
  585. package/src/clients/elevenlabs/index.ts +317 -0
  586. package/src/clients/graph.ts +87 -0
  587. package/src/clients/openai/index.ts +456 -0
  588. package/src/clients/rest.ts +207 -0
  589. package/src/clients/supabase/index.ts +357 -0
  590. package/src/clients/voicebox/index.ts +300 -0
  591. package/src/clients/websocket.ts +251 -0
  592. package/src/command.ts +505 -0
  593. package/src/commands/bootstrap.ts +244 -0
  594. package/src/commands/chat.ts +308 -0
  595. package/src/commands/code.ts +371 -0
  596. package/src/commands/console.ts +189 -0
  597. package/src/commands/describe.ts +243 -0
  598. package/src/commands/eval.ts +121 -0
  599. package/src/commands/help.ts +240 -0
  600. package/src/commands/index.ts +19 -0
  601. package/src/commands/introspect.ts +218 -0
  602. package/src/commands/mcp.ts +64 -0
  603. package/src/commands/prompt.ts +982 -0
  604. package/src/commands/run.ts +278 -0
  605. package/src/commands/sandbox-mcp.ts +343 -0
  606. package/src/commands/save-api-docs.ts +51 -0
  607. package/src/commands/scaffold.ts +225 -0
  608. package/src/commands/select.ts +99 -0
  609. package/src/commands/serve.ts +208 -0
  610. package/src/container-describer.ts +1084 -0
  611. package/src/container.ts +1186 -0
  612. package/src/endpoint.ts +365 -0
  613. package/src/entity.ts +173 -0
  614. package/src/feature.ts +118 -0
  615. package/src/graft.ts +181 -0
  616. package/src/hash-object.ts +97 -0
  617. package/src/helper.ts +849 -0
  618. package/src/introspection/generated.agi.ts +40208 -0
  619. package/src/introspection/generated.node.ts +28686 -0
  620. package/src/introspection/generated.web.ts +2251 -0
  621. package/src/introspection/index.ts +296 -0
  622. package/src/introspection/scan.ts +1131 -0
  623. package/src/node/container.ts +409 -0
  624. package/src/node/feature.ts +13 -0
  625. package/src/node/features/container-link.ts +559 -0
  626. package/src/node/features/content-db.ts +812 -0
  627. package/src/node/features/disk-cache.ts +388 -0
  628. package/src/node/features/dns.ts +669 -0
  629. package/src/node/features/docker.ts +921 -0
  630. package/src/node/features/downloader.ts +79 -0
  631. package/src/node/features/figlet-fonts.ts +600 -0
  632. package/src/node/features/file-manager.ts +535 -0
  633. package/src/node/features/fs.ts +1050 -0
  634. package/src/node/features/git.ts +592 -0
  635. package/src/node/features/google-auth.ts +504 -0
  636. package/src/node/features/google-calendar.ts +306 -0
  637. package/src/node/features/google-docs.ts +412 -0
  638. package/src/node/features/google-drive.ts +346 -0
  639. package/src/node/features/google-mail.ts +540 -0
  640. package/src/node/features/google-sheets.ts +286 -0
  641. package/src/node/features/grep.ts +427 -0
  642. package/src/node/features/helpers.ts +735 -0
  643. package/src/node/features/ink.ts +490 -0
  644. package/src/node/features/ipc-socket.ts +649 -0
  645. package/src/node/features/json-tree.ts +170 -0
  646. package/src/node/features/networking.ts +961 -0
  647. package/src/node/features/nlp.ts +212 -0
  648. package/src/node/features/opener.ts +180 -0
  649. package/src/node/features/os.ts +403 -0
  650. package/src/node/features/package-finder.ts +540 -0
  651. package/src/node/features/postgres.ts +289 -0
  652. package/src/node/features/proc.ts +503 -0
  653. package/src/node/features/process-manager.ts +844 -0
  654. package/src/node/features/python.ts +906 -0
  655. package/src/node/features/redis.ts +446 -0
  656. package/src/node/features/repl.ts +212 -0
  657. package/src/node/features/runpod.ts +811 -0
  658. package/src/node/features/secure-shell.ts +267 -0
  659. package/src/node/features/semantic-search.ts +935 -0
  660. package/src/node/features/sqlite.ts +289 -0
  661. package/src/node/features/telegram.ts +343 -0
  662. package/src/node/features/transpiler.ts +161 -0
  663. package/src/node/features/tts.ts +185 -0
  664. package/src/node/features/ui.ts +786 -0
  665. package/src/node/features/vault.ts +153 -0
  666. package/src/node/features/vm.ts +462 -0
  667. package/src/node/features/yaml-tree.ts +148 -0
  668. package/src/node/features/yaml.ts +133 -0
  669. package/src/node.ts +76 -0
  670. package/src/python/bridge.py +220 -0
  671. package/src/python/generated.ts +227 -0
  672. package/src/react/index.ts +175 -0
  673. package/src/registry.ts +210 -0
  674. package/src/scaffolds/generated.ts +1815 -0
  675. package/src/scaffolds/template.ts +46 -0
  676. package/src/schemas/base.ts +296 -0
  677. package/src/selector.ts +352 -0
  678. package/src/server.ts +229 -0
  679. package/src/servers/express.ts +283 -0
  680. package/src/servers/mcp.ts +802 -0
  681. package/src/servers/socket.ts +258 -0
  682. package/src/state.ts +101 -0
  683. package/src/web/clients/socket.ts +99 -0
  684. package/src/web/container.ts +75 -0
  685. package/src/web/extension.ts +30 -0
  686. package/src/web/feature.ts +12 -0
  687. package/src/web/features/asset-loader.ts +72 -0
  688. package/src/web/features/container-link.ts +382 -0
  689. package/src/web/features/esbuild.ts +93 -0
  690. package/src/web/features/helpers.ts +269 -0
  691. package/src/web/features/network.ts +85 -0
  692. package/src/web/features/speech.ts +104 -0
  693. package/src/web/features/vault.ts +207 -0
  694. package/src/web/features/vm.ts +85 -0
  695. package/src/web/features/voice-recognition.ts +161 -0
  696. package/src/web/shims/isomorphic-vm.ts +149 -0
  697. package/test/assistant-hooks.test.ts +306 -0
  698. package/test/assistant.test.ts +81 -0
  699. package/test/bus.test.ts +134 -0
  700. package/test/clients-servers.test.ts +217 -0
  701. package/test/command.test.ts +267 -0
  702. package/test/container-link.test.ts +274 -0
  703. package/test/conversation.test.ts +220 -0
  704. package/test/features.test.ts +160 -0
  705. package/test/fork-and-research.test.ts +450 -0
  706. package/test/integration.test.ts +787 -0
  707. package/test/interceptor-chain.test.ts +61 -0
  708. package/test/node-container.test.ts +121 -0
  709. package/test/python-session.test.ts +105 -0
  710. package/test/rate-limit.test.ts +272 -0
  711. package/test/semantic-search.test.ts +550 -0
  712. package/test/state.test.ts +121 -0
  713. package/test/vm-context.test.ts +146 -0
  714. package/test/vm-loadmodule.test.ts +213 -0
  715. package/test/websocket-ask.test.ts +101 -0
  716. package/test-integration/assistant.test.ts +138 -0
  717. package/test-integration/assistants-manager.test.ts +113 -0
  718. package/test-integration/claude-code.test.ts +98 -0
  719. package/test-integration/conversation-history.test.ts +205 -0
  720. package/test-integration/conversation.test.ts +137 -0
  721. package/test-integration/elevenlabs.test.ts +55 -0
  722. package/test-integration/google-services.test.ts +80 -0
  723. package/test-integration/helpers.ts +89 -0
  724. package/test-integration/memory.test.ts +204 -0
  725. package/test-integration/openai-codex.test.ts +93 -0
  726. package/test-integration/runpod.test.ts +58 -0
  727. package/test-integration/server-endpoints.test.ts +97 -0
  728. package/test-integration/telegram.test.ts +46 -0
  729. package/tsconfig.build.json +12 -0
  730. package/tsconfig.json +58 -0
  731. package/uv.lock +8 -0
  732. package/LICENSE +0 -21
  733. package/dist/cli/index.d.ts +0 -2
  734. package/dist/cli/index.js +0 -5
  735. package/dist/cli/run.d.ts +0 -12
  736. package/dist/cli/run.js +0 -42
  737. package/dist/config/consts.d.ts +0 -2
  738. package/dist/config/consts.js +0 -29
  739. package/dist/config/default.d.ts +0 -8
  740. package/dist/config/default.js +0 -15
  741. package/dist/config/initConfig.d.ts +0 -1
  742. package/dist/config/initConfig.js +0 -52
  743. package/dist/config/openConfig.d.ts +0 -2
  744. package/dist/config/openConfig.js +0 -24
  745. package/dist/config/runConfig.d.ts +0 -3
  746. package/dist/config/runConfig.js +0 -117
  747. package/dist/config/types.d.ts +0 -13
  748. package/dist/config/types.js +0 -2
  749. package/dist/index.d.ts +0 -1
  750. package/dist/index.js +0 -5
  751. package/dist/utils/common.d.ts +0 -2
  752. package/dist/utils/common.js +0 -52
  753. package/dist/utils/index.d.ts +0 -1
  754. package/dist/utils/index.js +0 -17
@@ -0,0 +1,2251 @@
1
+ import { setBuildTimeData, setContainerBuildTimeData } from './index.js';
2
+
3
+ // Auto-generated introspection registry data
4
+ // Generated at: 2026-04-10T05:00:52.540Z
5
+
6
+ setBuildTimeData('features.containerLink', {
7
+ "id": "features.containerLink",
8
+ "description": "ContainerLink (Web-side) — WebSocket client that connects to a node host. Connects to a ContainerLink host over WebSocket. The host can evaluate code in this container, and the web side can emit structured events to the host. The web side can NEVER eval code in the host — trust is strictly one-way.",
9
+ "shortcut": "features.containerLink",
10
+ "className": "ContainerLink",
11
+ "methods": {
12
+ "connect": {
13
+ "description": "Connect to the host WebSocket server and perform registration.",
14
+ "parameters": {
15
+ "hostUrl": {
16
+ "type": "string",
17
+ "description": "Override the configured host URL"
18
+ }
19
+ },
20
+ "required": [],
21
+ "returns": "Promise<this>"
22
+ },
23
+ "disconnect": {
24
+ "description": "Disconnect from the host.",
25
+ "parameters": {
26
+ "reason": {
27
+ "type": "string",
28
+ "description": "Optional reason string"
29
+ }
30
+ },
31
+ "required": [],
32
+ "returns": "void"
33
+ },
34
+ "emitToHost": {
35
+ "description": "Send a structured event to the host container.",
36
+ "parameters": {
37
+ "eventName": {
38
+ "type": "string",
39
+ "description": "Name of the event"
40
+ },
41
+ "data": {
42
+ "type": "any",
43
+ "description": "Optional event data"
44
+ }
45
+ },
46
+ "required": [
47
+ "eventName"
48
+ ],
49
+ "returns": "void"
50
+ }
51
+ },
52
+ "getters": {
53
+ "isConnected": {
54
+ "description": "Whether currently connected to the host.",
55
+ "returns": "boolean"
56
+ },
57
+ "token": {
58
+ "description": "The auth token received from the host.",
59
+ "returns": "string | undefined"
60
+ },
61
+ "hostId": {
62
+ "description": "The host container's UUID.",
63
+ "returns": "string | undefined"
64
+ }
65
+ },
66
+ "events": {
67
+ "connected": {
68
+ "name": "connected",
69
+ "description": "Event emitted by ContainerLink",
70
+ "arguments": {}
71
+ },
72
+ "disconnected": {
73
+ "name": "disconnected",
74
+ "description": "Event emitted by ContainerLink",
75
+ "arguments": {}
76
+ },
77
+ "evalRequest": {
78
+ "name": "evalRequest",
79
+ "description": "Event emitted by ContainerLink",
80
+ "arguments": {}
81
+ },
82
+ "reconnecting": {
83
+ "name": "reconnecting",
84
+ "description": "Event emitted by ContainerLink",
85
+ "arguments": {}
86
+ }
87
+ },
88
+ "state": {},
89
+ "options": {},
90
+ "envVars": [],
91
+ "examples": [
92
+ {
93
+ "language": "ts",
94
+ "code": "const link = container.feature('containerLink', {\n enable: true,\n hostUrl: 'ws://localhost:8089',\n})\nawait link.connect()\n\n// Send events to the host\nlink.emitToHost('click', { x: 100, y: 200 })\n\n// Listen for eval requests before they execute\nlink.on('evalRequest', (code, requestId) => {\n console.log('Host is evaluating:', code)\n})"
95
+ }
96
+ ]
97
+ });
98
+
99
+ setBuildTimeData('features.esbuild', {
100
+ "id": "features.esbuild",
101
+ "description": "Browser-side TypeScript/ESM compilation feature using esbuild-wasm. Loads esbuild's WebAssembly build via the AssetLoader, then provides `compile()` and `transform()` methods that work entirely in the browser. Useful for live playgrounds, in-browser REPLs, and client-side bundling.",
102
+ "shortcut": "features.esbuild",
103
+ "className": "Esbuild",
104
+ "methods": {
105
+ "compile": {
106
+ "description": "",
107
+ "parameters": {
108
+ "code": {
109
+ "type": "string",
110
+ "description": "Parameter code"
111
+ },
112
+ "options": {
113
+ "type": "esbuild.TransformOptions",
114
+ "description": "Parameter options"
115
+ }
116
+ },
117
+ "required": [
118
+ "code"
119
+ ],
120
+ "returns": "void"
121
+ },
122
+ "clearCache": {
123
+ "description": "",
124
+ "parameters": {},
125
+ "required": [],
126
+ "returns": "void"
127
+ },
128
+ "start": {
129
+ "description": "",
130
+ "parameters": {},
131
+ "required": [],
132
+ "returns": "void"
133
+ }
134
+ },
135
+ "getters": {
136
+ "assetLoader": {
137
+ "description": "Returns the assetLoader feature for loading external libraries from unpkg.",
138
+ "returns": "any"
139
+ }
140
+ },
141
+ "events": {},
142
+ "state": {},
143
+ "options": {},
144
+ "envVars": [],
145
+ "examples": [
146
+ {
147
+ "language": "ts",
148
+ "code": "const esbuild = container.feature('esbuild')\nawait esbuild.start()\nconst result = await esbuild.compile('const x: number = 1')\nconsole.log(result.code)"
149
+ }
150
+ ]
151
+ });
152
+
153
+ setBuildTimeData('features.voice', {
154
+ "id": "features.voice",
155
+ "description": "Speech-to-text recognition using the Web Speech API (SpeechRecognition). Wraps the browser's built-in speech recognition, supporting continuous listening, interim results, and language selection. Recognized text is accumulated in state and emitted as events for real-time transcription UIs.",
156
+ "shortcut": "features.voice",
157
+ "className": "VoiceRecognition",
158
+ "methods": {
159
+ "whenFinished": {
160
+ "description": "",
161
+ "parameters": {},
162
+ "required": [],
163
+ "returns": "void"
164
+ },
165
+ "start": {
166
+ "description": "",
167
+ "parameters": {},
168
+ "required": [],
169
+ "returns": "void"
170
+ },
171
+ "stop": {
172
+ "description": "",
173
+ "parameters": {},
174
+ "required": [],
175
+ "returns": "void"
176
+ },
177
+ "abort": {
178
+ "description": "",
179
+ "parameters": {},
180
+ "required": [],
181
+ "returns": "void"
182
+ },
183
+ "clearTranscript": {
184
+ "description": "",
185
+ "parameters": {},
186
+ "required": [],
187
+ "returns": "void"
188
+ }
189
+ },
190
+ "getters": {
191
+ "listening": {
192
+ "description": "Whether the speech recognizer is currently listening for audio input.",
193
+ "returns": "any"
194
+ },
195
+ "transcript": {
196
+ "description": "Returns the accumulated final transcript text from recognition results.",
197
+ "returns": "any"
198
+ }
199
+ },
200
+ "events": {
201
+ "start": {
202
+ "name": "start",
203
+ "description": "Event emitted by VoiceRecognition",
204
+ "arguments": {}
205
+ },
206
+ "stop": {
207
+ "name": "stop",
208
+ "description": "Event emitted by VoiceRecognition",
209
+ "arguments": {}
210
+ },
211
+ "abort": {
212
+ "name": "abort",
213
+ "description": "Event emitted by VoiceRecognition",
214
+ "arguments": {}
215
+ }
216
+ },
217
+ "state": {},
218
+ "options": {},
219
+ "envVars": [],
220
+ "examples": [
221
+ {
222
+ "language": "ts",
223
+ "code": "const voice = container.feature('voice', { continuous: true, autoListen: true })\n\nvoice.on('transcript', ({ text }) => {\n console.log('Heard:', text)\n})\n\n// Or start manually\nvoice.start()"
224
+ }
225
+ ]
226
+ });
227
+
228
+ setBuildTimeData('features.vm', {
229
+ "id": "features.vm",
230
+ "description": "Sandboxed JavaScript execution environment for the browser. Automatically injects the container's context object into the global scope, so evaluated code can use anything provided by the container. Useful for live code playgrounds, plugin systems, and dynamic script evaluation.",
231
+ "shortcut": "features.vm",
232
+ "className": "VM",
233
+ "methods": {
234
+ "createScript": {
235
+ "description": "",
236
+ "parameters": {
237
+ "code": {
238
+ "type": "string",
239
+ "description": "Parameter code"
240
+ }
241
+ },
242
+ "required": [
243
+ "code"
244
+ ],
245
+ "returns": "void"
246
+ },
247
+ "createContext": {
248
+ "description": "",
249
+ "parameters": {
250
+ "ctx": {
251
+ "type": "any",
252
+ "description": "Parameter ctx"
253
+ }
254
+ },
255
+ "required": [],
256
+ "returns": "void"
257
+ },
258
+ "run": {
259
+ "description": "",
260
+ "parameters": {
261
+ "code": {
262
+ "type": "string",
263
+ "description": "Parameter code"
264
+ },
265
+ "ctx": {
266
+ "type": "any",
267
+ "description": "Parameter ctx"
268
+ },
269
+ "options": {
270
+ "type": "any",
271
+ "description": "Parameter options"
272
+ }
273
+ },
274
+ "required": [
275
+ "code"
276
+ ],
277
+ "returns": "void"
278
+ }
279
+ },
280
+ "getters": {},
281
+ "events": {},
282
+ "state": {},
283
+ "options": {},
284
+ "envVars": [],
285
+ "examples": [
286
+ {
287
+ "language": "ts",
288
+ "code": "const vm = container.feature('vm')\nconst result = vm.run('1 + 2 + 3') // 6\nconst greeting = vm.run('container.uuid') // accesses container globals"
289
+ }
290
+ ]
291
+ });
292
+
293
+ setBuildTimeData('features.assetLoader', {
294
+ "id": "features.assetLoader",
295
+ "description": "Injects scripts and stylesheets into the page at runtime. Provides helpers for loading external libraries from unpkg.com, injecting arbitrary script/link tags, and managing load state. Used by other web features (e.g. Esbuild) to pull in dependencies on demand.",
296
+ "shortcut": "features.assetLoader",
297
+ "className": "AssetLoader",
298
+ "methods": {
299
+ "removeStylesheet": {
300
+ "description": "",
301
+ "parameters": {
302
+ "href": {
303
+ "type": "string",
304
+ "description": "Parameter href"
305
+ }
306
+ },
307
+ "required": [
308
+ "href"
309
+ ],
310
+ "returns": "void"
311
+ },
312
+ "loadScript": {
313
+ "description": "",
314
+ "parameters": {
315
+ "url": {
316
+ "type": "string",
317
+ "description": "Parameter url"
318
+ }
319
+ },
320
+ "required": [
321
+ "url"
322
+ ],
323
+ "returns": "Promise<void>"
324
+ },
325
+ "unpkg": {
326
+ "description": "",
327
+ "parameters": {
328
+ "packageName": {
329
+ "type": "string",
330
+ "description": "Parameter packageName"
331
+ },
332
+ "globalName": {
333
+ "type": "string",
334
+ "description": "Parameter globalName"
335
+ }
336
+ },
337
+ "required": [
338
+ "packageName",
339
+ "globalName"
340
+ ],
341
+ "returns": "Promise<any>"
342
+ }
343
+ },
344
+ "getters": {},
345
+ "events": {},
346
+ "state": {},
347
+ "options": {},
348
+ "envVars": [],
349
+ "examples": [
350
+ {
351
+ "language": "ts",
352
+ "code": "const loader = container.feature('assetLoader')\nawait loader.loadScript('https://unpkg.com/lodash')\nawait AssetLoader.loadStylesheet('https://unpkg.com/normalize.css')"
353
+ }
354
+ ]
355
+ });
356
+
357
+ setBuildTimeData('features.vault', {
358
+ "id": "features.vault",
359
+ "description": "AES-256-GCM encryption and decryption for the browser using the Web Crypto API. Generates or accepts a secret key and provides `encrypt()` / `decrypt()` methods that work entirely client-side. Keys are stored as base64-encoded state so they can persist across sessions when needed.",
360
+ "shortcut": "features.vault",
361
+ "className": "WebVault",
362
+ "methods": {
363
+ "secret": {
364
+ "description": "",
365
+ "parameters": {
366
+ "{ refresh = false, set = true }": {
367
+ "type": "any",
368
+ "description": "Parameter { refresh = false, set = true }"
369
+ }
370
+ },
371
+ "required": [],
372
+ "returns": "Promise<ArrayBuffer>"
373
+ },
374
+ "decrypt": {
375
+ "description": "",
376
+ "parameters": {
377
+ "payload": {
378
+ "type": "string",
379
+ "description": "Parameter payload"
380
+ }
381
+ },
382
+ "required": [
383
+ "payload"
384
+ ],
385
+ "returns": "void"
386
+ },
387
+ "encrypt": {
388
+ "description": "",
389
+ "parameters": {
390
+ "payload": {
391
+ "type": "string",
392
+ "description": "Parameter payload"
393
+ }
394
+ },
395
+ "required": [
396
+ "payload"
397
+ ],
398
+ "returns": "void"
399
+ }
400
+ },
401
+ "getters": {},
402
+ "events": {},
403
+ "state": {},
404
+ "options": {},
405
+ "envVars": [],
406
+ "examples": [
407
+ {
408
+ "language": "ts",
409
+ "code": "const vault = container.feature('vault')\nconst encrypted = await vault.encrypt('secret data')\nconst decrypted = await vault.decrypt(encrypted)\nconsole.log(decrypted) // 'secret data'"
410
+ }
411
+ ]
412
+ });
413
+
414
+ setBuildTimeData('features.network', {
415
+ "id": "features.network",
416
+ "description": "Tracks browser online/offline connectivity state. Listens for the browser's `online` and `offline` events and keeps the feature state in sync. Other features can observe the `offline` state value or listen for change events to react to connectivity changes.",
417
+ "shortcut": "features.network",
418
+ "className": "Network",
419
+ "methods": {
420
+ "start": {
421
+ "description": "",
422
+ "parameters": {},
423
+ "required": [],
424
+ "returns": "void"
425
+ },
426
+ "disable": {
427
+ "description": "",
428
+ "parameters": {},
429
+ "required": [],
430
+ "returns": "void"
431
+ }
432
+ },
433
+ "getters": {
434
+ "isOffline": {
435
+ "description": "Whether the browser is currently offline.",
436
+ "returns": "any"
437
+ },
438
+ "isOnline": {
439
+ "description": "Whether the browser is currently online.",
440
+ "returns": "any"
441
+ }
442
+ },
443
+ "events": {},
444
+ "state": {},
445
+ "options": {},
446
+ "envVars": [],
447
+ "examples": [
448
+ {
449
+ "language": "ts",
450
+ "code": "const network = container.feature('network')\nconsole.log(network.state.get('offline')) // false when online\n\nnetwork.on('stateChanged', ({ offline }) => {\n console.log(offline ? 'Went offline' : 'Back online')\n})"
451
+ }
452
+ ]
453
+ });
454
+
455
+ setBuildTimeData('features.speech', {
456
+ "id": "features.speech",
457
+ "description": "Text-to-speech synthesis using the Web Speech API (SpeechSynthesis). Wraps the browser's built-in speech synthesis, providing voice selection, queue management, and state tracking. Voices are discovered on init and exposed via state for UI binding.",
458
+ "shortcut": "features.speech",
459
+ "className": "Speech",
460
+ "methods": {
461
+ "loadVoices": {
462
+ "description": "",
463
+ "parameters": {},
464
+ "required": [],
465
+ "returns": "void"
466
+ },
467
+ "setDefaultVoice": {
468
+ "description": "",
469
+ "parameters": {
470
+ "name": {
471
+ "type": "string",
472
+ "description": "Parameter name"
473
+ }
474
+ },
475
+ "required": [
476
+ "name"
477
+ ],
478
+ "returns": "void"
479
+ },
480
+ "cancel": {
481
+ "description": "",
482
+ "parameters": {},
483
+ "required": [],
484
+ "returns": "void"
485
+ },
486
+ "say": {
487
+ "description": "",
488
+ "parameters": {
489
+ "text": {
490
+ "type": "string",
491
+ "description": "Parameter text"
492
+ },
493
+ "options": {
494
+ "type": "{ voice?: Voice }",
495
+ "description": "Parameter options"
496
+ }
497
+ },
498
+ "required": [
499
+ "text"
500
+ ],
501
+ "returns": "void"
502
+ }
503
+ },
504
+ "getters": {
505
+ "voices": {
506
+ "description": "Returns the array of available speech synthesis voices.",
507
+ "returns": "any"
508
+ },
509
+ "defaultVoice": {
510
+ "description": "Returns the Voice object matching the currently selected default voice name.",
511
+ "returns": "any"
512
+ }
513
+ },
514
+ "events": {},
515
+ "state": {},
516
+ "options": {},
517
+ "envVars": [],
518
+ "examples": [
519
+ {
520
+ "language": "ts",
521
+ "code": "const speech = container.feature('speech')\nspeech.say('Hello from the browser!')\n\n// Choose a specific voice\nconst speech = container.feature('speech', { voice: 'Google UK English Female' })\nspeech.say('Cheerio!')"
522
+ }
523
+ ],
524
+ "types": {
525
+ "Voice": {
526
+ "description": "",
527
+ "properties": {
528
+ "voiceURI": {
529
+ "type": "string",
530
+ "description": ""
531
+ },
532
+ "name": {
533
+ "type": "string",
534
+ "description": ""
535
+ },
536
+ "lang": {
537
+ "type": "string",
538
+ "description": ""
539
+ },
540
+ "localService": {
541
+ "type": "boolean",
542
+ "description": ""
543
+ },
544
+ "default": {
545
+ "type": "boolean",
546
+ "description": ""
547
+ }
548
+ }
549
+ }
550
+ }
551
+ });
552
+
553
+ setBuildTimeData('features.helpers', {
554
+ "id": "features.helpers",
555
+ "description": "The Helpers feature discovers and loads project-level helpers from a JSON manifest served over HTTP. Scripts are injected via AssetLoader and self-register into the container's registries. This is the web equivalent of the node Helpers feature, which scans the filesystem. Instead of filesystem scanning, this feature fetches a manifest from a well-known URL and uses AssetLoader.loadScript() to inject each helper's script tag.",
556
+ "shortcut": "features.helpers",
557
+ "className": "Helpers",
558
+ "methods": {
559
+ "setManifestURL": {
560
+ "description": "Set a new manifest URL. Invalidates any cached manifest.",
561
+ "parameters": {
562
+ "url": {
563
+ "type": "string",
564
+ "description": "The new URL to fetch the manifest from"
565
+ }
566
+ },
567
+ "required": [
568
+ "url"
569
+ ],
570
+ "returns": "void"
571
+ },
572
+ "discover": {
573
+ "description": "Discover and register helpers of the given type from the manifest. Fetches the manifest, then for each entry of the requested type, loads the script via AssetLoader and checks what got newly registered.",
574
+ "parameters": {
575
+ "type": {
576
+ "type": "RegistryType",
577
+ "description": "Which type of helpers to discover ('features' or 'clients')"
578
+ }
579
+ },
580
+ "required": [
581
+ "type"
582
+ ],
583
+ "returns": "Promise<string[]>"
584
+ },
585
+ "discoverAll": {
586
+ "description": "Discover all helper types from the manifest.",
587
+ "parameters": {},
588
+ "required": [],
589
+ "returns": "Promise<Record<string, string[]>>"
590
+ },
591
+ "discoverFeatures": {
592
+ "description": "Convenience method to discover only features.",
593
+ "parameters": {},
594
+ "required": [],
595
+ "returns": "Promise<string[]>"
596
+ },
597
+ "discoverClients": {
598
+ "description": "Convenience method to discover only clients.",
599
+ "parameters": {},
600
+ "required": [],
601
+ "returns": "Promise<string[]>"
602
+ },
603
+ "lookup": {
604
+ "description": "Look up a helper class by type and name.",
605
+ "parameters": {
606
+ "type": {
607
+ "type": "RegistryType",
608
+ "description": "The registry type"
609
+ },
610
+ "name": {
611
+ "type": "string",
612
+ "description": "The helper name within that registry"
613
+ }
614
+ },
615
+ "required": [
616
+ "type",
617
+ "name"
618
+ ],
619
+ "returns": "any"
620
+ },
621
+ "describe": {
622
+ "description": "Get the introspection description for a specific helper.",
623
+ "parameters": {
624
+ "type": {
625
+ "type": "RegistryType",
626
+ "description": "The registry type"
627
+ },
628
+ "name": {
629
+ "type": "string",
630
+ "description": "The helper name"
631
+ }
632
+ },
633
+ "required": [
634
+ "type",
635
+ "name"
636
+ ],
637
+ "returns": "string"
638
+ }
639
+ },
640
+ "getters": {
641
+ "manifestURL": {
642
+ "description": "The URL to fetch the helpers manifest from.",
643
+ "returns": "string"
644
+ },
645
+ "available": {
646
+ "description": "Returns a unified view of all available helpers across all registries. Each key is a registry type, each value is the list of helper names in that registry.",
647
+ "returns": "Record<string, string[]>"
648
+ }
649
+ },
650
+ "events": {},
651
+ "state": {},
652
+ "options": {},
653
+ "envVars": [],
654
+ "examples": [
655
+ {
656
+ "language": "ts",
657
+ "code": "const helpers = container.feature('helpers', { enable: true })\n\n// Discover all helper types from the manifest\nawait helpers.discoverAll()\n\n// Discover a specific type\nawait helpers.discover('features')\n\n// Unified view of all available helpers\nconsole.log(helpers.available)"
658
+ }
659
+ ]
660
+ });
661
+
662
+ // Container introspection data
663
+ setContainerBuildTimeData('Container', {
664
+ "className": "Container",
665
+ "description": "The Container is the core runtime object in Luca. It is a singleton per process that acts as an event bus, state machine, and dependency injector. It holds registries of helpers (features, clients, servers, commands, endpoints) and provides factory methods to create instances from them. All helper instances share the container's context, enabling them to communicate and coordinate. The container detects its runtime environment (Node, Bun, browser, Electron) and can load platform-specific feature implementations accordingly. Use `container.feature('name')` to create feature instances, `container.use(Plugin)` to extend the container with new capabilities, and `container.on('event', handler)` to react to lifecycle events.",
666
+ "methods": {
667
+ "subcontainer": {
668
+ "description": "Creates a new subcontainer instance of the same concrete Container subclass. The new instance is constructed with the same options as this container, shallow-merged with any overrides you provide. This preserves the runtime container type (e.g. NodeContainer, AGIContainer, etc.).",
669
+ "parameters": {
670
+ "this": {
671
+ "type": "This",
672
+ "description": "Parameter this"
673
+ },
674
+ "options": {
675
+ "type": "ConstructorParameters<This['constructor']>[0]",
676
+ "description": "Options to override for the new container instance"
677
+ }
678
+ },
679
+ "required": [
680
+ "this",
681
+ "options"
682
+ ],
683
+ "returns": "This",
684
+ "examples": [
685
+ {
686
+ "language": "ts",
687
+ "code": "const child = container.subcontainer({ cwd: '/tmp/workspace' })\nchild.cwd // '/tmp/workspace'"
688
+ }
689
+ ]
690
+ },
691
+ "addContext": {
692
+ "description": "Add a value to the container's shared context, which is passed to all helper instances. Accepts either a key and value, or an object of key-value pairs to merge in.",
693
+ "parameters": {
694
+ "keyOrContext": {
695
+ "type": "keyof ContainerContext | Partial<ContainerContext>",
696
+ "description": "Parameter keyOrContext"
697
+ },
698
+ "value": {
699
+ "type": "ContainerContext[keyof ContainerContext]",
700
+ "description": "The context value (omit when passing an object)"
701
+ }
702
+ },
703
+ "required": [
704
+ "keyOrContext"
705
+ ],
706
+ "returns": "this",
707
+ "examples": [
708
+ {
709
+ "language": "ts",
710
+ "code": "container.addContext('db', dbConnection)\ncontainer.addContext({ db: dbConnection, cache: redisClient })"
711
+ }
712
+ ]
713
+ },
714
+ "setState": {
715
+ "description": "Sets the state of the container. Accepts a partial state object to merge, or a function that receives the current state and returns the new state.",
716
+ "parameters": {
717
+ "newState": {
718
+ "type": "SetStateValue<ContainerState>",
719
+ "description": "A partial state object to merge, or a function `(current) => newState`"
720
+ }
721
+ },
722
+ "required": [
723
+ "newState"
724
+ ],
725
+ "returns": "this",
726
+ "examples": [
727
+ {
728
+ "language": "ts",
729
+ "code": "container.setState({ started: true })\ncontainer.setState((prev) => ({ ...prev, started: true }))"
730
+ }
731
+ ]
732
+ },
733
+ "bus": {
734
+ "description": "Create a new standalone event bus instance. Useful when you need a scoped event channel that is independent of the container's own event bus.",
735
+ "parameters": {},
736
+ "required": [],
737
+ "returns": "Bus",
738
+ "examples": [
739
+ {
740
+ "language": "ts",
741
+ "code": "const myBus = container.bus()\nmyBus.on('data', (payload) => console.log(payload))\nmyBus.emit('data', { count: 42 })"
742
+ }
743
+ ]
744
+ },
745
+ "newState": {
746
+ "description": "Create a new standalone observable State object. Useful when you need reactive state that is independent of the container's own state.",
747
+ "parameters": {
748
+ "initialState": {
749
+ "type": "T",
750
+ "description": "The initial state object (defaults to empty)"
751
+ }
752
+ },
753
+ "required": [],
754
+ "returns": "State<T>",
755
+ "examples": [
756
+ {
757
+ "language": "ts",
758
+ "code": "const myState = container.newState({ count: 0, loading: false })\nmyState.observe(() => console.log('Changed:', myState.current))\nmyState.set('count', 1)"
759
+ }
760
+ ]
761
+ },
762
+ "feature": {
763
+ "description": "Creates a new instance of a feature. If you pass the same arguments, it will return the same instance as last time you created that. If you need the ability to create fresh instances, it is up to you how you define your options to support that.",
764
+ "parameters": {
765
+ "id": {
766
+ "type": "T",
767
+ "description": "The id of the feature to create."
768
+ },
769
+ "options": {
770
+ "type": "FeatureInputOptions<Features>[T] | Record<string, unknown>",
771
+ "description": "The options to pass to the feature constructor."
772
+ }
773
+ },
774
+ "required": [
775
+ "id"
776
+ ],
777
+ "returns": "InstanceType<Features[T]>"
778
+ },
779
+ "entity": {
780
+ "description": "Creates a lightweight entity object with observable state, a typed event bus, and access to the container. Same id + options always returns the same cached base instance. An optional third argument auto-extends the entity with functions and getters. All extended methods and getters can access the entity (state, options, container, on/off/emit, etc.) via `this`.",
781
+ "parameters": {
782
+ "id": {
783
+ "type": "string",
784
+ "description": "Stable identifier for this entity (included in cache key)"
785
+ },
786
+ "options": {
787
+ "type": "TOptions",
788
+ "description": "Arbitrary options stored on `entity.options` (included in cache key)"
789
+ },
790
+ "extensions": {
791
+ "type": "Ext & ThisType<Entity<TState, TOptions, TEvents> & Ext>",
792
+ "description": "Optional object of functions/getters to graft onto the entity"
793
+ }
794
+ },
795
+ "required": [
796
+ "id"
797
+ ],
798
+ "returns": "Entity<TState, TOptions, TEvents> & Ext",
799
+ "examples": [
800
+ {
801
+ "language": "ts",
802
+ "code": "// Basic entity with typed state and events\nconst counter = container.entity<{ count: number }>('counter')\ncounter.setState({ count: 0 })\ncounter.on('tick', () => counter.setState(s => ({ count: s.count + 1 })))\n\n// With options and auto-extension\nconst user = container.entity('user:42', { name: 'Alice' }, {\n greet() { return `Hello ${this.options.name}` },\n get label() { return `User: ${this.options.name}` },\n})\nuser.greet() // \"Hello Alice\""
803
+ }
804
+ ]
805
+ },
806
+ "getHelperByUUID": {
807
+ "description": "Look up any helper instance (feature, client, server) by its UUID. Returns undefined if the UUID is unknown or the instance was never created.",
808
+ "parameters": {
809
+ "uuid": {
810
+ "type": "string",
811
+ "description": "The `instance.uuid` value assigned at construction time"
812
+ }
813
+ },
814
+ "required": [
815
+ "uuid"
816
+ ],
817
+ "returns": "Helper | undefined",
818
+ "examples": [
819
+ {
820
+ "language": "ts",
821
+ "code": "const assistant = container.feature('assistant')\nconst { uuid } = assistant\n// ... later ...\nconst same = container.getHelperByUUID(uuid) // === assistant"
822
+ }
823
+ ]
824
+ },
825
+ "start": {
826
+ "description": "Start the container. Emits the 'started' event and sets `state.started` to true. Plugins and features can listen for this event to perform initialization.",
827
+ "parameters": {},
828
+ "required": [],
829
+ "returns": "Promise<this>",
830
+ "examples": [
831
+ {
832
+ "language": "ts",
833
+ "code": "container.on('started', () => console.log('Ready'))\nawait container.start()"
834
+ }
835
+ ]
836
+ },
837
+ "emit": {
838
+ "description": "Emit an event on the container's event bus.",
839
+ "parameters": {
840
+ "event": {
841
+ "type": "string",
842
+ "description": "The event name"
843
+ },
844
+ "args": {
845
+ "type": "any[]",
846
+ "description": "Arguments to pass to listeners"
847
+ }
848
+ },
849
+ "required": [
850
+ "event",
851
+ "args"
852
+ ],
853
+ "returns": "this",
854
+ "examples": [
855
+ {
856
+ "language": "ts",
857
+ "code": "container.emit('taskCompleted', { id: 'abc', result: 42 })"
858
+ }
859
+ ]
860
+ },
861
+ "on": {
862
+ "description": "Subscribe to an event on the container's event bus.",
863
+ "parameters": {
864
+ "event": {
865
+ "type": "string",
866
+ "description": "The event name"
867
+ },
868
+ "listener": {
869
+ "type": "(...args: any[]) => void",
870
+ "description": "The callback function"
871
+ }
872
+ },
873
+ "required": [
874
+ "event",
875
+ "listener"
876
+ ],
877
+ "returns": "this",
878
+ "examples": [
879
+ {
880
+ "language": "ts",
881
+ "code": "container.on('featureEnabled', (id, feature) => {\n console.log(`Feature ${id} enabled`)\n})"
882
+ }
883
+ ]
884
+ },
885
+ "off": {
886
+ "description": "Unsubscribe a listener from an event on the container's event bus.",
887
+ "parameters": {
888
+ "event": {
889
+ "type": "string",
890
+ "description": "The event name"
891
+ },
892
+ "listener": {
893
+ "type": "(...args: any[]) => void",
894
+ "description": "The listener to remove"
895
+ }
896
+ },
897
+ "required": [
898
+ "event"
899
+ ],
900
+ "returns": "this"
901
+ },
902
+ "once": {
903
+ "description": "Subscribe to an event on the container's event bus, but only fire once.",
904
+ "parameters": {
905
+ "event": {
906
+ "type": "string",
907
+ "description": "The event name"
908
+ },
909
+ "listener": {
910
+ "type": "(...args: any[]) => void",
911
+ "description": "The callback function (invoked at most once)"
912
+ }
913
+ },
914
+ "required": [
915
+ "event",
916
+ "listener"
917
+ ],
918
+ "returns": "this"
919
+ },
920
+ "waitFor": {
921
+ "description": "Returns a promise that resolves the next time the given event is emitted. Useful for awaiting one-time lifecycle transitions.",
922
+ "parameters": {
923
+ "event": {
924
+ "type": "string",
925
+ "description": "The event name to wait for"
926
+ }
927
+ },
928
+ "required": [
929
+ "event"
930
+ ],
931
+ "returns": "Promise<any>",
932
+ "examples": [
933
+ {
934
+ "language": "ts",
935
+ "code": "await container.waitFor('started')\nconsole.log('Container is ready')"
936
+ }
937
+ ]
938
+ },
939
+ "introspect": {
940
+ "description": "Returns a full introspection object for this container, merging build-time AST data (JSDoc descriptions, methods, getters) with runtime data (registries, factories, state, environment).",
941
+ "parameters": {},
942
+ "required": [],
943
+ "returns": "ContainerIntrospection",
944
+ "examples": [
945
+ {
946
+ "language": "ts",
947
+ "code": "const info = container.introspect()\nconsole.log(info.methods) // all public methods with descriptions\nconsole.log(info.getters) // all getters with return types\nconsole.log(info.registries) // features, clients, servers, etc."
948
+ }
949
+ ]
950
+ },
951
+ "introspectAsText": {
952
+ "description": "Returns a human-readable markdown representation of this container's introspection data. Useful in REPLs, AI agent contexts, or documentation generation. Pass a section name to render only that section (e.g. 'methods', 'getters', 'events', 'state').",
953
+ "parameters": {
954
+ "sectionOrDepth": {
955
+ "type": "IntrospectionSection | number",
956
+ "description": "A section name to render, or heading depth number"
957
+ },
958
+ "startHeadingDepth": {
959
+ "type": "number",
960
+ "description": "Starting markdown heading depth (default 1)"
961
+ }
962
+ },
963
+ "required": [],
964
+ "returns": "string",
965
+ "examples": [
966
+ {
967
+ "language": "ts",
968
+ "code": "console.log(container.introspectAsText()) // full description\nconsole.log(container.introspectAsText('methods')) // just methods"
969
+ }
970
+ ]
971
+ },
972
+ "introspectAsJSON": {
973
+ "description": "Returns JSON introspection data.",
974
+ "parameters": {},
975
+ "required": [],
976
+ "returns": "ContainerIntrospection"
977
+ },
978
+ "introspectAsType": {
979
+ "description": "Returns the container's introspection data formatted as a TypeScript interface declaration. Includes the container's own methods, getters, factories, and registered helper types.",
980
+ "parameters": {},
981
+ "required": [],
982
+ "returns": "string",
983
+ "examples": [
984
+ {
985
+ "language": "ts",
986
+ "code": "console.log(container.introspectAsType())\n// interface NodeContainer {\n// feature<T>(id: string, options?: object): T;\n// readonly uuid: string;\n// ...\n// }"
987
+ }
988
+ ]
989
+ },
990
+ "sleep": {
991
+ "description": "Sleep for the specified number of milliseconds. Useful for scripting and sequencing.",
992
+ "parameters": {
993
+ "ms": {
994
+ "type": "number",
995
+ "description": "Parameter ms"
996
+ }
997
+ },
998
+ "required": [],
999
+ "returns": "Promise<this>"
1000
+ },
1001
+ "use": {
1002
+ "description": "Apply a plugin or enable a feature by string name. Plugins are classes with a static `attach(container)` method that extend the container with new registries, factories, or capabilities.",
1003
+ "parameters": {
1004
+ "plugin": {
1005
+ "type": "Extension<T>",
1006
+ "description": "A feature name string, or a class/object with a static attach method"
1007
+ },
1008
+ "options": {
1009
+ "type": "any",
1010
+ "description": "Options to pass to the plugin's attach method"
1011
+ }
1012
+ },
1013
+ "required": [
1014
+ "plugin"
1015
+ ],
1016
+ "returns": "this & T",
1017
+ "examples": [
1018
+ {
1019
+ "language": "ts",
1020
+ "code": "// Enable a feature by name\ncontainer.use('contentDb')\n\n// Attach a plugin class (e.g. Client, Server, or custom)\ncontainer.use(Client) // registers the clients registry + client() factory\ncontainer.use(Server) // registers the servers registry + server() factory"
1021
+ }
1022
+ ]
1023
+ }
1024
+ },
1025
+ "getters": {
1026
+ "state": {
1027
+ "description": "The observable state object for this container instance.",
1028
+ "returns": "State<ContainerState>"
1029
+ },
1030
+ "enabledFeatureIds": {
1031
+ "description": "Returns the list of shortcut IDs for all currently enabled features.",
1032
+ "returns": "string[]"
1033
+ },
1034
+ "enabledFeatures": {
1035
+ "description": "Returns a map of enabled feature shortcut IDs to their instances.",
1036
+ "returns": "Partial<AvailableInstanceTypes<Features>>"
1037
+ },
1038
+ "utils": {
1039
+ "description": "Common utilities available on every container. Provides UUID generation, object hashing, string case conversion, and lodash helpers — no imports needed. - `utils.uuid()` — generate a v4 UUID - `utils.hashObject(obj)` — deterministic hash of any object - `utils.stringUtils` — `{ kebabCase, camelCase, upperFirst, lowerFirst, pluralize, singularize }` - `utils.lodash` — `{ uniq, keyBy, uniqBy, groupBy, debounce, throttle, mapValues, mapKeys, pick, get, set, omit }`",
1040
+ "returns": "ContainerUtils",
1041
+ "examples": [
1042
+ {
1043
+ "language": "ts",
1044
+ "code": "const id = container.utils.uuid()\nconst hash = container.utils.hashObject({ foo: 'bar' })\nconst name = container.utils.stringUtils.camelCase('my-feature')\nconst unique = container.utils.lodash.uniq([1, 2, 2, 3])"
1045
+ }
1046
+ ]
1047
+ },
1048
+ "context": {
1049
+ "description": "The Container's context is an object that contains the enabled features, the container itself, and any additional context that has been added to the container. All helper instances that are created by the container will have access to the shared context.",
1050
+ "returns": "ContainerContext<Features> & Partial<AvailableInstanceTypes<AvailableFeatures>>"
1051
+ },
1052
+ "currentState": {
1053
+ "description": "The current state of the container. This is a snapshot of the container's state at the time this method is called.",
1054
+ "returns": "ContainerState"
1055
+ },
1056
+ "features": {
1057
+ "description": "The features registry. Use it to check what features are available, look up feature classes, or check if a feature is registered.",
1058
+ "returns": "FeaturesRegistry",
1059
+ "examples": [
1060
+ {
1061
+ "language": "ts",
1062
+ "code": "container.features.available // ['fs', 'git', 'grep', ...]\ncontainer.features.has('fs') // true\ncontainer.features.lookup('fs') // FS class"
1063
+ }
1064
+ ]
1065
+ },
1066
+ "isBrowser": {
1067
+ "description": "Returns true if the container is running in a browser.",
1068
+ "returns": "boolean"
1069
+ },
1070
+ "isBun": {
1071
+ "description": "Returns true if the container is running in Bun.",
1072
+ "returns": "boolean"
1073
+ },
1074
+ "isNode": {
1075
+ "description": "Returns true if the container is running in Node.",
1076
+ "returns": "boolean"
1077
+ },
1078
+ "isElectron": {
1079
+ "description": "Returns true if the container is running in Electron.",
1080
+ "returns": "boolean"
1081
+ },
1082
+ "isDevelopment": {
1083
+ "description": "Returns true if the container is running in development mode.",
1084
+ "returns": "boolean"
1085
+ },
1086
+ "isProduction": {
1087
+ "description": "Returns true if the container is running in production mode.",
1088
+ "returns": "boolean"
1089
+ },
1090
+ "isCI": {
1091
+ "description": "Returns true if the container is running in a CI environment.",
1092
+ "returns": "boolean"
1093
+ },
1094
+ "registryNames": {
1095
+ "description": "Returns the names of all attached registries (e.g. [\"features\", \"clients\", \"servers\"]).",
1096
+ "returns": "string[]"
1097
+ },
1098
+ "factoryNames": {
1099
+ "description": "Returns the names of all available factory methods (e.g. [\"feature\", \"client\", \"server\"]).",
1100
+ "returns": "string[]"
1101
+ }
1102
+ },
1103
+ "events": {
1104
+ "started": {
1105
+ "name": "started",
1106
+ "description": "Event emitted by Container",
1107
+ "arguments": {}
1108
+ }
1109
+ }
1110
+ });
1111
+
1112
+ setContainerBuildTimeData('WebContainer', {
1113
+ "className": "WebContainer",
1114
+ "description": "Browser-specific container that extends the base Container with web client support and browser-specific features like speech, voice recognition, and asset loading.",
1115
+ "methods": {},
1116
+ "getters": {
1117
+ "Client": {
1118
+ "description": "Returns the base Client class for creating custom clients.",
1119
+ "returns": "any"
1120
+ },
1121
+ "SocketClient": {
1122
+ "description": "Returns the SocketClient class for WebSocket connections.",
1123
+ "returns": "any"
1124
+ },
1125
+ "RestClient": {
1126
+ "description": "Returns the RestClient class for HTTP REST API connections.",
1127
+ "returns": "any"
1128
+ }
1129
+ },
1130
+ "events": {}
1131
+ });
1132
+ export const introspectionData = [
1133
+ {
1134
+ "id": "features.containerLink",
1135
+ "description": "ContainerLink (Web-side) — WebSocket client that connects to a node host. Connects to a ContainerLink host over WebSocket. The host can evaluate code in this container, and the web side can emit structured events to the host. The web side can NEVER eval code in the host — trust is strictly one-way.",
1136
+ "shortcut": "features.containerLink",
1137
+ "className": "ContainerLink",
1138
+ "methods": {
1139
+ "connect": {
1140
+ "description": "Connect to the host WebSocket server and perform registration.",
1141
+ "parameters": {
1142
+ "hostUrl": {
1143
+ "type": "string",
1144
+ "description": "Override the configured host URL"
1145
+ }
1146
+ },
1147
+ "required": [],
1148
+ "returns": "Promise<this>"
1149
+ },
1150
+ "disconnect": {
1151
+ "description": "Disconnect from the host.",
1152
+ "parameters": {
1153
+ "reason": {
1154
+ "type": "string",
1155
+ "description": "Optional reason string"
1156
+ }
1157
+ },
1158
+ "required": [],
1159
+ "returns": "void"
1160
+ },
1161
+ "emitToHost": {
1162
+ "description": "Send a structured event to the host container.",
1163
+ "parameters": {
1164
+ "eventName": {
1165
+ "type": "string",
1166
+ "description": "Name of the event"
1167
+ },
1168
+ "data": {
1169
+ "type": "any",
1170
+ "description": "Optional event data"
1171
+ }
1172
+ },
1173
+ "required": [
1174
+ "eventName"
1175
+ ],
1176
+ "returns": "void"
1177
+ }
1178
+ },
1179
+ "getters": {
1180
+ "isConnected": {
1181
+ "description": "Whether currently connected to the host.",
1182
+ "returns": "boolean"
1183
+ },
1184
+ "token": {
1185
+ "description": "The auth token received from the host.",
1186
+ "returns": "string | undefined"
1187
+ },
1188
+ "hostId": {
1189
+ "description": "The host container's UUID.",
1190
+ "returns": "string | undefined"
1191
+ }
1192
+ },
1193
+ "events": {
1194
+ "connected": {
1195
+ "name": "connected",
1196
+ "description": "Event emitted by ContainerLink",
1197
+ "arguments": {}
1198
+ },
1199
+ "disconnected": {
1200
+ "name": "disconnected",
1201
+ "description": "Event emitted by ContainerLink",
1202
+ "arguments": {}
1203
+ },
1204
+ "evalRequest": {
1205
+ "name": "evalRequest",
1206
+ "description": "Event emitted by ContainerLink",
1207
+ "arguments": {}
1208
+ },
1209
+ "reconnecting": {
1210
+ "name": "reconnecting",
1211
+ "description": "Event emitted by ContainerLink",
1212
+ "arguments": {}
1213
+ }
1214
+ },
1215
+ "state": {},
1216
+ "options": {},
1217
+ "envVars": [],
1218
+ "examples": [
1219
+ {
1220
+ "language": "ts",
1221
+ "code": "const link = container.feature('containerLink', {\n enable: true,\n hostUrl: 'ws://localhost:8089',\n})\nawait link.connect()\n\n// Send events to the host\nlink.emitToHost('click', { x: 100, y: 200 })\n\n// Listen for eval requests before they execute\nlink.on('evalRequest', (code, requestId) => {\n console.log('Host is evaluating:', code)\n})"
1222
+ }
1223
+ ]
1224
+ },
1225
+ {
1226
+ "id": "features.esbuild",
1227
+ "description": "Browser-side TypeScript/ESM compilation feature using esbuild-wasm. Loads esbuild's WebAssembly build via the AssetLoader, then provides `compile()` and `transform()` methods that work entirely in the browser. Useful for live playgrounds, in-browser REPLs, and client-side bundling.",
1228
+ "shortcut": "features.esbuild",
1229
+ "className": "Esbuild",
1230
+ "methods": {
1231
+ "compile": {
1232
+ "description": "",
1233
+ "parameters": {
1234
+ "code": {
1235
+ "type": "string",
1236
+ "description": "Parameter code"
1237
+ },
1238
+ "options": {
1239
+ "type": "esbuild.TransformOptions",
1240
+ "description": "Parameter options"
1241
+ }
1242
+ },
1243
+ "required": [
1244
+ "code"
1245
+ ],
1246
+ "returns": "void"
1247
+ },
1248
+ "clearCache": {
1249
+ "description": "",
1250
+ "parameters": {},
1251
+ "required": [],
1252
+ "returns": "void"
1253
+ },
1254
+ "start": {
1255
+ "description": "",
1256
+ "parameters": {},
1257
+ "required": [],
1258
+ "returns": "void"
1259
+ }
1260
+ },
1261
+ "getters": {
1262
+ "assetLoader": {
1263
+ "description": "Returns the assetLoader feature for loading external libraries from unpkg.",
1264
+ "returns": "any"
1265
+ }
1266
+ },
1267
+ "events": {},
1268
+ "state": {},
1269
+ "options": {},
1270
+ "envVars": [],
1271
+ "examples": [
1272
+ {
1273
+ "language": "ts",
1274
+ "code": "const esbuild = container.feature('esbuild')\nawait esbuild.start()\nconst result = await esbuild.compile('const x: number = 1')\nconsole.log(result.code)"
1275
+ }
1276
+ ]
1277
+ },
1278
+ {
1279
+ "id": "features.voice",
1280
+ "description": "Speech-to-text recognition using the Web Speech API (SpeechRecognition). Wraps the browser's built-in speech recognition, supporting continuous listening, interim results, and language selection. Recognized text is accumulated in state and emitted as events for real-time transcription UIs.",
1281
+ "shortcut": "features.voice",
1282
+ "className": "VoiceRecognition",
1283
+ "methods": {
1284
+ "whenFinished": {
1285
+ "description": "",
1286
+ "parameters": {},
1287
+ "required": [],
1288
+ "returns": "void"
1289
+ },
1290
+ "start": {
1291
+ "description": "",
1292
+ "parameters": {},
1293
+ "required": [],
1294
+ "returns": "void"
1295
+ },
1296
+ "stop": {
1297
+ "description": "",
1298
+ "parameters": {},
1299
+ "required": [],
1300
+ "returns": "void"
1301
+ },
1302
+ "abort": {
1303
+ "description": "",
1304
+ "parameters": {},
1305
+ "required": [],
1306
+ "returns": "void"
1307
+ },
1308
+ "clearTranscript": {
1309
+ "description": "",
1310
+ "parameters": {},
1311
+ "required": [],
1312
+ "returns": "void"
1313
+ }
1314
+ },
1315
+ "getters": {
1316
+ "listening": {
1317
+ "description": "Whether the speech recognizer is currently listening for audio input.",
1318
+ "returns": "any"
1319
+ },
1320
+ "transcript": {
1321
+ "description": "Returns the accumulated final transcript text from recognition results.",
1322
+ "returns": "any"
1323
+ }
1324
+ },
1325
+ "events": {
1326
+ "start": {
1327
+ "name": "start",
1328
+ "description": "Event emitted by VoiceRecognition",
1329
+ "arguments": {}
1330
+ },
1331
+ "stop": {
1332
+ "name": "stop",
1333
+ "description": "Event emitted by VoiceRecognition",
1334
+ "arguments": {}
1335
+ },
1336
+ "abort": {
1337
+ "name": "abort",
1338
+ "description": "Event emitted by VoiceRecognition",
1339
+ "arguments": {}
1340
+ }
1341
+ },
1342
+ "state": {},
1343
+ "options": {},
1344
+ "envVars": [],
1345
+ "examples": [
1346
+ {
1347
+ "language": "ts",
1348
+ "code": "const voice = container.feature('voice', { continuous: true, autoListen: true })\n\nvoice.on('transcript', ({ text }) => {\n console.log('Heard:', text)\n})\n\n// Or start manually\nvoice.start()"
1349
+ }
1350
+ ]
1351
+ },
1352
+ {
1353
+ "id": "features.vm",
1354
+ "description": "Sandboxed JavaScript execution environment for the browser. Automatically injects the container's context object into the global scope, so evaluated code can use anything provided by the container. Useful for live code playgrounds, plugin systems, and dynamic script evaluation.",
1355
+ "shortcut": "features.vm",
1356
+ "className": "VM",
1357
+ "methods": {
1358
+ "createScript": {
1359
+ "description": "",
1360
+ "parameters": {
1361
+ "code": {
1362
+ "type": "string",
1363
+ "description": "Parameter code"
1364
+ }
1365
+ },
1366
+ "required": [
1367
+ "code"
1368
+ ],
1369
+ "returns": "void"
1370
+ },
1371
+ "createContext": {
1372
+ "description": "",
1373
+ "parameters": {
1374
+ "ctx": {
1375
+ "type": "any",
1376
+ "description": "Parameter ctx"
1377
+ }
1378
+ },
1379
+ "required": [],
1380
+ "returns": "void"
1381
+ },
1382
+ "run": {
1383
+ "description": "",
1384
+ "parameters": {
1385
+ "code": {
1386
+ "type": "string",
1387
+ "description": "Parameter code"
1388
+ },
1389
+ "ctx": {
1390
+ "type": "any",
1391
+ "description": "Parameter ctx"
1392
+ },
1393
+ "options": {
1394
+ "type": "any",
1395
+ "description": "Parameter options"
1396
+ }
1397
+ },
1398
+ "required": [
1399
+ "code"
1400
+ ],
1401
+ "returns": "void"
1402
+ }
1403
+ },
1404
+ "getters": {},
1405
+ "events": {},
1406
+ "state": {},
1407
+ "options": {},
1408
+ "envVars": [],
1409
+ "examples": [
1410
+ {
1411
+ "language": "ts",
1412
+ "code": "const vm = container.feature('vm')\nconst result = vm.run('1 + 2 + 3') // 6\nconst greeting = vm.run('container.uuid') // accesses container globals"
1413
+ }
1414
+ ]
1415
+ },
1416
+ {
1417
+ "id": "features.assetLoader",
1418
+ "description": "Injects scripts and stylesheets into the page at runtime. Provides helpers for loading external libraries from unpkg.com, injecting arbitrary script/link tags, and managing load state. Used by other web features (e.g. Esbuild) to pull in dependencies on demand.",
1419
+ "shortcut": "features.assetLoader",
1420
+ "className": "AssetLoader",
1421
+ "methods": {
1422
+ "removeStylesheet": {
1423
+ "description": "",
1424
+ "parameters": {
1425
+ "href": {
1426
+ "type": "string",
1427
+ "description": "Parameter href"
1428
+ }
1429
+ },
1430
+ "required": [
1431
+ "href"
1432
+ ],
1433
+ "returns": "void"
1434
+ },
1435
+ "loadScript": {
1436
+ "description": "",
1437
+ "parameters": {
1438
+ "url": {
1439
+ "type": "string",
1440
+ "description": "Parameter url"
1441
+ }
1442
+ },
1443
+ "required": [
1444
+ "url"
1445
+ ],
1446
+ "returns": "Promise<void>"
1447
+ },
1448
+ "unpkg": {
1449
+ "description": "",
1450
+ "parameters": {
1451
+ "packageName": {
1452
+ "type": "string",
1453
+ "description": "Parameter packageName"
1454
+ },
1455
+ "globalName": {
1456
+ "type": "string",
1457
+ "description": "Parameter globalName"
1458
+ }
1459
+ },
1460
+ "required": [
1461
+ "packageName",
1462
+ "globalName"
1463
+ ],
1464
+ "returns": "Promise<any>"
1465
+ }
1466
+ },
1467
+ "getters": {},
1468
+ "events": {},
1469
+ "state": {},
1470
+ "options": {},
1471
+ "envVars": [],
1472
+ "examples": [
1473
+ {
1474
+ "language": "ts",
1475
+ "code": "const loader = container.feature('assetLoader')\nawait loader.loadScript('https://unpkg.com/lodash')\nawait AssetLoader.loadStylesheet('https://unpkg.com/normalize.css')"
1476
+ }
1477
+ ]
1478
+ },
1479
+ {
1480
+ "id": "features.vault",
1481
+ "description": "AES-256-GCM encryption and decryption for the browser using the Web Crypto API. Generates or accepts a secret key and provides `encrypt()` / `decrypt()` methods that work entirely client-side. Keys are stored as base64-encoded state so they can persist across sessions when needed.",
1482
+ "shortcut": "features.vault",
1483
+ "className": "WebVault",
1484
+ "methods": {
1485
+ "secret": {
1486
+ "description": "",
1487
+ "parameters": {
1488
+ "{ refresh = false, set = true }": {
1489
+ "type": "any",
1490
+ "description": "Parameter { refresh = false, set = true }"
1491
+ }
1492
+ },
1493
+ "required": [],
1494
+ "returns": "Promise<ArrayBuffer>"
1495
+ },
1496
+ "decrypt": {
1497
+ "description": "",
1498
+ "parameters": {
1499
+ "payload": {
1500
+ "type": "string",
1501
+ "description": "Parameter payload"
1502
+ }
1503
+ },
1504
+ "required": [
1505
+ "payload"
1506
+ ],
1507
+ "returns": "void"
1508
+ },
1509
+ "encrypt": {
1510
+ "description": "",
1511
+ "parameters": {
1512
+ "payload": {
1513
+ "type": "string",
1514
+ "description": "Parameter payload"
1515
+ }
1516
+ },
1517
+ "required": [
1518
+ "payload"
1519
+ ],
1520
+ "returns": "void"
1521
+ }
1522
+ },
1523
+ "getters": {},
1524
+ "events": {},
1525
+ "state": {},
1526
+ "options": {},
1527
+ "envVars": [],
1528
+ "examples": [
1529
+ {
1530
+ "language": "ts",
1531
+ "code": "const vault = container.feature('vault')\nconst encrypted = await vault.encrypt('secret data')\nconst decrypted = await vault.decrypt(encrypted)\nconsole.log(decrypted) // 'secret data'"
1532
+ }
1533
+ ]
1534
+ },
1535
+ {
1536
+ "id": "features.network",
1537
+ "description": "Tracks browser online/offline connectivity state. Listens for the browser's `online` and `offline` events and keeps the feature state in sync. Other features can observe the `offline` state value or listen for change events to react to connectivity changes.",
1538
+ "shortcut": "features.network",
1539
+ "className": "Network",
1540
+ "methods": {
1541
+ "start": {
1542
+ "description": "",
1543
+ "parameters": {},
1544
+ "required": [],
1545
+ "returns": "void"
1546
+ },
1547
+ "disable": {
1548
+ "description": "",
1549
+ "parameters": {},
1550
+ "required": [],
1551
+ "returns": "void"
1552
+ }
1553
+ },
1554
+ "getters": {
1555
+ "isOffline": {
1556
+ "description": "Whether the browser is currently offline.",
1557
+ "returns": "any"
1558
+ },
1559
+ "isOnline": {
1560
+ "description": "Whether the browser is currently online.",
1561
+ "returns": "any"
1562
+ }
1563
+ },
1564
+ "events": {},
1565
+ "state": {},
1566
+ "options": {},
1567
+ "envVars": [],
1568
+ "examples": [
1569
+ {
1570
+ "language": "ts",
1571
+ "code": "const network = container.feature('network')\nconsole.log(network.state.get('offline')) // false when online\n\nnetwork.on('stateChanged', ({ offline }) => {\n console.log(offline ? 'Went offline' : 'Back online')\n})"
1572
+ }
1573
+ ]
1574
+ },
1575
+ {
1576
+ "id": "features.speech",
1577
+ "description": "Text-to-speech synthesis using the Web Speech API (SpeechSynthesis). Wraps the browser's built-in speech synthesis, providing voice selection, queue management, and state tracking. Voices are discovered on init and exposed via state for UI binding.",
1578
+ "shortcut": "features.speech",
1579
+ "className": "Speech",
1580
+ "methods": {
1581
+ "loadVoices": {
1582
+ "description": "",
1583
+ "parameters": {},
1584
+ "required": [],
1585
+ "returns": "void"
1586
+ },
1587
+ "setDefaultVoice": {
1588
+ "description": "",
1589
+ "parameters": {
1590
+ "name": {
1591
+ "type": "string",
1592
+ "description": "Parameter name"
1593
+ }
1594
+ },
1595
+ "required": [
1596
+ "name"
1597
+ ],
1598
+ "returns": "void"
1599
+ },
1600
+ "cancel": {
1601
+ "description": "",
1602
+ "parameters": {},
1603
+ "required": [],
1604
+ "returns": "void"
1605
+ },
1606
+ "say": {
1607
+ "description": "",
1608
+ "parameters": {
1609
+ "text": {
1610
+ "type": "string",
1611
+ "description": "Parameter text"
1612
+ },
1613
+ "options": {
1614
+ "type": "{ voice?: Voice }",
1615
+ "description": "Parameter options"
1616
+ }
1617
+ },
1618
+ "required": [
1619
+ "text"
1620
+ ],
1621
+ "returns": "void"
1622
+ }
1623
+ },
1624
+ "getters": {
1625
+ "voices": {
1626
+ "description": "Returns the array of available speech synthesis voices.",
1627
+ "returns": "any"
1628
+ },
1629
+ "defaultVoice": {
1630
+ "description": "Returns the Voice object matching the currently selected default voice name.",
1631
+ "returns": "any"
1632
+ }
1633
+ },
1634
+ "events": {},
1635
+ "state": {},
1636
+ "options": {},
1637
+ "envVars": [],
1638
+ "examples": [
1639
+ {
1640
+ "language": "ts",
1641
+ "code": "const speech = container.feature('speech')\nspeech.say('Hello from the browser!')\n\n// Choose a specific voice\nconst speech = container.feature('speech', { voice: 'Google UK English Female' })\nspeech.say('Cheerio!')"
1642
+ }
1643
+ ],
1644
+ "types": {
1645
+ "Voice": {
1646
+ "description": "",
1647
+ "properties": {
1648
+ "voiceURI": {
1649
+ "type": "string",
1650
+ "description": ""
1651
+ },
1652
+ "name": {
1653
+ "type": "string",
1654
+ "description": ""
1655
+ },
1656
+ "lang": {
1657
+ "type": "string",
1658
+ "description": ""
1659
+ },
1660
+ "localService": {
1661
+ "type": "boolean",
1662
+ "description": ""
1663
+ },
1664
+ "default": {
1665
+ "type": "boolean",
1666
+ "description": ""
1667
+ }
1668
+ }
1669
+ }
1670
+ }
1671
+ },
1672
+ {
1673
+ "id": "features.helpers",
1674
+ "description": "The Helpers feature discovers and loads project-level helpers from a JSON manifest served over HTTP. Scripts are injected via AssetLoader and self-register into the container's registries. This is the web equivalent of the node Helpers feature, which scans the filesystem. Instead of filesystem scanning, this feature fetches a manifest from a well-known URL and uses AssetLoader.loadScript() to inject each helper's script tag.",
1675
+ "shortcut": "features.helpers",
1676
+ "className": "Helpers",
1677
+ "methods": {
1678
+ "setManifestURL": {
1679
+ "description": "Set a new manifest URL. Invalidates any cached manifest.",
1680
+ "parameters": {
1681
+ "url": {
1682
+ "type": "string",
1683
+ "description": "The new URL to fetch the manifest from"
1684
+ }
1685
+ },
1686
+ "required": [
1687
+ "url"
1688
+ ],
1689
+ "returns": "void"
1690
+ },
1691
+ "discover": {
1692
+ "description": "Discover and register helpers of the given type from the manifest. Fetches the manifest, then for each entry of the requested type, loads the script via AssetLoader and checks what got newly registered.",
1693
+ "parameters": {
1694
+ "type": {
1695
+ "type": "RegistryType",
1696
+ "description": "Which type of helpers to discover ('features' or 'clients')"
1697
+ }
1698
+ },
1699
+ "required": [
1700
+ "type"
1701
+ ],
1702
+ "returns": "Promise<string[]>"
1703
+ },
1704
+ "discoverAll": {
1705
+ "description": "Discover all helper types from the manifest.",
1706
+ "parameters": {},
1707
+ "required": [],
1708
+ "returns": "Promise<Record<string, string[]>>"
1709
+ },
1710
+ "discoverFeatures": {
1711
+ "description": "Convenience method to discover only features.",
1712
+ "parameters": {},
1713
+ "required": [],
1714
+ "returns": "Promise<string[]>"
1715
+ },
1716
+ "discoverClients": {
1717
+ "description": "Convenience method to discover only clients.",
1718
+ "parameters": {},
1719
+ "required": [],
1720
+ "returns": "Promise<string[]>"
1721
+ },
1722
+ "lookup": {
1723
+ "description": "Look up a helper class by type and name.",
1724
+ "parameters": {
1725
+ "type": {
1726
+ "type": "RegistryType",
1727
+ "description": "The registry type"
1728
+ },
1729
+ "name": {
1730
+ "type": "string",
1731
+ "description": "The helper name within that registry"
1732
+ }
1733
+ },
1734
+ "required": [
1735
+ "type",
1736
+ "name"
1737
+ ],
1738
+ "returns": "any"
1739
+ },
1740
+ "describe": {
1741
+ "description": "Get the introspection description for a specific helper.",
1742
+ "parameters": {
1743
+ "type": {
1744
+ "type": "RegistryType",
1745
+ "description": "The registry type"
1746
+ },
1747
+ "name": {
1748
+ "type": "string",
1749
+ "description": "The helper name"
1750
+ }
1751
+ },
1752
+ "required": [
1753
+ "type",
1754
+ "name"
1755
+ ],
1756
+ "returns": "string"
1757
+ }
1758
+ },
1759
+ "getters": {
1760
+ "manifestURL": {
1761
+ "description": "The URL to fetch the helpers manifest from.",
1762
+ "returns": "string"
1763
+ },
1764
+ "available": {
1765
+ "description": "Returns a unified view of all available helpers across all registries. Each key is a registry type, each value is the list of helper names in that registry.",
1766
+ "returns": "Record<string, string[]>"
1767
+ }
1768
+ },
1769
+ "events": {},
1770
+ "state": {},
1771
+ "options": {},
1772
+ "envVars": [],
1773
+ "examples": [
1774
+ {
1775
+ "language": "ts",
1776
+ "code": "const helpers = container.feature('helpers', { enable: true })\n\n// Discover all helper types from the manifest\nawait helpers.discoverAll()\n\n// Discover a specific type\nawait helpers.discover('features')\n\n// Unified view of all available helpers\nconsole.log(helpers.available)"
1777
+ }
1778
+ ]
1779
+ }
1780
+ ];
1781
+
1782
+ export const containerIntrospectionData = [
1783
+ {
1784
+ "className": "Container",
1785
+ "description": "The Container is the core runtime object in Luca. It is a singleton per process that acts as an event bus, state machine, and dependency injector. It holds registries of helpers (features, clients, servers, commands, endpoints) and provides factory methods to create instances from them. All helper instances share the container's context, enabling them to communicate and coordinate. The container detects its runtime environment (Node, Bun, browser, Electron) and can load platform-specific feature implementations accordingly. Use `container.feature('name')` to create feature instances, `container.use(Plugin)` to extend the container with new capabilities, and `container.on('event', handler)` to react to lifecycle events.",
1786
+ "methods": {
1787
+ "subcontainer": {
1788
+ "description": "Creates a new subcontainer instance of the same concrete Container subclass. The new instance is constructed with the same options as this container, shallow-merged with any overrides you provide. This preserves the runtime container type (e.g. NodeContainer, AGIContainer, etc.).",
1789
+ "parameters": {
1790
+ "this": {
1791
+ "type": "This",
1792
+ "description": "Parameter this"
1793
+ },
1794
+ "options": {
1795
+ "type": "ConstructorParameters<This['constructor']>[0]",
1796
+ "description": "Options to override for the new container instance"
1797
+ }
1798
+ },
1799
+ "required": [
1800
+ "this",
1801
+ "options"
1802
+ ],
1803
+ "returns": "This",
1804
+ "examples": [
1805
+ {
1806
+ "language": "ts",
1807
+ "code": "const child = container.subcontainer({ cwd: '/tmp/workspace' })\nchild.cwd // '/tmp/workspace'"
1808
+ }
1809
+ ]
1810
+ },
1811
+ "addContext": {
1812
+ "description": "Add a value to the container's shared context, which is passed to all helper instances. Accepts either a key and value, or an object of key-value pairs to merge in.",
1813
+ "parameters": {
1814
+ "keyOrContext": {
1815
+ "type": "keyof ContainerContext | Partial<ContainerContext>",
1816
+ "description": "Parameter keyOrContext"
1817
+ },
1818
+ "value": {
1819
+ "type": "ContainerContext[keyof ContainerContext]",
1820
+ "description": "The context value (omit when passing an object)"
1821
+ }
1822
+ },
1823
+ "required": [
1824
+ "keyOrContext"
1825
+ ],
1826
+ "returns": "this",
1827
+ "examples": [
1828
+ {
1829
+ "language": "ts",
1830
+ "code": "container.addContext('db', dbConnection)\ncontainer.addContext({ db: dbConnection, cache: redisClient })"
1831
+ }
1832
+ ]
1833
+ },
1834
+ "setState": {
1835
+ "description": "Sets the state of the container. Accepts a partial state object to merge, or a function that receives the current state and returns the new state.",
1836
+ "parameters": {
1837
+ "newState": {
1838
+ "type": "SetStateValue<ContainerState>",
1839
+ "description": "A partial state object to merge, or a function `(current) => newState`"
1840
+ }
1841
+ },
1842
+ "required": [
1843
+ "newState"
1844
+ ],
1845
+ "returns": "this",
1846
+ "examples": [
1847
+ {
1848
+ "language": "ts",
1849
+ "code": "container.setState({ started: true })\ncontainer.setState((prev) => ({ ...prev, started: true }))"
1850
+ }
1851
+ ]
1852
+ },
1853
+ "bus": {
1854
+ "description": "Create a new standalone event bus instance. Useful when you need a scoped event channel that is independent of the container's own event bus.",
1855
+ "parameters": {},
1856
+ "required": [],
1857
+ "returns": "Bus",
1858
+ "examples": [
1859
+ {
1860
+ "language": "ts",
1861
+ "code": "const myBus = container.bus()\nmyBus.on('data', (payload) => console.log(payload))\nmyBus.emit('data', { count: 42 })"
1862
+ }
1863
+ ]
1864
+ },
1865
+ "newState": {
1866
+ "description": "Create a new standalone observable State object. Useful when you need reactive state that is independent of the container's own state.",
1867
+ "parameters": {
1868
+ "initialState": {
1869
+ "type": "T",
1870
+ "description": "The initial state object (defaults to empty)"
1871
+ }
1872
+ },
1873
+ "required": [],
1874
+ "returns": "State<T>",
1875
+ "examples": [
1876
+ {
1877
+ "language": "ts",
1878
+ "code": "const myState = container.newState({ count: 0, loading: false })\nmyState.observe(() => console.log('Changed:', myState.current))\nmyState.set('count', 1)"
1879
+ }
1880
+ ]
1881
+ },
1882
+ "feature": {
1883
+ "description": "Creates a new instance of a feature. If you pass the same arguments, it will return the same instance as last time you created that. If you need the ability to create fresh instances, it is up to you how you define your options to support that.",
1884
+ "parameters": {
1885
+ "id": {
1886
+ "type": "T",
1887
+ "description": "The id of the feature to create."
1888
+ },
1889
+ "options": {
1890
+ "type": "FeatureInputOptions<Features>[T] | Record<string, unknown>",
1891
+ "description": "The options to pass to the feature constructor."
1892
+ }
1893
+ },
1894
+ "required": [
1895
+ "id"
1896
+ ],
1897
+ "returns": "InstanceType<Features[T]>"
1898
+ },
1899
+ "entity": {
1900
+ "description": "Creates a lightweight entity object with observable state, a typed event bus, and access to the container. Same id + options always returns the same cached base instance. An optional third argument auto-extends the entity with functions and getters. All extended methods and getters can access the entity (state, options, container, on/off/emit, etc.) via `this`.",
1901
+ "parameters": {
1902
+ "id": {
1903
+ "type": "string",
1904
+ "description": "Stable identifier for this entity (included in cache key)"
1905
+ },
1906
+ "options": {
1907
+ "type": "TOptions",
1908
+ "description": "Arbitrary options stored on `entity.options` (included in cache key)"
1909
+ },
1910
+ "extensions": {
1911
+ "type": "Ext & ThisType<Entity<TState, TOptions, TEvents> & Ext>",
1912
+ "description": "Optional object of functions/getters to graft onto the entity"
1913
+ }
1914
+ },
1915
+ "required": [
1916
+ "id"
1917
+ ],
1918
+ "returns": "Entity<TState, TOptions, TEvents> & Ext",
1919
+ "examples": [
1920
+ {
1921
+ "language": "ts",
1922
+ "code": "// Basic entity with typed state and events\nconst counter = container.entity<{ count: number }>('counter')\ncounter.setState({ count: 0 })\ncounter.on('tick', () => counter.setState(s => ({ count: s.count + 1 })))\n\n// With options and auto-extension\nconst user = container.entity('user:42', { name: 'Alice' }, {\n greet() { return `Hello ${this.options.name}` },\n get label() { return `User: ${this.options.name}` },\n})\nuser.greet() // \"Hello Alice\""
1923
+ }
1924
+ ]
1925
+ },
1926
+ "getHelperByUUID": {
1927
+ "description": "Look up any helper instance (feature, client, server) by its UUID. Returns undefined if the UUID is unknown or the instance was never created.",
1928
+ "parameters": {
1929
+ "uuid": {
1930
+ "type": "string",
1931
+ "description": "The `instance.uuid` value assigned at construction time"
1932
+ }
1933
+ },
1934
+ "required": [
1935
+ "uuid"
1936
+ ],
1937
+ "returns": "Helper | undefined",
1938
+ "examples": [
1939
+ {
1940
+ "language": "ts",
1941
+ "code": "const assistant = container.feature('assistant')\nconst { uuid } = assistant\n// ... later ...\nconst same = container.getHelperByUUID(uuid) // === assistant"
1942
+ }
1943
+ ]
1944
+ },
1945
+ "start": {
1946
+ "description": "Start the container. Emits the 'started' event and sets `state.started` to true. Plugins and features can listen for this event to perform initialization.",
1947
+ "parameters": {},
1948
+ "required": [],
1949
+ "returns": "Promise<this>",
1950
+ "examples": [
1951
+ {
1952
+ "language": "ts",
1953
+ "code": "container.on('started', () => console.log('Ready'))\nawait container.start()"
1954
+ }
1955
+ ]
1956
+ },
1957
+ "emit": {
1958
+ "description": "Emit an event on the container's event bus.",
1959
+ "parameters": {
1960
+ "event": {
1961
+ "type": "string",
1962
+ "description": "The event name"
1963
+ },
1964
+ "args": {
1965
+ "type": "any[]",
1966
+ "description": "Arguments to pass to listeners"
1967
+ }
1968
+ },
1969
+ "required": [
1970
+ "event",
1971
+ "args"
1972
+ ],
1973
+ "returns": "this",
1974
+ "examples": [
1975
+ {
1976
+ "language": "ts",
1977
+ "code": "container.emit('taskCompleted', { id: 'abc', result: 42 })"
1978
+ }
1979
+ ]
1980
+ },
1981
+ "on": {
1982
+ "description": "Subscribe to an event on the container's event bus.",
1983
+ "parameters": {
1984
+ "event": {
1985
+ "type": "string",
1986
+ "description": "The event name"
1987
+ },
1988
+ "listener": {
1989
+ "type": "(...args: any[]) => void",
1990
+ "description": "The callback function"
1991
+ }
1992
+ },
1993
+ "required": [
1994
+ "event",
1995
+ "listener"
1996
+ ],
1997
+ "returns": "this",
1998
+ "examples": [
1999
+ {
2000
+ "language": "ts",
2001
+ "code": "container.on('featureEnabled', (id, feature) => {\n console.log(`Feature ${id} enabled`)\n})"
2002
+ }
2003
+ ]
2004
+ },
2005
+ "off": {
2006
+ "description": "Unsubscribe a listener from an event on the container's event bus.",
2007
+ "parameters": {
2008
+ "event": {
2009
+ "type": "string",
2010
+ "description": "The event name"
2011
+ },
2012
+ "listener": {
2013
+ "type": "(...args: any[]) => void",
2014
+ "description": "The listener to remove"
2015
+ }
2016
+ },
2017
+ "required": [
2018
+ "event"
2019
+ ],
2020
+ "returns": "this"
2021
+ },
2022
+ "once": {
2023
+ "description": "Subscribe to an event on the container's event bus, but only fire once.",
2024
+ "parameters": {
2025
+ "event": {
2026
+ "type": "string",
2027
+ "description": "The event name"
2028
+ },
2029
+ "listener": {
2030
+ "type": "(...args: any[]) => void",
2031
+ "description": "The callback function (invoked at most once)"
2032
+ }
2033
+ },
2034
+ "required": [
2035
+ "event",
2036
+ "listener"
2037
+ ],
2038
+ "returns": "this"
2039
+ },
2040
+ "waitFor": {
2041
+ "description": "Returns a promise that resolves the next time the given event is emitted. Useful for awaiting one-time lifecycle transitions.",
2042
+ "parameters": {
2043
+ "event": {
2044
+ "type": "string",
2045
+ "description": "The event name to wait for"
2046
+ }
2047
+ },
2048
+ "required": [
2049
+ "event"
2050
+ ],
2051
+ "returns": "Promise<any>",
2052
+ "examples": [
2053
+ {
2054
+ "language": "ts",
2055
+ "code": "await container.waitFor('started')\nconsole.log('Container is ready')"
2056
+ }
2057
+ ]
2058
+ },
2059
+ "introspect": {
2060
+ "description": "Returns a full introspection object for this container, merging build-time AST data (JSDoc descriptions, methods, getters) with runtime data (registries, factories, state, environment).",
2061
+ "parameters": {},
2062
+ "required": [],
2063
+ "returns": "ContainerIntrospection",
2064
+ "examples": [
2065
+ {
2066
+ "language": "ts",
2067
+ "code": "const info = container.introspect()\nconsole.log(info.methods) // all public methods with descriptions\nconsole.log(info.getters) // all getters with return types\nconsole.log(info.registries) // features, clients, servers, etc."
2068
+ }
2069
+ ]
2070
+ },
2071
+ "introspectAsText": {
2072
+ "description": "Returns a human-readable markdown representation of this container's introspection data. Useful in REPLs, AI agent contexts, or documentation generation. Pass a section name to render only that section (e.g. 'methods', 'getters', 'events', 'state').",
2073
+ "parameters": {
2074
+ "sectionOrDepth": {
2075
+ "type": "IntrospectionSection | number",
2076
+ "description": "A section name to render, or heading depth number"
2077
+ },
2078
+ "startHeadingDepth": {
2079
+ "type": "number",
2080
+ "description": "Starting markdown heading depth (default 1)"
2081
+ }
2082
+ },
2083
+ "required": [],
2084
+ "returns": "string",
2085
+ "examples": [
2086
+ {
2087
+ "language": "ts",
2088
+ "code": "console.log(container.introspectAsText()) // full description\nconsole.log(container.introspectAsText('methods')) // just methods"
2089
+ }
2090
+ ]
2091
+ },
2092
+ "introspectAsJSON": {
2093
+ "description": "Returns JSON introspection data.",
2094
+ "parameters": {},
2095
+ "required": [],
2096
+ "returns": "ContainerIntrospection"
2097
+ },
2098
+ "introspectAsType": {
2099
+ "description": "Returns the container's introspection data formatted as a TypeScript interface declaration. Includes the container's own methods, getters, factories, and registered helper types.",
2100
+ "parameters": {},
2101
+ "required": [],
2102
+ "returns": "string",
2103
+ "examples": [
2104
+ {
2105
+ "language": "ts",
2106
+ "code": "console.log(container.introspectAsType())\n// interface NodeContainer {\n// feature<T>(id: string, options?: object): T;\n// readonly uuid: string;\n// ...\n// }"
2107
+ }
2108
+ ]
2109
+ },
2110
+ "sleep": {
2111
+ "description": "Sleep for the specified number of milliseconds. Useful for scripting and sequencing.",
2112
+ "parameters": {
2113
+ "ms": {
2114
+ "type": "number",
2115
+ "description": "Parameter ms"
2116
+ }
2117
+ },
2118
+ "required": [],
2119
+ "returns": "Promise<this>"
2120
+ },
2121
+ "use": {
2122
+ "description": "Apply a plugin or enable a feature by string name. Plugins are classes with a static `attach(container)` method that extend the container with new registries, factories, or capabilities.",
2123
+ "parameters": {
2124
+ "plugin": {
2125
+ "type": "Extension<T>",
2126
+ "description": "A feature name string, or a class/object with a static attach method"
2127
+ },
2128
+ "options": {
2129
+ "type": "any",
2130
+ "description": "Options to pass to the plugin's attach method"
2131
+ }
2132
+ },
2133
+ "required": [
2134
+ "plugin"
2135
+ ],
2136
+ "returns": "this & T",
2137
+ "examples": [
2138
+ {
2139
+ "language": "ts",
2140
+ "code": "// Enable a feature by name\ncontainer.use('contentDb')\n\n// Attach a plugin class (e.g. Client, Server, or custom)\ncontainer.use(Client) // registers the clients registry + client() factory\ncontainer.use(Server) // registers the servers registry + server() factory"
2141
+ }
2142
+ ]
2143
+ }
2144
+ },
2145
+ "getters": {
2146
+ "state": {
2147
+ "description": "The observable state object for this container instance.",
2148
+ "returns": "State<ContainerState>"
2149
+ },
2150
+ "enabledFeatureIds": {
2151
+ "description": "Returns the list of shortcut IDs for all currently enabled features.",
2152
+ "returns": "string[]"
2153
+ },
2154
+ "enabledFeatures": {
2155
+ "description": "Returns a map of enabled feature shortcut IDs to their instances.",
2156
+ "returns": "Partial<AvailableInstanceTypes<Features>>"
2157
+ },
2158
+ "utils": {
2159
+ "description": "Common utilities available on every container. Provides UUID generation, object hashing, string case conversion, and lodash helpers — no imports needed. - `utils.uuid()` — generate a v4 UUID - `utils.hashObject(obj)` — deterministic hash of any object - `utils.stringUtils` — `{ kebabCase, camelCase, upperFirst, lowerFirst, pluralize, singularize }` - `utils.lodash` — `{ uniq, keyBy, uniqBy, groupBy, debounce, throttle, mapValues, mapKeys, pick, get, set, omit }`",
2160
+ "returns": "ContainerUtils",
2161
+ "examples": [
2162
+ {
2163
+ "language": "ts",
2164
+ "code": "const id = container.utils.uuid()\nconst hash = container.utils.hashObject({ foo: 'bar' })\nconst name = container.utils.stringUtils.camelCase('my-feature')\nconst unique = container.utils.lodash.uniq([1, 2, 2, 3])"
2165
+ }
2166
+ ]
2167
+ },
2168
+ "context": {
2169
+ "description": "The Container's context is an object that contains the enabled features, the container itself, and any additional context that has been added to the container. All helper instances that are created by the container will have access to the shared context.",
2170
+ "returns": "ContainerContext<Features> & Partial<AvailableInstanceTypes<AvailableFeatures>>"
2171
+ },
2172
+ "currentState": {
2173
+ "description": "The current state of the container. This is a snapshot of the container's state at the time this method is called.",
2174
+ "returns": "ContainerState"
2175
+ },
2176
+ "features": {
2177
+ "description": "The features registry. Use it to check what features are available, look up feature classes, or check if a feature is registered.",
2178
+ "returns": "FeaturesRegistry",
2179
+ "examples": [
2180
+ {
2181
+ "language": "ts",
2182
+ "code": "container.features.available // ['fs', 'git', 'grep', ...]\ncontainer.features.has('fs') // true\ncontainer.features.lookup('fs') // FS class"
2183
+ }
2184
+ ]
2185
+ },
2186
+ "isBrowser": {
2187
+ "description": "Returns true if the container is running in a browser.",
2188
+ "returns": "boolean"
2189
+ },
2190
+ "isBun": {
2191
+ "description": "Returns true if the container is running in Bun.",
2192
+ "returns": "boolean"
2193
+ },
2194
+ "isNode": {
2195
+ "description": "Returns true if the container is running in Node.",
2196
+ "returns": "boolean"
2197
+ },
2198
+ "isElectron": {
2199
+ "description": "Returns true if the container is running in Electron.",
2200
+ "returns": "boolean"
2201
+ },
2202
+ "isDevelopment": {
2203
+ "description": "Returns true if the container is running in development mode.",
2204
+ "returns": "boolean"
2205
+ },
2206
+ "isProduction": {
2207
+ "description": "Returns true if the container is running in production mode.",
2208
+ "returns": "boolean"
2209
+ },
2210
+ "isCI": {
2211
+ "description": "Returns true if the container is running in a CI environment.",
2212
+ "returns": "boolean"
2213
+ },
2214
+ "registryNames": {
2215
+ "description": "Returns the names of all attached registries (e.g. [\"features\", \"clients\", \"servers\"]).",
2216
+ "returns": "string[]"
2217
+ },
2218
+ "factoryNames": {
2219
+ "description": "Returns the names of all available factory methods (e.g. [\"feature\", \"client\", \"server\"]).",
2220
+ "returns": "string[]"
2221
+ }
2222
+ },
2223
+ "events": {
2224
+ "started": {
2225
+ "name": "started",
2226
+ "description": "Event emitted by Container",
2227
+ "arguments": {}
2228
+ }
2229
+ }
2230
+ },
2231
+ {
2232
+ "className": "WebContainer",
2233
+ "description": "Browser-specific container that extends the base Container with web client support and browser-specific features like speech, voice recognition, and asset loading.",
2234
+ "methods": {},
2235
+ "getters": {
2236
+ "Client": {
2237
+ "description": "Returns the base Client class for creating custom clients.",
2238
+ "returns": "any"
2239
+ },
2240
+ "SocketClient": {
2241
+ "description": "Returns the SocketClient class for WebSocket connections.",
2242
+ "returns": "any"
2243
+ },
2244
+ "RestClient": {
2245
+ "description": "Returns the RestClient class for HTTP REST API connections.",
2246
+ "returns": "any"
2247
+ }
2248
+ },
2249
+ "events": {}
2250
+ }
2251
+ ];