clawmini 0.0.1
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/.gemini/settings.json +46 -0
- package/.prettierrc +7 -0
- package/GEMINI.md +11 -0
- package/README.md +137 -0
- package/dist/adapter-discord/index.d.mts +5 -0
- package/dist/adapter-discord/index.d.mts.map +1 -0
- package/dist/adapter-discord/index.mjs +456 -0
- package/dist/adapter-discord/index.mjs.map +1 -0
- package/dist/chats-DKgTeU7i.mjs +91 -0
- package/dist/chats-DKgTeU7i.mjs.map +1 -0
- package/dist/chats-Zd_HXDHx.mjs +29 -0
- package/dist/chats-Zd_HXDHx.mjs.map +1 -0
- package/dist/cli/index.d.mts +1 -0
- package/dist/cli/index.mjs +850 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/cli/lite.d.mts +1 -0
- package/dist/cli/lite.mjs +4434 -0
- package/dist/cli/lite.mjs.map +1 -0
- package/dist/daemon/index.d.mts +5 -0
- package/dist/daemon/index.d.mts.map +1 -0
- package/dist/daemon/index.mjs +1222 -0
- package/dist/daemon/index.mjs.map +1 -0
- package/dist/fetch-BjZVyU3Z.mjs +37 -0
- package/dist/fetch-BjZVyU3Z.mjs.map +1 -0
- package/dist/fs-B5wW0oaH.mjs +14 -0
- package/dist/fs-B5wW0oaH.mjs.map +1 -0
- package/dist/lite-Dl7WXyaH.mjs +80 -0
- package/dist/lite-Dl7WXyaH.mjs.map +1 -0
- package/dist/rolldown-runtime-95iHPtFO.mjs +18 -0
- package/dist/web/_app/env.js +1 -0
- package/dist/web/_app/immutable/assets/0.GI4C4dpV.css +1 -0
- package/dist/web/_app/immutable/chunks/B5abRDXp.js +1 -0
- package/dist/web/_app/immutable/chunks/B8yYFADm.js +1 -0
- package/dist/web/_app/immutable/chunks/BPy8HLo7.js +5 -0
- package/dist/web/_app/immutable/chunks/Bi0jeV7Q.js +1 -0
- package/dist/web/_app/immutable/chunks/BmUXQ3wy.js +2 -0
- package/dist/web/_app/immutable/chunks/C3k55nDF.js +1 -0
- package/dist/web/_app/immutable/chunks/COekwvP2.js +1 -0
- package/dist/web/_app/immutable/chunks/CSvS_NwK.js +1 -0
- package/dist/web/_app/immutable/chunks/CpaGRn9L.js +1 -0
- package/dist/web/_app/immutable/chunks/CyNaE55B.js +1 -0
- package/dist/web/_app/immutable/chunks/DG5RZBw-.js +2 -0
- package/dist/web/_app/immutable/chunks/Dc-UOHw9.js +1 -0
- package/dist/web/_app/immutable/chunks/DcrmIfTj.js +1 -0
- package/dist/web/_app/immutable/chunks/ZkLyk0mE.js +1 -0
- package/dist/web/_app/immutable/entry/app.B-vZe7PN.js +2 -0
- package/dist/web/_app/immutable/entry/start.oP1AgKhs.js +1 -0
- package/dist/web/_app/immutable/nodes/0.B5WFN0zw.js +1 -0
- package/dist/web/_app/immutable/nodes/1.D1wtJb2k.js +1 -0
- package/dist/web/_app/immutable/nodes/2.CK3CLC0f.js +1 -0
- package/dist/web/_app/immutable/nodes/3.BB5wCoBf.js +4 -0
- package/dist/web/_app/immutable/nodes/4.Dr2jvAXK.js +1 -0
- package/dist/web/_app/immutable/nodes/5.BJl7oM3b.js +1 -0
- package/dist/web/_app/version.json +1 -0
- package/dist/web/index.html +37 -0
- package/dist/web/robots.txt +3 -0
- package/dist/workspace-CSgfo_2J.mjs +383 -0
- package/dist/workspace-CSgfo_2J.mjs.map +1 -0
- package/docs/01_chats/development_log.md +36 -0
- package/docs/01_chats/notes.md +27 -0
- package/docs/01_chats/prd.md +47 -0
- package/docs/01_chats/questions.md +19 -0
- package/docs/01_chats/tickets.md +67 -0
- package/docs/02_sessions/development_log.md +79 -0
- package/docs/02_sessions/notes.md +40 -0
- package/docs/02_sessions/prd.md +75 -0
- package/docs/02_sessions/questions.md +7 -0
- package/docs/02_sessions/tickets.md +68 -0
- package/docs/03_web_interface/development_log.md +60 -0
- package/docs/03_web_interface/notes.md +29 -0
- package/docs/03_web_interface/prd.md +42 -0
- package/docs/03_web_interface/questions.md +8 -0
- package/docs/03_web_interface/tickets.md +59 -0
- package/docs/04_agents/development_log.md +54 -0
- package/docs/04_agents/notes.md +45 -0
- package/docs/04_agents/prd.md +47 -0
- package/docs/04_agents/questions.md +13 -0
- package/docs/04_agents/tickets.md +107 -0
- package/docs/05_routers/development_log.md +13 -0
- package/docs/05_routers/notes.md +40 -0
- package/docs/05_routers/prd.md +55 -0
- package/docs/05_routers/questions.md +21 -0
- package/docs/05_routers/tickets.md +109 -0
- package/docs/06_agent_templates/development_log.md +38 -0
- package/docs/06_agent_templates/notes.md +25 -0
- package/docs/06_agent_templates/prd.md +34 -0
- package/docs/06_agent_templates/questions.md +11 -0
- package/docs/06_agent_templates/tickets.md +49 -0
- package/docs/06_cron/development_log.md +51 -0
- package/docs/06_cron/notes.md +14 -0
- package/docs/06_cron/prd.md +92 -0
- package/docs/06_cron/questions.md +15 -0
- package/docs/06_cron/tickets.md +75 -0
- package/docs/07_web_chat_ux/development_log.md +30 -0
- package/docs/07_web_chat_ux/notes.md +25 -0
- package/docs/07_web_chat_ux/prd.md +46 -0
- package/docs/07_web_chat_ux/questions.md +7 -0
- package/docs/07_web_chat_ux/tickets.md +48 -0
- package/docs/08_agent_api/development_log.md +52 -0
- package/docs/08_agent_api/notes.md +31 -0
- package/docs/08_agent_api/prd.md +56 -0
- package/docs/08_agent_api/questions.md +14 -0
- package/docs/08_agent_api/tickets.md +104 -0
- package/docs/09_agent_fallbacks/development_log.md +52 -0
- package/docs/09_agent_fallbacks/notes.md +40 -0
- package/docs/09_agent_fallbacks/prd.md +55 -0
- package/docs/09_agent_fallbacks/questions.md +10 -0
- package/docs/09_agent_fallbacks/tickets.md +88 -0
- package/docs/09_discord_adapter/development_log.md +95 -0
- package/docs/09_discord_adapter/notes.md +18 -0
- package/docs/09_discord_adapter/prd.md +57 -0
- package/docs/09_discord_adapter/questions.md +16 -0
- package/docs/09_discord_adapter/tickets.md +116 -0
- package/docs/10_file_attachments/development_log.md +55 -0
- package/docs/10_file_attachments/notes.md +59 -0
- package/docs/10_file_attachments/prd.md +73 -0
- package/docs/10_file_attachments/questions.md +15 -0
- package/docs/10_file_attachments/tickets.md +88 -0
- package/docs/11_message_verbosity/development_log.md +43 -0
- package/docs/11_message_verbosity/notes.md +26 -0
- package/docs/11_message_verbosity/prd.md +44 -0
- package/docs/11_message_verbosity/questions.md +8 -0
- package/docs/11_message_verbosity/tickets.md +33 -0
- package/docs/12_environments/development_log.md +43 -0
- package/docs/12_environments/notes.md +45 -0
- package/docs/12_environments/prd.md +113 -0
- package/docs/12_environments/questions.md +17 -0
- package/docs/12_environments/tickets.md +87 -0
- package/docs/12_setup_flow_improvements/development_log.md +40 -0
- package/docs/12_setup_flow_improvements/notes.md +34 -0
- package/docs/12_setup_flow_improvements/prd.md +35 -0
- package/docs/12_setup_flow_improvements/questions.md +8 -0
- package/docs/12_setup_flow_improvements/tickets.md +122 -0
- package/docs/13_discord_typing_indicators/development_log.md +38 -0
- package/docs/13_discord_typing_indicators/notes.md +18 -0
- package/docs/13_discord_typing_indicators/prd.md +41 -0
- package/docs/13_discord_typing_indicators/questions.md +6 -0
- package/docs/13_discord_typing_indicators/tickets.md +60 -0
- package/docs/14_interruptions/development_log.md +50 -0
- package/docs/14_interruptions/notes.md +38 -0
- package/docs/14_interruptions/prd.md +46 -0
- package/docs/14_interruptions/questions.md +12 -0
- package/docs/14_interruptions/tickets.md +69 -0
- package/docs/15_sandbox_policies/development_log.md +95 -0
- package/docs/15_sandbox_policies/notes.md +33 -0
- package/docs/15_sandbox_policies/prd.md +163 -0
- package/docs/15_sandbox_policies/questions.md +10 -0
- package/docs/15_sandbox_policies/tickets.md +196 -0
- package/docs/CHECKS.md +9 -0
- package/docs/guides/discord_adapter_setup.md +69 -0
- package/docs/guides/sandbox_policies.md +76 -0
- package/eslint.config.js +47 -0
- package/napkin.md +21 -0
- package/package.json +50 -0
- package/scripts/create_worktree.sh +49 -0
- package/scripts/get_pr_comments.sh +36 -0
- package/src/adapter-discord/client.test.ts +65 -0
- package/src/adapter-discord/client.ts +41 -0
- package/src/adapter-discord/config.test.ts +156 -0
- package/src/adapter-discord/config.ts +61 -0
- package/src/adapter-discord/forwarder.test.ts +493 -0
- package/src/adapter-discord/forwarder.ts +246 -0
- package/src/adapter-discord/index.test.ts +399 -0
- package/src/adapter-discord/index.ts +147 -0
- package/src/adapter-discord/state.test.ts +65 -0
- package/src/adapter-discord/state.ts +44 -0
- package/src/cli/client.ts +46 -0
- package/src/cli/commands/agents.ts +138 -0
- package/src/cli/commands/chats.ts +79 -0
- package/src/cli/commands/down.ts +32 -0
- package/src/cli/commands/environments.ts +39 -0
- package/src/cli/commands/export-lite.ts +62 -0
- package/src/cli/commands/init.ts +79 -0
- package/src/cli/commands/jobs.ts +141 -0
- package/src/cli/commands/messages.ts +103 -0
- package/src/cli/commands/up.ts +26 -0
- package/src/cli/commands/web-api/agents.ts +138 -0
- package/src/cli/commands/web-api/chats.ts +213 -0
- package/src/cli/commands/web-api/utils.ts +27 -0
- package/src/cli/commands/web.ts +105 -0
- package/src/cli/e2e/adapter-discord.test.ts +76 -0
- package/src/cli/e2e/agents.test.ts +140 -0
- package/src/cli/e2e/basic.test.ts +43 -0
- package/src/cli/e2e/cron.test.ts +132 -0
- package/src/cli/e2e/daemon.test.ts +293 -0
- package/src/cli/e2e/environments.test.ts +66 -0
- package/src/cli/e2e/export-lite-func.test.ts +155 -0
- package/src/cli/e2e/export-lite.test.ts +51 -0
- package/src/cli/e2e/fallbacks.test.ts +169 -0
- package/src/cli/e2e/global-setup.ts +15 -0
- package/src/cli/e2e/init.test.ts +70 -0
- package/src/cli/e2e/messages.test.ts +294 -0
- package/src/cli/e2e/requests.test.ts +165 -0
- package/src/cli/e2e/utils.ts +66 -0
- package/src/cli/index.test.ts +7 -0
- package/src/cli/index.ts +29 -0
- package/src/cli/lite.ts +247 -0
- package/src/cli/utils.ts +4 -0
- package/src/daemon/auth.test.ts +50 -0
- package/src/daemon/auth.ts +69 -0
- package/src/daemon/chats.ts +26 -0
- package/src/daemon/cron.test.ts +28 -0
- package/src/daemon/cron.ts +159 -0
- package/src/daemon/events.ts +15 -0
- package/src/daemon/index.ts +212 -0
- package/src/daemon/message-agent.test.ts +132 -0
- package/src/daemon/message-extraction.test.ts +166 -0
- package/src/daemon/message-fallbacks.test.ts +313 -0
- package/src/daemon/message-interruption.test.ts +125 -0
- package/src/daemon/message-queue.test.ts +143 -0
- package/src/daemon/message-router.test.ts +106 -0
- package/src/daemon/message-session.test.ts +127 -0
- package/src/daemon/message-test-utils.ts +41 -0
- package/src/daemon/message-typing.test.ts +93 -0
- package/src/daemon/message-verbosity.test.ts +127 -0
- package/src/daemon/message.ts +600 -0
- package/src/daemon/observation.test.ts +118 -0
- package/src/daemon/policy-request-service.test.ts +87 -0
- package/src/daemon/policy-request-service.ts +62 -0
- package/src/daemon/policy-utils.test.ts +138 -0
- package/src/daemon/policy-utils.ts +152 -0
- package/src/daemon/queue.test.ts +89 -0
- package/src/daemon/queue.ts +87 -0
- package/src/daemon/request-store.test.ts +103 -0
- package/src/daemon/request-store.ts +96 -0
- package/src/daemon/router-policy-request.test.ts +99 -0
- package/src/daemon/router.test.ts +380 -0
- package/src/daemon/router.ts +510 -0
- package/src/daemon/routers/slash-command.test.ts +145 -0
- package/src/daemon/routers/slash-command.ts +58 -0
- package/src/daemon/routers/slash-interrupt.test.ts +30 -0
- package/src/daemon/routers/slash-interrupt.ts +7 -0
- package/src/daemon/routers/slash-new.test.ts +59 -0
- package/src/daemon/routers/slash-new.ts +14 -0
- package/src/daemon/routers/slash-policies.test.ts +167 -0
- package/src/daemon/routers/slash-policies.ts +131 -0
- package/src/daemon/routers/slash-stop.test.ts +30 -0
- package/src/daemon/routers/slash-stop.ts +3 -0
- package/src/daemon/routers/types.ts +10 -0
- package/src/daemon/routers/utils.ts +22 -0
- package/src/daemon/routers.test.ts +141 -0
- package/src/daemon/routers.ts +115 -0
- package/src/daemon/utils/spawn.ts +61 -0
- package/src/shared/agent-utils.ts +30 -0
- package/src/shared/chats.test.ts +112 -0
- package/src/shared/chats.ts +164 -0
- package/src/shared/config.test.ts +90 -0
- package/src/shared/config.ts +100 -0
- package/src/shared/event-source.ts +121 -0
- package/src/shared/fetch.ts +45 -0
- package/src/shared/lite.ts +129 -0
- package/src/shared/policies.ts +24 -0
- package/src/shared/utils/env.ts +27 -0
- package/src/shared/utils/fs.ts +13 -0
- package/src/shared/workspace.test.ts +345 -0
- package/src/shared/workspace.ts +500 -0
- package/templates/environments/cladding/env.json +7 -0
- package/templates/environments/macos/env.json +8 -0
- package/templates/environments/macos/sandbox.sb +21 -0
- package/templates/environments/macos-proxy/allowlist.txt +1 -0
- package/templates/environments/macos-proxy/env.json +14 -0
- package/templates/environments/macos-proxy/proxy.mjs +86 -0
- package/templates/environments/macos-proxy/sandbox.sb +34 -0
- package/templates/gemini/settings.json +11 -0
- package/templates/gemini-claw/.gemini/hooks/clawmini-logging.sh +17 -0
- package/templates/gemini-claw/.gemini/settings.json +24 -0
- package/templates/gemini-claw/.gemini/skills/clawmini-jobs/SKILL.md +40 -0
- package/templates/gemini-claw/.gemini/system.md +98 -0
- package/templates/gemini-claw/BOOTSTRAP.md +54 -0
- package/templates/gemini-claw/GEMINI.md +107 -0
- package/templates/gemini-claw/HEARTBEAT.md +3 -0
- package/templates/gemini-claw/MEMORY.md +2 -0
- package/templates/gemini-claw/SOUL.md +42 -0
- package/templates/gemini-claw/TOOLS.md +38 -0
- package/templates/gemini-claw/USER.md +15 -0
- package/templates/gemini-claw/memory/.gitkeep +0 -0
- package/templates/gemini-claw/settings.json +24 -0
- package/templates/opencode/settings.json +11 -0
- package/tsconfig.json +42 -0
- package/tsdown.config.ts +19 -0
- package/vitest.config.ts +9 -0
- package/web/.svelte-kit/ambient.d.ts +382 -0
- package/web/.svelte-kit/generated/client/app.js +35 -0
- package/web/.svelte-kit/generated/client/matchers.js +1 -0
- package/web/.svelte-kit/generated/client/nodes/0.js +3 -0
- package/web/.svelte-kit/generated/client/nodes/1.js +1 -0
- package/web/.svelte-kit/generated/client/nodes/2.js +1 -0
- package/web/.svelte-kit/generated/client/nodes/3.js +1 -0
- package/web/.svelte-kit/generated/client/nodes/4.js +3 -0
- package/web/.svelte-kit/generated/client/nodes/5.js +3 -0
- package/web/.svelte-kit/generated/client-optimized/app.js +35 -0
- package/web/.svelte-kit/generated/client-optimized/matchers.js +1 -0
- package/web/.svelte-kit/generated/client-optimized/nodes/0.js +3 -0
- package/web/.svelte-kit/generated/client-optimized/nodes/1.js +1 -0
- package/web/.svelte-kit/generated/client-optimized/nodes/2.js +1 -0
- package/web/.svelte-kit/generated/client-optimized/nodes/3.js +1 -0
- package/web/.svelte-kit/generated/client-optimized/nodes/4.js +3 -0
- package/web/.svelte-kit/generated/client-optimized/nodes/5.js +3 -0
- package/web/.svelte-kit/generated/root.js +3 -0
- package/web/.svelte-kit/generated/root.svelte +68 -0
- package/web/.svelte-kit/generated/server/internal.js +53 -0
- package/web/.svelte-kit/non-ambient.d.ts +46 -0
- package/web/.svelte-kit/output/client/.vite/manifest.json +251 -0
- package/web/.svelte-kit/output/client/_app/immutable/assets/0.GI4C4dpV.css +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/B5abRDXp.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/B8yYFADm.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BPy8HLo7.js +5 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Bi0jeV7Q.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/BmUXQ3wy.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/C3k55nDF.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/COekwvP2.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CSvS_NwK.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CpaGRn9L.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/CyNaE55B.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DG5RZBw-.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/Dc-UOHw9.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/DcrmIfTj.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/chunks/ZkLyk0mE.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/app.B-vZe7PN.js +2 -0
- package/web/.svelte-kit/output/client/_app/immutable/entry/start.oP1AgKhs.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/0.B5WFN0zw.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/1.D1wtJb2k.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/2.CK3CLC0f.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/3.BB5wCoBf.js +4 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/4.Dr2jvAXK.js +1 -0
- package/web/.svelte-kit/output/client/_app/immutable/nodes/5.BJl7oM3b.js +1 -0
- package/web/.svelte-kit/output/client/_app/version.json +1 -0
- package/web/.svelte-kit/output/client/robots.txt +3 -0
- package/web/.svelte-kit/output/prerendered/dependencies/_app/env.js +1 -0
- package/web/.svelte-kit/output/server/.vite/manifest.json +215 -0
- package/web/.svelte-kit/output/server/_app/immutable/assets/_layout.GI4C4dpV.css +1 -0
- package/web/.svelte-kit/output/server/chunks/Icon.js +153 -0
- package/web/.svelte-kit/output/server/chunks/bot.js +2753 -0
- package/web/.svelte-kit/output/server/chunks/client.js +47 -0
- package/web/.svelte-kit/output/server/chunks/environment.js +34 -0
- package/web/.svelte-kit/output/server/chunks/exports.js +231 -0
- package/web/.svelte-kit/output/server/chunks/false.js +4 -0
- package/web/.svelte-kit/output/server/chunks/index-server.js +20 -0
- package/web/.svelte-kit/output/server/chunks/index.js +24 -0
- package/web/.svelte-kit/output/server/chunks/internal.js +133 -0
- package/web/.svelte-kit/output/server/chunks/plus.js +81 -0
- package/web/.svelte-kit/output/server/chunks/root.js +4076 -0
- package/web/.svelte-kit/output/server/chunks/shared.js +789 -0
- package/web/.svelte-kit/output/server/chunks/utils.js +43 -0
- package/web/.svelte-kit/output/server/entries/fallbacks/error.svelte.js +11 -0
- package/web/.svelte-kit/output/server/entries/pages/_layout.svelte.js +3944 -0
- package/web/.svelte-kit/output/server/entries/pages/_layout.ts.js +28 -0
- package/web/.svelte-kit/output/server/entries/pages/_page.svelte.js +7 -0
- package/web/.svelte-kit/output/server/entries/pages/agents/_page.svelte.js +379 -0
- package/web/.svelte-kit/output/server/entries/pages/chats/_id_/_page.svelte.js +292 -0
- package/web/.svelte-kit/output/server/entries/pages/chats/_id_/_page.ts.js +17 -0
- package/web/.svelte-kit/output/server/entries/pages/chats/_id_/settings/_page.svelte.js +259 -0
- package/web/.svelte-kit/output/server/entries/pages/chats/_id_/settings/_page.ts.js +17 -0
- package/web/.svelte-kit/output/server/index.js +3748 -0
- package/web/.svelte-kit/output/server/internal.js +14 -0
- package/web/.svelte-kit/output/server/manifest-full.js +63 -0
- package/web/.svelte-kit/output/server/manifest.js +63 -0
- package/web/.svelte-kit/output/server/nodes/0.js +13 -0
- package/web/.svelte-kit/output/server/nodes/1.js +8 -0
- package/web/.svelte-kit/output/server/nodes/2.js +8 -0
- package/web/.svelte-kit/output/server/nodes/3.js +8 -0
- package/web/.svelte-kit/output/server/nodes/4.js +13 -0
- package/web/.svelte-kit/output/server/nodes/5.js +13 -0
- package/web/.svelte-kit/output/server/remote-entry.js +557 -0
- package/web/.svelte-kit/tsconfig.json +67 -0
- package/web/.svelte-kit/types/route_meta_data.json +17 -0
- package/web/.svelte-kit/types/src/routes/$types.d.ts +26 -0
- package/web/.svelte-kit/types/src/routes/agents/$types.d.ts +18 -0
- package/web/.svelte-kit/types/src/routes/chats/[id]/$types.d.ts +21 -0
- package/web/.svelte-kit/types/src/routes/chats/[id]/proxy+page.ts +20 -0
- package/web/.svelte-kit/types/src/routes/chats/[id]/settings/$types.d.ts +21 -0
- package/web/.svelte-kit/types/src/routes/chats/[id]/settings/proxy+page.ts +19 -0
- package/web/.svelte-kit/types/src/routes/proxy+layout.ts +35 -0
- package/web/README.md +42 -0
- package/web/components.json +16 -0
- package/web/package.json +41 -0
- package/web/src/app.css +121 -0
- package/web/src/app.d.ts +13 -0
- package/web/src/app.html +11 -0
- package/web/src/demo.spec.ts +7 -0
- package/web/src/lib/app-state.svelte.ts +3 -0
- package/web/src/lib/assets/favicon.svg +1 -0
- package/web/src/lib/components/app/app-sidebar-test-wrapper.svelte +10 -0
- package/web/src/lib/components/app/app-sidebar.svelte +171 -0
- package/web/src/lib/components/app/app-sidebar.svelte.spec.ts +13 -0
- package/web/src/lib/components/ui/button/button.svelte +82 -0
- package/web/src/lib/components/ui/button/index.ts +17 -0
- package/web/src/lib/components/ui/dialog/dialog-close.svelte +7 -0
- package/web/src/lib/components/ui/dialog/dialog-content.svelte +45 -0
- package/web/src/lib/components/ui/dialog/dialog-description.svelte +17 -0
- package/web/src/lib/components/ui/dialog/dialog-footer.svelte +20 -0
- package/web/src/lib/components/ui/dialog/dialog-header.svelte +20 -0
- package/web/src/lib/components/ui/dialog/dialog-overlay.svelte +20 -0
- package/web/src/lib/components/ui/dialog/dialog-portal.svelte +7 -0
- package/web/src/lib/components/ui/dialog/dialog-title.svelte +17 -0
- package/web/src/lib/components/ui/dialog/dialog-trigger.svelte +7 -0
- package/web/src/lib/components/ui/dialog/dialog.svelte +7 -0
- package/web/src/lib/components/ui/dialog/index.ts +34 -0
- package/web/src/lib/components/ui/input/index.ts +7 -0
- package/web/src/lib/components/ui/input/input.svelte +52 -0
- package/web/src/lib/components/ui/separator/index.ts +7 -0
- package/web/src/lib/components/ui/separator/separator.svelte +21 -0
- package/web/src/lib/components/ui/sheet/index.ts +34 -0
- package/web/src/lib/components/ui/sheet/sheet-close.svelte +7 -0
- package/web/src/lib/components/ui/sheet/sheet-content.svelte +60 -0
- package/web/src/lib/components/ui/sheet/sheet-description.svelte +17 -0
- package/web/src/lib/components/ui/sheet/sheet-footer.svelte +20 -0
- package/web/src/lib/components/ui/sheet/sheet-header.svelte +20 -0
- package/web/src/lib/components/ui/sheet/sheet-overlay.svelte +20 -0
- package/web/src/lib/components/ui/sheet/sheet-portal.svelte +7 -0
- package/web/src/lib/components/ui/sheet/sheet-title.svelte +17 -0
- package/web/src/lib/components/ui/sheet/sheet-trigger.svelte +7 -0
- package/web/src/lib/components/ui/sheet/sheet.svelte +7 -0
- package/web/src/lib/components/ui/sidebar/constants.ts +6 -0
- package/web/src/lib/components/ui/sidebar/context.svelte.ts +79 -0
- package/web/src/lib/components/ui/sidebar/index.ts +75 -0
- package/web/src/lib/components/ui/sidebar/sidebar-content.svelte +24 -0
- package/web/src/lib/components/ui/sidebar/sidebar-footer.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-group-action.svelte +36 -0
- package/web/src/lib/components/ui/sidebar/sidebar-group-content.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-group-label.svelte +34 -0
- package/web/src/lib/components/ui/sidebar/sidebar-group.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-header.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-input.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-inset.svelte +24 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-action.svelte +43 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-badge.svelte +29 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-button.svelte +103 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-item.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-skeleton.svelte +36 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-sub-button.svelte +43 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-sub-item.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu-sub.svelte +25 -0
- package/web/src/lib/components/ui/sidebar/sidebar-menu.svelte +21 -0
- package/web/src/lib/components/ui/sidebar/sidebar-provider.svelte +53 -0
- package/web/src/lib/components/ui/sidebar/sidebar-rail.svelte +36 -0
- package/web/src/lib/components/ui/sidebar/sidebar-separator.svelte +19 -0
- package/web/src/lib/components/ui/sidebar/sidebar-trigger.svelte +35 -0
- package/web/src/lib/components/ui/sidebar/sidebar.svelte +104 -0
- package/web/src/lib/components/ui/skeleton/index.ts +7 -0
- package/web/src/lib/components/ui/skeleton/skeleton.svelte +17 -0
- package/web/src/lib/components/ui/switch/index.ts +7 -0
- package/web/src/lib/components/ui/switch/switch.svelte +29 -0
- package/web/src/lib/components/ui/textarea/index.ts +7 -0
- package/web/src/lib/components/ui/textarea/textarea.svelte +23 -0
- package/web/src/lib/components/ui/tooltip/index.ts +19 -0
- package/web/src/lib/components/ui/tooltip/tooltip-content.svelte +52 -0
- package/web/src/lib/components/ui/tooltip/tooltip-portal.svelte +7 -0
- package/web/src/lib/components/ui/tooltip/tooltip-provider.svelte +7 -0
- package/web/src/lib/components/ui/tooltip/tooltip-trigger.svelte +7 -0
- package/web/src/lib/components/ui/tooltip/tooltip.svelte +7 -0
- package/web/src/lib/hooks/is-mobile.svelte.ts +9 -0
- package/web/src/lib/index.ts +1 -0
- package/web/src/lib/types.ts +23 -0
- package/web/src/lib/utils.ts +13 -0
- package/web/src/routes/+layout.svelte +67 -0
- package/web/src/routes/+layout.ts +34 -0
- package/web/src/routes/+page.svelte +7 -0
- package/web/src/routes/agents/+page.svelte +206 -0
- package/web/src/routes/chats/[id]/+page.svelte +406 -0
- package/web/src/routes/chats/[id]/+page.ts +19 -0
- package/web/src/routes/chats/[id]/page.svelte.spec.ts +102 -0
- package/web/src/routes/chats/[id]/settings/+page.svelte +165 -0
- package/web/src/routes/chats/[id]/settings/+page.ts +18 -0
- package/web/src/routes/page.svelte.spec.ts +13 -0
- package/web/static/robots.txt +3 -0
- package/web/svelte.config.js +21 -0
- package/web/tsconfig.json +20 -0
- package/web/vite.config.ts +41 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["handleError","fs"],"sources":["../../src/shared/agent-utils.ts","../../src/cli/utils.ts","../../src/cli/commands/init.ts","../../src/cli/client.ts","../../src/cli/commands/messages.ts","../../src/cli/commands/chats.ts","../../src/cli/commands/agents.ts","../../src/cli/commands/down.ts","../../src/cli/commands/up.ts","../../src/cli/commands/web-api/utils.ts","../../src/cli/commands/web-api/agents.ts","../../src/cli/commands/web-api/chats.ts","../../src/cli/commands/web.ts","../../src/cli/commands/jobs.ts","../../src/cli/commands/export-lite.ts","../../src/cli/commands/environments.ts","../../src/cli/index.ts"],"sourcesContent":["import { type Agent } from './config.js';\nimport {\n writeAgentSettings,\n applyTemplateToAgent,\n readChatSettings,\n writeChatSettings,\n} from './workspace.js';\nimport { createChat, listChats } from './chats.js';\n\nexport async function createAgentWithChat(\n agentId: string,\n agentData: Agent,\n template?: string,\n startDir = process.cwd()\n): Promise<void> {\n await writeAgentSettings(agentId, agentData, startDir);\n\n if (template) {\n await applyTemplateToAgent(agentId, template, agentData, startDir);\n }\n\n const existingChats = await listChats(startDir);\n if (existingChats.includes(agentId)) {\n console.warn(`Warning: Chat ${agentId} already exists.`);\n } else {\n await createChat(agentId, startDir);\n const currentSettings = (await readChatSettings(agentId, startDir)) || {};\n await writeChatSettings(agentId, { ...currentSettings, defaultAgent: agentId }, startDir);\n }\n}\n","export function handleError(action: string, err: unknown): never {\n console.error(`Failed to ${action}:`, err instanceof Error ? err.message : String(err));\n process.exit(1);\n}\n","import { Command } from 'commander';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { isValidAgentId, enableEnvironment } from '../../shared/workspace.js';\nimport { setDefaultChatId } from '../../shared/chats.js';\nimport { type Agent } from '../../shared/config.js';\nimport { createAgentWithChat } from '../../shared/agent-utils.js';\nimport { handleError } from '../utils.js';\n\nexport const initCmd = new Command('init')\n .description('Initialize a new .clawmini settings folder')\n .option('--agent <name>', 'Initialize with a specific agent')\n .option('--agent-template <name>', 'Template to use for the agent')\n .option('--environment <name>', 'Enable a specific environment')\n .action(async (options: { agent?: string; agentTemplate?: string; environment?: string }) => {\n if (options.agentTemplate && !options.agent) {\n handleError('initialize', new Error('--agent-template cannot be used without --agent'));\n }\n\n if (options.agent && !isValidAgentId(options.agent)) {\n handleError('initialize', new Error(`Invalid agent ID: ${options.agent}`));\n }\n\n const cwd = process.cwd();\n const dirPath = path.join(cwd, '.clawmini');\n const settingsPath = path.join(dirPath, 'settings.json');\n\n if (fs.existsSync(settingsPath)) {\n console.log('.clawmini already initialized');\n return;\n }\n\n const defaultSettings = {\n defaultAgent: {\n commands: {\n new: 'echo $CLAW_CLI_MESSAGE',\n },\n env: {},\n },\n routers: [\n '@clawmini/slash-new',\n '@clawmini/slash-stop',\n '@clawmini/slash-interrupt',\n '@clawmini/slash-command',\n ],\n api: true,\n };\n\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n\n fs.writeFileSync(settingsPath, JSON.stringify(defaultSettings, null, 2));\n console.log('Initialized .clawmini/settings.json');\n\n if (options.agent) {\n try {\n const agentId = options.agent;\n const agentData: Agent = {};\n await createAgentWithChat(agentId, agentData, options.agentTemplate);\n\n console.log(`Agent ${agentId} created successfully.`);\n\n await setDefaultChatId(agentId);\n console.log(`Default chat set to ${agentId}.`);\n } catch (err) {\n handleError('create agent', err);\n }\n }\n\n if (options.environment) {\n try {\n await enableEnvironment(options.environment);\n } catch (err) {\n handleError('enable environment', err);\n }\n }\n });\n","import { createTRPCClient, httpLink } from '@trpc/client';\nimport type { AppRouter } from '../daemon/router.js';\nimport { getSocketPath, getClawminiDir } from '../shared/workspace.js';\nimport { createUnixSocketFetch } from '../shared/fetch.js';\nimport { spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function getDaemonClient(options: { autoStart?: boolean } = {}) {\n const { autoStart = true } = options;\n const socketPath = getSocketPath();\n\n // Check if server is running by verifying socket exists\n // (A better check would be to ping it, but this is a start)\n if (!fs.existsSync(socketPath)) {\n if (!autoStart) {\n throw new Error('Daemon not running.');\n }\n console.log('Daemon not running. Starting daemon...');\n\n // Start daemon in the background\n const daemonPath = new URL('../daemon/index.mjs', import.meta.url).pathname;\n const logFile = fs.openSync(path.join(getClawminiDir(), 'daemon.log'), 'a');\n const child = spawn(process.execPath, [daemonPath], {\n detached: true,\n stdio: ['ignore', logFile, logFile],\n });\n child.unref();\n\n // Wait a moment for the daemon to start and create the socket\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n if (!fs.existsSync(socketPath)) {\n throw new Error('Failed to start daemon.');\n }\n }\n\n return createTRPCClient<AppRouter>({\n links: [\n httpLink({\n url: 'http://localhost',\n fetch: createUnixSocketFetch(socketPath),\n }),\n ],\n });\n}\n","import { Command } from 'commander';\nimport { getDaemonClient } from '../client.js';\nimport { getMessages, getDefaultChatId } from '../../shared/chats.js';\nimport { getAgent, isValidAgentId, getClawminiDir } from '../../shared/workspace.js';\nimport * as fs from 'node:fs/promises';\nimport path from 'node:path';\n\nexport const messagesCmd = new Command('messages').description('Manage messages');\n\nmessagesCmd\n .command('send <message>')\n .description('Send a new message')\n .option('-c, --chat <id>', 'Specific chat to send the message to')\n .option('-s, --session <id>', 'Specific session to send the message to')\n .option('-a, --agent <name>', 'Specific agent to use for this message')\n .option('--no-wait', 'Return immediately after the server queues the message')\n .option('-f, --file <path>', 'File to attach', (val, prev: string[]) => prev.concat([val]), [])\n .action(async (message, options) => {\n try {\n if (options.agent) {\n if (!isValidAgentId(options.agent)) {\n console.error(`Error: Invalid agent ID '${options.agent}'.`);\n process.exit(1);\n }\n\n if (options.agent !== 'default') {\n const agent = await getAgent(options.agent);\n if (!agent) {\n console.error(`Error: Agent '${options.agent}' not found.`);\n process.exit(1);\n }\n }\n }\n\n let finalFiles: string[] | undefined = undefined;\n if (options.file && options.file.length > 0) {\n finalFiles = [];\n const tmpDir = path.join(getClawminiDir(process.cwd()), 'tmp');\n await fs.mkdir(tmpDir, { recursive: true });\n for (const f of options.file) {\n const dest = path.join(\n tmpDir,\n `cli-${Date.now()}-${Math.random().toString(36).substring(2, 7)}-${path.basename(f)}`\n );\n await fs.copyFile(path.resolve(process.cwd(), f), dest);\n finalFiles.push(dest);\n }\n }\n\n const trpc = await getDaemonClient();\n await trpc.sendMessage.mutate({\n type: 'send-message',\n client: 'cli',\n data: {\n message,\n chatId: options.chat,\n sessionId: options.session,\n agentId: options.agent,\n noWait: !options.wait,\n files: finalFiles,\n },\n });\n console.log('Message sent successfully.');\n } catch (err) {\n console.error('Failed to send message:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nmessagesCmd\n .command('tail')\n .description('View message history')\n .option('-n, --lines <number>', 'Number of messages to show', parseInt)\n .option('--json', 'Output raw JSONL format')\n .option('-c, --chat <id>', 'Specific chat to view')\n .action(async (options) => {\n try {\n const chatId = options.chat ?? (await getDefaultChatId());\n const messages = await getMessages(chatId, options.lines);\n\n if (options.json) {\n messages.forEach((msg) => console.log(JSON.stringify(msg)));\n } else {\n messages.forEach((msg) => {\n if (msg.role === 'user') {\n console.log(`[USER] ${msg.content}`);\n } else if (msg.role === 'log') {\n if (msg.content) {\n console.log(`[LOG] ${msg.content.trim()}`);\n } else if (msg.stderr) {\n console.error(`[STDERR] ${msg.stderr.trim()}`);\n }\n }\n });\n }\n } catch (err) {\n console.error(\n 'Failed to retrieve messages:',\n err instanceof Error ? err.message : String(err)\n );\n process.exit(1);\n }\n });\n","import { Command } from 'commander';\nimport {\n listChats,\n createChat,\n deleteChat,\n setDefaultChatId,\n getDefaultChatId,\n DEFAULT_CHAT_ID,\n} from '../../shared/chats.js';\n\nexport const chatsCmd = new Command('chats').description('Manage chat sessions');\n\nchatsCmd\n .command('list')\n .description('Display existing chats')\n .action(async () => {\n try {\n const chats = await listChats();\n const defaultId = await getDefaultChatId();\n if (chats.length === 0) {\n console.log('No chats found.');\n return;\n }\n for (const id of chats) {\n const marker = id === defaultId ? ' *' : '';\n console.log(`- ${id}${marker}`);\n }\n } catch (err) {\n console.error('Failed to list chats:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nchatsCmd\n .command('add <id>')\n .description('Initialize a new chat')\n .action(async (id: string) => {\n try {\n await createChat(id);\n console.log(`Chat ${id} created successfully.`);\n } catch (err) {\n console.error('Failed to create chat:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nchatsCmd\n .command('delete <id>')\n .description('Remove a chat')\n .action(async (id: string) => {\n try {\n const defaultId = await getDefaultChatId();\n await deleteChat(id);\n console.log(`Chat ${id} deleted successfully.`);\n if (id === defaultId) {\n await setDefaultChatId(DEFAULT_CHAT_ID);\n console.log(`Default chat reset to default.`);\n }\n } catch (err) {\n console.error('Failed to delete chat:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n\nchatsCmd\n .command('set-default <id>')\n .description('Update the workspace default chat')\n .action(async (id: string) => {\n try {\n await setDefaultChatId(id);\n console.log(`Default chat set to ${id}.`);\n } catch (err) {\n console.error(\n 'Failed to set default chat:',\n err instanceof Error ? err.message : String(err)\n );\n process.exit(1);\n }\n });\n","import { Command } from 'commander';\nimport {\n listAgents,\n getAgent,\n writeAgentSettings,\n deleteAgent,\n isValidAgentId,\n} from '../../shared/workspace.js';\nimport { type Agent } from '../../shared/config.js';\nimport { createAgentWithChat } from '../../shared/agent-utils.js';\nimport { handleError } from '../utils.js';\n\nexport const agentsCmd = new Command('agents').description('Manage agents');\n\nfunction parseEnv(envArray: string[] | undefined): Record<string, string> | undefined {\n if (!envArray || envArray.length === 0) return undefined;\n const env: Record<string, string> = {};\n for (const e of envArray) {\n const [key, ...rest] = e.split('=');\n if (key && rest.length >= 0) {\n env[key] = rest.join('=');\n }\n }\n return env;\n}\n\nfunction assertValidAgentId(id: string): void {\n if (!isValidAgentId(id)) {\n throw new Error(`Invalid agent ID: ${id}`);\n }\n}\n\nagentsCmd\n .command('list')\n .description('Display existing agents')\n .action(async () => {\n try {\n const agents = await listAgents();\n if (agents.length === 0) {\n console.log('No agents found.');\n return;\n }\n for (const id of agents) {\n console.log(`- ${id}`);\n }\n } catch (err) {\n handleError('list agents', err);\n }\n });\n\nagentsCmd\n .command('add <id>')\n .description('Create a new agent')\n .option('-d, --directory <dir>', 'Working directory for the agent')\n .option('-t, --template <name>', 'Template to use for the agent')\n .option(\n '-e, --env <env...>',\n 'Environment variables in KEY=VALUE format (can be specified multiple times)'\n )\n .action(\n async (id: string, options: { directory?: string; template?: string; env?: string[] }) => {\n try {\n assertValidAgentId(id);\n const existing = await getAgent(id);\n if (existing) {\n throw new Error(`Agent ${id} already exists.`);\n }\n\n const agentData: Agent = {};\n\n if (options.directory) {\n agentData.directory = options.directory;\n }\n const env = parseEnv(options.env);\n if (env) {\n agentData.env = { ...(agentData.env || {}), ...env };\n }\n\n await createAgentWithChat(id, agentData, options.template);\n\n console.log(`Agent ${id} created successfully.`);\n } catch (err) {\n handleError('create agent', err);\n }\n }\n );\n\nagentsCmd\n .command('update <id>')\n .description('Update an existing agent')\n .option('-d, --directory <dir>', 'Working directory for the agent')\n .option(\n '-e, --env <env...>',\n 'Environment variables in KEY=VALUE format (can be specified multiple times)'\n )\n .action(async (id: string, options: { directory?: string; env?: string[] }) => {\n try {\n assertValidAgentId(id);\n const existing = await getAgent(id);\n if (!existing) {\n throw new Error(`Agent ${id} does not exist.`);\n }\n\n const agentData: Agent = { ...existing };\n\n if (options.directory !== undefined) {\n agentData.directory = options.directory;\n }\n\n const env = parseEnv(options.env);\n if (env) {\n agentData.env = { ...(agentData.env || {}), ...env };\n }\n\n await writeAgentSettings(id, agentData);\n console.log(`Agent ${id} updated successfully.`);\n } catch (err) {\n handleError('update agent', err);\n }\n });\n\nagentsCmd\n .command('delete <id>')\n .description('Remove an agent')\n .action(async (id: string) => {\n try {\n assertValidAgentId(id);\n const existing = await getAgent(id);\n if (!existing) {\n throw new Error(`Agent ${id} does not exist.`);\n }\n\n await deleteAgent(id);\n console.log(`Agent ${id} deleted successfully.`);\n } catch (err) {\n handleError('delete agent', err);\n }\n });\n","import { Command } from 'commander';\nimport { getDaemonClient } from '../client.js';\nimport { getSocketPath } from '../../shared/workspace.js';\nimport fs from 'node:fs';\n\nexport const downCmd = new Command('down')\n .description('Stop the local clawmini daemon server')\n .action(async () => {\n try {\n const client = await getDaemonClient({ autoStart: false });\n process.stdout.write('Shutting down clawmini daemon...');\n await client.shutdown.mutate();\n\n const socketPath = getSocketPath();\n // Wait for the socket file to be removed by the daemon's exit handler\n while (fs.existsSync(socketPath)) {\n await new Promise((resolve) => setTimeout(resolve, 200));\n process.stdout.write('.');\n }\n console.log('\\nSuccessfully shut down clawmini daemon.');\n } catch (err: unknown) {\n if (err instanceof Error && err.message === 'Daemon not running.') {\n console.log('Daemon is not running.');\n } else {\n console.error(\n '\\nFailed to shut down daemon:',\n err instanceof Error ? err.message : String(err)\n );\n process.exit(1);\n }\n }\n });\n","import { Command } from 'commander';\nimport { getDaemonClient } from '../client.js';\nimport { getSocketPath } from '../../shared/workspace.js';\nimport fs from 'node:fs';\n\nexport const upCmd = new Command('up')\n .description('Start the local clawmini daemon server')\n .action(async () => {\n try {\n const socketPath = getSocketPath();\n const wasRunning = fs.existsSync(socketPath);\n\n const client = await getDaemonClient({ autoStart: true });\n // Perform a ping to ensure the server is responding\n await client.ping.query();\n\n if (wasRunning) {\n console.log('Daemon is already running.');\n } else {\n console.log('Successfully started clawmini daemon.');\n }\n } catch (err: unknown) {\n console.error('Failed to start daemon:', err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n });\n","import http from 'node:http';\nimport { type ZodType } from 'zod';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function parseJsonBody<T = any>(\n req: http.IncomingMessage,\n schema?: ZodType<T>\n): Promise<T> {\n if (req.headers['content-type'] !== 'application/json') {\n throw new Error('Invalid Content-Type');\n }\n let bodyStr = '';\n for await (const chunk of req) {\n bodyStr += chunk;\n }\n const rawBody = JSON.parse(bodyStr);\n if (schema) {\n return schema.parse(rawBody);\n }\n return rawBody as T;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function sendJsonResponse(res: http.ServerResponse, statusCode: number, data: any) {\n res.writeHead(statusCode, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(data));\n}\n","import http from 'node:http';\nimport { z } from 'zod';\nimport {\n listAgents,\n getAgent,\n writeAgentSettings,\n deleteAgent,\n isValidAgentId,\n} from '../../../shared/workspace.js';\nimport { parseJsonBody, sendJsonResponse } from './utils.js';\n\nexport async function handleApiAgents(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n urlPath: string\n) {\n if (req.method === 'GET' && urlPath === '/api/agents') {\n const agentIds = await listAgents();\n const agents = [];\n for (const id of agentIds) {\n try {\n const agent = await getAgent(id);\n if (agent) {\n agents.push({ id, ...agent });\n }\n } catch (err: unknown) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n console.error(`Failed to load agent ${id}: ${errorMessage}`);\n agents.push({ id, error: errorMessage });\n }\n }\n sendJsonResponse(res, 200, agents);\n return true;\n }\n\n if (req.method === 'POST' && urlPath === '/api/agents') {\n try {\n const schema = z.object({\n id: z.string().refine(isValidAgentId, { message: 'Invalid agent ID' }),\n directory: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n commands: z.record(z.string(), z.string()).optional(),\n });\n\n const body = await parseJsonBody(req, schema);\n\n const existing = await getAgent(body.id);\n if (existing) {\n sendJsonResponse(res, 409, { error: 'Agent already exists' });\n return true;\n }\n\n const newAgent = {\n directory: body.directory,\n env: body.env || {},\n commands: body.commands || {},\n };\n\n try {\n await writeAgentSettings(body.id, newAgent);\n } catch (err) {\n sendJsonResponse(res, 400, {\n error: err instanceof Error ? err.message : 'Invalid agent directory',\n });\n return true;\n }\n\n sendJsonResponse(res, 201, { id: body.id, ...newAgent });\n } catch {\n sendJsonResponse(res, 500, { error: 'Failed to create agent' });\n }\n return true;\n }\n\n const agentMatch = urlPath.match(/^\\/api\\/agents\\/([^/]+)$/);\n if (agentMatch && agentMatch[1]) {\n const agentId = agentMatch[1];\n\n if (!isValidAgentId(agentId)) {\n sendJsonResponse(res, 400, { error: 'Invalid agent ID' });\n return true;\n }\n\n if (req.method === 'GET') {\n try {\n const agent = await getAgent(agentId);\n if (!agent) {\n sendJsonResponse(res, 404, { error: 'Agent not found' });\n return true;\n }\n sendJsonResponse(res, 200, { id: agentId, ...agent });\n } catch (err: unknown) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n sendJsonResponse(res, 500, { error: errorMessage });\n }\n return true;\n }\n\n if (req.method === 'PUT' || req.method === 'POST') {\n try {\n const schema = z.object({\n directory: z.string().optional(),\n env: z.record(z.string(), z.string()).optional(),\n commands: z.record(z.string(), z.string()).optional(),\n });\n\n const body = await parseJsonBody(req, schema);\n\n const agent = (await getAgent(agentId)) || {};\n if (body.directory !== undefined) agent.directory = body.directory;\n if (body.env !== undefined) agent.env = body.env;\n if (body.commands !== undefined) agent.commands = body.commands;\n\n try {\n await writeAgentSettings(agentId, agent);\n } catch (err) {\n sendJsonResponse(res, 400, {\n error: err instanceof Error ? err.message : 'Invalid agent directory',\n });\n return true;\n }\n\n sendJsonResponse(res, 200, { id: agentId, ...agent });\n } catch {\n sendJsonResponse(res, 500, { error: 'Failed to update agent' });\n }\n return true;\n }\n\n if (req.method === 'DELETE') {\n await deleteAgent(agentId);\n sendJsonResponse(res, 200, { success: true });\n return true;\n }\n }\n\n return false;\n}\n","import http from 'node:http';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { z } from 'zod';\nimport {\n listChats,\n getMessages,\n getChatsDir,\n createChat,\n isValidChatId,\n} from '../../../shared/chats.js';\nimport { writeChatSettings } from '../../../shared/workspace.js';\nimport { getDaemonClient } from '../../client.js';\nimport { parseJsonBody, sendJsonResponse } from './utils.js';\n\nexport async function handleApiChats(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n urlPath: string\n) {\n if (req.method === 'GET' && urlPath === '/api/chats') {\n const chats = await listChats();\n sendJsonResponse(res, 200, chats);\n return true;\n }\n\n if (req.method === 'POST' && urlPath === '/api/chats') {\n try {\n const schema = z.object({\n id: z.string().refine(isValidChatId, {\n message: 'Invalid chat ID. Must be alphanumeric with dashes or underscores.',\n }),\n agent: z.string().optional(),\n });\n\n const body = await parseJsonBody(req, schema);\n\n await createChat(body.id);\n if (body.agent) {\n await writeChatSettings(body.id, { defaultAgent: body.agent });\n }\n sendJsonResponse(res, 201, { id: body.id, agent: body.agent });\n } catch {\n sendJsonResponse(res, 500, { error: 'Failed to create chat' });\n }\n return true;\n }\n\n const chatMatch = urlPath.match(/^\\/api\\/chats\\/([^/]+)$/);\n if (req.method === 'GET' && chatMatch && chatMatch[1]) {\n const chatId = chatMatch[1];\n try {\n const url = new URL(req.url || '', `http://${req.headers.host}`);\n const since = url.searchParams.get('since');\n\n let messages = await getMessages(chatId);\n\n if (since) {\n const sinceIndex = messages.findIndex((m) => m.id === since);\n if (sinceIndex !== -1) {\n messages = messages.slice(sinceIndex + 1);\n }\n }\n\n sendJsonResponse(res, 200, messages);\n } catch {\n sendJsonResponse(res, 404, { error: 'Chat not found' });\n }\n return true;\n }\n\n const streamMatch = urlPath.match(/^\\/api\\/chats\\/([^/]+)\\/stream$/);\n if (req.method === 'GET' && streamMatch && streamMatch[1]) {\n const chatId = streamMatch[1];\n\n res.setHeader('Content-Type', 'text/event-stream');\n res.setHeader('Cache-Control', 'no-cache');\n res.setHeader('Connection', 'keep-alive');\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.flushHeaders();\n\n const chatsDir = await getChatsDir();\n const chatFile = path.join(chatsDir, chatId, 'chat.jsonl');\n\n if (!fs.existsSync(chatFile)) {\n await createChat(chatId);\n }\n\n let currentSize = fs.statSync(chatFile).size;\n\n const watcher = fs.watch(chatFile, (eventType) => {\n if (eventType === 'change') {\n try {\n const stat = fs.statSync(chatFile);\n if (stat.size > currentSize) {\n const stream = fs.createReadStream(chatFile, {\n start: currentSize,\n end: stat.size - 1,\n });\n currentSize = stat.size;\n\n let buffer = '';\n stream.on('data', (chunk) => {\n buffer += chunk.toString();\n const parts = buffer.split('\\n');\n buffer = parts.pop() || '';\n for (const line of parts) {\n if (line.trim()) {\n res.write(`data: ${line}\\n\\n`);\n }\n }\n });\n stream.on('end', () => {\n if (buffer.trim()) {\n res.write(`data: ${buffer}\\n\\n`);\n }\n });\n }\n } catch {\n // File might be temporarily inaccessible\n }\n }\n });\n\n req.on('close', () => {\n watcher.close();\n });\n\n // Send an initial ping to establish connection\n res.write(': connected\\n\\n');\n return true;\n }\n\n const messageMatch = urlPath.match(/^\\/api\\/chats\\/([^/]+)\\/messages$/);\n if (req.method === 'POST' && messageMatch && messageMatch[1]) {\n const chatId = messageMatch[1];\n\n const schema = z.object({\n message: z.string().min(1, 'Missing or invalid \"message\" field'),\n });\n\n let body;\n try {\n body = await parseJsonBody(req, schema);\n } catch (err) {\n sendJsonResponse(res, 400, {\n error: err instanceof Error ? err.message : 'Invalid request',\n });\n return true;\n }\n\n try {\n const client = await getDaemonClient();\n await client.sendMessage.mutate({\n type: 'send-message',\n client: 'cli',\n data: {\n message: body.message,\n chatId,\n noWait: true,\n },\n });\n sendJsonResponse(res, 200, { success: true });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n sendJsonResponse(res, 500, { error: errorMessage || 'Internal Server Error' });\n }\n return true;\n }\n\n const cronMatch = urlPath.match(/^\\/api\\/chats\\/([^/]+)\\/cron(?:\\/([^/]+))?$/);\n if (cronMatch && cronMatch[1]) {\n const chatId = cronMatch[1];\n const jobId = cronMatch[2]; // undefined if not present\n\n if (req.method === 'GET') {\n try {\n const client = await getDaemonClient();\n const jobs = await client.listCronJobs.query({ chatId });\n sendJsonResponse(res, 200, jobs);\n } catch {\n sendJsonResponse(res, 500, { error: 'Failed to list cron jobs' });\n }\n return true;\n }\n\n if (req.method === 'POST') {\n try {\n const client = await getDaemonClient();\n const body = await parseJsonBody(req);\n await client.addCronJob.mutate({ chatId, job: body });\n sendJsonResponse(res, 201, { success: true });\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : 'Unknown error';\n sendJsonResponse(res, 500, { error: errorMessage || 'Failed to add cron job' });\n }\n return true;\n }\n\n if (req.method === 'DELETE' && jobId) {\n try {\n const client = await getDaemonClient();\n await client.deleteCronJob.mutate({ chatId, id: jobId });\n sendJsonResponse(res, 200, { success: true });\n } catch {\n sendJsonResponse(res, 500, { error: 'Failed to delete cron job' });\n }\n return true;\n }\n }\n\n return false;\n}\n","import { Command } from 'commander';\nimport http from 'node:http';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport { pathIsInsideDir } from '../../shared/utils/fs.js';\nimport { sendJsonResponse } from './web-api/utils.js';\nimport { handleApiAgents } from './web-api/agents.js';\nimport { handleApiChats } from './web-api/chats.js';\n\nconst mimeTypes: Record<string, string> = {\n '.html': 'text/html',\n '.js': 'text/javascript',\n '.mjs': 'text/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.png': 'image/png',\n '.jpg': 'image/jpeg',\n '.gif': 'image/gif',\n '.svg': 'image/svg+xml',\n '.ico': 'image/x-icon',\n '.woff': 'font/woff',\n '.woff2': 'font/woff2',\n};\n\nexport const webCmd = new Command('web')\n .description('Start the local clawmini web interface')\n .option('-p, --port <number>', 'Port to bind the server to', '8080')\n .option('-H, --host <string>', 'Host to bind the server to', '127.0.0.1')\n .action((options) => {\n const port = parseInt(options.port, 10);\n if (isNaN(port)) {\n console.error('Invalid port number.');\n process.exit(1);\n }\n\n // When bundled into dist/cli/index.mjs, import.meta.url resolves to that file.\n // So __dirname will be dist/cli, and webDir will be dist/web.\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const webDir = path.resolve(__dirname, '../web');\n\n const server = http.createServer(async (req, res) => {\n try {\n const urlPath = req.url === '/' ? '/index.html' : req.url?.split('?')[0] || '/';\n\n // API Routes\n if (urlPath.startsWith('/api/')) {\n res.setHeader('Content-Type', 'application/json');\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n if (urlPath.startsWith('/api/agents') && (await handleApiAgents(req, res, urlPath)))\n return;\n if (urlPath.startsWith('/api/chats') && (await handleApiChats(req, res, urlPath))) return;\n\n sendJsonResponse(res, 404, { error: 'Not Found' });\n return;\n }\n\n // Static Files\n let filePath = path.join(webDir, urlPath);\n\n // Prevent directory traversal\n if (!pathIsInsideDir(filePath, webDir)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n // SPA fallback to index.html\n filePath = path.join(webDir, 'index.html');\n if (!fs.existsSync(filePath)) {\n res.writeHead(404);\n res.end('Not Found');\n return;\n }\n }\n\n const extname = path.extname(filePath).toLowerCase();\n const contentType = mimeTypes[extname] || 'application/octet-stream';\n\n res.writeHead(200, { 'Content-Type': contentType });\n const readStream = fs.createReadStream(filePath);\n readStream.pipe(res);\n } catch (err) {\n console.error('Error serving request:', err);\n res.writeHead(500);\n res.end('Internal Server Error');\n }\n });\n\n server.listen(port, options.host, () => {\n console.log(`Clawmini web interface running at http://${options.host}:${port}/`);\n });\n });\n","import { Command } from 'commander';\nimport { getDaemonClient } from '../client.js';\nimport type { CronJob } from '../../shared/config.js';\n\nexport const jobsCmd = new Command('jobs').description('Manage background jobs');\n\nfunction parseKeyValueArray(arr: string[] | undefined): Record<string, string> | undefined {\n if (!arr || arr.length === 0) return undefined;\n const result: Record<string, string> = {};\n for (const item of arr) {\n const [key, ...rest] = item.split('=');\n if (key && rest.length >= 0) {\n result[key] = rest.join('=');\n }\n }\n return result;\n}\n\nfunction handleError(action: string, err: unknown): never {\n console.error(`Failed to ${action}:`, err instanceof Error ? err.message : String(err));\n process.exit(1);\n}\n\njobsCmd\n .command('list')\n .description('Display existing jobs')\n .option('-c, --chat <id>', 'Specific chat to list jobs from')\n .option('--json', 'Output full JSON for each job')\n .action(async (options) => {\n try {\n const trpc = await getDaemonClient();\n let jobs = await trpc.listCronJobs.query({ chatId: options.chat });\n\n jobs = jobs.sort((a, b) => {\n const timeA = a.createdAt ? new Date(a.createdAt).getTime() : 0;\n const timeB = b.createdAt ? new Date(b.createdAt).getTime() : 0;\n return timeA - timeB;\n });\n\n if (options.json) {\n console.log(JSON.stringify(jobs, null, 2));\n return;\n }\n\n if (jobs.length === 0) {\n console.log('No jobs found.');\n return;\n }\n for (const job of jobs) {\n let schedule = '';\n if ('cron' in job.schedule) schedule = `cron: ${job.schedule.cron}`;\n else if ('every' in job.schedule) schedule = `every: ${job.schedule.every}`;\n else if ('at' in job.schedule) schedule = `at: ${job.schedule.at}`;\n\n console.log(`- ${job.id} (${schedule})`);\n }\n } catch (err) {\n handleError('list jobs', err);\n }\n });\n\njobsCmd\n .command('add <name>')\n .description('Create a new job')\n .option('-m, --message <text>', 'The message to send', '')\n .option('-r, --reply <text>', 'An immediate reply to append')\n .option(\n '--at <time-or-interval>',\n 'Execute once at this UTC time or after an interval (e.g., 2m, 4h)'\n )\n .option('--every <duration>', 'Execute repeatedly at this interval (e.g., 20m, 4h)')\n .option('--cron <expression>', 'Execute according to the crontab expression')\n .option('-a, --agent <agentid>', 'Agent to use')\n .option(\n '-e, --env <env...>',\n 'Environment variables in KEY=VALUE format (can be specified multiple times)'\n )\n .option('-s, --session <type>', 'Session type (e.g. new)')\n .option('-c, --chat <chatid>', 'Specify the chat')\n .action(async (name, options) => {\n try {\n const schedules = [options.at, options.every, options.cron].filter(Boolean);\n if (schedules.length > 1) {\n throw new Error(\n 'More than one schedule flag was set. Please use only one of --at, --every, or --cron.'\n );\n }\n if (schedules.length === 0) {\n throw new Error('A schedule must be specified (--at, --every, or --cron).');\n }\n\n let schedule: CronJob['schedule'];\n if (options.at) schedule = { at: options.at };\n else if (options.every) schedule = { every: options.every };\n else schedule = { cron: options.cron };\n\n const job: CronJob = {\n id: name,\n createdAt: new Date().toISOString(),\n message: options.message,\n schedule,\n };\n\n if (options.reply) job.reply = options.reply;\n if (options.agent) job.agentId = options.agent;\n\n const env = parseKeyValueArray(options.env);\n if (env) job.env = env;\n\n if (options.session) {\n if (options.session !== 'new') {\n throw new Error('Only the \"new\" session type is supported.');\n }\n job.session = { type: options.session };\n }\n\n const trpc = await getDaemonClient();\n await trpc.addCronJob.mutate({ chatId: options.chat, job });\n console.log(`Job '${name}' created successfully.`);\n } catch (err) {\n handleError('create job', err);\n }\n });\n\njobsCmd\n .command('delete <name>')\n .description('Remove a job')\n .option('-c, --chat <chatid>', 'Specify the chat')\n .action(async (name, options) => {\n try {\n const trpc = await getDaemonClient();\n const result = await trpc.deleteCronJob.mutate({ chatId: options.chat, id: name });\n if (result.deleted) {\n console.log(`Job '${name}' deleted successfully.`);\n } else {\n console.log(`Job '${name}' not found.`);\n }\n } catch (err) {\n handleError('delete job', err);\n }\n });\n","import { Command } from 'commander';\nimport path from 'node:path';\nimport {\n getLiteScriptContent,\n writeLiteScript,\n exportLiteToAllEnvironments,\n} from '../../shared/lite.js';\n\nexport const exportLiteCmd = new Command('export-lite')\n .description('Export the standalone clawmini-lite client script')\n .option(\n '-o, --out <path>',\n 'Output path or directory for the script (defaults to current directory)'\n )\n .option('--stdout', 'Output the script to stdout instead of a file')\n .action(async (options: { out?: string; stdout?: boolean }) => {\n let liteScriptContent = '';\n try {\n liteScriptContent = await getLiteScriptContent();\n } catch (err) {\n console.error(\n `Failed to read compiled clawmini-lite script. Ensure you have built the project (npm run build). Error: ${err instanceof Error ? err.message : String(err)}`\n );\n process.exit(1);\n }\n\n if (options.stdout) {\n process.stdout.write(liteScriptContent);\n return;\n }\n\n const defaultFilename = 'clawmini-lite.js';\n let finalPath = path.resolve(process.cwd(), defaultFilename);\n\n if (options.out) {\n finalPath = path.resolve(process.cwd(), options.out);\n try {\n const writtenPath = await writeLiteScript(finalPath);\n console.log(`Successfully exported clawmini-lite to ${writtenPath}`);\n } catch (err) {\n console.error(\n `Failed to export script: ${err instanceof Error ? err.message : String(err)}`\n );\n process.exit(1);\n }\n return;\n }\n\n const exportedToEnvironments = await exportLiteToAllEnvironments(process.cwd());\n\n if (!exportedToEnvironments) {\n try {\n const writtenPath = await writeLiteScript(finalPath);\n console.log(`Successfully exported clawmini-lite to ${writtenPath}`);\n } catch (err) {\n console.error(\n `Failed to export script: ${err instanceof Error ? err.message : String(err)}`\n );\n process.exit(1);\n }\n }\n });\n","import { Command } from 'commander';\nimport { readSettings, writeSettings, enableEnvironment } from '../../shared/workspace.js';\nimport { handleError } from '../utils.js';\n\nexport const environmentsCmd = new Command('environments').description('Manage environments');\n\nenvironmentsCmd\n .command('enable <name>')\n .description('Enable an environment for a path in the workspace')\n .option('-p, --path <subpath>', 'Path to apply the environment to', './')\n .action(async (name: string, options: { path: string }) => {\n try {\n await enableEnvironment(name, options.path);\n } catch (err) {\n handleError('enable environment', err);\n }\n });\n\nenvironmentsCmd\n .command('disable')\n .description('Disable an environment mapping')\n .option('-p, --path <subpath>', 'Path to remove the environment from', './')\n .action(async (options: { path: string }) => {\n try {\n const settings = await readSettings();\n if (!settings?.environments || !settings.environments[options.path]) {\n console.log(`No environment mapping found for path '${options.path}'.`);\n return;\n }\n\n const name = settings.environments[options.path];\n delete settings.environments[options.path];\n await writeSettings(settings);\n\n console.log(`Disabled environment '${name}' for path '${options.path}'.`);\n } catch (err) {\n handleError('disable environment', err);\n }\n });\n","#!/usr/bin/env node\nimport { Command } from 'commander';\nimport { initCmd } from './commands/init.js';\nimport { messagesCmd } from './commands/messages.js';\nimport { chatsCmd } from './commands/chats.js';\nimport { agentsCmd } from './commands/agents.js';\nimport { downCmd } from './commands/down.js';\nimport { upCmd } from './commands/up.js';\nimport { webCmd } from './commands/web.js';\nimport { jobsCmd } from './commands/jobs.js';\nimport { exportLiteCmd } from './commands/export-lite.js';\nimport { environmentsCmd } from './commands/environments.js';\n\nconst program = new Command();\n\nprogram.name('clawmini').description('Clawmini CLI').version('0.0.1');\n\nprogram.addCommand(initCmd);\nprogram.addCommand(messagesCmd);\nprogram.addCommand(chatsCmd);\nprogram.addCommand(agentsCmd);\nprogram.addCommand(environmentsCmd);\nprogram.addCommand(downCmd);\nprogram.addCommand(upCmd);\nprogram.addCommand(webCmd);\nprogram.addCommand(jobsCmd);\nprogram.addCommand(exportLiteCmd);\n\nprogram.parse();\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|