luca 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/.github/workflows/release.yaml +1 -0
  2. package/CLAUDE.md +10 -2
  3. package/README.md +130 -112
  4. package/assistants/codingAssistant/CORE.md +6 -1
  5. package/assistants/codingAssistant/hooks.ts +1 -1
  6. package/assistants/inkbot/hooks.ts +1 -1
  7. package/assistants/inkbot/tools.ts +1 -1
  8. package/bun.lock +220 -322
  9. package/commands/audit-docs.ts +2 -2
  10. package/commands/build-bootstrap.ts +2 -3
  11. package/commands/build-python-bridge.ts +2 -3
  12. package/commands/build-scaffolds.ts +2 -3
  13. package/commands/bundle-consumer-project.ts +521 -0
  14. package/commands/generate-api-docs.ts +2 -2
  15. package/commands/inkbot.ts +2 -2
  16. package/commands/release.ts +2 -2
  17. package/commands/try-all-challenges.ts +3 -3
  18. package/commands/try-challenge.ts +3 -3
  19. package/dist/agi/container.server.d.ts +2 -2
  20. package/dist/agi/features/assistant.d.ts +2 -2
  21. package/dist/agi/features/assistants-manager.d.ts +1 -1
  22. package/dist/agi/features/autonomous-assistant.d.ts +1 -1
  23. package/dist/agi/features/browser-use.d.ts +1 -1
  24. package/dist/agi/features/claude-code.d.ts +1 -1
  25. package/dist/agi/features/conversation-history.d.ts +2 -2
  26. package/dist/agi/features/conversation.d.ts +1 -1
  27. package/dist/agi/features/docs-reader.d.ts +1 -1
  28. package/dist/agi/features/file-tools.d.ts +1 -1
  29. package/dist/agi/features/luca-coder.d.ts +1 -1
  30. package/dist/agi/features/openai-codex.d.ts +1 -1
  31. package/dist/agi/features/skills-library.d.ts +1 -1
  32. package/dist/clients/civitai/index.d.ts +4 -4
  33. package/dist/clients/client-template.d.ts +4 -4
  34. package/dist/clients/comfyui/index.d.ts +2 -2
  35. package/dist/clients/elevenlabs/index.d.ts +2 -2
  36. package/dist/clients/openai/index.d.ts +2 -2
  37. package/dist/clients/supabase/index.d.ts +3 -3
  38. package/dist/command.d.ts +1 -1
  39. package/dist/node/container.d.ts +1 -1
  40. package/dist/node/features/helpers.d.ts +3 -3
  41. package/dist/node/features/semantic-search.d.ts +1 -1
  42. package/dist/node/features/vm.d.ts +3 -3
  43. package/dist/node.d.ts +1 -1
  44. package/dist/scaffolds/generated.d.ts +1 -1
  45. package/dist/selector.d.ts +1 -1
  46. package/index.html +217 -190
  47. package/luca.console.ts +1 -1
  48. package/package.json +2 -2
  49. package/public/index.html +217 -190
  50. package/public/slides-ai-native.html +1 -1
  51. package/public/slides-intro.html +2 -2
  52. package/scripts/examples/ask-luca-expert.ts +1 -1
  53. package/scripts/examples/assistant-questions.ts +1 -1
  54. package/scripts/examples/excalidraw-expert.ts +1 -1
  55. package/scripts/examples/file-manager.ts +1 -1
  56. package/scripts/examples/ideas.ts +1 -1
  57. package/scripts/examples/interactive-chat.ts +1 -1
  58. package/scripts/examples/opening-a-web-browser.ts +1 -1
  59. package/scripts/examples/telegram-bot.ts +1 -1
  60. package/scripts/examples/using-assistant-with-mcp.ts +1 -1
  61. package/scripts/examples/using-claude-code.ts +1 -1
  62. package/scripts/examples/using-contentdb.ts +2 -2
  63. package/scripts/examples/using-conversations.ts +1 -1
  64. package/scripts/examples/using-disk-cache.ts +1 -1
  65. package/scripts/examples/using-docker-shell.ts +1 -1
  66. package/scripts/examples/using-elevenlabs.ts +1 -1
  67. package/scripts/examples/using-google-calendar.ts +1 -1
  68. package/scripts/examples/using-google-docs.ts +1 -1
  69. package/scripts/examples/using-google-drive.ts +1 -1
  70. package/scripts/examples/using-google-sheets.ts +1 -1
  71. package/scripts/examples/using-nlp.ts +1 -1
  72. package/scripts/examples/using-ollama.ts +1 -1
  73. package/scripts/examples/using-postgres.ts +1 -1
  74. package/scripts/examples/using-runpod.ts +1 -1
  75. package/scripts/examples/using-tts.ts +1 -1
  76. package/scripts/scaffold.ts +5 -5
  77. package/scripts/scratch.ts +1 -1
  78. package/scripts/test-assistant-hooks.ts +1 -1
  79. package/scripts/test-docs-reader.ts +1 -1
  80. package/src/agi/container.server.ts +6 -2
  81. package/src/agi/features/agent-memory.ts +25 -25
  82. package/src/agi/features/assistant.ts +34 -5
  83. package/src/agi/features/assistants-manager.ts +122 -6
  84. package/src/agi/features/autonomous-assistant.ts +1 -1
  85. package/src/agi/features/browser-use.ts +20 -1
  86. package/src/agi/features/claude-code.ts +51 -5
  87. package/src/agi/features/coding-tools.ts +1 -1
  88. package/src/agi/features/conversation-history.ts +181 -4
  89. package/src/agi/features/conversation.ts +186 -15
  90. package/src/agi/features/docs-reader.ts +2 -2
  91. package/src/agi/features/file-tools.ts +49 -2
  92. package/src/agi/features/luca-coder.ts +7 -5
  93. package/src/agi/features/mcp-bridge.ts +532 -0
  94. package/src/agi/features/openai-codex.ts +2 -2
  95. package/src/agi/features/skills-library.ts +131 -52
  96. package/src/agi/lib/token-counter.ts +80 -0
  97. package/src/bootstrap/generated.ts +56 -57
  98. package/src/browser.ts +1 -1
  99. package/src/cli/build-info.ts +2 -2
  100. package/src/cli/cli.ts +2 -2
  101. package/src/clients/civitai/index.ts +5 -5
  102. package/src/clients/client-template.ts +4 -4
  103. package/src/clients/comfyui/index.ts +4 -4
  104. package/src/clients/elevenlabs/index.ts +4 -4
  105. package/src/clients/openai/index.ts +7 -7
  106. package/src/clients/supabase/index.ts +4 -4
  107. package/src/clients/voicebox/index.ts +4 -4
  108. package/src/command.ts +2 -1
  109. package/src/commands/chat.ts +1 -0
  110. package/src/commands/eval.ts +2 -56
  111. package/src/commands/introspect.ts +1 -1
  112. package/src/commands/prompt.ts +41 -9
  113. package/src/container-describer.ts +8 -1
  114. package/src/container.ts +13 -0
  115. package/src/entity.ts +2 -2
  116. package/src/helper.ts +1 -1
  117. package/src/introspection/generated.agi.ts +28563 -27571
  118. package/src/introspection/generated.node.ts +20281 -20194
  119. package/src/introspection/generated.web.ts +605 -584
  120. package/src/introspection/scan.ts +11 -6
  121. package/src/node/container.ts +1 -1
  122. package/src/node/features/content-db.ts +39 -2
  123. package/src/node/features/display-result.ts +57 -0
  124. package/src/node/features/helpers.ts +42 -15
  125. package/src/node/features/python.ts +25 -19
  126. package/src/node/features/repl.ts +1 -1
  127. package/src/node/features/secure-shell.ts +11 -17
  128. package/src/node/features/semantic-search.ts +2 -2
  129. package/src/node/features/transpiler.ts +2 -3
  130. package/src/node/features/ui.ts +5 -0
  131. package/src/node/features/vm.ts +3 -3
  132. package/src/node.ts +3 -3
  133. package/src/python/generated.ts +0 -1
  134. package/src/scaffolds/generated.ts +82 -83
  135. package/src/selector.ts +1 -1
  136. package/src/servers/express.ts +1 -1
  137. package/src/web/features/helpers.ts +22 -0
  138. package/tsconfig.json +12 -12
  139. package/docs/CLI.md +0 -335
  140. package/docs/CNAME +0 -1
  141. package/docs/README.md +0 -60
  142. package/docs/TABLE-OF-CONTENTS.md +0 -183
  143. package/docs/apis/clients/elevenlabs.md +0 -308
  144. package/docs/apis/clients/graph.md +0 -107
  145. package/docs/apis/clients/openai.md +0 -429
  146. package/docs/apis/clients/rest.md +0 -161
  147. package/docs/apis/clients/websocket.md +0 -174
  148. package/docs/apis/features/agi/assistant.md +0 -625
  149. package/docs/apis/features/agi/assistants-manager.md +0 -282
  150. package/docs/apis/features/agi/auto-assistant.md +0 -279
  151. package/docs/apis/features/agi/browser-use.md +0 -802
  152. package/docs/apis/features/agi/claude-code.md +0 -884
  153. package/docs/apis/features/agi/conversation-history.md +0 -364
  154. package/docs/apis/features/agi/conversation.md +0 -548
  155. package/docs/apis/features/agi/docs-reader.md +0 -99
  156. package/docs/apis/features/agi/file-tools.md +0 -163
  157. package/docs/apis/features/agi/luca-coder.md +0 -407
  158. package/docs/apis/features/agi/openai-codex.md +0 -396
  159. package/docs/apis/features/agi/openapi.md +0 -138
  160. package/docs/apis/features/agi/semantic-search.md +0 -387
  161. package/docs/apis/features/agi/skills-library.md +0 -239
  162. package/docs/apis/features/node/container-link.md +0 -192
  163. package/docs/apis/features/node/content-db.md +0 -450
  164. package/docs/apis/features/node/disk-cache.md +0 -379
  165. package/docs/apis/features/node/dns.md +0 -652
  166. package/docs/apis/features/node/docker.md +0 -706
  167. package/docs/apis/features/node/downloader.md +0 -81
  168. package/docs/apis/features/node/esbuild.md +0 -60
  169. package/docs/apis/features/node/file-manager.md +0 -191
  170. package/docs/apis/features/node/fs.md +0 -1217
  171. package/docs/apis/features/node/git.md +0 -371
  172. package/docs/apis/features/node/google-auth.md +0 -193
  173. package/docs/apis/features/node/google-calendar.md +0 -202
  174. package/docs/apis/features/node/google-docs.md +0 -173
  175. package/docs/apis/features/node/google-drive.md +0 -246
  176. package/docs/apis/features/node/google-mail.md +0 -214
  177. package/docs/apis/features/node/google-sheets.md +0 -194
  178. package/docs/apis/features/node/grep.md +0 -292
  179. package/docs/apis/features/node/helpers.md +0 -164
  180. package/docs/apis/features/node/ink.md +0 -334
  181. package/docs/apis/features/node/ipc-socket.md +0 -249
  182. package/docs/apis/features/node/json-tree.md +0 -86
  183. package/docs/apis/features/node/networking.md +0 -316
  184. package/docs/apis/features/node/nlp.md +0 -133
  185. package/docs/apis/features/node/opener.md +0 -97
  186. package/docs/apis/features/node/os.md +0 -146
  187. package/docs/apis/features/node/package-finder.md +0 -392
  188. package/docs/apis/features/node/postgres.md +0 -234
  189. package/docs/apis/features/node/proc.md +0 -399
  190. package/docs/apis/features/node/process-manager.md +0 -305
  191. package/docs/apis/features/node/python.md +0 -604
  192. package/docs/apis/features/node/redis.md +0 -380
  193. package/docs/apis/features/node/repl.md +0 -88
  194. package/docs/apis/features/node/runpod.md +0 -674
  195. package/docs/apis/features/node/secure-shell.md +0 -176
  196. package/docs/apis/features/node/semantic-search.md +0 -408
  197. package/docs/apis/features/node/sqlite.md +0 -233
  198. package/docs/apis/features/node/telegram.md +0 -279
  199. package/docs/apis/features/node/transpiler.md +0 -74
  200. package/docs/apis/features/node/tts.md +0 -133
  201. package/docs/apis/features/node/ui.md +0 -701
  202. package/docs/apis/features/node/vault.md +0 -59
  203. package/docs/apis/features/node/vm.md +0 -75
  204. package/docs/apis/features/node/yaml-tree.md +0 -85
  205. package/docs/apis/features/node/yaml.md +0 -176
  206. package/docs/apis/features/web/asset-loader.md +0 -59
  207. package/docs/apis/features/web/container-link.md +0 -192
  208. package/docs/apis/features/web/esbuild.md +0 -54
  209. package/docs/apis/features/web/helpers.md +0 -164
  210. package/docs/apis/features/web/network.md +0 -44
  211. package/docs/apis/features/web/speech.md +0 -69
  212. package/docs/apis/features/web/vault.md +0 -59
  213. package/docs/apis/features/web/vm.md +0 -75
  214. package/docs/apis/features/web/voice.md +0 -84
  215. package/docs/apis/servers/express.md +0 -171
  216. package/docs/apis/servers/mcp.md +0 -238
  217. package/docs/apis/servers/websocket.md +0 -170
  218. package/docs/bootstrap/CLAUDE.md +0 -101
  219. package/docs/bootstrap/SKILL.md +0 -341
  220. package/docs/bootstrap/templates/about-command.ts +0 -41
  221. package/docs/bootstrap/templates/docs-models.ts +0 -22
  222. package/docs/bootstrap/templates/docs-readme.md +0 -43
  223. package/docs/bootstrap/templates/example-feature.ts +0 -53
  224. package/docs/bootstrap/templates/health-endpoint.ts +0 -15
  225. package/docs/bootstrap/templates/luca-cli.ts +0 -30
  226. package/docs/bootstrap/templates/runme.md +0 -54
  227. package/docs/challenges/caching-proxy.md +0 -16
  228. package/docs/challenges/content-db-round-trip.md +0 -14
  229. package/docs/challenges/custom-command.md +0 -9
  230. package/docs/challenges/file-watcher-pipeline.md +0 -11
  231. package/docs/challenges/grep-audit-report.md +0 -15
  232. package/docs/challenges/multi-feature-dashboard.md +0 -14
  233. package/docs/challenges/process-orchestrator.md +0 -17
  234. package/docs/challenges/rest-api-server-with-client.md +0 -12
  235. package/docs/challenges/script-runner-with-vm.md +0 -11
  236. package/docs/challenges/simple-rest-api.md +0 -15
  237. package/docs/challenges/websocket-serve-and-client.md +0 -11
  238. package/docs/challenges/yaml-config-system.md +0 -14
  239. package/docs/command-system-overhaul.md +0 -94
  240. package/docs/documentation-audit.md +0 -134
  241. package/docs/examples/assistant/CORE.md +0 -18
  242. package/docs/examples/assistant/hooks.ts +0 -3
  243. package/docs/examples/assistant/tools.ts +0 -10
  244. package/docs/examples/assistant-hooks-reference.ts +0 -171
  245. package/docs/examples/assistant-with-process-manager.md +0 -84
  246. package/docs/examples/content-db.md +0 -77
  247. package/docs/examples/disk-cache.md +0 -83
  248. package/docs/examples/docker.md +0 -101
  249. package/docs/examples/downloader.md +0 -70
  250. package/docs/examples/entity.md +0 -124
  251. package/docs/examples/esbuild.md +0 -80
  252. package/docs/examples/feature-as-tool-provider.md +0 -143
  253. package/docs/examples/file-manager.md +0 -82
  254. package/docs/examples/fs.md +0 -83
  255. package/docs/examples/git.md +0 -85
  256. package/docs/examples/google-auth.md +0 -88
  257. package/docs/examples/google-calendar.md +0 -94
  258. package/docs/examples/google-docs.md +0 -82
  259. package/docs/examples/google-drive.md +0 -96
  260. package/docs/examples/google-sheets.md +0 -95
  261. package/docs/examples/grep.md +0 -85
  262. package/docs/examples/ink-blocks.md +0 -75
  263. package/docs/examples/ink-renderer.md +0 -41
  264. package/docs/examples/ink.md +0 -103
  265. package/docs/examples/ipc-socket.md +0 -103
  266. package/docs/examples/json-tree.md +0 -91
  267. package/docs/examples/networking.md +0 -58
  268. package/docs/examples/nlp.md +0 -91
  269. package/docs/examples/opener.md +0 -78
  270. package/docs/examples/os.md +0 -72
  271. package/docs/examples/package-finder.md +0 -89
  272. package/docs/examples/postgres.md +0 -91
  273. package/docs/examples/proc.md +0 -81
  274. package/docs/examples/process-manager.md +0 -79
  275. package/docs/examples/python.md +0 -132
  276. package/docs/examples/repl.md +0 -93
  277. package/docs/examples/runpod.md +0 -119
  278. package/docs/examples/secure-shell.md +0 -92
  279. package/docs/examples/sqlite.md +0 -86
  280. package/docs/examples/structured-output-with-assistants.md +0 -144
  281. package/docs/examples/telegram.md +0 -77
  282. package/docs/examples/tts.md +0 -86
  283. package/docs/examples/ui.md +0 -80
  284. package/docs/examples/vault.md +0 -70
  285. package/docs/examples/vm.md +0 -86
  286. package/docs/examples/websocket-ask-and-reply-example.md +0 -128
  287. package/docs/examples/yaml-tree.md +0 -93
  288. package/docs/examples/yaml.md +0 -104
  289. package/docs/ideas/assistant-factory-pattern.md +0 -142
  290. package/docs/in-memory-fs.md +0 -4
  291. package/docs/introspection-audit.md +0 -49
  292. package/docs/introspection.md +0 -164
  293. package/docs/mcp/readme.md +0 -162
  294. package/docs/models.ts +0 -41
  295. package/docs/philosophy.md +0 -86
  296. package/docs/principles.md +0 -7
  297. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +0 -34
  298. package/docs/prompts/check-for-undocumented-features.md +0 -27
  299. package/docs/prompts/mcp-test-easy-command.md +0 -27
  300. package/docs/scaffolds/client.md +0 -149
  301. package/docs/scaffolds/command.md +0 -120
  302. package/docs/scaffolds/endpoint.md +0 -171
  303. package/docs/scaffolds/feature.md +0 -158
  304. package/docs/scaffolds/selector.md +0 -91
  305. package/docs/scaffolds/server.md +0 -196
  306. package/docs/selectors.md +0 -115
  307. package/docs/sessions/custom-command/attempt-log-2.md +0 -195
  308. package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +0 -728
  309. package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +0 -555
  310. package/docs/sessions/grep-audit-report/attempt-log-1.md +0 -289
  311. package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +0 -679
  312. package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +0 -1
  313. package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +0 -920
  314. package/docs/sessions/simple-rest-api/attempt-log-1.md +0 -593
  315. package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +0 -995
  316. package/docs/tutorials/00-bootstrap.md +0 -166
  317. package/docs/tutorials/01-getting-started.md +0 -106
  318. package/docs/tutorials/02-container.md +0 -210
  319. package/docs/tutorials/03-scripts.md +0 -194
  320. package/docs/tutorials/04-features-overview.md +0 -196
  321. package/docs/tutorials/05-state-and-events.md +0 -171
  322. package/docs/tutorials/06-servers.md +0 -157
  323. package/docs/tutorials/07-endpoints.md +0 -198
  324. package/docs/tutorials/08-commands.md +0 -252
  325. package/docs/tutorials/09-clients.md +0 -162
  326. package/docs/tutorials/10-creating-features.md +0 -203
  327. package/docs/tutorials/11-contentbase.md +0 -191
  328. package/docs/tutorials/12-assistants.md +0 -215
  329. package/docs/tutorials/13-introspection.md +0 -157
  330. package/docs/tutorials/14-type-system.md +0 -174
  331. package/docs/tutorials/15-project-patterns.md +0 -222
  332. package/docs/tutorials/16-google-features.md +0 -534
  333. package/docs/tutorials/17-tui-blocks.md +0 -530
  334. package/docs/tutorials/18-semantic-search.md +0 -334
  335. package/docs/tutorials/19-python-sessions.md +0 -401
  336. package/docs/tutorials/20-browser-esm.md +0 -234
  337. package/src/agi/endpoints/ask.ts +0 -60
  338. package/src/agi/endpoints/conversations/[id].ts +0 -45
  339. package/src/agi/endpoints/conversations.ts +0 -31
  340. package/src/agi/endpoints/experts.ts +0 -37
  341. package/test/assistant-hooks.test.ts +0 -306
  342. package/test/assistant.test.ts +0 -81
  343. package/test/bus.test.ts +0 -134
  344. package/test/clients-servers.test.ts +0 -217
  345. package/test/command.test.ts +0 -267
  346. package/test/container-link.test.ts +0 -274
  347. package/test/conversation.test.ts +0 -220
  348. package/test/features.test.ts +0 -160
  349. package/test/fork-and-research.test.ts +0 -450
  350. package/test/integration.test.ts +0 -787
  351. package/test/interceptor-chain.test.ts +0 -61
  352. package/test/node-container.test.ts +0 -121
  353. package/test/python-session.test.ts +0 -105
  354. package/test/rate-limit.test.ts +0 -272
  355. package/test/semantic-search.test.ts +0 -550
  356. package/test/state.test.ts +0 -121
  357. package/test/vm-context.test.ts +0 -146
  358. package/test/vm-loadmodule.test.ts +0 -213
  359. package/test/websocket-ask.test.ts +0 -101
  360. package/test-integration/assistant.test.ts +0 -138
  361. package/test-integration/assistants-manager.test.ts +0 -113
  362. package/test-integration/claude-code.test.ts +0 -98
  363. package/test-integration/conversation-history.test.ts +0 -205
  364. package/test-integration/conversation.test.ts +0 -137
  365. package/test-integration/elevenlabs.test.ts +0 -55
  366. package/test-integration/google-services.test.ts +0 -80
  367. package/test-integration/helpers.ts +0 -89
  368. package/test-integration/memory.test.ts +0 -204
  369. package/test-integration/openai-codex.test.ts +0 -93
  370. package/test-integration/runpod.test.ts +0 -58
  371. package/test-integration/server-endpoints.test.ts +0 -97
  372. package/test-integration/telegram.test.ts +0 -46
@@ -1,701 +0,0 @@
1
- # UI (features.ui)
2
-
3
- UI Feature - Interactive Terminal User Interface Builder Unified interface for building professional CLI experiences using chalk (colors/styles), figlet (ASCII art), and inquirer (interactive prompts). Provides rich color management, automatic color assignment, text gradients, banner generation, padding utilities, markdown rendering, and interactive wizards.
4
-
5
- ## Usage
6
-
7
- ```ts
8
- container.feature('ui')
9
- ```
10
-
11
- ## Methods
12
-
13
- ### markdown
14
-
15
- Parse markdown text and render it for terminal display using marked-terminal.
16
-
17
- **Parameters:**
18
-
19
- | Name | Type | Required | Description |
20
- |------|------|----------|-------------|
21
- | `text` | `string` | ✓ | The markdown string to parse and render |
22
-
23
- **Returns:** `string | Promise<string>`
24
-
25
-
26
-
27
- ### assignColor
28
-
29
- Assigns a consistent color to a named entity. This method provides automatic color assignment that remains consistent across the application session. Each unique name gets assigned a color from the palette, and subsequent calls with the same name return the same color function. **Assignment Strategy:** - First call with a name assigns the next available palette color - Subsequent calls return the previously assigned color - Colors cycle through the palette when all colors are used - Returns a chalk hex color function for styling text
30
-
31
- **Parameters:**
32
-
33
- | Name | Type | Required | Description |
34
- |------|------|----------|-------------|
35
- | `name` | `string` | ✓ | The unique identifier to assign a color to |
36
-
37
- **Returns:** `(str: string) => string`
38
-
39
- ```ts
40
- // Assign colors to users
41
- const johnColor = ui.assignColor('john');
42
- const janeColor = ui.assignColor('jane');
43
-
44
- // Use consistently throughout the app
45
- console.log(johnColor('John: Hello there!'));
46
- console.log(janeColor('Jane: Hi John!'));
47
- console.log(johnColor('John: How are you?')); // Same color as before
48
-
49
- // Different entities get different colors
50
- const errorColor = ui.assignColor('error');
51
- const successColor = ui.assignColor('success');
52
- ```
53
-
54
-
55
-
56
- ### wizard
57
-
58
- Creates an interactive wizard using inquirer prompts. This method provides a convenient wrapper around inquirer for creating interactive command-line wizards. It supports all inquirer question types and can handle complex validation and conditional logic. **Supported Question Types:** - input: Text input fields - confirm: Yes/no confirmations - list: Single selection from options - checkbox: Multiple selections - password: Hidden text input - editor: External editor integration **Advanced Features:** - Conditional questions based on previous answers - Input validation and transformation - Custom prompts and styling - Initial answer pre-population
59
-
60
- **Parameters:**
61
-
62
- | Name | Type | Required | Description |
63
- |------|------|----------|-------------|
64
- | `questions` | `any[]` | ✓ | Array of inquirer question objects |
65
- | `initialAnswers` | `any` | | Pre-populated answers to skip questions or provide defaults |
66
-
67
- **Returns:** `Promise<any>`
68
-
69
- ```ts
70
- // Basic wizard
71
- const answers = await ui.wizard([
72
- {
73
- type: 'input',
74
- name: 'projectName',
75
- message: 'What is your project name?',
76
- validate: (input) => input.length > 0 || 'Name is required'
77
- },
78
- {
79
- type: 'list',
80
- name: 'framework',
81
- message: 'Choose a framework:',
82
- choices: ['React', 'Vue', 'Angular', 'Svelte']
83
- },
84
- {
85
- type: 'confirm',
86
- name: 'typescript',
87
- message: 'Use TypeScript?',
88
- default: true
89
- }
90
- ]);
91
-
92
- console.log(`Creating ${answers.projectName} with ${answers.framework}`);
93
-
94
- // With initial answers
95
- const moreAnswers = await ui.wizard([
96
- { type: 'input', name: 'version', message: 'Version?' }
97
- ], { version: '1.0.0' });
98
- ```
99
-
100
-
101
-
102
- ### askQuestion
103
-
104
- Prompt the user with a single text input question.
105
-
106
- **Parameters:**
107
-
108
- | Name | Type | Required | Description |
109
- |------|------|----------|-------------|
110
- | `question` | `string` | ✓ | The question message to display |
111
-
112
- **Returns:** `Promise<any>`
113
-
114
-
115
-
116
- ### openInEditor
117
-
118
- Opens text in the user's external editor for editing. This method integrates with the user's configured editor (via $EDITOR or $VISUAL environment variables) to allow editing of text content. The edited content is returned when the user saves and closes the editor. **Editor Integration:** - Respects $EDITOR and $VISUAL environment variables - Creates temporary file with specified extension - Returns modified content after editor closes - Handles editor cancellation gracefully
119
-
120
- **Parameters:**
121
-
122
- | Name | Type | Required | Description |
123
- |------|------|----------|-------------|
124
- | `text` | `string` | ✓ | The initial text content to edit |
125
- | `extension` | `any` | | File extension for syntax highlighting (default: ".ts") |
126
-
127
- **Returns:** `Promise<unknown>`
128
-
129
- ```ts
130
- // Edit code snippet
131
- const code = `function hello() {\n console.log('Hello');\n}`;
132
- const editedCode = await ui.openInEditor(code, '.js');
133
-
134
- // Edit configuration
135
- const config = JSON.stringify({ port: 3000 }, null, 2);
136
- const newConfig = await ui.openInEditor(config, '.json');
137
-
138
- // Edit markdown content
139
- const markdown = '# Title\n\nContent here...';
140
- const editedMarkdown = await ui.openInEditor(markdown, '.md');
141
- ```
142
-
143
-
144
-
145
- ### asciiArt
146
-
147
- Generates ASCII art from text using the specified font. This method converts regular text into stylized ASCII art using figlet's extensive font collection. Perfect for creating eye-catching headers, logos, and decorative text in terminal applications. **Font Capabilities:** - Large collection of artistic fonts - Various styles: block, script, decorative, technical - Different sizes and character sets - Consistent spacing and alignment
148
-
149
- **Parameters:**
150
-
151
- | Name | Type | Required | Description |
152
- |------|------|----------|-------------|
153
- | `text` | `string` | ✓ | The text to convert to ASCII art |
154
- | `font` | `Fonts` | ✓ | The figlet font to use (see fonts property for available options) |
155
-
156
- **Returns:** `string`
157
-
158
- ```ts
159
- // Create a banner
160
- const banner = ui.asciiArt('WELCOME', 'Big');
161
- console.log(banner);
162
-
163
- // Different fonts for different purposes
164
- const title = ui.asciiArt('MyApp', 'Standard');
165
- const subtitle = ui.asciiArt('v2.0', 'Small');
166
-
167
- // Technical/coding themes
168
- const code = ui.asciiArt('CODE', '3D-ASCII');
169
-
170
- // List available fonts first
171
- console.log('Available fonts:', ui.fonts.slice(0, 10).join(', '));
172
- ```
173
-
174
-
175
-
176
- ### banner
177
-
178
- Creates a styled banner with ASCII art and color gradients. This method combines ASCII art generation with color gradient effects to create visually striking banners for terminal applications. It automatically applies color gradients to the generated ASCII art based on the specified options. **Banner Features:** - ASCII art text generation - Automatic color gradient application - Customizable gradient directions - Multiple color combinations - Professional terminal presentation
179
-
180
- **Parameters:**
181
-
182
- | Name | Type | Required | Description |
183
- |------|------|----------|-------------|
184
- | `text` | `string` | ✓ | The text to convert to a styled banner |
185
- | `options` | `{ font: Fonts; colors: Color[] }` | | Banner styling options |
186
-
187
- `{ font: Fonts; colors: Color[] }` properties:
188
-
189
- | Property | Type | Description |
190
- |----------|------|-------------|
191
- | `font` | `any` | The figlet font to use for ASCII art generation |
192
- | `colors` | `any` | Array of colors for the gradient effect |
193
-
194
- **Returns:** `string`
195
-
196
- ```ts
197
- // Classic patriotic banner
198
- const banner = ui.banner('AMERICA', {
199
- font: 'Big',
200
- colors: ['red', 'white', 'blue']
201
- });
202
- console.log(banner);
203
-
204
- // Tech company banner
205
- const techBanner = ui.banner('TechCorp', {
206
- font: 'Slant',
207
- colors: ['cyan', 'blue', 'magenta']
208
- });
209
-
210
- // Warning banner
211
- const warningBanner = ui.banner('WARNING', {
212
- font: 'Standard',
213
- colors: ['yellow', 'red']
214
- });
215
-
216
- // Available fonts: see ui.fonts property
217
- // Available colors: any chalk color names
218
- ```
219
-
220
-
221
-
222
- ### endent
223
-
224
- Dedent and format a tagged template literal using endent. Strips leading indentation while preserving relative indentation.
225
-
226
- **Parameters:**
227
-
228
- | Name | Type | Required | Description |
229
- |------|------|----------|-------------|
230
- | `args` | `any[]` | ✓ | Tagged template literal arguments |
231
-
232
- **Returns:** `string`
233
-
234
-
235
-
236
- ### applyGradient
237
-
238
- Applies color gradients to text with configurable direction. This method creates smooth color transitions across text content, supporting both horizontal (character-by-character) and vertical (line-by-line) gradients. Perfect for creating visually appealing terminal output and ASCII art effects. **Gradient Types:** - Horizontal: Colors transition across characters in each line - Vertical: Colors transition across lines of text - Customizable color sequences and transitions - Automatic color cycling for long content
239
-
240
- **Parameters:**
241
-
242
- | Name | Type | Required | Description |
243
- |------|------|----------|-------------|
244
- | `text` | `string` | ✓ | The text content to apply gradients to |
245
- | `lineColors` | `Color[]` | | Array of colors to cycle through in the gradient |
246
- | `direction` | `"horizontal" | "vertical"` | | Gradient direction: 'horizontal' or 'vertical' |
247
-
248
- **Returns:** `string`
249
-
250
- ```ts
251
- // Horizontal rainbow effect
252
- const rainbow = ui.applyGradient('Hello World!',
253
- ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta'],
254
- 'horizontal'
255
- );
256
-
257
- // Vertical gradient for multi-line text
258
- const multiline = 'Line 1\nLine 2\nLine 3\nLine 4';
259
- const vertical = ui.applyGradient(multiline,
260
- ['red', 'white', 'blue'],
261
- 'vertical'
262
- );
263
-
264
- // Fire effect
265
- const fire = ui.applyGradient('FIRE', ['red', 'yellow'], 'horizontal');
266
-
267
- // Ocean effect
268
- const ocean = ui.applyGradient('OCEAN', ['blue', 'cyan', 'white'], 'vertical');
269
- ```
270
-
271
-
272
-
273
- ### applyHorizontalGradient
274
-
275
- Applies horizontal color gradients character by character. This method creates color transitions across characters within the text, cycling through the provided colors to create smooth horizontal gradients. Each character gets assigned a color based on its position in the sequence. **Horizontal Gradient Behavior:** - Each character is individually colored - Colors cycle through the provided array - Creates smooth transitions across text width - Works well with ASCII art and single lines
276
-
277
- **Parameters:**
278
-
279
- | Name | Type | Required | Description |
280
- |------|------|----------|-------------|
281
- | `text` | `string` | ✓ | The text to apply horizontal gradients to |
282
- | `lineColors` | `Color[]` | | Array of colors to cycle through |
283
-
284
- **Returns:** `string`
285
-
286
- ```ts
287
- // Rainbow effect across characters
288
- const rainbow = ui.applyHorizontalGradient('RAINBOW',
289
- ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta']
290
- );
291
-
292
- // Simple two-color transition
293
- const sunset = ui.applyHorizontalGradient('SUNSET', ['red', 'orange']);
294
-
295
- // Great for short text and ASCII art
296
- const art = ui.asciiArt('COOL', 'Big');
297
- const coloredArt = ui.applyHorizontalGradient(art, ['cyan', 'blue']);
298
- ```
299
-
300
-
301
-
302
- ### applyVerticalGradient
303
-
304
- Applies vertical color gradients line by line. This method creates color transitions across lines of text, with each line getting a different color from the sequence. Perfect for multi-line content like ASCII art, banners, and structured output. **Vertical Gradient Behavior:** - Each line is colored uniformly - Colors cycle through the provided array - Creates smooth transitions across text height - Ideal for multi-line ASCII art and structured content
305
-
306
- **Parameters:**
307
-
308
- | Name | Type | Required | Description |
309
- |------|------|----------|-------------|
310
- | `text` | `string` | ✓ | The text to apply vertical gradients to (supports newlines) |
311
- | `lineColors` | `Color[]` | | Array of colors to cycle through for each line |
312
-
313
- **Returns:** `string`
314
-
315
- ```ts
316
- // Patriotic vertical gradient
317
- const flag = 'USA\nUSA\nUSA\nUSA';
318
- const patriotic = ui.applyVerticalGradient(flag, ['red', 'white', 'blue']);
319
-
320
- // Sunset effect on ASCII art
321
- const banner = ui.asciiArt('SUNSET', 'Big');
322
- const sunset = ui.applyVerticalGradient(banner,
323
- ['yellow', 'orange', 'red', 'purple']
324
- );
325
-
326
- // Ocean waves effect
327
- const waves = 'Wave 1\nWave 2\nWave 3\nWave 4\nWave 5';
328
- const ocean = ui.applyVerticalGradient(waves, ['cyan', 'blue']);
329
- ```
330
-
331
-
332
-
333
- ### padLeft
334
-
335
- Pads text on the left to reach the specified length. This utility method adds padding characters to the left side of text to achieve a desired total length. Useful for creating aligned columns, formatted tables, and consistent text layout in terminal applications. **Padding Behavior:** - Adds padding to the left (start) of the string - Uses specified padding character (default: space) - Returns original string if already at or beyond target length - Handles multi-character padding by repeating the character
336
-
337
- **Parameters:**
338
-
339
- | Name | Type | Required | Description |
340
- |------|------|----------|-------------|
341
- | `str` | `string` | ✓ | The string to pad |
342
- | `length` | `number` | ✓ | The desired total length after padding |
343
- | `padChar` | `any` | | The character to use for padding (default: " ") |
344
-
345
- **Returns:** `string`
346
-
347
- ```ts
348
- // Number alignment
349
- const numbers = ['1', '23', '456'];
350
- numbers.forEach(num => {
351
- console.log(ui.padLeft(num, 5, '0')); // '00001', '00023', '00456'
352
- });
353
-
354
- // Text alignment in columns
355
- const items = ['apple', 'banana', 'cherry'];
356
- items.forEach(item => {
357
- console.log(ui.padLeft(item, 10) + ' | Price: $1.00');
358
- });
359
-
360
- // Custom padding character
361
- const title = ui.padLeft('TITLE', 20, '-'); // '---------------TITLE'
362
- ```
363
-
364
-
365
-
366
- ### padRight
367
-
368
- Pads text on the right to reach the specified length. This utility method adds padding characters to the right side of text to achieve a desired total length. Essential for creating properly aligned columns, tables, and formatted output in terminal applications. **Padding Behavior:** - Adds padding to the right (end) of the string - Uses specified padding character (default: space) - Returns original string if already at or beyond target length - Handles multi-character padding by repeating the character
369
-
370
- **Parameters:**
371
-
372
- | Name | Type | Required | Description |
373
- |------|------|----------|-------------|
374
- | `str` | `string` | ✓ | The string to pad |
375
- | `length` | `number` | ✓ | The desired total length after padding |
376
- | `padChar` | `any` | | The character to use for padding (default: " ") |
377
-
378
- **Returns:** `string`
379
-
380
- ```ts
381
- // Create aligned table columns
382
- const data = [
383
- ['Name', 'Age', 'City'],
384
- ['John', '25', 'NYC'],
385
- ['Jane', '30', 'LA'],
386
- ['Bob', '35', 'Chicago']
387
- ];
388
-
389
- data.forEach(row => {
390
- const formatted = row.map((cell, i) => {
391
- const widths = [15, 5, 10];
392
- return ui.padRight(cell, widths[i]);
393
- }).join(' | ');
394
- console.log(formatted);
395
- });
396
-
397
- // Progress bars
398
- const progress = ui.padRight('████', 20, '░'); // '████░░░░░░░░░░░░░░░░'
399
-
400
- // Menu items with dots
401
- const menuItem = ui.padRight('Coffee', 20, '.') + '$3.50';
402
- ```
403
-
404
-
405
-
406
- ## Getters
407
-
408
- | Property | Type | Description |
409
- |----------|------|-------------|
410
- | `colors` | `typeof colors` | Provides access to the full chalk colors API. Chalk provides extensive color and styling capabilities including: - Basic colors: red, green, blue, yellow, etc. - Background colors: bgRed, bgGreen, etc. - Styles: bold, italic, underline, strikethrough - Advanced: rgb, hex, hsl color support Colors and styles can be chained for complex formatting. |
411
- | `colorPalette` | `string[]` | Gets the current color palette used for automatic color assignment. The color palette is a predefined set of hex colors that are automatically assigned to named entities in a cycling fashion. This ensures consistent color assignment across the application. |
412
- | `randomColor` | `string | undefined` | Gets a random color name from the available chalk colors. This provides access to a randomly selected color from chalk's built-in color set. Useful for adding variety to terminal output or testing. |
413
- | `fonts` | `string[]` | Gets an array of available fonts for ASCII art generation. This method provides access to all fonts available through figlet for creating ASCII art. The fonts are automatically discovered and cached on first access for performance. **Font Discovery:** - Fonts are loaded from figlet's built-in font collection - Results are cached in state to avoid repeated file system access - Returns comprehensive list of available font names |
414
-
415
- ## State (Zod v4 schema)
416
-
417
- | Property | Type | Description |
418
- |----------|------|-------------|
419
- | `enabled` | `boolean` | Whether this feature is currently enabled |
420
-
421
- ## Examples
422
-
423
- **assignColor**
424
-
425
- ```ts
426
- // Assign colors to users
427
- const johnColor = ui.assignColor('john');
428
- const janeColor = ui.assignColor('jane');
429
-
430
- // Use consistently throughout the app
431
- console.log(johnColor('John: Hello there!'));
432
- console.log(janeColor('Jane: Hi John!'));
433
- console.log(johnColor('John: How are you?')); // Same color as before
434
-
435
- // Different entities get different colors
436
- const errorColor = ui.assignColor('error');
437
- const successColor = ui.assignColor('success');
438
- ```
439
-
440
-
441
-
442
- **wizard**
443
-
444
- ```ts
445
- // Basic wizard
446
- const answers = await ui.wizard([
447
- {
448
- type: 'input',
449
- name: 'projectName',
450
- message: 'What is your project name?',
451
- validate: (input) => input.length > 0 || 'Name is required'
452
- },
453
- {
454
- type: 'list',
455
- name: 'framework',
456
- message: 'Choose a framework:',
457
- choices: ['React', 'Vue', 'Angular', 'Svelte']
458
- },
459
- {
460
- type: 'confirm',
461
- name: 'typescript',
462
- message: 'Use TypeScript?',
463
- default: true
464
- }
465
- ]);
466
-
467
- console.log(`Creating ${answers.projectName} with ${answers.framework}`);
468
-
469
- // With initial answers
470
- const moreAnswers = await ui.wizard([
471
- { type: 'input', name: 'version', message: 'Version?' }
472
- ], { version: '1.0.0' });
473
- ```
474
-
475
-
476
-
477
- **openInEditor**
478
-
479
- ```ts
480
- // Edit code snippet
481
- const code = `function hello() {\n console.log('Hello');\n}`;
482
- const editedCode = await ui.openInEditor(code, '.js');
483
-
484
- // Edit configuration
485
- const config = JSON.stringify({ port: 3000 }, null, 2);
486
- const newConfig = await ui.openInEditor(config, '.json');
487
-
488
- // Edit markdown content
489
- const markdown = '# Title\n\nContent here...';
490
- const editedMarkdown = await ui.openInEditor(markdown, '.md');
491
- ```
492
-
493
-
494
-
495
- **asciiArt**
496
-
497
- ```ts
498
- // Create a banner
499
- const banner = ui.asciiArt('WELCOME', 'Big');
500
- console.log(banner);
501
-
502
- // Different fonts for different purposes
503
- const title = ui.asciiArt('MyApp', 'Standard');
504
- const subtitle = ui.asciiArt('v2.0', 'Small');
505
-
506
- // Technical/coding themes
507
- const code = ui.asciiArt('CODE', '3D-ASCII');
508
-
509
- // List available fonts first
510
- console.log('Available fonts:', ui.fonts.slice(0, 10).join(', '));
511
- ```
512
-
513
-
514
-
515
- **banner**
516
-
517
- ```ts
518
- // Classic patriotic banner
519
- const banner = ui.banner('AMERICA', {
520
- font: 'Big',
521
- colors: ['red', 'white', 'blue']
522
- });
523
- console.log(banner);
524
-
525
- // Tech company banner
526
- const techBanner = ui.banner('TechCorp', {
527
- font: 'Slant',
528
- colors: ['cyan', 'blue', 'magenta']
529
- });
530
-
531
- // Warning banner
532
- const warningBanner = ui.banner('WARNING', {
533
- font: 'Standard',
534
- colors: ['yellow', 'red']
535
- });
536
-
537
- // Available fonts: see ui.fonts property
538
- // Available colors: any chalk color names
539
- ```
540
-
541
-
542
-
543
- **applyGradient**
544
-
545
- ```ts
546
- // Horizontal rainbow effect
547
- const rainbow = ui.applyGradient('Hello World!',
548
- ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta'],
549
- 'horizontal'
550
- );
551
-
552
- // Vertical gradient for multi-line text
553
- const multiline = 'Line 1\nLine 2\nLine 3\nLine 4';
554
- const vertical = ui.applyGradient(multiline,
555
- ['red', 'white', 'blue'],
556
- 'vertical'
557
- );
558
-
559
- // Fire effect
560
- const fire = ui.applyGradient('FIRE', ['red', 'yellow'], 'horizontal');
561
-
562
- // Ocean effect
563
- const ocean = ui.applyGradient('OCEAN', ['blue', 'cyan', 'white'], 'vertical');
564
- ```
565
-
566
-
567
-
568
- **applyHorizontalGradient**
569
-
570
- ```ts
571
- // Rainbow effect across characters
572
- const rainbow = ui.applyHorizontalGradient('RAINBOW',
573
- ['red', 'yellow', 'green', 'cyan', 'blue', 'magenta']
574
- );
575
-
576
- // Simple two-color transition
577
- const sunset = ui.applyHorizontalGradient('SUNSET', ['red', 'orange']);
578
-
579
- // Great for short text and ASCII art
580
- const art = ui.asciiArt('COOL', 'Big');
581
- const coloredArt = ui.applyHorizontalGradient(art, ['cyan', 'blue']);
582
- ```
583
-
584
-
585
-
586
- **applyVerticalGradient**
587
-
588
- ```ts
589
- // Patriotic vertical gradient
590
- const flag = 'USA\nUSA\nUSA\nUSA';
591
- const patriotic = ui.applyVerticalGradient(flag, ['red', 'white', 'blue']);
592
-
593
- // Sunset effect on ASCII art
594
- const banner = ui.asciiArt('SUNSET', 'Big');
595
- const sunset = ui.applyVerticalGradient(banner,
596
- ['yellow', 'orange', 'red', 'purple']
597
- );
598
-
599
- // Ocean waves effect
600
- const waves = 'Wave 1\nWave 2\nWave 3\nWave 4\nWave 5';
601
- const ocean = ui.applyVerticalGradient(waves, ['cyan', 'blue']);
602
- ```
603
-
604
-
605
-
606
- **padLeft**
607
-
608
- ```ts
609
- // Number alignment
610
- const numbers = ['1', '23', '456'];
611
- numbers.forEach(num => {
612
- console.log(ui.padLeft(num, 5, '0')); // '00001', '00023', '00456'
613
- });
614
-
615
- // Text alignment in columns
616
- const items = ['apple', 'banana', 'cherry'];
617
- items.forEach(item => {
618
- console.log(ui.padLeft(item, 10) + ' | Price: $1.00');
619
- });
620
-
621
- // Custom padding character
622
- const title = ui.padLeft('TITLE', 20, '-'); // '---------------TITLE'
623
- ```
624
-
625
-
626
-
627
- **padRight**
628
-
629
- ```ts
630
- // Create aligned table columns
631
- const data = [
632
- ['Name', 'Age', 'City'],
633
- ['John', '25', 'NYC'],
634
- ['Jane', '30', 'LA'],
635
- ['Bob', '35', 'Chicago']
636
- ];
637
-
638
- data.forEach(row => {
639
- const formatted = row.map((cell, i) => {
640
- const widths = [15, 5, 10];
641
- return ui.padRight(cell, widths[i]);
642
- }).join(' | ');
643
- console.log(formatted);
644
- });
645
-
646
- // Progress bars
647
- const progress = ui.padRight('████', 20, '░'); // '████░░░░░░░░░░░░░░░░'
648
-
649
- // Menu items with dots
650
- const menuItem = ui.padRight('Coffee', 20, '.') + '$3.50';
651
- ```
652
-
653
-
654
-
655
- **colors**
656
-
657
- ```ts
658
- // Basic colors
659
- ui.colors.red('Error message')
660
- ui.colors.green('Success!')
661
-
662
- // Chained styling
663
- ui.colors.blue.bold.underline('Important link')
664
- ui.colors.white.bgRed.bold(' ALERT ')
665
-
666
- // Hex and RGB colors
667
- ui.colors.hex('#FF5733')('Custom color')
668
- ui.colors.rgb(255, 87, 51)('RGB color')
669
- ```
670
-
671
-
672
-
673
- **randomColor**
674
-
675
- ```ts
676
- const randomColor = ui.randomColor;
677
- console.log(ui.colors[randomColor]('This text is a random color!'));
678
-
679
- // Use in loops for varied output
680
- items.forEach(item => {
681
- const color = ui.randomColor;
682
- console.log(ui.colors[color](`- ${item}`));
683
- });
684
- ```
685
-
686
-
687
-
688
- **fonts**
689
-
690
- ```ts
691
- // List all available fonts
692
- const fonts = ui.fonts;
693
- console.log(`Available fonts: ${fonts.join(', ')}`);
694
-
695
- // Use random font for variety
696
- const randomFont = fonts[Math.floor(Math.random() * fonts.length)];
697
- const art = ui.asciiArt('Hello', randomFont);
698
-
699
- // Common fonts: 'Big', 'Standard', 'Small', 'Slant', '3D-ASCII'
700
- ```
701
-