2025-11-24 11:23:15 +01:00
|
|
|
{
|
2026-01-30 03:15:10 +01:00
|
|
|
"name": "openclaw",
|
2026-02-03 18:33:27 -08:00
|
|
|
"version": "2026.2.3",
|
2025-12-09 17:51:05 +00:00
|
|
|
"description": "WhatsApp gateway CLI (Baileys web) with Pi RPC agent",
|
2026-01-31 21:13:13 +09:00
|
|
|
"keywords": [],
|
|
|
|
|
"license": "MIT",
|
|
|
|
|
"author": "",
|
2025-11-24 11:23:15 +01:00
|
|
|
"bin": {
|
2026-01-31 14:20:58 +01:00
|
|
|
"openclaw": "openclaw.mjs"
|
2025-11-24 11:23:15 +01:00
|
|
|
},
|
2025-12-21 03:48:23 +01:00
|
|
|
"files": [
|
2026-02-03 22:04:17 +09:00
|
|
|
"assets/",
|
2026-01-31 20:20:17 -06:00
|
|
|
"CHANGELOG.md",
|
2026-02-03 22:04:17 +09:00
|
|
|
"dist/",
|
|
|
|
|
"docs/",
|
|
|
|
|
"extensions/",
|
2026-01-31 20:20:17 -06:00
|
|
|
"LICENSE",
|
|
|
|
|
"openclaw.mjs",
|
|
|
|
|
"README-header.png",
|
|
|
|
|
"README.md",
|
2026-02-03 22:04:17 +09:00
|
|
|
"skills/"
|
2025-12-21 03:48:23 +01:00
|
|
|
],
|
2026-01-31 21:13:13 +09:00
|
|
|
"type": "module",
|
|
|
|
|
"main": "dist/index.js",
|
|
|
|
|
"exports": {
|
|
|
|
|
".": "./dist/index.js",
|
|
|
|
|
"./plugin-sdk": "./dist/plugin-sdk/index.js",
|
|
|
|
|
"./cli-entry": "./openclaw.mjs"
|
|
|
|
|
},
|
2025-11-24 11:23:15 +01:00
|
|
|
"scripts": {
|
2026-01-31 23:19:40 +09:00
|
|
|
"android:assemble": "cd apps/android && ./gradlew :app:assembleDebug",
|
|
|
|
|
"android:install": "cd apps/android && ./gradlew :app:installDebug",
|
|
|
|
|
"android:run": "cd apps/android && ./gradlew :app:installDebug && adb shell am start -n ai.openclaw.android/.MainActivity",
|
|
|
|
|
"android:test": "cd apps/android && ./gradlew :app:testDebugUnitTest",
|
2026-02-03 18:04:42 -08:00
|
|
|
"build": "pnpm canvas:a2ui:bundle && tsdown && node --import tsx scripts/canvas-a2ui-copy.ts && node --import tsx scripts/copy-hook-metadata.ts && node --import tsx scripts/write-build-info.ts && node --import tsx scripts/write-cli-compat.ts",
|
2026-01-31 23:19:40 +09:00
|
|
|
"canvas:a2ui:bundle": "bash scripts/bundle-a2ui.sh",
|
2026-02-02 11:14:27 +09:00
|
|
|
"check": "pnpm tsgo && pnpm lint && pnpm format",
|
2026-01-31 23:19:40 +09:00
|
|
|
"check:loc": "node --import tsx scripts/check-ts-max-loc.ts --max 500",
|
2026-01-18 18:21:13 +00:00
|
|
|
"dev": "node scripts/run-node.mjs",
|
2026-01-18 18:46:18 +00:00
|
|
|
"docs:bin": "node scripts/build-docs-list.mjs",
|
2026-01-10 16:04:03 +00:00
|
|
|
"docs:build": "cd docs && pnpm dlx --reporter append-only mint broken-links",
|
2026-01-31 23:19:40 +09:00
|
|
|
"docs:dev": "cd docs && mint dev",
|
|
|
|
|
"docs:list": "node scripts/docs-list.js",
|
|
|
|
|
"format": "oxfmt --check",
|
|
|
|
|
"format:all": "pnpm format && pnpm format:swift",
|
|
|
|
|
"format:fix": "oxfmt --write",
|
|
|
|
|
"format:swift": "swiftformat --lint --config .swiftformat apps/macos/Sources apps/ios/Sources apps/shared/OpenClawKit/Sources",
|
2026-01-30 03:15:10 +01:00
|
|
|
"gateway:dev": "OPENCLAW_SKIP_CHANNELS=1 CLAWDBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway",
|
|
|
|
|
"gateway:dev:reset": "OPENCLAW_SKIP_CHANNELS=1 CLAWDBOT_SKIP_CHANNELS=1 node scripts/run-node.mjs --dev gateway --reset",
|
2026-01-31 23:19:40 +09:00
|
|
|
"gateway:watch": "node scripts/watch-node.mjs gateway --force",
|
|
|
|
|
"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'",
|
2026-01-09 19:38:48 +00:00
|
|
|
"ios:gen": "cd apps/ios && xcodegen generate",
|
2026-01-30 03:15:10 +01:00
|
|
|
"ios:open": "cd apps/ios && xcodegen generate && open OpenClaw.xcodeproj",
|
|
|
|
|
"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'",
|
2026-02-03 21:44:54 +09:00
|
|
|
"lint": "oxlint --type-aware",
|
2026-01-09 19:38:48 +00:00
|
|
|
"lint:all": "pnpm lint && pnpm lint:swift",
|
2026-02-03 21:44:54 +09:00
|
|
|
"lint:fix": "oxlint --type-aware --fix && pnpm format:fix",
|
2026-01-31 23:19:40 +09:00
|
|
|
"lint:swift": "swiftlint lint --config .swiftlint.yml && (cd apps/ios && swiftlint lint --config .swiftlint.yml)",
|
|
|
|
|
"mac:open": "open dist/OpenClaw.app",
|
|
|
|
|
"mac:package": "bash scripts/package-mac-app.sh",
|
|
|
|
|
"mac:restart": "bash scripts/restart-mac.sh",
|
|
|
|
|
"moltbot:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
|
|
|
|
|
"openclaw": "node scripts/run-node.mjs",
|
|
|
|
|
"openclaw:rpc": "node scripts/run-node.mjs agent --mode rpc --json",
|
|
|
|
|
"plugins:sync": "node --import tsx scripts/sync-plugin-versions.ts",
|
|
|
|
|
"prepack": "pnpm build && pnpm ui:build",
|
2026-02-03 22:07:43 +09:00
|
|
|
"prepare": "command -v git >/dev/null 2>&1 && git config core.hooksPath git-hooks || exit 0",
|
2026-01-31 23:19:40 +09:00
|
|
|
"protocol:check": "pnpm protocol:gen && pnpm protocol:gen:swift && git diff --exit-code -- dist/protocol.schema.json apps/macos/Sources/OpenClawProtocol/GatewayModels.swift",
|
|
|
|
|
"protocol:gen": "node --import tsx scripts/protocol-gen.ts",
|
|
|
|
|
"protocol:gen:swift": "node --import tsx scripts/protocol-gen-swift.ts",
|
|
|
|
|
"release:check": "node --import tsx scripts/release-check.ts",
|
|
|
|
|
"start": "node scripts/run-node.mjs",
|
2026-01-23 07:34:50 +00:00
|
|
|
"test": "node scripts/test-parallel.mjs",
|
2026-01-31 23:19:40 +09:00
|
|
|
"test:all": "pnpm lint && pnpm build && pnpm test && pnpm test:e2e && pnpm test:live && pnpm test:docker:all",
|
2025-12-07 17:44:37 +01:00
|
|
|
"test:coverage": "vitest run --coverage",
|
2026-01-31 23:19:40 +09:00
|
|
|
"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",
|
|
|
|
|
"test:docker:cleanup": "bash scripts/test-cleanup-docker.sh",
|
|
|
|
|
"test:docker:doctor-switch": "bash scripts/e2e/doctor-install-switch-docker.sh",
|
2026-01-10 04:14:28 +00:00
|
|
|
"test:docker:gateway-network": "bash scripts/e2e/gateway-network-docker.sh",
|
2026-01-10 03:06:07 +00:00
|
|
|
"test:docker:live-gateway": "bash scripts/test-live-gateway-models-docker.sh",
|
2026-01-31 23:19:40 +09:00
|
|
|
"test:docker:live-models": "bash scripts/test-live-models-docker.sh",
|
|
|
|
|
"test:docker:onboard": "bash scripts/e2e/onboard-docker.sh",
|
2026-01-11 12:21:45 +00:00
|
|
|
"test:docker:plugins": "bash scripts/e2e/plugins-docker.sh",
|
2026-01-31 23:19:40 +09:00
|
|
|
"test:docker:qr": "bash scripts/e2e/qr-import-docker.sh",
|
|
|
|
|
"test:e2e": "vitest run --config vitest.e2e.config.ts",
|
|
|
|
|
"test:force": "node --import tsx scripts/test-force.ts",
|
2026-01-11 10:20:50 +00:00
|
|
|
"test:install:e2e": "bash scripts/test-install-sh-e2e-docker.sh",
|
2026-01-30 03:15:10 +01:00
|
|
|
"test:install:e2e:anthropic": "OPENCLAW_E2E_MODELS=anthropic CLAWDBOT_E2E_MODELS=anthropic bash scripts/test-install-sh-e2e-docker.sh",
|
2026-01-31 23:19:40 +09:00
|
|
|
"test:install:e2e:openai": "OPENCLAW_E2E_MODELS=openai CLAWDBOT_E2E_MODELS=openai bash scripts/test-install-sh-e2e-docker.sh",
|
|
|
|
|
"test:install:smoke": "bash scripts/test-install-sh-docker.sh",
|
|
|
|
|
"test:live": "OPENCLAW_LIVE_TEST=1 CLAWDBOT_LIVE_TEST=1 vitest run --config vitest.live.config.ts",
|
|
|
|
|
"test:ui": "pnpm --dir ui test",
|
|
|
|
|
"test:watch": "vitest",
|
|
|
|
|
"tui": "node scripts/run-node.mjs tui",
|
|
|
|
|
"tui:dev": "OPENCLAW_PROFILE=dev CLAWDBOT_PROFILE=dev node scripts/run-node.mjs --dev tui",
|
|
|
|
|
"ui:build": "node scripts/ui.js build",
|
|
|
|
|
"ui:dev": "node scripts/ui.js dev",
|
|
|
|
|
"ui:install": "node scripts/ui.js install"
|
2025-11-24 11:23:15 +01:00
|
|
|
},
|
|
|
|
|
"dependencies": {
|
2026-01-24 10:30:21 +00:00
|
|
|
"@agentclientprotocol/sdk": "0.13.1",
|
2026-02-03 09:08:52 +09:00
|
|
|
"@aws-sdk/client-bedrock": "^3.981.0",
|
2026-01-21 11:36:56 -06:00
|
|
|
"@buape/carbon": "0.14.0",
|
2026-01-31 06:40:45 +01:00
|
|
|
"@clack/prompts": "^1.0.0",
|
2026-01-07 05:34:37 +00:00
|
|
|
"@grammyjs/runner": "^2.0.3",
|
2026-01-02 23:47:28 +01:00
|
|
|
"@grammyjs/transformer-throttler": "^1.2.1",
|
2025-12-13 03:47:27 +00:00
|
|
|
"@homebridge/ciao": "^1.3.4",
|
2026-02-03 14:27:13 -08:00
|
|
|
"@larksuiteoapi/node-sdk": "^1.42.0",
|
2026-01-25 07:22:36 -05:00
|
|
|
"@line/bot-sdk": "^10.6.0",
|
2026-01-17 04:57:04 +00:00
|
|
|
"@lydell/node-pty": "1.2.0-beta.3",
|
2026-02-04 17:12:16 -05:00
|
|
|
"@mariozechner/pi-agent-core": "0.51.3",
|
|
|
|
|
"@mariozechner/pi-ai": "0.51.3",
|
|
|
|
|
"@mariozechner/pi-coding-agent": "0.51.3",
|
|
|
|
|
"@mariozechner/pi-tui": "0.51.3",
|
2026-01-16 23:17:55 +00:00
|
|
|
"@mozilla/readability": "^0.6.0",
|
2026-01-31 16:25:44 +09:00
|
|
|
"@sinclair/typebox": "0.34.48",
|
2026-01-05 05:27:58 +01:00
|
|
|
"@slack/bolt": "^4.6.0",
|
|
|
|
|
"@slack/web-api": "^7.13.0",
|
2025-12-07 17:44:37 +01:00
|
|
|
"@whiskeysockets/baileys": "7.0.0-rc.9",
|
2025-12-09 14:41:41 +01:00
|
|
|
"ajv": "^8.17.1",
|
2025-11-24 11:59:10 +01:00
|
|
|
"chalk": "^5.6.2",
|
2025-12-20 22:44:58 +00:00
|
|
|
"chokidar": "^5.0.0",
|
feat(tui): add syntax highlighting for code blocks
Add syntax highlighting to markdown code blocks in the TUI using
cli-highlight with a VS Code Dark-inspired color theme.
Features:
- 191 languages supported via highlight.js
- Auto-detection fallback for unknown languages
- Graceful fallback to plain styling on errors
- VS Code Dark-inspired color palette
Colors:
- Purple: keywords (const, function, if, etc.)
- Teal: built-ins (console, Math, print, etc.)
- Orange: strings
- Green: numbers, comments
- Yellow: function names
- Blue: literals (true, false, null)
- Red: diff deletions
- Light blue: variables, parameters
🤖 AI-assisted (Claude) - fully tested locally
2026-01-18 16:24:14 -08:00
|
|
|
"cli-highlight": "^2.1.11",
|
2026-01-31 06:40:45 +01:00
|
|
|
"commander": "^14.0.3",
|
2026-02-02 11:03:43 +09:00
|
|
|
"croner": "^10.0.1",
|
2026-01-31 06:40:45 +01:00
|
|
|
"discord-api-types": "^0.38.38",
|
2025-11-24 11:23:15 +01:00
|
|
|
"dotenv": "^17.2.3",
|
2025-12-07 18:49:55 +01:00
|
|
|
"express": "^5.2.1",
|
2026-01-05 05:27:58 +01:00
|
|
|
"file-type": "^21.3.0",
|
2026-01-18 14:15:32 +00:00
|
|
|
"grammy": "^1.39.3",
|
2026-02-01 14:29:45 -08:00
|
|
|
"hono": "4.11.7",
|
2026-01-11 12:11:12 +00:00
|
|
|
"jiti": "^2.6.1",
|
2025-11-24 11:23:15 +01:00
|
|
|
"json5": "^2.2.3",
|
2026-01-17 07:08:04 +00:00
|
|
|
"jszip": "^3.10.1",
|
2026-01-16 23:17:55 +00:00
|
|
|
"linkedom": "^0.18.12",
|
2026-01-31 17:12:28 +09:00
|
|
|
"long": "^5.3.2",
|
2026-01-08 09:25:11 +01:00
|
|
|
"markdown-it": "^14.1.0",
|
2026-01-25 01:05:23 +00:00
|
|
|
"node-edge-tts": "^1.2.9",
|
2026-01-20 12:58:49 +00:00
|
|
|
"osc-progress": "^0.3.0",
|
2026-02-02 11:03:43 +09:00
|
|
|
"pdfjs-dist": "^5.4.624",
|
2026-01-31 06:40:45 +01:00
|
|
|
"playwright-core": "1.58.1",
|
2026-01-06 05:33:08 +01:00
|
|
|
"proper-lockfile": "^4.1.2",
|
2025-11-24 17:51:18 +01:00
|
|
|
"qrcode-terminal": "^0.12.0",
|
2025-12-07 18:49:55 +01:00
|
|
|
"sharp": "^0.34.5",
|
2026-01-31 17:15:03 +09:00
|
|
|
"signal-utils": "^0.21.1",
|
2026-01-17 18:02:25 +00:00
|
|
|
"sqlite-vec": "0.1.7-alpha.2",
|
2026-01-31 16:25:44 +09:00
|
|
|
"tar": "7.5.7",
|
2025-12-07 22:53:36 +01:00
|
|
|
"tslog": "^4.10.2",
|
2026-02-02 11:03:43 +09:00
|
|
|
"undici": "^7.20.0",
|
2026-01-05 22:52:13 +00:00
|
|
|
"ws": "^8.19.0",
|
2026-01-17 19:48:26 +00:00
|
|
|
"yaml": "^2.8.2",
|
2026-01-24 10:30:21 +00:00
|
|
|
"zod": "^4.3.6"
|
2025-11-24 11:23:15 +01:00
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
2026-01-07 03:24:56 -03:00
|
|
|
"@grammyjs/types": "^3.23.0",
|
2025-12-30 14:30:46 +01:00
|
|
|
"@lit-labs/signals": "^0.2.0",
|
2025-12-17 11:29:04 +01:00
|
|
|
"@lit/context": "^1.1.6",
|
2025-12-07 18:49:55 +01:00
|
|
|
"@types/express": "^5.0.6",
|
2025-12-17 11:29:04 +01:00
|
|
|
"@types/markdown-it": "^14.1.2",
|
2026-02-02 11:03:43 +09:00
|
|
|
"@types/node": "^25.2.0",
|
2026-01-06 05:33:08 +01:00
|
|
|
"@types/proper-lockfile": "^4.1.4",
|
2025-11-24 17:51:18 +01:00
|
|
|
"@types/qrcode-terminal": "^0.12.2",
|
2025-12-09 17:43:15 +01:00
|
|
|
"@types/ws": "^8.18.1",
|
2026-02-03 09:08:52 +09:00
|
|
|
"@typescript/native-preview": "7.0.0-dev.20260202.1",
|
2026-01-24 10:30:21 +00:00
|
|
|
"@vitest/coverage-v8": "^4.0.18",
|
2025-12-30 14:30:46 +01:00
|
|
|
"lit": "^3.3.2",
|
2025-12-07 17:20:42 +00:00
|
|
|
"ollama": "^0.6.3",
|
2026-02-03 09:08:52 +09:00
|
|
|
"oxfmt": "0.28.0",
|
|
|
|
|
"oxlint": "^1.43.0",
|
2026-01-31 06:40:45 +01:00
|
|
|
"oxlint-tsgolint": "^0.11.4",
|
|
|
|
|
"rolldown": "1.0.0-rc.2",
|
chore: Migrate to tsdown, speed up JS bundling by ~10x (thanks @hyf0).
The previous migration to tsdown was reverted because it caused a ~20x slowdown when running OpenClaw from the repo. @hyf0 investigated and found that simply renaming the `dist` folder also caused the same slowdown. It turns out the Plugin script loader has a bunch of voodoo vibe logic to determine if it should load files from source and compile them, or if it should load them from dist. When building with tsdown, the filesystem layout is different (bundled), and so some files weren't in the right location, and the Plugin script loader decided to compile source files from scratch using Jiti.
The new implementation uses tsdown to embed `NODE_ENV: 'production'`, which we now use to determine if we are running OpenClaw from a "production environmen" (ie. from dist). This removes the slop in favor of a deterministic toggle, and doesn't rely on directory names or similar.
There is some code reaching into `dist` to load specific modules, primarily in the voice-call extension, which I simplified into loading an "officially" exported `extensionAPI.js` file. With tsdown, entry points need to be explicitly configured, so we should be able to avoid sloppy code reaching into internals from now on. This might break some existing users, but if it does, it's because they were using "private" APIs.
2026-02-02 17:20:24 +09:00
|
|
|
"tsdown": "^0.20.1",
|
2026-01-06 23:48:22 +00:00
|
|
|
"tsx": "^4.21.0",
|
2026-01-31 08:23:10 +00:00
|
|
|
"typescript": "^5.9.3",
|
2026-01-31 17:11:05 +09:00
|
|
|
"vitest": "^4.0.18"
|
2025-11-24 17:33:59 +01:00
|
|
|
},
|
2026-01-31 21:13:13 +09:00
|
|
|
"peerDependencies": {
|
|
|
|
|
"@napi-rs/canvas": "^0.1.89",
|
|
|
|
|
"node-llama-cpp": "3.15.1"
|
|
|
|
|
},
|
2026-01-26 22:58:05 +00:00
|
|
|
"overrides": {
|
2026-01-31 14:20:58 +01:00
|
|
|
"tar": "7.5.7"
|
2026-01-26 22:58:05 +00:00
|
|
|
},
|
2026-01-31 21:13:13 +09:00
|
|
|
"engines": {
|
|
|
|
|
"node": ">=22.12.0"
|
|
|
|
|
},
|
|
|
|
|
"packageManager": "pnpm@10.23.0",
|
2026-01-01 17:30:19 +01:00
|
|
|
"pnpm": {
|
2026-01-11 13:13:20 +02:00
|
|
|
"minimumReleaseAge": 2880,
|
2026-01-01 17:30:19 +01:00
|
|
|
"overrides": {
|
2026-02-01 14:29:45 -08:00
|
|
|
"fast-xml-parser": "5.3.4",
|
|
|
|
|
"form-data": "2.5.4",
|
|
|
|
|
"@hono/node-server>hono": "4.11.7",
|
|
|
|
|
"hono": "4.11.7",
|
|
|
|
|
"qs": "6.14.1",
|
2026-01-15 03:39:45 +00:00
|
|
|
"@sinclair/typebox": "0.34.47",
|
2026-02-01 14:29:45 -08:00
|
|
|
"tar": "7.5.7",
|
|
|
|
|
"tough-cookie": "4.1.3"
|
2026-02-01 18:23:25 -05:00
|
|
|
},
|
|
|
|
|
"onlyBuiltDependencies": [
|
|
|
|
|
"@lydell/node-pty",
|
|
|
|
|
"@matrix-org/matrix-sdk-crypto-nodejs",
|
|
|
|
|
"@napi-rs/canvas",
|
|
|
|
|
"@whiskeysockets/baileys",
|
|
|
|
|
"authenticate-pam",
|
|
|
|
|
"esbuild",
|
|
|
|
|
"node-llama-cpp",
|
|
|
|
|
"protobufjs",
|
|
|
|
|
"sharp"
|
|
|
|
|
]
|
2026-01-01 17:30:19 +01:00
|
|
|
},
|
2025-11-24 17:33:59 +01:00
|
|
|
"vitest": {
|
2025-11-24 17:51:18 +01:00
|
|
|
"coverage": {
|
|
|
|
|
"provider": "v8",
|
|
|
|
|
"reporter": [
|
|
|
|
|
"text",
|
|
|
|
|
"lcov"
|
|
|
|
|
],
|
|
|
|
|
"thresholds": {
|
|
|
|
|
"lines": 70,
|
|
|
|
|
"functions": 70,
|
|
|
|
|
"branches": 70,
|
|
|
|
|
"statements": 70
|
|
|
|
|
},
|
|
|
|
|
"include": [
|
2025-11-25 00:12:12 +01:00
|
|
|
"src/**/*.ts"
|
2025-11-24 17:51:18 +01:00
|
|
|
],
|
|
|
|
|
"exclude": [
|
|
|
|
|
"src/**/*.test.ts"
|
|
|
|
|
]
|
|
|
|
|
},
|
2025-12-07 22:46:02 +01:00
|
|
|
"include": [
|
|
|
|
|
"src/**/*.test.ts"
|
|
|
|
|
],
|
2025-11-24 17:33:59 +01:00
|
|
|
"exclude": [
|
2025-12-07 19:01:01 +01:00
|
|
|
"dist/**",
|
|
|
|
|
"apps/macos/**",
|
2025-12-07 22:46:02 +01:00
|
|
|
"apps/macos/.build/**",
|
|
|
|
|
"**/vendor/**",
|
|
|
|
|
"apps/macos/.build/**",
|
2026-01-30 03:15:10 +01:00
|
|
|
"dist/OpenClaw.app/**"
|
2025-11-24 17:33:59 +01:00
|
|
|
]
|
2025-11-24 11:23:15 +01:00
|
|
|
}
|
2026-01-25 14:16:15 +00:00
|
|
|
}
|