@pixelbyte-software/pixcode 1.33.3 → 1.33.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{index-BrB-LHeY.js → index-B2vlFsqI.js} +5 -5
- package/dist/index.html +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js +46 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js.map +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +2 -1
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/opencode-cli.js +22 -6
- package/dist-server/server/opencode-cli.js.map +1 -1
- package/dist-server/server/opencode-response-handler.js +19 -9
- package/dist-server/server/opencode-response-handler.js.map +1 -1
- package/dist-server/server/services/provider-models.js +117 -3
- package/dist-server/server/services/provider-models.js.map +1 -1
- package/dist-server/shared/modelConstants.js +30 -11
- package/dist-server/shared/modelConstants.js.map +1 -1
- package/package.json +178 -178
- package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +39 -1
- package/server/modules/providers/provider.routes.ts +2 -1
- package/server/opencode-cli.js +417 -403
- package/server/opencode-response-handler.js +100 -92
- package/server/services/provider-models.js +114 -3
- package/shared/modelConstants.js +34 -11
|
@@ -86,24 +86,43 @@ export const QWEN_MODELS = {
|
|
|
86
86
|
DEFAULT: "qwen3-coder-plus",
|
|
87
87
|
};
|
|
88
88
|
/**
|
|
89
|
-
* OpenCode Models
|
|
89
|
+
* OpenCode Models — STATIC FALLBACK ONLY.
|
|
90
90
|
*
|
|
91
|
-
* OpenCode is multi-provider
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
91
|
+
* OpenCode is multi-provider and the live model catalog rotates often
|
|
92
|
+
* (Zen free models come and go; new Anthropic/OpenAI/Google models ship
|
|
93
|
+
* every few weeks). The runtime fetches the live catalog from
|
|
94
|
+
* `https://models.dev/api.json` via server/services/provider-models.js
|
|
95
|
+
* and merges it on top of this list — these entries only show when the
|
|
96
|
+
* fetch fails (offline install, firewalled host).
|
|
97
|
+
*
|
|
98
|
+
* Curated current free Zen tier + canonical paid picks. Update when the
|
|
99
|
+
* fallback feels stale, but the live fetch is the source of truth.
|
|
96
100
|
*/
|
|
97
101
|
export const OPENCODE_MODELS = {
|
|
98
102
|
OPTIONS: [
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
// OpenCode Zen — free tier (no charge, may rate-limit). The "limited
|
|
104
|
+
// time" Zen freebies rotate, so this is the safest small set.
|
|
105
|
+
{ value: "opencode/big-pickle", label: "OpenCode Zen · Big Pickle (Free)", free: true },
|
|
106
|
+
{ value: "opencode/minimax-m2.5-free", label: "OpenCode Zen · MiniMax M2.5 (Free)", free: true },
|
|
107
|
+
{ value: "opencode/hy3-preview-free", label: "OpenCode Zen · Hy3 Preview (Free)", free: true },
|
|
108
|
+
{ value: "opencode/ling-2.6-flash-free", label: "OpenCode Zen · Ling 2.6 Flash (Free)", free: true },
|
|
109
|
+
{ value: "opencode/nemotron-3-super-free", label: "OpenCode Zen · Nemotron 3 Super (Free)", free: true },
|
|
110
|
+
{ value: "opencode/gpt-5-nano", label: "OpenCode Zen · GPT-5 Nano (Free)", free: true },
|
|
111
|
+
// Anthropic — current flagship + cheap.
|
|
112
|
+
{ value: "anthropic/claude-opus-4-7", label: "Claude Opus 4.7 (Anthropic)" },
|
|
101
113
|
{ value: "anthropic/claude-sonnet-4-6", label: "Claude Sonnet 4.6 (Anthropic)" },
|
|
102
|
-
{ value: "anthropic/claude-
|
|
114
|
+
{ value: "anthropic/claude-haiku-4-5", label: "Claude Haiku 4.5 (Anthropic)" },
|
|
115
|
+
// OpenAI — current GPT-5 family.
|
|
103
116
|
{ value: "openai/gpt-5.4", label: "GPT-5.4 (OpenAI)" },
|
|
104
|
-
{ value: "
|
|
117
|
+
{ value: "openai/gpt-5.1-codex", label: "GPT-5.1 Codex (OpenAI)" },
|
|
118
|
+
// Google — current Gemini 3 family.
|
|
119
|
+
{ value: "google/gemini-3.1-pro-preview", label: "Gemini 3.1 Pro (Google)" },
|
|
120
|
+
{ value: "google/gemini-3-flash-preview", label: "Gemini 3 Flash (Google)" },
|
|
121
|
+
// xAI — fast & cheap coding model.
|
|
122
|
+
{ value: "xai/grok-code-fast-1", label: "Grok Code Fast 1 (xAI)" },
|
|
105
123
|
],
|
|
106
|
-
|
|
124
|
+
// Free Zen freebie that historically works for unauthed installs.
|
|
125
|
+
DEFAULT: "opencode/big-pickle",
|
|
107
126
|
};
|
|
108
127
|
/**
|
|
109
128
|
* Gemini Models
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelConstants.js","sourceRoot":"","sources":["../../shared/modelConstants.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,qDAAqD;IACrD,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACpC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QAChC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;QAClC,8EAA8E;QAC9E,mEAAmE;QACnE,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE;QAC/C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;QACzC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE;QAC7C,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE;KAC1C;IAED,OAAO,EAAE,MAAM;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,4BAA4B,EAAE;QACnE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE;QAC5C,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;QAChD,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;QAChD,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,4BAA4B,EAAE;QACnE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;QAChD,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC5C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;QAChC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,mBAAmB,EAAE;QACnD,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,8BAA8B,EAAE;QACvE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC/C,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;QAClD,EAAE,KAAK,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,EAAE;QAC5D,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;QAC1D,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,wBAAwB,EAAE;QACpE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC/C,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;KACjC;IAED,OAAO,EAAE,eAAe;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;QAChD,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;QAClD,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE;QAClD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACtC,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;QAC1D,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;QAC5B,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KACvC;IAED,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,OAAO,EAAE;QACP,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;QACxD,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,kBAAkB,EAAE;QACxD,EAAE,KAAK,EAAE,gCAAgC,EAAE,KAAK,EAAE,6BAA6B,EAAE;QACjF,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,iBAAiB,EAAE;QAC1D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;QAChD,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;QAC1C,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,+BAA+B,EAAE;QAC5D,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,iCAAiC,EAAE;KACjE;IAED,OAAO,EAAE,kBAAkB;CAC5B,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"modelConstants.js","sourceRoot":"","sources":["../../shared/modelConstants.js"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,178 +1,178 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@pixelbyte-software/pixcode",
|
|
3
|
-
"version": "1.33.
|
|
4
|
-
"description": "Pixcode — a desktop and mobile web UI for Claude Code, Cursor CLI, Codex, Gemini CLI, Qwen Code, and OpenCode.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "dist-server/server/index.js",
|
|
7
|
-
"bin": {
|
|
8
|
-
"pixcode": "dist-server/server/cli.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"server/",
|
|
12
|
-
"shared/",
|
|
13
|
-
"dist/",
|
|
14
|
-
"dist-server/",
|
|
15
|
-
"scripts/",
|
|
16
|
-
"README.md"
|
|
17
|
-
],
|
|
18
|
-
"homepage": "https://github.com/alicomert/pixcode",
|
|
19
|
-
"repository": {
|
|
20
|
-
"type": "git",
|
|
21
|
-
"url": "git+https://github.com/alicomert/pixcode.git"
|
|
22
|
-
},
|
|
23
|
-
"bugs": {
|
|
24
|
-
"url": "https://github.com/alicomert/pixcode/issues"
|
|
25
|
-
},
|
|
26
|
-
"publishConfig": {
|
|
27
|
-
"access": "public"
|
|
28
|
-
},
|
|
29
|
-
"scripts": {
|
|
30
|
-
"dev": "npm run server:dev",
|
|
31
|
-
"server": "node dist-server/server/cli.js start",
|
|
32
|
-
"server:dev": "node server/cli.js daemon install --mode system --port 3001 --frontend-port 5173",
|
|
33
|
-
"server:dev-watch": "node server/cli.js daemon restart --mode system --port 3001 --frontend-port 5173",
|
|
34
|
-
"client": "vite",
|
|
35
|
-
"build": "npm run build:client && npm run build:server",
|
|
36
|
-
"build:client": "vite build",
|
|
37
|
-
"prebuild:server": "node -e \"require('node:fs').rmSync('dist-server', { recursive: true, force: true })\"",
|
|
38
|
-
"build:server": "tsc -p server/tsconfig.json && tsc-alias -p server/tsconfig.json",
|
|
39
|
-
"preview": "vite preview",
|
|
40
|
-
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p server/tsconfig.json",
|
|
41
|
-
"lint": "eslint src/ server/",
|
|
42
|
-
"lint:fix": "eslint src/ server/ --fix",
|
|
43
|
-
"start": "npm run build && npm run server",
|
|
44
|
-
"release": "./release.sh",
|
|
45
|
-
"prepublishOnly": "npm run build",
|
|
46
|
-
"postinstall": "node scripts/fix-node-pty.js",
|
|
47
|
-
"prepare": "husky",
|
|
48
|
-
"update:platform": "./update-platform.sh"
|
|
49
|
-
},
|
|
50
|
-
"keywords": [
|
|
51
|
-
"claude code",
|
|
52
|
-
"claude-code",
|
|
53
|
-
"pixcode",
|
|
54
|
-
"codex",
|
|
55
|
-
"gemini",
|
|
56
|
-
"gemini-cli",
|
|
57
|
-
"cursor",
|
|
58
|
-
"cursor-cli",
|
|
59
|
-
"opencode",
|
|
60
|
-
"opencode-cli",
|
|
61
|
-
"anthropic",
|
|
62
|
-
"openai",
|
|
63
|
-
"google",
|
|
64
|
-
"coding-agent",
|
|
65
|
-
"web-ui",
|
|
66
|
-
"ui",
|
|
67
|
-
"mobile IDE"
|
|
68
|
-
],
|
|
69
|
-
"author": "Pixcode Contributors",
|
|
70
|
-
"license": "AGPL-3.0-or-later",
|
|
71
|
-
"dependencies": {
|
|
72
|
-
"@anthropic-ai/claude-agent-sdk": "^0.2.116",
|
|
73
|
-
"@iarna/toml": "^2.2.5",
|
|
74
|
-
"@octokit/rest": "^22.0.0",
|
|
75
|
-
"@openai/codex-sdk": "^0.101.0",
|
|
76
|
-
"bcryptjs": "^3.0.3",
|
|
77
|
-
"better-sqlite3": "^12.6.2",
|
|
78
|
-
"chokidar": "^4.0.3",
|
|
79
|
-
"cors": "^2.8.5",
|
|
80
|
-
"cross-spawn": "^7.0.3",
|
|
81
|
-
"express": "^4.18.2",
|
|
82
|
-
"gray-matter": "^4.0.3",
|
|
83
|
-
"jsonwebtoken": "^9.0.2",
|
|
84
|
-
"mime-types": "^3.0.1",
|
|
85
|
-
"multer": "^2.0.1",
|
|
86
|
-
"node-fetch": "^2.7.0",
|
|
87
|
-
"node-pty": "^1.2.0-beta.12",
|
|
88
|
-
"tar": "^7.5.13",
|
|
89
|
-
"web-push": "^3.6.7",
|
|
90
|
-
"ws": "^8.14.2"
|
|
91
|
-
},
|
|
92
|
-
"devDependencies": {
|
|
93
|
-
"@codemirror/lang-css": "^6.3.1",
|
|
94
|
-
"@codemirror/lang-html": "^6.4.9",
|
|
95
|
-
"@codemirror/lang-javascript": "^6.2.4",
|
|
96
|
-
"@codemirror/lang-json": "^6.0.1",
|
|
97
|
-
"@codemirror/lang-markdown": "^6.3.3",
|
|
98
|
-
"@codemirror/lang-python": "^6.2.1",
|
|
99
|
-
"@codemirror/merge": "^6.11.1",
|
|
100
|
-
"@codemirror/theme-one-dark": "^6.1.2",
|
|
101
|
-
"@commitlint/cli": "^20.5.0",
|
|
102
|
-
"@commitlint/config-conventional": "^20.5.0",
|
|
103
|
-
"@eslint/js": "^9.39.3",
|
|
104
|
-
"@heroicons/react": "^2.2.0",
|
|
105
|
-
"@release-it/conventional-changelog": "^10.0.5",
|
|
106
|
-
"@replit/codemirror-minimap": "^0.5.2",
|
|
107
|
-
"@tailwindcss/typography": "^0.5.16",
|
|
108
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
109
|
-
"@types/cross-spawn": "^6.0.6",
|
|
110
|
-
"@types/express": "^5.0.6",
|
|
111
|
-
"@types/node": "^22.19.7",
|
|
112
|
-
"@types/qrcode": "^1.5.6",
|
|
113
|
-
"@types/react": "^18.2.43",
|
|
114
|
-
"@types/react-dom": "^18.2.17",
|
|
115
|
-
"@uiw/react-codemirror": "^4.23.13",
|
|
116
|
-
"@vitejs/plugin-react": "^4.6.0",
|
|
117
|
-
"@xterm/addon-clipboard": "^0.1.0",
|
|
118
|
-
"@xterm/addon-fit": "^0.10.0",
|
|
119
|
-
"@xterm/addon-web-links": "^0.11.0",
|
|
120
|
-
"@xterm/addon-webgl": "^0.18.0",
|
|
121
|
-
"@xterm/xterm": "^5.5.0",
|
|
122
|
-
"auto-changelog": "^2.5.0",
|
|
123
|
-
"autoprefixer": "^10.4.16",
|
|
124
|
-
"class-variance-authority": "^0.7.1",
|
|
125
|
-
"clsx": "^2.1.1",
|
|
126
|
-
"concurrently": "^8.2.2",
|
|
127
|
-
"eslint": "^9.39.3",
|
|
128
|
-
"eslint-import-resolver-typescript": "^4.4.4",
|
|
129
|
-
"eslint-plugin-boundaries": "^6.0.2",
|
|
130
|
-
"eslint-plugin-import-x": "^4.16.1",
|
|
131
|
-
"eslint-plugin-react": "^7.37.5",
|
|
132
|
-
"eslint-plugin-react-hooks": "^7.0.1",
|
|
133
|
-
"eslint-plugin-react-refresh": "^0.5.2",
|
|
134
|
-
"eslint-plugin-tailwindcss": "^3.18.2",
|
|
135
|
-
"eslint-plugin-unused-imports": "^4.4.1",
|
|
136
|
-
"fuse.js": "^7.0.0",
|
|
137
|
-
"globals": "^17.4.0",
|
|
138
|
-
"gsap": "^3.12.5",
|
|
139
|
-
"husky": "^9.1.7",
|
|
140
|
-
"i18next": "^25.7.4",
|
|
141
|
-
"i18next-browser-languagedetector": "^8.2.0",
|
|
142
|
-
"jszip": "^3.10.1",
|
|
143
|
-
"katex": "^0.16.25",
|
|
144
|
-
"lint-staged": "^16.3.2",
|
|
145
|
-
"lucide-react": "^0.515.0",
|
|
146
|
-
"node-gyp": "^12.0.0",
|
|
147
|
-
"postcss": "^8.4.32",
|
|
148
|
-
"qrcode": "^1.5.4",
|
|
149
|
-
"react": "^18.2.0",
|
|
150
|
-
"react-dom": "^18.2.0",
|
|
151
|
-
"react-dropzone": "^14.2.3",
|
|
152
|
-
"react-error-boundary": "^4.1.2",
|
|
153
|
-
"react-i18next": "^16.5.3",
|
|
154
|
-
"react-markdown": "^10.1.0",
|
|
155
|
-
"react-router-dom": "^6.8.1",
|
|
156
|
-
"react-syntax-highlighter": "^16.1.1",
|
|
157
|
-
"rehype-katex": "^7.0.1",
|
|
158
|
-
"rehype-raw": "^7.0.0",
|
|
159
|
-
"release-it": "^19.0.5",
|
|
160
|
-
"remark-gfm": "^4.0.0",
|
|
161
|
-
"remark-math": "^6.0.0",
|
|
162
|
-
"sharp": "^0.34.2",
|
|
163
|
-
"tailwind-merge": "^3.3.1",
|
|
164
|
-
"tailwindcss": "^3.4.0",
|
|
165
|
-
"tsc-alias": "^1.8.16",
|
|
166
|
-
"tsx": "^4.21.0",
|
|
167
|
-
"typescript": "^5.9.3",
|
|
168
|
-
"typescript-eslint": "^8.56.1",
|
|
169
|
-
"vite": "^7.0.4"
|
|
170
|
-
},
|
|
171
|
-
"lint-staged": {
|
|
172
|
-
"src/**/*.{ts,tsx,js,jsx}": "eslint",
|
|
173
|
-
"server/**/*.{js,ts}": "eslint"
|
|
174
|
-
},
|
|
175
|
-
"overrides": {
|
|
176
|
-
"undici": ">=6.23.1"
|
|
177
|
-
}
|
|
178
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@pixelbyte-software/pixcode",
|
|
3
|
+
"version": "1.33.5",
|
|
4
|
+
"description": "Pixcode — a desktop and mobile web UI for Claude Code, Cursor CLI, Codex, Gemini CLI, Qwen Code, and OpenCode.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist-server/server/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"pixcode": "dist-server/server/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"server/",
|
|
12
|
+
"shared/",
|
|
13
|
+
"dist/",
|
|
14
|
+
"dist-server/",
|
|
15
|
+
"scripts/",
|
|
16
|
+
"README.md"
|
|
17
|
+
],
|
|
18
|
+
"homepage": "https://github.com/alicomert/pixcode",
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git+https://github.com/alicomert/pixcode.git"
|
|
22
|
+
},
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/alicomert/pixcode/issues"
|
|
25
|
+
},
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"dev": "npm run server:dev",
|
|
31
|
+
"server": "node dist-server/server/cli.js start",
|
|
32
|
+
"server:dev": "node server/cli.js daemon install --mode system --port 3001 --frontend-port 5173",
|
|
33
|
+
"server:dev-watch": "node server/cli.js daemon restart --mode system --port 3001 --frontend-port 5173",
|
|
34
|
+
"client": "vite",
|
|
35
|
+
"build": "npm run build:client && npm run build:server",
|
|
36
|
+
"build:client": "vite build",
|
|
37
|
+
"prebuild:server": "node -e \"require('node:fs').rmSync('dist-server', { recursive: true, force: true })\"",
|
|
38
|
+
"build:server": "tsc -p server/tsconfig.json && tsc-alias -p server/tsconfig.json",
|
|
39
|
+
"preview": "vite preview",
|
|
40
|
+
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p server/tsconfig.json",
|
|
41
|
+
"lint": "eslint src/ server/",
|
|
42
|
+
"lint:fix": "eslint src/ server/ --fix",
|
|
43
|
+
"start": "npm run build && npm run server",
|
|
44
|
+
"release": "./release.sh",
|
|
45
|
+
"prepublishOnly": "npm run build",
|
|
46
|
+
"postinstall": "node scripts/fix-node-pty.js",
|
|
47
|
+
"prepare": "husky",
|
|
48
|
+
"update:platform": "./update-platform.sh"
|
|
49
|
+
},
|
|
50
|
+
"keywords": [
|
|
51
|
+
"claude code",
|
|
52
|
+
"claude-code",
|
|
53
|
+
"pixcode",
|
|
54
|
+
"codex",
|
|
55
|
+
"gemini",
|
|
56
|
+
"gemini-cli",
|
|
57
|
+
"cursor",
|
|
58
|
+
"cursor-cli",
|
|
59
|
+
"opencode",
|
|
60
|
+
"opencode-cli",
|
|
61
|
+
"anthropic",
|
|
62
|
+
"openai",
|
|
63
|
+
"google",
|
|
64
|
+
"coding-agent",
|
|
65
|
+
"web-ui",
|
|
66
|
+
"ui",
|
|
67
|
+
"mobile IDE"
|
|
68
|
+
],
|
|
69
|
+
"author": "Pixcode Contributors",
|
|
70
|
+
"license": "AGPL-3.0-or-later",
|
|
71
|
+
"dependencies": {
|
|
72
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.116",
|
|
73
|
+
"@iarna/toml": "^2.2.5",
|
|
74
|
+
"@octokit/rest": "^22.0.0",
|
|
75
|
+
"@openai/codex-sdk": "^0.101.0",
|
|
76
|
+
"bcryptjs": "^3.0.3",
|
|
77
|
+
"better-sqlite3": "^12.6.2",
|
|
78
|
+
"chokidar": "^4.0.3",
|
|
79
|
+
"cors": "^2.8.5",
|
|
80
|
+
"cross-spawn": "^7.0.3",
|
|
81
|
+
"express": "^4.18.2",
|
|
82
|
+
"gray-matter": "^4.0.3",
|
|
83
|
+
"jsonwebtoken": "^9.0.2",
|
|
84
|
+
"mime-types": "^3.0.1",
|
|
85
|
+
"multer": "^2.0.1",
|
|
86
|
+
"node-fetch": "^2.7.0",
|
|
87
|
+
"node-pty": "^1.2.0-beta.12",
|
|
88
|
+
"tar": "^7.5.13",
|
|
89
|
+
"web-push": "^3.6.7",
|
|
90
|
+
"ws": "^8.14.2"
|
|
91
|
+
},
|
|
92
|
+
"devDependencies": {
|
|
93
|
+
"@codemirror/lang-css": "^6.3.1",
|
|
94
|
+
"@codemirror/lang-html": "^6.4.9",
|
|
95
|
+
"@codemirror/lang-javascript": "^6.2.4",
|
|
96
|
+
"@codemirror/lang-json": "^6.0.1",
|
|
97
|
+
"@codemirror/lang-markdown": "^6.3.3",
|
|
98
|
+
"@codemirror/lang-python": "^6.2.1",
|
|
99
|
+
"@codemirror/merge": "^6.11.1",
|
|
100
|
+
"@codemirror/theme-one-dark": "^6.1.2",
|
|
101
|
+
"@commitlint/cli": "^20.5.0",
|
|
102
|
+
"@commitlint/config-conventional": "^20.5.0",
|
|
103
|
+
"@eslint/js": "^9.39.3",
|
|
104
|
+
"@heroicons/react": "^2.2.0",
|
|
105
|
+
"@release-it/conventional-changelog": "^10.0.5",
|
|
106
|
+
"@replit/codemirror-minimap": "^0.5.2",
|
|
107
|
+
"@tailwindcss/typography": "^0.5.16",
|
|
108
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
109
|
+
"@types/cross-spawn": "^6.0.6",
|
|
110
|
+
"@types/express": "^5.0.6",
|
|
111
|
+
"@types/node": "^22.19.7",
|
|
112
|
+
"@types/qrcode": "^1.5.6",
|
|
113
|
+
"@types/react": "^18.2.43",
|
|
114
|
+
"@types/react-dom": "^18.2.17",
|
|
115
|
+
"@uiw/react-codemirror": "^4.23.13",
|
|
116
|
+
"@vitejs/plugin-react": "^4.6.0",
|
|
117
|
+
"@xterm/addon-clipboard": "^0.1.0",
|
|
118
|
+
"@xterm/addon-fit": "^0.10.0",
|
|
119
|
+
"@xterm/addon-web-links": "^0.11.0",
|
|
120
|
+
"@xterm/addon-webgl": "^0.18.0",
|
|
121
|
+
"@xterm/xterm": "^5.5.0",
|
|
122
|
+
"auto-changelog": "^2.5.0",
|
|
123
|
+
"autoprefixer": "^10.4.16",
|
|
124
|
+
"class-variance-authority": "^0.7.1",
|
|
125
|
+
"clsx": "^2.1.1",
|
|
126
|
+
"concurrently": "^8.2.2",
|
|
127
|
+
"eslint": "^9.39.3",
|
|
128
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
129
|
+
"eslint-plugin-boundaries": "^6.0.2",
|
|
130
|
+
"eslint-plugin-import-x": "^4.16.1",
|
|
131
|
+
"eslint-plugin-react": "^7.37.5",
|
|
132
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
133
|
+
"eslint-plugin-react-refresh": "^0.5.2",
|
|
134
|
+
"eslint-plugin-tailwindcss": "^3.18.2",
|
|
135
|
+
"eslint-plugin-unused-imports": "^4.4.1",
|
|
136
|
+
"fuse.js": "^7.0.0",
|
|
137
|
+
"globals": "^17.4.0",
|
|
138
|
+
"gsap": "^3.12.5",
|
|
139
|
+
"husky": "^9.1.7",
|
|
140
|
+
"i18next": "^25.7.4",
|
|
141
|
+
"i18next-browser-languagedetector": "^8.2.0",
|
|
142
|
+
"jszip": "^3.10.1",
|
|
143
|
+
"katex": "^0.16.25",
|
|
144
|
+
"lint-staged": "^16.3.2",
|
|
145
|
+
"lucide-react": "^0.515.0",
|
|
146
|
+
"node-gyp": "^12.0.0",
|
|
147
|
+
"postcss": "^8.4.32",
|
|
148
|
+
"qrcode": "^1.5.4",
|
|
149
|
+
"react": "^18.2.0",
|
|
150
|
+
"react-dom": "^18.2.0",
|
|
151
|
+
"react-dropzone": "^14.2.3",
|
|
152
|
+
"react-error-boundary": "^4.1.2",
|
|
153
|
+
"react-i18next": "^16.5.3",
|
|
154
|
+
"react-markdown": "^10.1.0",
|
|
155
|
+
"react-router-dom": "^6.8.1",
|
|
156
|
+
"react-syntax-highlighter": "^16.1.1",
|
|
157
|
+
"rehype-katex": "^7.0.1",
|
|
158
|
+
"rehype-raw": "^7.0.0",
|
|
159
|
+
"release-it": "^19.0.5",
|
|
160
|
+
"remark-gfm": "^4.0.0",
|
|
161
|
+
"remark-math": "^6.0.0",
|
|
162
|
+
"sharp": "^0.34.2",
|
|
163
|
+
"tailwind-merge": "^3.3.1",
|
|
164
|
+
"tailwindcss": "^3.4.0",
|
|
165
|
+
"tsc-alias": "^1.8.16",
|
|
166
|
+
"tsx": "^4.21.0",
|
|
167
|
+
"typescript": "^5.9.3",
|
|
168
|
+
"typescript-eslint": "^8.56.1",
|
|
169
|
+
"vite": "^7.0.4"
|
|
170
|
+
},
|
|
171
|
+
"lint-staged": {
|
|
172
|
+
"src/**/*.{ts,tsx,js,jsx}": "eslint",
|
|
173
|
+
"server/**/*.{js,ts}": "eslint"
|
|
174
|
+
},
|
|
175
|
+
"overrides": {
|
|
176
|
+
"undici": ">=6.23.1"
|
|
177
|
+
}
|
|
178
|
+
}
|
|
@@ -87,13 +87,51 @@ export class OpencodeSessionsProvider implements IProviderSessions {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
if (raw.type === 'error') {
|
|
90
|
+
// OpenCode `--format json` emits errors as
|
|
91
|
+
// { type:"error", error:{ name, data:{ message, statusCode?, isRetryable? } } }
|
|
92
|
+
// — `error` is always an object wrapper, never a plain string. Older
|
|
93
|
+
// builds put the message at `error.message`; current builds nest it
|
|
94
|
+
// under `error.data.message`. Map known error class names to friendly
|
|
95
|
+
// copy so the user gets actionable text instead of a class identifier.
|
|
96
|
+
const rawErr = raw.error ?? raw.message;
|
|
97
|
+
const errObj = rawErr && typeof rawErr === 'object' ? rawErr as Record<string, unknown> : null;
|
|
98
|
+
const data = errObj && typeof errObj.data === 'object' && errObj.data
|
|
99
|
+
? errObj.data as Record<string, unknown>
|
|
100
|
+
: null;
|
|
101
|
+
const dataMessage = data && typeof data.message === 'string' ? data.message : null;
|
|
102
|
+
const errMessage = errObj && typeof errObj.message === 'string' ? errObj.message : null;
|
|
103
|
+
const errName = errObj && typeof errObj.name === 'string' ? errObj.name : null;
|
|
104
|
+
const statusCode = data && typeof data.statusCode === 'number' ? data.statusCode : null;
|
|
105
|
+
|
|
106
|
+
let content: string;
|
|
107
|
+
if (typeof rawErr === 'string') {
|
|
108
|
+
content = rawErr;
|
|
109
|
+
} else if (dataMessage) {
|
|
110
|
+
content = dataMessage;
|
|
111
|
+
} else if (errMessage) {
|
|
112
|
+
content = errMessage;
|
|
113
|
+
} else if (errName) {
|
|
114
|
+
const friendly: Record<string, string> = {
|
|
115
|
+
ProviderModelNotFoundError: 'Model not found. Open Settings → Agents → OpenCode and pick a model from the live catalog (or run `opencode models --refresh`).',
|
|
116
|
+
ProviderInitError: 'OpenCode provider config is invalid. Try `opencode auth login` or remove `~/.local/share/opencode/auth.json` and re-authenticate.',
|
|
117
|
+
MessageOutputLengthError: 'OpenCode response was truncated by the model output cap. Try shortening the prompt or pick a model with a larger output limit.',
|
|
118
|
+
AI_APICallError: 'OpenCode upstream API call failed. Clearing `~/.cache/opencode` and retrying usually fixes this.',
|
|
119
|
+
APIError: statusCode === 429
|
|
120
|
+
? 'OpenCode hit a rate limit (429). Wait a few seconds and try again, or switch to a different model.'
|
|
121
|
+
: 'OpenCode upstream API error.',
|
|
122
|
+
};
|
|
123
|
+
content = friendly[errName] ?? errName;
|
|
124
|
+
} else {
|
|
125
|
+
try { content = JSON.stringify(rawErr); }
|
|
126
|
+
catch { content = 'Unknown OpenCode streaming error'; }
|
|
127
|
+
}
|
|
90
128
|
return [createNormalizedMessage({
|
|
91
129
|
id: baseId,
|
|
92
130
|
sessionId,
|
|
93
131
|
timestamp: ts,
|
|
94
132
|
provider: PROVIDER,
|
|
95
133
|
kind: 'error',
|
|
96
|
-
content
|
|
134
|
+
content,
|
|
97
135
|
})];
|
|
98
136
|
}
|
|
99
137
|
|
|
@@ -218,7 +218,8 @@ const parseProvider = (value: unknown): LLMProvider => {
|
|
|
218
218
|
normalized === 'codex' ||
|
|
219
219
|
normalized === 'cursor' ||
|
|
220
220
|
normalized === 'gemini' ||
|
|
221
|
-
normalized === 'qwen'
|
|
221
|
+
normalized === 'qwen' ||
|
|
222
|
+
normalized === 'opencode'
|
|
222
223
|
) {
|
|
223
224
|
return normalized;
|
|
224
225
|
}
|