cli-claw-kit 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/LICENSE +21 -0
- package/README.md +245 -0
- package/config/default-groups.json +1 -0
- package/config/global-agents-md.template.md +37 -0
- package/config/mount-allowlist.json +11 -0
- package/container/Dockerfile +160 -0
- package/container/agent-runner/dist/.tsbuildinfo +1 -0
- package/container/agent-runner/dist/agent-definitions.js +22 -0
- package/container/agent-runner/dist/channel-prefixes.js +16 -0
- package/container/agent-runner/dist/codex-config.js +29 -0
- package/container/agent-runner/dist/image-detector.js +96 -0
- package/container/agent-runner/dist/index.js +2587 -0
- package/container/agent-runner/dist/mcp-tools.js +1076 -0
- package/container/agent-runner/dist/stream-event.types.js +5 -0
- package/container/agent-runner/dist/stream-processor.js +867 -0
- package/container/agent-runner/dist/types.js +6 -0
- package/container/agent-runner/dist/utils.js +115 -0
- package/container/agent-runner/package.json +36 -0
- package/container/agent-runner/prompts/security-rules.md +31 -0
- package/container/agent-runner/src/agent-definitions.ts +27 -0
- package/container/agent-runner/src/channel-prefixes.ts +16 -0
- package/container/agent-runner/src/codex-config.ts +40 -0
- package/container/agent-runner/src/image-detector.ts +116 -0
- package/container/agent-runner/src/index.ts +3107 -0
- package/container/agent-runner/src/mcp-tools.ts +1295 -0
- package/container/agent-runner/src/stream-event.types.ts +10 -0
- package/container/agent-runner/src/stream-processor.ts +932 -0
- package/container/agent-runner/src/types.ts +75 -0
- package/container/agent-runner/src/utils.ts +114 -0
- package/container/agent-runner/tsconfig.json +17 -0
- package/container/build.sh +28 -0
- package/container/entrypoint.sh +64 -0
- package/container/skills/agent-browser/SKILL.md +159 -0
- package/container/skills/install-skill/SKILL.md +64 -0
- package/container/skills/post-test-cleanup/SKILL.md +121 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/agent-output-parser.js +459 -0
- package/dist/app-root.js +52 -0
- package/dist/assistant-meta-footer.js +1 -0
- package/dist/auth.js +91 -0
- package/dist/billing.js +694 -0
- package/dist/channel-prefixes.js +16 -0
- package/dist/cli.js +86 -0
- package/dist/commands.js +79 -0
- package/dist/config.js +120 -0
- package/dist/container-runner.js +981 -0
- package/dist/daily-summary.js +210 -0
- package/dist/db.js +3683 -0
- package/dist/dingtalk.js +1347 -0
- package/dist/feishu-markdown-style.js +97 -0
- package/dist/feishu-streaming-card.js +1875 -0
- package/dist/feishu.js +1628 -0
- package/dist/file-manager.js +270 -0
- package/dist/group-queue.js +1070 -0
- package/dist/group-runtime.js +35 -0
- package/dist/host-workspace-cwd.js +85 -0
- package/dist/im-channel.js +384 -0
- package/dist/im-command-utils.js +142 -0
- package/dist/im-downloader.js +45 -0
- package/dist/im-manager.js +527 -0
- package/dist/im-utils.js +53 -0
- package/dist/image-detector.js +96 -0
- package/dist/index.js +5828 -0
- package/dist/logger.js +22 -0
- package/dist/mcp-utils.js +66 -0
- package/dist/message-attachments.js +69 -0
- package/dist/message-notifier.js +36 -0
- package/dist/middleware/auth.js +85 -0
- package/dist/mount-security.js +315 -0
- package/dist/permissions.js +67 -0
- package/dist/project-memory.js +6 -0
- package/dist/provider-pool.js +189 -0
- package/dist/qq.js +826 -0
- package/dist/reset-admin.js +42 -0
- package/dist/routes/admin.js +543 -0
- package/dist/routes/agent-definitions.js +241 -0
- package/dist/routes/agents.js +533 -0
- package/dist/routes/auth.js +675 -0
- package/dist/routes/billing.js +490 -0
- package/dist/routes/browse.js +210 -0
- package/dist/routes/bug-report.js +387 -0
- package/dist/routes/config.js +1868 -0
- package/dist/routes/files.js +671 -0
- package/dist/routes/groups.js +1367 -0
- package/dist/routes/mcp-servers.js +320 -0
- package/dist/routes/memory.js +523 -0
- package/dist/routes/monitor.js +307 -0
- package/dist/routes/skills.js +777 -0
- package/dist/routes/tasks.js +509 -0
- package/dist/routes/usage.js +64 -0
- package/dist/routes/workspace-config.js +458 -0
- package/dist/runtime-build.js +112 -0
- package/dist/runtime-command-handler.js +189 -0
- package/dist/runtime-command-registry.js +1 -0
- package/dist/runtime-config.js +1777 -0
- package/dist/runtime-identity.js +52 -0
- package/dist/schemas.js +590 -0
- package/dist/script-runner.js +64 -0
- package/dist/sdk-query.js +82 -0
- package/dist/skill-utils.js +145 -0
- package/dist/sqlite-compat.js +19 -0
- package/dist/stream-event.types.js +5 -0
- package/dist/streaming-runtime-meta.js +29 -0
- package/dist/task-scheduler.js +695 -0
- package/dist/task-utils.js +13 -0
- package/dist/telegram-pairing.js +59 -0
- package/dist/telegram.js +897 -0
- package/dist/terminal-manager.js +307 -0
- package/dist/tool-step-display.js +1 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +85 -0
- package/dist/web-context.js +161 -0
- package/dist/web.js +1377 -0
- package/dist/wechat-crypto.js +182 -0
- package/dist/wechat.js +589 -0
- package/dist/workspace-runtime-reset.js +35 -0
- package/package.json +107 -0
- package/shared/assistant-meta-footer.ts +127 -0
- package/shared/channel-prefixes.ts +16 -0
- package/shared/dist/assistant-meta-footer.d.ts +29 -0
- package/shared/dist/assistant-meta-footer.js +85 -0
- package/shared/dist/channel-prefixes.d.ts +4 -0
- package/shared/dist/channel-prefixes.js +16 -0
- package/shared/dist/image-detector.d.ts +20 -0
- package/shared/dist/image-detector.js +96 -0
- package/shared/dist/runtime-command-registry.d.ts +38 -0
- package/shared/dist/runtime-command-registry.js +185 -0
- package/shared/dist/stream-event.d.ts +65 -0
- package/shared/dist/stream-event.js +8 -0
- package/shared/dist/tool-step-display.d.ts +4 -0
- package/shared/dist/tool-step-display.js +11 -0
- package/shared/image-detector.ts +116 -0
- package/shared/runtime-command-registry.ts +252 -0
- package/shared/stream-event.ts +67 -0
- package/shared/tool-step-display.ts +21 -0
- package/shared/tsconfig.json +24 -0
- package/web/dist/assets/BillingPage-B1wBR_o-.js +52 -0
- package/web/dist/assets/ChatPage-6GBZ9nXN.css +32 -0
- package/web/dist/assets/ChatPage-BOJcXtaj.js +161 -0
- package/web/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web/dist/assets/SettingsPage-DoY7FoZ_.js +153 -0
- package/web/dist/assets/ShareImageDialog-C1ga8b7l.js +22 -0
- package/web/dist/assets/TasksPage-CRivnNsx.js +14 -0
- package/web/dist/assets/_basePickBy-Bf-bSoS9.js +1 -0
- package/web/dist/assets/_baseUniq-zAOaCuKw.js +1 -0
- package/web/dist/assets/arc-Dm9mVQ9U.js +1 -0
- package/web/dist/assets/architectureDiagram-2XIMDMQ5-BLmzX1wr.js +36 -0
- package/web/dist/assets/band-CquvqAHh.js +1 -0
- package/web/dist/assets/blockDiagram-WCTKOSBZ-B9pcqm3j.js +132 -0
- package/web/dist/assets/c4Diagram-IC4MRINW-Cytx1q3b.js +10 -0
- package/web/dist/assets/channel-BOVj73LR.js +1 -0
- package/web/dist/assets/channel-meta-CQD0Pei-.js +41 -0
- package/web/dist/assets/chunk-4BX2VUAB-0ToDr6RE.js +1 -0
- package/web/dist/assets/chunk-55IACEB6-DQDjnXfS.js +1 -0
- package/web/dist/assets/chunk-FMBD7UC4-Di8ABm6c.js +15 -0
- package/web/dist/assets/chunk-JSJVCQXG-BZQN6rnX.js +1 -0
- package/web/dist/assets/chunk-KX2RTZJC-zBbcpaN_.js +1 -0
- package/web/dist/assets/chunk-NQ4KR5QH-BCrLoU88.js +220 -0
- package/web/dist/assets/chunk-QZHKN3VN-Bqk8juan.js +1 -0
- package/web/dist/assets/chunk-WL4C6EOR-D2YX-MHY.js +189 -0
- package/web/dist/assets/classDiagram-VBA2DB6C-DUUoMyaK.js +1 -0
- package/web/dist/assets/classDiagram-v2-RAHNMMFH-DUUoMyaK.js +1 -0
- package/web/dist/assets/clone-BmaCesfa.js +1 -0
- package/web/dist/assets/cose-bilkent-S5V4N54A-CTsv6qQA.js +1 -0
- package/web/dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
- package/web/dist/assets/dagre-KLK3FWXG-Ci4Jh9nu.js +4 -0
- package/web/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/web/dist/assets/diagram-E7M64L7V-BFRnfTI2.js +24 -0
- package/web/dist/assets/diagram-IFDJBPK2-B7Zhnp0b.js +43 -0
- package/web/dist/assets/diagram-P4PSJMXO-BVyP7nwq.js +24 -0
- package/web/dist/assets/erDiagram-INFDFZHY-NorKdTOF.js +70 -0
- package/web/dist/assets/error-CGD5mp5f.js +1 -0
- package/web/dist/assets/flowDiagram-PKNHOUZH-Ch97nABF.js +162 -0
- package/web/dist/assets/ganttDiagram-A5KZAMGK-BQ2pLWsy.js +292 -0
- package/web/dist/assets/gitGraphDiagram-K3NZZRJ6-bcvnBsD2.js +65 -0
- package/web/dist/assets/graph-CeAEckur.js +1 -0
- package/web/dist/assets/index-CPnL1_qC.js +768 -0
- package/web/dist/assets/index-DVevCbcO.css +10 -0
- package/web/dist/assets/infoDiagram-LFFYTUFH-CcsrFdj-.js +2 -0
- package/web/dist/assets/init-Dmth1JHB.js +1 -0
- package/web/dist/assets/ishikawaDiagram-PHBUUO56-1upyMfHN.js +70 -0
- package/web/dist/assets/journeyDiagram-4ABVD52K-CKUi-V0c.js +139 -0
- package/web/dist/assets/kanban-definition-K7BYSVSG-DOnQwXfL.js +89 -0
- package/web/dist/assets/layout-BmMMqTnJ.js +1 -0
- package/web/dist/assets/linear-DiaJloY5.js +1 -0
- package/web/dist/assets/mermaid.core-BWLV1B2v.js +254 -0
- package/web/dist/assets/mindmap-definition-YRQLILUH-BeAKHVWP.js +68 -0
- package/web/dist/assets/ordinal-DILIJJjt.js +1 -0
- package/web/dist/assets/pieDiagram-SKSYHLDU-DfiMSfWo.js +30 -0
- package/web/dist/assets/quadrantDiagram-337W2JSQ-wZxZOJxd.js +7 -0
- package/web/dist/assets/requirementDiagram-Z7DCOOCP-BK4HHm17.js +73 -0
- package/web/dist/assets/sankeyDiagram-WA2Y5GQK-BX6t2avX.js +10 -0
- package/web/dist/assets/sequenceDiagram-2WXFIKYE-BPQlkbAa.js +145 -0
- package/web/dist/assets/sheet-rI0FfB1g.js +6 -0
- package/web/dist/assets/sliders-horizontal-CuijWFNK.js +6 -0
- package/web/dist/assets/sparkles-BsMYXJoT.js +11 -0
- package/web/dist/assets/square-0CqMX1Q3.js +11 -0
- package/web/dist/assets/stateDiagram-RAJIS63D-DxkV0Vwd.js +1 -0
- package/web/dist/assets/stateDiagram-v2-FVOUBMTO-qLYoiOPe.js +1 -0
- package/web/dist/assets/step-D51IIHGA.js +1 -0
- package/web/dist/assets/tasks-D8JjBTwx.js +1 -0
- package/web/dist/assets/time-O8zIGux3.js +1 -0
- package/web/dist/assets/timeline-definition-YZTLITO2-kNp1DyFc.js +61 -0
- package/web/dist/assets/treemap-KZPCXAKY-CkrClVhk.js +162 -0
- package/web/dist/assets/utils-KGAn0XTg.js +11 -0
- package/web/dist/assets/vennDiagram-LZ73GAT5-CgdzEZz4.js +34 -0
- package/web/dist/assets/xychartDiagram-JWTSCODW-DfYGPfNB.js +7 -0
- package/web/dist/assets/zap-_hKJYy7J.js +6 -0
- package/web/dist/favicon.svg +332 -0
- package/web/dist/fonts/AlibabaPuHuiTi-3-55-Regular.woff2 +0 -0
- package/web/dist/fonts/AlibabaPuHuiTi-3-65-Medium.woff2 +0 -0
- package/web/dist/fonts/AlibabaPuHuiTi-3-75-SemiBold.woff2 +0 -0
- package/web/dist/fonts/DMSans-latin-ext.woff2 +0 -0
- package/web/dist/fonts/DMSans-latin.woff2 +0 -0
- package/web/dist/icons/README.md +20 -0
- package/web/dist/icons/apple-touch-icon-180.png +0 -0
- package/web/dist/icons/icon-128.png +0 -0
- package/web/dist/icons/icon-144.png +0 -0
- package/web/dist/icons/icon-152.png +0 -0
- package/web/dist/icons/icon-192.png +0 -0
- package/web/dist/icons/icon-192.svg +332 -0
- package/web/dist/icons/icon-384.png +0 -0
- package/web/dist/icons/icon-48.png +0 -0
- package/web/dist/icons/icon-512-maskable.png +0 -0
- package/web/dist/icons/icon-512.png +0 -0
- package/web/dist/icons/icon-512.svg +332 -0
- package/web/dist/icons/icon-72.png +0 -0
- package/web/dist/icons/icon-96.png +0 -0
- package/web/dist/icons/loading-logo.svg +332 -0
- package/web/dist/icons/logo-1024.png +0 -0
- package/web/dist/icons/logo-icon.svg +332 -0
- package/web/dist/icons/logo-text.svg +332 -0
- package/web/dist/index.html +30 -0
- package/web/dist/manifest.webmanifest +1 -0
- package/web/dist/registerSW.js +1 -0
- package/web/dist/sw.js +1 -0
- package/web/dist/workbox-08d6266a.js +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 riba2534
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="web/public/icons/logo-1024.png" alt="Cli Claw Logo" width="120" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Cli Claw</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
Powered By Any Agent CLI.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
自托管的多用户本地 AI Agent 系统。
|
|
13
|
+
</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
Inspired by <a href="https://github.com/riba2534/happyclaw">riba2534/happyclaw</a>.
|
|
17
|
+
</p>
|
|
18
|
+
|
|
19
|
+
<p align="center">
|
|
20
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-teal.svg?style=for-the-badge" alt="License" /></a>
|
|
21
|
+
<a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node.js-%3E%3D20-339933?style=for-the-badge&logo=nodedotjs&logoColor=white" alt="Node.js" /></a>
|
|
22
|
+
<img src="https://img.shields.io/badge/TypeScript-5.7-3178C6?style=for-the-badge&logo=typescript&logoColor=white" alt="TypeScript" />
|
|
23
|
+
<a href="https://github.com/RyanProMax/cli-claw/stargazers"><img src="https://img.shields.io/github/stars/RyanProMax/cli-claw?style=for-the-badge&color=f5a623" alt="GitHub Stars" /></a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<a href="#cli-claw-是什么">介绍</a> · <a href="#核心能力">核心能力</a> · <a href="#快速开始">快速开始</a> · <a href="#开发文档">开发文档</a> · <a href="#贡献">贡献</a>
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Cli Claw 是什么
|
|
33
|
+
|
|
34
|
+
Cli Claw 是一个自托管、多用户的 CLI Agent 平台。它不重新实现 Agent 内核,而是把成熟的 CLI Agent 运行时封装成统一服务,让你通过 Web 和 IM 入口访问同一套工作区、文件、任务和流式执行能力。
|
|
35
|
+
|
|
36
|
+
当前接入的运行时:
|
|
37
|
+
|
|
38
|
+
- `claude`:Claude Agent SDK + Claude Code CLI
|
|
39
|
+
- `codex`:Codex CLI + `codex-acp`
|
|
40
|
+
|
|
41
|
+
主进程负责多用户隔离、消息路由、队列调度、持久化和 Web / IM 体验;真正的推理、工具调用和会话循环由底层 CLI runtime 执行。
|
|
42
|
+
|
|
43
|
+
## 核心能力
|
|
44
|
+
|
|
45
|
+
- 多用户工作区:每个用户拥有隔离的工作区、权限、运行时设置和长期记忆。
|
|
46
|
+
- 多入口接入:通过 Web 与多种 IM 通道访问同一工作区,消息统一路由。
|
|
47
|
+
- 多运行时执行:同一平台内支持 Claude Runtime 与 Codex Runtime。
|
|
48
|
+
- 流式体验:思考、文本、工具调用、任务事件和结果实时回传。
|
|
49
|
+
- 文件与任务:工作区文件管理、定时任务、记忆文件和 MCP 能力统一接入。
|
|
50
|
+
- 移动端 PWA:适配手机访问、查看执行状态和继续会话。
|
|
51
|
+
|
|
52
|
+
### 运行时概览
|
|
53
|
+
|
|
54
|
+
| `agentType` | 底层运行时 | 支持执行模式 | 认证方式 |
|
|
55
|
+
| --- | --- | --- | --- |
|
|
56
|
+
| `claude` | Claude Agent SDK + Claude Code CLI | `host` / `container` | Web 设置向导配置 Claude Provider |
|
|
57
|
+
| `codex` | Codex CLI + `codex-acp` | `host` | 宿主机执行 `codex login` |
|
|
58
|
+
|
|
59
|
+
## 快速开始
|
|
60
|
+
|
|
61
|
+
### 前置要求
|
|
62
|
+
|
|
63
|
+
- [Node.js](https://nodejs.org) >= 20
|
|
64
|
+
- [Docker](https://www.docker.com/)(仅容器模式需要;当前主要用于 Claude Runtime)
|
|
65
|
+
- 至少准备一种运行时认证方式:
|
|
66
|
+
- Claude Runtime:在 Web 设置向导中配置 Claude Provider
|
|
67
|
+
- Codex Runtime:在宿主机执行 `codex login`
|
|
68
|
+
|
|
69
|
+
### 从 npm 安装
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm install -g cli-claw
|
|
73
|
+
cli-claw help
|
|
74
|
+
cli-claw version
|
|
75
|
+
cli-claw start
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
默认访问地址:`http://localhost:3000`
|
|
79
|
+
|
|
80
|
+
外部 launcher 说明:
|
|
81
|
+
|
|
82
|
+
- `cli-claw start` 启动服务。
|
|
83
|
+
- `cli-claw help` / `-h` / `--help` 查看 launcher 帮助。
|
|
84
|
+
- `cli-claw version` / `-v` / `--version` 查看已安装版本。
|
|
85
|
+
- 应用自身资源从安装包根目录解析,不依赖你启动时的当前目录。
|
|
86
|
+
- `cli-claw start` 会把“你启动命令时所在的目录”当作 host 工作区默认执行目录,并在缺失时物化到 `custom_cwd`。
|
|
87
|
+
- 数据库存储、sessions、memory、logs、downloads 和工作区元数据仍保留在 `~/.cli-claw`,不会迁到启动目录。
|
|
88
|
+
|
|
89
|
+
### 从源码启动
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
git clone https://github.com/RyanProMax/cli-claw.git cli-claw
|
|
93
|
+
cd cli-claw
|
|
94
|
+
make start
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
首次进入后按设置向导完成:
|
|
98
|
+
|
|
99
|
+
1. 创建管理员账号
|
|
100
|
+
2. 配置默认 Claude Provider(可选,但推荐先配)
|
|
101
|
+
3. 如需 Codex,在服务器执行 `codex login`
|
|
102
|
+
4. 如需 IM 通道,在 Web 设置页补充对应凭据
|
|
103
|
+
|
|
104
|
+
### 容器模式
|
|
105
|
+
|
|
106
|
+
如果需要容器模式,先构建镜像:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
./container/build.sh
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
这个命令是源码仓库相对路径,适用于 clone 后的开发 / 自建部署场景;不是在任意 launch cwd 下都可直接执行的全局命令。
|
|
113
|
+
|
|
114
|
+
member 用户注册后默认会创建容器模式的主工作区;admin 主工作区默认使用宿主机模式。
|
|
115
|
+
|
|
116
|
+
### 启动目录与数据目录
|
|
117
|
+
|
|
118
|
+
- host 工作区的默认执行 / 文件根目录来自 `cli-claw start` 的启动目录。
|
|
119
|
+
- 这个默认值会持久化到 `custom_cwd`,避免运行时依赖隐式内存 fallback。
|
|
120
|
+
- 工作区拥有的存储路径不变,仍以 `~/.cli-claw/groups/{folder}` 和 `~/.cli-claw/*` 下的数据为准。
|
|
121
|
+
|
|
122
|
+
### 常用命令
|
|
123
|
+
|
|
124
|
+
用户启动命令:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
cli-claw help
|
|
128
|
+
cli-claw version
|
|
129
|
+
cli-claw start
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
仓库开发命令:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
make dev
|
|
136
|
+
make build
|
|
137
|
+
make typecheck
|
|
138
|
+
make start
|
|
139
|
+
npm run release:check
|
|
140
|
+
./scripts/validate.sh
|
|
141
|
+
./scripts/review.sh
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 发布前检查
|
|
145
|
+
|
|
146
|
+
维护者在执行 `npm publish` 前,建议按这个顺序完成:
|
|
147
|
+
|
|
148
|
+
1. 先安装根仓库和子项目依赖:`make install`
|
|
149
|
+
2. 确认版本号已更新:`package.json` / `npm version <patch|minor|major>`
|
|
150
|
+
3. 确认 npm 身份与包权限可用:
|
|
151
|
+
- `npm whoami`
|
|
152
|
+
- 首次发布时确认 `cli-claw` 包名可用
|
|
153
|
+
- 后续发布时确认自己仍是 maintainer:`npm owner ls cli-claw`
|
|
154
|
+
4. 跑本地发布检查:`npm run release:check`
|
|
155
|
+
5. 手工检查 packlist 与体积是否符合预期:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm --cache /tmp/cli-claw-npm-cache pack --dry-run
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
至少确认输出里仍包含:
|
|
162
|
+
|
|
163
|
+
- `dist/`
|
|
164
|
+
- `web/dist`
|
|
165
|
+
- `shared/dist`
|
|
166
|
+
- `container/agent-runner/dist`
|
|
167
|
+
- `config/`
|
|
168
|
+
- `README.md`
|
|
169
|
+
- `LICENSE`
|
|
170
|
+
|
|
171
|
+
同时留意 tarball 体积是否异常上涨。
|
|
172
|
+
|
|
173
|
+
6. 做一次 tarball 安装 smoke,尽量使用临时 `HOME` 和临时 prefix,避免污染本机:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
npm --cache /tmp/cli-claw-npm-cache pack
|
|
177
|
+
TMP_HOME="$(mktemp -d)"
|
|
178
|
+
TMP_PREFIX="$(mktemp -d)"
|
|
179
|
+
HOME="$TMP_HOME" npm install -g --prefix "$TMP_PREFIX" ./cli-claw-<version>.tgz
|
|
180
|
+
"$TMP_PREFIX/bin/cli-claw" help
|
|
181
|
+
"$TMP_PREFIX/bin/cli-claw" version
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
如需再做一次短启动 smoke,可以在新的临时 `HOME` 下启动后手动停止:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
HOME="$TMP_HOME" WEB_PORT=3310 "$TMP_PREFIX/bin/cli-claw" start
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
7. 最后执行:`npm publish`
|
|
191
|
+
|
|
192
|
+
`npm run release:check` 会串联 `./scripts/validate.sh`、`./scripts/review.sh`、CLI 基础 smoke,以及带临时 cache 的 `npm pack --dry-run`,避免被本机 `~/.npm` 权限问题干扰;但它不替代 tarball 安装 smoke 和人为 packlist 审核。
|
|
193
|
+
|
|
194
|
+
### 端口
|
|
195
|
+
|
|
196
|
+
- 生产模式默认端口:`3000`
|
|
197
|
+
- 如需修改:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
WEB_PORT=8080 cli-claw start
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 开发文档
|
|
204
|
+
|
|
205
|
+
仓库采用 owner-doc 方式维护上下文,避免同一事实散落在多个入口:
|
|
206
|
+
|
|
207
|
+
- [AGENTS.md](AGENTS.md):仓库入口、必读顺序、复杂任务底线
|
|
208
|
+
- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md):系统分层与核心数据流
|
|
209
|
+
- [docs/MODULE.md](docs/MODULE.md):唯一维护的模块树 / 模块索引
|
|
210
|
+
- [docs/RUNTIME.md](docs/RUNTIME.md):运行时矩阵与外部运行时契约
|
|
211
|
+
- [docs/CONTEXT.md](docs/CONTEXT.md):工作区、记忆与持久化边界
|
|
212
|
+
- [docs/ENGINEERING.md](docs/ENGINEERING.md):实施、验证、review / commit 规则
|
|
213
|
+
- [docs/COMMAND.md](docs/COMMAND.md):命令行为与入口差异
|
|
214
|
+
|
|
215
|
+
复杂任务默认按仓库内的 `PLANS/ACTIVE.md` + `RUNBOOKS/*` 工作流执行;细节以 [AGENTS.md](AGENTS.md) 为入口,不在 README 中重复展开。
|
|
216
|
+
|
|
217
|
+
## 贡献
|
|
218
|
+
|
|
219
|
+
欢迎提交 Issue 和 Pull Request。
|
|
220
|
+
|
|
221
|
+
### 开发流程
|
|
222
|
+
|
|
223
|
+
1. Fork 仓库并克隆到本地
|
|
224
|
+
2. 创建功能分支:`git checkout -b feature/your-feature`
|
|
225
|
+
3. 开发并验证:`make dev`、`make typecheck`,必要时运行 `./scripts/validate.sh`
|
|
226
|
+
4. 提交代码并推送到 Fork
|
|
227
|
+
5. 创建 Pull Request 到 `main` 分支
|
|
228
|
+
|
|
229
|
+
### Commit 约定
|
|
230
|
+
|
|
231
|
+
commit message 使用英文,格式建议:`type: summary`
|
|
232
|
+
|
|
233
|
+
```text
|
|
234
|
+
fix: align message hover footer
|
|
235
|
+
feat: add codex runtime notes
|
|
236
|
+
refactor: simplify workspace routing
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Star History
|
|
240
|
+
|
|
241
|
+
[](https://www.star-history.com/#RyanProMax/cli-claw&type=date&legend=top-left)
|
|
242
|
+
|
|
243
|
+
## 许可证
|
|
244
|
+
|
|
245
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# cli-claw — 全局记忆
|
|
2
|
+
|
|
3
|
+
你是 cli-claw,一个自托管的个人 AI Agent。你具备对话交流、文件操作、命令执行、网页浏览、定时任务调度等能力。
|
|
4
|
+
|
|
5
|
+
## 用户信息
|
|
6
|
+
|
|
7
|
+
<!-- 获知以下任何信息后,请立即用 Edit 工具更新此段落。不要用 memory_append,这些是永久信息。 -->
|
|
8
|
+
|
|
9
|
+
- **姓名**:(待记录)
|
|
10
|
+
- **称呼**:(待记录 — 用户希望你怎么称呼 TA)
|
|
11
|
+
- **工作/身份**:(待记录)
|
|
12
|
+
- **时区/所在地**:(待记录)
|
|
13
|
+
- **沟通语言偏好**:简体中文
|
|
14
|
+
|
|
15
|
+
## 用户偏好
|
|
16
|
+
|
|
17
|
+
<!-- 用户明确表达的长期偏好写在这里。例如:沟通风格、格式偏好、技术栈偏好等。 -->
|
|
18
|
+
|
|
19
|
+
(待记录)
|
|
20
|
+
|
|
21
|
+
## 常用项目 / 上下文
|
|
22
|
+
|
|
23
|
+
<!-- 跨会话反复提到的项目、仓库、服务名称等,记录在此方便快速回忆。 -->
|
|
24
|
+
|
|
25
|
+
(待记录)
|
|
26
|
+
|
|
27
|
+
## 通信规则
|
|
28
|
+
|
|
29
|
+
你的输出会发送给用户(定时任务模式除外 — 定时任务中你必须使用 `mcp__cli-claw__send_message` 主动发送消息,否则用户将收不到任何内容)。此外,在普通对话中也可以使用 `mcp__cli-claw__send_message` 在执行长任务时先发送一条确认消息。
|
|
30
|
+
|
|
31
|
+
### 内部思考
|
|
32
|
+
|
|
33
|
+
用 `<internal>` 标签包裹不需要发送给用户的推理内容。标签内的文本会被记录但不会发送。
|
|
34
|
+
|
|
35
|
+
### 子代理模式
|
|
36
|
+
|
|
37
|
+
作为子代理或团队成员运行时,仅在主代理明确要求时才使用 `send_message`。
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# cli-claw Agent Container
|
|
2
|
+
# Runs Claude Agent SDK in isolated Linux VM with full toolchain
|
|
3
|
+
|
|
4
|
+
FROM node:22-slim
|
|
5
|
+
|
|
6
|
+
# Copy uv from official image (multi-arch, no extra download)
|
|
7
|
+
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
|
8
|
+
COPY --from=ghcr.io/astral-sh/uv:latest /uvx /usr/local/bin/uvx
|
|
9
|
+
|
|
10
|
+
# Install system packages (organized by category)
|
|
11
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
12
|
+
# --- Browser & fonts ---
|
|
13
|
+
chromium \
|
|
14
|
+
fonts-liberation \
|
|
15
|
+
fonts-noto-color-emoji \
|
|
16
|
+
# --- Chromium shared library deps ---
|
|
17
|
+
libgbm1 \
|
|
18
|
+
libnss3 \
|
|
19
|
+
libatk-bridge2.0-0 \
|
|
20
|
+
libgtk-3-0 \
|
|
21
|
+
libx11-xcb1 \
|
|
22
|
+
libxcomposite1 \
|
|
23
|
+
libxdamage1 \
|
|
24
|
+
libxrandr2 \
|
|
25
|
+
libasound2 \
|
|
26
|
+
libpangocairo-1.0-0 \
|
|
27
|
+
libcups2 \
|
|
28
|
+
libdrm2 \
|
|
29
|
+
libxshmfence1 \
|
|
30
|
+
# --- Build tools & compilers ---
|
|
31
|
+
build-essential \
|
|
32
|
+
cmake \
|
|
33
|
+
pkg-config \
|
|
34
|
+
# --- Python ecosystem ---
|
|
35
|
+
python3 \
|
|
36
|
+
python3-pip \
|
|
37
|
+
python3-venv \
|
|
38
|
+
python3-dev \
|
|
39
|
+
# --- Core CLI tools ---
|
|
40
|
+
curl \
|
|
41
|
+
wget \
|
|
42
|
+
git \
|
|
43
|
+
zsh \
|
|
44
|
+
jq \
|
|
45
|
+
tree \
|
|
46
|
+
file \
|
|
47
|
+
less \
|
|
48
|
+
bc \
|
|
49
|
+
patch \
|
|
50
|
+
rsync \
|
|
51
|
+
# --- Compression ---
|
|
52
|
+
zip \
|
|
53
|
+
unzip \
|
|
54
|
+
xz-utils \
|
|
55
|
+
bzip2 \
|
|
56
|
+
# --- Network ---
|
|
57
|
+
openssh-client \
|
|
58
|
+
dnsutils \
|
|
59
|
+
iputils-ping \
|
|
60
|
+
# --- Process & system ---
|
|
61
|
+
procps \
|
|
62
|
+
lsof \
|
|
63
|
+
# --- Text search & dev ---
|
|
64
|
+
ripgrep \
|
|
65
|
+
fd-find \
|
|
66
|
+
shellcheck \
|
|
67
|
+
# --- Multimedia ---
|
|
68
|
+
ffmpeg \
|
|
69
|
+
imagemagick \
|
|
70
|
+
ghostscript \
|
|
71
|
+
graphviz \
|
|
72
|
+
# --- Document & PDF ---
|
|
73
|
+
poppler-utils \
|
|
74
|
+
pandoc \
|
|
75
|
+
# --- Database clients ---
|
|
76
|
+
sqlite3 \
|
|
77
|
+
default-mysql-client \
|
|
78
|
+
postgresql-client \
|
|
79
|
+
redis-tools \
|
|
80
|
+
# --- Locale ---
|
|
81
|
+
locales \
|
|
82
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
83
|
+
# Set up UTF-8 locale
|
|
84
|
+
&& sed -i '/en_US.UTF-8/s/^# //' /etc/locale.gen && locale-gen \
|
|
85
|
+
# Symlink fd-find → fd (Debian names it fdfind)
|
|
86
|
+
&& ln -sf /usr/bin/fdfind /usr/local/bin/fd
|
|
87
|
+
|
|
88
|
+
# Locale environment
|
|
89
|
+
ENV LANG=en_US.UTF-8
|
|
90
|
+
ENV LC_ALL=en_US.UTF-8
|
|
91
|
+
|
|
92
|
+
# Set Chromium path for agent-browser
|
|
93
|
+
ENV AGENT_BROWSER_EXECUTABLE_PATH=/usr/bin/chromium
|
|
94
|
+
ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium
|
|
95
|
+
|
|
96
|
+
# Allow pip install without venv (Debian 12+ PEP 668) and add user bin to PATH
|
|
97
|
+
ENV PIP_BREAK_SYSTEM_PACKAGES=1
|
|
98
|
+
ENV PATH="/home/node/.local/bin:${PATH}"
|
|
99
|
+
|
|
100
|
+
# Create app directory
|
|
101
|
+
WORKDIR /app
|
|
102
|
+
|
|
103
|
+
# Copy package.json only — no lock file so "*" always resolves to latest SDK
|
|
104
|
+
COPY container/agent-runner/package.json ./
|
|
105
|
+
|
|
106
|
+
# CACHEBUST after COPY ensures both global and local npm install are cache-busted
|
|
107
|
+
# (COPY caches on file content hash, which blocks ARG invalidation propagation)
|
|
108
|
+
ARG CACHEBUST=1
|
|
109
|
+
RUN npm install -g agent-browser
|
|
110
|
+
RUN npm install
|
|
111
|
+
|
|
112
|
+
# Install feishu-cli (pre-compiled binary from GitHub Releases)
|
|
113
|
+
# Non-fatal: GitHub API rate limits may cause transient failures
|
|
114
|
+
ARG TARGETARCH
|
|
115
|
+
RUN ARCH="${TARGETARCH:-$(dpkg --print-architecture)}"; \
|
|
116
|
+
VERSION=$(curl -fsSL https://api.github.com/repos/riba2534/feishu-cli/releases/latest 2>/dev/null | jq -r .tag_name 2>/dev/null); \
|
|
117
|
+
if [ -n "$VERSION" ] && [ "$VERSION" != "null" ]; then \
|
|
118
|
+
curl -fsSL "https://github.com/riba2534/feishu-cli/releases/download/${VERSION}/feishu-cli_${VERSION}_linux-${ARCH}.tar.gz" \
|
|
119
|
+
| tar -xz --strip-components=1 -C /usr/local/bin && \
|
|
120
|
+
feishu-cli --version; \
|
|
121
|
+
else \
|
|
122
|
+
echo "WARNING: Failed to fetch feishu-cli version (GitHub API rate limit?), skipping installation"; \
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Install feishu-cli skills (builtin, lowest priority in discovery)
|
|
126
|
+
# Non-fatal: GitHub API rate limits may cause transient failures
|
|
127
|
+
RUN mkdir -p /opt/builtin-skills; \
|
|
128
|
+
curl -fsSL https://api.github.com/repos/riba2534/feishu-cli/tarball/main 2>/dev/null \
|
|
129
|
+
| tar -xz --strip-components=2 -C /opt/builtin-skills --wildcards '*/skills/*' 2>/dev/null \
|
|
130
|
+
&& ls /opt/builtin-skills/ \
|
|
131
|
+
|| echo "WARNING: Failed to fetch feishu-cli skills, skipping"
|
|
132
|
+
|
|
133
|
+
# Copy source code and canonical shared definitions
|
|
134
|
+
COPY container/agent-runner/ ./
|
|
135
|
+
COPY shared/ /shared/
|
|
136
|
+
|
|
137
|
+
# Build TypeScript (shared dist + agent-runner)
|
|
138
|
+
RUN npm run build
|
|
139
|
+
|
|
140
|
+
# Create workspace directories
|
|
141
|
+
RUN mkdir -p /workspace/group /workspace/global /workspace/memory /workspace/extra /workspace/ipc/messages /workspace/ipc/tasks /workspace/ipc/input
|
|
142
|
+
|
|
143
|
+
# Copy entrypoint script (runs as root, drops to node user via runuser)
|
|
144
|
+
COPY container/entrypoint.sh /app/entrypoint.sh
|
|
145
|
+
RUN chmod +x /app/entrypoint.sh
|
|
146
|
+
|
|
147
|
+
# Set ownership to node user (non-root) for writable directories
|
|
148
|
+
RUN chown -R node:node /workspace
|
|
149
|
+
|
|
150
|
+
# Install oh-my-zsh for node user (ys theme)
|
|
151
|
+
RUN su - node -c 'sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended' \
|
|
152
|
+
&& sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="ys"/' /home/node/.zshrc \
|
|
153
|
+
&& chsh -s /bin/zsh node
|
|
154
|
+
|
|
155
|
+
# Entrypoint runs as root to fix volume permissions, then drops to node user.
|
|
156
|
+
# Do NOT add USER node here — entrypoint handles the privilege drop.
|
|
157
|
+
WORKDIR /workspace/group
|
|
158
|
+
|
|
159
|
+
# Entry point reads JSON from stdin, outputs JSON to stdout
|
|
160
|
+
ENTRYPOINT ["/app/entrypoint.sh"]
|