@soederpop/luca 0.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 (358) hide show
  1. package/CLAUDE.md +71 -0
  2. package/README.md +78 -0
  3. package/bun.lock +2928 -0
  4. package/bunfig.toml +3 -0
  5. package/commands/audit-docs.ts +740 -0
  6. package/commands/build-scaffolds.ts +154 -0
  7. package/commands/generate-api-docs.ts +114 -0
  8. package/commands/update-introspection.ts +67 -0
  9. package/docs/CLI.md +335 -0
  10. package/docs/README.md +88 -0
  11. package/docs/TABLE-OF-CONTENTS.md +157 -0
  12. package/docs/apis/clients/elevenlabs.md +84 -0
  13. package/docs/apis/clients/graph.md +56 -0
  14. package/docs/apis/clients/openai.md +69 -0
  15. package/docs/apis/clients/rest.md +41 -0
  16. package/docs/apis/clients/websocket.md +107 -0
  17. package/docs/apis/features/agi/assistant.md +471 -0
  18. package/docs/apis/features/agi/assistants-manager.md +154 -0
  19. package/docs/apis/features/agi/claude-code.md +602 -0
  20. package/docs/apis/features/agi/conversation-history.md +352 -0
  21. package/docs/apis/features/agi/conversation.md +333 -0
  22. package/docs/apis/features/agi/docs-reader.md +121 -0
  23. package/docs/apis/features/agi/openai-codex.md +318 -0
  24. package/docs/apis/features/agi/openapi.md +138 -0
  25. package/docs/apis/features/agi/semantic-search.md +387 -0
  26. package/docs/apis/features/agi/skills-library.md +216 -0
  27. package/docs/apis/features/node/container-link.md +133 -0
  28. package/docs/apis/features/node/content-db.md +313 -0
  29. package/docs/apis/features/node/disk-cache.md +379 -0
  30. package/docs/apis/features/node/dns.md +651 -0
  31. package/docs/apis/features/node/docker.md +705 -0
  32. package/docs/apis/features/node/downloader.md +81 -0
  33. package/docs/apis/features/node/esbuild.md +59 -0
  34. package/docs/apis/features/node/file-manager.md +182 -0
  35. package/docs/apis/features/node/fs.md +581 -0
  36. package/docs/apis/features/node/git.md +330 -0
  37. package/docs/apis/features/node/google-auth.md +174 -0
  38. package/docs/apis/features/node/google-calendar.md +187 -0
  39. package/docs/apis/features/node/google-docs.md +151 -0
  40. package/docs/apis/features/node/google-drive.md +225 -0
  41. package/docs/apis/features/node/google-sheets.md +179 -0
  42. package/docs/apis/features/node/grep.md +290 -0
  43. package/docs/apis/features/node/helpers.md +135 -0
  44. package/docs/apis/features/node/ink.md +334 -0
  45. package/docs/apis/features/node/ipc-socket.md +260 -0
  46. package/docs/apis/features/node/json-tree.md +86 -0
  47. package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
  48. package/docs/apis/features/node/networking.md +281 -0
  49. package/docs/apis/features/node/nlp.md +133 -0
  50. package/docs/apis/features/node/opener.md +97 -0
  51. package/docs/apis/features/node/os.md +118 -0
  52. package/docs/apis/features/node/package-finder.md +402 -0
  53. package/docs/apis/features/node/postgres.md +212 -0
  54. package/docs/apis/features/node/proc.md +430 -0
  55. package/docs/apis/features/node/process-manager.md +210 -0
  56. package/docs/apis/features/node/python.md +278 -0
  57. package/docs/apis/features/node/repl.md +88 -0
  58. package/docs/apis/features/node/runpod.md +673 -0
  59. package/docs/apis/features/node/secure-shell.md +169 -0
  60. package/docs/apis/features/node/semantic-search.md +401 -0
  61. package/docs/apis/features/node/sqlite.md +211 -0
  62. package/docs/apis/features/node/telegram.md +254 -0
  63. package/docs/apis/features/node/tts.md +118 -0
  64. package/docs/apis/features/node/ui.md +703 -0
  65. package/docs/apis/features/node/vault.md +64 -0
  66. package/docs/apis/features/node/vm.md +84 -0
  67. package/docs/apis/features/node/window-manager.md +337 -0
  68. package/docs/apis/features/node/yaml-tree.md +85 -0
  69. package/docs/apis/features/node/yaml.md +176 -0
  70. package/docs/apis/features/web/asset-loader.md +47 -0
  71. package/docs/apis/features/web/container-link.md +133 -0
  72. package/docs/apis/features/web/esbuild.md +59 -0
  73. package/docs/apis/features/web/helpers.md +135 -0
  74. package/docs/apis/features/web/network.md +30 -0
  75. package/docs/apis/features/web/speech.md +55 -0
  76. package/docs/apis/features/web/vault.md +64 -0
  77. package/docs/apis/features/web/vm.md +84 -0
  78. package/docs/apis/features/web/voice.md +67 -0
  79. package/docs/apis/servers/express.md +127 -0
  80. package/docs/apis/servers/mcp.md +213 -0
  81. package/docs/apis/servers/websocket.md +99 -0
  82. package/docs/documentation-audit.md +134 -0
  83. package/docs/examples/content-db.md +77 -0
  84. package/docs/examples/disk-cache.md +83 -0
  85. package/docs/examples/docker.md +101 -0
  86. package/docs/examples/downloader.md +70 -0
  87. package/docs/examples/esbuild.md +80 -0
  88. package/docs/examples/file-manager.md +82 -0
  89. package/docs/examples/fs.md +83 -0
  90. package/docs/examples/git.md +85 -0
  91. package/docs/examples/google-auth.md +88 -0
  92. package/docs/examples/google-calendar.md +94 -0
  93. package/docs/examples/google-docs.md +82 -0
  94. package/docs/examples/google-drive.md +96 -0
  95. package/docs/examples/google-sheets.md +95 -0
  96. package/docs/examples/grep.md +85 -0
  97. package/docs/examples/ink-blocks.md +75 -0
  98. package/docs/examples/ink-renderer.md +41 -0
  99. package/docs/examples/ink.md +103 -0
  100. package/docs/examples/ipc-socket.md +103 -0
  101. package/docs/examples/json-tree.md +91 -0
  102. package/docs/examples/launcher-app-command-listener.md +120 -0
  103. package/docs/examples/networking.md +58 -0
  104. package/docs/examples/nlp.md +91 -0
  105. package/docs/examples/opener.md +78 -0
  106. package/docs/examples/os.md +72 -0
  107. package/docs/examples/package-finder.md +89 -0
  108. package/docs/examples/port-exposer.md +89 -0
  109. package/docs/examples/postgres.md +91 -0
  110. package/docs/examples/proc.md +81 -0
  111. package/docs/examples/process-manager.md +79 -0
  112. package/docs/examples/python.md +91 -0
  113. package/docs/examples/repl.md +93 -0
  114. package/docs/examples/runpod.md +119 -0
  115. package/docs/examples/secure-shell.md +92 -0
  116. package/docs/examples/sqlite.md +86 -0
  117. package/docs/examples/telegram.md +77 -0
  118. package/docs/examples/tts.md +86 -0
  119. package/docs/examples/ui.md +80 -0
  120. package/docs/examples/vault.md +70 -0
  121. package/docs/examples/vm.md +86 -0
  122. package/docs/examples/window-manager.md +125 -0
  123. package/docs/examples/yaml-tree.md +93 -0
  124. package/docs/examples/yaml.md +104 -0
  125. package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
  126. package/docs/ideas/container-use-api.md +9 -0
  127. package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
  128. package/docs/ideas/feature-stacks.md +22 -0
  129. package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
  130. package/docs/ideas/mcp-design.md +9 -0
  131. package/docs/ideas/web-container-debugging-feature.md +13 -0
  132. package/docs/introspection-audit.md +49 -0
  133. package/docs/introspection.md +154 -0
  134. package/docs/mcp/readme.md +162 -0
  135. package/docs/models.ts +38 -0
  136. package/docs/philosophy.md +85 -0
  137. package/docs/principles.md +7 -0
  138. package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
  139. package/docs/prompts/mcp-test-easy-command.md +27 -0
  140. package/docs/reports/assistant-bugs.md +38 -0
  141. package/docs/reports/attach-pattern-usage.md +18 -0
  142. package/docs/reports/code-audit-results.md +391 -0
  143. package/docs/reports/introspection-audit-tasks.md +378 -0
  144. package/docs/reports/luca-mcp-improvements.md +128 -0
  145. package/docs/scaffolds/client.md +140 -0
  146. package/docs/scaffolds/command.md +106 -0
  147. package/docs/scaffolds/endpoint.md +176 -0
  148. package/docs/scaffolds/feature.md +148 -0
  149. package/docs/scaffolds/server.md +187 -0
  150. package/docs/tasks/web-container-helper-discovery.md +71 -0
  151. package/docs/todos.md +1 -0
  152. package/docs/tutorials/01-getting-started.md +106 -0
  153. package/docs/tutorials/02-container.md +210 -0
  154. package/docs/tutorials/03-scripts.md +194 -0
  155. package/docs/tutorials/04-features-overview.md +196 -0
  156. package/docs/tutorials/05-state-and-events.md +171 -0
  157. package/docs/tutorials/06-servers.md +157 -0
  158. package/docs/tutorials/07-endpoints.md +198 -0
  159. package/docs/tutorials/08-commands.md +171 -0
  160. package/docs/tutorials/09-clients.md +162 -0
  161. package/docs/tutorials/10-creating-features.md +198 -0
  162. package/docs/tutorials/11-contentbase.md +191 -0
  163. package/docs/tutorials/12-assistants.md +215 -0
  164. package/docs/tutorials/13-introspection.md +147 -0
  165. package/docs/tutorials/14-type-system.md +174 -0
  166. package/docs/tutorials/15-project-patterns.md +222 -0
  167. package/docs/tutorials/16-google-features.md +534 -0
  168. package/docs/tutorials/17-tui-blocks.md +530 -0
  169. package/docs/tutorials/18-semantic-search.md +334 -0
  170. package/index.ts +1 -0
  171. package/luca.console.ts +9 -0
  172. package/main.py +6 -0
  173. package/package.json +154 -0
  174. package/pyproject.toml +7 -0
  175. package/scripts/animations/chrome-glitch.ts +55 -0
  176. package/scripts/animations/index.ts +16 -0
  177. package/scripts/animations/neon-pulse.ts +64 -0
  178. package/scripts/animations/types.ts +6 -0
  179. package/scripts/build-web.ts +28 -0
  180. package/scripts/examples/ask-luca-expert.ts +42 -0
  181. package/scripts/examples/assistant-questions.ts +12 -0
  182. package/scripts/examples/excalidraw-expert.ts +75 -0
  183. package/scripts/examples/expert-chat.ts +0 -0
  184. package/scripts/examples/file-manager.ts +14 -0
  185. package/scripts/examples/ideas.ts +12 -0
  186. package/scripts/examples/interactive-chat.ts +20 -0
  187. package/scripts/examples/openai-tool-calls.ts +113 -0
  188. package/scripts/examples/opening-a-web-browser.ts +5 -0
  189. package/scripts/examples/telegram-bot.ts +79 -0
  190. package/scripts/examples/telegram-ink-ui.ts +302 -0
  191. package/scripts/examples/using-assistant-with-mcp.ts +560 -0
  192. package/scripts/examples/using-claude-code.ts +10 -0
  193. package/scripts/examples/using-contentdb.ts +35 -0
  194. package/scripts/examples/using-conversations.ts +35 -0
  195. package/scripts/examples/using-disk-cache.ts +10 -0
  196. package/scripts/examples/using-docker-shell.ts +75 -0
  197. package/scripts/examples/using-elevenlabs.ts +25 -0
  198. package/scripts/examples/using-google-calendar.ts +57 -0
  199. package/scripts/examples/using-google-docs.ts +74 -0
  200. package/scripts/examples/using-google-drive.ts +74 -0
  201. package/scripts/examples/using-google-sheets.ts +89 -0
  202. package/scripts/examples/using-nlp.ts +55 -0
  203. package/scripts/examples/using-ollama.ts +10 -0
  204. package/scripts/examples/using-openai-codex.ts +23 -0
  205. package/scripts/examples/using-postgres.ts +55 -0
  206. package/scripts/examples/using-runpod.ts +32 -0
  207. package/scripts/examples/using-tts.ts +40 -0
  208. package/scripts/examples/vm-loading-esm-modules.ts +16 -0
  209. package/scripts/scaffold.ts +391 -0
  210. package/scripts/scratch.ts +15 -0
  211. package/scripts/test-command-listener.ts +123 -0
  212. package/scripts/test-window-manager-lifecycle.ts +86 -0
  213. package/scripts/test-window-manager.ts +43 -0
  214. package/scripts/update-introspection-data.ts +58 -0
  215. package/src/agi/README.md +14 -0
  216. package/src/agi/container.server.ts +114 -0
  217. package/src/agi/endpoints/ask.ts +60 -0
  218. package/src/agi/endpoints/conversations/[id].ts +45 -0
  219. package/src/agi/endpoints/conversations.ts +31 -0
  220. package/src/agi/endpoints/experts.ts +37 -0
  221. package/src/agi/features/assistant.ts +767 -0
  222. package/src/agi/features/assistants-manager.ts +260 -0
  223. package/src/agi/features/claude-code.ts +1111 -0
  224. package/src/agi/features/conversation-history.ts +497 -0
  225. package/src/agi/features/conversation.ts +799 -0
  226. package/src/agi/features/openai-codex.ts +631 -0
  227. package/src/agi/features/openapi.ts +438 -0
  228. package/src/agi/features/skills-library.ts +425 -0
  229. package/src/agi/index.ts +6 -0
  230. package/src/agi/lib/token-counter.ts +122 -0
  231. package/src/browser.ts +25 -0
  232. package/src/bus.ts +100 -0
  233. package/src/cli/cli.ts +70 -0
  234. package/src/client.ts +461 -0
  235. package/src/clients/civitai/index.ts +541 -0
  236. package/src/clients/client-template.ts +41 -0
  237. package/src/clients/comfyui/index.ts +597 -0
  238. package/src/clients/elevenlabs/index.ts +291 -0
  239. package/src/clients/openai/index.ts +451 -0
  240. package/src/clients/supabase/index.ts +366 -0
  241. package/src/command.ts +164 -0
  242. package/src/commands/chat.ts +182 -0
  243. package/src/commands/console.ts +192 -0
  244. package/src/commands/describe.ts +433 -0
  245. package/src/commands/eval.ts +116 -0
  246. package/src/commands/help.ts +214 -0
  247. package/src/commands/index.ts +14 -0
  248. package/src/commands/mcp.ts +64 -0
  249. package/src/commands/prompt.ts +807 -0
  250. package/src/commands/run.ts +257 -0
  251. package/src/commands/sandbox-mcp.ts +439 -0
  252. package/src/commands/scaffold.ts +79 -0
  253. package/src/commands/serve.ts +172 -0
  254. package/src/container.ts +781 -0
  255. package/src/endpoint.ts +340 -0
  256. package/src/feature.ts +75 -0
  257. package/src/hash-object.ts +97 -0
  258. package/src/helper.ts +543 -0
  259. package/src/introspection/generated.agi.ts +23388 -0
  260. package/src/introspection/generated.node.ts +18899 -0
  261. package/src/introspection/generated.web.ts +2021 -0
  262. package/src/introspection/index.ts +256 -0
  263. package/src/introspection/scan.ts +912 -0
  264. package/src/node/container.ts +354 -0
  265. package/src/node/feature.ts +13 -0
  266. package/src/node/features/container-link.ts +558 -0
  267. package/src/node/features/content-db.ts +475 -0
  268. package/src/node/features/disk-cache.ts +382 -0
  269. package/src/node/features/dns.ts +655 -0
  270. package/src/node/features/docker.ts +912 -0
  271. package/src/node/features/downloader.ts +92 -0
  272. package/src/node/features/esbuild.ts +68 -0
  273. package/src/node/features/file-manager.ts +357 -0
  274. package/src/node/features/fs.ts +534 -0
  275. package/src/node/features/git.ts +492 -0
  276. package/src/node/features/google-auth.ts +502 -0
  277. package/src/node/features/google-calendar.ts +300 -0
  278. package/src/node/features/google-docs.ts +404 -0
  279. package/src/node/features/google-drive.ts +339 -0
  280. package/src/node/features/google-sheets.ts +279 -0
  281. package/src/node/features/grep.ts +406 -0
  282. package/src/node/features/helpers.ts +374 -0
  283. package/src/node/features/ink.ts +490 -0
  284. package/src/node/features/ipc-socket.ts +459 -0
  285. package/src/node/features/json-tree.ts +188 -0
  286. package/src/node/features/launcher-app-command-listener.ts +388 -0
  287. package/src/node/features/networking.ts +925 -0
  288. package/src/node/features/nlp.ts +211 -0
  289. package/src/node/features/opener.ts +166 -0
  290. package/src/node/features/os.ts +157 -0
  291. package/src/node/features/package-finder.ts +539 -0
  292. package/src/node/features/port-exposer.ts +342 -0
  293. package/src/node/features/postgres.ts +273 -0
  294. package/src/node/features/proc.ts +502 -0
  295. package/src/node/features/process-manager.ts +542 -0
  296. package/src/node/features/python.ts +444 -0
  297. package/src/node/features/repl.ts +194 -0
  298. package/src/node/features/runpod.ts +802 -0
  299. package/src/node/features/secure-shell.ts +248 -0
  300. package/src/node/features/semantic-search.ts +924 -0
  301. package/src/node/features/sqlite.ts +289 -0
  302. package/src/node/features/telegram.ts +342 -0
  303. package/src/node/features/tts.ts +184 -0
  304. package/src/node/features/ui.ts +857 -0
  305. package/src/node/features/vault.ts +164 -0
  306. package/src/node/features/vm.ts +312 -0
  307. package/src/node/features/window-manager.ts +804 -0
  308. package/src/node/features/yaml-tree.ts +149 -0
  309. package/src/node/features/yaml.ts +132 -0
  310. package/src/node.ts +70 -0
  311. package/src/react/index.ts +175 -0
  312. package/src/registry.ts +199 -0
  313. package/src/scaffolds/generated.ts +1613 -0
  314. package/src/scaffolds/template.ts +37 -0
  315. package/src/schemas/base.ts +255 -0
  316. package/src/server.ts +135 -0
  317. package/src/servers/express.ts +209 -0
  318. package/src/servers/mcp.ts +805 -0
  319. package/src/servers/socket.ts +120 -0
  320. package/src/state.ts +101 -0
  321. package/src/web/clients/socket.ts +82 -0
  322. package/src/web/container.ts +74 -0
  323. package/src/web/extension.ts +30 -0
  324. package/src/web/feature.ts +12 -0
  325. package/src/web/features/asset-loader.ts +64 -0
  326. package/src/web/features/container-link.ts +385 -0
  327. package/src/web/features/esbuild.ts +79 -0
  328. package/src/web/features/helpers.ts +267 -0
  329. package/src/web/features/network.ts +61 -0
  330. package/src/web/features/speech.ts +87 -0
  331. package/src/web/features/vault.ts +189 -0
  332. package/src/web/features/vm.ts +78 -0
  333. package/src/web/features/voice-recognition.ts +129 -0
  334. package/src/web/shims/isomorphic-vm.ts +149 -0
  335. package/test/bus.test.ts +134 -0
  336. package/test/clients-servers.test.ts +216 -0
  337. package/test/container-link.test.ts +274 -0
  338. package/test/features.test.ts +160 -0
  339. package/test/integration.test.ts +787 -0
  340. package/test/node-container.test.ts +121 -0
  341. package/test/rate-limit.test.ts +272 -0
  342. package/test/semantic-search.test.ts +550 -0
  343. package/test/state.test.ts +121 -0
  344. package/test-integration/assistant.test.ts +138 -0
  345. package/test-integration/assistants-manager.test.ts +123 -0
  346. package/test-integration/claude-code.test.ts +98 -0
  347. package/test-integration/conversation-history.test.ts +205 -0
  348. package/test-integration/conversation.test.ts +137 -0
  349. package/test-integration/elevenlabs.test.ts +55 -0
  350. package/test-integration/google-services.test.ts +80 -0
  351. package/test-integration/helpers.ts +89 -0
  352. package/test-integration/openai-codex.test.ts +93 -0
  353. package/test-integration/runpod.test.ts +58 -0
  354. package/test-integration/server-endpoints.test.ts +97 -0
  355. package/test-integration/skills-library.test.ts +157 -0
  356. package/test-integration/telegram.test.ts +46 -0
  357. package/tsconfig.json +58 -0
  358. package/uv.lock +8 -0
@@ -0,0 +1,83 @@
1
+ ---
2
+ title: "fs"
3
+ tags: [fs, filesystem, core]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # fs
9
+
10
+ File system utilities for reading, writing, checking, and walking files and directories.
11
+
12
+ ## Overview
13
+
14
+ The `fs` feature is a core feature, meaning it is auto-enabled on every container. You can access it directly as a global or via `container.feature('fs')`. It provides synchronous and asynchronous methods for common filesystem operations. All paths are resolved relative to the container's working directory.
15
+
16
+ ## Reading Files
17
+
18
+ Use `readFile()` to read a file as a string. This is the simplest way to get file contents.
19
+
20
+ ```ts
21
+ const content = fs.readFile('README.md')
22
+ console.log('README.md length:', content.length, 'characters')
23
+ console.log('First line:', content.split('\n')[0])
24
+ ```
25
+
26
+ The returned value is always a string, ready for processing.
27
+
28
+ ## Reading JSON
29
+
30
+ Use `readJson()` to read and parse a JSON file in one step. No need for manual `JSON.parse()`.
31
+
32
+ ```ts
33
+ const pkg = fs.readJson('package.json')
34
+ console.log('Package name:', pkg.name)
35
+ console.log('Version:', pkg.version)
36
+ console.log('Dependencies:', Object.keys(pkg.dependencies || {}).length, 'packages')
37
+ ```
38
+
39
+ This is especially handy for configuration files and manifests.
40
+
41
+ ## Checking Existence
42
+
43
+ Use `exists()` to check whether a file or directory is present before operating on it.
44
+
45
+ ```ts
46
+ console.log('README.md exists:', fs.exists('README.md'))
47
+ console.log('package.json exists:', fs.exists('package.json'))
48
+ console.log('nonexistent.txt exists:', fs.exists('nonexistent.txt'))
49
+ console.log('src/ exists:', fs.exists('src'))
50
+ ```
51
+
52
+ Returns a simple boolean. There is also an `existsAsync()` variant.
53
+
54
+ ## Walking a Directory
55
+
56
+ Use `walk()` to recursively list all files under a directory tree. You can filter to just files or just directories.
57
+
58
+ ```ts
59
+ const result = fs.walk('src', { files: true, directories: false, exclude: ['node_modules'] })
60
+ console.log('Total files in src/:', result.files.length)
61
+ console.log('First 5 files:')
62
+ result.files.slice(0, 5).forEach(f => console.log(' ', f))
63
+ ```
64
+
65
+ Walk returns an object with `files` and `directories` arrays of relative paths.
66
+
67
+ ## Finding Files Upward
68
+
69
+ Use `findUp()` to search for a file by walking up the directory tree from the current working directory. This is useful for locating project root markers.
70
+
71
+ ```ts
72
+ const tsconfig = fs.findUp('tsconfig.json')
73
+ console.log('tsconfig.json found at:', tsconfig)
74
+
75
+ const packageJson = fs.findUp('package.json')
76
+ console.log('package.json found at:', packageJson)
77
+ ```
78
+
79
+ Returns the absolute path if found, or `null` if the file is not in any ancestor directory.
80
+
81
+ ## Summary
82
+
83
+ This demo covered reading files as strings and JSON, checking existence, recursively walking directories, and searching upward for project configuration files. These are the bread-and-butter operations for any script that needs to interact with the filesystem.
@@ -0,0 +1,85 @@
1
+ ---
2
+ title: "git"
3
+ tags: [git, version-control, core]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # git
9
+
10
+ Git repository operations including branch info, commit history, and file listing.
11
+
12
+ ## Overview
13
+
14
+ The `git` feature is a core feature, auto-enabled on every container. You can access it directly as a global or via `container.feature('git')`. It provides getters for quick repo metadata and methods for querying commit history and tracked files. All operations use the repository that contains the container's working directory.
15
+
16
+ ## Repository Info
17
+
18
+ The basic getters give you quick access to the current repository state without any arguments.
19
+
20
+ ```ts
21
+ console.log('Is a git repo:', git.isRepo)
22
+ console.log('Repo root:', git.repoRoot)
23
+ console.log('Current branch:', git.branch)
24
+ console.log('Current SHA:', git.sha)
25
+ ```
26
+
27
+ These are synchronous getters, so you can use them inline anywhere.
28
+
29
+ ## Listing Tracked Files
30
+
31
+ Use `lsFiles()` to list files tracked by git. This wraps `git ls-files` with structured options.
32
+
33
+ ```ts
34
+ const files = await git.lsFiles()
35
+ console.log('Total tracked files:', files.length)
36
+ console.log('First 5 files:')
37
+ files.slice(0, 5).forEach(f => console.log(' ', f))
38
+ ```
39
+
40
+ You can filter for modified, deleted, or untracked files by passing options.
41
+
42
+ ## Filtered File Listing
43
+
44
+ Pass options to `lsFiles()` to narrow down the results by file status or pattern.
45
+
46
+ ```ts
47
+ const tsFiles = await git.lsFiles({ include: '*.ts' })
48
+ console.log('Tracked .ts files:', tsFiles.length)
49
+
50
+ const srcFiles = await git.lsFiles({ baseDir: 'src' })
51
+ console.log('Files in src/:', srcFiles.length)
52
+ ```
53
+
54
+ The `include`, `exclude`, and `baseDir` options let you scope the listing precisely.
55
+
56
+ ## Latest Commits
57
+
58
+ Use `getLatestChanges()` to retrieve recent commit metadata. Each entry has a `title`, `message`, and `author`.
59
+
60
+ ```ts
61
+ const changes = await git.getLatestChanges(3)
62
+ changes.forEach((c, i) => {
63
+ console.log(`${i + 1}. [${c.author}] ${c.title}`)
64
+ })
65
+ ```
66
+
67
+ This is useful for generating changelogs, displaying recent activity, or auditing history.
68
+
69
+ ## File History
70
+
71
+ Use `fileLog()` to see the commit history for a specific file.
72
+
73
+ ```ts
74
+ const log = git.fileLog('package.json')
75
+ console.log('Commits touching package.json:', log.length)
76
+ log.slice(0, 3).forEach(entry => {
77
+ console.log(` ${entry.sha.slice(0, 8)} ${entry.message}`)
78
+ })
79
+ ```
80
+
81
+ Each entry contains the commit `sha` and `message`. This is a synchronous method.
82
+
83
+ ## Summary
84
+
85
+ This demo covered checking repository status, listing tracked files with filters, viewing recent commit history, and inspecting per-file commit logs. These tools give scripts full visibility into the git state of a project.
@@ -0,0 +1,88 @@
1
+ ---
2
+ title: "Google Auth"
3
+ tags: [googleAuth, google, oauth2, authentication, service-account]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # googleAuth
9
+
10
+ Google authentication feature supporting OAuth2 browser flow and service account auth. Handles the complete OAuth2 lifecycle including token refresh and secure storage via diskCache.
11
+
12
+ ## Overview
13
+
14
+ Use the `googleAuth` feature to authenticate with Google APIs. It supports two modes: OAuth2 (opens a browser for user consent) and service account (non-interactive, uses a JSON key file). Other Google features (drive, sheets, calendar, docs) depend on this feature automatically.
15
+
16
+ Requires either `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` environment variables for OAuth2, or a service account key file.
17
+
18
+ ## Enabling the Feature
19
+
20
+ ```ts
21
+ const auth = container.feature('googleAuth')
22
+ console.log('Auth mode:', auth.authMode)
23
+ console.log('Authenticated:', auth.isAuthenticated)
24
+ ```
25
+
26
+ The feature reads `GOOGLE_CLIENT_ID` and `GOOGLE_CLIENT_SECRET` from the environment automatically. You can also pass `clientId` and `clientSecret` as options.
27
+
28
+ ## API Documentation
29
+
30
+ ```ts
31
+ const info = await container.features.describe('googleAuth')
32
+ console.log(info)
33
+ ```
34
+
35
+ ## OAuth2 Authorization Flow
36
+
37
+ The `authorize()` method starts the full OAuth2 browser flow: it spins up a local callback server, opens the consent page, exchanges the code for tokens, and caches the refresh token.
38
+
39
+ ```ts skip
40
+ const auth = container.feature('googleAuth', {
41
+ scopes: ['https://www.googleapis.com/auth/drive.readonly']
42
+ })
43
+ await auth.authorize()
44
+ console.log('Authenticated:', auth.isAuthenticated)
45
+ console.log('Scopes:', auth.state.scopes)
46
+ ```
47
+
48
+ When running with valid credentials, this opens a browser to Google's consent page. After approval, tokens are stored in diskCache and automatically refreshed on expiry.
49
+
50
+ ## Service Account Authentication
51
+
52
+ For server-to-server auth without a browser, use a service account JSON key file.
53
+
54
+ ```ts skip
55
+ const auth = container.feature('googleAuth', {
56
+ mode: 'service-account',
57
+ serviceAccountKeyPath: '/path/to/service-account-key.json',
58
+ scopes: ['https://www.googleapis.com/auth/spreadsheets.readonly']
59
+ })
60
+ await auth.authenticateServiceAccount()
61
+ console.log('Service account email:', auth.state.email)
62
+ ```
63
+
64
+ Service accounts are ideal for automation, CI/CD, and background services that need Google API access without user interaction.
65
+
66
+ ## Token Management
67
+
68
+ Tokens are cached automatically and restored on subsequent runs. You can also revoke credentials.
69
+
70
+ ```ts skip
71
+ // Attempt to restore from cache (called automatically)
72
+ const restored = await auth.tryRestoreTokens()
73
+ console.log('Restored from cache:', restored)
74
+
75
+ // Get the auth client for passing to Google API constructors
76
+ const client = await auth.getAuthClient()
77
+ console.log('Auth client ready')
78
+
79
+ // Revoke and clear cached tokens
80
+ await auth.revoke()
81
+ console.log('Credentials revoked')
82
+ ```
83
+
84
+ The `tokenRefreshed` event fires when tokens are automatically refreshed, and `authenticated` fires after successful authentication.
85
+
86
+ ## Summary
87
+
88
+ The `googleAuth` feature provides the authentication layer for all Google API features. It supports OAuth2 browser flow and service accounts, with automatic token refresh and diskCache storage. Other Google features (drive, sheets, calendar, docs) use it automatically. Key methods: `authorize()`, `authenticateServiceAccount()`, `getAuthClient()`, `revoke()`.
@@ -0,0 +1,94 @@
1
+ ---
2
+ title: "Google Calendar"
3
+ tags: [googleCalendar, google, calendar, events, scheduling]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # googleCalendar
9
+
10
+ Google Calendar feature for listing calendars and reading events. Creates a Calendar v3 API client and depends on `googleAuth` for authentication.
11
+
12
+ ## Overview
13
+
14
+ Use the `googleCalendar` feature when you need to read calendar data: list calendars, fetch today's events, look ahead at upcoming days, or search events by text. Provides convenience methods for common time-based queries alongside the full `listEvents()` for custom ranges.
15
+
16
+ Requires Google OAuth2 credentials or a service account with Calendar access.
17
+
18
+ ## Enabling the Feature
19
+
20
+ ```ts
21
+ const calendar = container.feature('googleCalendar', {
22
+ defaultCalendarId: 'primary',
23
+ timeZone: 'America/Chicago'
24
+ })
25
+ console.log('Google Calendar feature created')
26
+ console.log('Default calendar:', calendar.defaultCalendarId)
27
+ ```
28
+
29
+ ## API Documentation
30
+
31
+ ```ts
32
+ const info = await container.features.describe('googleCalendar')
33
+ console.log(info)
34
+ ```
35
+
36
+ ## Listing Calendars
37
+
38
+ Discover all calendars accessible to the authenticated user.
39
+
40
+ ```ts skip
41
+ const calendars = await calendar.listCalendars()
42
+ calendars.forEach(c => console.log(` ${c.summary} (${c.id})`))
43
+ ```
44
+
45
+ Returns calendar metadata including ID, summary, time zone, and access role. Use the ID to target specific calendars in other methods.
46
+
47
+ ## Today's Events and Upcoming
48
+
49
+ Quick methods for the most common queries.
50
+
51
+ ```ts skip
52
+ const today = await calendar.getToday()
53
+ console.log(`Today: ${today.length} events`)
54
+ today.forEach(e => console.log(` ${e.start} - ${e.summary}`))
55
+
56
+ const upcoming = await calendar.getUpcoming(7)
57
+ console.log(`Next 7 days: ${upcoming.length} events`)
58
+ upcoming.forEach(e => console.log(` ${e.start} - ${e.summary}`))
59
+ ```
60
+
61
+ `getToday()` returns events from midnight to midnight in the configured timezone. `getUpcoming(days)` looks ahead the specified number of days from now.
62
+
63
+ ## Searching Events
64
+
65
+ Search across event summaries, descriptions, and locations.
66
+
67
+ ```ts skip
68
+ const meetings = await calendar.searchEvents('standup')
69
+ console.log(`Found ${meetings.length} standup events`)
70
+ meetings.forEach(e => console.log(` ${e.start} - ${e.summary}`))
71
+ ```
72
+
73
+ The search is freetext and matches against multiple event fields. Combine with time range options for more precise results.
74
+
75
+ ## Custom Time Range Queries
76
+
77
+ Use `listEvents()` for full control over the query parameters.
78
+
79
+ ```ts skip
80
+ const events = await calendar.listEvents({
81
+ timeMin: '2026-03-01T00:00:00Z',
82
+ timeMax: '2026-03-31T23:59:59Z',
83
+ maxResults: 50,
84
+ orderBy: 'startTime',
85
+ singleEvents: true
86
+ })
87
+ console.log(`March events: ${events.items.length}`)
88
+ ```
89
+
90
+ Supports pagination via `pageToken`, ordering by `startTime` or `updated`, and filtering by calendar ID.
91
+
92
+ ## Summary
93
+
94
+ The `googleCalendar` feature provides read access to Google Calendar events. Use the convenience methods `getToday()` and `getUpcoming()` for quick lookups, `searchEvents()` for text search, or `listEvents()` for full query control. Authentication is handled by `googleAuth`. Key methods: `listCalendars()`, `getToday()`, `getUpcoming()`, `searchEvents()`, `listEvents()`.
@@ -0,0 +1,82 @@
1
+ ---
2
+ title: "Google Docs"
3
+ tags: [googleDocs, google, docs, documents, markdown]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # googleDocs
9
+
10
+ Google Docs feature for reading documents and converting them to Markdown. Depends on `googleAuth` for authentication and optionally `googleDrive` for listing documents.
11
+
12
+ ## Overview
13
+
14
+ Use the `googleDocs` feature when you need to read Google Docs content. Its standout capability is converting Google Docs to well-formatted Markdown, handling headings, bold/italic/strikethrough, links, code, lists, tables, and images. Also supports plain text extraction and raw document structure access.
15
+
16
+ Requires Google OAuth2 credentials or a service account with Docs access.
17
+
18
+ ## Enabling the Feature
19
+
20
+ ```ts
21
+ const docs = container.feature('googleDocs')
22
+ console.log('Google Docs feature created')
23
+ ```
24
+
25
+ ## API Documentation
26
+
27
+ ```ts
28
+ const info = await container.features.describe('googleDocs')
29
+ console.log(info)
30
+ ```
31
+
32
+ ## Reading as Markdown
33
+
34
+ Convert a Google Doc into clean Markdown with full formatting support.
35
+
36
+ ```ts skip
37
+ const markdown = await docs.getAsMarkdown('1abc_document_id')
38
+ console.log(markdown)
39
+ ```
40
+
41
+ The converter handles headings (H1-H6), bold, italic, strikethrough, links, code fonts, ordered/unordered lists with nesting, tables, images, and section breaks. This is the primary method for extracting document content.
42
+
43
+ ## Plain Text and Raw Structure
44
+
45
+ ```ts skip
46
+ const text = await docs.getAsText('1abc_document_id')
47
+ console.log('Plain text length:', text.length)
48
+
49
+ const rawDoc = await docs.getDocument('1abc_document_id')
50
+ console.log('Document title:', rawDoc.title)
51
+ console.log('Sections:', rawDoc.body.content.length)
52
+ ```
53
+
54
+ Use `getAsText()` when you only need the words without any formatting. Use `getDocument()` when you need the full Docs API structure for custom processing.
55
+
56
+ ## Saving to Files
57
+
58
+ ```ts skip
59
+ const path = await docs.saveAsMarkdown('1abc_document_id', './output/doc.md')
60
+ console.log('Saved to:', path)
61
+ ```
62
+
63
+ Downloads and converts a doc to Markdown in one step. The path is resolved relative to the container's working directory.
64
+
65
+ ## Listing and Searching Docs
66
+
67
+ Uses Google Drive under the hood to find Google Docs by name or content.
68
+
69
+ ```ts skip
70
+ const allDocs = await docs.listDocs()
71
+ console.log(`Found ${allDocs.length} Google Docs`)
72
+ allDocs.slice(0, 5).forEach(d => console.log(` ${d.name} (${d.id})`))
73
+
74
+ const results = await docs.searchDocs('meeting notes')
75
+ console.log(`Search returned ${results.length} docs`)
76
+ ```
77
+
78
+ Both methods filter Drive results to the Google Docs MIME type automatically.
79
+
80
+ ## Summary
81
+
82
+ The `googleDocs` feature reads Google Docs and converts them to Markdown, plain text, or raw API structures. The Markdown converter handles all common formatting elements. Uses `googleDrive` for listing and searching documents. Key methods: `getAsMarkdown()`, `getAsText()`, `getDocument()`, `saveAsMarkdown()`, `listDocs()`, `searchDocs()`.
@@ -0,0 +1,96 @@
1
+ ---
2
+ title: "Google Drive"
3
+ tags: [googleDrive, google, drive, files, storage]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # googleDrive
9
+
10
+ Google Drive feature for listing, searching, browsing, and downloading files. Creates a Drive v3 API client and depends on `googleAuth` for authentication.
11
+
12
+ ## Overview
13
+
14
+ Use the `googleDrive` feature when you need to interact with Google Drive: list files, search by name or content, browse folder hierarchies, download files, or export Google Workspace documents. Authentication is handled automatically via the `googleAuth` feature.
15
+
16
+ Requires Google OAuth2 credentials or a service account with Drive access.
17
+
18
+ ## Enabling the Feature
19
+
20
+ ```ts
21
+ const drive = container.feature('googleDrive', {
22
+ pageSize: 50
23
+ })
24
+ console.log('Google Drive feature created')
25
+ console.log('Default page size:', 50)
26
+ ```
27
+
28
+ ## API Documentation
29
+
30
+ ```ts
31
+ const info = await container.features.describe('googleDrive')
32
+ console.log(info)
33
+ ```
34
+
35
+ ## Listing and Searching Files
36
+
37
+ List recent files or search by name, content, or MIME type.
38
+
39
+ ```ts skip
40
+ const { files } = await drive.listFiles()
41
+ console.log(`Found ${files.length} files:`)
42
+ files.slice(0, 5).forEach(f => console.log(` ${f.name} (${f.mimeType})`))
43
+
44
+ const { files: pdfs } = await drive.search('quarterly report', {
45
+ mimeType: 'application/pdf'
46
+ })
47
+ console.log(`Found ${pdfs.length} matching PDFs`)
48
+ ```
49
+
50
+ The `listFiles()` method accepts an optional Drive query string for filtering. The `search()` method provides a simpler interface for text-based searches.
51
+
52
+ ## Browsing Folders
53
+
54
+ Browse a folder to see its files and subfolders separately.
55
+
56
+ ```ts skip
57
+ const root = await drive.browse()
58
+ console.log('Root folders:', root.folders.length)
59
+ console.log('Root files:', root.files.length)
60
+
61
+ const sub = await drive.browse('folder-id-here')
62
+ sub.folders.forEach(f => console.log(` [dir] ${f.name}`))
63
+ sub.files.forEach(f => console.log(` [file] ${f.name}`))
64
+ ```
65
+
66
+ The `browse()` method defaults to the root folder and separates the results into `folders` and `files` for easy navigation.
67
+
68
+ ## Downloading and Exporting
69
+
70
+ Download files to disk or export Google Workspace documents to other formats.
71
+
72
+ ```ts skip
73
+ await drive.downloadTo('file-id', './downloads/report.pdf')
74
+ console.log('File downloaded')
75
+
76
+ const buffer = await drive.download('file-id')
77
+ console.log('Downloaded', buffer.length, 'bytes')
78
+
79
+ const csv = await drive.exportFile('sheet-id', 'text/csv')
80
+ console.log('Exported sheet as CSV:', csv.length, 'bytes')
81
+ ```
82
+
83
+ Use `download()` for binary files and `exportFile()` for converting Google Docs, Sheets, or Slides to formats like PDF, CSV, or plain text.
84
+
85
+ ## Shared Drives
86
+
87
+ ```ts skip
88
+ const drives = await drive.listDrives()
89
+ drives.forEach(d => console.log(` ${d.name} (${d.id})`))
90
+ ```
91
+
92
+ List all shared drives the authenticated user has access to.
93
+
94
+ ## Summary
95
+
96
+ The `googleDrive` feature provides complete Drive v3 API access for file management. Browse folders, search by content or type, download files, and export Workspace documents. Authentication is handled by `googleAuth`. Key methods: `listFiles()`, `search()`, `browse()`, `download()`, `downloadTo()`, `exportFile()`.
@@ -0,0 +1,95 @@
1
+ ---
2
+ title: "Google Sheets"
3
+ tags: [googleSheets, google, sheets, spreadsheet, data]
4
+ lastTested: null
5
+ lastTestPassed: null
6
+ ---
7
+
8
+ # googleSheets
9
+
10
+ Google Sheets feature for reading spreadsheet data as JSON, CSV, or raw arrays. Creates a Sheets v4 API client and depends on `googleAuth` for authentication.
11
+
12
+ ## Overview
13
+
14
+ Use the `googleSheets` feature when you need to read data from Google Sheets. It provides convenient methods for reading ranges, converting rows to JSON objects (using the first row as headers), and exporting as CSV. You can set a default spreadsheet ID to avoid passing it on every call.
15
+
16
+ Requires Google OAuth2 credentials or a service account with Sheets access.
17
+
18
+ ## Enabling the Feature
19
+
20
+ ```ts
21
+ const sheets = container.feature('googleSheets', {
22
+ defaultSpreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms'
23
+ })
24
+ console.log('Google Sheets feature created')
25
+ console.log('Default spreadsheet configured:', !!sheets.options.defaultSpreadsheetId)
26
+ ```
27
+
28
+ ## API Documentation
29
+
30
+ ```ts
31
+ const info = await container.features.describe('googleSheets')
32
+ console.log(info)
33
+ ```
34
+
35
+ ## Reading Data as JSON
36
+
37
+ The `getAsJson()` method treats the first row as headers and returns an array of objects.
38
+
39
+ ```ts skip
40
+ const data = await sheets.getAsJson('Sheet1')
41
+ console.log(`Read ${data.length} rows`)
42
+ data.slice(0, 3).forEach(row => console.log(row))
43
+ // => [{ name: 'Alice', age: '30' }, { name: 'Bob', age: '25' }, ...]
44
+ ```
45
+
46
+ With a valid spreadsheet, this reads the first sheet tab and converts each row into a keyed object using the header row. Numeric values come through as strings by default.
47
+
48
+ ## Reading Specific Ranges
49
+
50
+ Use A1 notation to read a precise cell range.
51
+
52
+ ```ts skip
53
+ const values = await sheets.getRange('Sheet1!A1:D10')
54
+ console.log(`Got ${values.length} rows, ${values[0]?.length} columns`)
55
+ values.forEach(row => console.log(row.join(' | ')))
56
+ ```
57
+
58
+ Returns a 2D array of strings. Useful when you need raw cell data without header interpretation.
59
+
60
+ ## Exporting as CSV
61
+
62
+ ```ts skip
63
+ const csv = await sheets.getAsCsv('Revenue')
64
+ console.log(csv)
65
+ ```
66
+
67
+ Returns the entire sheet as a CSV-formatted string, ready for piping to files or other tools.
68
+
69
+ ## Saving to Local Files
70
+
71
+ ```ts skip
72
+ await sheets.saveAsJson('./data/export.json', 'Sheet1')
73
+ console.log('Saved JSON export')
74
+
75
+ await sheets.saveAsCsv('./data/export.csv', 'Revenue')
76
+ console.log('Saved CSV export')
77
+ ```
78
+
79
+ Both methods write the file and return the resolved path. Paths are relative to the container's working directory.
80
+
81
+ ## Spreadsheet Metadata
82
+
83
+ ```ts skip
84
+ const meta = await sheets.getSpreadsheet()
85
+ console.log('Title:', meta.title)
86
+
87
+ const tabs = await sheets.listSheets()
88
+ tabs.forEach(t => console.log(` Tab: ${t.title} (${t.rowCount} rows)`))
89
+ ```
90
+
91
+ Inspect the spreadsheet structure before reading data.
92
+
93
+ ## Summary
94
+
95
+ The `googleSheets` feature reads Google Sheets data in three formats: JSON objects, raw 2D arrays, and CSV strings. Set a default spreadsheet ID for convenience. Authentication is handled by `googleAuth`. Key methods: `getAsJson()`, `getRange()`, `getAsCsv()`, `saveAsJson()`, `saveAsCsv()`, `listSheets()`.