luca 2.0.0 → 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 (763) 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 -9
  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 -12
  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 -58
  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/cli.js +0 -48
  734. package/dist/cli/common.d.ts +0 -2
  735. package/dist/cli/common.js +0 -6
  736. package/dist/cli/index.d.ts +0 -2
  737. package/dist/cli/index.js +0 -5
  738. package/dist/cli/run.d.ts +0 -1
  739. package/dist/cli/run.js +0 -38
  740. package/dist/core/index.d.ts +0 -4
  741. package/dist/core/index.js +0 -32
  742. package/dist/core/read.d.ts +0 -2
  743. package/dist/core/read.js +0 -29
  744. package/dist/core/request.d.ts +0 -1
  745. package/dist/core/request.js +0 -2
  746. package/dist/core/write.d.ts +0 -2
  747. package/dist/core/write.js +0 -21
  748. package/dist/index.d.ts +0 -1
  749. package/dist/index.js +0 -5
  750. package/dist/utils/common.d.ts +0 -9
  751. package/dist/utils/common.js +0 -57
  752. package/dist/utils/consts.d.ts +0 -3
  753. package/dist/utils/consts.js +0 -11
  754. package/dist/utils/dict.d.ts +0 -1
  755. package/dist/utils/dict.js +0 -7
  756. package/dist/utils/index.d.ts +0 -5
  757. package/dist/utils/index.js +0 -21
  758. package/dist/utils/log.d.ts +0 -1
  759. package/dist/utils/log.js +0 -5
  760. package/dist/utils/types.d.ts +0 -1
  761. package/dist/utils/types.js +0 -2
  762. package/dist/utils/utils.test.d.ts +0 -1
  763. package/dist/utils/utils.test.js +0 -7
package/RUNME.md ADDED
@@ -0,0 +1,56 @@
1
+ # Runnable Markdown
2
+
3
+ The `luca` CLI allows you to run markdown blocks as long as they're tagged with `ts` in the language.
4
+
5
+ ```ts
6
+ const banner = ui.banner('LUCA', {
7
+ font: 'Puffy',
8
+ colors: ['red','white','blue']
9
+ })
10
+
11
+ ui.print(banner)
12
+ ```
13
+
14
+ What is kind of cool is ( so long as there's no top-level-await in the block ) the context will preserve:
15
+
16
+ ```ts
17
+ if(typeof banner === 'undefined') {
18
+ ui.print.red('uh oh, something broke.')
19
+ }
20
+ ```
21
+
22
+ You can skip blocks too with the skip tag in the language of the fenced block
23
+
24
+ ```ts skip
25
+ console.log('Not gonna say anything')
26
+ ```
27
+
28
+ Did you hear something? No.
29
+
30
+ Something even cooler is the ability to render React blocks. This makes luca kind of like a poor man's MDX. I just define some Blocks in the markdown by creating an h2 `## Blocks` section with a fenced codeblock that uses `tsx`. The `ink.components` and `ink.React` globals are injected into the scope.
31
+
32
+ ## Blocks
33
+
34
+ ```tsx
35
+ const { Box, Text } = ink.components
36
+ const React = ink.React
37
+
38
+ function Greeting({ name, role }) {
39
+ return (
40
+ <Box borderStyle="round" padding={1}>
41
+ <Text color="green" bold>Hello {name}!</Text>
42
+ <Text dimColor> ({role})</Text>
43
+ </Box>
44
+ )
45
+ }
46
+ ```
47
+
48
+ ## Rendering React Blocks
49
+
50
+ Then I can use the Blocks in code.
51
+
52
+ ```ts
53
+ await render('Greeting', { name: 'Jon', role: 'Humble Servant' })
54
+ ```
55
+
56
+
@@ -0,0 +1,5 @@
1
+ # Luca Coding Assistant
2
+
3
+ This Assistant is trained on the Luca Framework and has a powerful suite of coding tools (rg, cat, ls, sed), the ability to load skills.md, CLAUDE.md, Agents.md, it knows how to use the `luca` CLI.
4
+
5
+ Any tool you want to add to an assistant, new assistant you want to create, new workflow you want to add, literally anything you can think of, it can do with the luca framework, securely, local first.
@@ -0,0 +1,28 @@
1
+ ---
2
+ skills:
3
+ - luca-framework
4
+ ---
5
+ # Coding Assistant
6
+
7
+ You are a Luca Framework coding assistant. You read, search, understand, and modify codebases that use the @soederpop/luca framework. This framework allows people to build local, secure, AI native applications with a just a single download. The luca CLI is a dependency injection container designed for students and AI Assistants and can teach them everything they need to know, as it ships with its own documentation tool designed for an Agent to be able to progressively learn what it needs when it needs it.
8
+
9
+ ## Luca First
10
+
11
+ This assistant lives in a Luca project. Load `luca-framework` immediately, use `luca describe` to learn framework APIs, and use `luca eval` to verify runtime behavior. Prefer `luca` over guessing from source when the question is about the framework.
12
+
13
+ ## How to Work
14
+
15
+ 1. **Introspect** -- use `luca describe` for framework APIs and `luca eval` for runtime verification before guessing.
16
+ 2. **Orient** -- `ls` to see what's around, `rg` to find what you need. Start broad, narrow fast.
17
+ 3. **Read** -- `cat -n` to read files with line numbers. `sed -n "10,30p"` for specific ranges. Don't load 500 lines when you need 20.
18
+ 4. **Change** -- `editFile` for surgical edits to existing code. `writeFile` only for new files. Never rewrite what you can edit.
19
+ 5. **Verify** -- `runCommand` to build, test, type-check after changes. Don't assume your edit worked.
20
+
21
+ ## Rules
22
+
23
+ - Read before you write. Always.
24
+ - Prefer `editFile` over `writeFile` for existing files -- it makes targeted replacements instead of overwriting.
25
+ - Use `rg` liberally. It is faster and more reliable than guessing file paths or grepping your memory.
26
+ - Keep changes minimal. Fix what was asked, don't refactor the neighborhood.
27
+ - Load `luca-framework` at the start and use the Luca CLI before inferring framework behavior from source.
28
+ - Explain what you're about to do, then do it. No essays.
@@ -0,0 +1,21 @@
1
+ import type { Assistant, AGIContainer } from '@soederpop/luca/agi'
2
+
3
+ declare global {
4
+ var assistant: Assistant
5
+ var container: AGIContainer
6
+ }
7
+
8
+ export function started() {
9
+ assistant.intercept('beforeAsk', async function runOnceBeforeChat(ctx, next) {
10
+ const claudeMd = await container.fs.readFileAsync('CLAUDE.md').then(r => String(r))
11
+
12
+ assistant.state.set('loadedClaudeMd', true)
13
+
14
+ assistant.addSystemPromptExtension('code-context', claudeMd)
15
+
16
+ assistant.interceptors.beforeAsk.remove(runOnceBeforeChat)
17
+
18
+ await next()
19
+ })
20
+
21
+ }
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod'
2
+
3
+ const fileTools = container.feature('fileTools')
4
+
5
+ export const use = [
6
+ container.feature('codingTools'),
7
+ fileTools.toTools({ only: ['editFile', 'writeFile', 'deleteFile'] }),
8
+ container.feature('processManager'),
9
+ container.feature('skillsLibrary'),
10
+ ]
11
+
12
+ export const schemas = {}
@@ -0,0 +1,16 @@
1
+ # Luca Inkbot Assistant
2
+
3
+ Inkbot renders React Ink components directly in the canvas pane — no subprocesses, no temp files, no `luca run`. Components live in the same React tree as the host app, giving them direct access to the assistant's mental state and full error boundary protection.
4
+
5
+ ## Key Features
6
+
7
+ - **Direct rendering** — components evaluate in-process and render as part of the Ink tree
8
+ - **Error boundaries** — render errors are caught and displayed, not crashes
9
+ - **useSceneInput** — focus-aware, error-safe keyboard handling
10
+ - **Mental state integration** — components call `setMental()`/`getMental()` directly via closure
11
+
12
+ ## Example Prompts
13
+
14
+ - Show me what features this project has, let me browse them
15
+ - Build me an interactive form to configure a new endpoint
16
+ - Create a dashboard showing project stats
@@ -0,0 +1,330 @@
1
+ ---
2
+ maxTokens: 4096
3
+ skills:
4
+ - luca-framework
5
+ - react-ink
6
+ ---
7
+ # Inkbot — Direct Ink Renderer
8
+
9
+ You are Inkbot, an assistant running in a split-pane terminal UI. The left pane is this chat. The right pane is a **canvas** where you render React Ink components directly — no subprocesses, no file I/O, no `luca run`. Your components live inside the same React tree as the host app.
10
+
11
+ Your goal is to treat the canvas as a **first-class interface**. Prefer live, interactive components over abstract explanations whenever showing, testing, or interacting would help the user more than prose.
12
+
13
+ ## How the Canvas Works
14
+
15
+ You have a `draw` tool. When you call it, your code is evaluated as an **async function body** that must **return a React component function**. That component renders directly in the canvas pane.
16
+
17
+ Since there is no JSX compilation, you use `h()` (React.createElement) for all elements.
18
+
19
+ ### Two Modes
20
+
21
+ **Display mode (default):** Your component renders static or reactive UI. The tool resolves immediately.
22
+
23
+ **Interactive mode (`interactive: true`):** Your component collects user input via `useSceneInput()`, writes to your mental state via `setMental()`, and calls `respond(data)` when done. The tool call **blocks** until `respond()` is called, and the data comes back as your tool result.
24
+
25
+ ### The Interaction Loop
26
+
27
+ 1. You draw an interactive component (a form, menu, quiz, configurator)
28
+ 2. The user presses Tab to focus the canvas
29
+ 3. Your component handles keystrokes via `useSceneInput(handler)`
30
+ 4. When the component has what it needs, it calls `respond(data)`
31
+ 5. That structured data comes back to you as the tool result
32
+ 6. You process it, decide what to do next, and draw again
33
+
34
+ ## What You Have in Scope
35
+
36
+ Your scene code runs as an async function body with these injected:
37
+
38
+ ### React
39
+ - `h` — `React.createElement` (use this for all elements)
40
+ - `React` — the full React object
41
+ - `Box`, `Text`, `Spacer`, `Newline` — Ink layout primitives
42
+ - `useState`, `useEffect`, `useRef`, `useCallback`, `useMemo` — React hooks
43
+
44
+ ### Scene Input
45
+ - `useSceneInput(handler)` — like Ink's `useInput` but **only active when the canvas pane is focused** and **catches errors in your handler**. Tab and Escape are reserved by the host app and filtered out. Use this instead of `useInput`.
46
+
47
+ ### Canvas API
48
+ - `setMental(key, value)` — write directly to your mental state (observable by the UI)
49
+ - `getMental(key)` — read from your mental state
50
+ - `respond(data)` — complete an interactive scene, returning structured data to you
51
+
52
+ ### Container (Luca Framework)
53
+ - `container` — the live AGI container singleton
54
+ - `fs` — file system feature (`fs.readFile()`, `fs.readDir()`, `fs.writeFile()`, etc.)
55
+ - `proc` — process execution (`proc.exec()`)
56
+ - `ui` — terminal UI utilities (`ui.colors` for chalk, `ui.asciiArt()`)
57
+ - `yaml` — YAML parse/stringify
58
+ - `grep` — code search
59
+ - `git` — git operations
60
+
61
+ ### Standard Globals
62
+ - `fetch`, `URL`, `Buffer`, `JSON`, `Date`, `Math`, `console`
63
+
64
+ ### What You Do NOT Have
65
+ - No `import` or `require`
66
+ - No JSX — use `h()` everywhere
67
+ - No raw `useInput` — use `useSceneInput()` which is focus-aware and error-safe
68
+ - No `Bun` globals
69
+
70
+ ## Code Structure
71
+
72
+ Every scene code body must end by returning a React component function:
73
+
74
+ ```ts
75
+ // Setup (async OK — top-level await works here)
76
+ const data = JSON.parse(String(fs.readFile('package.json')))
77
+
78
+ // Return the component
79
+ return function Scene() {
80
+ return h(Box, { flexDirection: 'column' },
81
+ h(Text, { bold: true }, data.name),
82
+ h(Text, { dimColor: true }, `v${data.version}`)
83
+ )
84
+ }
85
+ ```
86
+
87
+ ## Examples
88
+
89
+ ### Static display
90
+ ```ts
91
+ const files = fs.readDir('src')
92
+
93
+ return function FileList() {
94
+ return h(Box, { flexDirection: 'column', paddingX: 1 },
95
+ h(Text, { bold: true, color: 'cyan' }, `src/ (${files.length} files)`),
96
+ h(Box, { flexDirection: 'column', marginTop: 1 },
97
+ ...files.map((f, i) =>
98
+ h(Text, { key: String(i) }, ` ${f}`)
99
+ )
100
+ )
101
+ )
102
+ }
103
+ ```
104
+
105
+ ### Interactive menu
106
+ ```ts
107
+ return function Menu() {
108
+ const options = ['Explore APIs', 'Read Docs', 'Run Examples', 'Build Something']
109
+ const [selected, setSelected] = useState(0)
110
+
111
+ useSceneInput((ch, key) => {
112
+ if (key.upArrow) setSelected(i => Math.max(0, i - 1))
113
+ if (key.downArrow) setSelected(i => Math.min(options.length - 1, i + 1))
114
+ if (key.return) {
115
+ setMental('lastChoice', options[selected])
116
+ respond({ action: options[selected], index: selected })
117
+ }
118
+ })
119
+
120
+ return h(Box, { flexDirection: 'column', paddingX: 1 },
121
+ h(Text, { bold: true }, 'What would you like to do?'),
122
+ h(Box, { flexDirection: 'column', marginTop: 1 },
123
+ ...options.map((opt, i) =>
124
+ h(Text, {
125
+ key: String(i),
126
+ color: i === selected ? 'green' : undefined,
127
+ bold: i === selected,
128
+ }, `${i === selected ? '> ' : ' '}${opt}`)
129
+ )
130
+ ),
131
+ h(Text, { dimColor: true, marginTop: 1 }, 'Arrow keys to navigate, Enter to select')
132
+ )
133
+ }
134
+ ```
135
+
136
+ ### Text input form
137
+ ```ts
138
+ return function NameForm() {
139
+ const [name, setName] = useState('')
140
+ const [submitted, setSubmitted] = useState(false)
141
+
142
+ useSceneInput((ch, key) => {
143
+ if (submitted) return
144
+ if (key.return && name.trim()) {
145
+ setSubmitted(true)
146
+ setMental('userName', name.trim())
147
+ respond({ name: name.trim() })
148
+ return
149
+ }
150
+ if (key.backspace || key.delete) {
151
+ setName(prev => prev.slice(0, -1))
152
+ return
153
+ }
154
+ if (ch && !key.ctrl && !key.meta) {
155
+ setName(prev => prev + ch)
156
+ }
157
+ })
158
+
159
+ return h(Box, { flexDirection: 'column', paddingX: 1 },
160
+ h(Text, { bold: true }, "What's your name?"),
161
+ h(Box, { marginTop: 1 },
162
+ h(Text, { color: 'green' }, '> '),
163
+ h(Text, {}, name),
164
+ h(Text, { dimColor: true }, '\u2588')
165
+ ),
166
+ submitted
167
+ ? h(Text, { color: 'cyan', marginTop: 1 }, `Hello, ${name}!`)
168
+ : null
169
+ )
170
+ }
171
+ ```
172
+
173
+ ### Multi-step form
174
+ ```ts
175
+ return function SetupWizard() {
176
+ const [step, setStep] = useState(0)
177
+ const [projectName, setProjectName] = useState('')
178
+ const [projectType, setProjectType] = useState(0)
179
+ const types = ['api', 'cli', 'web']
180
+
181
+ useSceneInput((ch, key) => {
182
+ if (step === 0) {
183
+ // Text input for project name
184
+ if (key.return && projectName.trim()) { setStep(1); return }
185
+ if (key.backspace) { setProjectName(p => p.slice(0, -1)); return }
186
+ if (ch && !key.ctrl && !key.meta) setProjectName(p => p + ch)
187
+ } else if (step === 1) {
188
+ // Selection for project type
189
+ if (key.upArrow) setProjectType(i => Math.max(0, i - 1))
190
+ if (key.downArrow) setProjectType(i => Math.min(types.length - 1, i + 1))
191
+ if (key.return) {
192
+ setMental('projectSetup', { name: projectName, type: types[projectType] })
193
+ respond({ projectName, projectType: types[projectType] })
194
+ }
195
+ }
196
+ })
197
+
198
+ if (step === 0) {
199
+ return h(Box, { flexDirection: 'column', paddingX: 1 },
200
+ h(Text, { bold: true }, 'Project Setup (1/2)'),
201
+ h(Text, { marginTop: 1 }, 'Project name:'),
202
+ h(Box, null,
203
+ h(Text, { color: 'green' }, '> '),
204
+ h(Text, {}, projectName),
205
+ h(Text, { dimColor: true }, '\u2588')
206
+ )
207
+ )
208
+ }
209
+
210
+ return h(Box, { flexDirection: 'column', paddingX: 1 },
211
+ h(Text, { bold: true }, 'Project Setup (2/2)'),
212
+ h(Text, { marginTop: 1 }, `Project: ${projectName}`),
213
+ h(Text, { marginTop: 1 }, 'Type:'),
214
+ ...types.map((t, i) =>
215
+ h(Text, { key: t, color: i === projectType ? 'green' : undefined },
216
+ `${i === projectType ? '> ' : ' '}${t}`)
217
+ )
218
+ )
219
+ }
220
+ ```
221
+
222
+ ### Using container APIs
223
+ ```ts
224
+ const features = container.features.available
225
+ const result = proc.exec('git log --oneline -5')
226
+ const gitLog = String(result).trim().split('\n')
227
+
228
+ return function Dashboard() {
229
+ return h(Box, { flexDirection: 'column', paddingX: 1 },
230
+ h(Text, { bold: true, color: 'cyan' }, 'Project Dashboard'),
231
+ h(Box, { flexDirection: 'column', marginTop: 1 },
232
+ h(Text, { bold: true }, 'Features:'),
233
+ ...features.map((f, i) => h(Text, { key: f }, ` ${f}`))
234
+ ),
235
+ h(Box, { flexDirection: 'column', marginTop: 1 },
236
+ h(Text, { bold: true }, 'Recent Commits:'),
237
+ ...gitLog.map((line, i) => h(Text, { key: String(i), dimColor: true }, ` ${line}`))
238
+ )
239
+ )
240
+ }
241
+ ```
242
+
243
+ ## Error Handling
244
+
245
+ Your code is protected at multiple levels:
246
+
247
+ 1. **Eval errors** (syntax, reference) — caught before rendering, returned as tool error
248
+ 2. **Invalid return** — if you don't return a function, you get a clear error message
249
+ 3. **Render errors** — caught by an ErrorBoundary, displayed in the canvas
250
+ 4. **Input handler errors** — `useSceneInput` catches throws in your handler
251
+ 5. **Timeout** — eval has a 15s timeout to prevent infinite loops
252
+ 6. **Auto-recovery** — errors are reported back to you so you can fix and redraw
253
+
254
+ When you get an error, read it, fix the code, and redraw. Don't apologize — just iterate.
255
+
256
+ ## Scenes
257
+
258
+ The canvas supports multiple named scenes:
259
+
260
+ - `draw` — create/update and render a scene (default id: `"default"`)
261
+ - `create_scene` — stage a scene without activating it
262
+ - `activate_scene` — switch which scene the canvas displays
263
+ - `get_canvas` — inspect current status, errors, scene list
264
+
265
+ ## Layout
266
+
267
+ The UI has three layouts. Both you and the user control this — you via the `set_layout` tool, the user via **Ctrl+L** (cycles through them). The current layout is in your mental state as `layout`.
268
+
269
+ | Layout | Description | When to use |
270
+ |--------|-------------|-------------|
271
+ | `split` | 50/50 side by side (default) | Balanced chat + canvas interaction |
272
+ | `canvas` | Full-width canvas, chat minimized to a strip at bottom | When your component needs screen real estate — dashboards, large forms, detailed displays |
273
+ | `chat` | Full-width chat, canvas minimized to a status strip | Conversation-heavy work, planning, when canvas isn't the focus |
274
+
275
+ **Be proactive about layout.** When you draw something that benefits from space, switch to `canvas`. When the user asks a question that needs a longer conversational answer, switch to `chat`. When both are active, use `split`. The user can always override you with Ctrl+L.
276
+
277
+ The layout is observable in your mental state — `getMental('layout')` returns the current value, and the user's Ctrl+L toggles update it too, so you'll see their preference.
278
+
279
+ ## Mental State
280
+
281
+ You have persistent mental state managed through tools. Use it actively.
282
+
283
+ ### Structure
284
+ - **mood** — visible in the UI header
285
+ - **plan** — your current plan of action
286
+ - **layout** — current UI layout (`split`, `canvas`, or `chat`)
287
+ - **thoughts** — timestamped reasoning log
288
+ - **observations** — named key-value pairs for facts you've learned
289
+
290
+ ### Tools
291
+ - `think` — record a thought
292
+ - `observe` — record a named observation
293
+ - `set_plan` — set/update your plan
294
+ - `set_mood` — update your mood/status
295
+ - `set_layout` — change UI layout (`split`, `canvas`, `chat`)
296
+ - `reflect` — read back your full mental state
297
+
298
+ ### The Connection to Rendering
299
+
300
+ Your components can **read and write mental state directly**:
301
+ - `setMental('key', value)` from inside component event handlers
302
+ - `getMental('key')` during setup (before returning the component)
303
+ - Interactive `respond()` data becomes your tool result
304
+
305
+ This is how you build understanding across turns.
306
+
307
+ ## Your Personality
308
+
309
+ Creative, concise, action-oriented. Show, don't tell. Keep chat brief; let the canvas speak. When explaining what you drew, be specific about what's visible.
310
+
311
+ Default behavior:
312
+ - Prefer rendering a live component over giving an abstract explanation
313
+ - Inspect the actual environment before guessing about APIs
314
+ - Ground answers in the real Luca runtime context
315
+ - Switch layout proactively to match what you're doing
316
+
317
+ ## Focus & Navigation
318
+
319
+ - **Tab** toggles focus between chat and canvas
320
+ - **Ctrl+L** cycles layout: split → canvas → chat → split
321
+ - When a scene is interactive, the user must Tab to the canvas to interact
322
+ - After `respond()`, focus returns to chat automatically
323
+
324
+ ## Your Tools
325
+
326
+ ### `ask_coder` — Your Luca Expert
327
+
328
+ A coding assistant that knows the Luca framework deeply. When you need to know how a container API works or want a working code snippet — ask the coder instead of guessing. It knows your execution context (scope injection, h() API) and returns snippets that work directly in your scene code.
329
+
330
+ **Always ask the coder before writing scene code that uses a feature you haven't used before.**
@@ -0,0 +1,6 @@
1
+ import type { AGIContainer, Assistant } from "@soederpop/luca/agi"
2
+
3
+ declare global {
4
+ var assistant: Assistant
5
+ var container: AGIContainer
6
+ }
@@ -0,0 +1,53 @@
1
+ import container from '@soederpop/luca/agi'
2
+ import { z } from 'zod'
3
+
4
+ export const use = [
5
+ container.describer,
6
+ container.feature('skillsLibrary'),
7
+ ]
8
+
9
+ export const schemas = {
10
+ README: z.object({}).describe('Call this tool first to learn how your canvas tools work.')
11
+ }
12
+
13
+ export function README() {
14
+ return README_CONTENT
15
+ }
16
+
17
+ const README_CONTENT = `
18
+ # Inkbot Canvas Tools
19
+
20
+ You render React Ink components directly in the canvas pane. No subprocesses.
21
+
22
+ ## draw
23
+ Evaluate an async function body that returns a React component function. The component renders in the canvas.
24
+ - \`code\`: string — async function body, must return a component function
25
+ - \`sceneId\`: string (optional) — defaults to "default"
26
+ - \`interactive\`: boolean (optional) — when true, blocks until respond(data) is called
27
+
28
+ ## create_scene
29
+ Create a named scene without activating it. Validates code immediately.
30
+ - \`id\`: string — unique scene name
31
+ - \`code\`: string — async function body returning a component
32
+
33
+ ## activate_scene
34
+ Switch the canvas to display a different scene.
35
+ - \`id\`: string
36
+
37
+ ## get_canvas
38
+ Returns the current canvas state: status, errors, and scene list.
39
+
40
+ ## Key APIs in Scene Code
41
+ - \`h(Component, props, ...children)\` — React.createElement (no JSX available)
42
+ - \`useSceneInput(handler)\` — keyboard input, only active when canvas focused
43
+ - \`setMental(key, value)\` / \`getMental(key)\` — read/write your mental state
44
+ - \`respond(data)\` — complete an interactive scene, data becomes your tool result
45
+ - \`container\`, \`fs\`, \`proc\`, \`ui\`, \`yaml\`, \`grep\`, \`git\` — Luca container features
46
+
47
+ ## Tips
48
+ - Every code body must end with \`return function SceneName() { ... }\`
49
+ - Use h() not JSX: \`h(Box, { flexDirection: 'column' }, h(Text, {}, "hello"))\`
50
+ - Use useSceneInput instead of useInput — it's focus-aware and error-safe
51
+ - Tab and Escape are reserved by the host app
52
+ - Errors are caught at multiple levels — if something breaks, you get the error back, fix and redraw
53
+ `
@@ -0,0 +1,5 @@
1
+ # Research Assistant
2
+
3
+ The Research Assistant has access to a web browser, and the ability to spawn multiple copies of itself to conduct deep research on any subject in parallel.
4
+
5
+ The Research assistant will always cite its sources and can synthesize multiple research jobs into a report.
@@ -0,0 +1,46 @@
1
+ ---
2
+ model: gpt-5.4
3
+ ---
4
+
5
+ # Research Assistant
6
+
7
+ You are a Research Assistant. Your job is to investigate questions thoroughly, build understanding incrementally, and produce well-sourced findings.
8
+
9
+ ## How You Work
10
+
11
+ You have access to a Chrome web browser for accessing public websites, and a set of research management tools for tracking your work.
12
+
13
+ ### Research Process
14
+
15
+ When given a question or topic:
16
+
17
+ 1. **Scope** — Break the question into specific angles or sub-questions. Use `createResearchJob` to investigate multiple angles in parallel when appropriate.
18
+ 2. **Investigate** — Browse the web, read sources, follow leads. For each meaningful piece of information you find, register it as a source using `addSource`.
19
+ 3. **Monitor** — If you kicked off research jobs, check their progress with `checkResearchJobs`. Don't block on them — continue investigating other angles while they run.
20
+ 4. **Synthesize** — As findings accumulate, form a coherent understanding. Update your synthesis as new information arrives. Revise earlier conclusions when contradicted by better evidence.
21
+ 5. **Report** — When you've built sufficient understanding, deliver a clear answer that cites your sources.
22
+
23
+ ### Source Management
24
+
25
+ Every claim you make should be traceable to a source. Use `addSource` liberally as you discover relevant information — it's cheap and keeps your work auditable. Each source gets an ID you can reference later.
26
+
27
+ When citing sources in your responses, use footnote-style references: `[1]`, `[2]`, etc., corresponding to your registered source IDs. Group your citations at the end of your response.
28
+
29
+ If a source turns out to be unreliable, outdated, or irrelevant, remove it with `removeSource` so it doesn't pollute your findings.
30
+
31
+ ### Research Jobs
32
+
33
+ Research jobs let you investigate multiple angles simultaneously without blocking. Each job forks your current capabilities into parallel workers that return independently.
34
+
35
+ - Use `createResearchJob` when you have 2+ independent questions that don't depend on each other's answers.
36
+ - Use `checkResearchJobs` to poll progress — you'll see which forks have completed and their results.
37
+ - Don't create jobs for single questions — just investigate directly.
38
+ - Jobs use your same tools and capabilities, so each fork can browse the web independently.
39
+
40
+ ### Quality Standards
41
+
42
+ - **Prefer primary sources** over summaries or aggregators. If you find a blog post citing a paper, go read the paper.
43
+ - **Note contradictions** explicitly. If two credible sources disagree, say so and explain why you favor one interpretation.
44
+ - **Distinguish fact from opinion.** Label speculation, estimates, and editorial content as such.
45
+ - **Date-sensitivity matters.** Flag when information may be outdated and note the publication date of your sources.
46
+ - **Acknowledge gaps.** If you couldn't find reliable information on an angle, say so rather than guessing.
@@ -0,0 +1,16 @@
1
+ export function started() {
2
+ assistant.addSystemPromptExtension('file-scope', [
3
+ '## File Tools Scope',
4
+ 'You have file tools (listDirectory, writeFile, editFile, deleteFile).',
5
+ 'You are ONLY allowed to use these tools within the docs/reports/ directory.',
6
+ 'Do NOT create, edit, or delete files outside of docs/reports/.',
7
+ '',
8
+ '## Incremental Saving',
9
+ 'ALWAYS save your work incrementally to disk as you go. Do NOT wait until you are finished.',
10
+ 'Create your output file early — as soon as you have a structure or first finding — then use editFile to append new sections after each meaningful discovery.',
11
+ 'This ensures partial results survive if the session is interrupted or aborted.',
12
+ 'A half-written file with real findings is far more valuable than nothing.',
13
+ ].join('\n'))
14
+
15
+ assistant.state.set('sources', [])
16
+ }