mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
OpenCode 1.14.42+ closes the /event SSE stream cleanly right after server.connected, breaking the entire turn lifecycle: prompts get queued and run, but Paseo never sees session.idle / message deltas / tool calls / questions. Every turn either fails with a generic stream EOF or hangs waiting for events that never arrive. Switch the post-EOF recovery to the canonical messages REST endpoint (via the upgraded SDK) and poll incrementally so tool calls and clarifying questions surface live during the SSE gap. Bound the wait with a completion cap and a separate liveness cap so silent rejections fail fast instead of hanging until the cap. Cap session.abort similarly so explicit cancels land within seconds. The recovery path is gated on the for-await loop exiting without a terminal event, so healthy turns never enter it - if upstream restores SSE delivery, this code becomes dead and is mechanically removable via the COMPAT(opencodeEofRecovery) and COMPAT(opencodeSlowAbort) tags. Also tighten the type of projectSettingsRoute on WorktreeSetupCalloutPolicy so router.navigate accepts it (was widened to string, broke app typecheck on main). Refs: getpaseo/paseo#861, anomalyco/opencode#26697, anomalyco/opencode#26635
114 lines
5.0 KiB
JSON
114 lines
5.0 KiB
JSON
{
|
|
"name": "@getpaseo/server",
|
|
"version": "0.1.72",
|
|
"description": "Paseo backend server",
|
|
"files": [
|
|
"dist/server",
|
|
"dist/src",
|
|
"dist/scripts",
|
|
"src/server/speech/providers/local/sherpa/assets",
|
|
"README.md",
|
|
".env.example"
|
|
],
|
|
"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"
|
|
},
|
|
"./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"
|
|
}
|
|
},
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"scripts": {
|
|
"dev": "cross-env PASEO_NODE_ENV=development node --import tsx scripts/dev-runner.ts",
|
|
"dev:tsx": "cross-env PASEO_NODE_ENV=development tsx watch --ignore '**/*.timestamp-*' scripts/dev-runner.ts",
|
|
"build": "node -e \"require('node:fs').rmSync('dist',{ recursive: true, force: true })\" && npm run build:lib && npm run build:scripts",
|
|
"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');\"",
|
|
"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');\"",
|
|
"prepack": "npm run build",
|
|
"start": "node dist/scripts/supervisor-entrypoint.js",
|
|
"typecheck": "tsgo -p tsconfig.server.typecheck.json --noEmit",
|
|
"generate:config-schema": "tsx scripts/generate-config-schema.ts",
|
|
"speech:models": "tsx scripts/list-speech-models.ts",
|
|
"speech:download": "tsx scripts/download-speech-models.ts",
|
|
"speech:tts:matrix": "tsx scripts/generate-sherpa-tts-matrix.ts",
|
|
"speech:transcribe:local": "tsx scripts/transcribe-local-wav.ts",
|
|
"test": "npm run test:unit && npm run test:integration",
|
|
"test:unit": "vitest run --exclude \"**/*.e2e.test.ts\"",
|
|
"test:integration": "vitest run --maxWorkers=1 --minWorkers=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",
|
|
"test:integration:all": "npm run test:e2e",
|
|
"test:integration:real": "vitest run real.e2e.test.ts",
|
|
"test:integration:local": "vitest run local.e2e.test.ts",
|
|
"test:watch": "vitest",
|
|
"test:ui": "vitest --ui",
|
|
"test:e2e": "vitest run e2e.test.ts --maxWorkers=1 --minWorkers=1 --exclude \"**/*.real.e2e.test.ts\" --exclude \"**/*.local.e2e.test.ts\"",
|
|
"test:e2e:all": "vitest run e2e.test.ts --maxWorkers=1 --minWorkers=1",
|
|
"test:e2e:real": "npm run test:integration:real",
|
|
"test:e2e:local": "npm run test:integration:local",
|
|
"test:e2e:ui": "vitest --ui e2e.test.ts"
|
|
},
|
|
"dependencies": {
|
|
"@agentclientprotocol/sdk": "^0.17.1",
|
|
"@anthropic-ai/claude-agent-sdk": "^0.2.133",
|
|
"@getpaseo/highlight": "0.1.72",
|
|
"@getpaseo/relay": "0.1.72",
|
|
"@isaacs/ttlcache": "^2.1.4",
|
|
"@mariozechner/pi-agent-core": "^0.70.2",
|
|
"@mariozechner/pi-ai": "^0.70.2",
|
|
"@mariozechner/pi-coding-agent": "^0.70.2",
|
|
"@modelcontextprotocol/sdk": "^1.20.1",
|
|
"@opencode-ai/sdk": "^1.14.46",
|
|
"@sctg/sentencepiece-js": "^1.1.0",
|
|
"@xterm/headless": "^6.0.0",
|
|
"ai": "5.0.78",
|
|
"ajv": "^8.20.0",
|
|
"bcryptjs": "^3.0.3",
|
|
"dotenv": "^17.2.3",
|
|
"express": "^4.18.2",
|
|
"fast-deep-equal": "^3.1.3",
|
|
"mnemonic-id": "^3.2.7",
|
|
"node-pty": "1.2.0-beta.11",
|
|
"onnxruntime-node": "^1.23.0",
|
|
"openai": "^4.20.0",
|
|
"p-limit": "^7.3.0",
|
|
"p-memoize": "^8.0.0",
|
|
"pino": "^10.2.0",
|
|
"pino-pretty": "^13.1.3",
|
|
"qrcode": "^1.5.4",
|
|
"rotating-file-stream": "^3.2.9",
|
|
"sherpa-onnx": "1.12.28",
|
|
"sherpa-onnx-node": "1.12.28",
|
|
"strip-ansi": "^7.1.2",
|
|
"tree-kill": "^1.2.2",
|
|
"uuid": "^9.0.1",
|
|
"which": "^5.0.0",
|
|
"ws": "^8.14.2",
|
|
"zod": "^3.23.8",
|
|
"zod-to-json-schema": "^3.25.1"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.56.1",
|
|
"@types/express": "^4.17.20",
|
|
"@types/node": "^20.9.0",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/uuid": "^9.0.7",
|
|
"@types/ws": "^8.5.8",
|
|
"@vitest/ui": "^3.2.4",
|
|
"cross-env": "^10.1.0",
|
|
"tsx": "^4.6.0",
|
|
"typescript": "^5.2.2",
|
|
"vitest": "^3.2.4"
|
|
},
|
|
"overrides": {
|
|
"lightningcss": "1.30.1"
|
|
}
|
|
}
|