@poolzin/pool-bot 2026.2.1 → 2026.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +118 -0
- package/README-header.png +0 -0
- package/dist/agents/context.js +1 -1
- package/dist/agents/model-catalog.js +1 -1
- package/dist/agents/pi-embedded-runner/compact.js +7 -10
- package/dist/agents/pi-embedded-runner/model.js +1 -1
- package/dist/agents/tools/image-tool.js +1 -1
- package/dist/auto-reply/envelope.js +52 -38
- package/dist/auto-reply/reply/mentions.js +1 -1
- package/dist/build-info.json +2 -2
- package/dist/canvas-host/a2ui/index.html +28 -28
- package/dist/commands/auth-choice.apply.oauth.js +1 -1
- package/dist/commands/models/list.registry.js +1 -1
- package/dist/compat/legacy-names.js +2 -0
- package/dist/config/paths.js +1 -1
- package/dist/control-ui/assets/{index-CIRDm-Lu.css → index-CSfXd2LO.css} +1 -1
- package/dist/control-ui/assets/{index-CmNMuoem.js → index-HRr1grwl.js} +446 -413
- package/dist/control-ui/assets/index-HRr1grwl.js.map +1 -0
- package/dist/control-ui/index.html +4 -4
- package/dist/cron/isolated-agent/run.js +1 -0
- package/dist/gateway/test-helpers.mocks.js +11 -7
- package/dist/infra/format-time/format-datetime.js +1 -1
- package/dist/media/store.js +2 -0
- package/dist/media-understanding/providers/image.js +1 -1
- package/dist/telegram/bot-message-dispatch.js +6 -2
- package/dist/wizard/clack-prompter.js +9 -6
- package/extensions/googlechat/node_modules/.bin/poolbot +21 -0
- package/extensions/googlechat/package.json +2 -2
- package/extensions/line/node_modules/.bin/poolbot +21 -0
- package/extensions/line/package.json +1 -1
- package/extensions/matrix/node_modules/.bin/poolbot +21 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/memory-core/node_modules/.bin/poolbot +21 -0
- package/extensions/memory-core/package.json +4 -1
- package/extensions/twitch/node_modules/.bin/poolbot +21 -0
- package/extensions/twitch/package.json +1 -1
- package/package.json +183 -24
- package/dist/control-ui/assets/index-CmNMuoem.js.map +0 -1
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>Poolbot Control</title>
|
|
7
7
|
<meta name="color-scheme" content="dark light" />
|
|
8
8
|
<link rel="icon" href="./favicon.ico" sizes="any" />
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-HRr1grwl.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CSfXd2LO.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
|
-
<
|
|
13
|
+
<poolbot-app></poolbot-app>
|
|
14
14
|
</body>
|
|
15
15
|
</html>
|
|
@@ -458,6 +458,7 @@ export async function runCronIsolatedAgentTurn(params) {
|
|
|
458
458
|
startedAt: runStartedAt,
|
|
459
459
|
endedAt: runEndedAt,
|
|
460
460
|
outcome: { status: "ok" },
|
|
461
|
+
announceType: "cron job",
|
|
461
462
|
});
|
|
462
463
|
if (!didAnnounce) {
|
|
463
464
|
const message = "cron announce delivery failed";
|
|
@@ -197,17 +197,21 @@ export const testState = {
|
|
|
197
197
|
export const testIsNixMode = hoisted.testIsNixMode;
|
|
198
198
|
export const sessionStoreSaveDelayMs = hoisted.sessionStoreSaveDelayMs;
|
|
199
199
|
export const embeddedRunMock = hoisted.embeddedRunMock;
|
|
200
|
-
vi.mock("
|
|
201
|
-
const actual = await vi.importActual("
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
discoverModels: (...args) => {
|
|
200
|
+
vi.mock("../agents/pi-model-discovery.js", async () => {
|
|
201
|
+
const actual = await vi.importActual("../agents/pi-model-discovery.js");
|
|
202
|
+
class MockModelRegistry extends actual.ModelRegistry {
|
|
203
|
+
getAll() {
|
|
205
204
|
if (!piSdkMock.enabled) {
|
|
206
|
-
return
|
|
205
|
+
return super.getAll();
|
|
207
206
|
}
|
|
208
207
|
piSdkMock.discoverCalls += 1;
|
|
208
|
+
// Cast to expected type for testing purposes
|
|
209
209
|
return piSdkMock.models;
|
|
210
|
-
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
...actual,
|
|
214
|
+
ModelRegistry: MockModelRegistry,
|
|
211
215
|
};
|
|
212
216
|
});
|
|
213
217
|
vi.mock("../cron/isolated-agent.js", () => ({
|
|
@@ -66,7 +66,7 @@ export function formatZonedTimestamp(date, options) {
|
|
|
66
66
|
const min = pick("minute");
|
|
67
67
|
const sec = options?.displaySeconds ? pick("second") : undefined;
|
|
68
68
|
const tz = [...parts]
|
|
69
|
-
.
|
|
69
|
+
.toReversed()
|
|
70
70
|
.find((part) => part.type === "timeZoneName")
|
|
71
71
|
?.value?.trim();
|
|
72
72
|
if (!yyyy || !mm || !dd || !hh || !min) {
|
package/dist/media/store.js
CHANGED
|
@@ -3,6 +3,7 @@ import { createWriteStream } from "node:fs";
|
|
|
3
3
|
import fs from "node:fs/promises";
|
|
4
4
|
import { request as httpRequest } from "node:http";
|
|
5
5
|
import { request as httpsRequest } from "node:https";
|
|
6
|
+
import os from "node:os";
|
|
6
7
|
import path from "node:path";
|
|
7
8
|
import { pipeline } from "node:stream/promises";
|
|
8
9
|
import { resolveConfigDir } from "../utils.js";
|
|
@@ -24,6 +25,7 @@ const DEFAULT_TTL_MS = 2 * 60 * 1000; // 2 minutes
|
|
|
24
25
|
const SAFE_PATHS = [
|
|
25
26
|
"/tmp",
|
|
26
27
|
"/var/tmp",
|
|
28
|
+
os.tmpdir(), // OS-specific temp directory (e.g. /private/var/folders/... on macOS)
|
|
27
29
|
process.cwd(), // Current working directory
|
|
28
30
|
resolveConfigDir(), // PoolBot config directory
|
|
29
31
|
];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { complete } from "@mariozechner/pi-ai";
|
|
2
|
-
import { discoverAuthStorage, discoverModels } from "
|
|
2
|
+
import { discoverAuthStorage, discoverModels } from "../../agents/pi-model-discovery.js";
|
|
3
3
|
import { getApiKeyForModel, requireApiKey } from "../../agents/model-auth.js";
|
|
4
4
|
import { ensurePoolbotModelsJson } from "../../agents/models-config.js";
|
|
5
5
|
import { minimaxUnderstandImage } from "../../agents/minimax-vlm.js";
|
|
@@ -172,7 +172,10 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
|
|
|
172
172
|
? ctxPayload.ReplyToBody.trim() || undefined
|
|
173
173
|
: undefined;
|
|
174
174
|
void _replyQuoteText;
|
|
175
|
-
const
|
|
175
|
+
const deliveryState = {
|
|
176
|
+
delivered: false,
|
|
177
|
+
};
|
|
178
|
+
const { queuedFinal, counts } = await dispatchReplyWithBufferedBlockDispatcher({
|
|
176
179
|
ctx: ctxPayload,
|
|
177
180
|
cfg,
|
|
178
181
|
dispatcherOptions: {
|
|
@@ -197,6 +200,7 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
|
|
|
197
200
|
onVoiceRecording: sendRecordVoice,
|
|
198
201
|
linkPreview: telegramCfg.linkPreview,
|
|
199
202
|
});
|
|
203
|
+
deliveryState.delivered = true;
|
|
200
204
|
},
|
|
201
205
|
onError: (err, info) => {
|
|
202
206
|
runtime.error?.(danger(`telegram ${info.kind} reply failed: ${String(err)}`));
|
|
@@ -230,7 +234,7 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
|
|
|
230
234
|
});
|
|
231
235
|
draftStream?.stop();
|
|
232
236
|
let sentFallback = false;
|
|
233
|
-
if (!
|
|
237
|
+
if (!deliveryState.delivered && (counts.tool + counts.block + counts.final) > 0) {
|
|
234
238
|
try {
|
|
235
239
|
await deliverReplies({
|
|
236
240
|
replies: [{ text: EMPTY_RESPONSE_FALLBACK }],
|
|
@@ -38,12 +38,15 @@ export function createClackPrompter() {
|
|
|
38
38
|
}),
|
|
39
39
|
initialValues: params.initialValues,
|
|
40
40
|
})),
|
|
41
|
-
text: async (params) =>
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
text: async (params) => {
|
|
42
|
+
const validate = params.validate;
|
|
43
|
+
return guardCancel(await text({
|
|
44
|
+
message: stylePromptMessage(params.message),
|
|
45
|
+
initialValue: params.initialValue,
|
|
46
|
+
placeholder: params.placeholder,
|
|
47
|
+
validate: validate ? (value) => validate(value ?? "") : undefined,
|
|
48
|
+
}));
|
|
49
|
+
},
|
|
47
50
|
confirm: async (params) => guardCancel(await confirm({
|
|
48
51
|
message: stylePromptMessage(params.message),
|
|
49
52
|
initialValue: params.initialValue,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -z "$NODE_PATH" ]; then
|
|
13
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
|
|
14
|
+
else
|
|
15
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
+
fi
|
|
17
|
+
if [ -x "$basedir/node" ]; then
|
|
18
|
+
exec "$basedir/node" "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
19
|
+
else
|
|
20
|
+
exec node "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
21
|
+
fi
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -z "$NODE_PATH" ]; then
|
|
13
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
|
|
14
|
+
else
|
|
15
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
+
fi
|
|
17
|
+
if [ -x "$basedir/node" ]; then
|
|
18
|
+
exec "$basedir/node" "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
19
|
+
else
|
|
20
|
+
exec node "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
21
|
+
fi
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -z "$NODE_PATH" ]; then
|
|
13
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
|
|
14
|
+
else
|
|
15
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
+
fi
|
|
17
|
+
if [ -x "$basedir/node" ]; then
|
|
18
|
+
exec "$basedir/node" "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
19
|
+
else
|
|
20
|
+
exec node "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
21
|
+
fi
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -z "$NODE_PATH" ]; then
|
|
13
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
|
|
14
|
+
else
|
|
15
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
+
fi
|
|
17
|
+
if [ -x "$basedir/node" ]; then
|
|
18
|
+
exec "$basedir/node" "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
19
|
+
else
|
|
20
|
+
exec node "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
21
|
+
fi
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
|
|
3
|
+
|
|
4
|
+
case `uname` in
|
|
5
|
+
*CYGWIN*|*MINGW*|*MSYS*)
|
|
6
|
+
if command -v cygpath > /dev/null 2>&1; then
|
|
7
|
+
basedir=`cygpath -w "$basedir"`
|
|
8
|
+
fi
|
|
9
|
+
;;
|
|
10
|
+
esac
|
|
11
|
+
|
|
12
|
+
if [ -z "$NODE_PATH" ]; then
|
|
13
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules"
|
|
14
|
+
else
|
|
15
|
+
export NODE_PATH="/Users/pool/Documents/GitHub/pool-bot/dist/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules:/Users/pool/Documents/GitHub/node_modules:/Users/pool/Documents/node_modules:/Users/pool/node_modules:/Users/node_modules:/node_modules:/Users/pool/Documents/GitHub/pool-bot/node_modules/.pnpm/node_modules:$NODE_PATH"
|
|
16
|
+
fi
|
|
17
|
+
if [ -x "$basedir/node" ]; then
|
|
18
|
+
exec "$basedir/node" "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
19
|
+
else
|
|
20
|
+
exec node "$basedir/../@poolzin/pool-bot/dist/entry.js" "$@"
|
|
21
|
+
fi
|
package/package.json
CHANGED
|
@@ -1,7 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@poolzin/pool-bot",
|
|
3
|
-
"version": "2026.2.
|
|
3
|
+
"version": "2026.2.2",
|
|
4
4
|
"description": "🎱 Pool Bot - AI assistant with PLCODE integrations",
|
|
5
|
+
"keywords": [],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "",
|
|
8
|
+
"bin": {
|
|
9
|
+
"poolbot": "dist/entry.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"assets/",
|
|
13
|
+
"CHANGELOG.md",
|
|
14
|
+
"dist/",
|
|
15
|
+
"docs/",
|
|
16
|
+
"extensions/",
|
|
17
|
+
"LICENSE",
|
|
18
|
+
"patches/",
|
|
19
|
+
"README-header.png",
|
|
20
|
+
"README.md",
|
|
21
|
+
"skills/"
|
|
22
|
+
],
|
|
5
23
|
"type": "module",
|
|
6
24
|
"main": "dist/index.js",
|
|
7
25
|
"exports": {
|
|
@@ -10,38 +28,179 @@
|
|
|
10
28
|
"./plugin-sdk/*": "./dist/plugin-sdk/*",
|
|
11
29
|
"./cli-entry": "./dist/entry.js"
|
|
12
30
|
},
|
|
13
|
-
"bin": {
|
|
14
|
-
"poolbot": "dist/entry.js"
|
|
15
|
-
},
|
|
16
|
-
"files": [
|
|
17
|
-
"dist/**",
|
|
18
|
-
"docs/**",
|
|
19
|
-
"extensions/**",
|
|
20
|
-
"assets/**",
|
|
21
|
-
"skills/**",
|
|
22
|
-
"patches/**",
|
|
23
|
-
"README.md",
|
|
24
|
-
"LICENSE",
|
|
25
|
-
"package.json"
|
|
26
|
-
],
|
|
27
31
|
"scripts": {
|
|
32
|
+
"android:assemble": "cd apps/android && ./gradlew :app:assembleDebug",
|
|
33
|
+
"android:install": "cd apps/android && ./gradlew :app:installDebug",
|
|
34
|
+
"android:run": "cd apps/android && ./gradlew :app:installDebug && adb shell am start -n ai.openclaw.android/.MainActivity",
|
|
35
|
+
"android:test": "cd apps/android && ./gradlew :app:testDebugUnitTest",
|
|
36
|
+
"build": "tsc -p tsconfig.json && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts",
|
|
37
|
+
"canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
|
|
38
|
+
"check": "pnpm format:check && pnpm build && pnpm lint",
|
|
39
|
+
"check:docs": "pnpm format:docs:check && pnpm lint:docs && pnpm docs:check-links",
|
|
40
|
+
"check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500",
|
|
28
41
|
"dev": "node scripts/run-node.mjs",
|
|
29
|
-
"
|
|
42
|
+
"docs:bin": "node scripts/build-docs-list.mjs",
|
|
43
|
+
"docs:check-links": "node scripts/docs-link-audit.mjs",
|
|
44
|
+
"docs:dev": "cd docs && mint dev",
|
|
45
|
+
"docs:list": "node scripts/docs-list.js",
|
|
46
|
+
"format": "oxfmt --write",
|
|
47
|
+
"format:all": "pnpm format && pnpm format:swift",
|
|
48
|
+
"format:check": "oxfmt --check",
|
|
49
|
+
"format:docs": "git ls-files 'docs/**/*.md' 'docs/**/*.mdx' 'README.md' | xargs oxfmt --write",
|
|
50
|
+
"format:docs:check": "git ls-files 'docs/**/*.md' 'docs/**/*.mdx' 'README.md' | xargs oxfmt --check",
|
|
51
|
+
"format:swift": "swiftformat --lint --config .swiftformat apps/macos/Sources apps/ios/Sources apps/shared/OpenClawKit/Sources",
|
|
52
|
+
"gateway:dev": "POOLBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
|
|
53
|
+
"gateway:dev:reset": "POOLBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
|
|
54
|
+
"gateway:watch": "node scripts/watch-node.mjs gateway --force",
|
|
55
|
+
"ios:build": "bash -lc 'cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build'",
|
|
56
|
+
"ios:gen": "cd apps/ios && xcodegen generate",
|
|
57
|
+
"ios:open": "cd apps/ios && xcodegen generate && open OpenClaw.xcodeproj",
|
|
58
|
+
"ios:run": "bash -lc 'cd apps/ios && xcodegen generate && xcodebuild -project OpenClaw.xcodeproj -scheme OpenClaw -destination \"${IOS_DEST:-platform=iOS Simulator,name=iPhone 17}\" -configuration Debug build && xcrun simctl boot \"${IOS_SIM:-iPhone 17}\" || true && xcrun simctl launch booted ai.openclaw.ios'",
|
|
59
|
+
"lint": "oxlint --type-aware",
|
|
60
|
+
"lint:all": "pnpm lint && pnpm lint:swift",
|
|
61
|
+
"lint:docs": "pnpm dlx markdownlint-cli2",
|
|
62
|
+
"lint:docs:fix": "pnpm dlx markdownlint-cli2 --fix",
|
|
63
|
+
"lint:fix": "oxlint --type-aware --fix && pnpm format",
|
|
64
|
+
"lint:swift": "swiftlint lint --config .swiftlint.yml && (cd apps/ios && swiftlint lint --config .swiftlint.yml)",
|
|
65
|
+
"mac:open": "open dist/PoolBot.app",
|
|
66
|
+
"mac:package": "bash scripts/package-mac-app.sh",
|
|
67
|
+
"mac:restart": "bash scripts/restart-mac.sh",
|
|
68
|
+
"plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
|
|
69
|
+
"poolbot": "node scripts/run-node.mjs",
|
|
70
|
+
"poolbot:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
|
|
71
|
+
"prepack": "pnpm build && pnpm ui:build",
|
|
72
|
+
"prepare": "command -v git >/dev/null 2>&1 && git config core.hooksPath git-hooks || exit 0",
|
|
73
|
+
"protocol:check": "pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/OpenClawProtocol/GatewayModels.swift",
|
|
74
|
+
"protocol:gen": "node --import tsx scripts/protocol-gen.ts",
|
|
75
|
+
"protocol:gen:swift": "node --import tsx scripts/protocol-gen-swift.ts",
|
|
76
|
+
"release:check": "node --import tsx scripts/release-check.ts",
|
|
30
77
|
"start": "node scripts/run-node.mjs",
|
|
31
|
-
"
|
|
32
|
-
"test": "
|
|
78
|
+
"test": "node scripts/test-parallel.mjs",
|
|
79
|
+
"test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
|
|
80
|
+
"test:coverage": "vitest run --coverage",
|
|
81
|
+
"test:docker:all": "pnpm test:docker:live-models && pnpm test:docker:live-gateway && pnpm test:docker:onboard && pnpm test:docker:gateway-network && pnpm test:docker:qr && pnpm test:docker:doctor-switch && pnpm test:docker:plugins && pnpm test:docker:cleanup",
|
|
82
|
+
"test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
|
|
83
|
+
"test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
|
|
84
|
+
"test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
|
|
85
|
+
"test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
|
|
86
|
+
"test:docker:live-models": "bash scripts/test-live-models-docker.sh",
|
|
87
|
+
"test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
|
|
88
|
+
"test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
|
|
89
|
+
"test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
|
|
90
|
+
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
91
|
+
"test:force": "node --import tsx scripts/test-force.ts",
|
|
92
|
+
"test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
|
|
93
|
+
"test:live": "POOLBOT_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
|
|
94
|
+
"test:ui": "pnpm --dir ui test",
|
|
95
|
+
"test:watch": "vitest",
|
|
96
|
+
"tui": "node scripts/run-node.mjs tui",
|
|
97
|
+
"tui:dev": "POOLBOT_PROFILE=dev node scripts/run-node.mjs --dev tui",
|
|
98
|
+
"ui:build": "node scripts/ui.js build",
|
|
99
|
+
"ui:dev": "node scripts/ui.js dev",
|
|
100
|
+
"ui:install": "node scripts/ui.js install"
|
|
33
101
|
},
|
|
34
102
|
"dependencies": {
|
|
35
|
-
"@
|
|
36
|
-
"@
|
|
37
|
-
"@
|
|
38
|
-
"
|
|
103
|
+
"@agentclientprotocol/sdk": "0.14.1",
|
|
104
|
+
"@aws-sdk/client-bedrock": "^3.986.0",
|
|
105
|
+
"@buape/carbon": "0.14.0",
|
|
106
|
+
"@clack/prompts": "^1.0.0",
|
|
107
|
+
"@grammyjs/runner": "^2.0.3",
|
|
108
|
+
"@grammyjs/transformer-throttler": "^1.2.1",
|
|
109
|
+
"@homebridge/ciao": "^1.3.5",
|
|
110
|
+
"@larksuiteoapi/node-sdk": "^1.58.0",
|
|
111
|
+
"@line/bot-sdk": "^10.6.0",
|
|
112
|
+
"@lydell/node-pty": "1.2.0-beta.3",
|
|
113
|
+
"@mariozechner/pi-agent-core": "0.52.9",
|
|
114
|
+
"@mariozechner/pi-ai": "0.52.9",
|
|
115
|
+
"@mariozechner/pi-coding-agent": "0.52.9",
|
|
116
|
+
"@mariozechner/pi-tui": "0.52.9",
|
|
117
|
+
"@mozilla/readability": "^0.6.0",
|
|
118
|
+
"@sinclair/typebox": "0.34.48",
|
|
119
|
+
"@slack/bolt": "^4.6.0",
|
|
120
|
+
"@slack/web-api": "^7.13.0",
|
|
121
|
+
"@whiskeysockets/baileys": "7.0.0-rc.9",
|
|
122
|
+
"ajv": "^8.17.1",
|
|
123
|
+
"chalk": "^5.6.2",
|
|
124
|
+
"chokidar": "^5.0.0",
|
|
125
|
+
"cli-highlight": "^2.1.11",
|
|
126
|
+
"commander": "^14.0.3",
|
|
127
|
+
"croner": "^10.0.1",
|
|
128
|
+
"discord-api-types": "^0.38.38",
|
|
129
|
+
"dotenv": "^17.2.4",
|
|
130
|
+
"express": "^5.2.1",
|
|
131
|
+
"file-type": "^21.3.0",
|
|
132
|
+
"grammy": "^1.40.0",
|
|
133
|
+
"jiti": "^2.6.1",
|
|
134
|
+
"json5": "^2.2.3",
|
|
135
|
+
"jszip": "^3.10.1",
|
|
136
|
+
"linkedom": "^0.18.12",
|
|
137
|
+
"long": "^5.3.2",
|
|
138
|
+
"markdown-it": "^14.1.0",
|
|
139
|
+
"node-edge-tts": "^1.2.10",
|
|
140
|
+
"osc-progress": "^0.3.0",
|
|
141
|
+
"pdfjs-dist": "^5.4.624",
|
|
142
|
+
"playwright-core": "1.58.2",
|
|
143
|
+
"proper-lockfile": "^4.1.2",
|
|
144
|
+
"qrcode-terminal": "^0.12.0",
|
|
145
|
+
"sharp": "^0.34.5",
|
|
146
|
+
"signal-utils": "^0.21.1",
|
|
147
|
+
"sqlite-vec": "0.1.7-alpha.2",
|
|
148
|
+
"tar": "7.5.7",
|
|
149
|
+
"tslog": "^4.10.2",
|
|
150
|
+
"undici": "^7.21.0",
|
|
151
|
+
"ws": "^8.19.0",
|
|
152
|
+
"yaml": "^2.8.2",
|
|
153
|
+
"zod": "^4.3.6"
|
|
39
154
|
},
|
|
40
155
|
"devDependencies": {
|
|
156
|
+
"@grammyjs/types": "^3.24.0",
|
|
157
|
+
"@lit-labs/signals": "^0.2.0",
|
|
158
|
+
"@lit/context": "^1.1.6",
|
|
159
|
+
"@types/express": "^5.0.6",
|
|
160
|
+
"@types/markdown-it": "^14.1.2",
|
|
161
|
+
"@types/node": "^25.2.2",
|
|
162
|
+
"@types/proper-lockfile": "^4.1.4",
|
|
163
|
+
"@types/qrcode-terminal": "^0.12.2",
|
|
164
|
+
"@types/ws": "^8.18.1",
|
|
165
|
+
"@typescript/native-preview": "7.0.0-dev.20260209.1",
|
|
166
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
167
|
+
"lit": "^3.3.2",
|
|
168
|
+
"ollama": "^0.6.3",
|
|
169
|
+
"oxfmt": "0.28.0",
|
|
170
|
+
"oxlint": "^1.43.0",
|
|
171
|
+
"oxlint-tsgolint": "^0.11.5",
|
|
172
|
+
"tsx": "^4.21.0",
|
|
41
173
|
"typescript": "^5.9.3",
|
|
42
|
-
"vitest": "^4.0.
|
|
174
|
+
"vitest": "^4.0.18"
|
|
175
|
+
},
|
|
176
|
+
"peerDependencies": {
|
|
177
|
+
"@napi-rs/canvas": "^0.1.89",
|
|
178
|
+
"node-llama-cpp": "3.15.1"
|
|
43
179
|
},
|
|
44
180
|
"engines": {
|
|
45
181
|
"node": ">=22.12.0"
|
|
182
|
+
},
|
|
183
|
+
"packageManager": "pnpm@10.23.0",
|
|
184
|
+
"pnpm": {
|
|
185
|
+
"minimumReleaseAge": 2880,
|
|
186
|
+
"overrides": {
|
|
187
|
+
"fast-xml-parser": "5.3.4",
|
|
188
|
+
"form-data": "2.5.4",
|
|
189
|
+
"qs": "6.14.1",
|
|
190
|
+
"@sinclair/typebox": "0.34.48",
|
|
191
|
+
"tar": "7.5.7",
|
|
192
|
+
"tough-cookie": "4.1.3"
|
|
193
|
+
},
|
|
194
|
+
"onlyBuiltDependencies": [
|
|
195
|
+
"@lydell/node-pty",
|
|
196
|
+
"@matrix-org/matrix-sdk-crypto-nodejs",
|
|
197
|
+
"@napi-rs/canvas",
|
|
198
|
+
"@whiskeysockets/baileys",
|
|
199
|
+
"authenticate-pam",
|
|
200
|
+
"esbuild",
|
|
201
|
+
"node-llama-cpp",
|
|
202
|
+
"protobufjs",
|
|
203
|
+
"sharp"
|
|
204
|
+
]
|
|
46
205
|
}
|
|
47
|
-
}
|
|
206
|
+
}
|