@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.
- package/CLAUDE.md +71 -0
- package/README.md +78 -0
- package/bun.lock +2928 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-scaffolds.ts +154 -0
- package/commands/generate-api-docs.ts +114 -0
- package/commands/update-introspection.ts +67 -0
- package/docs/CLI.md +335 -0
- package/docs/README.md +88 -0
- package/docs/TABLE-OF-CONTENTS.md +157 -0
- package/docs/apis/clients/elevenlabs.md +84 -0
- package/docs/apis/clients/graph.md +56 -0
- package/docs/apis/clients/openai.md +69 -0
- package/docs/apis/clients/rest.md +41 -0
- package/docs/apis/clients/websocket.md +107 -0
- package/docs/apis/features/agi/assistant.md +471 -0
- package/docs/apis/features/agi/assistants-manager.md +154 -0
- package/docs/apis/features/agi/claude-code.md +602 -0
- package/docs/apis/features/agi/conversation-history.md +352 -0
- package/docs/apis/features/agi/conversation.md +333 -0
- package/docs/apis/features/agi/docs-reader.md +121 -0
- package/docs/apis/features/agi/openai-codex.md +318 -0
- package/docs/apis/features/agi/openapi.md +138 -0
- package/docs/apis/features/agi/semantic-search.md +387 -0
- package/docs/apis/features/agi/skills-library.md +216 -0
- package/docs/apis/features/node/container-link.md +133 -0
- package/docs/apis/features/node/content-db.md +313 -0
- package/docs/apis/features/node/disk-cache.md +379 -0
- package/docs/apis/features/node/dns.md +651 -0
- package/docs/apis/features/node/docker.md +705 -0
- package/docs/apis/features/node/downloader.md +81 -0
- package/docs/apis/features/node/esbuild.md +59 -0
- package/docs/apis/features/node/file-manager.md +182 -0
- package/docs/apis/features/node/fs.md +581 -0
- package/docs/apis/features/node/git.md +330 -0
- package/docs/apis/features/node/google-auth.md +174 -0
- package/docs/apis/features/node/google-calendar.md +187 -0
- package/docs/apis/features/node/google-docs.md +151 -0
- package/docs/apis/features/node/google-drive.md +225 -0
- package/docs/apis/features/node/google-sheets.md +179 -0
- package/docs/apis/features/node/grep.md +290 -0
- package/docs/apis/features/node/helpers.md +135 -0
- package/docs/apis/features/node/ink.md +334 -0
- package/docs/apis/features/node/ipc-socket.md +260 -0
- package/docs/apis/features/node/json-tree.md +86 -0
- package/docs/apis/features/node/launcher-app-command-listener.md +145 -0
- package/docs/apis/features/node/networking.md +281 -0
- package/docs/apis/features/node/nlp.md +133 -0
- package/docs/apis/features/node/opener.md +97 -0
- package/docs/apis/features/node/os.md +118 -0
- package/docs/apis/features/node/package-finder.md +402 -0
- package/docs/apis/features/node/postgres.md +212 -0
- package/docs/apis/features/node/proc.md +430 -0
- package/docs/apis/features/node/process-manager.md +210 -0
- package/docs/apis/features/node/python.md +278 -0
- package/docs/apis/features/node/repl.md +88 -0
- package/docs/apis/features/node/runpod.md +673 -0
- package/docs/apis/features/node/secure-shell.md +169 -0
- package/docs/apis/features/node/semantic-search.md +401 -0
- package/docs/apis/features/node/sqlite.md +211 -0
- package/docs/apis/features/node/telegram.md +254 -0
- package/docs/apis/features/node/tts.md +118 -0
- package/docs/apis/features/node/ui.md +703 -0
- package/docs/apis/features/node/vault.md +64 -0
- package/docs/apis/features/node/vm.md +84 -0
- package/docs/apis/features/node/window-manager.md +337 -0
- package/docs/apis/features/node/yaml-tree.md +85 -0
- package/docs/apis/features/node/yaml.md +176 -0
- package/docs/apis/features/web/asset-loader.md +47 -0
- package/docs/apis/features/web/container-link.md +133 -0
- package/docs/apis/features/web/esbuild.md +59 -0
- package/docs/apis/features/web/helpers.md +135 -0
- package/docs/apis/features/web/network.md +30 -0
- package/docs/apis/features/web/speech.md +55 -0
- package/docs/apis/features/web/vault.md +64 -0
- package/docs/apis/features/web/vm.md +84 -0
- package/docs/apis/features/web/voice.md +67 -0
- package/docs/apis/servers/express.md +127 -0
- package/docs/apis/servers/mcp.md +213 -0
- package/docs/apis/servers/websocket.md +99 -0
- package/docs/documentation-audit.md +134 -0
- package/docs/examples/content-db.md +77 -0
- package/docs/examples/disk-cache.md +83 -0
- package/docs/examples/docker.md +101 -0
- package/docs/examples/downloader.md +70 -0
- package/docs/examples/esbuild.md +80 -0
- package/docs/examples/file-manager.md +82 -0
- package/docs/examples/fs.md +83 -0
- package/docs/examples/git.md +85 -0
- package/docs/examples/google-auth.md +88 -0
- package/docs/examples/google-calendar.md +94 -0
- package/docs/examples/google-docs.md +82 -0
- package/docs/examples/google-drive.md +96 -0
- package/docs/examples/google-sheets.md +95 -0
- package/docs/examples/grep.md +85 -0
- package/docs/examples/ink-blocks.md +75 -0
- package/docs/examples/ink-renderer.md +41 -0
- package/docs/examples/ink.md +103 -0
- package/docs/examples/ipc-socket.md +103 -0
- package/docs/examples/json-tree.md +91 -0
- package/docs/examples/launcher-app-command-listener.md +120 -0
- package/docs/examples/networking.md +58 -0
- package/docs/examples/nlp.md +91 -0
- package/docs/examples/opener.md +78 -0
- package/docs/examples/os.md +72 -0
- package/docs/examples/package-finder.md +89 -0
- package/docs/examples/port-exposer.md +89 -0
- package/docs/examples/postgres.md +91 -0
- package/docs/examples/proc.md +81 -0
- package/docs/examples/process-manager.md +79 -0
- package/docs/examples/python.md +91 -0
- package/docs/examples/repl.md +93 -0
- package/docs/examples/runpod.md +119 -0
- package/docs/examples/secure-shell.md +92 -0
- package/docs/examples/sqlite.md +86 -0
- package/docs/examples/telegram.md +77 -0
- package/docs/examples/tts.md +86 -0
- package/docs/examples/ui.md +80 -0
- package/docs/examples/vault.md +70 -0
- package/docs/examples/vm.md +86 -0
- package/docs/examples/window-manager.md +125 -0
- package/docs/examples/yaml-tree.md +93 -0
- package/docs/examples/yaml.md +104 -0
- package/docs/ideas/class-registration-refactor-possibilities.md +197 -0
- package/docs/ideas/container-use-api.md +9 -0
- package/docs/ideas/easy-auth-for-express-servers-and-luca-serve.md +0 -0
- package/docs/ideas/feature-stacks.md +22 -0
- package/docs/ideas/luca-cli-self-sufficiency-demo.md +23 -0
- package/docs/ideas/mcp-design.md +9 -0
- package/docs/ideas/web-container-debugging-feature.md +13 -0
- package/docs/introspection-audit.md +49 -0
- package/docs/introspection.md +154 -0
- package/docs/mcp/readme.md +162 -0
- package/docs/models.ts +38 -0
- package/docs/philosophy.md +85 -0
- package/docs/principles.md +7 -0
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
- package/docs/prompts/mcp-test-easy-command.md +27 -0
- package/docs/reports/assistant-bugs.md +38 -0
- package/docs/reports/attach-pattern-usage.md +18 -0
- package/docs/reports/code-audit-results.md +391 -0
- package/docs/reports/introspection-audit-tasks.md +378 -0
- package/docs/reports/luca-mcp-improvements.md +128 -0
- package/docs/scaffolds/client.md +140 -0
- package/docs/scaffolds/command.md +106 -0
- package/docs/scaffolds/endpoint.md +176 -0
- package/docs/scaffolds/feature.md +148 -0
- package/docs/scaffolds/server.md +187 -0
- package/docs/tasks/web-container-helper-discovery.md +71 -0
- package/docs/todos.md +1 -0
- package/docs/tutorials/01-getting-started.md +106 -0
- package/docs/tutorials/02-container.md +210 -0
- package/docs/tutorials/03-scripts.md +194 -0
- package/docs/tutorials/04-features-overview.md +196 -0
- package/docs/tutorials/05-state-and-events.md +171 -0
- package/docs/tutorials/06-servers.md +157 -0
- package/docs/tutorials/07-endpoints.md +198 -0
- package/docs/tutorials/08-commands.md +171 -0
- package/docs/tutorials/09-clients.md +162 -0
- package/docs/tutorials/10-creating-features.md +198 -0
- package/docs/tutorials/11-contentbase.md +191 -0
- package/docs/tutorials/12-assistants.md +215 -0
- package/docs/tutorials/13-introspection.md +147 -0
- package/docs/tutorials/14-type-system.md +174 -0
- package/docs/tutorials/15-project-patterns.md +222 -0
- package/docs/tutorials/16-google-features.md +534 -0
- package/docs/tutorials/17-tui-blocks.md +530 -0
- package/docs/tutorials/18-semantic-search.md +334 -0
- package/index.ts +1 -0
- package/luca.console.ts +9 -0
- package/main.py +6 -0
- package/package.json +154 -0
- package/pyproject.toml +7 -0
- package/scripts/animations/chrome-glitch.ts +55 -0
- package/scripts/animations/index.ts +16 -0
- package/scripts/animations/neon-pulse.ts +64 -0
- package/scripts/animations/types.ts +6 -0
- package/scripts/build-web.ts +28 -0
- package/scripts/examples/ask-luca-expert.ts +42 -0
- package/scripts/examples/assistant-questions.ts +12 -0
- package/scripts/examples/excalidraw-expert.ts +75 -0
- package/scripts/examples/expert-chat.ts +0 -0
- package/scripts/examples/file-manager.ts +14 -0
- package/scripts/examples/ideas.ts +12 -0
- package/scripts/examples/interactive-chat.ts +20 -0
- package/scripts/examples/openai-tool-calls.ts +113 -0
- package/scripts/examples/opening-a-web-browser.ts +5 -0
- package/scripts/examples/telegram-bot.ts +79 -0
- package/scripts/examples/telegram-ink-ui.ts +302 -0
- package/scripts/examples/using-assistant-with-mcp.ts +560 -0
- package/scripts/examples/using-claude-code.ts +10 -0
- package/scripts/examples/using-contentdb.ts +35 -0
- package/scripts/examples/using-conversations.ts +35 -0
- package/scripts/examples/using-disk-cache.ts +10 -0
- package/scripts/examples/using-docker-shell.ts +75 -0
- package/scripts/examples/using-elevenlabs.ts +25 -0
- package/scripts/examples/using-google-calendar.ts +57 -0
- package/scripts/examples/using-google-docs.ts +74 -0
- package/scripts/examples/using-google-drive.ts +74 -0
- package/scripts/examples/using-google-sheets.ts +89 -0
- package/scripts/examples/using-nlp.ts +55 -0
- package/scripts/examples/using-ollama.ts +10 -0
- package/scripts/examples/using-openai-codex.ts +23 -0
- package/scripts/examples/using-postgres.ts +55 -0
- package/scripts/examples/using-runpod.ts +32 -0
- package/scripts/examples/using-tts.ts +40 -0
- package/scripts/examples/vm-loading-esm-modules.ts +16 -0
- package/scripts/scaffold.ts +391 -0
- package/scripts/scratch.ts +15 -0
- package/scripts/test-command-listener.ts +123 -0
- package/scripts/test-window-manager-lifecycle.ts +86 -0
- package/scripts/test-window-manager.ts +43 -0
- package/scripts/update-introspection-data.ts +58 -0
- package/src/agi/README.md +14 -0
- package/src/agi/container.server.ts +114 -0
- package/src/agi/endpoints/ask.ts +60 -0
- package/src/agi/endpoints/conversations/[id].ts +45 -0
- package/src/agi/endpoints/conversations.ts +31 -0
- package/src/agi/endpoints/experts.ts +37 -0
- package/src/agi/features/assistant.ts +767 -0
- package/src/agi/features/assistants-manager.ts +260 -0
- package/src/agi/features/claude-code.ts +1111 -0
- package/src/agi/features/conversation-history.ts +497 -0
- package/src/agi/features/conversation.ts +799 -0
- package/src/agi/features/openai-codex.ts +631 -0
- package/src/agi/features/openapi.ts +438 -0
- package/src/agi/features/skills-library.ts +425 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/token-counter.ts +122 -0
- package/src/browser.ts +25 -0
- package/src/bus.ts +100 -0
- package/src/cli/cli.ts +70 -0
- package/src/client.ts +461 -0
- package/src/clients/civitai/index.ts +541 -0
- package/src/clients/client-template.ts +41 -0
- package/src/clients/comfyui/index.ts +597 -0
- package/src/clients/elevenlabs/index.ts +291 -0
- package/src/clients/openai/index.ts +451 -0
- package/src/clients/supabase/index.ts +366 -0
- package/src/command.ts +164 -0
- package/src/commands/chat.ts +182 -0
- package/src/commands/console.ts +192 -0
- package/src/commands/describe.ts +433 -0
- package/src/commands/eval.ts +116 -0
- package/src/commands/help.ts +214 -0
- package/src/commands/index.ts +14 -0
- package/src/commands/mcp.ts +64 -0
- package/src/commands/prompt.ts +807 -0
- package/src/commands/run.ts +257 -0
- package/src/commands/sandbox-mcp.ts +439 -0
- package/src/commands/scaffold.ts +79 -0
- package/src/commands/serve.ts +172 -0
- package/src/container.ts +781 -0
- package/src/endpoint.ts +340 -0
- package/src/feature.ts +75 -0
- package/src/hash-object.ts +97 -0
- package/src/helper.ts +543 -0
- package/src/introspection/generated.agi.ts +23388 -0
- package/src/introspection/generated.node.ts +18899 -0
- package/src/introspection/generated.web.ts +2021 -0
- package/src/introspection/index.ts +256 -0
- package/src/introspection/scan.ts +912 -0
- package/src/node/container.ts +354 -0
- package/src/node/feature.ts +13 -0
- package/src/node/features/container-link.ts +558 -0
- package/src/node/features/content-db.ts +475 -0
- package/src/node/features/disk-cache.ts +382 -0
- package/src/node/features/dns.ts +655 -0
- package/src/node/features/docker.ts +912 -0
- package/src/node/features/downloader.ts +92 -0
- package/src/node/features/esbuild.ts +68 -0
- package/src/node/features/file-manager.ts +357 -0
- package/src/node/features/fs.ts +534 -0
- package/src/node/features/git.ts +492 -0
- package/src/node/features/google-auth.ts +502 -0
- package/src/node/features/google-calendar.ts +300 -0
- package/src/node/features/google-docs.ts +404 -0
- package/src/node/features/google-drive.ts +339 -0
- package/src/node/features/google-sheets.ts +279 -0
- package/src/node/features/grep.ts +406 -0
- package/src/node/features/helpers.ts +374 -0
- package/src/node/features/ink.ts +490 -0
- package/src/node/features/ipc-socket.ts +459 -0
- package/src/node/features/json-tree.ts +188 -0
- package/src/node/features/launcher-app-command-listener.ts +388 -0
- package/src/node/features/networking.ts +925 -0
- package/src/node/features/nlp.ts +211 -0
- package/src/node/features/opener.ts +166 -0
- package/src/node/features/os.ts +157 -0
- package/src/node/features/package-finder.ts +539 -0
- package/src/node/features/port-exposer.ts +342 -0
- package/src/node/features/postgres.ts +273 -0
- package/src/node/features/proc.ts +502 -0
- package/src/node/features/process-manager.ts +542 -0
- package/src/node/features/python.ts +444 -0
- package/src/node/features/repl.ts +194 -0
- package/src/node/features/runpod.ts +802 -0
- package/src/node/features/secure-shell.ts +248 -0
- package/src/node/features/semantic-search.ts +924 -0
- package/src/node/features/sqlite.ts +289 -0
- package/src/node/features/telegram.ts +342 -0
- package/src/node/features/tts.ts +184 -0
- package/src/node/features/ui.ts +857 -0
- package/src/node/features/vault.ts +164 -0
- package/src/node/features/vm.ts +312 -0
- package/src/node/features/window-manager.ts +804 -0
- package/src/node/features/yaml-tree.ts +149 -0
- package/src/node/features/yaml.ts +132 -0
- package/src/node.ts +70 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +199 -0
- package/src/scaffolds/generated.ts +1613 -0
- package/src/scaffolds/template.ts +37 -0
- package/src/schemas/base.ts +255 -0
- package/src/server.ts +135 -0
- package/src/servers/express.ts +209 -0
- package/src/servers/mcp.ts +805 -0
- package/src/servers/socket.ts +120 -0
- package/src/state.ts +101 -0
- package/src/web/clients/socket.ts +82 -0
- package/src/web/container.ts +74 -0
- package/src/web/extension.ts +30 -0
- package/src/web/feature.ts +12 -0
- package/src/web/features/asset-loader.ts +64 -0
- package/src/web/features/container-link.ts +385 -0
- package/src/web/features/esbuild.ts +79 -0
- package/src/web/features/helpers.ts +267 -0
- package/src/web/features/network.ts +61 -0
- package/src/web/features/speech.ts +87 -0
- package/src/web/features/vault.ts +189 -0
- package/src/web/features/vm.ts +78 -0
- package/src/web/features/voice-recognition.ts +129 -0
- package/src/web/shims/isomorphic-vm.ts +149 -0
- package/test/bus.test.ts +134 -0
- package/test/clients-servers.test.ts +216 -0
- package/test/container-link.test.ts +274 -0
- package/test/features.test.ts +160 -0
- package/test/integration.test.ts +787 -0
- package/test/node-container.test.ts +121 -0
- package/test/rate-limit.test.ts +272 -0
- package/test/semantic-search.test.ts +550 -0
- package/test/state.test.ts +121 -0
- package/test-integration/assistant.test.ts +138 -0
- package/test-integration/assistants-manager.test.ts +123 -0
- package/test-integration/claude-code.test.ts +98 -0
- package/test-integration/conversation-history.test.ts +205 -0
- package/test-integration/conversation.test.ts +137 -0
- package/test-integration/elevenlabs.test.ts +55 -0
- package/test-integration/google-services.test.ts +80 -0
- package/test-integration/helpers.ts +89 -0
- package/test-integration/openai-codex.test.ts +93 -0
- package/test-integration/runpod.test.ts +58 -0
- package/test-integration/server-endpoints.test.ts +97 -0
- package/test-integration/skills-library.test.ts +157 -0
- package/test-integration/telegram.test.ts +46 -0
- package/tsconfig.json +58 -0
- package/uv.lock +8 -0
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
# FS (features.fs)
|
|
2
|
+
|
|
3
|
+
The FS feature provides methods for interacting with the file system, relative to the container's cwd.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
container.feature('fs')
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Methods
|
|
12
|
+
|
|
13
|
+
### readFileAsync
|
|
14
|
+
|
|
15
|
+
Asynchronously reads a file and returns its contents as a Buffer.
|
|
16
|
+
|
|
17
|
+
**Parameters:**
|
|
18
|
+
|
|
19
|
+
| Name | Type | Required | Description |
|
|
20
|
+
|------|------|----------|-------------|
|
|
21
|
+
| `path` | `string` | ✓ | The file path relative to the container's working directory |
|
|
22
|
+
|
|
23
|
+
**Returns:** `void`
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const fs = container.feature('fs')
|
|
27
|
+
const buffer = await fs.readFileAsync('data.txt')
|
|
28
|
+
console.log(buffer.toString())
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### readdir
|
|
34
|
+
|
|
35
|
+
Asynchronously reads the contents of a directory.
|
|
36
|
+
|
|
37
|
+
**Parameters:**
|
|
38
|
+
|
|
39
|
+
| Name | Type | Required | Description |
|
|
40
|
+
|------|------|----------|-------------|
|
|
41
|
+
| `path` | `string` | ✓ | The directory path relative to the container's working directory |
|
|
42
|
+
|
|
43
|
+
**Returns:** `void`
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
const fs = container.feature('fs')
|
|
47
|
+
const entries = await fs.readdir('src')
|
|
48
|
+
console.log(entries) // ['index.ts', 'utils.ts', 'components']
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### walk
|
|
54
|
+
|
|
55
|
+
Recursively walks a directory and returns an array of relative path names for each file and directory.
|
|
56
|
+
|
|
57
|
+
**Parameters:**
|
|
58
|
+
|
|
59
|
+
| Name | Type | Required | Description |
|
|
60
|
+
|------|------|----------|-------------|
|
|
61
|
+
| `basePath` | `string` | ✓ | The base directory path to start walking from |
|
|
62
|
+
| `options` | `WalkOptions` | | Options to configure the walk behavior |
|
|
63
|
+
|
|
64
|
+
`WalkOptions` properties:
|
|
65
|
+
|
|
66
|
+
| Property | Type | Description |
|
|
67
|
+
|----------|------|-------------|
|
|
68
|
+
| `directories` | `boolean` | Whether to include directories in results |
|
|
69
|
+
| `files` | `boolean` | Whether to include files in results |
|
|
70
|
+
| `exclude` | `string | string[]` | ] - Patterns to exclude from results |
|
|
71
|
+
| `include` | `string | string[]` | ] - Patterns to include in results |
|
|
72
|
+
|
|
73
|
+
**Returns:** `void`
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
const result = fs.walk('src', { files: true, directories: false })
|
|
77
|
+
console.log(result.files) // ['src/index.ts', 'src/utils.ts', 'src/components/Button.tsx']
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
### walkAsync
|
|
83
|
+
|
|
84
|
+
Asynchronously and recursively walks a directory and returns an array of relative path names.
|
|
85
|
+
|
|
86
|
+
**Parameters:**
|
|
87
|
+
|
|
88
|
+
| Name | Type | Required | Description |
|
|
89
|
+
|------|------|----------|-------------|
|
|
90
|
+
| `baseDir` | `string` | ✓ | The base directory path to start walking from |
|
|
91
|
+
| `options` | `WalkOptions` | | Options to configure the walk behavior |
|
|
92
|
+
|
|
93
|
+
`WalkOptions` properties:
|
|
94
|
+
|
|
95
|
+
| Property | Type | Description |
|
|
96
|
+
|----------|------|-------------|
|
|
97
|
+
| `directories` | `boolean` | Whether to include directories in results |
|
|
98
|
+
| `files` | `boolean` | Whether to include files in results |
|
|
99
|
+
| `exclude` | `string | string[]` | ] - Patterns to exclude from results |
|
|
100
|
+
| `include` | `string | string[]` | ] - Patterns to include in results |
|
|
101
|
+
|
|
102
|
+
**Returns:** `void`
|
|
103
|
+
|
|
104
|
+
```ts
|
|
105
|
+
const result = await fs.walkAsync('src', { exclude: ['node_modules'] })
|
|
106
|
+
console.log(`Found ${result.files.length} files and ${result.directories.length} directories`)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
### ensureFileAsync
|
|
112
|
+
|
|
113
|
+
Asynchronously ensures a file exists with the specified content, creating directories as needed.
|
|
114
|
+
|
|
115
|
+
**Parameters:**
|
|
116
|
+
|
|
117
|
+
| Name | Type | Required | Description |
|
|
118
|
+
|------|------|----------|-------------|
|
|
119
|
+
| `path` | `string` | ✓ | The file path where the file should be created |
|
|
120
|
+
| `content` | `string` | ✓ | The content to write to the file |
|
|
121
|
+
| `overwrite` | `any` | | Whether to overwrite the file if it already exists |
|
|
122
|
+
|
|
123
|
+
**Returns:** `void`
|
|
124
|
+
|
|
125
|
+
```ts
|
|
126
|
+
await fs.ensureFileAsync('config/settings.json', '{}', true)
|
|
127
|
+
// Creates config directory and settings.json file with '{}' content
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
### writeFileAsync
|
|
133
|
+
|
|
134
|
+
Asynchronously writes content to a file.
|
|
135
|
+
|
|
136
|
+
**Parameters:**
|
|
137
|
+
|
|
138
|
+
| Name | Type | Required | Description |
|
|
139
|
+
|------|------|----------|-------------|
|
|
140
|
+
| `path` | `string` | ✓ | The file path where content should be written |
|
|
141
|
+
| `content` | `Buffer | string` | ✓ | The content to write to the file |
|
|
142
|
+
|
|
143
|
+
**Returns:** `void`
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
await fs.writeFileAsync('output.txt', 'Hello World')
|
|
147
|
+
await fs.writeFileAsync('data.bin', Buffer.from([1, 2, 3, 4]))
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
### appendFile
|
|
153
|
+
|
|
154
|
+
Synchronously appends content to a file.
|
|
155
|
+
|
|
156
|
+
**Parameters:**
|
|
157
|
+
|
|
158
|
+
| Name | Type | Required | Description |
|
|
159
|
+
|------|------|----------|-------------|
|
|
160
|
+
| `path` | `string` | ✓ | The file path to append to |
|
|
161
|
+
| `content` | `Buffer | string` | ✓ | The content to append |
|
|
162
|
+
|
|
163
|
+
**Returns:** `void`
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
fs.appendFile('log.txt', 'New line\n')
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
### appendFileAsync
|
|
172
|
+
|
|
173
|
+
Asynchronously appends content to a file.
|
|
174
|
+
|
|
175
|
+
**Parameters:**
|
|
176
|
+
|
|
177
|
+
| Name | Type | Required | Description |
|
|
178
|
+
|------|------|----------|-------------|
|
|
179
|
+
| `path` | `string` | ✓ | The file path to append to |
|
|
180
|
+
| `content` | `Buffer | string` | ✓ | The content to append |
|
|
181
|
+
|
|
182
|
+
**Returns:** `void`
|
|
183
|
+
|
|
184
|
+
```ts
|
|
185
|
+
await fs.appendFileAsync('log.txt', 'New line\n')
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
### ensureFolder
|
|
191
|
+
|
|
192
|
+
Synchronously ensures a directory exists, creating parent directories as needed.
|
|
193
|
+
|
|
194
|
+
**Parameters:**
|
|
195
|
+
|
|
196
|
+
| Name | Type | Required | Description |
|
|
197
|
+
|------|------|----------|-------------|
|
|
198
|
+
| `path` | `string` | ✓ | The directory path to create |
|
|
199
|
+
|
|
200
|
+
**Returns:** `void`
|
|
201
|
+
|
|
202
|
+
```ts
|
|
203
|
+
fs.ensureFolder('logs/debug')
|
|
204
|
+
// Creates logs and logs/debug directories if they don't exist
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
### ensureFile
|
|
210
|
+
|
|
211
|
+
Synchronously ensures a file exists with the specified content, creating directories as needed.
|
|
212
|
+
|
|
213
|
+
**Parameters:**
|
|
214
|
+
|
|
215
|
+
| Name | Type | Required | Description |
|
|
216
|
+
|------|------|----------|-------------|
|
|
217
|
+
| `path` | `string` | ✓ | The file path where the file should be created |
|
|
218
|
+
| `content` | `string` | ✓ | The content to write to the file |
|
|
219
|
+
| `overwrite` | `any` | | Whether to overwrite the file if it already exists |
|
|
220
|
+
|
|
221
|
+
**Returns:** `void`
|
|
222
|
+
|
|
223
|
+
```ts
|
|
224
|
+
fs.ensureFile('logs/app.log', '', false)
|
|
225
|
+
// Creates logs directory and app.log file if they don't exist
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
### findUp
|
|
231
|
+
|
|
232
|
+
Synchronously finds a file by walking up the directory tree from the current working directory.
|
|
233
|
+
|
|
234
|
+
**Parameters:**
|
|
235
|
+
|
|
236
|
+
| Name | Type | Required | Description |
|
|
237
|
+
|------|------|----------|-------------|
|
|
238
|
+
| `fileName` | `string` | ✓ | The name of the file to search for |
|
|
239
|
+
| `options` | `{ cwd?: string }` | | Options for the search |
|
|
240
|
+
|
|
241
|
+
`{ cwd?: string }` properties:
|
|
242
|
+
|
|
243
|
+
| Property | Type | Description |
|
|
244
|
+
|----------|------|-------------|
|
|
245
|
+
| `cwd` | `any` | The directory to start searching from (defaults to container.cwd) |
|
|
246
|
+
|
|
247
|
+
**Returns:** `string | null`
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const packageJson = fs.findUp('package.json')
|
|
251
|
+
if (packageJson) {
|
|
252
|
+
console.log(`Found package.json at: ${packageJson}`)
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
### existsAsync
|
|
259
|
+
|
|
260
|
+
Asynchronously checks if a file or directory exists.
|
|
261
|
+
|
|
262
|
+
**Parameters:**
|
|
263
|
+
|
|
264
|
+
| Name | Type | Required | Description |
|
|
265
|
+
|------|------|----------|-------------|
|
|
266
|
+
| `path` | `string` | ✓ | The path to check for existence |
|
|
267
|
+
|
|
268
|
+
**Returns:** `void`
|
|
269
|
+
|
|
270
|
+
```ts
|
|
271
|
+
if (await fs.existsAsync('config.json')) {
|
|
272
|
+
console.log('Config file exists!')
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
### exists
|
|
279
|
+
|
|
280
|
+
Synchronously checks if a file or directory exists.
|
|
281
|
+
|
|
282
|
+
**Parameters:**
|
|
283
|
+
|
|
284
|
+
| Name | Type | Required | Description |
|
|
285
|
+
|------|------|----------|-------------|
|
|
286
|
+
| `path` | `string` | ✓ | The path to check for existence |
|
|
287
|
+
|
|
288
|
+
**Returns:** `boolean`
|
|
289
|
+
|
|
290
|
+
```ts
|
|
291
|
+
if (fs.exists('config.json')) {
|
|
292
|
+
console.log('Config file exists!')
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
### rm
|
|
299
|
+
|
|
300
|
+
Asynchronously removes a file.
|
|
301
|
+
|
|
302
|
+
**Parameters:**
|
|
303
|
+
|
|
304
|
+
| Name | Type | Required | Description |
|
|
305
|
+
|------|------|----------|-------------|
|
|
306
|
+
| `path` | `string` | ✓ | The path of the file to remove |
|
|
307
|
+
|
|
308
|
+
**Returns:** `void`
|
|
309
|
+
|
|
310
|
+
```ts
|
|
311
|
+
await fs.rm('temp/cache.tmp')
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
### readJson
|
|
317
|
+
|
|
318
|
+
Synchronously reads and parses a JSON file.
|
|
319
|
+
|
|
320
|
+
**Parameters:**
|
|
321
|
+
|
|
322
|
+
| Name | Type | Required | Description |
|
|
323
|
+
|------|------|----------|-------------|
|
|
324
|
+
| `path` | `string` | ✓ | The path to the JSON file |
|
|
325
|
+
|
|
326
|
+
**Returns:** `void`
|
|
327
|
+
|
|
328
|
+
```ts
|
|
329
|
+
const config = fs.readJson('config.json')
|
|
330
|
+
console.log(config.version)
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
### readFile
|
|
336
|
+
|
|
337
|
+
Synchronously reads a file and returns its contents as a string.
|
|
338
|
+
|
|
339
|
+
**Parameters:**
|
|
340
|
+
|
|
341
|
+
| Name | Type | Required | Description |
|
|
342
|
+
|------|------|----------|-------------|
|
|
343
|
+
| `path` | `string` | ✓ | The path to the file |
|
|
344
|
+
|
|
345
|
+
**Returns:** `void`
|
|
346
|
+
|
|
347
|
+
```ts
|
|
348
|
+
const content = fs.readFile('README.md')
|
|
349
|
+
console.log(content)
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
|
|
354
|
+
### rmdir
|
|
355
|
+
|
|
356
|
+
Asynchronously removes a directory and all its contents.
|
|
357
|
+
|
|
358
|
+
**Parameters:**
|
|
359
|
+
|
|
360
|
+
| Name | Type | Required | Description |
|
|
361
|
+
|------|------|----------|-------------|
|
|
362
|
+
| `dirPath` | `string` | ✓ | The path of the directory to remove |
|
|
363
|
+
|
|
364
|
+
**Returns:** `void`
|
|
365
|
+
|
|
366
|
+
```ts
|
|
367
|
+
await fs.rmdir('temp/cache')
|
|
368
|
+
// Removes the cache directory and all its contents
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
### findUpAsync
|
|
374
|
+
|
|
375
|
+
Asynchronously finds a file by walking up the directory tree.
|
|
376
|
+
|
|
377
|
+
**Parameters:**
|
|
378
|
+
|
|
379
|
+
| Name | Type | Required | Description |
|
|
380
|
+
|------|------|----------|-------------|
|
|
381
|
+
| `fileName` | `string` | ✓ | The name of the file to search for |
|
|
382
|
+
| `options` | `{ cwd?: string; multiple?: boolean }` | | Options for the search |
|
|
383
|
+
|
|
384
|
+
`{ cwd?: string; multiple?: boolean }` properties:
|
|
385
|
+
|
|
386
|
+
| Property | Type | Description |
|
|
387
|
+
|----------|------|-------------|
|
|
388
|
+
| `cwd` | `any` | The directory to start searching from (defaults to container.cwd) |
|
|
389
|
+
| `multiple` | `any` | Whether to find multiple instances of the file |
|
|
390
|
+
|
|
391
|
+
**Returns:** `Promise<string | string[] | null>`
|
|
392
|
+
|
|
393
|
+
```ts
|
|
394
|
+
const packageJson = await fs.findUpAsync('package.json')
|
|
395
|
+
const allPackageJsons = await fs.findUpAsync('package.json', { multiple: true })
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
## State (Zod v4 schema)
|
|
401
|
+
|
|
402
|
+
| Property | Type | Description |
|
|
403
|
+
|----------|------|-------------|
|
|
404
|
+
| `enabled` | `boolean` | Whether this feature is currently enabled |
|
|
405
|
+
|
|
406
|
+
## Examples
|
|
407
|
+
|
|
408
|
+
**features.fs**
|
|
409
|
+
|
|
410
|
+
```ts
|
|
411
|
+
const fs = container.feature('fs')
|
|
412
|
+
const content = fs.readFile('package.json')
|
|
413
|
+
const exists = fs.exists('tsconfig.json')
|
|
414
|
+
await fs.ensureFileAsync('output/result.json', '{}')
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
**readFileAsync**
|
|
420
|
+
|
|
421
|
+
```ts
|
|
422
|
+
const fs = container.feature('fs')
|
|
423
|
+
const buffer = await fs.readFileAsync('data.txt')
|
|
424
|
+
console.log(buffer.toString())
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
**readdir**
|
|
430
|
+
|
|
431
|
+
```ts
|
|
432
|
+
const fs = container.feature('fs')
|
|
433
|
+
const entries = await fs.readdir('src')
|
|
434
|
+
console.log(entries) // ['index.ts', 'utils.ts', 'components']
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
|
|
439
|
+
**walk**
|
|
440
|
+
|
|
441
|
+
```ts
|
|
442
|
+
const result = fs.walk('src', { files: true, directories: false })
|
|
443
|
+
console.log(result.files) // ['src/index.ts', 'src/utils.ts', 'src/components/Button.tsx']
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
**walkAsync**
|
|
449
|
+
|
|
450
|
+
```ts
|
|
451
|
+
const result = await fs.walkAsync('src', { exclude: ['node_modules'] })
|
|
452
|
+
console.log(`Found ${result.files.length} files and ${result.directories.length} directories`)
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
|
|
457
|
+
**ensureFileAsync**
|
|
458
|
+
|
|
459
|
+
```ts
|
|
460
|
+
await fs.ensureFileAsync('config/settings.json', '{}', true)
|
|
461
|
+
// Creates config directory and settings.json file with '{}' content
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
**writeFileAsync**
|
|
467
|
+
|
|
468
|
+
```ts
|
|
469
|
+
await fs.writeFileAsync('output.txt', 'Hello World')
|
|
470
|
+
await fs.writeFileAsync('data.bin', Buffer.from([1, 2, 3, 4]))
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
|
|
474
|
+
|
|
475
|
+
**appendFile**
|
|
476
|
+
|
|
477
|
+
```ts
|
|
478
|
+
fs.appendFile('log.txt', 'New line\n')
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
**appendFileAsync**
|
|
484
|
+
|
|
485
|
+
```ts
|
|
486
|
+
await fs.appendFileAsync('log.txt', 'New line\n')
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
**ensureFolder**
|
|
492
|
+
|
|
493
|
+
```ts
|
|
494
|
+
fs.ensureFolder('logs/debug')
|
|
495
|
+
// Creates logs and logs/debug directories if they don't exist
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
**ensureFile**
|
|
501
|
+
|
|
502
|
+
```ts
|
|
503
|
+
fs.ensureFile('logs/app.log', '', false)
|
|
504
|
+
// Creates logs directory and app.log file if they don't exist
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
**findUp**
|
|
510
|
+
|
|
511
|
+
```ts
|
|
512
|
+
const packageJson = fs.findUp('package.json')
|
|
513
|
+
if (packageJson) {
|
|
514
|
+
console.log(`Found package.json at: ${packageJson}`)
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
**existsAsync**
|
|
521
|
+
|
|
522
|
+
```ts
|
|
523
|
+
if (await fs.existsAsync('config.json')) {
|
|
524
|
+
console.log('Config file exists!')
|
|
525
|
+
}
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
**exists**
|
|
531
|
+
|
|
532
|
+
```ts
|
|
533
|
+
if (fs.exists('config.json')) {
|
|
534
|
+
console.log('Config file exists!')
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
**rm**
|
|
541
|
+
|
|
542
|
+
```ts
|
|
543
|
+
await fs.rm('temp/cache.tmp')
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
|
|
548
|
+
**readJson**
|
|
549
|
+
|
|
550
|
+
```ts
|
|
551
|
+
const config = fs.readJson('config.json')
|
|
552
|
+
console.log(config.version)
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
|
|
556
|
+
|
|
557
|
+
**readFile**
|
|
558
|
+
|
|
559
|
+
```ts
|
|
560
|
+
const content = fs.readFile('README.md')
|
|
561
|
+
console.log(content)
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
**rmdir**
|
|
567
|
+
|
|
568
|
+
```ts
|
|
569
|
+
await fs.rmdir('temp/cache')
|
|
570
|
+
// Removes the cache directory and all its contents
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
**findUpAsync**
|
|
576
|
+
|
|
577
|
+
```ts
|
|
578
|
+
const packageJson = await fs.findUpAsync('package.json')
|
|
579
|
+
const allPackageJsons = await fs.findUpAsync('package.json', { multiple: true })
|
|
580
|
+
```
|
|
581
|
+
|