package.json
Rama main · réplica de lectura del repositorio original.
{
"name": "open-walnut",
"version": "0.6.30",
"description": "Personal AI powered by Claude — task management, Claude Code sessions, memory system, and web UI",
"license": "MIT",
"homepage": "https://github.com/EvanZhang008/open-walnut",
"repository": {
"type": "git",
"url": "git+https://github.com/EvanZhang008/open-walnut.git"
},
"keywords": [
"ai",
"task-manager",
"claude",
"claude-code",
"personal-assistant",
"productivity",
"self-hosted",
"local-first",
"ai-agent",
"web-ui",
"knowledge-management",
"typescript",
"cli",
"personal-ai",
"automation"
],
"type": "module",
"imports": {
"#ws": {
"bun": "./src/lib/ws-npm.ts",
"default": "ws"
}
},
"workspaces": [
"packages/plugin-api",
"packages/plugin-cli"
],
"bin": {
"open-walnut": "bin/open-walnut.js",
"walnut": "bin/open-walnut.js"
},
"main": "./dist/cli.js",
"engines": {
"bun": ">=1.4.4"
},
"packageManager": "bun@1.4.4",
"allowScripts": {
"esbuild": true,
"onnxruntime-node": true,
"protobufjs": true,
"screencapturekit-audio-capture": true,
"sharp": true
},
"trustedDependencies": [
"esbuild",
"onnxruntime-node",
"protobufjs",
"screencapturekit-audio-capture",
"sharp"
],
"files": [
"bin",
"dist",
"!dist/daemon-binaries/daemon-linux-*",
"!dist/daemon-binaries/daemon-darwin-*",
"!dist/daemon-binaries/walnut-net-*",
"dist/daemon-binaries/dtach-*",
"!dist/**/*.map",
"!dist/**/*.gz",
"patches",
"scripts/postinstall.mjs",
"infra/bin",
"infra/lib",
"infra/cdk.json",
"infra/package.json",
"infra/bun.lock",
"infra/tsconfig.json",
"infra/README.md",
"!infra/**/*.js",
"!infra/**/*.d.ts",
"README.md",
"LICENSE"
],
"scripts": {
"postinstall": "node scripts/postinstall.mjs",
"prepublishOnly": "WALNUT_REQUIRE_BUN=1 bun run build && cd web && bun x vite build && cd .. && bun scripts/check-publish.mjs",
"start": "bun run web:build && bun dist/cli.js web --port 3456",
"build:plugins": "bun run --filter @open-walnut/plugin-api build && bun run --filter @open-walnut/plugin-cli build",
"build": "bun run build:plugins && bash scripts/build-daemon.sh && tsup && rm -rf dist/data && cp -r src/data dist/ && for d in src/integrations/*/manifest.json; do t=\"dist/integrations/$(basename $(dirname $d))\"; mkdir -p \"$t\"; cp \"$d\" \"$t/\"; i=\"$(dirname $d)/icon.svg\"; rm -f \"$t/icon.svg\"; if [ -f \"$i\" ]; then cp \"$i\" \"$t/\"; fi; for sub in skills agent-skills; do s=\"$(dirname $d)/$sub\"; rm -rf \"$t/$sub\"; if [ -d \"$s\" ]; then cp -r \"$s\" \"$t/\"; fi; done; done && bun scripts/ship-builtin-plugins.mjs && bun scripts/ship-store-plugins.mjs",
"docs:check": "bun scripts/generate-ops-docs.mjs --check --repo-only && bun scripts/check-plugin-doc-snippets.mjs",
"test:plugin-packages": "bun run build:plugins && WALNUT_REQUIRE_NPM=1 bun --bun vitest run --config vitest.focus.config.ts tests/core/plugin-package-metadata.test.ts tests/core/plugin-cli-dev.test.ts tests/core/plugin-cli-scaffold.test.ts tests/core/plugin-publish-check.test.ts && bun scripts/check-plugin-packages.mjs",
"test:npm-channel": "WALNUT_REQUIRE_NPM=1 bun --bun vitest run --config vitest.focus.config.ts tests/scripts/release-rehearsal.test.ts tests/scripts/release-archives.test.ts tests/providers/daemon-service-artifact.test.ts tests/scripts/file-distribution.e2e.test.ts tests/scripts/field-rehearsal.test.ts tests/scripts/npm-launcher-fetch.test.ts",
"test:source-twin-node": "WALNUT_REQUIRE_NODE=1 bun --bun vitest run --config vitest.focus.config.ts -t 'source twin \\(node\\)' tests/providers/daemon-service-update-force-twins-e2e.test.ts tests/providers/transcript-archive-twins-e2e.test.ts tests/providers/daemon-big-stream-resume-twins-e2e.test.ts tests/providers/daemon-client-role-twins-e2e.test.ts tests/providers/daemon-gateway-resend-twins-e2e.test.ts tests/providers/daemon-isolated-twins-e2e.test.ts tests/providers/daemon-restart-ride-twins-e2e.test.ts tests/providers/daemon-restart-ride-cli-twins.test.ts tests/providers/daemon-cwd-heal-twins-e2e.test.ts tests/providers/daemon-bounded-reads-twins-e2e.test.ts tests/providers/daemon-host-vitals-twins-e2e.test.ts tests/providers/daemon-bridge-slow-link-twins-e2e.test.ts tests/providers/daemon-bridge-wss-twins-e2e.test.ts tests/providers/daemon-changes-memo-twins-e2e.test.ts tests/providers/daemon-git-compare-twins-e2e.test.ts tests/providers/daemon-cli-owner-twins-e2e.test.ts tests/providers/daemon-argv-files-twins-e2e.test.ts tests/providers/daemon-session-walnut-twins-e2e.test.ts tests/providers/daemon-runtime-keep-twins-e2e.test.ts tests/providers/daemon-service-handover-busy-twins-e2e.test.ts tests/providers/daemon-external-scan-twins-e2e.test.ts tests/providers/daemon-fallback-dir-twins-e2e.test.ts tests/providers/daemon-fold-checkpoint-twins-e2e.test.ts tests/providers/daemon-fs-find-config-dir-twins.test.ts tests/providers/daemon-isolated-exit-reap-twins.test.ts tests/providers/daemon-link-liveness-twins-e2e.test.ts tests/providers/daemon-send-dedupe-twins-e2e.test.ts tests/providers/daemon-user-line-images-twins-e2e.test.ts tests/providers/daemon-send-boot-wait-twins-e2e.test.ts tests/providers/daemon-spawn-gate-e2e.test.ts tests/providers/daemon-spawn-journal-twins-e2e.test.ts tests/providers/daemon-stale-pid-twins-e2e.test.ts tests/providers/daemon-startup-failure-twins-e2e.test.ts tests/providers/daemon-stream-compact-twins-e2e.test.ts tests/providers/daemon-transfer-twins-e2e.test.ts tests/providers/daemon-workspace-twins-e2e.test.ts tests/providers/feature-relay-twins-e2e.test.ts tests/providers/oneshot-twins-e2e.test.ts tests/providers/task-dir-reboot-twins-e2e.test.ts tests/providers/host-exec-twins-e2e.test.ts tests/providers/net-twins-e2e.test.ts tests/providers/host-reach-twins-e2e.test.ts tests/providers/secrets-twins-e2e.test.ts tests/providers/pw-silence-twins-e2e.test.ts tests/providers/daemon-walnut-scope-hooks-twins-e2e.test.ts tests/providers/turn-settings-twins-e2e.test.ts tests/providers/daemon-served-walnuts-twins-e2e.test.ts tests/providers/daemon-caller-proof-twins-e2e.test.ts tests/setup/exec-guard.test.ts && WALNUT_REQUIRE_NODE=1 bun --bun vitest run --config vitest.e2e.config.ts -t 'source twin \\(node\\)' tests/e2e/daemon-bridge-uplink.test.ts tests/e2e/feature-relay-journey-e2e.test.ts",
"test:source-twin-node-suites": "WALNUT_REQUIRE_NODE=1 bun --bun vitest run --config vitest.focus.config.ts --maxWorkers=1 --retry=2 tests/e2e/acp-daemon-e2e.test.ts tests/e2e/acp-host-daemon-e2e.test.ts tests/e2e/asks-relay-e2e.test.ts tests/e2e/clock-routine-cluster-e2e.test.ts tests/e2e/cloud-file-content-relay-e2e.test.ts tests/e2e/cloud-host-hop-e2e.test.ts tests/e2e/cloud-send-daemon-death-redelivery-e2e.test.ts tests/e2e/control-host-policy-e2e.test.ts tests/e2e/daemon-bridge-e2e.test.ts tests/e2e/daemon-bridge-file-read-e2e.test.ts tests/e2e/daemon-bridge-image-save-e2e.test.ts tests/e2e/daemon-bridge-session-launch-e2e.test.ts tests/e2e/daemon-bridge-session-message-e2e.test.ts tests/e2e/daemon-fs-mkdir-e2e.test.ts tests/e2e/daemon-lifecycle-e2e.test.ts tests/e2e/daemon-parent-watchdog-e2e.test.ts tests/e2e/host-server-alone-e2e.test.ts tests/e2e/host-server-e2e.test.ts tests/e2e/host-server-file-e2e.test.ts tests/e2e/leader-takeover-live-e2e.test.ts tests/e2e/offline-trigger-create-server-e2e.test.ts tests/e2e/offline-triggers-server-e2e.test.ts tests/e2e/remote-session-autorespawn-e2e.test.ts tests/e2e/remote-session-e2e.test.ts tests/e2e/replica-api-v1-away.test.ts tests/e2e/replica-ask-e2e.test.ts tests/e2e/replica-cluster-e2e.test.ts tests/e2e/replica-console-static-e2e.test.ts tests/e2e/replica-old-mac-e2e.test.ts tests/e2e/replica-scale-e2e.test.ts tests/e2e/same-host-send-e2e.test.ts tests/e2e/session-cron-metadata-wire.test.ts tests/e2e/session-cron-supervision.test.ts tests/e2e/session-manager-e2e.test.ts tests/e2e/trigger-host-resume-server-e2e.test.ts tests/integration/agent-gateway.test.ts tests/integration/bridge-stream-twins.test.ts tests/integration/clock-routine-twins.test.ts tests/integration/host-replica-twins.test.ts tests/integration/host-server-twins.test.ts tests/integration/plugin-jobs-twins.test.ts tests/integration/host-slice-probe-twins.test.ts tests/integration/journal-v2-twins.test.ts tests/integration/leader-takeover-twins.test.ts tests/integration/letter-journal-twins.test.ts tests/integration/note-journal-twins.test.ts tests/integration/offline-host-gateway.test.ts tests/integration/offline-triggers-twins.test.ts tests/integration/replica-ask-twins.test.ts tests/integration/replica-front-twins.test.ts tests/integration/replica-local-routes-twins.test.ts tests/integration/replica-logs-twins.test.ts tests/integration/trigger-check-repair-daemon.test.ts tests/integration/trigger-host-delivery-daemon.test.ts tests/integration/trigger-host-resume-daemon.test.ts tests/lib/entry-runtime.test.ts tests/providers/daemon-control-cancel.test.ts tests/providers/daemon-crash-guards-e2e.test.ts tests/providers/daemon-orphan-stop-real-e2e.test.ts tests/providers/daemon-relay-reroute.test.ts tests/providers/daemon-relay-target-liveness.test.ts tests/providers/daemon-snapshot-wiring.test.ts tests/providers/daemon-source-fallback-loaders-e2e.test.ts tests/providers/daemon-streams-migration.test.ts tests/providers/daemon-trigger-state-reboot.test.ts tests/providers/daemon-triggers-two-walnuts.test.ts tests/providers/daemon-bridge-per-walnut-twins-e2e.test.ts tests/providers/daemon-turn-retry-e2e.test.ts tests/providers/follower-owner-scope-twins.test.ts tests/providers/oneshot-via-daemon-e2e.test.ts tests/unit/peers/wn-env-fallback.test.ts tests/unit/peers/tools-call-trailing-args.test.ts tests/unit/peers/tool-call-json-errors.test.ts tests/unit/peers/tool-call-force-color.test.ts tests/unit/peers/wn-shell-dollar.test.ts tests/unit/peers/host-exec-run-id.test.ts tests/providers/daemon-net-update-twins-e2e.test.ts tests/unit/peers/op-call-id-clients.test.ts tests/providers/daemon-trigger-state-snapshot.test.ts",
"dev": "tsup --watch",
"release": "bun scripts/release.mjs",
"test": "bun scripts/test-layers.mjs run local",
"test:ci": "bun scripts/test-parallel.mjs",
"test:quick": "bun run docs:check && bun --bun vitest run --config vitest.quick.config.ts",
"search:eval": "bun scripts/search-eval.mjs",
"search:robustness": "bun scripts/search-robustness-eval.mjs",
"test:slow": "bun --bun vitest run --config vitest.slow.config.ts",
"test:focus": "bun --bun vitest run --config vitest.focus.config.ts",
"test:local": "bun scripts/test-layers.mjs run local",
"test:land": "bun scripts/test-layers.mjs run land",
"test:frontend:ci": "bun scripts/test-frontend.mjs",
"test:changed": "bun scripts/test-changed.mjs",
"test:baseline": "bun scripts/test-baseline.mjs check",
"test:baseline:record": "bun scripts/test-baseline.mjs record",
"test:browser:baseline": "bun scripts/browser-baseline.mjs check --run",
"test:browser:baseline:record": "bun scripts/browser-baseline.mjs record --run",
"test:pre-commit": "bun run docs:check && bun scripts/test-changed.mjs --tiers",
"test:unit": "bun --bun vitest run --config vitest.unit.config.ts",
"test:integration": "bun --bun vitest run --config vitest.integration.config.ts",
"test:infra": "bun install --frozen-lockfile --cwd infra && bun --bun vitest run --root infra",
"test:e2e": "bun --bun vitest run --config vitest.e2e.config.ts",
"test:live": "WALNUT_LIVE_TEST=1 bun --bun vitest run --config vitest.live.config.ts",
"test:live:daemon": "bash scripts/run-live-daemon-tests.sh",
"test:live:cloud": "bash scripts/run-live-cloud-tests.sh",
"test:live:providers": "bun --bun vitest run --config vitest.live.config.ts tests/live/provider-matrix/matrix.live.test.ts",
"test:live:aws-setup": "bash scripts/run-live-aws-cloud-setup.sh",
"test:fleet": "bash scripts/run-fleet-tests.sh",
"test:full": "bun run test && bun run test:e2e && bun run test:live:daemon && bun run test:live:cloud",
"test:all": "bun run lint && bun run lint:paths && bun run test:ci && bun x playwright test",
"lint:paths": "bash scripts/lint-production-paths.sh",
"lint:plugins": "bun run build:plugins && tsc --noEmit -p packages/browser-extension/tsconfig.json && tsc --noEmit -p packages/plugin-api/tsconfig.json && tsc --noEmit -p packages/plugin-cli/tsconfig.json && tsc -p tests/typechecks/tsconfig.plugin-api.json && tsc --noEmit -p examples/plugins/walnut-demo/tsconfig.json && tsc --noEmit -p examples/plugins/walnut-time/tsconfig.json",
"test:coverage": "bun --bun vitest run --coverage",
"test:watch": "bun --bun vitest",
"build:daemon": "bash scripts/build-daemon.sh",
"build:binary": "bun scripts/build-binary.mjs",
"lint": "tsc --noEmit && bun run lint:plugins",
"web": "bun dist/cli.js web",
"web:dev": "concurrently \"tsup --watch\" \"cd web && bun x vite\"",
"web:build": "bash scripts/build-daemon.sh && tsup && rm -rf dist/data && cp -r src/data dist/ && for d in src/integrations/*/manifest.json; do t=\"dist/integrations/$(basename $(dirname $d))\"; mkdir -p \"$t\"; cp \"$d\" \"$t/\"; i=\"$(dirname $d)/icon.svg\"; rm -f \"$t/icon.svg\"; if [ -f \"$i\" ]; then cp \"$i\" \"$t/\"; fi; for sub in skills agent-skills; do s=\"$(dirname $d)/$sub\"; rm -rf \"$t/$sub\"; if [ -d \"$s\" ]; then cp -r \"$s\" \"$t/\"; fi; done; done && bun scripts/ship-builtin-plugins.mjs && bun scripts/ship-store-plugins.mjs && cd web && ./node_modules/.bin/vite build && cd .. && bun scripts/build-extension.mjs",
"extension:build": "bun scripts/build-extension.mjs",
"dev:ephemeral": "bash scripts/dev-ephemeral.sh",
"dev:demo": "bun run web:build && (lsof -ti:3457 -sTCP:LISTEN | xargs kill -15 2>/dev/null || true); (cat /tmp/open-walnut-demo/daemon.pid 2>/dev/null | xargs kill -15 2>/dev/null || true); sleep 1; echo \"Demo server: http://localhost:3457 (data: $HOME/.open-walnut-demo, daemon: /tmp/open-walnut-demo; isolated from prod)\"; OPEN_WALNUT_HOME=\"$HOME/.open-walnut-demo\" WALNUT_DAEMON_DIR=/tmp/open-walnut-demo bun dist/cli.js web --port 3457",
"dev:prod": "bash scripts/dev-prod.sh",
"prepare": "husky"
},
"dependencies": {
"@agentclientprotocol/codex-acp": "1.4.0",
"@agentclientprotocol/sdk": "1.2.1",
"@anthropic-ai/bedrock-sdk": "^0.26.3",
"@anthropic-ai/claude-agent-sdk": "0.2.50",
"@anthropic-ai/tokenizer": "^0.0.4",
"@aws-sdk/client-s3": "^3.1110.0",
"@aws-sdk/client-sts": "^3.996.0",
"@aws-sdk/lib-storage": "^3.1110.0",
"@azure/msal-node": "^5.0.3",
"@google/generative-ai": "^0.24.1",
"@modelcontextprotocol/sdk": "^1.29.0",
"@mozilla/readability": "^0.6.0",
"@slack/web-api": "^7.14.0",
"@tiptap/extension-image": "^3.20.1",
"chalk": "^5.4.1",
"commander": "^14.0.0",
"compression": "^1.8.1",
"cors": "^2.8.6",
"croner": "^10.0.1",
"diff": "^9.0.0",
"express": "^5.2.1",
"entities": "7.0.1",
"htmlparser2": "10.1.0",
"image-size": "^2.0.2",
"imapflow": "^1.7.8",
"js-yaml": "^4.1.0",
"linkedom": "^0.18.12",
"mailparser": "^3.9.20",
"marked": "^15.0.12",
"marked-terminal": "^7.3.0",
"nodemailer": "^9.1.1",
"openai": "^6.29.0",
"parse5": "8.0.0",
"tldts": "7.4.19",
"ws": "^8.19.0",
"zod": "^4.3.6"
},
"optionalDependencies": {
"@huggingface/transformers": "^4.2.0",
"screencapturekit-audio-capture": "^1.3.6",
"sharp": "^0.34.5"
},
"devDependencies": {
"@playwright/test": "^1.58.2",
"@types/compression": "^1.8.1",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"@types/image-size": "^0.7.0",
"@types/js-yaml": "^4.0.9",
"@types/marked-terminal": "^6.1.1",
"@types/node": "^22.15.0",
"@types/sharp": "^0.31.1",
"@types/supertest": "^6.0.3",
"@types/ws": "^8.18.1",
"@vitest/coverage-v8": "^3.1.0",
"acorn": "^8.16.0",
"concurrently": "^9.2.1",
"esbuild": "^0.27.3",
"husky": "^9.1.7",
"pi-acp": "0.0.33",
"supertest": "^7.2.2",
"tsup": "^8.5.0",
"tsx": "^4.23.1",
"typescript": "^5.8.0",
"vitest": "^3.1.0",
"yaml": "^2.8.3"
},
"patchedDependencies": {
"@anthropic-ai/claude-agent-sdk@0.2.50": "patches/@anthropic-ai%2Fclaude-agent-sdk@0.2.50.patch",
"@agentclientprotocol/codex-acp@1.4.0": "patches/@agentclientprotocol%2Fcodex-acp@1.4.0.patch"
}
}