@soederpop/luca 0.0.5 → 0.0.7

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 (211) hide show
  1. package/CLAUDE.md +10 -1
  2. package/bun.lock +1 -1
  3. package/commands/build-bootstrap.ts +78 -0
  4. package/commands/build-scaffolds.ts +24 -2
  5. package/commands/try-all-challenges.ts +543 -0
  6. package/commands/try-challenge.ts +100 -0
  7. package/docs/README.md +52 -80
  8. package/docs/TABLE-OF-CONTENTS.md +82 -51
  9. package/docs/apis/clients/elevenlabs.md +232 -8
  10. package/docs/apis/clients/graph.md +59 -8
  11. package/docs/apis/clients/openai.md +362 -2
  12. package/docs/apis/clients/rest.md +122 -2
  13. package/docs/apis/clients/websocket.md +71 -17
  14. package/docs/apis/features/agi/assistant.md +9 -3
  15. package/docs/apis/features/agi/assistants-manager.md +2 -2
  16. package/docs/apis/features/agi/claude-code.md +153 -14
  17. package/docs/apis/features/agi/conversation-history.md +15 -3
  18. package/docs/apis/features/agi/conversation.md +133 -20
  19. package/docs/apis/features/agi/openai-codex.md +90 -12
  20. package/docs/apis/features/agi/skills-library.md +23 -5
  21. package/docs/apis/features/node/container-link.md +59 -0
  22. package/docs/apis/features/node/content-db.md +1 -1
  23. package/docs/apis/features/node/disk-cache.md +1 -1
  24. package/docs/apis/features/node/dns.md +1 -0
  25. package/docs/apis/features/node/docker.md +2 -1
  26. package/docs/apis/features/node/esbuild.md +4 -3
  27. package/docs/apis/features/node/file-manager.md +13 -4
  28. package/docs/apis/features/node/fs.md +726 -171
  29. package/docs/apis/features/node/git.md +1 -0
  30. package/docs/apis/features/node/google-auth.md +23 -4
  31. package/docs/apis/features/node/google-calendar.md +14 -2
  32. package/docs/apis/features/node/google-docs.md +15 -2
  33. package/docs/apis/features/node/google-drive.md +21 -3
  34. package/docs/apis/features/node/google-sheets.md +14 -2
  35. package/docs/apis/features/node/grep.md +2 -0
  36. package/docs/apis/features/node/helpers.md +29 -0
  37. package/docs/apis/features/node/ink.md +2 -2
  38. package/docs/apis/features/node/networking.md +39 -4
  39. package/docs/apis/features/node/os.md +28 -0
  40. package/docs/apis/features/node/postgres.md +26 -4
  41. package/docs/apis/features/node/proc.md +37 -28
  42. package/docs/apis/features/node/process-manager.md +33 -5
  43. package/docs/apis/features/node/repl.md +1 -1
  44. package/docs/apis/features/node/runpod.md +1 -0
  45. package/docs/apis/features/node/secure-shell.md +7 -0
  46. package/docs/apis/features/node/semantic-search.md +12 -5
  47. package/docs/apis/features/node/sqlite.md +26 -4
  48. package/docs/apis/features/node/telegram.md +30 -5
  49. package/docs/apis/features/node/tts.md +17 -2
  50. package/docs/apis/features/node/ui.md +1 -1
  51. package/docs/apis/features/node/vault.md +4 -9
  52. package/docs/apis/features/node/vm.md +3 -12
  53. package/docs/apis/features/node/window-manager.md +128 -20
  54. package/docs/apis/features/web/asset-loader.md +13 -1
  55. package/docs/apis/features/web/container-link.md +59 -0
  56. package/docs/apis/features/web/esbuild.md +4 -3
  57. package/docs/apis/features/web/helpers.md +29 -0
  58. package/docs/apis/features/web/network.md +16 -2
  59. package/docs/apis/features/web/speech.md +16 -2
  60. package/docs/apis/features/web/vault.md +4 -9
  61. package/docs/apis/features/web/vm.md +3 -12
  62. package/docs/apis/features/web/voice.md +18 -1
  63. package/docs/apis/servers/express.md +18 -2
  64. package/docs/apis/servers/mcp.md +29 -4
  65. package/docs/apis/servers/websocket.md +34 -6
  66. package/docs/bootstrap/CLAUDE.md +100 -0
  67. package/docs/bootstrap/SKILL.md +222 -0
  68. package/docs/bootstrap/templates/about-command.ts +41 -0
  69. package/docs/bootstrap/templates/docs-models.ts +22 -0
  70. package/docs/bootstrap/templates/docs-readme.md +43 -0
  71. package/docs/bootstrap/templates/example-feature.ts +53 -0
  72. package/docs/bootstrap/templates/health-endpoint.ts +15 -0
  73. package/docs/bootstrap/templates/luca-cli.ts +25 -0
  74. package/docs/challenges/caching-proxy.md +16 -0
  75. package/docs/challenges/content-db-round-trip.md +14 -0
  76. package/docs/challenges/custom-command.md +9 -0
  77. package/docs/challenges/file-watcher-pipeline.md +11 -0
  78. package/docs/challenges/grep-audit-report.md +15 -0
  79. package/docs/challenges/multi-feature-dashboard.md +14 -0
  80. package/docs/challenges/process-orchestrator.md +17 -0
  81. package/docs/challenges/rest-api-server-with-client.md +12 -0
  82. package/docs/challenges/script-runner-with-vm.md +11 -0
  83. package/docs/challenges/simple-rest-api.md +15 -0
  84. package/docs/challenges/websocket-serve-and-client.md +11 -0
  85. package/docs/challenges/yaml-config-system.md +14 -0
  86. package/docs/command-system-overhaul.md +94 -0
  87. package/docs/examples/assistant/CORE.md +18 -0
  88. package/docs/examples/assistant/hooks.ts +3 -0
  89. package/docs/examples/assistant/tools.ts +10 -0
  90. package/docs/examples/window-manager-layouts.md +180 -0
  91. package/docs/in-memory-fs.md +4 -0
  92. package/docs/models.ts +13 -10
  93. package/docs/philosophy.md +4 -3
  94. package/docs/reports/console-hmr-design.md +170 -0
  95. package/docs/reports/helper-semantic-search.md +72 -0
  96. package/docs/scaffolds/client.md +29 -20
  97. package/docs/scaffolds/command.md +64 -50
  98. package/docs/scaffolds/endpoint.md +31 -36
  99. package/docs/scaffolds/feature.md +28 -18
  100. package/docs/scaffolds/selector.md +91 -0
  101. package/docs/scaffolds/server.md +18 -9
  102. package/docs/selectors.md +115 -0
  103. package/docs/sessions/custom-command/attempt-log-2.md +195 -0
  104. package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +728 -0
  105. package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +555 -0
  106. package/docs/sessions/grep-audit-report/attempt-log-1.md +289 -0
  107. package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +679 -0
  108. package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +1 -0
  109. package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +920 -0
  110. package/docs/sessions/simple-rest-api/attempt-log-1.md +593 -0
  111. package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +995 -0
  112. package/docs/tutorials/00-bootstrap.md +148 -0
  113. package/docs/tutorials/07-endpoints.md +7 -7
  114. package/docs/tutorials/08-commands.md +153 -72
  115. package/luca.cli.ts +3 -0
  116. package/package.json +6 -5
  117. package/public/index.html +1430 -0
  118. package/scripts/examples/using-ollama.ts +2 -1
  119. package/scripts/update-introspection-data.ts +2 -2
  120. package/src/agi/endpoints/experts.ts +1 -1
  121. package/src/agi/features/assistant.ts +7 -0
  122. package/src/agi/features/assistants-manager.ts +5 -5
  123. package/src/agi/features/claude-code.ts +263 -3
  124. package/src/agi/features/conversation-history.ts +7 -1
  125. package/src/agi/features/conversation.ts +26 -3
  126. package/src/agi/features/openai-codex.ts +26 -2
  127. package/src/agi/features/openapi.ts +6 -1
  128. package/src/agi/features/skills-library.ts +9 -1
  129. package/src/bootstrap/generated.ts +540 -0
  130. package/src/cli/cli.ts +64 -21
  131. package/src/client.ts +23 -357
  132. package/src/clients/civitai/index.ts +1 -1
  133. package/src/clients/client-template.ts +1 -1
  134. package/src/clients/comfyui/index.ts +13 -2
  135. package/src/clients/elevenlabs/index.ts +2 -1
  136. package/src/clients/graph.ts +87 -0
  137. package/src/clients/openai/index.ts +10 -1
  138. package/src/clients/rest.ts +207 -0
  139. package/src/clients/websocket.ts +176 -0
  140. package/src/command.ts +281 -34
  141. package/src/commands/bootstrap.ts +181 -0
  142. package/src/commands/chat.ts +5 -4
  143. package/src/commands/describe.ts +225 -2
  144. package/src/commands/help.ts +35 -9
  145. package/src/commands/index.ts +3 -0
  146. package/src/commands/introspect.ts +92 -2
  147. package/src/commands/prompt.ts +5 -6
  148. package/src/commands/run.ts +33 -10
  149. package/src/commands/save-api-docs.ts +49 -0
  150. package/src/commands/scaffold.ts +169 -23
  151. package/src/commands/select.ts +94 -0
  152. package/src/commands/serve.ts +10 -1
  153. package/src/container.ts +15 -0
  154. package/src/endpoint.ts +19 -0
  155. package/src/graft.ts +181 -0
  156. package/src/introspection/generated.agi.ts +12458 -8968
  157. package/src/introspection/generated.node.ts +10573 -7145
  158. package/src/introspection/generated.web.ts +1 -1
  159. package/src/introspection/index.ts +26 -0
  160. package/src/node/container.ts +6 -7
  161. package/src/node/features/content-db.ts +49 -2
  162. package/src/node/features/disk-cache.ts +16 -9
  163. package/src/node/features/dns.ts +16 -3
  164. package/src/node/features/docker.ts +16 -4
  165. package/src/node/features/esbuild.ts +20 -0
  166. package/src/node/features/file-manager.ts +184 -29
  167. package/src/node/features/fs.ts +704 -248
  168. package/src/node/features/git.ts +21 -8
  169. package/src/node/features/grep.ts +23 -3
  170. package/src/node/features/helpers.ts +372 -43
  171. package/src/node/features/networking.ts +39 -4
  172. package/src/node/features/opener.ts +28 -15
  173. package/src/node/features/os.ts +76 -0
  174. package/src/node/features/port-exposer.ts +11 -1
  175. package/src/node/features/postgres.ts +17 -1
  176. package/src/node/features/proc.ts +4 -1
  177. package/src/node/features/python.ts +63 -14
  178. package/src/node/features/repl.ts +11 -7
  179. package/src/node/features/runpod.ts +16 -3
  180. package/src/node/features/secure-shell.ts +27 -2
  181. package/src/node/features/semantic-search.ts +12 -1
  182. package/src/node/features/ui.ts +5 -69
  183. package/src/node/features/vm.ts +17 -0
  184. package/src/node/features/window-manager.ts +68 -20
  185. package/src/node.ts +5 -0
  186. package/src/scaffolds/generated.ts +492 -290
  187. package/src/scaffolds/template.ts +9 -0
  188. package/src/schemas/base.ts +46 -5
  189. package/src/selector.ts +282 -0
  190. package/src/server.ts +11 -0
  191. package/src/servers/express.ts +27 -12
  192. package/src/servers/socket.ts +45 -11
  193. package/src/web/clients/socket.ts +4 -1
  194. package/src/web/container.ts +2 -1
  195. package/src/web/features/network.ts +7 -1
  196. package/src/web/features/voice-recognition.ts +16 -1
  197. package/test/clients-servers.test.ts +2 -1
  198. package/test/command.test.ts +267 -0
  199. package/test-integration/assistants-manager.test.ts +10 -20
  200. package/tmp/.cache/luca-disk-cache/content-v2/sha512/1b/b5/c75b28794f00f94c4d609a98978e9420e9b7146d204a7fbf5b0b30477292581705d207c0100dabaac27eef540aaaece3374af75104a93219d4ec8bfb44e7 +1 -0
  201. package/tmp/.cache/luca-disk-cache/content-v2/sha512/da/df/1d90ce4e042abeb035a197832c6d6893420a747a056be773eb00e4f745a037d505c8db13dde7d36b36b6b893addbb7df0f5fe9f0c13e665f20056447318b +1 -0
  202. package/tmp/.cache/luca-disk-cache/content-v2/sha512/ed/04/e1d0c2a58c2db29b3921ca2affb3ea4febe831c53b38ebc21019fb799823aba6ed5b4611873d2cd25d422d49955b852a9c326da0d678899bc1c2c2960901 +1 -0
  203. package/tmp/.cache/luca-disk-cache/index-v5/00/13/572aa4c9a94f99eda999695d050cdd0ca7fe2d23a50af03234d4c8ce0791 +2 -0
  204. package/tmp/.cache/luca-disk-cache/index-v5/75/a9/cb61dc0f0589e8ec10a9aca27b834bc73884c479941042d22a2b22324cd3 +2 -0
  205. package/tmp/.cache/luca-disk-cache/index-v5/9f/0f/8b1f915ee64cfff7667dd96acd7a5ac0a96aa91a346e19cefd45909a9c9c +2 -0
  206. package/docs/apis/features/node/launcher-app-command-listener.md +0 -145
  207. package/docs/examples/launcher-app-command-listener.md +0 -120
  208. package/docs/tasks/web-container-helper-discovery.md +0 -71
  209. package/docs/todos.md +0 -1
  210. package/scripts/test-command-listener.ts +0 -123
  211. package/src/node/features/launcher-app-command-listener.ts +0 -389
@@ -0,0 +1,195 @@
1
+ I'll start by exploring the command system and available features, then build the command.
2
+
3
+ **Agent**
4
+ ```json
5
+ {
6
+ "subagent_type": "Explore",
7
+ "description": "Explore luca command structure",
8
+ "prompt": "I need to understand how luca commands work. Look at:\n1. Any existing commands in /Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/commands/ \n2. A few example commands from /Users/jonathansoeder/@soederpop/luca/commands/ to understand the pattern\n3. The project structure of /Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/\n\nGive me the full content of 2-3 example command files so I understand the exact pattern."
9
+ }
10
+ ```
11
+
12
+ **Bash**
13
+ ```json
14
+ {
15
+ "command": "find /Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/commands -type f -name \"*.ts\" 2>/dev/null | head -20"
16
+ }
17
+ ```
18
+
19
+ **Glob**
20
+ ```json
21
+ {
22
+ "pattern": "**/commands/**/*.ts",
23
+ "path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2"
24
+ }
25
+ ```
26
+
27
+ **Glob**
28
+ ```json
29
+ {
30
+ "pattern": "**/commands/**/*.ts",
31
+ "path": "/Users/jonathansoeder/@soederpop/luca"
32
+ }
33
+ ```
34
+
35
+ **Read**
36
+ ```json
37
+ {
38
+ "file_path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/commands/about.ts"
39
+ }
40
+ ```
41
+
42
+ **Bash**
43
+ ```json
44
+ {
45
+ "command": "ls -la /Users/jonathansoeder/@soederpop/luca/commands/ | head -20"
46
+ }
47
+ ```
48
+
49
+ **Bash**
50
+ ```json
51
+ {
52
+ "command": "ls /Users/jonathansoeder/@soederpop/luca/commands/"
53
+ }
54
+ ```
55
+
56
+ **Bash**
57
+ ```json
58
+ {
59
+ "command": "ls /Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/"
60
+ }
61
+ ```
62
+
63
+ **Bash**
64
+ ```json
65
+ {
66
+ "command": "ls -la /Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/"
67
+ }
68
+ ```
69
+
70
+ **Bash**
71
+ ```json
72
+ {
73
+ "command": "find /Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2 -name \"*.ts\" -type f | grep -E \"(commands|endpoints|features)\" | sort"
74
+ }
75
+ ```
76
+
77
+ **Read**
78
+ ```json
79
+ {
80
+ "file_path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/endpoints/health.ts"
81
+ }
82
+ ```
83
+
84
+ **Read**
85
+ ```json
86
+ {
87
+ "file_path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/features/example.ts"
88
+ }
89
+ ```
90
+
91
+ **Read**
92
+ ```json
93
+ {
94
+ "file_path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/luca.cli.ts"
95
+ }
96
+ ```
97
+
98
+ **Bash**
99
+ ```json
100
+ {
101
+ "command": "git diff HEAD ../../src/command.ts 2>/dev/null | head -100"
102
+ }
103
+ ```
104
+
105
+ Good, I understand the command pattern. Now let me check what the `ui` feature offers for styling/colors, since I'll need that for the ASCII art gradient.
106
+
107
+ **Bash**
108
+ ```json
109
+ {
110
+ "command": "luca describe ui 2>&1 | head -80",
111
+ "description": "Describe the ui feature"
112
+ }
113
+ ```
114
+
115
+ **Bash**
116
+ ```json
117
+ {
118
+ "command": "luca describe features 2>&1 | head -40",
119
+ "description": "List all available features"
120
+ }
121
+ ```
122
+
123
+ The UI feature has figlet (ASCII art) and text gradients built in. Let me get more details on those specific capabilities.
124
+
125
+ **Bash**
126
+ ```json
127
+ {
128
+ "command": "luca describe ui 2>&1 | grep -A 30 -i \"gradient\\|banner\\|figlet\\|ascii\"",
129
+ "description": "Find gradient/banner/figlet methods in ui"
130
+ }
131
+ ```
132
+
133
+ The `ui` feature has exactly what I need — `banner` combines ASCII art with gradient colors. Let me create the command.
134
+
135
+ **Write**
136
+ ```json
137
+ {
138
+ "file_path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/commands/hello.ts",
139
+ "content": "/**\n * hello — Display a word as ASCII art with a color gradient.\n * Run with: luca hello <word>\n */\nimport { z } from 'zod'\nimport type { ContainerContext } from '@soederpop/luca'\n\nexport const description = 'Display a word as ASCII art with a color gradient'\n\nexport const positionals = ['word']\n\nexport const argsSchema = z.object({\n word: z.string().optional().describe('The word to display'),\n})\n\nexport default async function hello(options: z.infer<typeof argsSchema>, context: ContainerContext) {\n const { container } = context\n const ui = container.feature('ui')\n\n const word = options.word || 'hello'\n\n const result = ui.banner(word, {\n font: 'Big',\n colors: ['cyan', 'magenta', 'yellow'],\n })\n\n console.log(result)\n}\n"
140
+ }
141
+ ```
142
+
143
+ Let me test it.
144
+
145
+ **Bash**
146
+ ```json
147
+ {
148
+ "command": "luca hello world 2>&1",
149
+ "description": "Test the hello command"
150
+ }
151
+ ```
152
+
153
+ It works but the gradient colors aren't showing in the captured output (they'd appear in the terminal). Let me also test with another word.
154
+
155
+ **Bash**
156
+ ```json
157
+ {
158
+ "command": "luca hello awesome 2>&1",
159
+ "description": "Test with another word"
160
+ }
161
+ ```
162
+
163
+ Works. Now let me also verify it handles the no-argument case.
164
+
165
+ **Bash**
166
+ ```json
167
+ {
168
+ "command": "luca hello 2>&1",
169
+ "description": "Test with no argument"
170
+ }
171
+ ```
172
+
173
+ All working. Now let me write the LESSONS.md.
174
+
175
+ **Write**
176
+ ```json
177
+ {
178
+ "file_path": "/Users/jonathansoeder/@soederpop/luca/attempts/custom-command-attempt-2/LESSONS.md",
179
+ "content": "# Lessons Learned — Custom Command Attempt 2\n\n## What I Built\n\nA `luca hello <word>` command that renders the given word as ASCII art with a color gradient, using only built-in luca features (`ui.banner`).\n\n## What Went Well\n\n- **The `luca describe` CLI was incredibly useful.** Running `luca describe ui` gave me the full method signatures, parameter types, and examples for every method on the UI feature. This was faster and more reliable than reading source files.\n- **The command pattern is simple and well-documented.** The existing `about.ts` command in the project served as a perfect template. Export a description, argsSchema, positionals, and a default async function — done.\n- **The UI feature is rich.** `ui.banner()` combines figlet ASCII art generation with gradient coloring in a single call. `ui.asciiArt()`, `ui.applyGradient()`, `ui.applyHorizontalGradient()`, and `ui.applyVerticalGradient()` are also available for more granular control.\n- **Positionals mapping is elegant.** `export const positionals = ['word']` maps `luca hello world` to `options.word` automatically — no manual argv parsing needed.\n\n## What I Struggled With\n\n- **Nothing major.** This was a straightforward task because the existing scaffolded project already had a working command example (`about.ts`) and the `luca describe` output was comprehensive enough to understand the UI feature's API without reading source.\n\n## What Would Have Helped Up Front\n\n### In the CLAUDE.md\n\n1. **A minimal command example inline.** The CLAUDE.md mentions `commands/` and `positionals` but a 10-line \"hello world\" command example right in the CLAUDE.md would have been the fastest possible path. Something like:\n\n ```ts\n // commands/greet.ts\n import { z } from 'zod'\n import type { ContainerContext } from '@soederpop/luca'\n export const description = 'Say hello'\n export const positionals = ['name']\n export const argsSchema = z.object({ name: z.string().optional() })\n export default async function greet(options, context) {\n console.log(`Hello, ${options.name || 'world'}!`)\n }\n ```\n\n2. **A note about the `ui.banner()` convenience method.** The CLAUDE.md mentions the UI feature exists but doesn't hint at its specific capabilities. A one-liner like \"The `ui` feature includes figlet ASCII art, color gradients, interactive prompts (inquirer), and markdown rendering\" would have pointed me directly to the right tool.\n\n### In the Luca Skill\n\n3. **A \"common recipes\" section.** Quick patterns like \"ASCII art banner\", \"interactive prompt\", \"file processing command\" would make the skill more immediately actionable for building things vs. just understanding the framework.\n\n4. **The `luca describe` output is the single most valuable discovery tool** — the skill should lead with this more prominently. It's mentioned, but it should be the #1 recommendation, above reading API docs or source files. The describe output includes examples which is what actually makes it so useful.\n\n## Summary\n\nTotal time from start to working command: very fast. The combination of an existing example command in the project + `luca describe ui` gave me everything I needed. The framework's self-describing nature is its biggest strength for AI-assisted development.\n"
180
+ }
181
+ ```
182
+
183
+ Done. Here's what I built:
184
+
185
+ **`commands/hello.ts`** — A luca command that takes a positional argument and renders it as ASCII art with a cyan/magenta/yellow gradient using `ui.banner()`. Falls back to "hello" if no word is given.
186
+
187
+ ```
188
+ $ luca hello world
189
+ __ _____ _ __| | __| |
190
+ \ \ /\ / / _ \| '__| |/ _` |
191
+ \ V V / (_) | | | | (_| |
192
+ \_/\_/ \___/|_| |_|\__,_|
193
+ ```
194
+
195
+ The LESSONS.md captures the key takeaway: `luca describe` is the killer feature for discovery, and a minimal inline command example in the CLAUDE.md would have made this even faster.