@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.
@@ -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, so the picker is really "which upstream
92
- * model does opencode talk to?". The defaults here point at OpenCode Zen
93
- * (their curated routing tier) plus a few direct picks the docs call
94
- * out as well-supported. Advanced users override via opencode.json's
95
- * `provider` / `model` block, which bypasses this list.
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
- { value: "opencode/zen-best", label: "OpenCode Zen (Best)" },
100
- { value: "opencode/zen-fast", label: "OpenCode Zen (Fast)" },
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-opus-4-6", label: "Claude Opus 4.6 (Anthropic)" },
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: "google/gemini-3-pro-preview", label: "Gemini 3 Pro (Google)" },
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
- DEFAULT: "opencode/zen-best",
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":"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"}
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.3",
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: raw.error || raw.message || 'Unknown OpenCode streaming error',
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
  }