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
@@ -0,0 +1,786 @@
1
+ import { z } from 'zod'
2
+ import { FeatureStateSchema } from '../../schemas/base.js'
3
+ import { Feature } from "../feature.js";
4
+ import colors from "chalk";
5
+ import type { FontName as Fonts } from "figlet";
6
+ import { figlet, fontNames } from "./figlet-fonts.js";
7
+ import inquirer from "inquirer";
8
+ import { marked } from 'marked';
9
+ import { markedTerminal } from 'marked-terminal';
10
+ import _endent from 'endent';
11
+ // Handle CJS/ESM interop for bun --compile
12
+ const endent = typeof _endent === 'function' ? _endent : (_endent as any).default;
13
+
14
+ // @ts-ignore
15
+ marked.use(markedTerminal({ }));
16
+
17
+ /**
18
+ * Zod schema for the UI feature state.
19
+ * Manages terminal UI configuration and cached data.
20
+ */
21
+ export const UIStateSchema = FeatureStateSchema.extend({
22
+ /** Array of available fonts for ASCII art generation */
23
+ fonts: z.array(z.string()).optional().describe('Array of available fonts for ASCII art generation'),
24
+ /** Color palette for automatic color assignment */
25
+ colorPalette: z.array(z.string()).optional().describe('Color palette of hex colors for automatic color assignment'),
26
+ })
27
+ type UIState = z.infer<typeof UIStateSchema>
28
+
29
+ /** Global registry tracking assigned colors to prevent duplicates */
30
+ const _assignedColors: Record<string, string> = {};
31
+
32
+ /** Type representing available chalk color functions */
33
+ type Color = keyof typeof colors;
34
+
35
+ /** Basic print function signature */
36
+ type PrintFunction = (...args: any[]) => void;
37
+
38
+ /** Enhanced print function with color methods attached */
39
+ type ColoredPrintFunction = PrintFunction & {
40
+ [color in Color]: (...args: any[]) => void;
41
+ }
42
+
43
+ /**
44
+ * UI Feature - Interactive Terminal User Interface Builder
45
+ *
46
+ * Unified interface for building professional CLI experiences using chalk (colors/styles),
47
+ * figlet (ASCII art), and inquirer (interactive prompts). Provides rich color management,
48
+ * automatic color assignment, text gradients, banner generation, padding utilities,
49
+ * markdown rendering, and interactive wizards.
50
+ */
51
+ export class UI<T extends UIState = UIState> extends Feature<T> {
52
+ static { Feature.register(this, 'ui') }
53
+ /** The shortcut path for accessing this feature */
54
+ static override shortcut = "features.ui" as const
55
+ static override stateSchema = UIStateSchema
56
+
57
+ /**
58
+ * Gets the initial state configuration for the UI feature.
59
+ * Sets up default color palette and initializes empty fonts array.
60
+ *
61
+ * @returns The initial state with enabled flag, color palette, and fonts array
62
+ */
63
+ override get initialState() : T {
64
+ return ({
65
+ enabled: true,
66
+ colorPalette: ASSIGNABLE_COLORS,
67
+ fonts: []
68
+ } as unknown) as T
69
+ }
70
+
71
+ /** Enhanced print function with color methods for convenient terminal output */
72
+ print: ColoredPrintFunction = Object.assign((...args: any[]) => {
73
+ return console.log(...args)
74
+ }, {
75
+ red: (text: string) => console.log(colors.red(text)),
76
+ green: (text: string) => console.log(colors.green(text)),
77
+ blue: (text: string) => console.log(colors.blue(text)),
78
+ yellow: (text: string) => console.log(colors.yellow(text)),
79
+ cyan: (text: string) => console.log(colors.cyan(text)),
80
+ dim: (text: string) => console.log(colors.dim(text)),
81
+ bold: (text: string) => console.log(colors.bold(text)),
82
+ italic: (text: string) => console.log(colors.italic(text)),
83
+ underline: (text: string) => console.log(colors.underline(text)),
84
+ strikethrough: (text: string) => console.log(colors.strikethrough(text)),
85
+ inverse: (text: string) => console.log(colors.inverse(text)),
86
+ bgRed: (text: string) => console.log(colors.bgRed(text)),
87
+ bgGreen: (text: string) => console.log(colors.bgGreen(text)),
88
+ bgBlue: (text: string) => console.log(colors.bgBlue(text)),
89
+ bgYellow: (text: string) => console.log(colors.bgYellow(text)),
90
+ bgCyan: (text: string) => console.log(colors.bgCyan(text)),
91
+ bgMagenta: (text: string) => console.log(colors.bgMagenta(text)),
92
+ bgWhite: (text: string) => console.log(colors.bgWhite(text)),
93
+ }) as ColoredPrintFunction
94
+
95
+ /**
96
+ * Parse markdown text and render it for terminal display using marked-terminal.
97
+ *
98
+ * @param text - The markdown string to parse and render
99
+ * @returns The rendered terminal-formatted string
100
+ */
101
+ markdown(text: string): string | Promise<string> {
102
+ return marked.parse(text)
103
+ }
104
+
105
+
106
+ /**
107
+ * Provides access to the full chalk colors API.
108
+ *
109
+ * Chalk provides extensive color and styling capabilities including:
110
+ * - Basic colors: red, green, blue, yellow, etc.
111
+ * - Background colors: bgRed, bgGreen, etc.
112
+ * - Styles: bold, italic, underline, strikethrough
113
+ * - Advanced: rgb, hex, hsl color support
114
+ *
115
+ * Colors and styles can be chained for complex formatting.
116
+ *
117
+ * @returns The chalk colors object with all styling methods
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * // Basic colors
122
+ * ui.colors.red('Error message')
123
+ * ui.colors.green('Success!')
124
+ *
125
+ * // Chained styling
126
+ * ui.colors.blue.bold.underline('Important link')
127
+ * ui.colors.white.bgRed.bold(' ALERT ')
128
+ *
129
+ * // Hex and RGB colors
130
+ * ui.colors.hex('#FF5733')('Custom color')
131
+ * ui.colors.rgb(255, 87, 51)('RGB color')
132
+ * ```
133
+ */
134
+ get colors(): typeof colors {
135
+ return colors;
136
+ }
137
+
138
+ /**
139
+ * Gets the current color palette used for automatic color assignment.
140
+ *
141
+ * The color palette is a predefined set of hex colors that are automatically
142
+ * assigned to named entities in a cycling fashion. This ensures consistent
143
+ * color assignment across the application.
144
+ *
145
+ * @returns Array of hex color strings for automatic assignment
146
+ */
147
+ get colorPalette(): string[] {
148
+ return this.state.get("colorPalette")!;
149
+ }
150
+
151
+ /**
152
+ * Assigns a consistent color to a named entity.
153
+ *
154
+ * This method provides automatic color assignment that remains consistent across
155
+ * the application session. Each unique name gets assigned a color from the palette,
156
+ * and subsequent calls with the same name return the same color function.
157
+ *
158
+ * **Assignment Strategy:**
159
+ * - First call with a name assigns the next available palette color
160
+ * - Subsequent calls return the previously assigned color
161
+ * - Colors cycle through the palette when all colors are used
162
+ * - Returns a chalk hex color function for styling text
163
+ *
164
+ * @param name - The unique identifier to assign a color to
165
+ * @returns A chalk color function for styling text with the assigned color
166
+ *
167
+ * @example
168
+ * ```typescript
169
+ * // Assign colors to users
170
+ * const johnColor = ui.assignColor('john');
171
+ * const janeColor = ui.assignColor('jane');
172
+ *
173
+ * // Use consistently throughout the app
174
+ * console.log(johnColor('John: Hello there!'));
175
+ * console.log(janeColor('Jane: Hi John!'));
176
+ * console.log(johnColor('John: How are you?')); // Same color as before
177
+ *
178
+ * // Different entities get different colors
179
+ * const errorColor = ui.assignColor('error');
180
+ * const successColor = ui.assignColor('success');
181
+ * ```
182
+ */
183
+ assignColor(name: string): (str: string) => string {
184
+ const assignedCount = Object.keys(_assignedColors).length;
185
+
186
+ if (_assignedColors[name]) {
187
+ const assigned = _assignedColors[name];
188
+ return this.colors.hex(assigned);
189
+ } else {
190
+ const pickedColor =
191
+ this.colorPalette[assignedCount % this.colorPalette.length];
192
+ _assignedColors[name] = pickedColor!;
193
+ return this.colors.hex(pickedColor!);
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Gets a random color name from the available chalk colors.
199
+ *
200
+ * This provides access to a randomly selected color from chalk's built-in
201
+ * color set. Useful for adding variety to terminal output or testing.
202
+ *
203
+ * @returns A random color name that can be used with chalk
204
+ *
205
+ * @example
206
+ * ```typescript
207
+ * const randomColor = ui.randomColor;
208
+ * console.log(ui.colors[randomColor]('This text is a random color!'));
209
+ *
210
+ * // Use in loops for varied output
211
+ * items.forEach(item => {
212
+ * const color = ui.randomColor;
213
+ * console.log(ui.colors[color](`- ${item}`));
214
+ * });
215
+ * ```
216
+ */
217
+ get randomColor(): string | undefined {
218
+ const colors = Object.keys(this.colors);
219
+ const index = Math.floor(Math.random() * colors.length);
220
+
221
+ return colors[index];
222
+ }
223
+
224
+ /**
225
+ * Gets an array of available fonts for ASCII art generation.
226
+ *
227
+ * This method provides access to all fonts available through figlet for
228
+ * creating ASCII art. The fonts are automatically discovered and cached
229
+ * on first access for performance.
230
+ *
231
+ * **Font Discovery:**
232
+ * - Fonts are loaded from figlet's built-in font collection
233
+ * - Results are cached in state to avoid repeated file system access
234
+ * - Returns comprehensive list of available font names
235
+ *
236
+ * @returns Array of font names that can be used with asciiArt() and banner()
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * // List all available fonts
241
+ * const fonts = ui.fonts;
242
+ * console.log(`Available fonts: ${fonts.join(', ')}`);
243
+ *
244
+ * // Use random font for variety
245
+ * const randomFont = fonts[Math.floor(Math.random() * fonts.length)];
246
+ * const art = ui.asciiArt('Hello', randomFont);
247
+ *
248
+ * // Common fonts: 'Big', 'Standard', 'Small', 'Slant', '3D-ASCII'
249
+ * ```
250
+ */
251
+ get fonts(): string[] {
252
+ const fonts = this.state.get("fonts")! || [];
253
+
254
+ if (!fonts.length) {
255
+ this.state.set("fonts", fontNames);
256
+ }
257
+
258
+ return this.state.get("fonts")!;
259
+ }
260
+
261
+ /**
262
+ * Creates an interactive wizard using inquirer prompts.
263
+ *
264
+ * This method provides a convenient wrapper around inquirer for creating
265
+ * interactive command-line wizards. It supports all inquirer question types
266
+ * and can handle complex validation and conditional logic.
267
+ *
268
+ * **Supported Question Types:**
269
+ * - input: Text input fields
270
+ * - confirm: Yes/no confirmations
271
+ * - list: Single selection from options
272
+ * - checkbox: Multiple selections
273
+ * - password: Hidden text input
274
+ * - editor: External editor integration
275
+ *
276
+ * **Advanced Features:**
277
+ * - Conditional questions based on previous answers
278
+ * - Input validation and transformation
279
+ * - Custom prompts and styling
280
+ * - Initial answer pre-population
281
+ *
282
+ * @param questions - Array of inquirer question objects
283
+ * @param initialAnswers - Pre-populated answers to skip questions or provide defaults
284
+ * @returns Promise resolving to the user's answers object
285
+ *
286
+ * @example
287
+ * ```typescript
288
+ * // Basic wizard
289
+ * const answers = await ui.wizard([
290
+ * {
291
+ * type: 'input',
292
+ * name: 'projectName',
293
+ * message: 'What is your project name?',
294
+ * validate: (input) => input.length > 0 || 'Name is required'
295
+ * },
296
+ * {
297
+ * type: 'list',
298
+ * name: 'framework',
299
+ * message: 'Choose a framework:',
300
+ * choices: ['React', 'Vue', 'Angular', 'Svelte']
301
+ * },
302
+ * {
303
+ * type: 'confirm',
304
+ * name: 'typescript',
305
+ * message: 'Use TypeScript?',
306
+ * default: true
307
+ * }
308
+ * ]);
309
+ *
310
+ * console.log(`Creating ${answers.projectName} with ${answers.framework}`);
311
+ *
312
+ * // With initial answers
313
+ * const moreAnswers = await ui.wizard([
314
+ * { type: 'input', name: 'version', message: 'Version?' }
315
+ * ], { version: '1.0.0' });
316
+ * ```
317
+ */
318
+ wizard(questions: any[], initialAnswers: any = {}): Promise<any> {
319
+ return inquirer.createPromptModule()(questions, initialAnswers);
320
+ }
321
+
322
+ /**
323
+ * Prompt the user with a single text input question.
324
+ *
325
+ * @param question - The question message to display
326
+ * @returns Promise resolving to the answers object with a `question` key
327
+ */
328
+ askQuestion(question: string): Promise<any> {
329
+ return inquirer.createPromptModule()([{
330
+ type: 'input',
331
+ name: 'question',
332
+ message: question
333
+ }])
334
+ }
335
+
336
+ /**
337
+ * Opens text in the user's external editor for editing.
338
+ *
339
+ * This method integrates with the user's configured editor (via $EDITOR or $VISUAL
340
+ * environment variables) to allow editing of text content. The edited content is
341
+ * returned when the user saves and closes the editor.
342
+ *
343
+ * **Editor Integration:**
344
+ * - Respects $EDITOR and $VISUAL environment variables
345
+ * - Creates temporary file with specified extension
346
+ * - Returns modified content after editor closes
347
+ * - Handles editor cancellation gracefully
348
+ *
349
+ * @param text - The initial text content to edit
350
+ * @param extension - File extension for syntax highlighting (default: ".ts")
351
+ * @returns Promise resolving to the edited text content
352
+ *
353
+ * @example
354
+ * ```typescript
355
+ * // Edit code snippet
356
+ * const code = `function hello() {\n console.log('Hello');\n}`;
357
+ * const editedCode = await ui.openInEditor(code, '.js');
358
+ *
359
+ * // Edit configuration
360
+ * const config = JSON.stringify({ port: 3000 }, null, 2);
361
+ * const newConfig = await ui.openInEditor(config, '.json');
362
+ *
363
+ * // Edit markdown content
364
+ * const markdown = '# Title\n\nContent here...';
365
+ * const editedMarkdown = await ui.openInEditor(markdown, '.md');
366
+ * ```
367
+ */
368
+ async openInEditor(text: string, extension = ".ts"): Promise<unknown> {
369
+ const results = await new Promise((resolve, reject) => {
370
+ /*
371
+ editAsync(
372
+ text,
373
+ (err, result) => {
374
+ if (err) {
375
+ return reject(err);
376
+ }
377
+
378
+ return resolve(result);
379
+ },
380
+ {
381
+ postfix: extension,
382
+ }
383
+ );
384
+ */
385
+ });
386
+
387
+ return results;
388
+ }
389
+
390
+ /**
391
+ * Generates ASCII art from text using the specified font.
392
+ *
393
+ * This method converts regular text into stylized ASCII art using figlet's
394
+ * extensive font collection. Perfect for creating eye-catching headers,
395
+ * logos, and decorative text in terminal applications.
396
+ *
397
+ * **Font Capabilities:**
398
+ * - Large collection of artistic fonts
399
+ * - Various styles: block, script, decorative, technical
400
+ * - Different sizes and character sets
401
+ * - Consistent spacing and alignment
402
+ *
403
+ * @param text - The text to convert to ASCII art
404
+ * @param font - The figlet font to use (see fonts property for available options)
405
+ * @returns The ASCII art representation of the text
406
+ *
407
+ * @throws {Error} When the specified font is not available
408
+ *
409
+ * @example
410
+ * ```typescript
411
+ * // Create a banner
412
+ * const banner = ui.asciiArt('WELCOME', 'Big');
413
+ * console.log(banner);
414
+ *
415
+ * // Different fonts for different purposes
416
+ * const title = ui.asciiArt('MyApp', 'Standard');
417
+ * const subtitle = ui.asciiArt('v2.0', 'Small');
418
+ *
419
+ * // Technical/coding themes
420
+ * const code = ui.asciiArt('CODE', '3D-ASCII');
421
+ *
422
+ * // List available fonts first
423
+ * console.log('Available fonts:', ui.fonts.slice(0, 10).join(', '));
424
+ * ```
425
+ */
426
+ asciiArt(text: string, font: Fonts): string {
427
+ return figlet.textSync(text, font as any);
428
+ }
429
+
430
+ /**
431
+ * Creates a styled banner with ASCII art and color gradients.
432
+ *
433
+ * This method combines ASCII art generation with color gradient effects to create
434
+ * visually striking banners for terminal applications. It automatically applies
435
+ * color gradients to the generated ASCII art based on the specified options.
436
+ *
437
+ * **Banner Features:**
438
+ * - ASCII art text generation
439
+ * - Automatic color gradient application
440
+ * - Customizable gradient directions
441
+ * - Multiple color combinations
442
+ * - Professional terminal presentation
443
+ *
444
+ * @param text - The text to convert to a styled banner
445
+ * @param options - Banner styling options
446
+ * @param options.font - The figlet font to use for ASCII art generation
447
+ * @param options.colors - Array of colors for the gradient effect
448
+ * @returns The styled banner with ASCII art and color gradients
449
+ *
450
+ * @throws {Error} When required options are missing or invalid
451
+ *
452
+ * @example
453
+ * ```typescript
454
+ * // Classic patriotic banner
455
+ * const banner = ui.banner('AMERICA', {
456
+ * font: 'Big',
457
+ * colors: ['red', 'white', 'blue']
458
+ * });
459
+ * console.log(banner);
460
+ *
461
+ * // Tech company banner
462
+ * const techBanner = ui.banner('TechCorp', {
463
+ * font: 'Slant',
464
+ * colors: ['cyan', 'blue', 'magenta']
465
+ * });
466
+ *
467
+ * // Warning banner
468
+ * const warningBanner = ui.banner('WARNING', {
469
+ * font: 'Standard',
470
+ * colors: ['yellow', 'red']
471
+ * });
472
+ *
473
+ * // Available fonts: see ui.fonts property
474
+ * // Available colors: any chalk color names
475
+ * ```
476
+ */
477
+ banner(text: string, options: { font: Fonts; colors: Color[] } = { font: 'Star Wars', colors: ['red', 'white', 'blue'] }): string {
478
+ const art = this.asciiArt(text, options.font || 'Star Wars');
479
+ const colored = this.applyGradient(art, options.colors || ['red', 'white', 'blue']);
480
+
481
+ return colored;
482
+ }
483
+
484
+ /**
485
+ * Dedent and format a tagged template literal using endent.
486
+ * Strips leading indentation while preserving relative indentation.
487
+ *
488
+ * @param args - Tagged template literal arguments
489
+ * @returns The dedented string
490
+ */
491
+ endent(...args: any[]): string {
492
+ // @ts-ignore
493
+ return endent(...args)
494
+ }
495
+
496
+ /**
497
+ * Applies color gradients to text with configurable direction.
498
+ *
499
+ * This method creates smooth color transitions across text content, supporting
500
+ * both horizontal (character-by-character) and vertical (line-by-line) gradients.
501
+ * Perfect for creating visually appealing terminal output and ASCII art effects.
502
+ *
503
+ * **Gradient Types:**
504
+ * - Horizontal: Colors transition across characters in each line
505
+ * - Vertical: Colors transition across lines of text
506
+ * - Customizable color sequences and transitions
507
+ * - Automatic color cycling for long content
508
+ *
509
+ * @param text - The text content to apply gradients to
510
+ * @param lineColors - Array of colors to cycle through in the gradient
511
+ * @param direction - Gradient direction: 'horizontal' or 'vertical'
512
+ * @returns The text with applied color gradients
513
+ *
514
+ * @example
515
+ * ```typescript
516
+ * // Horizontal rainbow effect
517
+ * const rainbow = ui.applyGradient('Hello World!',
518
+ * ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta'],
519
+ * 'horizontal'
520
+ * );
521
+ *
522
+ * // Vertical gradient for multi-line text
523
+ * const multiline = 'Line 1\nLine 2\nLine 3\nLine 4';
524
+ * const vertical = ui.applyGradient(multiline,
525
+ * ['red', 'white', 'blue'],
526
+ * 'vertical'
527
+ * );
528
+ *
529
+ * // Fire effect
530
+ * const fire = ui.applyGradient('FIRE', ['red', 'yellow'], 'horizontal');
531
+ *
532
+ * // Ocean effect
533
+ * const ocean = ui.applyGradient('OCEAN', ['blue', 'cyan', 'white'], 'vertical');
534
+ * ```
535
+ */
536
+ applyGradient(
537
+ text: string,
538
+ lineColors: Color[] = ["red", "white", "blue"],
539
+ direction: "horizontal" | "vertical" = "horizontal"
540
+ ): string {
541
+ if (direction === "horizontal") {
542
+ return this.applyHorizontalGradient(text, lineColors);
543
+ }
544
+
545
+ return this.applyVerticalGradient(text, lineColors);
546
+ }
547
+
548
+ /**
549
+ * Applies horizontal color gradients character by character.
550
+ *
551
+ * This method creates color transitions across characters within the text,
552
+ * cycling through the provided colors to create smooth horizontal gradients.
553
+ * Each character gets assigned a color based on its position in the sequence.
554
+ *
555
+ * **Horizontal Gradient Behavior:**
556
+ * - Each character is individually colored
557
+ * - Colors cycle through the provided array
558
+ * - Creates smooth transitions across text width
559
+ * - Works well with ASCII art and single lines
560
+ *
561
+ * @param text - The text to apply horizontal gradients to
562
+ * @param lineColors - Array of colors to cycle through
563
+ * @returns Text with horizontal color gradients applied
564
+ *
565
+ * @example
566
+ * ```typescript
567
+ * // Rainbow effect across characters
568
+ * const rainbow = ui.applyHorizontalGradient('RAINBOW',
569
+ * ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta']
570
+ * );
571
+ *
572
+ * // Simple two-color transition
573
+ * const sunset = ui.applyHorizontalGradient('SUNSET', ['red', 'orange']);
574
+ *
575
+ * // Great for short text and ASCII art
576
+ * const art = ui.asciiArt('COOL', 'Big');
577
+ * const coloredArt = ui.applyHorizontalGradient(art, ['cyan', 'blue']);
578
+ * ```
579
+ */
580
+ applyHorizontalGradient(
581
+ text: string,
582
+ lineColors: Color[] = ["red", "white", "blue"]
583
+ ): string {
584
+ const gColors = Object.fromEntries(
585
+ lineColors.map((color) => [color, this.colors[color]])
586
+ );
587
+ const lines = text.split("");
588
+
589
+ const colored = lines.map((line, index) => {
590
+ const colorFn = gColors[lineColors[index % lineColors.length]!]!;
591
+ // @ts-ignore-next-line
592
+ return colorFn(line);
593
+ });
594
+
595
+ return colored.join("");
596
+ }
597
+
598
+ /**
599
+ * Applies vertical color gradients line by line.
600
+ *
601
+ * This method creates color transitions across lines of text, with each line
602
+ * getting a different color from the sequence. Perfect for multi-line content
603
+ * like ASCII art, banners, and structured output.
604
+ *
605
+ * **Vertical Gradient Behavior:**
606
+ * - Each line is colored uniformly
607
+ * - Colors cycle through the provided array
608
+ * - Creates smooth transitions across text height
609
+ * - Ideal for multi-line ASCII art and structured content
610
+ *
611
+ * @param text - The text to apply vertical gradients to (supports newlines)
612
+ * @param lineColors - Array of colors to cycle through for each line
613
+ * @returns Text with vertical color gradients applied
614
+ *
615
+ * @example
616
+ * ```typescript
617
+ * // Patriotic vertical gradient
618
+ * const flag = 'USA\nUSA\nUSA\nUSA';
619
+ * const patriotic = ui.applyVerticalGradient(flag, ['red', 'white', 'blue']);
620
+ *
621
+ * // Sunset effect on ASCII art
622
+ * const banner = ui.asciiArt('SUNSET', 'Big');
623
+ * const sunset = ui.applyVerticalGradient(banner,
624
+ * ['yellow', 'orange', 'red', 'purple']
625
+ * );
626
+ *
627
+ * // Ocean waves effect
628
+ * const waves = 'Wave 1\nWave 2\nWave 3\nWave 4\nWave 5';
629
+ * const ocean = ui.applyVerticalGradient(waves, ['cyan', 'blue']);
630
+ * ```
631
+ */
632
+ applyVerticalGradient(
633
+ text: string,
634
+ lineColors: Color[] = ["red", "white", "blue"]
635
+ ): string {
636
+ const gColors = Object.fromEntries(
637
+ lineColors.map((color) => [color, this.colors[color]])
638
+ );
639
+ const lines = text.split("\n");
640
+ const colored = lines.map((line, index) => {
641
+ const colorFn = gColors[lineColors[index % lineColors.length]!]!;
642
+ // @ts-ignore-next-line
643
+ return colorFn(line);
644
+ });
645
+
646
+ return colored.join("\n");
647
+ }
648
+
649
+ /**
650
+ * Pads text on the left to reach the specified length.
651
+ *
652
+ * This utility method adds padding characters to the left side of text to achieve
653
+ * a desired total length. Useful for creating aligned columns, formatted tables,
654
+ * and consistent text layout in terminal applications.
655
+ *
656
+ * **Padding Behavior:**
657
+ * - Adds padding to the left (start) of the string
658
+ * - Uses specified padding character (default: space)
659
+ * - Returns original string if already at or beyond target length
660
+ * - Handles multi-character padding by repeating the character
661
+ *
662
+ * @param str - The string to pad
663
+ * @param length - The desired total length after padding
664
+ * @param padChar - The character to use for padding (default: " ")
665
+ * @returns The left-padded string
666
+ *
667
+ * @example
668
+ * ```typescript
669
+ * // Number alignment
670
+ * const numbers = ['1', '23', '456'];
671
+ * numbers.forEach(num => {
672
+ * console.log(ui.padLeft(num, 5, '0')); // '00001', '00023', '00456'
673
+ * });
674
+ *
675
+ * // Text alignment in columns
676
+ * const items = ['apple', 'banana', 'cherry'];
677
+ * items.forEach(item => {
678
+ * console.log(ui.padLeft(item, 10) + ' | Price: $1.00');
679
+ * });
680
+ *
681
+ * // Custom padding character
682
+ * const title = ui.padLeft('TITLE', 20, '-'); // '---------------TITLE'
683
+ * ```
684
+ */
685
+ padLeft(str: string, length: number, padChar = " "): string {
686
+ if (str.length >= length) {
687
+ return str;
688
+ }
689
+
690
+ const padding = Array(length - str.length)
691
+ .fill(padChar)
692
+ .join("");
693
+
694
+ return padding + str;
695
+ }
696
+
697
+ /**
698
+ * Pads text on the right to reach the specified length.
699
+ *
700
+ * This utility method adds padding characters to the right side of text to achieve
701
+ * a desired total length. Essential for creating properly aligned columns, tables,
702
+ * and formatted output in terminal applications.
703
+ *
704
+ * **Padding Behavior:**
705
+ * - Adds padding to the right (end) of the string
706
+ * - Uses specified padding character (default: space)
707
+ * - Returns original string if already at or beyond target length
708
+ * - Handles multi-character padding by repeating the character
709
+ *
710
+ * @param str - The string to pad
711
+ * @param length - The desired total length after padding
712
+ * @param padChar - The character to use for padding (default: " ")
713
+ * @returns The right-padded string
714
+ *
715
+ * @example
716
+ * ```typescript
717
+ * // Create aligned table columns
718
+ * const data = [
719
+ * ['Name', 'Age', 'City'],
720
+ * ['John', '25', 'NYC'],
721
+ * ['Jane', '30', 'LA'],
722
+ * ['Bob', '35', 'Chicago']
723
+ * ];
724
+ *
725
+ * data.forEach(row => {
726
+ * const formatted = row.map((cell, i) => {
727
+ * const widths = [15, 5, 10];
728
+ * return ui.padRight(cell, widths[i]);
729
+ * }).join(' | ');
730
+ * console.log(formatted);
731
+ * });
732
+ *
733
+ * // Progress bars
734
+ * const progress = ui.padRight('████', 20, '░'); // '████░░░░░░░░░░░░░░░░'
735
+ *
736
+ * // Menu items with dots
737
+ * const menuItem = ui.padRight('Coffee', 20, '.') + '$3.50';
738
+ * ```
739
+ */
740
+ padRight(str: string, length: number, padChar = " "): string {
741
+ if (str.length >= length) {
742
+ return str;
743
+ }
744
+
745
+ const padding = Array(length - str.length)
746
+ .fill(padChar)
747
+ .join("");
748
+ return str + padding;
749
+ }
750
+ }
751
+
752
+ export default UI
753
+ /**
754
+ * Predefined color palette for automatic color assignment.
755
+ *
756
+ * This carefully curated palette provides visually distinct colors that work well
757
+ * in terminal environments. Colors are chosen for readability, contrast, and
758
+ * aesthetic appeal across different terminal themes.
759
+ *
760
+ * **Palette Characteristics:**
761
+ * - 16 distinct hex colors
762
+ * - Good contrast on both light and dark backgrounds
763
+ * - Balanced saturation and brightness
764
+ * - Accessible color combinations
765
+ * - Professional appearance
766
+ *
767
+ * @constant
768
+ */
769
+ const ASSIGNABLE_COLORS = [
770
+ "#FF6B6B",
771
+ "#FFD166",
772
+ "#4ECDC4",
773
+ "#54C6EB",
774
+ "#A3D9FF",
775
+ "#88D498",
776
+ "#9C89B8",
777
+ "#F08A5D",
778
+ "#B83B5E",
779
+ "#6A2C70",
780
+ "#F38181",
781
+ "#95E1D3",
782
+ "#EAFDE6",
783
+ "#FCE38A",
784
+ "#EAFFD0",
785
+ "#BDE4F4",
786
+ ];