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.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/dist-D51xeTP2.js +12 -0
- package/.output/public/assets/index-B3x2_en6.css +1 -0
- package/.output/public/assets/index-SfjxJZSD.js +38 -0
- package/.output/public/assets/md4x-CNLJ57xO.wasm +0 -0
- package/.output/public/assets/md4x-CyfQToGJ.js +1 -0
- package/.output/public/assets/wasm-Cm7RZrwg.js +1 -0
- package/.output/public/icon.svg +25 -0
- package/.output/public/index.html +3 -2
- package/.output/public/manifest.json +1 -1
- package/.output/server/_chunks/bun.mjs +49 -0
- package/.output/server/_chunks/commands.mjs +280 -0
- package/.output/server/_chunks/config.mjs +2 -4
- package/.output/server/_chunks/db.mjs +11 -5
- package/.output/server/_chunks/logger.mjs +1 -1
- package/.output/server/_chunks/node.mjs +31 -0
- package/.output/server/_chunks/ntfy.mjs +45 -0
- package/.output/server/_chunks/pi.mjs +33 -1
- package/.output/server/_chunks/renderer-template.mjs +1 -1
- package/.output/server/_chunks/{bootstrap.mjs → server.mjs} +203 -205
- package/.output/server/_chunks/session.mjs +249 -40
- package/.output/server/_chunks/settings.mjs +1 -1
- package/.output/server/_chunks/terminal.mjs +35 -20
- package/.output/server/_chunks/virtual.mjs +129 -0
- package/.output/server/_jid_.delete.mjs +2 -2
- package/.output/server/_jid_.patch.mjs +30 -3
- package/.output/server/_jid_2.delete.mjs +2 -2
- package/.output/server/_libs/@aws-sdk/client-bedrock-runtime+[...].mjs +13148 -13149
- package/.output/server/_libs/@aws-sdk/credential-provider-http+[...].mjs +1 -1
- package/.output/server/_libs/@aws-sdk/credential-provider-ini+[...].mjs +2 -2
- package/.output/server/_libs/@aws-sdk/credential-provider-process+[...].mjs +1 -1
- package/.output/server/_libs/@aws-sdk/credential-provider-sso+[...].mjs +1 -1
- package/.output/server/_libs/@aws-sdk/credential-provider-web-identity+[...].mjs +1 -1
- package/.output/server/_libs/@google/genai.mjs +2 -2
- package/.output/server/_libs/@mariozechner/pi-agent-core+[...].mjs +40 -74
- package/.output/server/_libs/@mariozechner/pi-coding-agent+[...].mjs +1315 -1210
- package/.output/server/_libs/@smithy/credential-provider-imds+[...].mjs +3 -3
- package/.output/server/_libs/_.mjs +3 -2
- package/.output/server/_libs/_100.mjs +3 -0
- package/.output/server/_libs/_101.mjs +2 -0
- package/.output/server/_libs/_102.mjs +3 -0
- package/.output/server/_libs/_103.mjs +2 -0
- package/.output/server/_libs/_16.mjs +2 -5
- package/.output/server/_libs/_17.mjs +2 -3
- package/.output/server/_libs/_18.mjs +2 -3
- package/.output/server/_libs/_19.mjs +2 -4
- package/.output/server/_libs/_2.mjs +2 -3
- package/.output/server/_libs/_20.mjs +2 -2
- package/.output/server/_libs/_21.mjs +2 -0
- package/.output/server/_libs/_22.mjs +2 -0
- package/.output/server/_libs/_23.mjs +2 -0
- package/.output/server/_libs/_24.mjs +2 -0
- package/.output/server/_libs/_25.mjs +2 -0
- package/.output/server/_libs/_26.mjs +2 -0
- package/.output/server/_libs/_27.mjs +2 -0
- package/.output/server/_libs/_28.mjs +2 -0
- package/.output/server/_libs/_29.mjs +2 -0
- package/.output/server/_libs/_30.mjs +2 -0
- package/.output/server/_libs/_31.mjs +2 -0
- package/.output/server/_libs/_32.mjs +2 -0
- package/.output/server/_libs/_33.mjs +2 -0
- package/.output/server/_libs/_34.mjs +2 -0
- package/.output/server/_libs/_35.mjs +2 -0
- package/.output/server/_libs/_36.mjs +2 -0
- package/.output/server/_libs/_37.mjs +2 -0
- package/.output/server/_libs/_38.mjs +2 -0
- package/.output/server/_libs/_39.mjs +2 -0
- package/.output/server/_libs/_40.mjs +2 -0
- package/.output/server/_libs/_41.mjs +2 -0
- package/.output/server/_libs/_42.mjs +2 -0
- package/.output/server/_libs/_43.mjs +2 -0
- package/.output/server/_libs/_44.mjs +2 -0
- package/.output/server/_libs/_45.mjs +2 -0
- package/.output/server/_libs/_46.mjs +2 -0
- package/.output/server/_libs/_47.mjs +2 -0
- package/.output/server/_libs/_48.mjs +2 -0
- package/.output/server/_libs/_49.mjs +2 -0
- package/.output/server/_libs/_50.mjs +2 -0
- package/.output/server/_libs/_51.mjs +2 -0
- package/.output/server/_libs/_52.mjs +2 -0
- package/.output/server/_libs/_53.mjs +2 -0
- package/.output/server/_libs/_54.mjs +2 -0
- package/.output/server/_libs/_55.mjs +2 -0
- package/.output/server/_libs/_56.mjs +2 -0
- package/.output/server/_libs/_57.mjs +2 -0
- package/.output/server/_libs/_58.mjs +2 -0
- package/.output/server/_libs/_59.mjs +2 -0
- package/.output/server/_libs/_60.mjs +2 -0
- package/.output/server/_libs/_61.mjs +2 -0
- package/.output/server/_libs/_62.mjs +2 -0
- package/.output/server/_libs/_63.mjs +2 -0
- package/.output/server/_libs/_64.mjs +2 -0
- package/.output/server/_libs/_65.mjs +2 -0
- package/.output/server/_libs/_66.mjs +2 -0
- package/.output/server/_libs/_67.mjs +2 -0
- package/.output/server/_libs/_68.mjs +2 -0
- package/.output/server/_libs/_69.mjs +2 -0
- package/.output/server/_libs/_70.mjs +2 -0
- package/.output/server/_libs/_71.mjs +2 -0
- package/.output/server/_libs/_72.mjs +2 -0
- package/.output/server/_libs/_73.mjs +2 -0
- package/.output/server/_libs/_74.mjs +2 -0
- package/.output/server/_libs/_75.mjs +2 -0
- package/.output/server/_libs/_76.mjs +2 -0
- package/.output/server/_libs/_77.mjs +2 -0
- package/.output/server/_libs/_78.mjs +2 -0
- package/.output/server/_libs/_79.mjs +2 -0
- package/.output/server/_libs/_80.mjs +2 -0
- package/.output/server/_libs/_81.mjs +2 -0
- package/.output/server/_libs/_82.mjs +2 -0
- package/.output/server/_libs/_83.mjs +2 -0
- package/.output/server/_libs/_84.mjs +2 -0
- package/.output/server/_libs/_85.mjs +2 -0
- package/.output/server/_libs/_86.mjs +2 -0
- package/.output/server/_libs/_87.mjs +2 -0
- package/.output/server/_libs/_88.mjs +2 -0
- package/.output/server/_libs/_89.mjs +2 -0
- package/.output/server/_libs/_90.mjs +2 -0
- package/.output/server/_libs/_91.mjs +2 -0
- package/.output/server/_libs/_92.mjs +2 -0
- package/.output/server/_libs/_93.mjs +2 -0
- package/.output/server/_libs/_94.mjs +2 -0
- package/.output/server/_libs/_95.mjs +2 -0
- package/.output/server/_libs/_96.mjs +2 -0
- package/.output/server/_libs/_97.mjs +2 -0
- package/.output/server/_libs/_98.mjs +2 -0
- package/.output/server/_libs/_99.mjs +5 -0
- package/.output/server/_libs/amdefine.mjs +188 -0
- package/.output/server/_libs/aws-sdk__nested-clients.mjs +1 -1
- package/.output/server/_libs/compressjs.mjs +50 -0
- package/.output/server/_libs/diff.mjs +137 -0
- package/.output/server/_libs/get-uri.mjs +1 -1
- package/.output/server/_libs/http-proxy-agent.mjs +1 -1
- package/.output/server/_libs/https-proxy-agent.mjs +1 -1
- package/.output/server/_libs/just-bash+[...].mjs +80359 -0
- package/.output/server/_libs/md4x.mjs +73 -0
- package/.output/server/_libs/mixmark-io__domino.mjs +14801 -0
- package/.output/server/_libs/node-fetch.mjs +1 -1
- package/.output/server/_libs/node-liblzma.mjs +1107 -0
- package/.output/server/_libs/pac-proxy-agent+[...].mjs +1 -1
- package/.output/server/_libs/proxy-agent+proxy-from-env.mjs +1 -1
- package/.output/server/_libs/smithy__core.mjs +1 -1
- package/.output/server/_routes/api/files/delete.mjs +2 -2
- package/.output/server/_routes/api/files/groups.mjs +14 -0
- package/.output/server/_routes/api/files/raw.mjs +1 -1
- package/.output/server/_routes/api/files/read.mjs +1 -1
- package/.output/server/_routes/api/files/watch.mjs +1 -1
- package/.output/server/_routes/api/files/write.mjs +3 -2
- package/.output/server/_routes/api/files.mjs +1 -1
- package/.output/server/_routes/api/groups.mjs +2 -2
- package/.output/server/_routes/api/groups2.mjs +3 -2
- package/.output/server/_routes/api/health.mjs +2 -2
- package/.output/server/_routes/api/logs.mjs +4 -2
- package/.output/server/_routes/api/ntfy/setup.mjs +54 -0
- package/.output/server/_routes/api/ntfy/status.mjs +12 -0
- package/.output/server/_routes/api/pi/apikey.mjs +1 -1
- package/.output/server/_routes/api/pi/apikey_providers.mjs +1 -1
- package/.output/server/_routes/api/pi/commands.mjs +6 -0
- package/.output/server/_routes/api/pi/login/events.mjs +1 -1
- package/.output/server/_routes/api/pi/login/respond.mjs +1 -1
- package/.output/server/_routes/api/pi/login.mjs +1 -1
- package/.output/server/_routes/api/pi/logout.mjs +1 -1
- package/.output/server/_routes/api/pi/models.mjs +1 -1
- package/.output/server/_routes/api/pi/status.mjs +1 -1
- package/.output/server/_routes/api/send.mjs +22 -3
- package/.output/server/_routes/api/status.mjs +9 -7
- package/.output/server/_routes/api/tasks2.mjs +2 -2
- package/.output/server/_routes/api/telegram/setup.mjs +2 -2
- package/.output/server/_routes/api/telegram/status.mjs +2 -2
- package/.output/server/_routes/api/terminal2.mjs +3 -2
- package/.output/server/_utils.mjs +12 -4
- package/.output/server/build/md4x.wasm +0 -0
- package/.output/server/index.mjs +223 -149
- package/.output/server/node_modules/@mongodb-js/zstd/lib/index.js +55 -0
- package/.output/server/node_modules/@mongodb-js/zstd/package.json +51 -0
- package/.output/server/package.json +1 -0
- package/README.md +118 -24
- package/bin/piclaw.mjs +39 -1
- package/package.json +16 -13
- package/.output/public/assets/client-TIs-Ghqj.js +0 -9
- package/.output/public/assets/dist-BVjfG3ok.js +0 -12
- package/.output/public/assets/dist-DJh8l6yS.js +0 -1
- package/.output/public/assets/index-BNNEMkNV.js +0 -39
- package/.output/public/assets/index-CdWBxO5V.css +0 -1
- 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
|
+
}
|
package/README.md
CHANGED
|
@@ -1,55 +1,148 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./public/icon.svg" alt="PiClaw icon" width="96" height="96" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
PiClaw
|
|
5
|
+
# PiClaw
|
|
4
6
|
|
|
5
|
-
|
|
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
|
-
##
|
|
15
|
+
## 🚀 Quick Start
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
Choose one of the options below.
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
### Option A: Run on host (fastest)
|
|
17
20
|
|
|
18
|
-
|
|
21
|
+
**Prerequisite:** [Node.js](https://nodejs.org/en/download) or [Bun](https://bun.sh/)
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
```sh
|
|
24
|
+
# Node.js
|
|
25
|
+
npx piclaw@latest
|
|
21
26
|
|
|
22
|
-
|
|
27
|
+
# Bun
|
|
28
|
+
bunx piclaw@latest
|
|
29
|
+
```
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
- **Trigger on:** only messages that start with `@assistant-name` are processed
|
|
31
|
+
Then open: **http://localhost:3737**
|
|
26
32
|
|
|
27
|
-
|
|
33
|
+
> [!TIP]
|
|
34
|
+
> PiClaw stores state in `~/.pi/claw`.
|
|
28
35
|
|
|
29
|
-
|
|
36
|
+
### Option B: Run with Docker (recommended)
|
|
30
37
|
|
|
31
|
-
|
|
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
|
-
|
|
40
|
+
This keeps PiClaw isolated from your host environment.
|
|
35
41
|
|
|
36
|
-
|
|
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
|
-
|
|
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
|
-
### ⏰
|
|
129
|
+
### ⏰ Scheduler + automation hooks
|
|
43
130
|
|
|
44
|
-
|
|
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
|
-
### 📲
|
|
135
|
+
### 📲 External channels + notifications
|
|
47
136
|
|
|
48
|
-
|
|
137
|
+
- Telegram bot integration (DMs + groups)
|
|
138
|
+
- Adaptive Telegram streaming throttling
|
|
139
|
+
- ntfy push notifications
|
|
49
140
|
|
|
50
|
-
###
|
|
141
|
+
### 🎨 Personalization
|
|
51
142
|
|
|
52
|
-
|
|
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.
|
|
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-
|
|
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.
|
|
34
|
-
"@visual-json/
|
|
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.
|
|
42
|
-
"nitro": "
|
|
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.
|
|
46
|
-
"oxlint": "^1.
|
|
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
|
}
|