luca 2.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/release.yaml +170 -0
- package/AGENTS.md +99 -0
- package/CLAUDE.md +123 -0
- package/CNAME +1 -0
- package/README.md +275 -9
- package/RUNME.md +56 -0
- package/assistants/codingAssistant/ABOUT.md +5 -0
- package/assistants/codingAssistant/CORE.md +33 -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 +2667 -0
- package/bunfig.toml +3 -0
- package/commands/audit-docs.ts +740 -0
- package/commands/build-bootstrap.ts +117 -0
- package/commands/build-python-bridge.ts +42 -0
- package/commands/build-scaffolds.ts +175 -0
- package/commands/bundle-consumer-project.ts +521 -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 -12
- 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/index.html +1457 -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 -58
- package/public/index.html +1457 -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 +156 -0
- package/src/agi/feature.ts +13 -0
- package/src/agi/features/agent-memory.ts +694 -0
- package/src/agi/features/assistant.ts +1653 -0
- package/src/agi/features/assistants-manager.ts +534 -0
- package/src/agi/features/autonomous-assistant.ts +431 -0
- package/src/agi/features/browser-use.ts +672 -0
- package/src/agi/features/claude-code.ts +1584 -0
- package/src/agi/features/coding-tools.ts +175 -0
- package/src/agi/features/conversation-history.ts +672 -0
- package/src/agi/features/conversation.ts +1494 -0
- package/src/agi/features/docs-reader.ts +167 -0
- package/src/agi/features/file-tools.ts +340 -0
- package/src/agi/features/luca-coder.ts +641 -0
- package/src/agi/features/mcp-bridge.ts +532 -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 +557 -0
- package/src/agi/index.ts +6 -0
- package/src/agi/lib/interceptor-chain.ts +89 -0
- package/src/agi/lib/token-counter.ts +202 -0
- package/src/bootstrap/generated.ts +9791 -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 +506 -0
- package/src/commands/bootstrap.ts +244 -0
- package/src/commands/chat.ts +309 -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 +67 -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 +1014 -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 +1091 -0
- package/src/container.ts +1199 -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 +41200 -0
- package/src/introspection/generated.node.ts +28773 -0
- package/src/introspection/generated.web.ts +2272 -0
- package/src/introspection/index.ts +296 -0
- package/src/introspection/scan.ts +1136 -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 +849 -0
- package/src/node/features/disk-cache.ts +388 -0
- package/src/node/features/display-result.ts +57 -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 +762 -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 +912 -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 +261 -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 +160 -0
- package/src/node/features/tts.ts +185 -0
- package/src/node/features/ui.ts +791 -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 +226 -0
- package/src/react/index.ts +175 -0
- package/src/registry.ts +210 -0
- package/src/scaffolds/generated.ts +1814 -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 +291 -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/tsconfig.build.json +12 -0
- package/tsconfig.json +58 -0
- package/uv.lock +8 -0
- package/LICENSE +0 -21
- package/dist/cli/cli.js +0 -48
- package/dist/cli/common.d.ts +0 -2
- package/dist/cli/common.js +0 -6
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +0 -5
- package/dist/cli/run.d.ts +0 -1
- package/dist/cli/run.js +0 -38
- package/dist/core/index.d.ts +0 -4
- package/dist/core/index.js +0 -32
- package/dist/core/read.d.ts +0 -2
- package/dist/core/read.js +0 -29
- package/dist/core/request.d.ts +0 -1
- package/dist/core/request.js +0 -2
- package/dist/core/write.d.ts +0 -2
- package/dist/core/write.js +0 -21
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -5
- package/dist/utils/common.d.ts +0 -9
- package/dist/utils/common.js +0 -57
- package/dist/utils/consts.d.ts +0 -3
- package/dist/utils/consts.js +0 -11
- package/dist/utils/dict.d.ts +0 -1
- package/dist/utils/dict.js +0 -7
- package/dist/utils/index.d.ts +0 -5
- package/dist/utils/index.js +0 -21
- package/dist/utils/log.d.ts +0 -1
- package/dist/utils/log.js +0 -5
- package/dist/utils/types.d.ts +0 -1
- package/dist/utils/types.js +0 -2
- package/dist/utils/utils.test.d.ts +0 -1
- package/dist/utils/utils.test.js +0 -7
package/pyproject.toml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// @ts-nocheck
|
|
2
|
+
import path from "path"
|
|
3
|
+
|
|
4
|
+
const result = await Bun.build({
|
|
5
|
+
entrypoints: [path.resolve(import.meta.dir, "../src/browser.ts")],
|
|
6
|
+
outdir: path.resolve(import.meta.dir, "../dist"),
|
|
7
|
+
target: "browser",
|
|
8
|
+
format: "esm",
|
|
9
|
+
naming: "browser.js",
|
|
10
|
+
external: [
|
|
11
|
+
"react",
|
|
12
|
+
"react-dom",
|
|
13
|
+
],
|
|
14
|
+
define: {
|
|
15
|
+
"process.env.NODE_ENV": JSON.stringify("production"),
|
|
16
|
+
"process.env.NODE_DEBUG": JSON.stringify(""),
|
|
17
|
+
},
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
if (!result.success) {
|
|
21
|
+
console.error("Build failed:")
|
|
22
|
+
for (const log of result.logs) {
|
|
23
|
+
console.error(log)
|
|
24
|
+
}
|
|
25
|
+
process.exit(1)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
console.log(`Built browser bundle: dist/browser.js (${(result.outputs[0].size / 1024).toFixed(1)}KB)`)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import container from 'luca/agi'
|
|
2
|
+
import * as readline from 'readline'
|
|
3
|
+
|
|
4
|
+
const { ui } = container
|
|
5
|
+
|
|
6
|
+
const assistant = container.feature('assistant', {
|
|
7
|
+
folder: 'assistants/luca-expert',
|
|
8
|
+
model: 'gpt-5.2',
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
assistant.on('preview', (text: string) => {
|
|
12
|
+
process.stdout.write('\x1B[2J\x1B[H')
|
|
13
|
+
console.log(ui.markdown(text))
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
assistant.on('toolCall', (name: string, args: any) => {
|
|
17
|
+
process.stdout.write(ui.colors.dim(`\n ⟳ ${name}(${JSON.stringify(args).slice(0, 80)})\n`))
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const rl = readline.createInterface({
|
|
21
|
+
input: process.stdin,
|
|
22
|
+
output: process.stdout,
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
function prompt(): Promise<string> {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
rl.question(ui.colors.dim('\nluca-expert > '), (answer) => resolve(answer.trim()))
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
console.log(ui.colors.dim('Ask the Luca expert anything. Type .exit to quit.\n'))
|
|
32
|
+
|
|
33
|
+
while (true) {
|
|
34
|
+
const question = await prompt()
|
|
35
|
+
|
|
36
|
+
if (!question) continue
|
|
37
|
+
if (question === '.exit') break
|
|
38
|
+
|
|
39
|
+
await assistant.ask(question)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
rl.close()
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import container from 'luca/agi'
|
|
2
|
+
|
|
3
|
+
const assistant = container.feature('assistant', {
|
|
4
|
+
folder: 'assistants/example',
|
|
5
|
+
appendPrompt: 'Always be brief. Search your internal docs to make sure you have all the info you need.',
|
|
6
|
+
prependPrompt: 'You are speaking to a gentleman named Jon aka Soederpop aka J-Money.',
|
|
7
|
+
model: 'gpt-4.1',
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
const secretAnswer = await assistant.ask('Research your internal docs before answering, what is the best city on earth? Tell me that as well as the current time. Make sure to greet me by name.')
|
|
11
|
+
|
|
12
|
+
console.log(container.ui.markdown(secretAnswer))
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Excalidraw Expert Demo
|
|
3
|
+
*
|
|
4
|
+
* Generates diagrams using the Excalidraw expert, which can:
|
|
5
|
+
* - Generate Excalidraw JSON diagrams from natural language
|
|
6
|
+
* - Render them to PNG images
|
|
7
|
+
* - Evaluate quality using OpenAI vision
|
|
8
|
+
* - Iterate to improve
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* bun run scripts/examples/excalidraw-expert.ts
|
|
12
|
+
* bun run scripts/examples/excalidraw-expert.ts "a microservices architecture with api gateway"
|
|
13
|
+
* bun run scripts/examples/excalidraw-expert.ts "user auth flow" --style blueprint
|
|
14
|
+
*/
|
|
15
|
+
import container from 'luca/agi/container.server'
|
|
16
|
+
|
|
17
|
+
const args = process.argv.slice(2)
|
|
18
|
+
const styleFlag = args.indexOf('--style')
|
|
19
|
+
const style = styleFlag !== -1 ? args[styleFlag + 1] : undefined
|
|
20
|
+
const prompt = args.filter((a, i) => a !== '--style' && (styleFlag === -1 || i !== styleFlag + 1)).join(' ')
|
|
21
|
+
|
|
22
|
+
const description = prompt || 'A simple flowchart showing a user login process: user enters credentials, system validates, if valid show dashboard, if invalid show error and retry'
|
|
23
|
+
|
|
24
|
+
async function main() {
|
|
25
|
+
const ui = container.feature('ui')
|
|
26
|
+
|
|
27
|
+
ui.banner('Excalidraw Expert', { font: 'Small', colors: ['cyan', 'blue'] })
|
|
28
|
+
console.log()
|
|
29
|
+
|
|
30
|
+
const expert = container.feature('expert', { name: 'excalidraw', folder: 'excalidraw' })
|
|
31
|
+
|
|
32
|
+
// Listen to events for live feedback
|
|
33
|
+
expert.on('preview' as any, (chunk: string) => {
|
|
34
|
+
process.stdout.write('.')
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
expert.on('toolCall' as any, (name: string, args: any) => {
|
|
38
|
+
console.log(`\n${ui.colors.cyan(`> ${name}`)}`)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
expert.on('toolResult' as any, (name: string, result: string) => {
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(result)
|
|
44
|
+
if (parsed.pngPath) {
|
|
45
|
+
console.log(ui.colors.green(` Rendered: ${parsed.pngPath}`))
|
|
46
|
+
}
|
|
47
|
+
if (parsed.overall !== undefined) {
|
|
48
|
+
const score = parsed.overall
|
|
49
|
+
const color = score >= 4 ? 'green' : score >= 3 ? 'yellow' : 'red'
|
|
50
|
+
console.log(ui.colors[color](` Quality score: ${score}/5`))
|
|
51
|
+
}
|
|
52
|
+
} catch {}
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
const styleStr = style ? ` Use the "${style}" style.` : ''
|
|
56
|
+
const question = `Create a diagram for: ${description}.${styleStr}
|
|
57
|
+
|
|
58
|
+
After generating it, evaluate the diagram and if it needs improvement, revise it. Aim for a quality score of 4 or higher on all dimensions.`
|
|
59
|
+
|
|
60
|
+
console.log(ui.colors.dim(`Prompt: ${question}\n`))
|
|
61
|
+
console.log(ui.colors.dim('Generating'))
|
|
62
|
+
|
|
63
|
+
const answer = await expert.ask(question)
|
|
64
|
+
|
|
65
|
+
console.log('\n')
|
|
66
|
+
console.log(answer)
|
|
67
|
+
console.log()
|
|
68
|
+
|
|
69
|
+
const outputDir = container.paths.resolve('experts', 'excalidraw', 'output')
|
|
70
|
+
console.log(ui.colors.dim(`\nOutput files in: ${outputDir}`))
|
|
71
|
+
console.log(ui.colors.dim('Open diagram.excalidraw in https://excalidraw.com to edit'))
|
|
72
|
+
console.log(ui.colors.dim('View diagram.png for the rendered image'))
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
main().catch(console.error)
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import container from 'luca/agi'
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
const fileManager = await container.feature('fileManager').enable()
|
|
5
|
+
await fileManager.start()
|
|
6
|
+
|
|
7
|
+
const fileIds = fileManager.fileIds
|
|
8
|
+
const typescriptFiles = fileManager.matchFiles("**/*.ts")
|
|
9
|
+
|
|
10
|
+
console.log(fileIds)
|
|
11
|
+
console.log(typescriptFiles)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
main()
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import container from 'luca/agi'
|
|
2
|
+
// @ts-ignore - module not yet implemented
|
|
3
|
+
import createCollection, { Idea } from '@/ideas'
|
|
4
|
+
|
|
5
|
+
async function main() {
|
|
6
|
+
const collection = await createCollection(container.paths.resolve('docs'))
|
|
7
|
+
const ideas = await collection.query(Idea).fetchAll()
|
|
8
|
+
|
|
9
|
+
console.log(ideas.map((i: any) => i.sections.motivation))
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
main()
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import container from 'luca/agi'
|
|
2
|
+
|
|
3
|
+
const { ui } = container
|
|
4
|
+
|
|
5
|
+
async function main() {
|
|
6
|
+
const conversation = container.feature('conversation', {
|
|
7
|
+
model: 'gpt-4o-mini',
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
conversation.on('preview', (chunk: string) => {
|
|
11
|
+
console.clear()
|
|
12
|
+
console.log(
|
|
13
|
+
ui.markdown(chunk)
|
|
14
|
+
)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const result = await conversation.ask("Explain typescript module augmentation")
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
main()
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demonstrates OpenAI tool calls with gpt-5 using the raw openai SDK.
|
|
3
|
+
*
|
|
4
|
+
* Asks the model to compute a precise math expression — something it
|
|
5
|
+
* fundamentally cannot do reliably without calling the calculator tool.
|
|
6
|
+
* This guarantees a tool call on every run.
|
|
7
|
+
*
|
|
8
|
+
* Usage: bun run scripts/examples/openai-tool-calls.ts
|
|
9
|
+
*/
|
|
10
|
+
import OpenAI from "openai";
|
|
11
|
+
|
|
12
|
+
const client = new OpenAI(); // uses OPENAI_API_KEY from env
|
|
13
|
+
|
|
14
|
+
// Define a calculator tool
|
|
15
|
+
const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = [
|
|
16
|
+
{
|
|
17
|
+
type: "function",
|
|
18
|
+
function: {
|
|
19
|
+
name: "calculate",
|
|
20
|
+
description:
|
|
21
|
+
"Evaluate a mathematical expression and return the exact numeric result. You MUST use this tool for any arithmetic — do not attempt to compute in your head.",
|
|
22
|
+
parameters: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {
|
|
25
|
+
expression: {
|
|
26
|
+
type: "string",
|
|
27
|
+
description:
|
|
28
|
+
'The math expression to evaluate, e.g. "(1337 * 7919) + 42"',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ["expression"],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
// A prompt that forces tool use — precise arithmetic the model can't fake
|
|
38
|
+
const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [
|
|
39
|
+
{
|
|
40
|
+
role: "system",
|
|
41
|
+
content:
|
|
42
|
+
"You are a precise math assistant. Always use the calculate tool for arithmetic. Never guess.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
role: "user",
|
|
46
|
+
content:
|
|
47
|
+
"What is (7823 * 4519) + (1337 ^ 3) - 98765? Show the intermediate steps.",
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
async function run() {
|
|
52
|
+
const conversation: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [...messages];
|
|
53
|
+
let round = 0;
|
|
54
|
+
|
|
55
|
+
// Loop until the model stops calling tools
|
|
56
|
+
while (true) {
|
|
57
|
+
round++;
|
|
58
|
+
console.log(`--- Round ${round}: sending request to gpt-5 ---\n`);
|
|
59
|
+
|
|
60
|
+
const response = await client.chat.completions.create({
|
|
61
|
+
model: "gpt-5",
|
|
62
|
+
messages: conversation,
|
|
63
|
+
tools,
|
|
64
|
+
tool_choice: "auto",
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const choice = response.choices[0]!;
|
|
68
|
+
const assistantMessage = choice.message;
|
|
69
|
+
|
|
70
|
+
console.log("Finish reason:", choice.finish_reason);
|
|
71
|
+
console.log("Tool calls:", assistantMessage.tool_calls?.length ?? 0, "\n");
|
|
72
|
+
|
|
73
|
+
// Append assistant message to conversation history
|
|
74
|
+
conversation.push(assistantMessage);
|
|
75
|
+
|
|
76
|
+
// Done — model gave a final text response
|
|
77
|
+
if (choice.finish_reason === "stop") {
|
|
78
|
+
console.log("Final answer:\n");
|
|
79
|
+
console.log(assistantMessage.content);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (!assistantMessage.tool_calls?.length) {
|
|
84
|
+
console.log("Unexpected state — no tool calls but finish_reason:", choice.finish_reason);
|
|
85
|
+
console.log(JSON.stringify(choice, null, 2));
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Execute each tool call and append results to conversation
|
|
90
|
+
for (const toolCall of assistantMessage.tool_calls) {
|
|
91
|
+
const args = JSON.parse(toolCall.function.arguments);
|
|
92
|
+
console.log(`Tool call: ${toolCall.function.name}("${args.expression}")`);
|
|
93
|
+
|
|
94
|
+
let result: string;
|
|
95
|
+
try {
|
|
96
|
+
const fn = new Function(`return (${args.expression})`);
|
|
97
|
+
result = String(fn());
|
|
98
|
+
} catch (e: any) {
|
|
99
|
+
result = `Error: ${e.message}`;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
console.log(` => ${result}\n`);
|
|
103
|
+
|
|
104
|
+
conversation.push({
|
|
105
|
+
role: "tool",
|
|
106
|
+
tool_call_id: toolCall.id,
|
|
107
|
+
content: result,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
run().catch(console.error);
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import container from 'luca/node'
|
|
2
|
+
|
|
3
|
+
const ui = container.feature('ui')
|
|
4
|
+
const tg = container.feature('telegram', {
|
|
5
|
+
autoStart: false,
|
|
6
|
+
mode: 'polling',
|
|
7
|
+
webhookPath: '/telegram/webhook',
|
|
8
|
+
pollingTimeout: 1,
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
function nowStamp(): string {
|
|
12
|
+
const dt = new Date()
|
|
13
|
+
const hh = String(dt.getHours()).padStart(2, '0')
|
|
14
|
+
const mm = String(dt.getMinutes()).padStart(2, '0')
|
|
15
|
+
const ss = String(dt.getSeconds()).padStart(2, '0')
|
|
16
|
+
return `${hh}:${mm}:${ss}`
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function log(line: string, color = 'white') {
|
|
20
|
+
const stamp = ui.colors.dim(`[${nowStamp()}]`)
|
|
21
|
+
const palette = ui.colors as any
|
|
22
|
+
const painter = typeof palette[color] === 'function' ? palette[color] : ((value: string) => value)
|
|
23
|
+
console.log(`${stamp} ${painter(line)}`)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
tg.command('start', async (ctx) => {
|
|
27
|
+
await ctx.reply('Neon channel online. Send any text and I will echo it back.')
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
tg.command('status', async (ctx) => {
|
|
31
|
+
await ctx.reply(`running=${tg.isRunning} mode=${tg.mode}`)
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
tg.handle('message:text', async (ctx) => {
|
|
35
|
+
const text = (ctx.message as any)?.text || ''
|
|
36
|
+
const from = ctx.from?.username ? `@${ctx.from.username}` : String(ctx.from?.id || 'unknown')
|
|
37
|
+
log(`message from ${from}: ${text}`, 'cyan')
|
|
38
|
+
await ctx.reply(`echo: ${text}`)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
tg.on('error', (err: any) => {
|
|
42
|
+
log(`telegram error: ${err?.message || String(err)}`, 'red')
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
tg.on('command', (name: string, ctx: any) => {
|
|
46
|
+
const from = ctx?.from?.username ? `@${ctx.from.username}` : String(ctx?.from?.id || 'unknown')
|
|
47
|
+
log(`command /${name} by ${from}`, 'yellow')
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
process.on('SIGINT', async () => {
|
|
51
|
+
log('shutting down telegram bot (SIGINT)', 'yellow')
|
|
52
|
+
await tg.stop()
|
|
53
|
+
process.exit(0)
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
process.on('SIGTERM', async () => {
|
|
57
|
+
log('shutting down telegram bot (SIGTERM)', 'yellow')
|
|
58
|
+
await tg.stop()
|
|
59
|
+
process.exit(0)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
async function main() {
|
|
63
|
+
log('starting telegram bot feature...', 'green')
|
|
64
|
+
await tg.enable()
|
|
65
|
+
await tg.start()
|
|
66
|
+
|
|
67
|
+
const botInfo = tg.state.get('botInfo')
|
|
68
|
+
if (botInfo?.username) {
|
|
69
|
+
log(`bot is live as @${botInfo.username}`, 'green')
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
log('awaiting telegram updates...', 'magenta')
|
|
73
|
+
|
|
74
|
+
await new Promise<void>(() => {
|
|
75
|
+
// keep process alive while grammY polling runs
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
await main()
|