piclaw 0.0.4 → 0.0.6

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.
Files changed (185) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/dist-D51xeTP2.js +12 -0
  3. package/.output/public/assets/index-B3x2_en6.css +1 -0
  4. package/.output/public/assets/index-SfjxJZSD.js +38 -0
  5. package/.output/public/assets/md4x-CNLJ57xO.wasm +0 -0
  6. package/.output/public/assets/md4x-CyfQToGJ.js +1 -0
  7. package/.output/public/assets/wasm-Cm7RZrwg.js +1 -0
  8. package/.output/public/icon.svg +25 -0
  9. package/.output/public/index.html +3 -2
  10. package/.output/public/manifest.json +1 -1
  11. package/.output/server/_chunks/bun.mjs +49 -0
  12. package/.output/server/_chunks/commands.mjs +280 -0
  13. package/.output/server/_chunks/config.mjs +2 -4
  14. package/.output/server/_chunks/db.mjs +11 -5
  15. package/.output/server/_chunks/logger.mjs +1 -1
  16. package/.output/server/_chunks/node.mjs +31 -0
  17. package/.output/server/_chunks/ntfy.mjs +45 -0
  18. package/.output/server/_chunks/pi.mjs +33 -1
  19. package/.output/server/_chunks/renderer-template.mjs +1 -1
  20. package/.output/server/_chunks/{bootstrap.mjs → server.mjs} +203 -205
  21. package/.output/server/_chunks/session.mjs +249 -40
  22. package/.output/server/_chunks/settings.mjs +1 -1
  23. package/.output/server/_chunks/terminal.mjs +35 -20
  24. package/.output/server/_chunks/virtual.mjs +129 -0
  25. package/.output/server/_jid_.delete.mjs +2 -2
  26. package/.output/server/_jid_.patch.mjs +30 -3
  27. package/.output/server/_jid_2.delete.mjs +2 -2
  28. package/.output/server/_libs/@aws-sdk/client-bedrock-runtime+[...].mjs +13148 -13149
  29. package/.output/server/_libs/@aws-sdk/credential-provider-http+[...].mjs +1 -1
  30. package/.output/server/_libs/@aws-sdk/credential-provider-ini+[...].mjs +2 -2
  31. package/.output/server/_libs/@aws-sdk/credential-provider-process+[...].mjs +1 -1
  32. package/.output/server/_libs/@aws-sdk/credential-provider-sso+[...].mjs +1 -1
  33. package/.output/server/_libs/@aws-sdk/credential-provider-web-identity+[...].mjs +1 -1
  34. package/.output/server/_libs/@google/genai.mjs +2 -2
  35. package/.output/server/_libs/@mariozechner/pi-agent-core+[...].mjs +40 -74
  36. package/.output/server/_libs/@mariozechner/pi-coding-agent+[...].mjs +1315 -1210
  37. package/.output/server/_libs/@smithy/credential-provider-imds+[...].mjs +3 -3
  38. package/.output/server/_libs/_.mjs +3 -2
  39. package/.output/server/_libs/_100.mjs +3 -0
  40. package/.output/server/_libs/_101.mjs +2 -0
  41. package/.output/server/_libs/_102.mjs +3 -0
  42. package/.output/server/_libs/_103.mjs +2 -0
  43. package/.output/server/_libs/_16.mjs +2 -5
  44. package/.output/server/_libs/_17.mjs +2 -3
  45. package/.output/server/_libs/_18.mjs +2 -3
  46. package/.output/server/_libs/_19.mjs +2 -4
  47. package/.output/server/_libs/_2.mjs +2 -3
  48. package/.output/server/_libs/_20.mjs +2 -2
  49. package/.output/server/_libs/_21.mjs +2 -0
  50. package/.output/server/_libs/_22.mjs +2 -0
  51. package/.output/server/_libs/_23.mjs +2 -0
  52. package/.output/server/_libs/_24.mjs +2 -0
  53. package/.output/server/_libs/_25.mjs +2 -0
  54. package/.output/server/_libs/_26.mjs +2 -0
  55. package/.output/server/_libs/_27.mjs +2 -0
  56. package/.output/server/_libs/_28.mjs +2 -0
  57. package/.output/server/_libs/_29.mjs +2 -0
  58. package/.output/server/_libs/_30.mjs +2 -0
  59. package/.output/server/_libs/_31.mjs +2 -0
  60. package/.output/server/_libs/_32.mjs +2 -0
  61. package/.output/server/_libs/_33.mjs +2 -0
  62. package/.output/server/_libs/_34.mjs +2 -0
  63. package/.output/server/_libs/_35.mjs +2 -0
  64. package/.output/server/_libs/_36.mjs +2 -0
  65. package/.output/server/_libs/_37.mjs +2 -0
  66. package/.output/server/_libs/_38.mjs +2 -0
  67. package/.output/server/_libs/_39.mjs +2 -0
  68. package/.output/server/_libs/_40.mjs +2 -0
  69. package/.output/server/_libs/_41.mjs +2 -0
  70. package/.output/server/_libs/_42.mjs +2 -0
  71. package/.output/server/_libs/_43.mjs +2 -0
  72. package/.output/server/_libs/_44.mjs +2 -0
  73. package/.output/server/_libs/_45.mjs +2 -0
  74. package/.output/server/_libs/_46.mjs +2 -0
  75. package/.output/server/_libs/_47.mjs +2 -0
  76. package/.output/server/_libs/_48.mjs +2 -0
  77. package/.output/server/_libs/_49.mjs +2 -0
  78. package/.output/server/_libs/_50.mjs +2 -0
  79. package/.output/server/_libs/_51.mjs +2 -0
  80. package/.output/server/_libs/_52.mjs +2 -0
  81. package/.output/server/_libs/_53.mjs +2 -0
  82. package/.output/server/_libs/_54.mjs +2 -0
  83. package/.output/server/_libs/_55.mjs +2 -0
  84. package/.output/server/_libs/_56.mjs +2 -0
  85. package/.output/server/_libs/_57.mjs +2 -0
  86. package/.output/server/_libs/_58.mjs +2 -0
  87. package/.output/server/_libs/_59.mjs +2 -0
  88. package/.output/server/_libs/_60.mjs +2 -0
  89. package/.output/server/_libs/_61.mjs +2 -0
  90. package/.output/server/_libs/_62.mjs +2 -0
  91. package/.output/server/_libs/_63.mjs +2 -0
  92. package/.output/server/_libs/_64.mjs +2 -0
  93. package/.output/server/_libs/_65.mjs +2 -0
  94. package/.output/server/_libs/_66.mjs +2 -0
  95. package/.output/server/_libs/_67.mjs +2 -0
  96. package/.output/server/_libs/_68.mjs +2 -0
  97. package/.output/server/_libs/_69.mjs +2 -0
  98. package/.output/server/_libs/_70.mjs +2 -0
  99. package/.output/server/_libs/_71.mjs +2 -0
  100. package/.output/server/_libs/_72.mjs +2 -0
  101. package/.output/server/_libs/_73.mjs +2 -0
  102. package/.output/server/_libs/_74.mjs +2 -0
  103. package/.output/server/_libs/_75.mjs +2 -0
  104. package/.output/server/_libs/_76.mjs +2 -0
  105. package/.output/server/_libs/_77.mjs +2 -0
  106. package/.output/server/_libs/_78.mjs +2 -0
  107. package/.output/server/_libs/_79.mjs +2 -0
  108. package/.output/server/_libs/_80.mjs +2 -0
  109. package/.output/server/_libs/_81.mjs +2 -0
  110. package/.output/server/_libs/_82.mjs +2 -0
  111. package/.output/server/_libs/_83.mjs +2 -0
  112. package/.output/server/_libs/_84.mjs +2 -0
  113. package/.output/server/_libs/_85.mjs +2 -0
  114. package/.output/server/_libs/_86.mjs +2 -0
  115. package/.output/server/_libs/_87.mjs +2 -0
  116. package/.output/server/_libs/_88.mjs +2 -0
  117. package/.output/server/_libs/_89.mjs +2 -0
  118. package/.output/server/_libs/_90.mjs +2 -0
  119. package/.output/server/_libs/_91.mjs +2 -0
  120. package/.output/server/_libs/_92.mjs +2 -0
  121. package/.output/server/_libs/_93.mjs +2 -0
  122. package/.output/server/_libs/_94.mjs +2 -0
  123. package/.output/server/_libs/_95.mjs +2 -0
  124. package/.output/server/_libs/_96.mjs +2 -0
  125. package/.output/server/_libs/_97.mjs +2 -0
  126. package/.output/server/_libs/_98.mjs +2 -0
  127. package/.output/server/_libs/_99.mjs +5 -0
  128. package/.output/server/_libs/amdefine.mjs +188 -0
  129. package/.output/server/_libs/aws-sdk__nested-clients.mjs +1 -1
  130. package/.output/server/_libs/compressjs.mjs +50 -0
  131. package/.output/server/_libs/diff.mjs +137 -0
  132. package/.output/server/_libs/get-uri.mjs +1 -1
  133. package/.output/server/_libs/http-proxy-agent.mjs +1 -1
  134. package/.output/server/_libs/https-proxy-agent.mjs +1 -1
  135. package/.output/server/_libs/just-bash+[...].mjs +80359 -0
  136. package/.output/server/_libs/md4x.mjs +73 -0
  137. package/.output/server/_libs/mixmark-io__domino.mjs +14801 -0
  138. package/.output/server/_libs/node-fetch.mjs +1 -1
  139. package/.output/server/_libs/node-liblzma.mjs +1107 -0
  140. package/.output/server/_libs/pac-proxy-agent+[...].mjs +1 -1
  141. package/.output/server/_libs/proxy-agent+proxy-from-env.mjs +1 -1
  142. package/.output/server/_libs/smithy__core.mjs +1 -1
  143. package/.output/server/_routes/api/files/delete.mjs +2 -2
  144. package/.output/server/_routes/api/files/groups.mjs +14 -0
  145. package/.output/server/_routes/api/files/raw.mjs +1 -1
  146. package/.output/server/_routes/api/files/read.mjs +1 -1
  147. package/.output/server/_routes/api/files/watch.mjs +1 -1
  148. package/.output/server/_routes/api/files/write.mjs +3 -2
  149. package/.output/server/_routes/api/files.mjs +1 -1
  150. package/.output/server/_routes/api/groups.mjs +2 -2
  151. package/.output/server/_routes/api/groups2.mjs +3 -2
  152. package/.output/server/_routes/api/health.mjs +2 -2
  153. package/.output/server/_routes/api/logs.mjs +4 -2
  154. package/.output/server/_routes/api/ntfy/setup.mjs +54 -0
  155. package/.output/server/_routes/api/ntfy/status.mjs +12 -0
  156. package/.output/server/_routes/api/pi/apikey.mjs +1 -1
  157. package/.output/server/_routes/api/pi/apikey_providers.mjs +1 -1
  158. package/.output/server/_routes/api/pi/commands.mjs +6 -0
  159. package/.output/server/_routes/api/pi/login/events.mjs +1 -1
  160. package/.output/server/_routes/api/pi/login/respond.mjs +1 -1
  161. package/.output/server/_routes/api/pi/login.mjs +1 -1
  162. package/.output/server/_routes/api/pi/logout.mjs +1 -1
  163. package/.output/server/_routes/api/pi/models.mjs +1 -1
  164. package/.output/server/_routes/api/pi/status.mjs +1 -1
  165. package/.output/server/_routes/api/send.mjs +22 -3
  166. package/.output/server/_routes/api/status.mjs +9 -7
  167. package/.output/server/_routes/api/tasks2.mjs +2 -2
  168. package/.output/server/_routes/api/telegram/setup.mjs +2 -2
  169. package/.output/server/_routes/api/telegram/status.mjs +2 -2
  170. package/.output/server/_routes/api/terminal2.mjs +3 -2
  171. package/.output/server/_utils.mjs +12 -4
  172. package/.output/server/build/md4x.wasm +0 -0
  173. package/.output/server/index.mjs +223 -149
  174. package/.output/server/node_modules/@mongodb-js/zstd/lib/index.js +55 -0
  175. package/.output/server/node_modules/@mongodb-js/zstd/package.json +51 -0
  176. package/.output/server/package.json +1 -0
  177. package/README.md +118 -24
  178. package/bin/piclaw.mjs +39 -1
  179. package/package.json +16 -13
  180. package/.output/public/assets/client-TIs-Ghqj.js +0 -9
  181. package/.output/public/assets/dist-BVjfG3ok.js +0 -12
  182. package/.output/public/assets/dist-DJh8l6yS.js +0 -1
  183. package/.output/public/assets/index-BNNEMkNV.js +0 -39
  184. package/.output/public/assets/index-CdWBxO5V.css +0 -1
  185. package/.output/public/assets/react-DFP7nCmh.js +0 -1
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+ const { promisify } = require('util');
3
+ const { isUint8Array } = require('util/types');
4
+
5
+ function load() {
6
+ try {
7
+ return require('../build/Release/zstd.node');
8
+ } catch {
9
+ // Webpack will fail when just returning the require, so we need to wrap
10
+ // in a try/catch and rethrow.
11
+ /* eslint no-useless-catch: 0 */
12
+ try {
13
+ return require('../build/Debug/zstd.node');
14
+ } catch (error) {
15
+ throw error;
16
+ }
17
+ }
18
+ }
19
+
20
+ const zstd = load();
21
+
22
+ const _compress = promisify(zstd.compress);
23
+ const _decompress = promisify(zstd.decompress);
24
+ // Error objects created via napi don't have JS stacks; wrap them so .stack is present
25
+ // https://github.com/nodejs/node/issues/25318#issuecomment-451068073
26
+
27
+ exports.compress = async function compress(data, compressionLevel) {
28
+ if (!isUint8Array(data)) {
29
+ throw new TypeError(`parameter 'data' must be a Uint8Array.`);
30
+ }
31
+
32
+ if (compressionLevel != null && typeof compressionLevel !== 'number') {
33
+ throw new TypeError(`parameter 'compressionLevel' must be a number.`);
34
+ }
35
+
36
+ try {
37
+ return await _compress(data, compressionLevel ?? 3);
38
+ } catch (e) {
39
+ throw new Error(`zstd: ${e.message}`);
40
+ }
41
+ };
42
+
43
+ exports.decompress = async function decompress(data) {
44
+ if (!isUint8Array(data)) {
45
+ throw new TypeError(`parameter 'data' must be a Uint8Array.`);
46
+ }
47
+ try {
48
+ return await _decompress(data);
49
+ } catch (e) {
50
+ throw new Error(`zstd: ${e.message}`);
51
+ }
52
+ };
53
+
54
+ /** used for testing */
55
+ exports.getDefinedNapiVersion = zstd.getDefinedNapiVersion;
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@mongodb-js/zstd",
3
+ "version": "7.0.0",
4
+ "main": "lib/index.js",
5
+ "types": "index.d.ts",
6
+ "repository": "https://github.com/mongodb-js/zstd",
7
+ "files": [
8
+ "index.d.ts",
9
+ "lib/index.js",
10
+ "addon/*",
11
+ "binding.gyp"
12
+ ],
13
+ "dependencies": {
14
+ "node-addon-api": "^8.5.0",
15
+ "prebuild-install": "^7.1.3"
16
+ },
17
+ "license": "Apache-2.0",
18
+ "devDependencies": {
19
+ "@mongodb-js/zstd": "^1.2.0",
20
+ "@typescript-eslint/eslint-plugin": "^8.46.0",
21
+ "@wasm-fmt/clang-format": "^21.1.4",
22
+ "chai": "^4.5.0",
23
+ "eslint": "^9.37.0",
24
+ "eslint-config-prettier": "^10.1.8",
25
+ "eslint-plugin-prettier": "^5.5.4",
26
+ "mocha": "^11.7.4",
27
+ "node-gyp": "^11.4.2",
28
+ "prebuild": "^13.0.1",
29
+ "prettier": "^3.6.2"
30
+ },
31
+ "engines": {
32
+ "node": ">= 20.19.0"
33
+ },
34
+ "scripts": {
35
+ "install": "prebuild-install --runtime napi || npm run clean-install",
36
+ "clean-install": "npm run install-zstd && npm run compile",
37
+ "compile": "node-gyp rebuild",
38
+ "test": "mocha test/*.js",
39
+ "install-zstd": "bash etc/install-zstd.sh",
40
+ "check:eslint": "ESLINT_USE_FLAT_CONFIG=false eslint *ts lib/*.js test/*.js .*.json",
41
+ "clang-format": "clang-format --style=file:.clang-format --Werror -i addon/*",
42
+ "check:clang-format": "clang-format --style=file:.clang-format --dry-run --Werror addon/*",
43
+ "prebuild": "prebuild --runtime napi --strip --verbose --all"
44
+ },
45
+ "binary": {
46
+ "napi_versions": [
47
+ 9
48
+ ]
49
+ },
50
+ "mongodb:zstd_version": "1.5.6"
51
+ }
@@ -4,6 +4,7 @@
4
4
  "type": "module",
5
5
  "private": true,
6
6
  "dependencies": {
7
+ "@mongodb-js/zstd": "7.0.0",
7
8
  "node-pty": "1.2.0-beta.11",
8
9
  "tslib": "2.8.1",
9
10
  "undici": "7.22.0"
package/README.md CHANGED
@@ -1,55 +1,148 @@
1
- # π PiClaw
1
+ <p align="center">
2
+ <img src="./public/icon.svg" alt="PiClaw icon" width="96" height="96" />
3
+ </p>
2
4
 
3
- PiClaw is a personal AI OS you can access from your browser.
5
+ # PiClaw
4
6
 
5
- It runs in the background and gives each chat its own AI agent with memory and a workspace. You can use it from your browser or connect to Telegram.
7
+ **PiClaw is your personal AI ops OS in the browser.**
8
+ Spin it up, open a chat, and you’ve got a persistent coding agent with memory, tools, files, terminal tabs, and external channels.
6
9
 
7
10
  > [!NOTE]
8
11
  > This project is in private beta. Feel free to try it at your own risk, but please don't share it publicly.
9
12
  >
10
13
  > Please share your feedback with me ([@pi0](https://pi0.io)).
11
14
 
12
- ## What you can do
15
+ ## 🚀 Quick Start
13
16
 
14
- ### 🖥️ Desktop-style interface
17
+ Choose one of the options below.
15
18
 
16
- A clean, simple desktop-like UI with draggable windows, a dock, wallpapers, and keyboard shortcuts.
19
+ ### Option A: Run on host (fastest)
17
20
 
18
- ### 💬 Separate chats, groups, and @-trigger control
21
+ **Prerequisite:** [Node.js](https://nodejs.org/en/download) or [Bun](https://bun.sh/)
19
22
 
20
- Each chat group has its own agent, memory, and workspace, so conversations stay organized.
23
+ ```sh
24
+ # Node.js
25
+ npx piclaw@latest
21
26
 
22
- For multi-user/group chats, you can use an `@` trigger system:
27
+ # Bun
28
+ bunx piclaw@latest
29
+ ```
23
30
 
24
- - **Trigger off:** every message is processed
25
- - **Trigger on:** only messages that start with `@assistant-name` are processed
31
+ Then open: **http://localhost:3737**
26
32
 
27
- ### 🤖 Configure your AI agents
33
+ > [!TIP]
34
+ > PiClaw stores state in `~/.pi/claw`.
28
35
 
29
- Connect providers and change models and settings from the UI, without editing config files in terminal.
36
+ ### Option B: Run with Docker (recommended)
30
37
 
31
- - **OAuth providers:** Anthropic (Claude Pro/Max), GitHub Copilot, Antigravity (Gemini 3, Claude, GPT-OSS), Google Cloud Code Assist (Gemini CLI), ChatGPT Plus/Pro (Codex Subscription).
32
- - **API key providers:** Anthropic, OpenAI, Vercel AI Gateway, OpenRouter, Kimi, OpenCode Zen, Azure OpenAI, Google Gemini, Mistral, Groq, Cerebras, xAI, ZAI, MiniMax, Hugging Face.
38
+ **Prerequisite:** [Docker Desktop](https://www.docker.com/products/docker-desktop/) or [OrbStack](https://orbstack.dev/)
33
39
 
34
- ### 📁 Built-in file manager and editor
40
+ This keeps PiClaw isolated from your host environment.
35
41
 
36
- Browse files, open them quickly, and edit code or notes directly in the app.
42
+ > [!IMPORTANT]
43
+ > By default, Docker binds ports to all interfaces (`0.0.0.0`), making the service accessible from your network. The examples below bind to `127.0.0.1` so only your machine can reach it. Remove the `127.0.0.1:` prefix if you intentionally want to expose it.
44
+
45
+ ```sh
46
+ docker run -it --rm \
47
+ --user "$(id -u):$(id -g)" \
48
+ -p 127.0.0.1:3737:3737 \
49
+ -v "$HOME/.pi:/home/pi/.pi" \
50
+ ghcr.io/pi0/piclaw:latest
51
+ ```
52
+
53
+ Then open: **http://localhost:3737**
54
+
55
+ **Docker Compose:**
56
+
57
+ ```yaml
58
+ services:
59
+ piclaw:
60
+ image: ghcr.io/pi0/piclaw:latest
61
+ ports:
62
+ - "127.0.0.1:3737:3737"
63
+ user: "${UID:-1000}:${GID:-1000}"
64
+ volumes:
65
+ - ${HOME}/.pi:/home/pi/.pi
66
+ restart: unless-stopped
67
+ ```
68
+
69
+ ## ⚡ Feature tour
70
+
71
+ ### 🖥️ AI + Desktop
72
+
73
+ - Desktop-like UI multi window system
74
+ - Launcher + taskbar workflow
75
+ - Mobile-friendly full-screen experience
76
+ - Quick welcome screen to get you online fast
77
+ - Optional PWA install prompt for app-like usage
78
+
79
+ ### 💬 Multi-chat, multi-group, multi-context
80
+
81
+ Each group/chat has its own:
82
+
83
+ - agent session
84
+ - workspace folder
85
+ - persisted memory + session state
86
+ - model + thinking settings
87
+
88
+ Trigger behavior is configurable:
89
+
90
+ - **Trigger off:** process every message
91
+ - **Trigger on:** process only `@assistant-name ...`
92
+
93
+ ### 🤖 Serious agent controls
94
+
95
+ Configure providers and model behavior from the UI (no config-file spelunking needed):
96
+
97
+ - **OAuth providers:** Anthropic (Claude Pro/Max), GitHub Copilot, Antigravity (Gemini 3, Claude, GPT-OSS), Google Cloud Code Assist (Gemini CLI), ChatGPT Plus/Pro (Codex Subscription)
98
+ - **API key providers:** Anthropic, OpenAI, Vercel AI Gateway, OpenRouter, Kimi, OpenCode Zen, Azure OpenAI, Google Gemini, Mistral, Groq, Cerebras, xAI, ZAI, MiniMax, Hugging Face
99
+
100
+ Per-chat command controls include:
101
+
102
+ - `/model` → list/set model
103
+ - `/thinking` → tune reasoning depth
104
+ - `/compact` → compact active context
105
+ - `/stop` + `/new` → immediate session control
106
+ - `/info` + `/help` → inspect current runtime state
107
+
108
+ ### 📡 Real-time streaming + tool telemetry
109
+
110
+ - Token-by-token response streaming into chat UI
111
+ - Live tool lifecycle events (tool start/end)
112
+ - Crash-safe cursor/session recovery after restarts
113
+ - Logs window for fast diagnosis
114
+
115
+ ### 📁 Files + editor + viewer built in
116
+
117
+ - Group-scoped file browser
118
+ - In-app editor and file viewer windows
119
+ - Live file change watching (SSE)
120
+ - Keyboard navigation in file explorer
37
121
 
38
122
  ### ⬛ Persistent terminal tabs
39
123
 
40
- Run terminal sessions that stay alive in the background, even if you close the tab or connect from multiple places.
124
+ - Real PTY terminal sessions in the dashboard
125
+ - Sessions survive window close/reopen
126
+ - Label sync + reconnect across views
127
+ - Optional virtual/sandbox-style terminal mode
41
128
 
42
- ### ⏰ Task scheduler
129
+ ### ⏰ Scheduler + automation hooks
43
130
 
44
- Set one-time or repeating tasks and attach them to a specific chat group to run by agent.
131
+ - One-time and recurring task scheduling
132
+ - Attach tasks to specific chat groups
133
+ - Automated prompts executed by the right agent context
45
134
 
46
- ### 📲 Telegram support
135
+ ### 📲 External channels + notifications
47
136
 
48
- Connect a Telegram bot and chat with your agents from Telegram DMs or groups.
137
+ - Telegram bot integration (DMs + groups)
138
+ - Adaptive Telegram streaming throttling
139
+ - ntfy push notifications
49
140
 
50
- ### 📋 System logs
141
+ ### 🎨 Personalization
51
142
 
52
- View live app logs to monitor activity and troubleshoot issues.
143
+ - Wallpapers + desktop appearance settings
144
+ - Dash density/size preferences
145
+ - Clean, modern typography and icon set
53
146
 
54
147
  ## 🧱 Built with
55
148
 
@@ -58,6 +151,7 @@ View live app logs to monitor activity and troubleshoot issues.
58
151
  - [Vite](https://vite.dev/) and [Rolldown](https://rolldown.rs/) — Builder
59
152
  - [Vue.js](https://vuejs.org/) — UI
60
153
  - [WinBox](https://nextapps-de.github.io/winbox/) — window manager (modernized fork)
154
+ - [Md4x](https://github.com/pi0/md4x) - Markdown rendering and parsing
61
155
  - [Modern Monaco](https://github.com/esm-dev/modern-monaco) — code editor
62
156
  - [Visual JSON](https://github.com/vercel-labs/visual-json) — schema-aware JSON editor
63
157
  - [Xterm.js](https://github.com/xtermjs/xterm.js) and [node-pty](https://github.com/microsoft/node-pty) — terminal
package/bin/piclaw.mjs CHANGED
@@ -1,4 +1,34 @@
1
1
  #!/usr/bin/env node
2
+ import { parseArgs } from "node:util";
3
+
4
+ process.removeAllListeners("warning");
5
+ process.on("warning", (warning) => {
6
+ if (warning.name === "ExperimentalWarning") return;
7
+ console.warn(warning);
8
+ });
9
+
10
+ const { values } = parseArgs({
11
+ options: {
12
+ help: { type: "boolean", short: "h", default: false },
13
+ "no-open": { type: "boolean", default: false },
14
+ },
15
+ strict: false,
16
+ });
17
+
18
+ if (values.help) {
19
+ const bold = (s) => `\x1b[1m${s}\x1b[0m`;
20
+ const dim = (s) => `\x1b[2m${s}\x1b[0m`;
21
+ const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
22
+ console.log(`${bold("piclaw")} ${dim("— multi-channel chat bot orchestrator")}
23
+
24
+ ${bold("Usage:")} ${cyan("piclaw")} [options]
25
+
26
+ ${bold("Options:")}
27
+ ${cyan("--no-open")} Do not open the browser on start
28
+ ${cyan("-h, --help")} Show this help message`);
29
+ process.exit(0);
30
+ }
31
+
2
32
  globalThis.__piclaw_start_time__ = performance.now();
3
33
 
4
34
  console.log(
@@ -7,4 +37,12 @@ console.log(
7
37
 
8
38
  const { startServer } = await import("../.output/server/index.mjs");
9
39
 
10
- startServer();
40
+ const server = await startServer();
41
+
42
+ // Open browser
43
+ if (server.url && !values["no-open"]) {
44
+ const { exec } = await import("node:child_process");
45
+ const cmd =
46
+ process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open2";
47
+ exec(`${cmd} ${server.url}`);
48
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "piclaw",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "bin": {
5
5
  "piclaw": "./bin/piclaw.mjs"
6
6
  },
@@ -14,7 +14,6 @@
14
14
  "build": "vite build",
15
15
  "fmt": "oxlint . --fix && oxfmt .",
16
16
  "lint": "oxlint . && oxfmt --check .",
17
- "prepack": "pnpm build",
18
17
  "start": "pnpm build && ./bin/piclaw.mjs",
19
18
  "test": "pnpm lint && pnpm typecheck",
20
19
  "release": "pnpm build && changelogen --release --push",
@@ -24,33 +23,37 @@
24
23
  "@fontsource-variable/geist": "^5.2.8",
25
24
  "@fontsource-variable/geist-mono": "^5.2.7",
26
25
  "@iconify/vue": "^5.0.0",
27
- "@mariozechner/pi-coding-agent": "^0.55.3",
26
+ "@mariozechner/pi-ai": "^0.55.4",
27
+ "@mariozechner/pi-coding-agent": "^0.55.4",
28
28
  "@tailwindcss/vite": "^4.2.1",
29
29
  "@types/node": "^25.3.3",
30
- "@types/react": "^19.2.14",
31
- "@types/react-dom": "^19.2.3",
32
30
  "@typescript/native-preview": "latest",
33
- "@visual-json/core": "^0.1.0",
34
- "@visual-json/react": "^0.1.0",
31
+ "@visual-json/core": "^0.3.0",
32
+ "@visual-json/vue": "^0.3.0",
35
33
  "@vitejs/plugin-vue": "^6.0.4",
36
34
  "@xterm/addon-fit": "^0.11.0",
37
35
  "@xterm/xterm": "^6.0.0",
38
36
  "changelogen": "^0.6.2",
39
37
  "geist": "^1.7.0",
38
+ "just-bash": "^2.11.6",
39
+ "md4x": "^0.0.12",
40
40
  "mime": "^4.1.0",
41
- "modern-monaco": "^0.3.8",
42
- "nitro": "npm:nitro-nightly@latest",
41
+ "modern-monaco": "^0.4.0",
42
+ "nitro": "latest",
43
43
  "node-pty": "1.2.0-beta.11",
44
44
  "obuild": "^0.4.31",
45
- "oxfmt": "^0.35.0",
46
- "oxlint": "^1.50.0",
47
- "react": "^19.2.4",
48
- "react-dom": "^19.2.4",
45
+ "oxfmt": "^0.36.0",
46
+ "oxlint": "^1.51.0",
49
47
  "srvx": "^0.11.8",
50
48
  "tailwindcss": "^4.2.1",
51
49
  "vite": "beta",
52
50
  "vitest": "^4.0.18",
53
51
  "vue": "^3.5.29"
54
52
  },
53
+ "resolutions": {
54
+ "@visual-json/core": "^0.3.0",
55
+ "nitro": "npm:nitro-nightly@latest",
56
+ "vite": "beta"
57
+ },
55
58
  "packageManager": "pnpm@10.30.3"
56
59
  }