luca 1.1.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yaml +169 -0
- package/AGENTS.md +99 -0
- package/CLAUDE.md +115 -0
- package/CNAME +1 -0
- package/README.md +257 -8
- package/RUNME.md +56 -0
- package/assistants/codingAssistant/ABOUT.md +5 -0
- package/assistants/codingAssistant/CORE.md +28 -0
- package/assistants/codingAssistant/hooks.ts +21 -0
- package/assistants/codingAssistant/tools.ts +12 -0
- package/assistants/inkbot/ABOUT.md +16 -0
- package/assistants/inkbot/CORE.md +330 -0
- package/assistants/inkbot/hooks.ts +6 -0
- package/assistants/inkbot/tools.ts +53 -0
- package/assistants/researcher/ABOUT.md +5 -0
- package/assistants/researcher/CORE.md +46 -0
- package/assistants/researcher/hooks.ts +16 -0
- package/assistants/researcher/tools.ts +237 -0
- package/bun.lock +2769 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-bootstrap.ts +118 -0
- package/commands/build-python-bridge.ts +43 -0
- package/commands/build-scaffolds.ts +176 -0
- package/commands/generate-api-docs.ts +114 -0
- package/commands/inkbot.ts +874 -0
- package/commands/release.ts +80 -0
- package/commands/try-all-challenges.ts +543 -0
- package/commands/try-challenge.ts +100 -0
- package/dist/agi/container.server.d.ts +63 -0
- package/dist/agi/container.server.d.ts.map +1 -0
- package/dist/agi/endpoints/ask.d.ts +20 -0
- package/dist/agi/endpoints/ask.d.ts.map +1 -0
- package/dist/agi/endpoints/conversations/[id].d.ts +27 -0
- package/dist/agi/endpoints/conversations/[id].d.ts.map +1 -0
- package/dist/agi/endpoints/conversations.d.ts +18 -0
- package/dist/agi/endpoints/conversations.d.ts.map +1 -0
- package/dist/agi/endpoints/experts.d.ts +8 -0
- package/dist/agi/endpoints/experts.d.ts.map +1 -0
- package/dist/agi/feature.d.ts +9 -0
- package/dist/agi/feature.d.ts.map +1 -0
- package/dist/agi/features/assistant.d.ts +509 -0
- package/dist/agi/features/assistant.d.ts.map +1 -0
- package/dist/agi/features/assistants-manager.d.ts +236 -0
- package/dist/agi/features/assistants-manager.d.ts.map +1 -0
- package/dist/agi/features/autonomous-assistant.d.ts +281 -0
- package/dist/agi/features/autonomous-assistant.d.ts.map +1 -0
- package/dist/agi/features/browser-use.d.ts +479 -0
- package/dist/agi/features/browser-use.d.ts.map +1 -0
- package/dist/agi/features/claude-code.d.ts +824 -0
- package/dist/agi/features/claude-code.d.ts.map +1 -0
- package/dist/agi/features/conversation-history.d.ts +245 -0
- package/dist/agi/features/conversation-history.d.ts.map +1 -0
- package/dist/agi/features/conversation.d.ts +464 -0
- package/dist/agi/features/conversation.d.ts.map +1 -0
- package/dist/agi/features/docs-reader.d.ts +72 -0
- package/dist/agi/features/docs-reader.d.ts.map +1 -0
- package/dist/agi/features/file-tools.d.ts +110 -0
- package/dist/agi/features/file-tools.d.ts.map +1 -0
- package/dist/agi/features/luca-coder.d.ts +323 -0
- package/dist/agi/features/luca-coder.d.ts.map +1 -0
- package/dist/agi/features/openai-codex.d.ts +381 -0
- package/dist/agi/features/openai-codex.d.ts.map +1 -0
- package/dist/agi/features/openapi.d.ts +200 -0
- package/dist/agi/features/openapi.d.ts.map +1 -0
- package/dist/agi/features/skills-library.d.ts +167 -0
- package/dist/agi/features/skills-library.d.ts.map +1 -0
- package/dist/agi/index.d.ts +5 -0
- package/dist/agi/index.d.ts.map +1 -0
- package/dist/agi/lib/interceptor-chain.d.ts +44 -0
- package/dist/agi/lib/interceptor-chain.d.ts.map +1 -0
- package/dist/agi/lib/token-counter.d.ts +13 -0
- package/dist/agi/lib/token-counter.d.ts.map +1 -0
- package/dist/bootstrap/generated.d.ts +5 -0
- package/dist/bootstrap/generated.d.ts.map +1 -0
- package/dist/browser.d.ts +12 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/bus.d.ts +29 -0
- package/dist/bus.d.ts.map +1 -0
- package/dist/cli/build-info.d.ts +4 -0
- package/dist/cli/build-info.d.ts.map +1 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/client.d.ts +60 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/clients/civitai/index.d.ts +472 -0
- package/dist/clients/civitai/index.d.ts.map +1 -0
- package/dist/clients/client-template.d.ts +30 -0
- package/dist/clients/client-template.d.ts.map +1 -0
- package/dist/clients/comfyui/index.d.ts +281 -0
- package/dist/clients/comfyui/index.d.ts.map +1 -0
- package/dist/clients/elevenlabs/index.d.ts +197 -0
- package/dist/clients/elevenlabs/index.d.ts.map +1 -0
- package/dist/clients/graph.d.ts +64 -0
- package/dist/clients/graph.d.ts.map +1 -0
- package/dist/clients/openai/index.d.ts +247 -0
- package/dist/clients/openai/index.d.ts.map +1 -0
- package/dist/clients/rest.d.ts +92 -0
- package/dist/clients/rest.d.ts.map +1 -0
- package/dist/clients/supabase/index.d.ts +176 -0
- package/dist/clients/supabase/index.d.ts.map +1 -0
- package/dist/clients/websocket.d.ts +127 -0
- package/dist/clients/websocket.d.ts.map +1 -0
- package/dist/command.d.ts +163 -0
- package/dist/command.d.ts.map +1 -0
- package/dist/commands/bootstrap.d.ts +20 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/chat.d.ts +37 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/code.d.ts +28 -0
- package/dist/commands/code.d.ts.map +1 -0
- package/dist/commands/console.d.ts +22 -0
- package/dist/commands/console.d.ts.map +1 -0
- package/dist/commands/describe.d.ts +50 -0
- package/dist/commands/describe.d.ts.map +1 -0
- package/dist/commands/eval.d.ts +23 -0
- package/dist/commands/eval.d.ts.map +1 -0
- package/dist/commands/help.d.ts +25 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/index.d.ts +18 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/introspect.d.ts +24 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/mcp.d.ts +35 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/prompt.d.ts +38 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/run.d.ts +24 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/sandbox-mcp.d.ts +34 -0
- package/dist/commands/sandbox-mcp.d.ts.map +1 -0
- package/dist/commands/save-api-docs.d.ts +21 -0
- package/dist/commands/save-api-docs.d.ts.map +1 -0
- package/dist/commands/scaffold.d.ts +24 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/select.d.ts +22 -0
- package/dist/commands/select.d.ts.map +1 -0
- package/dist/commands/serve.d.ts +29 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/container-describer.d.ts +144 -0
- package/dist/container-describer.d.ts.map +1 -0
- package/dist/container.d.ts +451 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/endpoint.d.ts +113 -0
- package/dist/endpoint.d.ts.map +1 -0
- package/dist/feature.d.ts +47 -0
- package/dist/feature.d.ts.map +1 -0
- package/dist/graft.d.ts +29 -0
- package/dist/graft.d.ts.map +1 -0
- package/dist/hash-object.d.ts +8 -0
- package/dist/hash-object.d.ts.map +1 -0
- package/dist/helper.d.ts +209 -0
- package/dist/helper.d.ts.map +1 -0
- package/dist/introspection/generated.node.d.ts +44623 -0
- package/dist/introspection/generated.node.d.ts.map +1 -0
- package/dist/introspection/generated.web.d.ts +1412 -0
- package/dist/introspection/generated.web.d.ts.map +1 -0
- package/dist/introspection/index.d.ts +156 -0
- package/dist/introspection/index.d.ts.map +1 -0
- package/dist/introspection/scan.d.ts +147 -0
- package/dist/introspection/scan.d.ts.map +1 -0
- package/dist/node/container.d.ts +256 -0
- package/dist/node/container.d.ts.map +1 -0
- package/dist/node/feature.d.ts +9 -0
- package/dist/node/feature.d.ts.map +1 -0
- package/dist/node/features/container-link.d.ts +213 -0
- package/dist/node/features/container-link.d.ts.map +1 -0
- package/dist/node/features/content-db.d.ts +354 -0
- package/dist/node/features/content-db.d.ts.map +1 -0
- package/dist/node/features/disk-cache.d.ts +236 -0
- package/dist/node/features/disk-cache.d.ts.map +1 -0
- package/dist/node/features/dns.d.ts +511 -0
- package/dist/node/features/dns.d.ts.map +1 -0
- package/dist/node/features/docker.d.ts +485 -0
- package/dist/node/features/docker.d.ts.map +1 -0
- package/dist/node/features/downloader.d.ts +73 -0
- package/dist/node/features/downloader.d.ts.map +1 -0
- package/dist/node/features/figlet-fonts.d.ts +4 -0
- package/dist/node/features/figlet-fonts.d.ts.map +1 -0
- package/dist/node/features/file-manager.d.ts +177 -0
- package/dist/node/features/file-manager.d.ts.map +1 -0
- package/dist/node/features/fs.d.ts +635 -0
- package/dist/node/features/fs.d.ts.map +1 -0
- package/dist/node/features/git.d.ts +329 -0
- package/dist/node/features/git.d.ts.map +1 -0
- package/dist/node/features/google-auth.d.ts +200 -0
- package/dist/node/features/google-auth.d.ts.map +1 -0
- package/dist/node/features/google-calendar.d.ts +194 -0
- package/dist/node/features/google-calendar.d.ts.map +1 -0
- package/dist/node/features/google-docs.d.ts +138 -0
- package/dist/node/features/google-docs.d.ts.map +1 -0
- package/dist/node/features/google-drive.d.ts +202 -0
- package/dist/node/features/google-drive.d.ts.map +1 -0
- package/dist/node/features/google-mail.d.ts +221 -0
- package/dist/node/features/google-mail.d.ts.map +1 -0
- package/dist/node/features/google-sheets.d.ts +157 -0
- package/dist/node/features/google-sheets.d.ts.map +1 -0
- package/dist/node/features/grep.d.ts +207 -0
- package/dist/node/features/grep.d.ts.map +1 -0
- package/dist/node/features/helpers.d.ts +236 -0
- package/dist/node/features/helpers.d.ts.map +1 -0
- package/dist/node/features/ink.d.ts +332 -0
- package/dist/node/features/ink.d.ts.map +1 -0
- package/dist/node/features/ipc-socket.d.ts +298 -0
- package/dist/node/features/ipc-socket.d.ts.map +1 -0
- package/dist/node/features/json-tree.d.ts +140 -0
- package/dist/node/features/json-tree.d.ts.map +1 -0
- package/dist/node/features/networking.d.ts +373 -0
- package/dist/node/features/networking.d.ts.map +1 -0
- package/dist/node/features/nlp.d.ts +125 -0
- package/dist/node/features/nlp.d.ts.map +1 -0
- package/dist/node/features/opener.d.ts +93 -0
- package/dist/node/features/opener.d.ts.map +1 -0
- package/dist/node/features/os.d.ts +168 -0
- package/dist/node/features/os.d.ts.map +1 -0
- package/dist/node/features/package-finder.d.ts +419 -0
- package/dist/node/features/package-finder.d.ts.map +1 -0
- package/dist/node/features/postgres.d.ts +173 -0
- package/dist/node/features/postgres.d.ts.map +1 -0
- package/dist/node/features/proc.d.ts +285 -0
- package/dist/node/features/proc.d.ts.map +1 -0
- package/dist/node/features/process-manager.d.ts +427 -0
- package/dist/node/features/process-manager.d.ts.map +1 -0
- package/dist/node/features/python.d.ts +477 -0
- package/dist/node/features/python.d.ts.map +1 -0
- package/dist/node/features/redis.d.ts +247 -0
- package/dist/node/features/redis.d.ts.map +1 -0
- package/dist/node/features/repl.d.ts +84 -0
- package/dist/node/features/repl.d.ts.map +1 -0
- package/dist/node/features/runpod.d.ts +527 -0
- package/dist/node/features/runpod.d.ts.map +1 -0
- package/dist/node/features/secure-shell.d.ts +145 -0
- package/dist/node/features/secure-shell.d.ts.map +1 -0
- package/dist/node/features/semantic-search.d.ts +207 -0
- package/dist/node/features/semantic-search.d.ts.map +1 -0
- package/dist/node/features/sqlite.d.ts +180 -0
- package/dist/node/features/sqlite.d.ts.map +1 -0
- package/dist/node/features/telegram.d.ts +173 -0
- package/dist/node/features/telegram.d.ts.map +1 -0
- package/dist/node/features/transpiler.d.ts +51 -0
- package/dist/node/features/transpiler.d.ts.map +1 -0
- package/dist/node/features/tts.d.ts +108 -0
- package/dist/node/features/tts.d.ts.map +1 -0
- package/dist/node/features/ui.d.ts +562 -0
- package/dist/node/features/ui.d.ts.map +1 -0
- package/dist/node/features/vault.d.ts +90 -0
- package/dist/node/features/vault.d.ts.map +1 -0
- package/dist/node/features/vm.d.ts +285 -0
- package/dist/node/features/vm.d.ts.map +1 -0
- package/dist/node/features/yaml-tree.d.ts +118 -0
- package/dist/node/features/yaml-tree.d.ts.map +1 -0
- package/dist/node/features/yaml.d.ts +127 -0
- package/dist/node/features/yaml.d.ts.map +1 -0
- package/dist/node.d.ts +67 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/python/generated.d.ts +2 -0
- package/dist/python/generated.d.ts.map +1 -0
- package/dist/react/index.d.ts +36 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/registry.d.ts +97 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/scaffolds/generated.d.ts +13 -0
- package/dist/scaffolds/generated.d.ts.map +1 -0
- package/dist/scaffolds/template.d.ts +11 -0
- package/dist/scaffolds/template.d.ts.map +1 -0
- package/dist/schemas/base.d.ts +254 -0
- package/dist/schemas/base.d.ts.map +1 -0
- package/dist/selector.d.ts +130 -0
- package/dist/selector.d.ts.map +1 -0
- package/dist/server.d.ts +89 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/servers/express.d.ts +104 -0
- package/dist/servers/express.d.ts.map +1 -0
- package/dist/servers/mcp.d.ts +201 -0
- package/dist/servers/mcp.d.ts.map +1 -0
- package/dist/servers/socket.d.ts +121 -0
- package/dist/servers/socket.d.ts.map +1 -0
- package/dist/state.d.ts +24 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/web/clients/socket.d.ts +37 -0
- package/dist/web/clients/socket.d.ts.map +1 -0
- package/dist/web/container.d.ts +55 -0
- package/dist/web/container.d.ts.map +1 -0
- package/dist/web/extension.d.ts +4 -0
- package/dist/web/extension.d.ts.map +1 -0
- package/dist/web/feature.d.ts +8 -0
- package/dist/web/feature.d.ts.map +1 -0
- package/dist/web/features/asset-loader.d.ts +35 -0
- package/dist/web/features/asset-loader.d.ts.map +1 -0
- package/dist/web/features/container-link.d.ts +167 -0
- package/dist/web/features/container-link.d.ts.map +1 -0
- package/dist/web/features/esbuild.d.ts +51 -0
- package/dist/web/features/esbuild.d.ts.map +1 -0
- package/dist/web/features/helpers.d.ts +140 -0
- package/dist/web/features/helpers.d.ts.map +1 -0
- package/dist/web/features/network.d.ts +69 -0
- package/dist/web/features/network.d.ts.map +1 -0
- package/dist/web/features/speech.d.ts +71 -0
- package/dist/web/features/speech.d.ts.map +1 -0
- package/dist/web/features/vault.d.ts +62 -0
- package/dist/web/features/vault.d.ts.map +1 -0
- package/dist/web/features/vm.d.ts +48 -0
- package/dist/web/features/vm.d.ts.map +1 -0
- package/dist/web/features/voice-recognition.d.ts +96 -0
- package/dist/web/features/voice-recognition.d.ts.map +1 -0
- package/dist/web/shims/isomorphic-vm.d.ts +22 -0
- package/dist/web/shims/isomorphic-vm.d.ts.map +1 -0
- package/docs/CLI.md +335 -0
- package/docs/CNAME +1 -0
- package/docs/README.md +60 -0
- package/docs/TABLE-OF-CONTENTS.md +183 -0
- package/docs/apis/clients/elevenlabs.md +308 -0
- package/docs/apis/clients/graph.md +107 -0
- package/docs/apis/clients/openai.md +429 -0
- package/docs/apis/clients/rest.md +161 -0
- package/docs/apis/clients/websocket.md +174 -0
- package/docs/apis/features/agi/assistant.md +625 -0
- package/docs/apis/features/agi/assistants-manager.md +282 -0
- package/docs/apis/features/agi/auto-assistant.md +279 -0
- package/docs/apis/features/agi/browser-use.md +802 -0
- package/docs/apis/features/agi/claude-code.md +884 -0
- package/docs/apis/features/agi/conversation-history.md +364 -0
- package/docs/apis/features/agi/conversation.md +548 -0
- package/docs/apis/features/agi/docs-reader.md +99 -0
- package/docs/apis/features/agi/file-tools.md +163 -0
- package/docs/apis/features/agi/luca-coder.md +407 -0
- package/docs/apis/features/agi/openai-codex.md +396 -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 +239 -0
- package/docs/apis/features/node/container-link.md +192 -0
- package/docs/apis/features/node/content-db.md +450 -0
- package/docs/apis/features/node/disk-cache.md +379 -0
- package/docs/apis/features/node/dns.md +652 -0
- package/docs/apis/features/node/docker.md +706 -0
- package/docs/apis/features/node/downloader.md +81 -0
- package/docs/apis/features/node/esbuild.md +60 -0
- package/docs/apis/features/node/file-manager.md +191 -0
- package/docs/apis/features/node/fs.md +1217 -0
- package/docs/apis/features/node/git.md +371 -0
- package/docs/apis/features/node/google-auth.md +193 -0
- package/docs/apis/features/node/google-calendar.md +202 -0
- package/docs/apis/features/node/google-docs.md +173 -0
- package/docs/apis/features/node/google-drive.md +246 -0
- package/docs/apis/features/node/google-mail.md +214 -0
- package/docs/apis/features/node/google-sheets.md +194 -0
- package/docs/apis/features/node/grep.md +292 -0
- package/docs/apis/features/node/helpers.md +164 -0
- package/docs/apis/features/node/ink.md +334 -0
- package/docs/apis/features/node/ipc-socket.md +249 -0
- package/docs/apis/features/node/json-tree.md +86 -0
- package/docs/apis/features/node/networking.md +316 -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 +146 -0
- package/docs/apis/features/node/package-finder.md +392 -0
- package/docs/apis/features/node/postgres.md +234 -0
- package/docs/apis/features/node/proc.md +399 -0
- package/docs/apis/features/node/process-manager.md +305 -0
- package/docs/apis/features/node/python.md +604 -0
- package/docs/apis/features/node/redis.md +380 -0
- package/docs/apis/features/node/repl.md +88 -0
- package/docs/apis/features/node/runpod.md +674 -0
- package/docs/apis/features/node/secure-shell.md +176 -0
- package/docs/apis/features/node/semantic-search.md +408 -0
- package/docs/apis/features/node/sqlite.md +233 -0
- package/docs/apis/features/node/telegram.md +279 -0
- package/docs/apis/features/node/transpiler.md +74 -0
- package/docs/apis/features/node/tts.md +133 -0
- package/docs/apis/features/node/ui.md +701 -0
- package/docs/apis/features/node/vault.md +59 -0
- package/docs/apis/features/node/vm.md +75 -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 +59 -0
- package/docs/apis/features/web/container-link.md +192 -0
- package/docs/apis/features/web/esbuild.md +54 -0
- package/docs/apis/features/web/helpers.md +164 -0
- package/docs/apis/features/web/network.md +44 -0
- package/docs/apis/features/web/speech.md +69 -0
- package/docs/apis/features/web/vault.md +59 -0
- package/docs/apis/features/web/vm.md +75 -0
- package/docs/apis/features/web/voice.md +84 -0
- package/docs/apis/servers/express.md +171 -0
- package/docs/apis/servers/mcp.md +238 -0
- package/docs/apis/servers/websocket.md +170 -0
- package/docs/bootstrap/CLAUDE.md +101 -0
- package/docs/bootstrap/SKILL.md +341 -0
- package/docs/bootstrap/templates/about-command.ts +41 -0
- package/docs/bootstrap/templates/docs-models.ts +22 -0
- package/docs/bootstrap/templates/docs-readme.md +43 -0
- package/docs/bootstrap/templates/example-feature.ts +53 -0
- package/docs/bootstrap/templates/health-endpoint.ts +15 -0
- package/docs/bootstrap/templates/luca-cli.ts +30 -0
- package/docs/bootstrap/templates/runme.md +54 -0
- package/docs/challenges/caching-proxy.md +16 -0
- package/docs/challenges/content-db-round-trip.md +14 -0
- package/docs/challenges/custom-command.md +9 -0
- package/docs/challenges/file-watcher-pipeline.md +11 -0
- package/docs/challenges/grep-audit-report.md +15 -0
- package/docs/challenges/multi-feature-dashboard.md +14 -0
- package/docs/challenges/process-orchestrator.md +17 -0
- package/docs/challenges/rest-api-server-with-client.md +12 -0
- package/docs/challenges/script-runner-with-vm.md +11 -0
- package/docs/challenges/simple-rest-api.md +15 -0
- package/docs/challenges/websocket-serve-and-client.md +11 -0
- package/docs/challenges/yaml-config-system.md +14 -0
- package/docs/command-system-overhaul.md +94 -0
- package/docs/documentation-audit.md +134 -0
- package/docs/examples/assistant/CORE.md +18 -0
- package/docs/examples/assistant/hooks.ts +3 -0
- package/docs/examples/assistant/tools.ts +10 -0
- package/docs/examples/assistant-hooks-reference.ts +171 -0
- package/docs/examples/assistant-with-process-manager.md +84 -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/entity.md +124 -0
- package/docs/examples/esbuild.md +80 -0
- package/docs/examples/feature-as-tool-provider.md +143 -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/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/postgres.md +91 -0
- package/docs/examples/proc.md +81 -0
- package/docs/examples/process-manager.md +79 -0
- package/docs/examples/python.md +132 -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/structured-output-with-assistants.md +144 -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/websocket-ask-and-reply-example.md +128 -0
- package/docs/examples/yaml-tree.md +93 -0
- package/docs/examples/yaml.md +104 -0
- package/docs/ideas/assistant-factory-pattern.md +142 -0
- package/docs/in-memory-fs.md +4 -0
- package/docs/introspection-audit.md +49 -0
- package/docs/introspection.md +164 -0
- package/docs/mcp/readme.md +162 -0
- package/docs/models.ts +41 -0
- package/docs/philosophy.md +86 -0
- package/docs/principles.md +7 -0
- package/docs/prompts/audit-codebase-for-failures-to-use-the-container.md +34 -0
- package/docs/prompts/check-for-undocumented-features.md +27 -0
- package/docs/prompts/mcp-test-easy-command.md +27 -0
- package/docs/scaffolds/client.md +149 -0
- package/docs/scaffolds/command.md +120 -0
- package/docs/scaffolds/endpoint.md +171 -0
- package/docs/scaffolds/feature.md +158 -0
- package/docs/scaffolds/selector.md +91 -0
- package/docs/scaffolds/server.md +196 -0
- package/docs/selectors.md +115 -0
- package/docs/sessions/custom-command/attempt-log-2.md +195 -0
- package/docs/sessions/file-watcher-pipeline/attempt-log-1.md +728 -0
- package/docs/sessions/file-watcher-pipeline/attempt-log-2.md +555 -0
- package/docs/sessions/grep-audit-report/attempt-log-1.md +289 -0
- package/docs/sessions/multi-feature-dashboard/attempt-log-2.md +679 -0
- package/docs/sessions/rest-api-server-with-client/attempt-log-1.md +1 -0
- package/docs/sessions/rest-api-server-with-client/attempt-log-3.md +920 -0
- package/docs/sessions/simple-rest-api/attempt-log-1.md +593 -0
- package/docs/sessions/websocket-serve-and-client/attempt-log-2.md +995 -0
- package/docs/tutorials/00-bootstrap.md +166 -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 +252 -0
- package/docs/tutorials/09-clients.md +162 -0
- package/docs/tutorials/10-creating-features.md +203 -0
- package/docs/tutorials/11-contentbase.md +191 -0
- package/docs/tutorials/12-assistants.md +215 -0
- package/docs/tutorials/13-introspection.md +157 -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/docs/tutorials/19-python-sessions.md +401 -0
- package/docs/tutorials/20-browser-esm.md +234 -0
- package/index.html +1430 -0
- package/index.ts +1 -0
- package/install.sh +84 -0
- package/luca.cli.ts +16 -0
- package/luca.console.ts +9 -0
- package/main.py +6 -0
- package/package.json +219 -66
- package/public/index.html +1430 -0
- package/public/slides-ai-native.html +902 -0
- package/public/slides-intro.html +974 -0
- package/pyproject.toml +7 -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/using-assistant-with-mcp.ts +555 -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 +11 -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/scaffold.ts +391 -0
- package/scripts/scratch.ts +15 -0
- package/scripts/stamp-build.sh +12 -0
- package/scripts/test-assistant-hooks.ts +13 -0
- package/scripts/test-docs-reader.ts +10 -0
- package/scripts/test-linux-binary.sh +80 -0
- package/scripts/update-introspection-data.ts +58 -0
- package/src/agi/README.md +14 -0
- package/src/agi/container.server.ts +152 -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/feature.ts +13 -0
- package/src/agi/features/agent-memory.ts +694 -0
- package/src/agi/features/assistant.ts +1624 -0
- package/src/agi/features/assistants-manager.ts +418 -0
- package/src/agi/features/autonomous-assistant.ts +431 -0
- package/src/agi/features/browser-use.ts +653 -0
- package/src/agi/features/claude-code.ts +1538 -0
- package/src/agi/features/coding-tools.ts +175 -0
- package/src/agi/features/conversation-history.ts +495 -0
- package/src/agi/features/conversation.ts +1323 -0
- package/src/agi/features/docs-reader.ts +167 -0
- package/src/agi/features/file-tools.ts +293 -0
- package/src/agi/features/luca-coder.ts +639 -0
- package/src/agi/features/openai-codex.ts +651 -0
- package/src/agi/features/openapi.ts +445 -0
- package/src/agi/features/skills-library.ts +478 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/interceptor-chain.ts +89 -0
- package/src/agi/lib/token-counter.ts +122 -0
- package/src/bootstrap/generated.ts +9792 -0
- package/src/browser.ts +25 -0
- package/src/bus.ts +122 -0
- package/src/cli/build-info.ts +4 -0
- package/src/cli/cli.ts +355 -0
- package/src/client.ts +170 -0
- package/src/clients/civitai/index.ts +537 -0
- package/src/clients/client-template.ts +41 -0
- package/src/clients/comfyui/index.ts +604 -0
- package/src/clients/elevenlabs/index.ts +317 -0
- package/src/clients/graph.ts +87 -0
- package/src/clients/openai/index.ts +456 -0
- package/src/clients/rest.ts +207 -0
- package/src/clients/supabase/index.ts +357 -0
- package/src/clients/voicebox/index.ts +300 -0
- package/src/clients/websocket.ts +251 -0
- package/src/command.ts +505 -0
- package/src/commands/bootstrap.ts +244 -0
- package/src/commands/chat.ts +308 -0
- package/src/commands/code.ts +371 -0
- package/src/commands/console.ts +189 -0
- package/src/commands/describe.ts +243 -0
- package/src/commands/eval.ts +121 -0
- package/src/commands/help.ts +240 -0
- package/src/commands/index.ts +19 -0
- package/src/commands/introspect.ts +218 -0
- package/src/commands/mcp.ts +64 -0
- package/src/commands/prompt.ts +982 -0
- package/src/commands/run.ts +278 -0
- package/src/commands/sandbox-mcp.ts +343 -0
- package/src/commands/save-api-docs.ts +51 -0
- package/src/commands/scaffold.ts +225 -0
- package/src/commands/select.ts +99 -0
- package/src/commands/serve.ts +208 -0
- package/src/container-describer.ts +1084 -0
- package/src/container.ts +1186 -0
- package/src/endpoint.ts +365 -0
- package/src/entity.ts +173 -0
- package/src/feature.ts +118 -0
- package/src/graft.ts +181 -0
- package/src/hash-object.ts +97 -0
- package/src/helper.ts +849 -0
- package/src/introspection/generated.agi.ts +40208 -0
- package/src/introspection/generated.node.ts +28686 -0
- package/src/introspection/generated.web.ts +2251 -0
- package/src/introspection/index.ts +296 -0
- package/src/introspection/scan.ts +1131 -0
- package/src/node/container.ts +409 -0
- package/src/node/feature.ts +13 -0
- package/src/node/features/container-link.ts +559 -0
- package/src/node/features/content-db.ts +812 -0
- package/src/node/features/disk-cache.ts +388 -0
- package/src/node/features/dns.ts +669 -0
- package/src/node/features/docker.ts +921 -0
- package/src/node/features/downloader.ts +79 -0
- package/src/node/features/figlet-fonts.ts +600 -0
- package/src/node/features/file-manager.ts +535 -0
- package/src/node/features/fs.ts +1050 -0
- package/src/node/features/git.ts +592 -0
- package/src/node/features/google-auth.ts +504 -0
- package/src/node/features/google-calendar.ts +306 -0
- package/src/node/features/google-docs.ts +412 -0
- package/src/node/features/google-drive.ts +346 -0
- package/src/node/features/google-mail.ts +540 -0
- package/src/node/features/google-sheets.ts +286 -0
- package/src/node/features/grep.ts +427 -0
- package/src/node/features/helpers.ts +735 -0
- package/src/node/features/ink.ts +490 -0
- package/src/node/features/ipc-socket.ts +649 -0
- package/src/node/features/json-tree.ts +170 -0
- package/src/node/features/networking.ts +961 -0
- package/src/node/features/nlp.ts +212 -0
- package/src/node/features/opener.ts +180 -0
- package/src/node/features/os.ts +403 -0
- package/src/node/features/package-finder.ts +540 -0
- package/src/node/features/postgres.ts +289 -0
- package/src/node/features/proc.ts +503 -0
- package/src/node/features/process-manager.ts +844 -0
- package/src/node/features/python.ts +906 -0
- package/src/node/features/redis.ts +446 -0
- package/src/node/features/repl.ts +212 -0
- package/src/node/features/runpod.ts +811 -0
- package/src/node/features/secure-shell.ts +267 -0
- package/src/node/features/semantic-search.ts +935 -0
- package/src/node/features/sqlite.ts +289 -0
- package/src/node/features/telegram.ts +343 -0
- package/src/node/features/transpiler.ts +161 -0
- package/src/node/features/tts.ts +185 -0
- package/src/node/features/ui.ts +786 -0
- package/src/node/features/vault.ts +153 -0
- package/src/node/features/vm.ts +462 -0
- package/src/node/features/yaml-tree.ts +148 -0
- package/src/node/features/yaml.ts +133 -0
- package/src/node.ts +76 -0
- package/src/python/bridge.py +220 -0
- package/src/python/generated.ts +227 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +210 -0
- package/src/scaffolds/generated.ts +1815 -0
- package/src/scaffolds/template.ts +46 -0
- package/src/schemas/base.ts +296 -0
- package/src/selector.ts +352 -0
- package/src/server.ts +229 -0
- package/src/servers/express.ts +283 -0
- package/src/servers/mcp.ts +802 -0
- package/src/servers/socket.ts +258 -0
- package/src/state.ts +101 -0
- package/src/web/clients/socket.ts +99 -0
- package/src/web/container.ts +75 -0
- package/src/web/extension.ts +30 -0
- package/src/web/feature.ts +12 -0
- package/src/web/features/asset-loader.ts +72 -0
- package/src/web/features/container-link.ts +382 -0
- package/src/web/features/esbuild.ts +93 -0
- package/src/web/features/helpers.ts +269 -0
- package/src/web/features/network.ts +85 -0
- package/src/web/features/speech.ts +104 -0
- package/src/web/features/vault.ts +207 -0
- package/src/web/features/vm.ts +85 -0
- package/src/web/features/voice-recognition.ts +161 -0
- package/src/web/shims/isomorphic-vm.ts +149 -0
- package/test/assistant-hooks.test.ts +306 -0
- package/test/assistant.test.ts +81 -0
- package/test/bus.test.ts +134 -0
- package/test/clients-servers.test.ts +217 -0
- package/test/command.test.ts +267 -0
- package/test/container-link.test.ts +274 -0
- package/test/conversation.test.ts +220 -0
- package/test/features.test.ts +160 -0
- package/test/fork-and-research.test.ts +450 -0
- package/test/integration.test.ts +787 -0
- package/test/interceptor-chain.test.ts +61 -0
- package/test/node-container.test.ts +121 -0
- package/test/python-session.test.ts +105 -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/vm-context.test.ts +146 -0
- package/test/vm-loadmodule.test.ts +213 -0
- package/test/websocket-ask.test.ts +101 -0
- package/test-integration/assistant.test.ts +138 -0
- package/test-integration/assistants-manager.test.ts +113 -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/memory.test.ts +204 -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/telegram.test.ts +46 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +58 -0
- package/uv.lock +8 -0
- package/LICENSE +0 -21
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -5
- package/dist/cli/run.d.ts +0 -12
- package/dist/cli/run.js +0 -42
- package/dist/config/consts.d.ts +0 -2
- package/dist/config/consts.js +0 -29
- package/dist/config/default.d.ts +0 -8
- package/dist/config/default.js +0 -15
- package/dist/config/initConfig.d.ts +0 -1
- package/dist/config/initConfig.js +0 -52
- package/dist/config/openConfig.d.ts +0 -2
- package/dist/config/openConfig.js +0 -24
- package/dist/config/runConfig.d.ts +0 -3
- package/dist/config/runConfig.js +0 -117
- package/dist/config/types.d.ts +0 -13
- package/dist/config/types.js +0 -2
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -5
- package/dist/utils/common.d.ts +0 -2
- package/dist/utils/common.js +0 -52
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -17
|
@@ -0,0 +1,592 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { FeatureStateSchema, FeatureOptionsSchema } from '../../schemas/base.js'
|
|
3
|
+
import { dirname, resolve, isAbsolute } from 'path';
|
|
4
|
+
import { State } from '../../state.js';
|
|
5
|
+
import { Feature } from '../feature.js'
|
|
6
|
+
|
|
7
|
+
type LsFilesOptions = {
|
|
8
|
+
cached?: boolean;
|
|
9
|
+
deleted?: boolean;
|
|
10
|
+
modified?: boolean;
|
|
11
|
+
others?: boolean;
|
|
12
|
+
ignored?: boolean;
|
|
13
|
+
status?: boolean;
|
|
14
|
+
includeIgnored?: boolean;
|
|
15
|
+
exclude?: string | string[];
|
|
16
|
+
baseDir?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const GitStateSchema = FeatureStateSchema.extend({
|
|
20
|
+
/** Absolute path to the Git repository root directory */
|
|
21
|
+
repoRoot: z.string().optional().describe('Absolute path to the Git repository root directory'),
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
type GitState = z.infer<typeof GitStateSchema>
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The Git feature provides utilities for interacting with Git repositories.
|
|
28
|
+
*
|
|
29
|
+
* This feature allows you to check repository status, list files, get branch information,
|
|
30
|
+
* and access Git metadata for projects within a Git repository.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const git = container.feature('git')
|
|
35
|
+
*
|
|
36
|
+
* if (git.isRepo) {
|
|
37
|
+
* console.log(`Current branch: ${git.branch}`)
|
|
38
|
+
* console.log(`Repository root: ${git.repoRoot}`)
|
|
39
|
+
*
|
|
40
|
+
* const allFiles = await git.lsFiles()
|
|
41
|
+
* const modifiedFiles = await git.lsFiles({ modified: true })
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*
|
|
45
|
+
* @extends Feature
|
|
46
|
+
*/
|
|
47
|
+
export class Git extends Feature {
|
|
48
|
+
static override shortcut = 'features.git' as const
|
|
49
|
+
static override stateSchema = GitStateSchema
|
|
50
|
+
static override optionsSchema = FeatureOptionsSchema
|
|
51
|
+
static { Feature.register(this, 'git') }
|
|
52
|
+
override state: State<GitState> = new State()
|
|
53
|
+
|
|
54
|
+
private _resolvedGitPath: string | null = null
|
|
55
|
+
|
|
56
|
+
/** Resolve the git binary path, caching the result. */
|
|
57
|
+
get gitPath(): string {
|
|
58
|
+
if (this._resolvedGitPath) return this._resolvedGitPath
|
|
59
|
+
this._resolvedGitPath = this.container.feature('os').whichCommand('git')
|
|
60
|
+
return this._resolvedGitPath
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Lists files in the Git repository using git ls-files command.
|
|
65
|
+
*
|
|
66
|
+
* This method provides a flexible interface to the git ls-files command,
|
|
67
|
+
* allowing you to filter files by various criteria such as cached, deleted,
|
|
68
|
+
* modified, untracked, and ignored files.
|
|
69
|
+
*
|
|
70
|
+
* @param {LsFilesOptions} [options={}] - Options to control which files are listed
|
|
71
|
+
* @param {boolean} [options.cached=false] - Show cached/staged files
|
|
72
|
+
* @param {boolean} [options.deleted=false] - Show deleted files
|
|
73
|
+
* @param {boolean} [options.modified=false] - Show modified files
|
|
74
|
+
* @param {boolean} [options.others=false] - Show untracked files
|
|
75
|
+
* @param {boolean} [options.ignored=false] - Show ignored files
|
|
76
|
+
* @param {boolean} [options.status=false] - Show file status information
|
|
77
|
+
* @param {boolean} [options.includeIgnored=false] - Include ignored files when showing others
|
|
78
|
+
* @param {string | string[]} [options.exclude] - Patterns to exclude from results
|
|
79
|
+
* @param {string} [options.baseDir=''] - Base directory to list files from
|
|
80
|
+
* @returns {Promise<string[]>} Promise that resolves to an array of file paths
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* // Get all tracked files
|
|
85
|
+
* const allFiles = await git.lsFiles()
|
|
86
|
+
*
|
|
87
|
+
* // Get only modified files
|
|
88
|
+
* const modified = await git.lsFiles({ modified: true })
|
|
89
|
+
*
|
|
90
|
+
* // Get untracked files excluding certain patterns
|
|
91
|
+
* const untracked = await git.lsFiles({
|
|
92
|
+
* others: true,
|
|
93
|
+
* exclude: ['*.log', 'node_modules']
|
|
94
|
+
* })
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
async lsFiles(options: LsFilesOptions = {}): Promise<string[]> {
|
|
98
|
+
const {
|
|
99
|
+
cached = false,
|
|
100
|
+
deleted = false,
|
|
101
|
+
modified = false,
|
|
102
|
+
others = false,
|
|
103
|
+
ignored = false,
|
|
104
|
+
status = false,
|
|
105
|
+
baseDir = '',
|
|
106
|
+
includeIgnored = false
|
|
107
|
+
} = options || {}
|
|
108
|
+
|
|
109
|
+
const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude || ''].filter(v => v?.length)
|
|
110
|
+
|
|
111
|
+
const flags = [
|
|
112
|
+
cached ? '--cached' : '',
|
|
113
|
+
deleted ? '--deleted' : '',
|
|
114
|
+
modified ? '--modified' : '',
|
|
115
|
+
others ? '--others' : '',
|
|
116
|
+
ignored ? '--ignored' : '',
|
|
117
|
+
status ? '-t' : '',
|
|
118
|
+
].filter(v => v?.length).flat()
|
|
119
|
+
|
|
120
|
+
const gitIgnorePath = this.container.fs.findUp('.gitignore', { cwd: this.container.cwd })
|
|
121
|
+
|
|
122
|
+
if (others && exclude.length) {
|
|
123
|
+
flags.push(
|
|
124
|
+
...exclude.map((p:string) =>['--exclude', p]).flat()
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (others && gitIgnorePath && !includeIgnored) {
|
|
129
|
+
flags.push(...['--exclude-from', gitIgnorePath])
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
return this.container.feature('proc').exec(`${this.gitPath} ls-files ${baseDir} ${flags.join(' ')}`, {
|
|
134
|
+
cwd: this.repoRoot,
|
|
135
|
+
maxBuffer: 1024 * 1024 * 100,
|
|
136
|
+
}).trim().split(/\r?\n/)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Gets the current Git branch name.
|
|
141
|
+
*
|
|
142
|
+
* @returns {string | null} The current branch name, or null if not in a Git repository
|
|
143
|
+
*
|
|
144
|
+
* @example
|
|
145
|
+
* ```typescript
|
|
146
|
+
* const currentBranch = git.branch
|
|
147
|
+
* if (currentBranch) {
|
|
148
|
+
* console.log(`Currently on branch: ${currentBranch}`)
|
|
149
|
+
* }
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
get branch(): string | null {
|
|
153
|
+
if(!this.isRepo) { return null }
|
|
154
|
+
return this.container.feature('proc').exec(`${this.gitPath} branch`).split(/\r?\n/).filter(line => line.startsWith('*')).map(line => line.replace('*', '').trim()).pop() ?? null
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Gets the current Git commit SHA hash.
|
|
159
|
+
*
|
|
160
|
+
* @returns {string | null} The current commit SHA, or null if not in a Git repository
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* const commitSha = git.sha
|
|
165
|
+
* if (commitSha) {
|
|
166
|
+
* console.log(`Current commit: ${commitSha}`)
|
|
167
|
+
* }
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
get sha(): string | null {
|
|
171
|
+
if(!this.isRepo) { return null }
|
|
172
|
+
return this.container.feature('proc').exec(`${this.gitPath} rev-parse HEAD`, { cwd: this.repoRoot })
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Checks if the current directory is within a Git repository.
|
|
177
|
+
*
|
|
178
|
+
* @returns {boolean} True if currently in a Git repository, false otherwise
|
|
179
|
+
*
|
|
180
|
+
* @example
|
|
181
|
+
* ```typescript
|
|
182
|
+
* if (git.isRepo) {
|
|
183
|
+
* console.log('This is a Git repository!')
|
|
184
|
+
* } else {
|
|
185
|
+
* console.log('Not in a Git repository')
|
|
186
|
+
* }
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
get isRepo(): boolean {
|
|
190
|
+
return !!this.repoRoot
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Checks if the current working directory is the root of the Git repository.
|
|
195
|
+
*
|
|
196
|
+
* @returns {boolean} True if currently at the repository root, false otherwise
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* if (git.isRepoRoot) {
|
|
201
|
+
* console.log('At the repository root')
|
|
202
|
+
* } else {
|
|
203
|
+
* console.log('In a subdirectory of the repository')
|
|
204
|
+
* }
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
get isRepoRoot(): boolean {
|
|
208
|
+
return this.repoRoot == this.container.cwd
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Gets the absolute path to the Git repository root directory.
|
|
213
|
+
*
|
|
214
|
+
* This method caches the repository root path for performance. It searches upward
|
|
215
|
+
* from the current directory to find the .git directory.
|
|
216
|
+
*
|
|
217
|
+
* @returns {string | null} The absolute path to the repository root, or null if not in a Git repository
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* ```typescript
|
|
221
|
+
* const repoRoot = git.repoRoot
|
|
222
|
+
* if (repoRoot) {
|
|
223
|
+
* console.log(`Repository root: ${repoRoot}`)
|
|
224
|
+
* }
|
|
225
|
+
* ```
|
|
226
|
+
*/
|
|
227
|
+
get repoRoot(): string | null {
|
|
228
|
+
if (this.state.has('repoRoot')) {
|
|
229
|
+
return this.state.get('repoRoot') ?? null
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const repoRoot = this.container.fs.findUp('.git')
|
|
233
|
+
|
|
234
|
+
if(typeof repoRoot === 'string') {
|
|
235
|
+
this.state.set('repoRoot', dirname(repoRoot))
|
|
236
|
+
return dirname(repoRoot)
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
return null
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Gets the latest commits from the repository.
|
|
244
|
+
*
|
|
245
|
+
* Returns an array of commit objects containing the title (first line of commit message),
|
|
246
|
+
* full message body, and author name for each commit.
|
|
247
|
+
*
|
|
248
|
+
* @param {number} [numberOfChanges=10] - The number of recent commits to return
|
|
249
|
+
* @returns {Promise<Array<{ title: string, message: string, author: string }>>} Array of commit objects
|
|
250
|
+
*
|
|
251
|
+
* @example
|
|
252
|
+
* ```typescript
|
|
253
|
+
* const changes = await git.getLatestChanges(5)
|
|
254
|
+
* for (const commit of changes) {
|
|
255
|
+
* console.log(`${commit.author}: ${commit.title}`)
|
|
256
|
+
* }
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
259
|
+
async getLatestChanges(numberOfChanges: number = 10): Promise<Array<{ title: string, message: string, author: string }>> {
|
|
260
|
+
if (!this.isRepo) return []
|
|
261
|
+
|
|
262
|
+
const separator = '---COMMIT---'
|
|
263
|
+
const fieldSep = '---FIELD---'
|
|
264
|
+
|
|
265
|
+
const output = this.container.feature('proc').exec(
|
|
266
|
+
`${this.gitPath} log -n ${numberOfChanges} --pretty=format:"%s${fieldSep}%b${fieldSep}%an${separator}"`,
|
|
267
|
+
{ cwd: this.repoRoot }
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
return output
|
|
271
|
+
.split(separator)
|
|
272
|
+
.filter((entry: string) => entry.trim().length > 0)
|
|
273
|
+
.map((entry: string) => {
|
|
274
|
+
const [title = '', message = '', author = ''] = entry.split(fieldSep).map((s: string) => s.trim())
|
|
275
|
+
return { title, message, author }
|
|
276
|
+
})
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Gets a lightweight commit log for one or more files.
|
|
281
|
+
*
|
|
282
|
+
* Returns the SHA and message for each commit that touched the given files,
|
|
283
|
+
* without the per-commit overhead of resolving which specific files matched.
|
|
284
|
+
* For richer per-file matching, see {@link getChangeHistoryForFiles}.
|
|
285
|
+
*
|
|
286
|
+
* @param {...string} files - File paths (absolute or relative to container.cwd)
|
|
287
|
+
* @returns {Array<{ sha: string, message: string }>} Array of commits
|
|
288
|
+
*
|
|
289
|
+
* @example
|
|
290
|
+
* ```typescript
|
|
291
|
+
* const log = git.fileLog('package.json')
|
|
292
|
+
* const log = git.fileLog('src/index.ts', 'src/helper.ts')
|
|
293
|
+
* for (const entry of log) {
|
|
294
|
+
* console.log(`${entry.sha.slice(0, 8)} ${entry.message}`)
|
|
295
|
+
* }
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
fileLog(...files: string[]): Array<{ sha: string, message: string }> {
|
|
299
|
+
if (!this.isRepo || !files.length) return []
|
|
300
|
+
|
|
301
|
+
const proc = this.container.feature('proc')
|
|
302
|
+
const root = this.repoRoot!
|
|
303
|
+
|
|
304
|
+
const resolved = files.map(p =>
|
|
305
|
+
isAbsolute(p) ? p : resolve(this.container.cwd, p)
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
const separator = '---COMMIT---'
|
|
309
|
+
const fieldSep = '---FIELD---'
|
|
310
|
+
|
|
311
|
+
const output = proc.exec(
|
|
312
|
+
`${this.gitPath} log --pretty=format:"%H${fieldSep}%s${separator}" -- ${resolved.map(p => `"${p}"`).join(' ')}`,
|
|
313
|
+
{ cwd: root }
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
if (!output.trim()) return []
|
|
317
|
+
|
|
318
|
+
return output
|
|
319
|
+
.split(separator)
|
|
320
|
+
.filter((entry: string) => entry.trim().length > 0)
|
|
321
|
+
.map((entry: string) => {
|
|
322
|
+
const [sha = '', message = ''] = entry.split(fieldSep).map((s: string) => s.trim())
|
|
323
|
+
return { sha, message }
|
|
324
|
+
})
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Gets the diff for a file between two refs.
|
|
329
|
+
*
|
|
330
|
+
* By default compares from the current HEAD to the given ref. You can
|
|
331
|
+
* supply both `compareTo` and `compareFrom` to diff between any two commits,
|
|
332
|
+
* branches, or tags.
|
|
333
|
+
*
|
|
334
|
+
* @param {string} file - File path (absolute or relative to container.cwd)
|
|
335
|
+
* @param {string} compareTo - The target ref (commit SHA, branch, tag) to compare to
|
|
336
|
+
* @param {string} [compareFrom] - The base ref to compare from (defaults to current HEAD)
|
|
337
|
+
* @returns {string} The diff output, or an empty string if there are no changes
|
|
338
|
+
*
|
|
339
|
+
* @example
|
|
340
|
+
* ```typescript
|
|
341
|
+
* // Diff package.json between HEAD and a specific commit
|
|
342
|
+
* const d = git.diff('package.json', 'abc1234')
|
|
343
|
+
*
|
|
344
|
+
* // Diff between two branches
|
|
345
|
+
* const d = git.diff('src/index.ts', 'feature-branch', 'main')
|
|
346
|
+
* ```
|
|
347
|
+
*/
|
|
348
|
+
diff(file: string, compareTo: string, compareFrom?: string): string {
|
|
349
|
+
if (!this.isRepo) return ''
|
|
350
|
+
|
|
351
|
+
const proc = this.container.feature('proc')
|
|
352
|
+
const root = this.repoRoot!
|
|
353
|
+
const from = compareFrom ?? this.sha!
|
|
354
|
+
const resolved = isAbsolute(file) ? file : resolve(this.container.cwd, file)
|
|
355
|
+
|
|
356
|
+
return proc.exec(
|
|
357
|
+
`${this.gitPath} diff ${from} ${compareTo} -- "${resolved}"`,
|
|
358
|
+
{ cwd: root }
|
|
359
|
+
).trim()
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* Pretty prints a unified diff string to the terminal using colors.
|
|
364
|
+
*
|
|
365
|
+
* Parses the diff output and applies color coding:
|
|
366
|
+
* - File headers (`diff --git`, `---`, `+++`) are rendered bold
|
|
367
|
+
* - Hunk headers (`@@ ... @@`) are rendered in cyan
|
|
368
|
+
* - Added lines (`+`) are rendered in green
|
|
369
|
+
* - Removed lines (`-`) are rendered in red
|
|
370
|
+
* - Context lines are rendered dim
|
|
371
|
+
*
|
|
372
|
+
* Can be called with a raw diff string, or with the same arguments as
|
|
373
|
+
* {@link diff} to fetch and display in one step.
|
|
374
|
+
*
|
|
375
|
+
* @param diffOrFile - A raw diff string, or a file path to pass to {@link diff}
|
|
376
|
+
* @param compareTo - When diffOrFile is a file path, the target ref to compare to
|
|
377
|
+
* @param compareFrom - When diffOrFile is a file path, the base ref to compare from
|
|
378
|
+
* @returns The colorized diff string (also prints to stdout)
|
|
379
|
+
*
|
|
380
|
+
* @example
|
|
381
|
+
* ```typescript
|
|
382
|
+
* // Display a pre-fetched diff
|
|
383
|
+
* const raw = git.diff('src/index.ts', 'main')
|
|
384
|
+
* git.displayDiff(raw)
|
|
385
|
+
*
|
|
386
|
+
* // Fetch and display in one call
|
|
387
|
+
* git.displayDiff('src/index.ts', 'abc1234')
|
|
388
|
+
* ```
|
|
389
|
+
*/
|
|
390
|
+
displayDiff(diffOrFile: string, compareTo?: string, compareFrom?: string): string {
|
|
391
|
+
const raw = compareTo
|
|
392
|
+
? this.diff(diffOrFile, compareTo, compareFrom)
|
|
393
|
+
: diffOrFile
|
|
394
|
+
|
|
395
|
+
if (!raw.trim()) return ''
|
|
396
|
+
|
|
397
|
+
const { colors } = this.container.feature('ui')
|
|
398
|
+
|
|
399
|
+
const lines = raw.split(/\r?\n/)
|
|
400
|
+
const colored = lines.map(line => {
|
|
401
|
+
if (line.startsWith('diff --git') || line.startsWith('index ')) {
|
|
402
|
+
return colors.bold(line)
|
|
403
|
+
}
|
|
404
|
+
if (line.startsWith('--- ') || line.startsWith('+++ ')) {
|
|
405
|
+
return colors.bold(line)
|
|
406
|
+
}
|
|
407
|
+
if (line.startsWith('@@')) {
|
|
408
|
+
return colors.cyan(line)
|
|
409
|
+
}
|
|
410
|
+
if (line.startsWith('+')) {
|
|
411
|
+
return colors.green(line)
|
|
412
|
+
}
|
|
413
|
+
if (line.startsWith('-')) {
|
|
414
|
+
return colors.red(line)
|
|
415
|
+
}
|
|
416
|
+
return colors.dim(line)
|
|
417
|
+
})
|
|
418
|
+
|
|
419
|
+
const output = colored.join('\n')
|
|
420
|
+
console.log(output)
|
|
421
|
+
return output
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/**
|
|
425
|
+
* Extracts a folder (or entire repo) from a remote GitHub repository without cloning.
|
|
426
|
+
*
|
|
427
|
+
* Downloads the repo as a tarball and extracts only the specified subfolder,
|
|
428
|
+
* similar to how degit works. No .git history is included — just the files.
|
|
429
|
+
*
|
|
430
|
+
* Supports shorthand (`user/repo/path`), branch refs (`user/repo/path#branch`),
|
|
431
|
+
* and full GitHub URLs (`https://github.com/user/repo/tree/branch/path`).
|
|
432
|
+
*
|
|
433
|
+
* @param {object} options
|
|
434
|
+
* @param {string} options.source - Repository source in degit-style shorthand
|
|
435
|
+
* @param {string} options.destination - Local path to extract files into
|
|
436
|
+
* @param {string} [options.branch] - Branch, tag, or commit ref (overrides ref in source string)
|
|
437
|
+
* @returns {Promise<{ files: string[], source: { user: string, repo: string, ref: string, subdir: string } }>}
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* // Extract a subfolder
|
|
442
|
+
* await git.extractFolder({ source: 'soederpop/luca/src/assistants', destination: './my-assistants' })
|
|
443
|
+
*
|
|
444
|
+
* // Specific branch
|
|
445
|
+
* await git.extractFolder({ source: 'sveltejs/template', destination: './my-app', branch: 'main' })
|
|
446
|
+
*
|
|
447
|
+
* // Full GitHub URL
|
|
448
|
+
* await git.extractFolder({ source: 'https://github.com/user/repo/tree/main/examples', destination: './examples' })
|
|
449
|
+
* ```
|
|
450
|
+
*/
|
|
451
|
+
async extractFolder({ source, destination, branch }: { source: string, destination: string, branch?: string }) {
|
|
452
|
+
const parsed = this._parseRemoteSource(source)
|
|
453
|
+
if (branch) parsed.ref = branch
|
|
454
|
+
|
|
455
|
+
const tarballUrl = `https://github.com/${parsed.user}/${parsed.repo}/archive/${parsed.ref}.tar.gz`
|
|
456
|
+
const stamp = Date.now()
|
|
457
|
+
const fs = this.container.feature('fs')
|
|
458
|
+
const proc = this.container.feature('proc')
|
|
459
|
+
const tmpBase = this.container.paths.resolve(this.container.feature('os').tmpdir, 'luca-degit')
|
|
460
|
+
fs.ensureFolder(tmpBase)
|
|
461
|
+
const tarPath = this.container.paths.resolve(tmpBase, `.degit-${stamp}.tar.gz`)
|
|
462
|
+
const tmpExtract = this.container.paths.resolve(tmpBase, `.degit-extract-${stamp}`)
|
|
463
|
+
const dest = destination.startsWith('/') ? destination : this.container.paths.resolve(destination)
|
|
464
|
+
|
|
465
|
+
const dl = this.container.feature('downloader')
|
|
466
|
+
|
|
467
|
+
await dl.download(tarballUrl, tarPath)
|
|
468
|
+
|
|
469
|
+
// Extract everything, strip the root archive directory (e.g. repo-commitsha/)
|
|
470
|
+
fs.ensureFolder(tmpExtract)
|
|
471
|
+
const extractResult = await proc.execAndCapture(`tar xzf ${tarPath} -C ${tmpExtract} --strip-components=1`)
|
|
472
|
+
if (extractResult.exitCode !== 0) {
|
|
473
|
+
await fs.rmdir(tmpExtract)
|
|
474
|
+
await fs.rm(tarPath)
|
|
475
|
+
throw new Error(`Failed to extract tarball: ${extractResult.stderr}`)
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Copy the subfolder (or everything) to destination
|
|
479
|
+
const sourceDir = parsed.subdir ? `${tmpExtract}/${parsed.subdir}` : tmpExtract
|
|
480
|
+
if (fs.existsSync(dest)) await fs.rmdir(dest)
|
|
481
|
+
fs.ensureFolder(dest)
|
|
482
|
+
fs.copy(sourceDir, dest, { overwrite: true })
|
|
483
|
+
|
|
484
|
+
// Cleanup temp files
|
|
485
|
+
await fs.rm(tarPath)
|
|
486
|
+
await fs.rmdir(tmpExtract)
|
|
487
|
+
|
|
488
|
+
const files = fs.readdirSync(dest)
|
|
489
|
+
return { files, source: parsed }
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/** Parses degit-style source strings into components. */
|
|
493
|
+
private _parseRemoteSource(input: string) {
|
|
494
|
+
let ref = 'HEAD'
|
|
495
|
+
let str = input.replace(/^https?:\/\//, '')
|
|
496
|
+
|
|
497
|
+
// Handle github.com/user/repo/tree/branch/path URLs
|
|
498
|
+
const treeMatch = str.match(/^github\.com\/([^/]+)\/([^/]+)\/tree\/([^/]+)(?:\/(.+))?$/)
|
|
499
|
+
if (treeMatch) {
|
|
500
|
+
return { user: treeMatch[1], repo: treeMatch[2], ref: treeMatch[3], subdir: treeMatch[4] || '' }
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
if (str.startsWith('github.com/')) str = str.replace('github.com/', '')
|
|
504
|
+
if (str.includes('#')) {
|
|
505
|
+
const parts = str.split('#')
|
|
506
|
+
str = parts[0] ?? str
|
|
507
|
+
ref = parts[1] ?? ref
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
const parts = str.split('/')
|
|
511
|
+
return { user: parts[0] ?? '', repo: parts[1] ?? '', ref, subdir: parts.slice(2).join('/') }
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Gets the commit history for a set of files or glob patterns.
|
|
516
|
+
*
|
|
517
|
+
* Accepts absolute paths, relative paths (resolved from container.cwd),
|
|
518
|
+
* or glob patterns. Returns commits that touched any of the matched files,
|
|
519
|
+
* with each entry noting which of your queried files were in that commit.
|
|
520
|
+
*
|
|
521
|
+
* @param {...string} paths - File paths or glob patterns to get history for
|
|
522
|
+
* @returns {Array<{ sha: string, message: string, longMessage: string, filesMatched: string[] }>}
|
|
523
|
+
*
|
|
524
|
+
* @example
|
|
525
|
+
* ```typescript
|
|
526
|
+
* const history = git.getChangeHistoryForFiles('src/container.ts', 'src/helper.ts')
|
|
527
|
+
* const history = git.getChangeHistoryForFiles('src/node/features/*.ts')
|
|
528
|
+
* ```
|
|
529
|
+
*/
|
|
530
|
+
getChangeHistoryForFiles(...paths: string[]): Array<{ sha: string, message: string, longMessage: string, filesMatched: string[] }> {
|
|
531
|
+
if (!this.isRepo || !paths.length) return []
|
|
532
|
+
|
|
533
|
+
const proc = this.container.feature('proc')
|
|
534
|
+
const root = this.repoRoot!
|
|
535
|
+
|
|
536
|
+
// resolve each path relative to cwd (globs stay as-is for git, but we resolve for matching)
|
|
537
|
+
const resolved = paths.map(p =>
|
|
538
|
+
isAbsolute(p) ? p : resolve(this.container.cwd, p)
|
|
539
|
+
)
|
|
540
|
+
|
|
541
|
+
const separator = '---COMMIT---'
|
|
542
|
+
const fieldSep = '---FIELD---'
|
|
543
|
+
|
|
544
|
+
const output = proc.exec(
|
|
545
|
+
`${this.gitPath} log --pretty=format:"%H${fieldSep}%s${fieldSep}%b${separator}" -- ${resolved.map(p => `"${p}"`).join(' ')}`,
|
|
546
|
+
{ cwd: root }
|
|
547
|
+
)
|
|
548
|
+
|
|
549
|
+
if (!output.trim()) return []
|
|
550
|
+
|
|
551
|
+
const commits = output
|
|
552
|
+
.split(separator)
|
|
553
|
+
.filter((entry: string) => entry.trim().length > 0)
|
|
554
|
+
.map((entry: string) => {
|
|
555
|
+
const [sha = '', message = '', longMessage = ''] = entry.split(fieldSep).map((s: string) => s.trim())
|
|
556
|
+
return { sha, message, longMessage }
|
|
557
|
+
})
|
|
558
|
+
|
|
559
|
+
// build matchers: Bun.Glob for patterns with wildcards, exact match otherwise
|
|
560
|
+
const matchers = resolved.map(p => {
|
|
561
|
+
const hasGlob = /[*?{}\[\]]/.test(p)
|
|
562
|
+
return {
|
|
563
|
+
original: p,
|
|
564
|
+
match: hasGlob
|
|
565
|
+
? (file: string) => new Bun.Glob(p).match(file)
|
|
566
|
+
: (file: string) => file === p,
|
|
567
|
+
}
|
|
568
|
+
})
|
|
569
|
+
|
|
570
|
+
return commits.map(commit => {
|
|
571
|
+
const changedFiles = proc.exec(
|
|
572
|
+
`${this.gitPath} diff-tree --no-commit-id --name-only -r ${commit.sha}`,
|
|
573
|
+
{ cwd: root }
|
|
574
|
+
).trim().split(/\r?\n/).filter(Boolean)
|
|
575
|
+
|
|
576
|
+
const changedAbsolute = changedFiles.map(f => resolve(root, f))
|
|
577
|
+
|
|
578
|
+
const filesMatched = matchers
|
|
579
|
+
.filter(m => changedAbsolute.some(f => m.match(f)))
|
|
580
|
+
.map(m => m.original)
|
|
581
|
+
|
|
582
|
+
return {
|
|
583
|
+
sha: commit.sha,
|
|
584
|
+
message: commit.message,
|
|
585
|
+
longMessage: commit.longMessage,
|
|
586
|
+
filesMatched,
|
|
587
|
+
}
|
|
588
|
+
})
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
export default Git
|