{"_id":"@otto-code/server","_rev":"75-29c54c84d1c41373c8382e9adba57082","name":"@otto-code/server","dist-tags":{"beta":"0.9.16","latest":"0.9.29"},"versions":{"0.5.0":{"name":"@otto-code/server","version":"0.5.0","_id":"@otto-code/server@0.5.0","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"f931fdbe2235e259877332028b20a3221469505d","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.0.tgz","fileCount":734,"integrity":"sha512-p5bDCG4Hw7yfVVqZ5g9C96jfoqXFUUfN/TEr42YjdxLD67Urpuqp6I4pSGaQoSSSGKhdCUjvQTpRQXwJtMTyGg==","signatures":[{"sig":"MEUCIEIn+f0s1Gy8IZTCQFo8a4P2d6RbxSJ4pR0A1tLf+tsRAiEA1H/seKJ8xERGxi9OUSbRyuRulFdNKYP/qnjo48YvVTY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23828020},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"26dc36f934f7d9479243e9fe97b5c679d54be4ad","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.0","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.0","@otto-code/protocol":"0.5.0","@otto-code/highlight":"0.5.0","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.0_1783819038537_0.665389671442622","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@otto-code/server","version":"0.5.1","_id":"@otto-code/server@0.5.1","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"081f43e85a940e921633ba1ab2d649fe1ae0d75a","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.1.tgz","fileCount":736,"integrity":"sha512-rMcWb4pM+yItHSDRDhcgaKzoG9cgaSNbxXMdobM6y3TK3ew3k6Guv3sJxsAryhG0zJMYxMI8A0lRn2VW9Jdkqw==","signatures":[{"sig":"MEYCIQDzWNqK0g4aCafF0jx2FdNCGAwwGLPz/mQue37gaUKF7gIhAMlWut/LL3VmTGnvG4tlF4uQCbeKYHNIaM1+BpVAZoty","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23955925},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"fc1d878dea600ef503936cb9dad9f40a0969df2c","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.1","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.1","@otto-code/protocol":"0.5.1","@otto-code/highlight":"0.5.1","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.1_1783885747220_0.6467951573525228","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@otto-code/server","version":"0.5.2","_id":"@otto-code/server@0.5.2","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"b9f8222956d4c8054906bef1352f0308e77ea979","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.2.tgz","fileCount":738,"integrity":"sha512-gpx9J6rUvUbRomYBWAWcTV5jo3ikVw3G30R88B+wnzj9JUvRGPHfiGhtsThL6pkIKCUvhmCnd0XeaGscEuCwPA==","signatures":[{"sig":"MEUCIQD3Oap4HM5+9i3OrD/JJe81jThlGxgd/oZ7FSN5oclDBQIgP+UPgojSDpYvhSdQ+TWCxvXWmfwPGMSoBcB4L66zMTA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24349334},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"689f71b54514737fd9d1980b8b7c510051598a51","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.2","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.2","@otto-code/protocol":"0.5.2","@otto-code/highlight":"0.5.2","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.2_1783954742353_0.6895890047401834","host":"s3://npm-registry-packages-npm-production"}},"0.5.4":{"name":"@otto-code/server","version":"0.5.4","_id":"@otto-code/server@0.5.4","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"cb348968d09417de976b4fc25118d15570ebe1b2","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.4.tgz","fileCount":750,"integrity":"sha512-E8ixmZpSMcjhBnsqCOgiLnBEANfmVXfxP/QkNuQ/ycAtUGC/Q5lNAH8lnOYbjaNnDQRlArPXa/ggzUMOUyXAJA==","signatures":[{"sig":"MEUCIQClXzVFGylp8RMnDsr4SKkjUDPTDbN1qvyF7seiGTvpHwIgQfKlUrBq4/GptnKLLffpyIdElIbCSuHWeqMNcmPkgxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24724036},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"9c41051f726430675d5fa9d2748e064bc688918f","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.4","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.4","@otto-code/protocol":"0.5.4","@otto-code/highlight":"0.5.4","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.4_1784014396850_0.8285864799280203","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@otto-code/server","version":"0.5.5","_id":"@otto-code/server@0.5.5","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"9ec701ee97701d591f87295dc0c5b466f6be2bae","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.5.tgz","fileCount":750,"integrity":"sha512-Qp1S7GP9Nb4/dHmBAoXKj1S5rzpXMvMnOC55AymGlP2ZRgv5QDmSff2OgoPcdhkwy3beFLOOY2jd9z1im36+5g==","signatures":[{"sig":"MEUCIQCv7mfa8AEzTnIXbFq7RTCZSH7FgyGBSC7mrG/7zavtYgIgFzw5cric4P3pTFz4XyQ5tNXl0OQzTHt/Q7OyY7MjaJ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24768678},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"5f312c3f9f753a21a118486ffbae96c092c7f820","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.5","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.5","@otto-code/protocol":"0.5.5","@otto-code/highlight":"0.5.5","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.5_1784036570265_0.972993140706059","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@otto-code/server","version":"0.5.6","_id":"@otto-code/server@0.5.6","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"41add85b7d864a6ee747be72d707add569ce4eed","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.6.tgz","fileCount":752,"integrity":"sha512-Gh7EnhWPNGLJFgw2Ej0DjHsNYOnMIwj87PuvBoKzLDmcC+9UG2aJziBhyoSremxbrc0T9hYTLniiHTj2I4GqvA==","signatures":[{"sig":"MEQCIFB/MealBrvZYKzWgt+1ReBT82tubQvoD6hgw/vbfFuDAiBBDwszKql2mAGeVAnvFaqhtDDybwD8XWgHBhfe1/i9UA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24881599},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"454714ad31ec826eb2bc52f12ed29959c8abf847","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.6","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.6","@otto-code/protocol":"0.5.6","@otto-code/highlight":"0.5.6","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.6_1784058073197_0.9149378629476321","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@otto-code/server","version":"0.5.7","_id":"@otto-code/server@0.5.7","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"fcea2233a35e454270e3a1a38c02ab6723dc2030","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.7.tgz","fileCount":752,"integrity":"sha512-f2/rMZim+CwJ8m1mQavtM/dzR1LSX5I/DitJ1Su1e/F/gKkfxQbSwLwPgduQ15xt0AFukPAjHfDb7Qf8zNyBqQ==","signatures":[{"sig":"MEUCIQCD5JwJEdJP+MkRkVUNDgBymcLnV0DK8gVDgFA7nyRCCQIgDtTmW35b3pzK9a+Pf0def2VzXJOvBmUnGzsqhzjp19M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24881169},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"6546ab966e37d9ca4b9a93618d8096fe0b4d2e8d","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.7","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.7","@otto-code/protocol":"0.5.7","@otto-code/highlight":"0.5.7","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.7_1784060066053_0.6589036517829914","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"@otto-code/server","version":"0.5.8","_id":"@otto-code/server@0.5.8","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"f2ed4be1104775b5ec0dd332eb77f1e22b0047c7","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.5.8.tgz","fileCount":755,"integrity":"sha512-fKrMyNM9RJ/AqFN1DsMmTF/nbMlYydzj9AK6kggE8SD5dgOhaRObOdEdWdqm9jHFC8WKagc8yrrDDT/7vDJaEw==","signatures":[{"sig":"MEUCIQCZF0F3y8S4ZHCQ6C5Jerva20bgvYDezO7k8q9YMrbb7wIgHzjijZQ6FCuBtBT6OZON7KoaLqhEzMIwS9kI6BSV4A0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24967689},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"d555c441e5aedaf19a3b4d4947bec70d28ca3d93","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.5.8","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.5.8","@otto-code/protocol":"0.5.8","@otto-code/highlight":"0.5.8","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.5.8_1784082675343_0.9944289230478693","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@otto-code/server","version":"0.6.0","_id":"@otto-code/server@0.6.0","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"37dfc94dcf5a88380d93d7c042c5c099da0ada51","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.0.tgz","fileCount":758,"integrity":"sha512-Fqe97WAI+fuaB2IkGZx6kaPUThna6wbd3x2p5xEAJ3cR3wyf0HHv6nYidiXMEhwWi986/pZnxaSA2RQiUs7Etg==","signatures":[{"sig":"MEYCIQDFihutFiFYBRDZPTdkk48Sw3kw4VE1ZTDaMxoiQlgTGwIhAO79l3eo8jSQalRvqqMDi1eb6tUmzh1/D6zQ7vp0eb+O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26849990},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"412485462b2cfc07d98866abac026566f6c311da","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.0","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.0","@otto-code/protocol":"0.6.0","@otto-code/highlight":"0.6.0","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.0_1784185727702_0.8126210828388374","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@otto-code/server","version":"0.6.1","_id":"@otto-code/server@0.6.1","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"6c982e8390b4e72871e1fa600ce49ff9f62ebc46","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.1.tgz","fileCount":758,"integrity":"sha512-8dF36vQhx7xz39TudIIYo8S6kbJqT4Bdd+3DfXe/F2FqbyErW+x/c+8Q42hnNd4u18A+SFitPwG3HnJMvH0zEg==","signatures":[{"sig":"MEQCIB5qBlAkrJoSKM2g6+ATCy0ExMPjJMrBpfkDNNaCXXntAiAChunosFiAWtVjcJSMIcDZwk3fp40BobG/Iz2TEfeFkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26816534},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"73bce3b35d4b425b6608a2d302c25e6177541df2","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.1","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.1","@otto-code/protocol":"0.6.1","@otto-code/highlight":"0.6.1","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.1_1784211934289_0.9505413784211907","host":"s3://npm-registry-packages-npm-production"}},"0.6.2":{"name":"@otto-code/server","version":"0.6.2","_id":"@otto-code/server@0.6.2","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"5c6e4af2b99608b1ae89a0fc4d9a5761a8472fe0","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.2.tgz","fileCount":758,"integrity":"sha512-ZFwMxrrWY+qj8xZWuov3jVzufcGtLZjEyxaXQBjUAxN/iEW3zdWtX5i87y/1icyHzSIEYjRNhCFTACAvnwjYqw==","signatures":[{"sig":"MEUCIH3ZYgeLD9XuSmt7JsKTL3HaKUxLCeGWQnJZ+fGRg64tAiEApg+4t2eZAgog4gQdDQ3AGIw6wCA4Tqy3NG1f20IR0QU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26828648},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"6579c8aaf0d19d5b261924a4d82765f2ba97c342","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.2","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.2","@otto-code/protocol":"0.6.2","@otto-code/highlight":"0.6.2","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.195"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.2_1784230524944_0.24741932853119764","host":"s3://npm-registry-packages-npm-production"}},"0.6.3":{"name":"@otto-code/server","version":"0.6.3","_id":"@otto-code/server@0.6.3","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"ee5ecb560fd2aae9ff1e52427035dc0374ab605c","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.3.tgz","fileCount":770,"integrity":"sha512-Nj6VqwV9e3cHEFgFUvSdBgDVw/+yVJ7kn/QTmS/9O5/gMK5pBxkWMmQhH9sekthhdVTxAxa2Dy0AT8Q8z/eY4g==","signatures":[{"sig":"MEYCIQCGD/9qwaLO+0Y4DFBhCqltmPe00oz33+0e1sEY78RZAAIhAKPVDDspyf++Srov/d62BZwTnJYRVPHtK+i3bU2h80Yl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27103801},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f0f0c5196b29300bc6f7d05fe07add763b718a50","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.3","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.3","@otto-code/protocol":"0.6.3","@otto-code/highlight":"0.6.3","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.3_1784346938502_0.06010127540956711","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"@otto-code/server","version":"0.6.4","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.6.4","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"27ae17559f31c73e03ae8eda711a8c0915dad522","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.4.tgz","fileCount":807,"integrity":"sha512-vgwu81x4Z/POdsoOmdbdquiqmZFD9ZxdbE4QYN6C9QX8FjOU3LbUann+oSGEG9bKLReShT9liDUmxW2/tqq4oQ==","signatures":[{"sig":"MEUCIH0tVCMojul3BAI9nTyZvv/5vwuyShAoZ9iVOw77e7X3AiEAokTWwzC71+8/KqfnUImZp29NQP828HDDfTAvrOFOjrk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27758910},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"999cef2dfff3c86be1b4f34a3651b62cc90c7930","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.4","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.4","@otto-code/protocol":"0.6.4","@otto-code/highlight":"0.6.4","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.4_1784519463715_0.6371399855572293","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"@otto-code/server","version":"0.6.5","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.6.5","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"22884081d5c64991eb0894db7609a9433fc3c4d1","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.5.tgz","fileCount":807,"integrity":"sha512-cLXTkC+qxS8Z5k8FY/p22Fa4iqA1jKanugVKqKQq4uMSccY51TjlVpnximEe00z7CoEQdjeVIHXBVchiFIfovQ==","signatures":[{"sig":"MEUCIElsR9IqfLsflW0znSIGEWyxbVb+vENrlkc/3JyM/gygAiEAl4CSTkP4zJRGb/LgcT1W2bCCkZq5BIor3d7tVBTuGp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":27840514},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"7b82eea1c227dbe21cf63af4d7c4b1bf9af89d91","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.5","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.5","@otto-code/protocol":"0.6.5","@otto-code/highlight":"0.6.5","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.5_1784560795363_0.3113540647212705","host":"s3://npm-registry-packages-npm-production"}},"0.6.6":{"name":"@otto-code/server","version":"0.6.6","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.6.6","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"648f89e97b027a8a0f5230b693fe47a8252eaedf","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.6.tgz","fileCount":818,"integrity":"sha512-09JCefMwb5vuo41np5PYk664cCxATXUEMWWXoxYvLdN2aVzzNxmZ1o5m5HqbyNt4YzU49uGPSrlGJj6BNs2VAA==","signatures":[{"sig":"MEUCIB/9kiSvL8H6An+QtLmHa/k93xygVWspLfe4BGmwyP7+AiEAtgR07ijmEmIDJY26ND3LNtQc4fN08U86nPlsmZ4YOT8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28096649},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"7b362c67705334e027fff2705472c20173e45a70","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.6","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.6","@otto-code/protocol":"0.6.6","@otto-code/highlight":"0.6.6","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.6_1784601125625_0.037173278884198524","host":"s3://npm-registry-packages-npm-production"}},"0.6.7":{"name":"@otto-code/server","version":"0.6.7","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.6.7","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"d897c2f732ee519b64867259a585b58eb8f61f57","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.6.7.tgz","fileCount":833,"integrity":"sha512-vQvkZFUASJ9VOYWcZ0ApdP9+29ljwe+Jo0GrqCfdR25tyeAd2jz4wMIE4CsUYUTvm+O2fJr2SsgDq3I2vuQXOA==","signatures":[{"sig":"MEUCIQDeUMPwOs6ZSCy+AhO/Z/jaVVjTK0Y8rWCOC9fvrQNBwQIgZ4JddjFhzVLKknu0AYwHtN4ghHf/pufac2ULz5OeoLg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28609228},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"b194c672c8996fe153e55512f422d5ee4050084c","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.6.7","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.6.7","@otto-code/protocol":"0.6.7","@otto-code/highlight":"0.6.7","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.6.7_1784692091625_0.08702179294174495","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@otto-code/server","version":"0.7.0","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.0","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"e2b7918a237e95742a2ae350146eddf9a3a759a4","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.0.tgz","fileCount":1090,"integrity":"sha512-qDUPHWj9nlXCpduZP7Pc+lHjzw9ErkqYFsbmLi1mmVcu/C3YIfudJhlAwV4Zs1Qxd3O3nZS9TBWTX/BsLZdK+g==","signatures":[{"sig":"MEUCIDzGFny3gweZb867aysw9tf0k6DDvP515yGrn/0PC+p5AiEAt6gIVKLpFFTe7ZU1aOqu6z6WuxMwCWvLB5UnEyXeXCU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37862521},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"3f30235797bb422ef1981d73744abc5fe9ad8ab9","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.7.0","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.0","@otto-code/protocol":"0.7.0","@otto-code/highlight":"0.7.0","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.0_1785104569556_0.7122743195964674","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"@otto-code/server","version":"0.7.1","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.1","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"5d9e969777cf3af3e1651a540c46f26291639c7d","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.1.tgz","fileCount":1098,"integrity":"sha512-R8i8I1jMlDC4w6yD+vWmUl7JeQDZVbnDfvpVU6RlTkNio8Opnb9cdQy/QDpeA5GXeswVE4mYJyorUIO3BvxKcA==","signatures":[{"sig":"MEUCIGkpIGA5aS4uDCVyE2jrz24vEchko4xphKYOLlcAEOzSAiEAwYnBzK5iQCt4DDid1h3lau4xrm2sLSd8/ZQlXy1IFkE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38064637},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f888483393b4bb69e0a3c6d98825b703553479ce","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.7.1","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.1","@otto-code/protocol":"0.7.1","@otto-code/highlight":"0.7.1","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.1_1785135337596_0.9321286749733393","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"@otto-code/server","version":"0.7.2","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.2","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"98bf50f4244ffa48cb7a9102d6dc29aad1234670","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.2.tgz","fileCount":1098,"integrity":"sha512-+FC6y4ZlfojIUTnFJhXsO5Hpj97dLWNOouoTn8Mt/nTwHhoxYmyZH2FFH2vf2bfmBd+6bFP+uFnorHAFPsSCuA==","signatures":[{"sig":"MEQCIBF4HTF7/xTHtAACK5wDkOKawjl08kHS9GcDB5mXItiXAiBfpadBY4e0ZFQfg+6+2PdKfKnxA3hjZBUYnSqeYXgYDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38090387},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"21f93738598bdea3a9d1b886ae82f7f4eeea6921","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.7.2","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.2","@otto-code/protocol":"0.7.2","@otto-code/highlight":"0.7.2","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.2_1785167966449_0.9307814998477075","host":"s3://npm-registry-packages-npm-production"}},"0.7.3":{"name":"@otto-code/server","version":"0.7.3","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.3","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"87aed541290a1e12a7785055de90f2ced5711a87","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.3.tgz","fileCount":1104,"integrity":"sha512-1bdsmGhK+IIJj6gp25M6Mvouy6hkm+v4goFn7DNIo2K6kVMPtq5FCQKRKJ8Ti8sQsYkr9czTJIRomVpCWxo7Ew==","signatures":[{"sig":"MEYCIQCdMPnbZZJMk8zoxGGHP0Wr1PbqNf/tU5mlqYuqnKMNRwIhAItSsh/Aty6xuO5Ut5m1gOxUB1Op/wrZ81OVXSNcdpOU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38161172},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"fd0ffc9d7b5585b066feeb6020d34e5fb9f6790c","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.7.3","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.3","@otto-code/protocol":"0.7.3","@otto-code/highlight":"0.7.3","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.3_1785329708517_0.7197401088293909","host":"s3://npm-registry-packages-npm-production"}},"0.7.4":{"name":"@otto-code/server","version":"0.7.4","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.4","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"6bda11dc1b79b871ce39419a3982d4d74f062a6d","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.4.tgz","fileCount":1110,"integrity":"sha512-h4i8BoTB3fdzxcMnVRgWGmTVatdFZ6TPlG4qjzL2yDTlawhiFvYElo6VgorYQFElBWk2iBi6ATidlecHtOqG4g==","signatures":[{"sig":"MEUCIQCSLKDHQVlQJSnPswfuEG+CtgNVs/PIIy/Cmo9aA/uUNQIgD5nHmuPJ5fSz6BeX4hBlk7Mnk2sia0Th7iN+mB2YLAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38255752},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"0afed9bea1379d3c41ba68f87d80c26293e86071","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.14.2","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.24.8","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/relay":"0.7.4","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.4","@otto-code/protocol":"0.7.4","@otto-code/highlight":"0.7.4","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.4_1785420238680_0.9329055968191262","host":"s3://npm-registry-packages-npm-production"}},"0.7.5":{"name":"@otto-code/server","version":"0.7.5","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.5","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"b70caff8001fc9dded077d8f5e1aace246b52eee","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.5.tgz","fileCount":1120,"integrity":"sha512-vFSl/dtUYbpebW2XMd/uBy50m0OP4MYT8xEFipUDbxoEihuFUJ9xc00zDkdlYPtYWVXek897xjz+LrBM6aOrWQ==","signatures":[{"sig":"MEUCIHapLJ//nRyT6BeF8jFwCPEqJ9+gMhyp0y0o/5jFwQZ5AiEA36q0EPmahk49gev/KSWFGVU89nW4Yd2cO20VlTmkFw8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38971697},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"03a6b7491e7fe4ce69b2387602a4599b85f17da2","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.7.5","@otto-code/relay":"0.7.5","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.5","@otto-code/protocol":"0.7.5","@otto-code/highlight":"0.7.5","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.212"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.5_1785529528350_0.7964150399775762","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"@otto-code/server","version":"0.7.6","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.7.6","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"d1718807c8b16aeb756288236472d8243c3ec20e","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.7.6.tgz","fileCount":1261,"integrity":"sha512-5p2oyEL+Z24adHc3huHl9PJ+YpFWasnR5NY9obwAEAMS3NQEK3JMu2GoMAfTbTelWbVMCl/h0pWzmuWIvOZikg==","signatures":[{"sig":"MEUCIQCEtLWWrXEBfRTX6HueENifBHlJRfH3PdvHfm4dMsae1QIgGHuVaIVWjRnnZ2HqXMbdhX8nMeUeY0dZ5UTKOg6Ge5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44285868},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"0e225aea89fcd48aa9f2ac0e2668df345a4b365b","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.7.6","@otto-code/relay":"0.7.6","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.7.6","@otto-code/protocol":"0.7.6","@otto-code/highlight":"0.7.6","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.7.6_1785778793349_0.5710585540411512","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@otto-code/server","version":"0.8.0","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.0","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"e0f7b682947474fb2e7b022ccc90805954e667c7","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.0.tgz","fileCount":1265,"integrity":"sha512-JErYo5OQnyzilW/HUPrXKhzTmLCsFe6vjRvjDOniifRTLq3QQqdZDf4PUbiLfA7vLtxbcMn0KIRMKIzoXI1hag==","signatures":[{"sig":"MEUCIQDCoMGQfbQ8l+RlRJUWaJk6e5rZ3wshncQRi7qhJKn4NwIgRUALR4IVQPXGK90+O86jrU/5vYTLdM727hbZcqpryzg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44769648},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"4c41673486c8aa073143a709f27fecfc644c5e00","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.0","@otto-code/relay":"0.8.0","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.0","@otto-code/protocol":"0.8.0","@otto-code/highlight":"0.8.0","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.0_1785819750220_0.5038398379856892","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@otto-code/server","version":"0.8.1","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.1","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"ce953125f20339d6a10b9645ebe6b31ed4d98db0","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.1.tgz","fileCount":1265,"integrity":"sha512-ajGo9SiUp0ykoGTrInKozw4fnXmM0I2rLHVGEUQDBmfEig+cMHjPRqZOixYRQmgA9TJQaBk2A5A1Gsy0Y9/SzA==","signatures":[{"sig":"MEYCIQDsruLmePWXol3qi0pLUeuLJe5Mb14ooooOEq8Jbe8pOAIhALo6g1y0KM3+P51GOMxijiZWVWuvRiyAWbZQOJPsthDF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44771795},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"c50e6cf4a5b46a6ffe6580a24757712838f66f3b","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.1","@otto-code/relay":"0.8.1","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.1","@otto-code/protocol":"0.8.1","@otto-code/highlight":"0.8.1","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.1_1785884799063_0.5080980213109885","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@otto-code/server","version":"0.8.2","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.2","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"cfe0d682829d58080eeaa94567b49f6db605bbb7","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.2.tgz","fileCount":1265,"integrity":"sha512-nl/ly0prUBIWt/fuB57qn2L6GJFF5MPnUfKD2P9YWr2f3s4zsAgGsBf37i7WN60xZXrm6hFNkW2xODyjcK8m/w==","signatures":[{"sig":"MEYCIQCuo6nFti4K0mQCYuEBPm6kena9pvobOze93GA1+IjXPQIhAJJECV7iNLEDhXzv0epYa6T84L6UTQU7ydPOjVlqugHh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44800262},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"b374056f29ff50c4b947cc637283023c7423369b","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.2","@otto-code/relay":"0.8.2","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.2","@otto-code/protocol":"0.8.2","@otto-code/highlight":"0.8.2","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.2_1785954819005_0.7180789152399598","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"@otto-code/server","version":"0.8.3","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.3","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"3224f9aafb9c2bea9482972f479d0f311f6e15a1","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.3.tgz","fileCount":1265,"integrity":"sha512-j8lkyhn+dqc9NmudcwN/tQX+3hYi+kl+gtT/M6sly65Xuvg8cbOvUNxcNwaODQDZsd5z/zYZcYeCWYiauZp2lQ==","signatures":[{"sig":"MEUCIQD5YQJPDJTSBkRhlGAkG/olWJWRj0KIXPjNasoJc44sxgIgZLyv3IRyfiksGYYAYNW29ckNeJ3X4jxdgE56aFN6pjs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44923950},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"1b5077c28bde7752175143ed201ac52b2d8cb1b8","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.3","@otto-code/relay":"0.8.3","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.3","@otto-code/protocol":"0.8.3","@otto-code/highlight":"0.8.3","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.6","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.6","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.3_1786023546728_0.5119067885083382","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"@otto-code/server","version":"0.8.4","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.4","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"24c9daba8e6a9f91cdb643608dadfd30c0a2835d","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.4.tgz","fileCount":1265,"integrity":"sha512-SNIjeL/q4wnmwUhXBV7Xy1QkcKVCF9z4dBiAeH9fZq8VM8hhbYNawCYArmQXEFQNb8DnagRrBq1+7tns4E6wvw==","signatures":[{"sig":"MEQCIGvIKOAQXhI0h0ZCkCiKZfr9oUSBYUouRhDCfByZRuVGAiAOA7mJV5WsPRNmQ1EbL6Dvc2MkxtenDu8Cx4xUjAdfMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44956032},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"572fdfec72d3a828dce939acca2409312c9c8d87","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.4","@otto-code/relay":"0.8.4","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.4","@otto-code/protocol":"0.8.4","@otto-code/highlight":"0.8.4","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.4_1786079679438_0.9526756391953501","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"@otto-code/server","version":"0.8.5","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.5","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"c377b82f3ed9e69b22752d7abc2116dba1462376","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.5.tgz","fileCount":1267,"integrity":"sha512-C6IcAj3hfRvxLI/asPkiqnn3uq11JjRj47Tz354o84sw8wXy+fF5nkjXuD+fs9T/tgUQaBNxy04S0yHajRcm6w==","signatures":[{"sig":"MEQCIFdUK+IRJdxzmWYER7uUbVzqqqqIh2Ygsk3X4OGoREpdAiA4qqJc2l9/DzkMHJzgGa13oGJMaO4iLgCwSuXJTejeLQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44964903},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"526d8bb9886300261ad6b830e653a7abfc9ebdae","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.5","@otto-code/relay":"0.8.5","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.5","@otto-code/protocol":"0.8.5","@otto-code/highlight":"0.8.5","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.5_1786084433324_0.2501658726137026","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"@otto-code/server","version":"0.8.6","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.6","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"4cd6c3ae721b2ac9ea09aa7237dc93ded6f632b9","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.6.tgz","fileCount":1273,"integrity":"sha512-/N+VlI4FghyAgSijOIyq8bvXO7882TyrCKXuxGvHUuGnfsLjrkmRBcQyA+BrtYM06fYZsSJFs2mHFbTjAhmFrw==","signatures":[{"sig":"MEYCIQCX2UFV2PmiE/stx/IqzrSvpmQVZjr04fsdk/OLWd+ABgIhALdfTT4ESliYMT9u3GdkbtlFPfvoLAYmx2xtN2rPZLhj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45335312},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"ac686d1545975b21c6076d2e5d81f27caf2fb237","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.6","@otto-code/relay":"0.8.6","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.6","@otto-code/protocol":"0.8.6","@otto-code/highlight":"0.8.6","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.20.1","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.6_1786250512130_0.5800345955803061","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"@otto-code/server","version":"0.8.7","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.7","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"393c8675a0b2d1ad74515504c56227a68127d2e4","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.7.tgz","fileCount":1275,"integrity":"sha512-YHmcE+ka/YAz/VIJL/5qtgK/oxbtvxkxb4zQ6mEjVXm+43yY/CfzQ6i/iSzOOZyzlVw6gOmGePZdfaYXcvGt8w==","signatures":[{"sig":"MEUCIEQhzSCNyuowaQtvbUOW8dSzLba5gcxe3zTUO6BUQovHAiEAg3k65LJZ57scah7HHd9OZbRSEPDVnqFOph/wbe7873s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45418567},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"1fc76f3ab078731bd0dcc2f72a5ae1d397a5effe","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.7","@otto-code/relay":"0.8.7","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.7","@otto-code/protocol":"0.8.7","@otto-code/highlight":"0.8.7","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.7_1786327854476_0.6895894411646475","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"@otto-code/server","version":"0.8.8","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.8","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"60a30db5e6e0a49ec88c1e30d043c6cdf126b912","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.8.tgz","fileCount":1275,"integrity":"sha512-sba78imMVFRtOnRyX+EMbpUN5ZpLQ1diiYxbGaevLomOKm8RLbfsNHQ/ba3A5kYpqO0ScQO/V2U+5jjxEyjhZQ==","signatures":[{"sig":"MEUCIBvw3NejLNBkNwwxB2ng/V6ux74WYpghCzuK/YafCovTAiEAiiuH207E1BgokZrD0cqyl153+3jOfwa0CxHRF0fRziU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45598838},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"de2dc5c19d4822c1af94373183953a8b7a2d117a","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.8","@otto-code/relay":"0.8.8","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.8","@otto-code/protocol":"0.8.8","@otto-code/highlight":"0.8.8","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.8_1786494729694_0.0699727258741829","host":"s3://npm-registry-packages-npm-production"}},"0.8.9":{"name":"@otto-code/server","version":"0.8.9","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.9","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"94b225f3a4a9d9391bf1668e6e1f2c0b6d679845","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.9.tgz","fileCount":1279,"integrity":"sha512-mvHwrlh/WKdpyPxkvmslyH2UnqQl3p3Gn4CsAS6DHyG4x24J7GMdk5OVEI2Tc5ey5ljQ07yc18NfEJGjkD1qjQ==","signatures":[{"sig":"MEYCIQCDOv6pFoG4gbCEl9m485X7gzQZoa7If1oQYSH2YEMkNQIhALqFbQY2s3TCmxzFnXp63I8WbrPTbyb4WE2tIos0+QTd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46085957},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"449844684b40a40f75be7a6d737f41793c53a0ae","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.9","@otto-code/relay":"0.8.9","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.9","@otto-code/protocol":"0.8.9","@otto-code/highlight":"0.8.9","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.9_1786628196720_0.6534098740091616","host":"s3://npm-registry-packages-npm-production"}},"0.8.10":{"name":"@otto-code/server","version":"0.8.10","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.10","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"3e964a5d6a5cecc2713a643ce446f06b16f257e2","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.10.tgz","fileCount":1279,"integrity":"sha512-6Y00+/M502+zsGmfpwR1gCMU7oh1fw3Z5BXNNNWWXljR6OoqIgkMTJTDn+MCWGVPX2DitEewTlo3nQEYkwrZGw==","signatures":[{"sig":"MEUCIHW2UE9xc6SSWPDpghVCksnu1Exo9PZi+s5jAIGjneyHAiEAsHEep+CET9kegCxRtp8/k5bPxRxdkPfoYore4vRl68Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46085129},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f88a66e8908b7f83e363f57e67f7dc6e988ee4d3","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.10","@otto-code/relay":"0.8.10","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.10","@otto-code/protocol":"0.8.10","@otto-code/highlight":"0.8.10","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.10_1786640420585_0.7197785658606175","host":"s3://npm-registry-packages-npm-production"}},"0.8.12":{"name":"@otto-code/server","version":"0.8.12","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.12","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"d6a8308f9634a0b1687317ff3b9da4fde9e5fe52","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.12.tgz","fileCount":1352,"integrity":"sha512-1DTEiJ8SddyMi2d4N6WO10U7pSvzqA8oVQQtdcb+LQLF40KAzpcYJC6BhbhNds1Qma6KYrNeV6qrU5zAcm5+Mw==","signatures":[{"sig":"MEYCIQDNdh7VaQ2d43kenzjeAQLsAesh/c7O+YcB3NzUAYTJ/QIhAOEAyWAFVcV/8Tyfa5okjKuTp1a+5hA/IvIBTZxxCbMa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47632284},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"0a7ef5d887460c322a00e665312d97fb58c6467e","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.11","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.12","@otto-code/relay":"0.8.12","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.12","@otto-code/protocol":"0.8.12","@otto-code/highlight":"0.8.12","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.12_1787291107976_0.182075313212968","host":"s3://npm-registry-packages-npm-production"}},"0.8.13":{"name":"@otto-code/server","version":"0.8.13","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.13","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"d277891c8973c4f50e2c33c28fdd1455e286975b","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.13.tgz","fileCount":1227,"integrity":"sha512-uYmEblNRe4AfVdwxzMLUFvENWAy4BjQiVIJT95ZxHmTlSgDibwdZVgg3Ti9snuYeE1u9ROjdeSjfytDyHL8NDA==","signatures":[{"sig":"MEQCIAdIm8oUDp8Rzkx+x+J7zhLZQ0KlQEz1OSSo5S1+l3+JAiAedxuxSc26YoKoSVxC82w25IYI+WEmLgAOG4w5EQdi5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48159616},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"a9000ee58f67c23c50175bd72583b06ba924974d","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.13","@otto-code/relay":"0.8.13","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.13","@otto-code/protocol":"0.8.13","@otto-code/highlight":"0.8.13","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.13_1787422941421_0.7749423326357137","host":"s3://npm-registry-packages-npm-production"}},"0.8.14":{"name":"@otto-code/server","version":"0.8.14","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.14","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"892901b28b74e4d55f6c98a528203984c0e2e5a0","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.14.tgz","fileCount":1234,"integrity":"sha512-i2v3ZE6javj2UWyX+ZjxCass9prZIw7zGXNUpNAL+KHyZDHT43o4gurJRglRULfoacrcEGkgzczjAYy/wKVrGg==","signatures":[{"sig":"MEYCIQD8soImktpFvqsryZpAzjWN0gpjCVxgaNYYpDU+DC+J+AIhAID9UKYemu6C6vWqZe539sBb2bCMW94eYhplvpxVtzJB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48293612},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"66baddc788abf3ac40e20011aa2c9d32546ad4b6","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.14","@otto-code/relay":"0.8.14","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.14","@otto-code/protocol":"0.8.14","@otto-code/highlight":"0.8.14","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.14_1787531674959_0.04714750055382444","host":"s3://npm-registry-packages-npm-production"}},"0.8.15":{"name":"@otto-code/server","version":"0.8.15","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.15","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"ce1d5f2f437e8f56e901b357e62a78081b895f6c","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.15.tgz","fileCount":1234,"integrity":"sha512-YQ9JskmmdjHs/mcrJCLFKJCyh33nikAXS0lGM/pYOZeYwJMRDnX1+Z0fJ72lykjRCIYM0dHtxoS5bxHT4TZacg==","signatures":[{"sig":"MEUCIQCgxuMg2A+wy0jhj60cvpNS+2hsejez20uDnm1iaoTAKwIgD9Cc26+BA/ZTwSxHybm+fBGDx1Og0WhAEVa4Un9rF34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48297883},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"a243a71381170739ec4af63735e37783a1f7269e","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.15","@otto-code/relay":"0.8.15","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.15","@otto-code/protocol":"0.8.15","@otto-code/highlight":"0.8.15","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.15_1787547338965_0.30497088871023803","host":"s3://npm-registry-packages-npm-production"}},"0.8.16":{"name":"@otto-code/server","version":"0.8.16","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.16","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"d270bfba372d7cf0f69931a5d22ffb497f5ba53b","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.16.tgz","fileCount":1234,"integrity":"sha512-1S496Z/MqPWmPlu/74bYgLZ3ZEiqMzAc8f9x7R/cjPoPwG2mabx8kSQ6SQgVMbQNQnQYxXtJDCysmqNjyQ5hiQ==","signatures":[{"sig":"MEUCIQDmWJEXfAbmfWt9ZKYE/dS9L8WUsMkp+ZHBrVW87nHU9AIgTP9Jmm3guF8i5jXFiFeu5yc8JDOboumOgeM7MG6ObrM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48492856},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"2f240be17f19cb9eeea8fd62cfdb30d0e426a0b2","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.16","@otto-code/relay":"0.8.16","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.16","@otto-code/protocol":"0.8.16","@otto-code/highlight":"0.8.16","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.16_1787631570109_0.3204214197119384","host":"s3://npm-registry-packages-npm-production"}},"0.8.17":{"name":"@otto-code/server","version":"0.8.17","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.17","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"34b461f479d4fc763e7f29be6c32c819720667b8","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.17.tgz","fileCount":1234,"integrity":"sha512-5i7MftwhuIz2cC68r7awQCjK1RFdv2O9uXcP7bD1cS5rzJczatsM+iGAhNMdoDVpqLyqiN5/NoRZT9q0G4nXDQ==","signatures":[{"sig":"MEQCIB0DW+xPZiWLaPPbeAVc49vAO+LXwoxoOK1eUAMpM+XQAiB0WbHcTPeMiEgGSp91hMmvueHerRBVhQJl+x8IhDzBYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48492606},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"4fd6aca3d27b9ba6421f579629c6a653bfc132fc","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.17","@otto-code/relay":"0.8.17","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.17","@otto-code/protocol":"0.8.17","@otto-code/highlight":"0.8.17","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.17_1787665255086_0.18249370995126957","host":"s3://npm-registry-packages-npm-production"}},"0.8.18":{"name":"@otto-code/server","version":"0.8.18","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.18","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"b7dae5e4c2965aad541d137490a517fc46363b22","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.18.tgz","fileCount":1240,"integrity":"sha512-8xpTlhclnN8z3lXxK59mXGbfflo5MoTrdbUfj2BFmqv2HMwZiL6aIo+8NKhzL07X9qKA0tGSMgvKd6p61wig9g==","signatures":[{"sig":"MEUCIQDOw6iQUVoZCRmZw+9WcPfG1GgQ9Cd93j0nK3lzq7podwIgdRx+Lk/PCi53h3Xsx3M1wximlgpEWjPnUC06CbOInok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48641949},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"dd8a93ad47448bbe99db719a3ca5799beefc6a89","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.18","@otto-code/relay":"0.8.18","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.18","@otto-code/protocol":"0.8.18","@otto-code/highlight":"0.8.18","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.18_1787747350930_0.10982963709962168","host":"s3://npm-registry-packages-npm-production"}},"0.8.19":{"name":"@otto-code/server","version":"0.8.19","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.8.19","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"ccc635a980329e77dc5aa557e59c3db7765fa9d7","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.8.19.tgz","fileCount":1242,"integrity":"sha512-8ChsZADNSUK0/RkTDNiZUVWqnp+CkZb93+456CWqVg7b060c4YXM4hd7wZv4H/uVxViQwMDosxhT6xt3CjAAOw==","signatures":[{"sig":"MEYCIQDVY1Yh/ikZySc13xDhz8JbFZOO8p339o+goivcGJkiJQIhAKj3sk/6NyFQeJToG9O5S7mds82eA3PPO7XWwVach1TY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48837360},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"c80b0cac48da63a7619d7f68895081a603f20310","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.8.19","@otto-code/relay":"0.8.19","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.8.19","@otto-code/protocol":"0.8.19","@otto-code/highlight":"0.8.19","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"^0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.8.19_1787889036458_0.7071975480553183","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@otto-code/server","version":"0.9.0","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.0","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"97ff5d09f8dd00fbeff3c120d1a0545926d2fc1a","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.0.tgz","fileCount":1481,"integrity":"sha512-YQ4QUbHuG0D3UNdLhO0jPH2OQRTKxtPbTc33YWIKMsgEjvGTM6zNOFml3OawiZcL1E27jP1DGUg3q8k4U4qPWg==","signatures":[{"sig":"MEUCIQDjsGHGEz6SexWqbiwv8wWWzi/gyybJE36xd717NCsNwgIgY4V4v/Tx54yAuy1BfSZ0vREDrJbQoCxZSgwjayqMP3E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60260497},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"7e9921df7d534780b0c00afc19584553a6148c9a","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.0","@otto-code/relay":"0.9.0","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.0","@otto-code/plugin":"0.9.0","@otto-code/protocol":"0.9.0","@otto-code/highlight":"0.9.0","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.0_1788492685013_0.8813742535659488","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@otto-code/server","version":"0.9.2","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.2","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"16fc3cc95d3bc08c3de02bf639f2275df7ee75fb","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.2.tgz","fileCount":1513,"integrity":"sha512-cp5Uck4PNOADNwbOmnlEOsOUD7ZFun7MlSOAF0kgBBeGEbIPkpGSKYWP9sznompKemF6abBrt9xL0izeF10p5g==","signatures":[{"sig":"MEUCIEkj3fSu6MvUfmYQHZVmzUTLo1pCi/Ph2tCYWlwoDSKNAiEAms8+KLF6Rr3QDMlaQ4Yx1Tkmwak/La1LrX8eouaC6NM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60580318},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f55be64e701b253f6e11120e44d0e3d0e98ae5df","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.2","@otto-code/relay":"0.9.2","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.2","@otto-code/plugin":"0.9.2","@otto-code/protocol":"0.9.2","@otto-code/highlight":"0.9.2","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.2_1788723495911_0.8178926518955949","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"@otto-code/server","version":"0.9.3","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.3","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"87eb876c541e47d75ad26693fe2b4f2dee6172f4","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.3.tgz","fileCount":1513,"integrity":"sha512-Q0RzmS41Mi0mjW+bQwD9LSGVLr+by7i1Fbw9XUV7YrckjnI47Wrpxw4JmmPUll7WIiogKVr2Z4A2is9cwd+R9g==","signatures":[{"sig":"MEQCIBaq3k8zQl0It/7wdmS9QynGpjBPwPH3s+vVFe0DMOL6AiAIEhbv0hMVR8Md4n+qCz9VE+jklzBh1EmTwf1JnSEYQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60578935},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"94753270e11a01d2e13440c1b25e461118385e57","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.3","@otto-code/relay":"0.9.3","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.3","@otto-code/plugin":"0.9.3","@otto-code/protocol":"0.9.3","@otto-code/highlight":"0.9.3","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.3_1788792044065_0.5607176350412826","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"@otto-code/server","version":"0.9.4","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.4","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"b958faa3c01e0103cfcf333f59c6cbf49e8c325f","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.4.tgz","fileCount":1513,"integrity":"sha512-tRH1tFi5I4s/nmzLBFEKjQsk4qvH/U242eV+DTnGuq43Xej52UN86XniMukuaaTW123PTwXQEjcnt/TBdiqiYQ==","signatures":[{"sig":"MEQCIAxVqkVzG0Ec0iz8Lnamp4aklS2G1JBIG6nYxu+ewtz0AiAI3Cju/UAmeAIfqWzhLmPCjfdsahRcjOEftNzPzV73Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60580590},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"25543a9ce70be5be49e5dd7c5b3bc3bd4effe9fa","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.4","@otto-code/relay":"0.9.4","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.4","@otto-code/plugin":"0.9.4","@otto-code/protocol":"0.9.4","@otto-code/highlight":"0.9.4","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.4_1788844608335_0.831871356367174","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"@otto-code/server","version":"0.9.5","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.5","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"983c01065685ffd8d8d5c7dfc1297167cf84c13c","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.5.tgz","fileCount":1513,"integrity":"sha512-2XQ4kdAdacQqxrUOPLfOH30fjvdqWlOYu1sqW2hxZd7RODyBlcWzcWGmDwi2hCFaNi9sfvd6ElD8EaxMfQI9Cg==","signatures":[{"sig":"MEUCIQDbgYvn/IJhbovzOrWQqbXIUtjC773x93pKGPsHouz3MQIgOPn3Ss6Y73mTKVsZ0pv6+HcYeT9OQYxkGdCuVORa300=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60583677},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f18494418be8695a66a9e0c1a1cc8c2056a8087e","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.5","@otto-code/relay":"0.9.5","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.5","@otto-code/plugin":"0.9.5","@otto-code/protocol":"0.9.5","@otto-code/highlight":"0.9.5","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.5_1788895203149_0.6924520850322715","host":"s3://npm-registry-packages-npm-production"}},"0.9.6":{"name":"@otto-code/server","version":"0.9.6","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.6","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"8ade4935d8b1054782eb02e23b70a62129cdf032","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.6.tgz","fileCount":1521,"integrity":"sha512-3bdlQnNIjsumilMMYSaRx/1IDaHW72QfZy8erI4vNyZYpShCHHshR9WqGXgEKbjqA1xBxh1Ir3Qsby6zjYA0sQ==","signatures":[{"sig":"MEUCIAVXl5EvNYIL1Mj1opQI5gg1D8erV+UY2jbTIFZ4m+HhAiEA1Ccj7QqGIYQsTxQJnuVtaiP75KCYIVFeGuT1e/KK4Yc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60669341},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"4b8507cbfed6eb758d59869861ba4bbd7a1980c3","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.6","@otto-code/relay":"0.9.6","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.6","@otto-code/plugin":"0.9.6","@otto-code/protocol":"0.9.6","@otto-code/highlight":"0.9.6","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.6_1789074893118_0.5829044333030386","host":"s3://npm-registry-packages-npm-production"}},"0.9.7":{"name":"@otto-code/server","version":"0.9.7","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.7","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"7cf8f6999c2668eced37092e5be1ddae6adf6d04","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.7.tgz","fileCount":1521,"integrity":"sha512-Qdn6aq0B4unzwzExIK9F1MhbUBbrrsN+fE+KGrxXSq6gQbaqRKwNleiMHrZitOzAhDo+uhNNnAd4/lekudkTQQ==","signatures":[{"sig":"MEYCIQDDNLIYopBmpGwCXG2wIG7DuKJLNiSbDy5DDxu1pvNhTAIhAPkBP4TjQXvM9PVllKN/IQtAXERGC4CRFKqTllm9A6RQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60688320},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"6ef9ce8a307c12e0af2d8dab9c22fb625a906d4b","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.7","@otto-code/relay":"0.9.7","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.7","@otto-code/plugin":"0.9.7","@otto-code/protocol":"0.9.7","@otto-code/highlight":"0.9.7","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.7_1789189878796_0.9841153897140562","host":"s3://npm-registry-packages-npm-production"}},"0.9.8":{"name":"@otto-code/server","version":"0.9.8","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.8","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"271c8a4d5545ad333790fe42cdf36704f669369b","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.8.tgz","fileCount":1527,"integrity":"sha512-68FAb3AgCpYN8G20Qe4YVJJoR/AOWA31pKx8ecL7YsLj5PG6rZO4SWgxmeu8E94Vvkptutr9qjCKMWJCdZZvoQ==","signatures":[{"sig":"MEUCIQDDwHHv9owSnAs75ZpmNYzEoUNovqk3eKjp7+SwVmstnwIgTCzbclcsSvWb1/7DAHhdFWj4kaYy299GFybSSloJ44M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60777444},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"c3f2b840debe2378c693188084d28589e55f85b3","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.8","@otto-code/relay":"0.9.8","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.8","@otto-code/plugin":"0.9.8","@otto-code/protocol":"0.9.8","@otto-code/highlight":"0.9.8","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.8_1789236727187_0.8614391460245066","host":"s3://npm-registry-packages-npm-production"}},"0.9.9":{"name":"@otto-code/server","version":"0.9.9","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.9","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"e08e72034d00584ebc537a406b4bd3c1a91f782a","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.9.tgz","fileCount":1553,"integrity":"sha512-FiiP4kbiwb8Xjt/sGLBg2yFxpYZ8vDoQS2ao4Bmy5IHOsJUrLED9mAn4pqRAal2MIPbeFwGpjXtn8x1bKYr7dg==","signatures":[{"sig":"MEQCIBUSkdpmyHWQlOxgKoOUeu4N6oSvYzgPr963gI4O4RHfAiAfawMWrNqx35D+RlyCda/C+y2eys7jsjsPX3ciYqgjuQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60874225},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"d7e4dc48d9c77c1bf532bb822ce191d65a7d3aa1","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.9","@otto-code/relay":"0.9.9","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.9","@otto-code/plugin":"0.9.9","@otto-code/protocol":"0.9.9","@otto-code/highlight":"0.9.9","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.9_1789256984103_0.49354875981628","host":"s3://npm-registry-packages-npm-production"}},"0.9.10":{"name":"@otto-code/server","version":"0.9.10","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.10","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"da59378563cf1787abb9510423c976c02a4be11b","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.10.tgz","fileCount":1553,"integrity":"sha512-oEcfhrgsBQFkdZ2BYg71Dbw/kLTC0K3e/8iiD33gz210Q7ypycW8cANDwRF+ICuIukwuY0FbXVQS/y13QHc1Aw==","signatures":[{"sig":"MEUCIQCsljvAXavXqAZvNLhf+YGJnwTnyMQTgaQRdfEHmtPzcwIgFhhhwkhUqkhQPjo1hdxzgZPvCtKEhiYpM0XicpADmyM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61569601},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"57d5e64643c4b8d54dcecaf03e7e47edd74fe1f3","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.10","@otto-code/relay":"0.9.10","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.10","@otto-code/plugin":"0.9.10","@otto-code/protocol":"0.9.10","@otto-code/highlight":"0.9.10","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.220"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","typescript":"^5.2.2","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.10_1789272475819_0.27504747550182995","host":"s3://npm-registry-packages-npm-production"}},"0.9.11":{"name":"@otto-code/server","version":"0.9.11","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.11","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"afc54d8b5bb7f1da87efc41c404a58c334dc8eb8","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.11.tgz","fileCount":1627,"integrity":"sha512-bLS03JnvvfdUppYxa+JNxAcQTmlrAF+jslQhKnmL3ZH7Cga3a8kvHbb7sez1CDcbm5mjdctFJm2PvDA5rU8KpQ==","signatures":[{"sig":"MEYCIQD/w6dRcMS8w1bTjrmUsPnHYBv7Nti7VYxYjVrX79cfJgIhAO+8vpGviwg1VLavxwgkKQ/ZZOUgG7uPwn2dP+Oqbdwk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63311919},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"53424fb4e0f29c081fb579132ba0adf306d5cacc","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.78","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^9.0.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.28.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.11","@otto-code/relay":"0.9.11","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.11","@otto-code/plugin":"0.9.11","@otto-code/protocol":"0.9.11","@otto-code/highlight":"0.9.11","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.246"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.10","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.10","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.11_1789391216254_0.0597752582754707","host":"s3://npm-registry-packages-npm-production"}},"0.9.12":{"name":"@otto-code/server","version":"0.9.12","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.12","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"dist":{"shasum":"39b465352b5d38a5c5f8a48d9a3b8b75a7e77279","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.12.tgz","fileCount":1627,"integrity":"sha512-5daNbEGYB6SBkdwjDNjyGWoav8dk/d3Ay4ZfCXtvRqSvF71L/pFWGUJWpfM0Y7XuXaD9CVXFpfQLSRHICHWmSQ==","signatures":[{"sig":"MEYCIQCmyHT2rGZ6HnzQoQGwNbW7iDmzB4/mxeslke9ybLRA9QIhAOOauoIkNbMg4c3UAQwXnprOnhj8BG5u5/zkIVTfL0CA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63335127},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"cfb3ae372718fb28f78f7843dd08fb9bc7f7a0b4","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"draek2077","email":"philippe@zehnder.ca"},"overrides":{"lightningcss":"1.30.1"},"_npmVersion":"11.13.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.17.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.12","@otto-code/relay":"0.9.12","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.12","@otto-code/plugin":"0.9.12","@otto-code/protocol":"0.9.12","@otto-code/highlight":"0.9.12","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.246"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.12_1789582838688_0.355571414419001","host":"s3://npm-registry-packages-npm-production"}},"0.9.13-beta.1":{"name":"@otto-code/server","version":"0.9.13-beta.1","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.13-beta.1","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"2905f465a01be6d6901f9cc8e92402bfb41917b6","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.13-beta.1.tgz","fileCount":1627,"integrity":"sha512-JPyaHhJZbxyol9HjK25GuWN2KMrRY0WMZYmmk4phMx6b7EMXL2trBe5wXu/UMy6fMSMVHhhjdcDB5Bzgr/Aaew==","signatures":[{"sig":"MEQCIGD6nEMTvjOCFa5vskjd0wTmudjrDa7ssmDASBV3dnRnAiAJQ7NHxpYxOzq/RkGy/fMGL/wMEopUdvrHPjIN4I4vpw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.13-beta.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63344304},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"4510af00a6d1072b8a36e7f0238e3ff39f4f4ee0","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.13-beta.1","@otto-code/relay":"0.9.13-beta.1","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.13-beta.1","@otto-code/plugin":"0.9.13-beta.1","@otto-code/protocol":"0.9.13-beta.1","@otto-code/highlight":"0.9.13-beta.1","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.246"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.13-beta.1_1789587436313_0.541871010065222","host":"s3://npm-registry-packages-npm-production"}},"0.9.13":{"name":"@otto-code/server","version":"0.9.13","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.13","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"94c212fd41e3b8f15b1cbf1cc2f4bf820b90ab72","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.13.tgz","fileCount":1629,"integrity":"sha512-awrR/RCMQzy/4v/2FL9+77mRA/O98ksQHBoTA6InsfbhDdxwq3WnlJp2AWikavHAi1phQzvmHOUGcK7EA1FirA==","signatures":[{"sig":"MEUCIQCxL/24wQ4KPdycrumt2t4ci0NEDLx93+/rGBDkkrOo2QIgT0Igy3AHgjliyBYuNN0fJhBNPL3hY7JiLloYWao4KBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63371838},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"14dd929eb10a96c18816ff7048576b1ae3d63a88","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.13","@otto-code/relay":"0.9.13","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.13","@otto-code/plugin":"0.9.13","@otto-code/protocol":"0.9.13","@otto-code/highlight":"0.9.13","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.246"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.13_1789650568391_0.051603520201263686","host":"s3://npm-registry-packages-npm-production"}},"0.9.14":{"name":"@otto-code/server","version":"0.9.14","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.14","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"b5fa6cf82c14b43410caa1bd5a785d13b2d8aa2a","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.14.tgz","fileCount":1629,"integrity":"sha512-lr94S85ljW8kSac6GxY9dkreCrqDq3M1xIJZJR/YdBXvwPXCmBnQilH2KeicsvXvhypiHCccoWlOToJW6YirRA==","signatures":[{"sig":"MEYCIQDYpHqwJJQdtQ0TKZp6dO5GIh1Zy/60CJe2AoQcbfqI1wIhAJbxRLjIGOV3+jxoUXqfBJ7WBhJSFgj4RvksDfp4TrW4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIDiV49aK1JRP/23Wd5AlsqEh15MOU2vIMiTiEyzXaw7MAiEA0Y1axjh/sn681WumHrN6dQ0Ltic1UrRJCPGWkXwQUy4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63384462},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"93a5c27406fbeae39cfc5a58221a36e24f59bcef","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.14","@otto-code/relay":"0.9.14","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.14","@otto-code/plugin":"0.9.14","@otto-code/protocol":"0.9.14","@otto-code/highlight":"0.9.14","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.246"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.14_1789782411123_0.41581205374479335","host":"s3://npm-registry-packages-npm-production"}},"0.9.15":{"name":"@otto-code/server","version":"0.9.15","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.15","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"984362dbe4cf24ef23b0bc0c1eebed1bfebd55ca","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.15.tgz","fileCount":1629,"integrity":"sha512-/AyIHWjjKSll1agU8v5GtmbBW1/1GrLz7b3QH3zGKc2xdnkPdMUP2WtO9RPY4uMoqzktx5WT+2Ov41SAEHMC8w==","signatures":[{"sig":"MEUCIQDYEOJw9HdiLme5yNJ+4lu8ioFqgVS3z/BmZjcajorMLQIgBxx2LMYap5l+Zbk9sN/x5E8Sr2B1ZPO/AfKTtSFzJHk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDBGP1AQBSLer1XxY2I/xzS7SvkA/Kicacb5jXSch88dgIhAM3Z3cfLxrt5KcsjJRIJiaTS7Q7oJ9pHHRTr8RlV04xE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63426829},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"d32663f0c4ff42e466c4a8b38934db885f6b1ad8","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^6.44.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.14.46","@otto-code/brain":"0.9.15","@otto-code/relay":"0.9.15","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.104.2","@otto-code/client":"0.9.15","@otto-code/plugin":"0.9.15","@otto-code/protocol":"0.9.15","@otto-code/highlight":"0.9.15","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.246"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.15_1789843518386_0.44082861589245703","host":"s3://npm-registry-packages-npm-production"}},"0.9.16":{"name":"@otto-code/server","version":"0.9.16","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.16","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"6f45573ad56228ad093bff87b996045da4b059ff","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.16.tgz","fileCount":1629,"integrity":"sha512-f5QsDUTpCK1GZkkmV/AoyDASuqopsWNeQ4KdNX+ZXj0YdHVfrAHsoqZSoo26mtj47qvYioxmB2ovqrZq/h1ayQ==","signatures":[{"sig":"MEYCIQDFBNhIK2YniQGyxr4t7euGo8auDlxJ7xbAi3kYPstvxgIhAIKXubOkf89kxq39GZqSdj2YEoNbM3ckh+vv2eDUgb3z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDSzg2yL2QNq7A0A78zO6Mf4Unk+XWcAhPdVdWjc3UrHgIhAI+c3DSNf0qS0D80xgfK817SG/w8ufNEBOkSPKXIMHmT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63427242},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"9741df72f2d43282fe41d7c73dfb09b37db2c269","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.16","@otto-code/relay":"0.9.16","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.16","@otto-code/plugin":"0.9.16","@otto-code/protocol":"0.9.16","@otto-code/highlight":"0.9.16","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.16_1789850194773_0.09961497040840195","host":"s3://npm-registry-packages-npm-production"}},"0.9.17":{"name":"@otto-code/server","version":"0.9.17","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.17","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"98c02517c73bcea9f01cdac31883c3494a29975c","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.17.tgz","fileCount":1629,"integrity":"sha512-Yeyz0u6D1Aj1cQIVxGrpU2WNbcVRI2AX+pxJQvF65v8h9hL4NuVm+jBU/44e4MLru0F5FiJ4G5Y3wlTmYZkGjA==","signatures":[{"sig":"MEUCIA20lKON/7z1CnPHDSUGYjPNFXeAezDWH3rlIilX6B+kAiEA5ILLsTKhfAO946db8HWheFrMWdLKjoVReAH99G61vRk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIBzd5ceNlVawc+YQr9wRS2LP3tlC3QNUUlhxSHFGq0KMAiAlFwh1NygCLefUY+UaoUEDpC4QqnVNAe9ai99LEhD1tg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63444694},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f479fafdcabeb546d7f5da550f35c18b32ab5a15","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.17","@otto-code/relay":"0.9.17","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.17","@otto-code/plugin":"0.9.17","@otto-code/protocol":"0.9.17","@otto-code/highlight":"0.9.17","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.17_1789860233087_0.048716919878952325","host":"s3://npm-registry-packages-npm-production"}},"0.9.18":{"name":"@otto-code/server","version":"0.9.18","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.18","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"0ed6e4104fdffd3c1a3d152c8328faf0ae206dbb","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.18.tgz","fileCount":1629,"integrity":"sha512-MSLp8B+32Ux3m4g8+tySvZTKNmUHJzhi4BdRklLdacX9scUqE+9vug19aBnf5qcWfJ5j8A+s/4I0DYDUJ+qA2A==","signatures":[{"sig":"MEUCIQC1rSzuRZAvpsJ63KTuSZzYIrDk4wiPNAgTvTSwlp/VCQIgdeUfljKFu4WmZDIr0weoioY22fwf1RNV/+3ocAuGxWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAsl87QmCptzdsrtpMI6gZvxTFwOKNQSytDw3cHR5VKWAiEAyLABdCy/w7S7aoOrrEUEVJKiCF4yQyAAckxpEK/Bwyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63448607},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"e84b9edd6b73b6ff73db14e2439b50848eb2e8dc","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.18","@otto-code/relay":"0.9.18","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.18","@otto-code/plugin":"0.9.18","@otto-code/protocol":"0.9.18","@otto-code/highlight":"0.9.18","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.18_1789880260353_0.4568763312049293","host":"s3://npm-registry-packages-npm-production"}},"0.9.19":{"name":"@otto-code/server","version":"0.9.19","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.19","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"8705997f3f367b961544cdb896986bde46e206e2","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.19.tgz","fileCount":1629,"integrity":"sha512-gBAGy1bGN0PbWzSpMkaoIzprKrYTpiZyLIPQxZbhWM+n8TzhwJQYqfNuqf3B2uMk02NCz7+8oHOGhS21viV0KQ==","signatures":[{"sig":"MEQCIBquQL4dXvaFzIGi3PtXCuImfPmwy304u+/uDtq3DviDAiBQkS7D+Fm9RCx5GTRsC802XX23ucr3L2RexePO1LWI2g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD8/wKlIbNpnYmpQHlD8NXeBr1csBd9dvstgYFuPTaNxwIgT5dt4icCdO9i7YrNKvKcaI4qy9B5Ko4QbolfmTCVCEg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63452578},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"f927d58b6a3f1c0afce5e3a1f8daaca0c0dbe7df","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.19","@otto-code/relay":"0.9.19","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.19","@otto-code/plugin":"0.9.19","@otto-code/protocol":"0.9.19","@otto-code/highlight":"0.9.19","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.19_1789963530249_0.13283076279933903","host":"s3://npm-registry-packages-npm-production"}},"0.9.20":{"name":"@otto-code/server","version":"0.9.20","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.20","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"259e5f82f1e68274f709efbbf230c54cb33fc855","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.20.tgz","fileCount":1629,"integrity":"sha512-pqiHsr952k3nZ+6s9CWkp7bN9OWFK6FWuWubdnabUA3gpGSScsu7R8s3m5t8DUTPl3j30Kzk2rUeB3J7Q9JErg==","signatures":[{"sig":"MEUCIQDVE7YjQlJZBBW/YhdW2qCZ5I08jszBg84dwfbWrn+KOgIgEksqoCitlMIe0Su6ijXTYbX8tGN6C19ygECvsJRalUw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDCABGikZ2nWILBxcywqZeE1LEOWdAUbRFmA4LAnT0I1wIhAKtPb9sAfFafCeiAY6k3UMpfsfx6u9H2Pn6PUnGkb8Bf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63453618},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"15eb88bbd7063d0cd51a928a4654eb22833cf30d","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.20","@otto-code/relay":"0.9.20","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.20","@otto-code/plugin":"0.9.20","@otto-code/protocol":"0.9.20","@otto-code/highlight":"0.9.20","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.20_1790085438339_0.3471078483218857","host":"s3://npm-registry-packages-npm-production"}},"0.9.21":{"name":"@otto-code/server","version":"0.9.21","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.21","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"5f400d5b30f62aa79203934504521583ef3f092f","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.21.tgz","fileCount":1629,"integrity":"sha512-BQhvHcrFEUTDwAoGXc4iZO4M9114+pPj3RRoE3FO3nnVuq3rGslAOyVlRKZnSfOdmlHRZW9VI09/zMK3jGAMyw==","signatures":[{"sig":"MEYCIQCX4YAvG38KyJQppkscaAni59hv5rxyyYmKzRgWesDQAgIhAKpn1ehibLzZsHJserYvHZ/g09meKw9WzXNjX9ZSgsD/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHtiUoZ+NokEV5EbTFJnAoTcSvkzK8WQRfmo4Kx8MChxAiB1cpCMeIIfWJfb0l4YhJC823007v0bnFth4wvzPWo3Kg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63456041},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"94fe8ce77033c6a15fc106ab1601a6019db29093","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.20.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.21","@otto-code/relay":"0.9.21","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.21","@otto-code/plugin":"0.9.21","@otto-code/protocol":"0.9.21","@otto-code/highlight":"0.9.21","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.21_1790109537250_0.9569115539500681","host":"s3://npm-registry-packages-npm-production"}},"0.9.22":{"name":"@otto-code/server","version":"0.9.22","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.22","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"e38fa969735cf2a7d943d3e867b5a54c0653fee5","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.22.tgz","fileCount":1697,"integrity":"sha512-1mQIauTJHf+hF1ceoNuiDG2brnKSYnG2A6abPy15zIJochPANcZsSwlyMOR/ejqOWvHPoAYaGOui4mO07781ZQ==","signatures":[{"sig":"MEUCIF1ZSvQfNN4R9pXuGq2rDqcuWu8KTcIoNMd4bdvIY5bKAiEAtAIzHAbe49w/oa7/XnzFZplwEZGTMT5HwB/1US5/k0A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCpQSujtTXDiD6o7NzsbhwedAWsgW9lya6IR0ubGr1UmwIgD/LrLOM8bJ9luakxy/zd2ffKtDiAlrF1NWxWswXIfoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63574076},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"4fa2a098f93a72ce8eb83254faaafe1274ea64f9","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.22","@otto-code/relay":"0.9.22","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.22","@otto-code/plugin":"0.9.22","@otto-code/protocol":"0.9.22","@otto-code/highlight":"0.9.22","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.22_1790349723305_0.6135867383977391","host":"s3://npm-registry-packages-npm-production"}},"0.9.23":{"name":"@otto-code/server","version":"0.9.23","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.23","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"33cc51aa54b2fad401843f391d7fdd43ff721aab","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.23.tgz","fileCount":1699,"integrity":"sha512-Z/HGBWMl4cwElLD8/CBQIYJaVF6brizax06l2B/ywzW/7OhO6AGy0D1u39uaYhiCKN6qjEhH6xr7QCXbelkJfQ==","signatures":[{"sig":"MEYCIQCsUAZQtw7MnSMLFilaxebKyckuLoksN5gAfED4UqZXIQIhAMdaYQDDYxoUJmP8bXt6Z/Ghqx+ukp9cxOYsj9G49tbv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEd5wDq2UKd768A4OJrIresQagbYWhbRlKevaCzQgYQrAiEAwR1cI+PQz6FOd0UiGvnopnX0CH4CH2FTTTIYlvRh1IY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63576892},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"543da160049d2607b4b4866a547c6bdc4f88f597","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.23","@otto-code/relay":"0.9.23","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.23","@otto-code/plugin":"0.9.23","@otto-code/protocol":"0.9.23","@otto-code/highlight":"0.9.23","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.23_1790364091326_0.491579933950981","host":"s3://npm-registry-packages-npm-production"}},"0.9.24":{"name":"@otto-code/server","version":"0.9.24","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.24","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"fdd3ec10fa0bfa35480f9e9915303ed5c7bda487","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.24.tgz","fileCount":1699,"integrity":"sha512-tRzOPYeZZpJ3L+Ei669GyVfLPuZ+wEDSfpkMjfYY0Yvz1x/uinIUweDun0/bTlRqLxxm+4ZpsTFUiJCWHWi/AQ==","signatures":[{"sig":"MEYCIQCkC+Nnexh2pDSXE4Ae6WZIwQPCMc2zzHi2BjBa/5mAewIhANsSIVdfKrGSvVhmxRIktfzUAYnSiguGo0FqwOIpSuRs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIELD8dLB/DR7JCh1Q1JihJw0ow8XRp7D8C1ASnzhHeNFAiEA1BlZGPVYsAt8ypRuTcYIFkBIWL1S2Z0hkH9F7J/O/yE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":63579298},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"bc39fb575f0972e0957f316979e02aff635ec51b","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.24","@otto-code/relay":"0.9.24","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.24","@otto-code/plugin":"0.9.24","@otto-code/protocol":"0.9.24","@otto-code/highlight":"0.9.24","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.24_1790371464162_0.9723754092802395","host":"s3://npm-registry-packages-npm-production"}},"0.9.25":{"name":"@otto-code/server","version":"0.9.25","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.25","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"e03567317b33ae914d993d912a2c06d9f3361a28","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.25.tgz","fileCount":1756,"integrity":"sha512-/GbesPBR8vNMDG8VggM+80l4nlp6U/HZTDV7TNYj+L6QcxPpBz6idE68kyytcmZpz7Vb5ldJ0zCKQzJ2ZwZT1Q==","signatures":[{"sig":"MEUCID1b8bC7lXdIiU5fv3pg8Dr/GXfu0b0oVhlK+PWezr+MAiEA3V2izH7kTGBNUu9X/IvyuQ4ZXyWRLsZwKk/F4LWUzd4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDQv1yO/pFeEOG1nYLADy9Ebs/k2DBJXNlV5NP9SdlXAQIhAKg9/qo2Iuw7Pinzsiew2dsNLgcPRm5iVeo7zBfm7i2x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65617322},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"54b40d7571300c3a2af78ebe230be0302365cd59","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","measure:hosted-browser":"tsx scripts/measure-hosted-browser-stream.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","playwright":"^1.58.2","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.25","@otto-code/relay":"0.9.25","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.25","@otto-code/plugin":"0.9.25","@otto-code/protocol":"0.9.25","@otto-code/highlight":"0.9.25","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.25_1790551134694_0.18110257593025758","host":"s3://npm-registry-packages-npm-production"}},"0.9.26":{"name":"@otto-code/server","version":"0.9.26","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.26","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"e5b7cfc4333aa26640fd158cd667ffaf9155a5e3","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.26.tgz","fileCount":1766,"integrity":"sha512-Uozs2oHvuBt/zpbJlJ101unQfxBe1gqKlTzxiYPtwJu5HU96GAH5p1aAnPli1yb2GUQtNpQZlw+e8NROeLcZuA==","signatures":[{"sig":"MEUCIQDwmDFAofQ1t2PGsfb/o/4o82htxtwO4BIAphfeJxO2TgIgK5znydiwUGjjOZR0TQWCR5UWfOmJL3m21U6pIje4O/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCeeg7IdaTMo9YfpLtngqwq9ZFeVKPCKgO3i0hO7bGFiQIhAOupuEsn0dYST0P2vk0qJ4UdcpSf3EqoebE+lTvWKaYN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65791499},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"ddfef1f71f4c95033be918817aba696988ad1bac","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","measure:hosted-browser":"tsx scripts/measure-hosted-browser-stream.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","validate:kanban-graphql":"node scripts/validate-kanban-graphql.mjs","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","playwright":"^1.58.2","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.26","@otto-code/relay":"0.9.26","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.26","@otto-code/plugin":"0.9.26","@otto-code/protocol":"0.9.26","@otto-code/highlight":"0.9.26","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.26_1790565225226_0.4563804657552437","host":"s3://npm-registry-packages-npm-production"}},"0.9.27":{"name":"@otto-code/server","version":"0.9.27","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.27","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"88287b2a571b2452a64b70b996816bfda9bae753","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.27.tgz","fileCount":1770,"integrity":"sha512-CNFeJsArYzMnZTLqMAX6Tx3MDdQ2GfY9jHy2CUxZoCgAeaG9JBLL+fIfoI890JkSoKsLaNOZxzL5xu/osca4EA==","signatures":[{"sig":"MEQCIHkh7TknJvB/C8Mhr0e9TleHSU/+iAimRjeZgtxikb+vAiBRmytvd+0V8U0UzCL5Dkrzqj9nDvSiOZB41D31+g2ddw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFQbf1Lz71p0Lqrs0EF9MYQqWe2JcB8VSSbUs1N/EbMlAiEAswUPPaIY8kjic2lKIaRmogtFjrOegirhbiZTI3jEzO4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65812500},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"35604d5588e950d44fa202d7d67cd10564d33ae0","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","measure:hosted-browser":"tsx scripts/measure-hosted-browser-stream.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","validate:kanban-graphql":"node scripts/validate-kanban-graphql.mjs","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","playwright":"^1.58.2","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.27","@otto-code/relay":"0.9.27","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.27","@otto-code/plugin":"0.9.27","@otto-code/protocol":"0.9.27","@otto-code/highlight":"0.9.27","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.27_1790600282177_0.3671771596485285","host":"s3://npm-registry-packages-npm-production"}},"0.9.28":{"name":"@otto-code/server","version":"0.9.28","license":"AGPL-3.0-or-later","_id":"@otto-code/server@0.9.28","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"homepage":"https://github.com/Draek2077/otto-code#readme","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"96a9960c35d811e5d1e89578e69e3d811d56430a","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.28.tgz","fileCount":1770,"integrity":"sha512-zRoeFlrcn2/kCfXsVR8XgePneSY9YAehQX8Vv/L5+EuzUw/bIPYPq6C2lw5DgH5riilNqLTclqiqCNyWYa+rSg==","signatures":[{"sig":"MEQCID8pPRY7VuGot4Dm+0Fc8LXW0dFsBk6VEQ/cSirPcg8hAiAyiPKTJMi1VPenAwaJRWCr7jsjpYvMwSwrJs7jg9AHng==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQC8wtRo77QWiMhC1egQyZ0X5IGjtdcsiukrj2utMVbkEQIgGJ8O0Jco1xbJXe30OPACxtXSUXwfhCzOjp8M7TOsy74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65831719},"type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"05d7f40c0ec2057f7c0dd2388772576f91519ba0","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","measure:hosted-browser":"tsx scripts/measure-hosted-browser-stream.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","validate:kanban-graphql":"node scripts/validate-kanban-graphql.mjs","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","playwright":"^1.58.2","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.28","@otto-code/relay":"0.9.28","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.28","@otto-code/plugin":"0.9.28","@otto-code/protocol":"0.9.28","@otto-code/highlight":"0.9.28","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"tmp":"tmp/server_0.9.28_1790709547233_0.8640201649011752","host":"s3://npm-registry-packages-npm-production"}},"0.9.29":{"_id":"@otto-code/server@0.9.29","bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"dist":{"shasum":"3a9785af5ff2e3a51df968f51d0fec355a35ea55","tarball":"https://registry.npmjs.org/@otto-code/server/-/server-0.9.29.tgz","fileCount":1770,"integrity":"sha512-iENMjdfeqmViXQFtF/tCyyeKGEUMs4P6/O+sKCdN5nFDJz9yuoJQAAo2Oce9o6cQvDQb9Yw1hXohv2odaLnXDA==","signatures":[{"sig":"MEYCIQD372oG95SK6I2OVjmGwaSHeoXjUEhehrE9+gOV+s9YJQIhALmE0NwR5d3hMXyjSQjKRrtzv+dNmZzYs4K2L8cHUlCE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDz8/58oCMEfQJ6lcjqo8T/7TKNQJpdLeVFajbJ2oSKaQIgSu6Xm7urL+jiMTyhuV47/0jyobFnhkAO3MVlG4VwyXE="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@otto-code%2fserver@0.9.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":65854718},"name":"@otto-code/server","type":"module","types":"./dist/server/server/exports.d.ts","exports":{".":{"types":"./dist/server/server/exports.d.ts","source":"./src/server/exports.ts","default":"./dist/server/server/exports.js"},"./agent-hooks":{"types":"./dist/server/terminal/agent-hooks/provider-registry.d.ts","source":"./src/terminal/agent-hooks/provider-registry.ts","default":"./dist/server/terminal/agent-hooks/provider-registry.js"},"./utils/tool-call-parsers":{"types":"./dist/server/utils/tool-call-parsers.d.ts","source":"./src/utils/tool-call-parsers.ts","default":"./dist/server/utils/tool-call-parsers.js"}},"gitHead":"da571dc48450524f920d87d576acbcb9b5e74e7c","license":"AGPL-3.0-or-later","scripts":{"dev":"cross-env OTTO_NODE_ENV=development node --import tsx scripts/dev-runner.ts","test":"npm run test:unit && npm run test:integration","build":"npm run build:lib && npm run build:scripts","clean":"node ../../scripts/clean-package-dist.mjs","start":"node dist/scripts/supervisor-entrypoint.js","dev:tsx":"cross-env OTTO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts","prepack":"npm run build:clean && npm --prefix ../.. run build:daemon-web-ui","test:ui":"vitest --ui","test:e2e":"vitest run e2e.test.ts --maxWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"","build:lib":"tsc -p tsconfig.server.json --incremental false && node scripts/build-opencode-bridge-plugin.mjs && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs'); fs.rmSync('dist/server/skills',{recursive:true,force:true}); fs.cpSync('../../skills','dist/server/skills',{recursive:true});\" && node ../../scripts/copy-archify-runtime.mjs && node ../../scripts/copy-google-oauth-client.mjs","test:unit":"vitest run --fileParallelism --exclude \"**/*.e2e.test.ts\"","typecheck":"tsgo -p tsconfig.server.typecheck.json --noEmit","test:watch":"vitest","build:clean":"npm run clean && npm run build","test:e2e:ui":"vitest --ui e2e.test.ts","test:e2e:all":"vitest run e2e.test.ts --maxWorkers=1","build:scripts":"tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"","speech:models":"tsx scripts/list-speech-models.ts","test:e2e:real":"npm run test:integration:real","prepublishOnly":"cross-env OTTO_REQUIRE_GOOGLE_OAUTH_CLIENT=1 node ../../scripts/copy-google-oauth-client.mjs","test:e2e:local":"npm run test:integration:local","speech:download":"tsx scripts/download-speech-models.ts","test:integration":"vitest run --maxWorkers=1 src/server/daemon-e2e/terminal-workspace-sdk.e2e.test.ts src/server/daemon-e2e/models.e2e.test.ts src/server/daemon-e2e/live-preferences.e2e.test.ts src/server/agent/model-catalog.e2e.test.ts && vitest run --maxWorkers=1 src/server/session.create-agent-worktree-autoarchive.e2e.test.ts -t \"creates a worktree and auto-archives both\"","measure:agent-tools":"tsx scripts/measure-agent-tools-context.ts","test:integration:all":"npm run test:e2e","measure:file-observer":"tsx scripts/measure-file-observer.ts","test:hub-cli-contract":"vitest run --maxWorkers=1 src/server/hub/hub-cli-contract.test.ts","test:integration:real":"vitest run real.e2e.test.ts","generate:config-schema":"tsx scripts/generate-config-schema.ts","measure:hosted-browser":"tsx scripts/measure-hosted-browser-stream.ts","test:integration:local":"vitest run local.e2e.test.ts","measure:git-observation":"tsx scripts/measure-git-observation.ts","speech:transcribe:local":"tsx scripts/transcribe-local-wav.ts","validate:kanban-graphql":"node scripts/validate-kanban-graphql.mjs","repro:file-observer-teardown":"tsx scripts/reproduce-file-observer-teardown.ts"},"version":"0.9.29","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"40ffa4d7-09f2-4a90-8856-9545708ee63f"}},"homepage":"https://github.com/Draek2077/otto-code#readme","overrides":{"lightningcss":"1.30.1"},"repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"_npmVersion":"11.19.0","description":"Otto backend server","directories":{},"maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"_nodeVersion":"24.21.0","dependencies":{"ai":"5.0.257","ws":"^8.21.0","ajv":"^8.20.0","ejs":"3.1.10","zod":"^4.4.3","pino":"^10.2.0","uuid":"^11.1.1","which":"^5.0.0","dotenv":"^17.2.3","openai":"^7.20.0","qrcode":"^1.5.4","undici":"^7.29.0","esbuild":"^0.25.12","express":"^4.18.2","jsonata":"2.2.2","p-limit":"^7.3.0","bcryptjs":"^3.0.3","node-pty":"1.2.0-beta.15","lru-cache":"^11.5.1","p-memoize":"^8.0.0","tree-kill":"^1.2.2","mailparser":"3.9.26","nodemailer":"10.0.9","p-throttle":"^8.1.0","playwright":"^1.58.2","strip-ansi":"^7.1.2","typescript":"^5.9.3","mnemonic-id":"^3.2.7","pino-pretty":"^13.1.3","@babel/parser":"^7.29.8","vscode-jsonrpc":"^8.2.1","@xterm/headless":"^6.0.0","fast-deep-equal":"^3.1.3","@isaacs/ttlcache":"^2.1.4","@napi-rs/keyring":"^1.3.0","@opencode-ai/sdk":"1.18.31","@otto-code/brain":"0.9.29","@otto-code/relay":"0.9.29","sherpa-onnx-node":"1.12.28","@anthropic-ai/sdk":"^0.127.0","@otto-code/client":"0.9.29","@otto-code/plugin":"0.9.29","@otto-code/protocol":"0.9.29","@otto-code/highlight":"0.9.29","rotating-file-stream":"^3.2.9","@agentclientprotocol/sdk":"^0.17.1","@modelcontextprotocol/sdk":"^1.30.0","typescript-language-server":"^5.3.0","@anthropic-ai/claude-agent-sdk":"0.3.278"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.6.0","vitest":"^4.1.11","@types/ws":"^8.5.8","cross-env":"^10.1.0","@types/ejs":"^3.1.5","@vitest/ui":"^4.1.11","@types/node":"^20.9.0","@types/uuid":"^9.0.7","@types/qrcode":"^1.5.6","@types/express":"^4.17.20","@playwright/test":"^1.56.1","@types/mailparser":"3.4.6","@types/nodemailer":"8.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/server_0.9.29_1790957214420_0.7228659166936611"}}},"time":{"created":"2026-07-12T01:17:18.381Z","modified":"2026-10-02T16:06:55.255Z","0.5.0":"2026-07-12T01:17:18.852Z","0.5.1":"2026-07-12T19:49:07.559Z","0.5.2":"2026-07-13T14:59:02.680Z","0.5.4":"2026-07-14T07:33:17.101Z","0.5.5":"2026-07-14T13:42:50.653Z","0.5.6":"2026-07-14T19:41:13.459Z","0.5.7":"2026-07-14T20:14:26.391Z","0.5.8":"2026-07-15T02:31:15.753Z","0.6.0":"2026-07-16T07:08:48.032Z","0.6.1":"2026-07-16T14:25:34.685Z","0.6.2":"2026-07-16T19:35:25.271Z","0.6.3":"2026-07-18T03:55:38.866Z","0.6.4":"2026-07-20T03:51:04.014Z","0.6.5":"2026-07-20T15:19:55.729Z","0.6.6":"2026-07-21T02:32:06.113Z","0.6.7":"2026-07-22T03:48:11.934Z","0.7.0":"2026-07-26T22:22:49.981Z","0.7.1":"2026-07-27T06:55:37.946Z","0.7.2":"2026-07-27T15:59:26.803Z","0.7.3":"2026-07-29T12:55:08.916Z","0.7.4":"2026-07-30T14:03:59.077Z","0.7.5":"2026-07-31T20:25:28.737Z","0.7.6":"2026-08-03T17:39:53.719Z","0.8.0":"2026-08-04T05:02:30.609Z","0.8.1":"2026-08-04T23:06:39.524Z","0.8.2":"2026-08-05T18:33:39.434Z","0.8.3":"2026-08-06T13:39:07.107Z","0.8.4":"2026-08-07T05:14:39.855Z","0.8.5":"2026-08-07T06:33:53.888Z","0.8.6":"2026-08-09T04:41:52.546Z","0.8.7":"2026-08-10T02:10:54.850Z","0.8.8":"2026-08-12T00:32:10.195Z","0.8.9":"2026-08-13T13:36:37.178Z","0.8.10":"2026-08-13T17:00:21.118Z","0.8.12":"2026-08-21T05:45:08.412Z","0.8.13":"2026-08-22T18:22:21.815Z","0.8.14":"2026-08-24T00:34:35.345Z","0.8.15":"2026-08-24T04:55:39.378Z","0.8.16":"2026-08-25T04:19:30.499Z","0.8.17":"2026-08-25T13:40:55.487Z","0.8.18":"2026-08-26T12:29:11.317Z","0.8.19":"2026-08-28T03:50:36.971Z","0.9.0":"2026-09-04T03:31:25.476Z","0.9.2":"2026-09-06T19:38:16.363Z","0.9.3":"2026-09-07T14:40:44.564Z","0.9.4":"2026-09-08T05:16:48.807Z","0.9.5":"2026-09-08T19:20:03.619Z","0.9.6":"2026-09-10T21:14:53.617Z","0.9.7":"2026-09-12T05:11:19.308Z","0.9.8":"2026-09-12T18:12:07.620Z","0.9.9":"2026-09-12T23:49:44.551Z","0.9.10":"2026-09-13T04:07:56.319Z","0.9.11":"2026-09-14T13:06:56.679Z","0.9.12":"2026-09-16T18:20:39.243Z","0.9.13-beta.1":"2026-09-16T19:37:16.759Z","0.9.13":"2026-09-17T13:09:28.883Z","0.9.14":"2026-09-19T01:46:51.749Z","0.9.15":"2026-09-19T18:45:18.805Z","0.9.16":"2026-09-19T20:36:35.177Z","0.9.17":"2026-09-19T23:23:53.503Z","0.9.18":"2026-09-20T04:57:40.751Z","0.9.19":"2026-09-21T04:05:30.759Z","0.9.20":"2026-09-22T13:57:18.853Z","0.9.21":"2026-09-22T20:38:57.835Z","0.9.22":"2026-09-25T15:22:03.692Z","0.9.23":"2026-09-25T19:21:31.813Z","0.9.24":"2026-09-25T21:24:24.610Z","0.9.25":"2026-09-27T23:18:55.084Z","0.9.26":"2026-09-28T03:13:45.632Z","0.9.27":"2026-09-28T12:58:02.586Z","0.9.28":"2026-09-29T19:19:07.739Z","0.9.29":"2026-10-02T16:06:54.946Z"},"bugs":{"url":"https://github.com/Draek2077/otto-code/issues"},"license":"AGPL-3.0-or-later","homepage":"https://github.com/Draek2077/otto-code#readme","repository":{"url":"git+https://github.com/Draek2077/otto-code.git","type":"git","directory":"packages/server"},"description":"Otto backend server","maintainers":[{"name":"draek2077","email":"philippe@zehnder.ca"}],"readme":"# Voice Assistant\n\nA voice-controlled terminal assistant that runs as a single local service.\n\n## Quick Start\n\n```bash\n# Install dependencies\nnpm install\n\n# Copy environment variables\ncp .env.example .env\n# Edit .env and add your API keys (OpenAI, Deepgram)\n\n# Run development servers\nnpm run dev\n\n# Open browser to http://localhost:5173\n```\n\n## Architecture\n\n- **Express Server** (port 3000) - Serves API and built UI in production\n- **Vite Dev Server** (port 5173) - Hot-reload React UI in development\n- **WebSocket** (`/ws`) - Real-time bidirectional communication\n- **Agent** - STT → LLM → TTS pipeline with terminal control\n- **Daemon** - tmux-based terminal management (in-process)\n\n## Development\n\n```bash\n# Run both servers (recommended)\nnpm run dev\n\n# Or run separately:\nnpm run dev:server  # Express on port 3000\nnpm run dev:ui      # Vite on port 5173\n\n# Type checking\nnpm run typecheck\n\n# Build for production\nnpm run build\n\n# Start production server\nnpm start\n```\n\n## Project Status\n\n**✅ Completed** (Phases 1-2):\n\n- Package setup and configuration\n- Express server with WebSocket\n- React UI with Vite\n- WebSocket client with ping/pong testing\n\n**⏳ In Progress** (Phase 3):\n\n- Terminal control (tmux integration)\n\n**📋 Planned** (Phases 4-9):\n\n- LLM integration (OpenAI GPT-4)\n- Agent orchestrator\n- Speech-to-Text (Deepgram)\n- Text-to-Speech (OpenAI)\n- Audio streaming\n- UI polish\n\nSee [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) for complete details.\n\n## Environment Variables\n\n```bash\nOPENAI_API_KEY=your-openai-key-here      # GPT-4 and TTS\nDEEPGRAM_API_KEY=your-deepgram-key-here  # Streaming STT\nSTT_MODEL=whisper-1        # Optional: override to gpt-4o-transcribe, etc.\nSTT_CONFIDENCE_THRESHOLD=-3.0  # Optional: reject low-confidence clips\nSTT_DEBUG_AUDIO_DIR=.stt-debug # Optional: persist raw dictation audio for debugging\nOTTO_HOME=~/.otto        # Runtime state directory (agents/, etc.)\nOTTO_LISTEN=127.0.0.1:6868  # Listen address (host:port or /path/to/socket)\n```\n\n`OTTO_HOME` defaults to `~/.otto` and isolates runtime artifacts like `agents/`. `OTTO_LISTEN` controls the daemon listen address. For blue/green testing you can run a parallel server without touching production state:\n\n```bash\nOTTO_HOME=~/.otto-blue OTTO_LISTEN=127.0.0.1:7777 npm run dev\n```\n\n## Tech Stack\n\n- **Server**: Express, TypeScript, ws (WebSocket)\n- **Client**: React 18, Vite, TypeScript\n- **Terminal**: tmux (via child_process)\n- **AI**: OpenAI (LLM + TTS), Deepgram (STT)\n\n## Testing\n\nCurrently manual testing via:\n\n1. Start servers: `npm run dev`\n2. Open http://localhost:5173\n3. Test WebSocket connection (green status indicator)\n4. Click \"Send Ping\" button to test communication\n\nMore testing guidance as features are implemented.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}