@pixelbyte-software/pixcode 1.51.8 → 1.51.9

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.
Files changed (307) hide show
  1. package/CODE_OF_CONDUCT.md +41 -41
  2. package/CONTRIBUTING.md +155 -155
  3. package/LICENSE +718 -718
  4. package/README.de.md +169 -169
  5. package/README.ja.md +167 -167
  6. package/README.ko.md +167 -167
  7. package/README.md +419 -419
  8. package/README.ru.md +169 -169
  9. package/README.tr.md +298 -298
  10. package/README.zh-CN.md +167 -167
  11. package/SECURITY.md +46 -46
  12. package/dist/api-automation.html +110 -110
  13. package/dist/api-docs.html +548 -548
  14. package/dist/assets/{index--kNEhygZ.js → index-Gs7C4hZT.js} +69 -69
  15. package/dist/clear-cache.html +85 -85
  16. package/dist/convert-icons.md +52 -52
  17. package/dist/docs.html +308 -308
  18. package/dist/favicon.svg +8 -8
  19. package/dist/features.html +133 -133
  20. package/dist/generate-icons.js +48 -48
  21. package/dist/humans.txt +15 -15
  22. package/dist/icons/codex-white.svg +3 -3
  23. package/dist/icons/codex.svg +3 -3
  24. package/dist/icons/cursor-white.svg +11 -11
  25. package/dist/icons/icon-128x128.svg +9 -9
  26. package/dist/icons/icon-144x144.svg +9 -9
  27. package/dist/icons/icon-152x152.svg +9 -9
  28. package/dist/icons/icon-192x192.svg +9 -9
  29. package/dist/icons/icon-384x384.svg +9 -9
  30. package/dist/icons/icon-512x512.svg +9 -9
  31. package/dist/icons/icon-72x72.svg +9 -9
  32. package/dist/icons/icon-96x96.svg +9 -9
  33. package/dist/icons/icon-template.svg +9 -9
  34. package/dist/icons/qwen-logo.svg +14 -14
  35. package/dist/index.html +58 -58
  36. package/dist/landing.html +268 -268
  37. package/dist/llms-full.txt +119 -119
  38. package/dist/llms.txt +53 -53
  39. package/dist/logo.svg +12 -12
  40. package/dist/manifest.json +60 -60
  41. package/dist/openapi.yaml +1696 -1696
  42. package/dist/orchestration.html +125 -125
  43. package/dist/robots.txt +4 -4
  44. package/dist/site.css +692 -692
  45. package/dist/sitemap.xml +51 -51
  46. package/dist/sw.js +132 -132
  47. package/dist-server/server/cli.js +96 -96
  48. package/dist-server/server/daemon/manager.js +33 -33
  49. package/dist-server/server/daemon-manager.js +64 -64
  50. package/dist-server/server/index.js +91 -65
  51. package/dist-server/server/index.js.map +1 -1
  52. package/dist-server/server/routes/commands.js +25 -25
  53. package/dist-server/server/routes/git.js +17 -17
  54. package/dist-server/server/routes/live-view.js +46 -46
  55. package/dist-server/server/services/hermes-gateway.js +5 -5
  56. package/dist-server/server/services/public-api-manifest.js +51 -51
  57. package/package.json +222 -222
  58. package/scripts/fix-node-pty.js +67 -67
  59. package/scripts/github/create-v1.38-issues.mjs +351 -351
  60. package/scripts/github/create-vscode-workbench-issues.mjs +121 -121
  61. package/scripts/hermes/configure-pixcode-mcp.mjs +165 -165
  62. package/scripts/hermes/pixcode-mcp-server.mjs +1009 -1009
  63. package/scripts/smoke/changes-panel-layout.mjs +48 -48
  64. package/scripts/smoke/chat-composer-fixed-layout.mjs +55 -55
  65. package/scripts/smoke/chat-message-timeline-order.mjs +41 -41
  66. package/scripts/smoke/chat-realtime-hydration.mjs +44 -44
  67. package/scripts/smoke/chat-session-provider-pools.mjs +35 -35
  68. package/scripts/smoke/chat-session-state.mjs +19 -19
  69. package/scripts/smoke/code-editor-theme.mjs +55 -55
  70. package/scripts/smoke/code-editor-vscode-engine.mjs +91 -91
  71. package/scripts/smoke/command-center-agent-writes.mjs +79 -79
  72. package/scripts/smoke/command-center-non-git.mjs +46 -46
  73. package/scripts/smoke/context-packet.mjs +43 -43
  74. package/scripts/smoke/control-room-ux-redesign.mjs +91 -91
  75. package/scripts/smoke/daemon-entrypoint.mjs +20 -20
  76. package/scripts/smoke/default-landing-routing.mjs +33 -33
  77. package/scripts/smoke/desktop-native-notifications.mjs +30 -30
  78. package/scripts/smoke/desktop-tray-icon.mjs +33 -33
  79. package/scripts/smoke/discord-release-workflow.mjs +24 -24
  80. package/scripts/smoke/git-install-update.mjs +255 -255
  81. package/scripts/smoke/handoff-artifact-protocol.mjs +50 -50
  82. package/scripts/smoke/hermes-api-install.mjs +56 -56
  83. package/scripts/smoke/hermes-gateway-persistence.mjs +104 -104
  84. package/scripts/smoke/hermes-mcp-pixcode-roundtrip.mjs +426 -426
  85. package/scripts/smoke/hermes-rest-chat-api.mjs +162 -162
  86. package/scripts/smoke/hermes-rest-chat-live.mjs +45 -45
  87. package/scripts/smoke/hermes-rest-codex-launch.mjs +209 -209
  88. package/scripts/smoke/hermes-rest-gateway.mjs +79 -79
  89. package/scripts/smoke/hermes-rest-live.mjs +42 -42
  90. package/scripts/smoke/hermes-roundtrip.mjs +167 -167
  91. package/scripts/smoke/hermes-settings-commands.mjs +349 -349
  92. package/scripts/smoke/hermes-smoke-launcher-guard.mjs +34 -34
  93. package/scripts/smoke/live-view-diagnostics.mjs +53 -53
  94. package/scripts/smoke/live-view-environment.mjs +92 -92
  95. package/scripts/smoke/live-view-integration.mjs +450 -450
  96. package/scripts/smoke/mac-desktop-runtime.mjs +37 -37
  97. package/scripts/smoke/mobile-tunnel-guidance.mjs +29 -29
  98. package/scripts/smoke/model-registry.mjs +36 -36
  99. package/scripts/smoke/multi-project-ui.mjs +45 -45
  100. package/scripts/smoke/multi-worker-slots.mjs +42 -42
  101. package/scripts/smoke/notification-center.mjs +87 -87
  102. package/scripts/smoke/notification-inapp-preference.mjs +23 -23
  103. package/scripts/smoke/notification-taxonomy.mjs +58 -58
  104. package/scripts/smoke/orchestration-api.mjs +172 -172
  105. package/scripts/smoke/orchestration-execution-dashboard.mjs +33 -33
  106. package/scripts/smoke/orchestration-live-run.mjs +176 -176
  107. package/scripts/smoke/orchestration-mobile-scroll.mjs +29 -29
  108. package/scripts/smoke/orchestration-model-sync.mjs +30 -30
  109. package/scripts/smoke/orchestration-permission-fallback.mjs +34 -34
  110. package/scripts/smoke/orchestration-runtime-guards.mjs +48 -48
  111. package/scripts/smoke/orchestration-user-facing-output.mjs +25 -25
  112. package/scripts/smoke/permission-policy.mjs +50 -50
  113. package/scripts/smoke/pixcode-workbench-1-48.mjs +167 -167
  114. package/scripts/smoke/provider-models-opencode-live.mjs +66 -66
  115. package/scripts/smoke/provider-rest-api.mjs +124 -124
  116. package/scripts/smoke/provider-selection-status.mjs +52 -52
  117. package/scripts/smoke/run-state-refresh.mjs +52 -52
  118. package/scripts/smoke/runtime-manager.mjs +99 -99
  119. package/scripts/smoke/shell-manual-disconnect.mjs +30 -30
  120. package/scripts/smoke/side-panel-editor-layout.mjs +34 -34
  121. package/scripts/smoke/static-root-routing.mjs +21 -21
  122. package/scripts/smoke/strict-handoff-compact.mjs +60 -60
  123. package/scripts/smoke/taskmaster-config.mjs +24 -24
  124. package/scripts/smoke/taskmaster-execution-telegram.mjs +3 -3
  125. package/scripts/smoke/taskmaster-onboarding.mjs +3 -3
  126. package/scripts/smoke/taskmaster-run-graph.mjs +3 -3
  127. package/scripts/smoke/telegram-control.mjs +242 -242
  128. package/scripts/smoke/tunnel-persistence.mjs +56 -56
  129. package/scripts/smoke/update-issue-progress.mjs +69 -69
  130. package/scripts/smoke/update-ux.mjs +55 -55
  131. package/scripts/smoke/v138-completion.mjs +132 -132
  132. package/scripts/smoke/v138-desktop-release-hardening.mjs +69 -69
  133. package/scripts/smoke/v138-diagnostics.mjs +63 -63
  134. package/scripts/smoke/v138-issue-planner.mjs +33 -33
  135. package/scripts/smoke/v143-remote-control.mjs +76 -76
  136. package/scripts/smoke/v144-production-loop.mjs +47 -47
  137. package/scripts/smoke/v145-platformization.mjs +46 -46
  138. package/scripts/smoke/v146-control-room-ui.mjs +150 -150
  139. package/scripts/smoke/version-modal-autoshow.mjs +29 -29
  140. package/scripts/smoke/vscode-workbench-layout.mjs +63 -63
  141. package/scripts/smoke/vscode-workbench-polish.mjs +461 -461
  142. package/scripts/smoke/workflow-fallback-replay.mjs +56 -56
  143. package/scripts/smoke/workflow-templates.mjs +43 -43
  144. package/scripts/smoke/workflow-trace-timeline.mjs +46 -46
  145. package/scripts/update-git-install.mjs +283 -283
  146. package/server/claude-sdk.js +920 -920
  147. package/server/cli.js +1035 -1035
  148. package/server/constants/config.js +4 -4
  149. package/server/cursor-cli.js +344 -344
  150. package/server/daemon/manager.js +563 -563
  151. package/server/daemon-manager.js +964 -964
  152. package/server/database/db.js +895 -895
  153. package/server/database/json-store.js +197 -197
  154. package/server/gemini-cli.js +550 -550
  155. package/server/gemini-response-handler.js +79 -79
  156. package/server/index.js +111 -81
  157. package/server/load-env.js +35 -35
  158. package/server/middleware/auth.js +155 -155
  159. package/server/modules/orchestration/a2a/adapter-registry.ts +108 -108
  160. package/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.ts +63 -63
  161. package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +286 -286
  162. package/server/modules/orchestration/a2a/adapters/codex.adapter.ts +244 -244
  163. package/server/modules/orchestration/a2a/adapters/cursor.adapter.ts +249 -249
  164. package/server/modules/orchestration/a2a/adapters/gemini.adapter.ts +248 -248
  165. package/server/modules/orchestration/a2a/adapters/json-event.adapter.ts +100 -100
  166. package/server/modules/orchestration/a2a/adapters/opencode.adapter.ts +248 -248
  167. package/server/modules/orchestration/a2a/adapters/qwen.adapter.ts +248 -248
  168. package/server/modules/orchestration/a2a/agent-card.ts +55 -55
  169. package/server/modules/orchestration/a2a/routes.ts +590 -590
  170. package/server/modules/orchestration/a2a/task-store.ts +178 -178
  171. package/server/modules/orchestration/a2a/types.ts +126 -126
  172. package/server/modules/orchestration/a2a/validator.ts +113 -113
  173. package/server/modules/orchestration/hermes/hermes.routes.ts +642 -642
  174. package/server/modules/orchestration/index.ts +101 -101
  175. package/server/modules/orchestration/preview/port-watcher.ts +112 -112
  176. package/server/modules/orchestration/preview/preview-proxy.ts +60 -60
  177. package/server/modules/orchestration/preview/types.ts +19 -19
  178. package/server/modules/orchestration/security/permission-policy.ts +401 -401
  179. package/server/modules/orchestration/tasks/orchestration-task-store.ts +41 -41
  180. package/server/modules/orchestration/tasks/orchestration-task.routes.ts +64 -64
  181. package/server/modules/orchestration/tasks/orchestration-task.service.ts +209 -209
  182. package/server/modules/orchestration/tasks/orchestration-task.types.ts +40 -40
  183. package/server/modules/orchestration/tasks/task-run-graph.ts +155 -155
  184. package/server/modules/orchestration/workflows/approval-queue.ts +106 -106
  185. package/server/modules/orchestration/workflows/built-in-workflows.ts +127 -127
  186. package/server/modules/orchestration/workflows/context-packet.ts +186 -186
  187. package/server/modules/orchestration/workflows/handoff-artifact.ts +175 -175
  188. package/server/modules/orchestration/workflows/workflow-fallback-policy.ts +161 -161
  189. package/server/modules/orchestration/workflows/workflow-replay.ts +254 -254
  190. package/server/modules/orchestration/workflows/workflow-runner.ts +2070 -2070
  191. package/server/modules/orchestration/workflows/workflow-store.ts +97 -97
  192. package/server/modules/orchestration/workflows/workflow-templates.ts +272 -272
  193. package/server/modules/orchestration/workflows/workflow-trace.ts +424 -424
  194. package/server/modules/orchestration/workflows/workflow.routes.ts +586 -586
  195. package/server/modules/orchestration/workflows/workflow.types.ts +111 -111
  196. package/server/modules/orchestration/workflows/workspace-target.ts +122 -122
  197. package/server/modules/orchestration/workspace/docker-workspace.ts +136 -136
  198. package/server/modules/orchestration/workspace/path-safety.ts +55 -55
  199. package/server/modules/orchestration/workspace/types.ts +52 -52
  200. package/server/modules/orchestration/workspace/workspace-manager.ts +102 -102
  201. package/server/modules/orchestration/workspace/worktree-workspace.ts +126 -126
  202. package/server/modules/providers/index.ts +2 -2
  203. package/server/modules/providers/list/claude/claude-auth.provider.ts +146 -146
  204. package/server/modules/providers/list/claude/claude-mcp.provider.ts +135 -135
  205. package/server/modules/providers/list/claude/claude-sessions.provider.ts +306 -306
  206. package/server/modules/providers/list/claude/claude.provider.ts +15 -15
  207. package/server/modules/providers/list/codex/codex-auth.provider.ts +117 -117
  208. package/server/modules/providers/list/codex/codex-mcp.provider.ts +135 -135
  209. package/server/modules/providers/list/codex/codex-sessions.provider.ts +319 -319
  210. package/server/modules/providers/list/codex/codex.provider.ts +15 -15
  211. package/server/modules/providers/list/cursor/cursor-auth.provider.ts +147 -147
  212. package/server/modules/providers/list/cursor/cursor-mcp.provider.ts +108 -108
  213. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +421 -421
  214. package/server/modules/providers/list/cursor/cursor.provider.ts +15 -15
  215. package/server/modules/providers/list/gemini/gemini-auth.provider.ts +173 -173
  216. package/server/modules/providers/list/gemini/gemini-mcp.provider.ts +110 -110
  217. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +227 -227
  218. package/server/modules/providers/list/gemini/gemini.provider.ts +15 -15
  219. package/server/modules/providers/list/opencode/opencode-auth.provider.ts +131 -131
  220. package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +126 -126
  221. package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +286 -286
  222. package/server/modules/providers/list/opencode/opencode.provider.ts +29 -29
  223. package/server/modules/providers/list/qwen/qwen-auth.provider.ts +146 -146
  224. package/server/modules/providers/list/qwen/qwen-mcp.provider.ts +114 -114
  225. package/server/modules/providers/list/qwen/qwen-sessions.provider.ts +265 -265
  226. package/server/modules/providers/list/qwen/qwen.provider.ts +21 -21
  227. package/server/modules/providers/provider.registry.ts +40 -40
  228. package/server/modules/providers/provider.routes.ts +891 -891
  229. package/server/modules/providers/services/mcp.service.ts +86 -86
  230. package/server/modules/providers/services/provider-auth.service.ts +26 -26
  231. package/server/modules/providers/services/sessions.service.ts +45 -45
  232. package/server/modules/providers/shared/base/abstract.provider.ts +20 -20
  233. package/server/modules/providers/shared/mcp/mcp.provider.ts +151 -151
  234. package/server/modules/providers/shared/provider-configs.ts +142 -142
  235. package/server/modules/providers/tests/mcp.test.ts +293 -293
  236. package/server/openai-codex.js +462 -462
  237. package/server/opencode-cli.js +491 -491
  238. package/server/opencode-response-handler.js +111 -111
  239. package/server/projects.js +3008 -3008
  240. package/server/qwen-code-cli.js +410 -410
  241. package/server/qwen-response-handler.js +73 -73
  242. package/server/routes/agent.js +1435 -1435
  243. package/server/routes/auth.js +142 -142
  244. package/server/routes/codex.js +20 -20
  245. package/server/routes/commands.js +538 -538
  246. package/server/routes/cursor.js +61 -61
  247. package/server/routes/diagnostics.js +41 -41
  248. package/server/routes/gemini.js +25 -25
  249. package/server/routes/git.js +1641 -1641
  250. package/server/routes/live-view.js +387 -387
  251. package/server/routes/mcp-utils.js +13 -13
  252. package/server/routes/messages.js +50 -50
  253. package/server/routes/network.js +117 -117
  254. package/server/routes/platformization.js +182 -182
  255. package/server/routes/plugins.js +320 -320
  256. package/server/routes/production-agent-loop.js +90 -90
  257. package/server/routes/projects.js +911 -911
  258. package/server/routes/public-api.js +34 -34
  259. package/server/routes/qwen.js +27 -27
  260. package/server/routes/remote.js +50 -50
  261. package/server/routes/settings.js +321 -321
  262. package/server/routes/telegram.js +140 -140
  263. package/server/routes/user.js +125 -125
  264. package/server/routes/webhooks.js +63 -63
  265. package/server/services/control-room.js +102 -102
  266. package/server/services/diagnostics.js +165 -165
  267. package/server/services/external-access.js +375 -375
  268. package/server/services/hermes-gateway.js +1562 -1562
  269. package/server/services/hermes-install-jobs.js +729 -729
  270. package/server/services/install-jobs.js +715 -715
  271. package/server/services/live-view.js +956 -956
  272. package/server/services/managed-runtimes.js +493 -493
  273. package/server/services/model-registry.js +144 -144
  274. package/server/services/notification-orchestrator.js +365 -365
  275. package/server/services/notification-taxonomy.js +204 -204
  276. package/server/services/platformization.js +773 -773
  277. package/server/services/production-agent-loop.js +248 -248
  278. package/server/services/provider-cli-versions.js +149 -149
  279. package/server/services/provider-credentials.js +189 -189
  280. package/server/services/provider-models.js +396 -396
  281. package/server/services/public-api-manifest.js +190 -190
  282. package/server/services/remote-connection.js +127 -127
  283. package/server/services/runtime-manager.js +323 -323
  284. package/server/services/startup-update.js +234 -234
  285. package/server/services/telegram/bot.js +331 -331
  286. package/server/services/telegram/control-center.js +979 -979
  287. package/server/services/telegram/telegram-http-client.js +151 -151
  288. package/server/services/telegram/translations.js +340 -340
  289. package/server/services/vapid-keys.js +36 -36
  290. package/server/services/webhooks.js +216 -216
  291. package/server/sessionManager.js +225 -225
  292. package/server/shared/interfaces.ts +54 -54
  293. package/server/shared/types.ts +172 -172
  294. package/server/shared/utils.ts +193 -193
  295. package/server/tsconfig.json +36 -36
  296. package/server/utils/colors.js +21 -21
  297. package/server/utils/commandParser.js +305 -305
  298. package/server/utils/frontmatter.js +18 -18
  299. package/server/utils/gitConfig.js +34 -34
  300. package/server/utils/plugin-loader.js +457 -457
  301. package/server/utils/plugin-process-manager.js +185 -185
  302. package/server/utils/port-access.js +209 -209
  303. package/server/utils/runtime-paths.js +37 -37
  304. package/server/utils/url-detection.js +71 -71
  305. package/server/vite-daemon.js +79 -79
  306. package/shared/modelConstants.js +161 -161
  307. package/shared/networkHosts.js +22 -22
@@ -1,79 +1,79 @@
1
- #!/usr/bin/env node
2
-
3
- import process from 'node:process';
4
-
5
- import { createServer } from 'vite';
6
-
7
- const DEFAULT_PORT = 5173;
8
- const DEFAULT_HOST = '0.0.0.0';
9
-
10
- function parseArgs(argv) {
11
- const parsed = {
12
- host: process.env.VITE_HOST || process.env.HOST || DEFAULT_HOST,
13
- port: Number(process.env.VITE_PORT || DEFAULT_PORT),
14
- strictPort: true,
15
- };
16
-
17
- for (let i = 0; i < argv.length; i++) {
18
- const arg = argv[i];
19
- if (arg === '--host') {
20
- parsed.host = argv[++i];
21
- } else if (arg.startsWith('--host=')) {
22
- parsed.host = arg.split('=')[1];
23
- } else if (arg === '--port' || arg === '-p') {
24
- parsed.port = Number(argv[++i]);
25
- } else if (arg.startsWith('--port=')) {
26
- parsed.port = Number(arg.split('=')[1]);
27
- } else if (arg === '--strictPort') {
28
- parsed.strictPort = true;
29
- } else if (arg === '--no-strictPort') {
30
- parsed.strictPort = false;
31
- } else if (arg === '--help' || arg === '-h') {
32
- console.log('Usage: node server/vite-daemon.js [--host 0.0.0.0] [--port 5173] [--strictPort]');
33
- process.exit(0);
34
- } else {
35
- throw new Error(`Unknown argument: ${arg}`);
36
- }
37
- }
38
-
39
- if (!Number.isInteger(parsed.port) || parsed.port < 1 || parsed.port > 65535) {
40
- throw new Error(`Invalid port "${parsed.port}". Expected an integer between 1 and 65535.`);
41
- }
42
-
43
- return parsed;
44
- }
45
-
46
- async function main() {
47
- const options = parseArgs(process.argv.slice(2));
48
- const server = await createServer({
49
- root: process.cwd(),
50
- server: {
51
- host: options.host,
52
- port: options.port,
53
- strictPort: options.strictPort,
54
- },
55
- clearScreen: false,
56
- });
57
-
58
- await server.listen();
59
- server.printUrls();
60
-
61
- const shutdown = async (signal) => {
62
- console.log(`[INFO] Frontend daemon received ${signal}, shutting down...`);
63
- await server.close();
64
- process.exit(0);
65
- };
66
-
67
- process.once('SIGTERM', () => {
68
- void shutdown('SIGTERM');
69
- });
70
- process.once('SIGINT', () => {
71
- void shutdown('SIGINT');
72
- });
73
- }
74
-
75
- main().catch((error) => {
76
- const message = error?.stack || error?.message || String(error);
77
- console.error(`[ERROR] Frontend daemon failed to start: ${message}`);
78
- process.exit(1);
79
- });
1
+ #!/usr/bin/env node
2
+
3
+ import process from 'node:process';
4
+
5
+ import { createServer } from 'vite';
6
+
7
+ const DEFAULT_PORT = 5173;
8
+ const DEFAULT_HOST = '0.0.0.0';
9
+
10
+ function parseArgs(argv) {
11
+ const parsed = {
12
+ host: process.env.VITE_HOST || process.env.HOST || DEFAULT_HOST,
13
+ port: Number(process.env.VITE_PORT || DEFAULT_PORT),
14
+ strictPort: true,
15
+ };
16
+
17
+ for (let i = 0; i < argv.length; i++) {
18
+ const arg = argv[i];
19
+ if (arg === '--host') {
20
+ parsed.host = argv[++i];
21
+ } else if (arg.startsWith('--host=')) {
22
+ parsed.host = arg.split('=')[1];
23
+ } else if (arg === '--port' || arg === '-p') {
24
+ parsed.port = Number(argv[++i]);
25
+ } else if (arg.startsWith('--port=')) {
26
+ parsed.port = Number(arg.split('=')[1]);
27
+ } else if (arg === '--strictPort') {
28
+ parsed.strictPort = true;
29
+ } else if (arg === '--no-strictPort') {
30
+ parsed.strictPort = false;
31
+ } else if (arg === '--help' || arg === '-h') {
32
+ console.log('Usage: node server/vite-daemon.js [--host 0.0.0.0] [--port 5173] [--strictPort]');
33
+ process.exit(0);
34
+ } else {
35
+ throw new Error(`Unknown argument: ${arg}`);
36
+ }
37
+ }
38
+
39
+ if (!Number.isInteger(parsed.port) || parsed.port < 1 || parsed.port > 65535) {
40
+ throw new Error(`Invalid port "${parsed.port}". Expected an integer between 1 and 65535.`);
41
+ }
42
+
43
+ return parsed;
44
+ }
45
+
46
+ async function main() {
47
+ const options = parseArgs(process.argv.slice(2));
48
+ const server = await createServer({
49
+ root: process.cwd(),
50
+ server: {
51
+ host: options.host,
52
+ port: options.port,
53
+ strictPort: options.strictPort,
54
+ },
55
+ clearScreen: false,
56
+ });
57
+
58
+ await server.listen();
59
+ server.printUrls();
60
+
61
+ const shutdown = async (signal) => {
62
+ console.log(`[INFO] Frontend daemon received ${signal}, shutting down...`);
63
+ await server.close();
64
+ process.exit(0);
65
+ };
66
+
67
+ process.once('SIGTERM', () => {
68
+ void shutdown('SIGTERM');
69
+ });
70
+ process.once('SIGINT', () => {
71
+ void shutdown('SIGINT');
72
+ });
73
+ }
74
+
75
+ main().catch((error) => {
76
+ const message = error?.stack || error?.message || String(error);
77
+ console.error(`[ERROR] Frontend daemon failed to start: ${message}`);
78
+ process.exit(1);
79
+ });
@@ -1,161 +1,161 @@
1
- /**
2
- * Centralized Model Definitions
3
- * Single source of truth for all supported AI models
4
- */
5
-
6
- /**
7
- * Claude (Anthropic) Models
8
- *
9
- * Note: Claude uses two different formats:
10
- * - SDK format ('sonnet', 'opus') - used by the UI and claude-sdk.js
11
- * - API format ('claude-sonnet-4.5') - used by slash commands for display
12
- */
13
- export const CLAUDE_MODELS = {
14
- // Models in SDK format (what the actual SDK accepts)
15
- OPTIONS: [
16
- { value: "sonnet", label: "Sonnet" },
17
- { value: "opus", label: "Opus" },
18
- { value: "haiku", label: "Haiku" },
19
- // Explicit model-id option for Opus 4.6 (separate from the "opus" alias which
20
- // tracks whatever Anthropic currently aliases to the latest Opus).
21
- { value: "claude-opus-4-6", label: "Opus 4.6" },
22
- { value: "opusplan", label: "Opus Plan" },
23
- { value: "sonnet[1m]", label: "Sonnet [1M]" },
24
- { value: "opus[1m]", label: "Opus [1M]" },
25
- ],
26
-
27
- DEFAULT: "opus",
28
- };
29
-
30
- /**
31
- * Cursor Models
32
- */
33
- export const CURSOR_MODELS = {
34
- OPTIONS: [
35
- { value: "opus-4.6-thinking", label: "Claude 4.6 Opus (Thinking)" },
36
- { value: "gpt-5.3-codex", label: "GPT-5.3" },
37
- { value: "gpt-5.2-high", label: "GPT-5.2 High" },
38
- { value: "gemini-3-pro", label: "Gemini 3 Pro" },
39
- { value: "opus-4.5-thinking", label: "Claude 4.5 Opus (Thinking)" },
40
- { value: "gpt-5.2", label: "GPT-5.2" },
41
- { value: "gpt-5.1", label: "GPT-5.1" },
42
- { value: "gpt-5.1-high", label: "GPT-5.1 High" },
43
- { value: "composer-1", label: "Composer 1" },
44
- { value: "auto", label: "Auto" },
45
- { value: "sonnet-4.5", label: "Claude 4.5 Sonnet" },
46
- { value: "sonnet-4.5-thinking", label: "Claude 4.5 Sonnet (Thinking)" },
47
- { value: "opus-4.5", label: "Claude 4.5 Opus" },
48
- { value: "gpt-5.1-codex", label: "GPT-5.1 Codex" },
49
- { value: "gpt-5.1-codex-high", label: "GPT-5.1 Codex High" },
50
- { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
51
- { value: "gpt-5.1-codex-max-high", label: "GPT-5.1 Codex Max High" },
52
- { value: "opus-4.1", label: "Claude 4.1 Opus" },
53
- { value: "grok", label: "Grok" },
54
- ],
55
-
56
- DEFAULT: "gpt-5-3-codex",
57
- };
58
-
59
- /**
60
- * Codex (OpenAI) Models
61
- */
62
- export const CODEX_MODELS = {
63
- OPTIONS: [
64
- { value: "gpt-5.4", label: "GPT-5.4" },
65
- { value: "gpt-5.4-mini", label: "GPT-5.4 mini" },
66
- { value: "gpt-5.3-codex", label: "GPT-5.3 Codex" },
67
- { value: "gpt-5.2-codex", label: "GPT-5.2 Codex" },
68
- { value: "gpt-5.2", label: "GPT-5.2" },
69
- { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
70
- { value: "o3", label: "O3" },
71
- { value: "o4-mini", label: "O4-mini" },
72
- ],
73
-
74
- DEFAULT: "gpt-5.4",
75
- };
76
-
77
- /**
78
- * Qwen Code Models
79
- * Covers free tier (Qwen OAuth), Alibaba Coding Plan paid tier, and OpenAI-compat BYOK.
80
- * Defaults to the coder-focused variant users actually want for Pixcode.
81
- */
82
- export const QWEN_MODELS = {
83
- OPTIONS: [
84
- { value: "qwen3-coder-plus", label: "Qwen3 Coder Plus" },
85
- { value: "qwen3-coder-next", label: "Qwen3 Coder Next" },
86
- { value: "qwen3-coder-480B-A35B-instruct", label: "Qwen3 Coder 480B (Instruct)" },
87
- { value: "qwen3-coder-30B-A3B", label: "Qwen3 Coder 30B" },
88
- { value: "qwen3.5-plus", label: "Qwen3.5 Plus" },
89
- { value: "qwen3-max", label: "Qwen3 Max" },
90
- { value: "glm-4.7", label: "GLM-4.7 (Alibaba Coding Plan)" },
91
- { value: "kimi-k2.5", label: "Kimi K2.5 (Alibaba Coding Plan)" },
92
- ],
93
-
94
- DEFAULT: "qwen3-coder-plus",
95
- };
96
-
97
- /**
98
- * OpenCode Models — STATIC FALLBACK ONLY.
99
- *
100
- * OpenCode is multi-provider and the live model catalog rotates often
101
- * (Zen free models come and go; new Anthropic/OpenAI/Google models ship
102
- * every few weeks). The runtime fetches the live catalog from
103
- * `https://models.dev/api.json` via server/services/provider-models.js
104
- * and merges it on top of this list — these entries only show when the
105
- * fetch fails (offline install, firewalled host).
106
- *
107
- * Curated current free Zen tier + canonical paid picks. Update when the
108
- * fallback feels stale, but the live fetch is the source of truth.
109
- */
110
- export const OPENCODE_MODELS = {
111
- OPTIONS: [
112
- // OpenCode Zen — free tier (no charge, may rate-limit). The "limited
113
- // time" Zen freebies rotate, so keep this fallback conservative and let
114
- // the live models.dev catalog populate the full current list.
115
- { value: "opencode/big-pickle", label: "OpenCode Zen · Big Pickle (Free)", free: true },
116
- { value: "opencode/minimax-m2.5-free", label: "OpenCode Zen · MiniMax M2.5 (Free)", free: true },
117
- { value: "opencode/nemotron-3-super-free", label: "OpenCode Zen · Nemotron 3 Super (Free)", free: true },
118
- { value: "opencode/gpt-5-nano", label: "OpenCode Zen · GPT-5 Nano (Free)", free: true },
119
-
120
- // Anthropic — current flagship + cheap.
121
- { value: "anthropic/claude-opus-4-7", label: "Claude Opus 4.7 (Anthropic)" },
122
- { value: "anthropic/claude-sonnet-4-6", label: "Claude Sonnet 4.6 (Anthropic)" },
123
- { value: "anthropic/claude-haiku-4-5", label: "Claude Haiku 4.5 (Anthropic)" },
124
-
125
- // OpenAI — current GPT-5 family.
126
- { value: "openai/gpt-5.4", label: "GPT-5.4 (OpenAI)" },
127
- { value: "openai/gpt-5.1-codex", label: "GPT-5.1 Codex (OpenAI)" },
128
-
129
- // Google — current Gemini 3 family.
130
- { value: "google/gemini-3.1-pro-preview", label: "Gemini 3.1 Pro (Google)" },
131
- { value: "google/gemini-3-flash-preview", label: "Gemini 3 Flash (Google)" },
132
-
133
- // xAI — fast & cheap coding model.
134
- { value: "xai/grok-code-fast-1", label: "Grok Code Fast 1 (xAI)" },
135
- ],
136
-
137
- // Free Zen freebie that historically works for unauthed installs.
138
- DEFAULT: "opencode/big-pickle",
139
- };
140
-
141
- /**
142
- * Gemini Models
143
- */
144
- export const GEMINI_MODELS = {
145
- OPTIONS: [
146
- { value: "gemini-3.1-pro-preview", label: "Gemini 3.1 Pro Preview" },
147
- { value: "gemini-3-pro-preview", label: "Gemini 3 Pro Preview" },
148
- { value: "gemini-3-flash-preview", label: "Gemini 3 Flash Preview" },
149
- { value: "gemini-2.5-flash", label: "Gemini 2.5 Flash" },
150
- { value: "gemini-2.5-pro", label: "Gemini 2.5 Pro" },
151
- { value: "gemini-2.0-flash-lite", label: "Gemini 2.0 Flash Lite" },
152
- { value: "gemini-2.0-flash", label: "Gemini 2.0 Flash" },
153
- { value: "gemini-2.0-pro-exp", label: "Gemini 2.0 Pro Experimental" },
154
- {
155
- value: "gemini-2.0-flash-thinking-exp",
156
- label: "Gemini 2.0 Flash Thinking",
157
- },
158
- ],
159
-
160
- DEFAULT: "gemini-3.1-pro-preview",
161
- };
1
+ /**
2
+ * Centralized Model Definitions
3
+ * Single source of truth for all supported AI models
4
+ */
5
+
6
+ /**
7
+ * Claude (Anthropic) Models
8
+ *
9
+ * Note: Claude uses two different formats:
10
+ * - SDK format ('sonnet', 'opus') - used by the UI and claude-sdk.js
11
+ * - API format ('claude-sonnet-4.5') - used by slash commands for display
12
+ */
13
+ export const CLAUDE_MODELS = {
14
+ // Models in SDK format (what the actual SDK accepts)
15
+ OPTIONS: [
16
+ { value: "sonnet", label: "Sonnet" },
17
+ { value: "opus", label: "Opus" },
18
+ { value: "haiku", label: "Haiku" },
19
+ // Explicit model-id option for Opus 4.6 (separate from the "opus" alias which
20
+ // tracks whatever Anthropic currently aliases to the latest Opus).
21
+ { value: "claude-opus-4-6", label: "Opus 4.6" },
22
+ { value: "opusplan", label: "Opus Plan" },
23
+ { value: "sonnet[1m]", label: "Sonnet [1M]" },
24
+ { value: "opus[1m]", label: "Opus [1M]" },
25
+ ],
26
+
27
+ DEFAULT: "opus",
28
+ };
29
+
30
+ /**
31
+ * Cursor Models
32
+ */
33
+ export const CURSOR_MODELS = {
34
+ OPTIONS: [
35
+ { value: "opus-4.6-thinking", label: "Claude 4.6 Opus (Thinking)" },
36
+ { value: "gpt-5.3-codex", label: "GPT-5.3" },
37
+ { value: "gpt-5.2-high", label: "GPT-5.2 High" },
38
+ { value: "gemini-3-pro", label: "Gemini 3 Pro" },
39
+ { value: "opus-4.5-thinking", label: "Claude 4.5 Opus (Thinking)" },
40
+ { value: "gpt-5.2", label: "GPT-5.2" },
41
+ { value: "gpt-5.1", label: "GPT-5.1" },
42
+ { value: "gpt-5.1-high", label: "GPT-5.1 High" },
43
+ { value: "composer-1", label: "Composer 1" },
44
+ { value: "auto", label: "Auto" },
45
+ { value: "sonnet-4.5", label: "Claude 4.5 Sonnet" },
46
+ { value: "sonnet-4.5-thinking", label: "Claude 4.5 Sonnet (Thinking)" },
47
+ { value: "opus-4.5", label: "Claude 4.5 Opus" },
48
+ { value: "gpt-5.1-codex", label: "GPT-5.1 Codex" },
49
+ { value: "gpt-5.1-codex-high", label: "GPT-5.1 Codex High" },
50
+ { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
51
+ { value: "gpt-5.1-codex-max-high", label: "GPT-5.1 Codex Max High" },
52
+ { value: "opus-4.1", label: "Claude 4.1 Opus" },
53
+ { value: "grok", label: "Grok" },
54
+ ],
55
+
56
+ DEFAULT: "gpt-5-3-codex",
57
+ };
58
+
59
+ /**
60
+ * Codex (OpenAI) Models
61
+ */
62
+ export const CODEX_MODELS = {
63
+ OPTIONS: [
64
+ { value: "gpt-5.4", label: "GPT-5.4" },
65
+ { value: "gpt-5.4-mini", label: "GPT-5.4 mini" },
66
+ { value: "gpt-5.3-codex", label: "GPT-5.3 Codex" },
67
+ { value: "gpt-5.2-codex", label: "GPT-5.2 Codex" },
68
+ { value: "gpt-5.2", label: "GPT-5.2" },
69
+ { value: "gpt-5.1-codex-max", label: "GPT-5.1 Codex Max" },
70
+ { value: "o3", label: "O3" },
71
+ { value: "o4-mini", label: "O4-mini" },
72
+ ],
73
+
74
+ DEFAULT: "gpt-5.4",
75
+ };
76
+
77
+ /**
78
+ * Qwen Code Models
79
+ * Covers free tier (Qwen OAuth), Alibaba Coding Plan paid tier, and OpenAI-compat BYOK.
80
+ * Defaults to the coder-focused variant users actually want for Pixcode.
81
+ */
82
+ export const QWEN_MODELS = {
83
+ OPTIONS: [
84
+ { value: "qwen3-coder-plus", label: "Qwen3 Coder Plus" },
85
+ { value: "qwen3-coder-next", label: "Qwen3 Coder Next" },
86
+ { value: "qwen3-coder-480B-A35B-instruct", label: "Qwen3 Coder 480B (Instruct)" },
87
+ { value: "qwen3-coder-30B-A3B", label: "Qwen3 Coder 30B" },
88
+ { value: "qwen3.5-plus", label: "Qwen3.5 Plus" },
89
+ { value: "qwen3-max", label: "Qwen3 Max" },
90
+ { value: "glm-4.7", label: "GLM-4.7 (Alibaba Coding Plan)" },
91
+ { value: "kimi-k2.5", label: "Kimi K2.5 (Alibaba Coding Plan)" },
92
+ ],
93
+
94
+ DEFAULT: "qwen3-coder-plus",
95
+ };
96
+
97
+ /**
98
+ * OpenCode Models — STATIC FALLBACK ONLY.
99
+ *
100
+ * OpenCode is multi-provider and the live model catalog rotates often
101
+ * (Zen free models come and go; new Anthropic/OpenAI/Google models ship
102
+ * every few weeks). The runtime fetches the live catalog from
103
+ * `https://models.dev/api.json` via server/services/provider-models.js
104
+ * and merges it on top of this list — these entries only show when the
105
+ * fetch fails (offline install, firewalled host).
106
+ *
107
+ * Curated current free Zen tier + canonical paid picks. Update when the
108
+ * fallback feels stale, but the live fetch is the source of truth.
109
+ */
110
+ export const OPENCODE_MODELS = {
111
+ OPTIONS: [
112
+ // OpenCode Zen — free tier (no charge, may rate-limit). The "limited
113
+ // time" Zen freebies rotate, so keep this fallback conservative and let
114
+ // the live models.dev catalog populate the full current list.
115
+ { value: "opencode/big-pickle", label: "OpenCode Zen · Big Pickle (Free)", free: true },
116
+ { value: "opencode/minimax-m2.5-free", label: "OpenCode Zen · MiniMax M2.5 (Free)", free: true },
117
+ { value: "opencode/nemotron-3-super-free", label: "OpenCode Zen · Nemotron 3 Super (Free)", free: true },
118
+ { value: "opencode/gpt-5-nano", label: "OpenCode Zen · GPT-5 Nano (Free)", free: true },
119
+
120
+ // Anthropic — current flagship + cheap.
121
+ { value: "anthropic/claude-opus-4-7", label: "Claude Opus 4.7 (Anthropic)" },
122
+ { value: "anthropic/claude-sonnet-4-6", label: "Claude Sonnet 4.6 (Anthropic)" },
123
+ { value: "anthropic/claude-haiku-4-5", label: "Claude Haiku 4.5 (Anthropic)" },
124
+
125
+ // OpenAI — current GPT-5 family.
126
+ { value: "openai/gpt-5.4", label: "GPT-5.4 (OpenAI)" },
127
+ { value: "openai/gpt-5.1-codex", label: "GPT-5.1 Codex (OpenAI)" },
128
+
129
+ // Google — current Gemini 3 family.
130
+ { value: "google/gemini-3.1-pro-preview", label: "Gemini 3.1 Pro (Google)" },
131
+ { value: "google/gemini-3-flash-preview", label: "Gemini 3 Flash (Google)" },
132
+
133
+ // xAI — fast & cheap coding model.
134
+ { value: "xai/grok-code-fast-1", label: "Grok Code Fast 1 (xAI)" },
135
+ ],
136
+
137
+ // Free Zen freebie that historically works for unauthed installs.
138
+ DEFAULT: "opencode/big-pickle",
139
+ };
140
+
141
+ /**
142
+ * Gemini Models
143
+ */
144
+ export const GEMINI_MODELS = {
145
+ OPTIONS: [
146
+ { value: "gemini-3.1-pro-preview", label: "Gemini 3.1 Pro Preview" },
147
+ { value: "gemini-3-pro-preview", label: "Gemini 3 Pro Preview" },
148
+ { value: "gemini-3-flash-preview", label: "Gemini 3 Flash Preview" },
149
+ { value: "gemini-2.5-flash", label: "Gemini 2.5 Flash" },
150
+ { value: "gemini-2.5-pro", label: "Gemini 2.5 Pro" },
151
+ { value: "gemini-2.0-flash-lite", label: "Gemini 2.0 Flash Lite" },
152
+ { value: "gemini-2.0-flash", label: "Gemini 2.0 Flash" },
153
+ { value: "gemini-2.0-pro-exp", label: "Gemini 2.0 Pro Experimental" },
154
+ {
155
+ value: "gemini-2.0-flash-thinking-exp",
156
+ label: "Gemini 2.0 Flash Thinking",
157
+ },
158
+ ],
159
+
160
+ DEFAULT: "gemini-3.1-pro-preview",
161
+ };
@@ -1,22 +1,22 @@
1
- export function isWildcardHost(host) {
2
- return host === '0.0.0.0' || host === '::';
3
- }
4
-
5
- export function isLoopbackHost(host) {
6
- return host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]';
7
- }
8
-
9
- export function normalizeLoopbackHost(host) {
10
- if (!host) {
11
- return host;
12
- }
13
- return isLoopbackHost(host) ? 'localhost' : host;
14
- }
15
-
16
- // Use localhost for connectable loopback and wildcard addresses in browser-facing URLs.
17
- export function getConnectableHost(host) {
18
- if (!host) {
19
- return 'localhost';
20
- }
21
- return isWildcardHost(host) || isLoopbackHost(host) ? 'localhost' : host;
22
- }
1
+ export function isWildcardHost(host) {
2
+ return host === '0.0.0.0' || host === '::';
3
+ }
4
+
5
+ export function isLoopbackHost(host) {
6
+ return host === 'localhost' || host === '127.0.0.1' || host === '::1' || host === '[::1]';
7
+ }
8
+
9
+ export function normalizeLoopbackHost(host) {
10
+ if (!host) {
11
+ return host;
12
+ }
13
+ return isLoopbackHost(host) ? 'localhost' : host;
14
+ }
15
+
16
+ // Use localhost for connectable loopback and wildcard addresses in browser-facing URLs.
17
+ export function getConnectableHost(host) {
18
+ if (!host) {
19
+ return 'localhost';
20
+ }
21
+ return isWildcardHost(host) || isLoopbackHost(host) ? 'localhost' : host;
22
+ }