@pixelbyte-software/pixcode 1.54.10 → 1.55.0

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 (534) hide show
  1. package/CODE_OF_CONDUCT.md +41 -41
  2. package/CONTRIBUTING.md +156 -156
  3. package/LICENSE +21 -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 +435 -418
  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-server/server/claude-sdk.js +1 -1
  13. package/dist-server/server/claude-sdk.js.map +1 -1
  14. package/dist-server/server/cli.js +100 -100
  15. package/dist-server/server/daemon/manager.js +33 -33
  16. package/dist-server/server/daemon-manager.js +64 -64
  17. package/dist-server/server/index.js +6 -11
  18. package/dist-server/server/index.js.map +1 -1
  19. package/dist-server/server/modules/security/permission-policy.js.map +1 -0
  20. package/dist-server/server/modules/tasks/git-worktree.js +98 -0
  21. package/dist-server/server/modules/tasks/git-worktree.js.map +1 -0
  22. package/dist-server/server/modules/tasks/index.js +8 -0
  23. package/dist-server/server/modules/tasks/index.js.map +1 -0
  24. package/dist-server/server/modules/tasks/prompt-builder.js +85 -0
  25. package/dist-server/server/modules/tasks/prompt-builder.js.map +1 -0
  26. package/dist-server/server/modules/tasks/role-presets.js +94 -0
  27. package/dist-server/server/modules/tasks/role-presets.js.map +1 -0
  28. package/dist-server/server/modules/tasks/runners/claude-runner.js +109 -0
  29. package/dist-server/server/modules/tasks/runners/claude-runner.js.map +1 -0
  30. package/dist-server/server/modules/tasks/runners/codex-runner.js +67 -0
  31. package/dist-server/server/modules/tasks/runners/codex-runner.js.map +1 -0
  32. package/dist-server/server/modules/tasks/runners/spawn-runner.js +111 -0
  33. package/dist-server/server/modules/tasks/runners/spawn-runner.js.map +1 -0
  34. package/dist-server/server/modules/tasks/runners/types.js +5 -0
  35. package/dist-server/server/modules/tasks/runners/types.js.map +1 -0
  36. package/dist-server/server/modules/tasks/scheduler.js +69 -0
  37. package/dist-server/server/modules/tasks/scheduler.js.map +1 -0
  38. package/dist-server/server/modules/tasks/task-queue.js +81 -0
  39. package/dist-server/server/modules/tasks/task-queue.js.map +1 -0
  40. package/dist-server/server/modules/tasks/task-routes.js +195 -0
  41. package/dist-server/server/modules/tasks/task-routes.js.map +1 -0
  42. package/dist-server/server/modules/tasks/task-runner.js +187 -0
  43. package/dist-server/server/modules/tasks/task-runner.js.map +1 -0
  44. package/dist-server/server/modules/tasks/task-store.js +196 -0
  45. package/dist-server/server/modules/tasks/task-store.js.map +1 -0
  46. package/dist-server/server/modules/tasks/task-types.js +5 -0
  47. package/dist-server/server/modules/tasks/task-types.js.map +1 -0
  48. package/dist-server/server/modules/tasks/user-interaction.js +73 -0
  49. package/dist-server/server/modules/tasks/user-interaction.js.map +1 -0
  50. package/dist-server/server/routes/commands.js +25 -25
  51. package/dist-server/server/routes/git.js +17 -17
  52. package/dist-server/server/routes/live-view.js +46 -46
  53. package/dist-server/server/services/control-room.js +9 -1
  54. package/dist-server/server/services/control-room.js.map +1 -1
  55. package/dist-server/server/services/public-api-manifest.js +54 -54
  56. package/dist-server/server/services/public-api-manifest.js.map +1 -1
  57. package/dist-server/server/services/telegram/control-center.js +10 -10
  58. package/dist-server/server/services/telegram/control-center.js.map +1 -1
  59. package/dist-server/server/services/telegram/telegram-gateway.js +2 -2
  60. package/dist-server/server/services/telegram/telegram-gateway.js.map +1 -1
  61. package/dist-server/server/services/telegram/translations.js +5 -5
  62. package/dist-server/server/services/telegram/translations.js.map +1 -1
  63. package/package.json +224 -224
  64. package/scripts/fix-node-pty.js +67 -67
  65. package/scripts/github/create-v1.38-issues.mjs +351 -351
  66. package/scripts/github/create-vscode-workbench-issues.mjs +121 -121
  67. package/scripts/smoke/backend-resource-bounds.mjs +152 -152
  68. package/scripts/smoke/changes-panel-layout.mjs +48 -48
  69. package/scripts/smoke/chat-composer-fixed-layout.mjs +55 -55
  70. package/scripts/smoke/chat-message-timeline-order.mjs +41 -41
  71. package/scripts/smoke/chat-realtime-hydration.mjs +44 -44
  72. package/scripts/smoke/chat-session-provider-pools.mjs +35 -35
  73. package/scripts/smoke/chat-session-state.mjs +19 -19
  74. package/scripts/smoke/code-editor-theme.mjs +55 -55
  75. package/scripts/smoke/code-editor-vscode-engine.mjs +91 -91
  76. package/scripts/smoke/command-center-agent-writes.mjs +79 -79
  77. package/scripts/smoke/command-center-non-git.mjs +46 -46
  78. package/scripts/smoke/context-packet.mjs +43 -43
  79. package/scripts/smoke/control-room-ux-redesign.mjs +91 -91
  80. package/scripts/smoke/daemon-entrypoint.mjs +20 -20
  81. package/scripts/smoke/default-landing-routing.mjs +33 -33
  82. package/scripts/smoke/desktop-native-notifications.mjs +30 -30
  83. package/scripts/smoke/desktop-tray-icon.mjs +33 -33
  84. package/scripts/smoke/discord-release-workflow.mjs +24 -24
  85. package/scripts/smoke/git-install-update.mjs +255 -255
  86. package/scripts/smoke/handoff-artifact-protocol.mjs +50 -50
  87. package/scripts/smoke/live-view-diagnostics.mjs +53 -53
  88. package/scripts/smoke/live-view-environment.mjs +92 -92
  89. package/scripts/smoke/live-view-integration.mjs +450 -450
  90. package/scripts/smoke/mac-desktop-runtime.mjs +37 -37
  91. package/scripts/smoke/mobile-tunnel-guidance.mjs +29 -29
  92. package/scripts/smoke/mobile-ux.mjs +76 -76
  93. package/scripts/smoke/model-registry.mjs +36 -36
  94. package/scripts/smoke/multi-project-ui.mjs +45 -45
  95. package/scripts/smoke/multi-worker-slots.mjs +42 -42
  96. package/scripts/smoke/notification-center.mjs +87 -87
  97. package/scripts/smoke/notification-inapp-preference.mjs +23 -23
  98. package/scripts/smoke/notification-taxonomy.mjs +58 -58
  99. package/scripts/smoke/orchestration-api.mjs +172 -172
  100. package/scripts/smoke/orchestration-execution-dashboard.mjs +33 -33
  101. package/scripts/smoke/orchestration-live-run.mjs +176 -176
  102. package/scripts/smoke/orchestration-mobile-scroll.mjs +29 -29
  103. package/scripts/smoke/orchestration-model-sync.mjs +30 -30
  104. package/scripts/smoke/orchestration-permission-fallback.mjs +34 -34
  105. package/scripts/smoke/orchestration-runtime-guards.mjs +48 -48
  106. package/scripts/smoke/orchestration-user-facing-output.mjs +25 -25
  107. package/scripts/smoke/permission-policy.mjs +50 -50
  108. package/scripts/smoke/pixcode-workbench-1-48.mjs +167 -167
  109. package/scripts/smoke/provider-models-opencode-live.mjs +66 -66
  110. package/scripts/smoke/provider-rest-api.mjs +124 -124
  111. package/scripts/smoke/provider-selection-status.mjs +52 -52
  112. package/scripts/smoke/run-state-refresh.mjs +52 -52
  113. package/scripts/smoke/runtime-manager.mjs +99 -99
  114. package/scripts/smoke/shell-manual-disconnect.mjs +30 -30
  115. package/scripts/smoke/side-panel-editor-layout.mjs +34 -34
  116. package/scripts/smoke/static-root-routing.mjs +21 -21
  117. package/scripts/smoke/strict-handoff-compact.mjs +60 -60
  118. package/scripts/smoke/taskmaster-config.mjs +24 -24
  119. package/scripts/smoke/taskmaster-execution-telegram.mjs +3 -3
  120. package/scripts/smoke/taskmaster-onboarding.mjs +3 -3
  121. package/scripts/smoke/taskmaster-run-graph.mjs +3 -3
  122. package/scripts/smoke/telegram-control.mjs +331 -331
  123. package/scripts/smoke/tunnel-persistence.mjs +56 -56
  124. package/scripts/smoke/update-issue-progress.mjs +69 -69
  125. package/scripts/smoke/update-ux.mjs +55 -55
  126. package/scripts/smoke/v138-completion.mjs +132 -132
  127. package/scripts/smoke/v138-desktop-release-hardening.mjs +69 -69
  128. package/scripts/smoke/v138-diagnostics.mjs +63 -63
  129. package/scripts/smoke/v138-issue-planner.mjs +33 -33
  130. package/scripts/smoke/v143-remote-control.mjs +76 -76
  131. package/scripts/smoke/v144-production-loop.mjs +47 -47
  132. package/scripts/smoke/v145-platformization.mjs +46 -46
  133. package/scripts/smoke/v146-control-room-ui.mjs +150 -150
  134. package/scripts/smoke/version-modal-autoshow.mjs +29 -29
  135. package/scripts/smoke/vscode-workbench-layout.mjs +63 -63
  136. package/scripts/smoke/vscode-workbench-polish.mjs +461 -461
  137. package/scripts/smoke/workflow-fallback-replay.mjs +56 -56
  138. package/scripts/smoke/workflow-templates.mjs +43 -43
  139. package/scripts/smoke/workflow-trace-timeline.mjs +46 -46
  140. package/scripts/update-git-install.mjs +298 -298
  141. package/server/claude-sdk.js +927 -927
  142. package/server/cli.js +1106 -1106
  143. package/server/constants/config.js +4 -4
  144. package/server/cursor-cli.js +344 -344
  145. package/server/daemon/manager.js +563 -563
  146. package/server/daemon-manager.js +964 -964
  147. package/server/database/db.js +988 -988
  148. package/server/database/json-store.js +197 -197
  149. package/server/gemini-cli.js +550 -550
  150. package/server/gemini-response-handler.js +79 -79
  151. package/server/index.js +5654 -5671
  152. package/server/load-env.js +35 -35
  153. package/server/middleware/account-lockout.js +112 -112
  154. package/server/middleware/auth.js +277 -277
  155. package/server/middleware/rate-limiter.js +87 -87
  156. package/server/modules/providers/index.ts +2 -2
  157. package/server/modules/providers/list/claude/claude-auth.provider.ts +146 -146
  158. package/server/modules/providers/list/claude/claude-mcp.provider.ts +135 -135
  159. package/server/modules/providers/list/claude/claude-sessions.provider.ts +306 -306
  160. package/server/modules/providers/list/claude/claude.provider.ts +15 -15
  161. package/server/modules/providers/list/codex/codex-auth.provider.ts +117 -117
  162. package/server/modules/providers/list/codex/codex-mcp.provider.ts +135 -135
  163. package/server/modules/providers/list/codex/codex-sessions.provider.ts +319 -319
  164. package/server/modules/providers/list/codex/codex.provider.ts +15 -15
  165. package/server/modules/providers/list/cursor/cursor-auth.provider.ts +147 -147
  166. package/server/modules/providers/list/cursor/cursor-mcp.provider.ts +108 -108
  167. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +421 -421
  168. package/server/modules/providers/list/cursor/cursor.provider.ts +15 -15
  169. package/server/modules/providers/list/gemini/gemini-auth.provider.ts +173 -173
  170. package/server/modules/providers/list/gemini/gemini-mcp.provider.ts +110 -110
  171. package/server/modules/providers/list/gemini/gemini-sessions.provider.ts +227 -227
  172. package/server/modules/providers/list/gemini/gemini.provider.ts +15 -15
  173. package/server/modules/providers/list/opencode/opencode-auth.provider.ts +131 -131
  174. package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +286 -286
  175. package/server/modules/providers/list/qwen/qwen-auth.provider.ts +146 -146
  176. package/server/modules/providers/list/qwen/qwen-sessions.provider.ts +265 -265
  177. package/server/modules/providers/provider.registry.ts +40 -40
  178. package/server/modules/providers/provider.routes.ts +982 -982
  179. package/server/modules/providers/services/mcp.service.ts +86 -86
  180. package/server/modules/providers/services/provider-auth.service.ts +26 -26
  181. package/server/modules/providers/services/sessions.service.ts +45 -45
  182. package/server/modules/providers/shared/base/abstract.provider.ts +20 -20
  183. package/server/modules/providers/shared/mcp/mcp.provider.ts +151 -151
  184. package/server/modules/providers/tests/mcp.test.ts +293 -293
  185. package/server/modules/{orchestration/security → security}/permission-policy.ts +401 -401
  186. package/server/modules/tasks/git-worktree.ts +102 -0
  187. package/server/modules/tasks/index.ts +9 -0
  188. package/server/modules/tasks/prompt-builder.ts +98 -0
  189. package/server/modules/tasks/role-presets.ts +113 -0
  190. package/server/modules/tasks/runners/claude-runner.ts +120 -0
  191. package/server/modules/tasks/runners/codex-runner.ts +80 -0
  192. package/server/modules/tasks/runners/spawn-runner.ts +122 -0
  193. package/server/modules/tasks/runners/types.ts +25 -0
  194. package/server/modules/tasks/scheduler.ts +75 -0
  195. package/server/modules/tasks/task-queue.ts +91 -0
  196. package/server/modules/tasks/task-routes.ts +245 -0
  197. package/server/modules/tasks/task-runner.ts +219 -0
  198. package/server/modules/tasks/task-store.ts +223 -0
  199. package/server/modules/tasks/task-types.ts +100 -0
  200. package/server/modules/tasks/user-interaction.ts +93 -0
  201. package/server/openai-codex.js +468 -468
  202. package/server/opencode-cli.js +491 -491
  203. package/server/opencode-response-handler.js +111 -111
  204. package/server/projects.js +3135 -3135
  205. package/server/qwen-code-cli.js +410 -410
  206. package/server/routes/agent.js +1462 -1462
  207. package/server/routes/auth.js +298 -298
  208. package/server/routes/codex.js +20 -20
  209. package/server/routes/commands.js +581 -581
  210. package/server/routes/cursor.js +61 -61
  211. package/server/routes/diagnostics.js +44 -44
  212. package/server/routes/gemini.js +25 -25
  213. package/server/routes/git.js +1822 -1822
  214. package/server/routes/live-view.js +434 -434
  215. package/server/routes/mcp-utils.js +13 -13
  216. package/server/routes/messages.js +97 -97
  217. package/server/routes/network.js +143 -143
  218. package/server/routes/platformization.js +231 -231
  219. package/server/routes/plugins.js +690 -690
  220. package/server/routes/production-agent-loop.js +90 -90
  221. package/server/routes/projects.js +918 -918
  222. package/server/routes/public-api.js +34 -34
  223. package/server/routes/qwen.js +27 -27
  224. package/server/routes/remote.js +56 -56
  225. package/server/routes/settings.js +321 -321
  226. package/server/routes/telegram.js +163 -163
  227. package/server/routes/user.js +125 -125
  228. package/server/routes/webhooks.js +63 -63
  229. package/server/services/control-room.js +111 -102
  230. package/server/services/diagnostics.js +165 -165
  231. package/server/services/external-access.js +403 -403
  232. package/server/services/install-jobs.js +715 -715
  233. package/server/services/live-view.js +956 -956
  234. package/server/services/managed-runtimes.js +493 -493
  235. package/server/services/model-registry.js +144 -144
  236. package/server/services/notification-orchestrator.js +365 -365
  237. package/server/services/notification-taxonomy.js +204 -204
  238. package/server/services/platformization.js +1052 -1052
  239. package/server/services/production-agent-loop.js +248 -248
  240. package/server/services/provider-cli-versions.js +149 -149
  241. package/server/services/provider-credentials.js +189 -189
  242. package/server/services/provider-models.js +396 -396
  243. package/server/services/public-api-manifest.js +181 -181
  244. package/server/services/qr-login.js +126 -126
  245. package/server/services/remote-connection.js +127 -127
  246. package/server/services/runtime-manager.js +323 -323
  247. package/server/services/startup-update.js +259 -259
  248. package/server/services/telegram/bot.js +393 -393
  249. package/server/services/telegram/control-center.js +2453 -2453
  250. package/server/services/telegram/telegram-gateway.js +314 -314
  251. package/server/services/telegram/telegram-http-client.js +201 -201
  252. package/server/services/telegram/translations.js +470 -470
  253. package/server/services/webhooks.js +216 -216
  254. package/server/sessionManager.js +225 -225
  255. package/server/setup-wizard.js +283 -283
  256. package/server/shared/interfaces.ts +54 -54
  257. package/server/shared/types.ts +172 -172
  258. package/server/shared/utils.ts +193 -193
  259. package/server/tsconfig.json +36 -36
  260. package/server/utils/colors.js +21 -21
  261. package/server/utils/commandParser.js +305 -305
  262. package/server/utils/frontmatter.js +18 -18
  263. package/server/utils/gitConfig.js +34 -34
  264. package/server/utils/plugin-loader.js +461 -461
  265. package/server/utils/plugin-process-manager.js +185 -185
  266. package/server/utils/port-access.js +227 -227
  267. package/server/utils/runtime-paths.js +37 -37
  268. package/server/utils/security-log.js +84 -84
  269. package/server/utils/url-detection.js +71 -71
  270. package/server/vite-daemon.js +79 -79
  271. package/shared/modelConstants.js +161 -161
  272. package/shared/networkHosts.js +22 -22
  273. package/dist/api-automation.html +0 -110
  274. package/dist/api-docs.html +0 -548
  275. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  276. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  277. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  278. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  279. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  280. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  281. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  282. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  283. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  284. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  285. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  286. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  287. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  288. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  289. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  290. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  291. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  292. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  293. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  294. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  295. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  296. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  297. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  298. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  299. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  300. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  301. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  302. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  303. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  304. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  305. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  306. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  307. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  308. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  309. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  310. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  311. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  312. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  313. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  314. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  315. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  316. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  317. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  318. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  319. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  320. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  321. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  322. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  323. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  324. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  325. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  326. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  327. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  328. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  329. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  330. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  331. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  332. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  333. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  334. package/dist/assets/index-DWOW_Jn0.js +0 -877
  335. package/dist/assets/index-Dz1luE0u.css +0 -32
  336. package/dist/assets/index-ak1p_4ew.js +0 -11
  337. package/dist/assets/localMonaco-DFIbtDNp.js +0 -1
  338. package/dist/assets/vendor-codemirror-CIYNS698.js +0 -41
  339. package/dist/assets/vendor-react-DB6V5Fl1.js +0 -59
  340. package/dist/assets/vendor-xterm-C7tpxJl7.js +0 -9
  341. package/dist/clear-cache.html +0 -85
  342. package/dist/convert-icons.md +0 -53
  343. package/dist/docs.html +0 -308
  344. package/dist/favicon.png +0 -0
  345. package/dist/favicon.svg +0 -8
  346. package/dist/features.html +0 -133
  347. package/dist/generate-icons.js +0 -49
  348. package/dist/humans.txt +0 -15
  349. package/dist/icons/claude-ai-icon.svg +0 -1
  350. package/dist/icons/codex-white.svg +0 -3
  351. package/dist/icons/codex.svg +0 -3
  352. package/dist/icons/cursor-white.svg +0 -12
  353. package/dist/icons/cursor.svg +0 -1
  354. package/dist/icons/gemini-ai-icon.svg +0 -1
  355. package/dist/icons/icon-128x128.png +0 -0
  356. package/dist/icons/icon-128x128.svg +0 -9
  357. package/dist/icons/icon-144x144.png +0 -0
  358. package/dist/icons/icon-144x144.svg +0 -9
  359. package/dist/icons/icon-152x152.png +0 -0
  360. package/dist/icons/icon-152x152.svg +0 -9
  361. package/dist/icons/icon-192x192.png +0 -0
  362. package/dist/icons/icon-192x192.svg +0 -9
  363. package/dist/icons/icon-384x384.png +0 -0
  364. package/dist/icons/icon-384x384.svg +0 -9
  365. package/dist/icons/icon-512x512.png +0 -0
  366. package/dist/icons/icon-512x512.svg +0 -9
  367. package/dist/icons/icon-72x72.png +0 -0
  368. package/dist/icons/icon-72x72.svg +0 -9
  369. package/dist/icons/icon-96x96.png +0 -0
  370. package/dist/icons/icon-96x96.svg +0 -9
  371. package/dist/icons/icon-template.svg +0 -9
  372. package/dist/icons/opencode-logo-dark.svg +0 -1
  373. package/dist/icons/opencode-logo-light.svg +0 -1
  374. package/dist/icons/qwen-ai-icon.png +0 -0
  375. package/dist/icons/qwen-logo.svg +0 -15
  376. package/dist/index.html +0 -62
  377. package/dist/landing.html +0 -268
  378. package/dist/llms-full.txt +0 -119
  379. package/dist/llms.txt +0 -53
  380. package/dist/logo-128.png +0 -0
  381. package/dist/logo-256.png +0 -0
  382. package/dist/logo-32.png +0 -0
  383. package/dist/logo-512.png +0 -0
  384. package/dist/logo-64.png +0 -0
  385. package/dist/logo.png +0 -0
  386. package/dist/logo.svg +0 -12
  387. package/dist/manifest.json +0 -61
  388. package/dist/openapi.yaml +0 -1696
  389. package/dist/orchestration.html +0 -125
  390. package/dist/robots.txt +0 -4
  391. package/dist/screenshots/cli-selection.png +0 -0
  392. package/dist/screenshots/desktop-main.png +0 -0
  393. package/dist/screenshots/mobile-chat.png +0 -0
  394. package/dist/screenshots/tools-modal.png +0 -0
  395. package/dist/site.css +0 -692
  396. package/dist/sitemap.xml +0 -51
  397. package/dist/sw.js +0 -132
  398. package/dist-server/server/modules/orchestration/a2a/adapter-registry.js +0 -73
  399. package/dist-server/server/modules/orchestration/a2a/adapter-registry.js.map +0 -1
  400. package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js +0 -17
  401. package/dist-server/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.js.map +0 -1
  402. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js +0 -236
  403. package/dist-server/server/modules/orchestration/a2a/adapters/claude-code.adapter.js.map +0 -1
  404. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js +0 -202
  405. package/dist-server/server/modules/orchestration/a2a/adapters/codex.adapter.js.map +0 -1
  406. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js +0 -205
  407. package/dist-server/server/modules/orchestration/a2a/adapters/cursor.adapter.js.map +0 -1
  408. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js +0 -205
  409. package/dist-server/server/modules/orchestration/a2a/adapters/gemini.adapter.js.map +0 -1
  410. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js +0 -84
  411. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.js.map +0 -1
  412. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.test.js +0 -43
  413. package/dist-server/server/modules/orchestration/a2a/adapters/json-event.adapter.test.js.map +0 -1
  414. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js +0 -205
  415. package/dist-server/server/modules/orchestration/a2a/adapters/opencode.adapter.js.map +0 -1
  416. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js +0 -205
  417. package/dist-server/server/modules/orchestration/a2a/adapters/qwen.adapter.js.map +0 -1
  418. package/dist-server/server/modules/orchestration/a2a/agent-card.js +0 -50
  419. package/dist-server/server/modules/orchestration/a2a/agent-card.js.map +0 -1
  420. package/dist-server/server/modules/orchestration/a2a/auth.middleware.js +0 -25
  421. package/dist-server/server/modules/orchestration/a2a/auth.middleware.js.map +0 -1
  422. package/dist-server/server/modules/orchestration/a2a/bus.js +0 -34
  423. package/dist-server/server/modules/orchestration/a2a/bus.js.map +0 -1
  424. package/dist-server/server/modules/orchestration/a2a/routes.js +0 -502
  425. package/dist-server/server/modules/orchestration/a2a/routes.js.map +0 -1
  426. package/dist-server/server/modules/orchestration/a2a/task-dispatcher.js +0 -295
  427. package/dist-server/server/modules/orchestration/a2a/task-dispatcher.js.map +0 -1
  428. package/dist-server/server/modules/orchestration/a2a/task-store.js +0 -144
  429. package/dist-server/server/modules/orchestration/a2a/task-store.js.map +0 -1
  430. package/dist-server/server/modules/orchestration/a2a/types.js +0 -6
  431. package/dist-server/server/modules/orchestration/a2a/types.js.map +0 -1
  432. package/dist-server/server/modules/orchestration/a2a/validator.js +0 -101
  433. package/dist-server/server/modules/orchestration/a2a/validator.js.map +0 -1
  434. package/dist-server/server/modules/orchestration/index.js +0 -27
  435. package/dist-server/server/modules/orchestration/index.js.map +0 -1
  436. package/dist-server/server/modules/orchestration/preview/port-watcher.js +0 -90
  437. package/dist-server/server/modules/orchestration/preview/port-watcher.js.map +0 -1
  438. package/dist-server/server/modules/orchestration/preview/preview-proxy.js +0 -58
  439. package/dist-server/server/modules/orchestration/preview/preview-proxy.js.map +0 -1
  440. package/dist-server/server/modules/orchestration/preview/types.js +0 -2
  441. package/dist-server/server/modules/orchestration/preview/types.js.map +0 -1
  442. package/dist-server/server/modules/orchestration/security/permission-policy.js.map +0 -1
  443. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js +0 -34
  444. package/dist-server/server/modules/orchestration/tasks/orchestration-task-store.js.map +0 -1
  445. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js +0 -70
  446. package/dist-server/server/modules/orchestration/tasks/orchestration-task.routes.js.map +0 -1
  447. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js +0 -181
  448. package/dist-server/server/modules/orchestration/tasks/orchestration-task.service.js.map +0 -1
  449. package/dist-server/server/modules/orchestration/tasks/orchestration-task.types.js +0 -2
  450. package/dist-server/server/modules/orchestration/tasks/orchestration-task.types.js.map +0 -1
  451. package/dist-server/server/modules/orchestration/tasks/task-run-graph.js +0 -100
  452. package/dist-server/server/modules/orchestration/tasks/task-run-graph.js.map +0 -1
  453. package/dist-server/server/modules/orchestration/workflows/approval-queue.js +0 -72
  454. package/dist-server/server/modules/orchestration/workflows/approval-queue.js.map +0 -1
  455. package/dist-server/server/modules/orchestration/workflows/built-in-workflows.js +0 -126
  456. package/dist-server/server/modules/orchestration/workflows/built-in-workflows.js.map +0 -1
  457. package/dist-server/server/modules/orchestration/workflows/context-packet.js +0 -89
  458. package/dist-server/server/modules/orchestration/workflows/context-packet.js.map +0 -1
  459. package/dist-server/server/modules/orchestration/workflows/handoff-artifact.js +0 -123
  460. package/dist-server/server/modules/orchestration/workflows/handoff-artifact.js.map +0 -1
  461. package/dist-server/server/modules/orchestration/workflows/workflow-fallback-policy.js +0 -114
  462. package/dist-server/server/modules/orchestration/workflows/workflow-fallback-policy.js.map +0 -1
  463. package/dist-server/server/modules/orchestration/workflows/workflow-replay.js +0 -177
  464. package/dist-server/server/modules/orchestration/workflows/workflow-replay.js.map +0 -1
  465. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js +0 -1718
  466. package/dist-server/server/modules/orchestration/workflows/workflow-runner.js.map +0 -1
  467. package/dist-server/server/modules/orchestration/workflows/workflow-store.js +0 -76
  468. package/dist-server/server/modules/orchestration/workflows/workflow-store.js.map +0 -1
  469. package/dist-server/server/modules/orchestration/workflows/workflow-templates.js +0 -242
  470. package/dist-server/server/modules/orchestration/workflows/workflow-templates.js.map +0 -1
  471. package/dist-server/server/modules/orchestration/workflows/workflow-trace.js +0 -388
  472. package/dist-server/server/modules/orchestration/workflows/workflow-trace.js.map +0 -1
  473. package/dist-server/server/modules/orchestration/workflows/workflow.routes.js +0 -508
  474. package/dist-server/server/modules/orchestration/workflows/workflow.routes.js.map +0 -1
  475. package/dist-server/server/modules/orchestration/workflows/workflow.types.js +0 -2
  476. package/dist-server/server/modules/orchestration/workflows/workflow.types.js.map +0 -1
  477. package/dist-server/server/modules/orchestration/workflows/workspace-target.js +0 -100
  478. package/dist-server/server/modules/orchestration/workflows/workspace-target.js.map +0 -1
  479. package/dist-server/server/modules/orchestration/workspace/docker-workspace.js +0 -123
  480. package/dist-server/server/modules/orchestration/workspace/docker-workspace.js.map +0 -1
  481. package/dist-server/server/modules/orchestration/workspace/path-safety.js +0 -48
  482. package/dist-server/server/modules/orchestration/workspace/path-safety.js.map +0 -1
  483. package/dist-server/server/modules/orchestration/workspace/types.js +0 -11
  484. package/dist-server/server/modules/orchestration/workspace/types.js.map +0 -1
  485. package/dist-server/server/modules/orchestration/workspace/workspace-manager.js +0 -84
  486. package/dist-server/server/modules/orchestration/workspace/workspace-manager.js.map +0 -1
  487. package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js +0 -97
  488. package/dist-server/server/modules/orchestration/workspace/worktree-workspace.js.map +0 -1
  489. package/server/modules/orchestration/a2a/adapter-registry.ts +0 -108
  490. package/server/modules/orchestration/a2a/adapters/abstract-a2a.adapter.ts +0 -63
  491. package/server/modules/orchestration/a2a/adapters/claude-code.adapter.ts +0 -286
  492. package/server/modules/orchestration/a2a/adapters/codex.adapter.ts +0 -244
  493. package/server/modules/orchestration/a2a/adapters/cursor.adapter.ts +0 -249
  494. package/server/modules/orchestration/a2a/adapters/gemini.adapter.ts +0 -248
  495. package/server/modules/orchestration/a2a/adapters/json-event.adapter.test.ts +0 -60
  496. package/server/modules/orchestration/a2a/adapters/json-event.adapter.ts +0 -101
  497. package/server/modules/orchestration/a2a/adapters/opencode.adapter.ts +0 -248
  498. package/server/modules/orchestration/a2a/adapters/qwen.adapter.ts +0 -248
  499. package/server/modules/orchestration/a2a/agent-card.ts +0 -55
  500. package/server/modules/orchestration/a2a/auth.middleware.ts +0 -29
  501. package/server/modules/orchestration/a2a/bus.ts +0 -46
  502. package/server/modules/orchestration/a2a/routes.ts +0 -586
  503. package/server/modules/orchestration/a2a/task-dispatcher.ts +0 -345
  504. package/server/modules/orchestration/a2a/task-store.ts +0 -178
  505. package/server/modules/orchestration/a2a/types.ts +0 -126
  506. package/server/modules/orchestration/a2a/validator.ts +0 -113
  507. package/server/modules/orchestration/index.ts +0 -99
  508. package/server/modules/orchestration/preview/port-watcher.ts +0 -112
  509. package/server/modules/orchestration/preview/preview-proxy.ts +0 -60
  510. package/server/modules/orchestration/preview/types.ts +0 -19
  511. package/server/modules/orchestration/tasks/orchestration-task-store.ts +0 -41
  512. package/server/modules/orchestration/tasks/orchestration-task.routes.ts +0 -81
  513. package/server/modules/orchestration/tasks/orchestration-task.service.ts +0 -201
  514. package/server/modules/orchestration/tasks/orchestration-task.types.ts +0 -40
  515. package/server/modules/orchestration/tasks/task-run-graph.ts +0 -155
  516. package/server/modules/orchestration/workflows/approval-queue.ts +0 -106
  517. package/server/modules/orchestration/workflows/built-in-workflows.ts +0 -127
  518. package/server/modules/orchestration/workflows/context-packet.ts +0 -186
  519. package/server/modules/orchestration/workflows/handoff-artifact.ts +0 -175
  520. package/server/modules/orchestration/workflows/workflow-fallback-policy.ts +0 -161
  521. package/server/modules/orchestration/workflows/workflow-replay.ts +0 -254
  522. package/server/modules/orchestration/workflows/workflow-runner.ts +0 -2062
  523. package/server/modules/orchestration/workflows/workflow-store.ts +0 -97
  524. package/server/modules/orchestration/workflows/workflow-templates.ts +0 -272
  525. package/server/modules/orchestration/workflows/workflow-trace.ts +0 -424
  526. package/server/modules/orchestration/workflows/workflow.routes.ts +0 -586
  527. package/server/modules/orchestration/workflows/workflow.types.ts +0 -111
  528. package/server/modules/orchestration/workflows/workspace-target.ts +0 -122
  529. package/server/modules/orchestration/workspace/docker-workspace.ts +0 -136
  530. package/server/modules/orchestration/workspace/path-safety.ts +0 -55
  531. package/server/modules/orchestration/workspace/types.ts +0 -52
  532. package/server/modules/orchestration/workspace/workspace-manager.ts +0 -102
  533. package/server/modules/orchestration/workspace/worktree-workspace.ts +0 -126
  534. /package/dist-server/server/modules/{orchestration/security → security}/permission-policy.js +0 -0
@@ -1,351 +1,351 @@
1
- #!/usr/bin/env node
2
- import fs from 'node:fs';
3
- import https from 'node:https';
4
- import { fileURLToPath } from 'node:url';
5
-
6
- const OWNER = 'alicomert';
7
- const REPO = 'pixcode';
8
- const TRACKING_FILE = 'RELEASE_TRACKING_v1.38.md';
9
-
10
- const issues = [
11
- {
12
- key: 'remote',
13
- placeholder: 'GH-TBD-remote',
14
- title: 'feat(remote): add first-run local/remote connection mode and API URL pairing',
15
- body: [
16
- '## Problem',
17
- 'Pixcode can run on a server, desktop, or local machine, but first-run setup still assumes the current machine is the primary runtime. Users need to choose whether they are using this computer directly or connecting to a remote Pixcode server.',
18
- '',
19
- '## Goal',
20
- 'Add a first-run connection mode before normal setup and update checks: local computer mode or remote server mode. Remote mode should accept an API URL, handle login/register/pairing, show connection health, and keep the app usable when the controlled server continues running.',
21
- '',
22
- '## Requirements',
23
- '- Ask local vs remote before normal onboarding and before startup update flow.',
24
- '- Remote mode accepts server URL and API key/session credentials.',
25
- '- If login/register is needed, guide the user inside the app instead of failing silently.',
26
- '- Show a full-width connection warning when the remote server is unreachable or degraded.',
27
- '- Persist the selected mode and allow changing it from Settings.',
28
- '- Keep update checks and release notes aware of the selected runtime.',
29
- '',
30
- '## Acceptance Criteria',
31
- '- New users can choose remote mode and connect to an existing Pixcode server.',
32
- '- A disconnected remote server shows a clear banner and retry action.',
33
- '- Local mode behavior remains unchanged.',
34
- '- Smoke coverage verifies local/remote mode persistence and health banner behavior.',
35
- ].join('\n'),
36
- },
37
- {
38
- key: 'api',
39
- placeholder: 'GH-TBD-api',
40
- title: 'feat(api): expose complete Pixcode control surface through API keys',
41
- body: [
42
- '## Problem',
43
- 'Pixcode has many internal endpoints, but users need a clean public API model so every major feature can be automated from external clients, scripts, Telegram, or another UI.',
44
- '',
45
- '## Goal',
46
- 'Create a stable API key and base URL system that exposes projects, sessions, providers, orchestration, tasks, files, source-control state, notifications, and settings through documented endpoints.',
47
- '',
48
- '## Requirements',
49
- '- Define public API groups for auth, projects, sessions, provider runs, orchestration, Taskmaster tasks, notifications, files, git/source-control, settings, and update status.',
50
- '- Keep px_ API key prefix and support scoped/revocable keys.',
51
- '- Add OpenAPI coverage for the public routes.',
52
- '- Ensure Telegram and future remote clients use the same API/service layer instead of separate logic.',
53
- '- Add rate limits and audit records for sensitive actions.',
54
- '',
55
- '## Acceptance Criteria',
56
- '- A user can operate core Pixcode flows using API URL + API key without the web UI.',
57
- '- OpenAPI docs include authenticated examples.',
58
- '- Invalid/missing scopes produce clear 401/403 responses.',
59
- '- Smoke coverage validates at least one full API-key flow: create/list project -> run provider prompt -> fetch result.',
60
- ].join('\n'),
61
- },
62
- {
63
- key: 'telegram',
64
- placeholder: 'GH-TBD-telegram',
65
- title: 'feat(telegram): reach web UI feature parity for remote control',
66
- body: [
67
- '## Problem',
68
- 'Telegram control exists, but the long-term product goal is to manage Pixcode without opening the web UI. Telegram should not be just completion notifications or simple forwarding.',
69
- '',
70
- '## Goal',
71
- 'Make Telegram a first-class Pixcode control client for sessions, projects, providers, models, orchestration, Taskmaster, settings, notifications, and progress/output preferences.',
72
- '',
73
- '## Requirements',
74
- '- Add structured menus for active sessions, new chat, existing project, provider/model selection, orchestration workflows, Taskmaster tasks, and settings.',
75
- '- Let users choose notification granularity: final result only, step summaries, all agent outputs, errors only.',
76
- '- Allow selecting active worker slot and project from Telegram.',
77
- '- Support task creation/start/stop/status from Telegram.',
78
- '- Keep inline menus edited in place to avoid chat spam.',
79
- '- Respect user language preference across every menu.',
80
- '',
81
- '## Acceptance Criteria',
82
- '- A linked Telegram user can start an orchestration run and monitor it without the web UI.',
83
- '- A linked Telegram user can create and run a Taskmaster task.',
84
- '- Telegram can switch active project/session/provider/model.',
85
- '- Smoke coverage verifies command routing, callback routing, language, and task/run status messages.',
86
- ].join('\n'),
87
- },
88
- {
89
- key: 'taskmaster',
90
- placeholder: 'GH-TBD-taskmaster',
91
- title: 'feat(tasks): make Taskmaster the shared execution queue for CLI agents',
92
- body: [
93
- '## Problem',
94
- 'Taskmaster setup and Telegram execution foundations exist, but tasks are not yet the shared queue that coordinates all CLI agents and long-running project work.',
95
- '',
96
- '## Goal',
97
- 'Make Taskmaster a first-class execution backbone: create tasks, assign provider/model, run until completion, update progress, retry/fallback on errors, and expose the same state in UI, API, and Telegram.',
98
- '',
99
- '## Requirements',
100
- '- Add task create/edit/list/detail flows in the web UI.',
101
- '- Bind tasks to project path, provider, model, permission mode, fallback provider, and worker slot.',
102
- '- Persist step summaries, final output, failure reasons, and changed files per task.',
103
- '- Support retry, pause/cancel, fallback, and continue-from-last-output.',
104
- '- Emit notifications for task started, waiting, completed, failed, fallback used.',
105
- '- Make Telegram and API operate the same task model.',
106
- '',
107
- '## Acceptance Criteria',
108
- '- A task can be created in UI/API/Telegram and run by a selected CLI provider.',
109
- '- Failed provider execution can route to configured fallback.',
110
- '- Task detail shows progress, outputs, changed files, and final summary.',
111
- '- Smoke coverage validates create -> dispatch -> progress -> completion/failure state.',
112
- ].join('\n'),
113
- },
114
- {
115
- key: 'plugins',
116
- placeholder: 'GH-TBD-plugins',
117
- title: 'feat(providers): expose CLI plugin and external tool configuration',
118
- body: [
119
- '## Problem',
120
- 'Claude, Codex, OpenCode, Gemini, Qwen, and Cursor have their own plugin/MCP/tool configuration surfaces, but Pixcode does not yet make those external configurations visible and manageable in one place.',
121
- '',
122
- '## Goal',
123
- 'Add provider plugin/tool configuration management so users can inspect, enable, disable, update, and validate provider-specific plugins/MCP/tool integrations without leaving Pixcode.',
124
- '',
125
- '## Requirements',
126
- '- Detect provider-specific plugin/tool config locations where supported.',
127
- '- Show installed/available plugin state per provider.',
128
- '- Allow safe enable/disable/update with preview and backup.',
129
- '- Add validation and repair hints for broken plugin configs.',
130
- '- Avoid IDE-specific integrations unless explicitly requested.',
131
- '- Keep secrets redacted.',
132
- '',
133
- '## Acceptance Criteria',
134
- '- Settings shows provider plugin/tool state without slow repeated checks.',
135
- '- Users can refresh plugin state manually.',
136
- '- Broken config produces actionable diagnostics.',
137
- '- Smoke coverage validates config discovery/parsing for sample provider configs.',
138
- ].join('\n'),
139
- },
140
- {
141
- key: 'desktop',
142
- placeholder: 'GH-TBD-desktop',
143
- title: 'build(desktop): harden installer release, signing, and update recovery',
144
- body: [
145
- '## Problem',
146
- 'Desktop installers build, but macOS unsigned-app warnings, release artifact confidence, and update recovery need a dedicated release-hardening pass.',
147
- '',
148
- '## Goal',
149
- 'Improve desktop release quality for .exe, .dmg, and AppImage users while keeping npm/server update recovery reliable.',
150
- '',
151
- '## Requirements',
152
- '- Document and/or implement macOS signing/notarization path.',
153
- '- Surface unsigned macOS warning guidance in README/release docs until signing is complete.',
154
- '- Verify installer artifacts against the app version and bundled Pixcode dependency.',
155
- '- Keep startup update/recovery visible to users.',
156
- '- Add release checklist coverage for desktop artifacts.',
157
- '',
158
- '## Acceptance Criteria',
159
- '- Desktop artifact versions match package version.',
160
- '- Release notes clearly explain macOS unsigned behavior until signing is complete.',
161
- '- Installer build workflow status is tracked as part of release readiness.',
162
- '- Smoke or script coverage verifies desktop package version alignment.',
163
- ].join('\n'),
164
- },
165
- {
166
- key: 'observability',
167
- placeholder: 'GH-TBD-observability',
168
- title: 'feat(observability): add run diagnostics and provider health visibility',
169
- body: [
170
- '## Problem',
171
- 'When a provider, workflow, Telegram action, or task stalls, users need a clear reason instead of guessing from blank screens or network panels.',
172
- '',
173
- '## Goal',
174
- 'Add a diagnostics surface that explains provider availability, run state, queued work, recent errors, CLI auth/install status, WebSocket health, and notification delivery.',
175
- '',
176
- '## Requirements',
177
- '- Add a diagnostics page/panel for provider health, active runs, WebSocket state, notification channel status, and recent errors.',
178
- '- Add lightweight server-side event/error records for provider runs and workflow tasks.',
179
- '- Show stalled/waiting/error states in user language.',
180
- '- Add manual refresh instead of expensive repeated checks.',
181
- '- Include copyable diagnostics bundle for support/debugging.',
182
- '',
183
- '## Acceptance Criteria',
184
- '- Users can see why a CLI is unavailable or why a run is waiting.',
185
- '- Settings no longer blocks on repeated provider checks.',
186
- '- Diagnostics can be copied without leaking secrets.',
187
- '- Smoke coverage validates health-state aggregation and secret redaction.',
188
- ].join('\n'),
189
- },
190
- ];
191
-
192
- function buildPayload(issueNumbers = new Map()) {
193
- const scope = issues
194
- .map(issue => {
195
- const reference = issueNumbers.has(issue.key) ? `#${issueNumbers.get(issue.key)}` : issue.placeholder;
196
- return `- ${reference} ${issue.title}`;
197
- })
198
- .join('\n');
199
-
200
- const epic = {
201
- key: 'epic',
202
- placeholder: 'GH-TBD-epic',
203
- title: 'epic(product): track v1.38 remote API and task operations',
204
- body: [
205
- '## Goal',
206
- 'Track the v1.38 remote-control, API, task, provider, desktop, and diagnostics package as a GitHub-native work plan. v1.37 shipped the orchestration reliability foundation; v1.38 should make Pixcode easier to operate remotely, automate externally, and diagnose confidently.',
207
- '',
208
- '## Scope',
209
- scope,
210
- '',
211
- '## Release Strategy',
212
- '1. Stabilize remote/local first-run mode and public API foundation.',
213
- '2. Build Telegram and Taskmaster on the same API/task service model.',
214
- '3. Add provider plugin/tool configuration visibility and diagnostics.',
215
- '4. Harden desktop installer/signing/update recovery paths.',
216
- '5. Ship release notes with issue-backed progress metadata.',
217
- '',
218
- '## Acceptance Criteria',
219
- '- Each child issue has implementation and smoke coverage before closure.',
220
- '- The v1.38 release notes reference completed issue numbers.',
221
- '- Update UI can show issue-backed progress for v1.38.',
222
- '- API/Telegram/Taskmaster work share service contracts instead of divergent behavior.',
223
- ].join('\n'),
224
- };
225
-
226
- return {
227
- version: '1.38',
228
- owner: OWNER,
229
- repo: REPO,
230
- issues,
231
- epic,
232
- trackingReplacements: [
233
- ...issues.map(issue => ({
234
- placeholder: issue.placeholder,
235
- value: issueNumbers.has(issue.key) ? `#${issueNumbers.get(issue.key)}` : issue.placeholder,
236
- })),
237
- {
238
- placeholder: epic.placeholder,
239
- value: issueNumbers.has('epic') ? `#${issueNumbers.get('epic')}` : epic.placeholder,
240
- },
241
- ],
242
- };
243
- }
244
-
245
- function githubRequest(method, path, payload) {
246
- const token = process.env.GITHUB_TOKEN;
247
- if (!token) {
248
- throw new Error('GITHUB_TOKEN is required for --apply');
249
- }
250
-
251
- const data = payload ? JSON.stringify(payload) : undefined;
252
- return new Promise((resolve, reject) => {
253
- const req = https.request({
254
- hostname: 'api.github.com',
255
- path,
256
- method,
257
- headers: {
258
- Authorization: `Bearer ${token}`,
259
- Accept: 'application/vnd.github+json',
260
- 'User-Agent': 'pixcode-v138-issue-planner',
261
- 'X-GitHub-Api-Version': '2022-11-28',
262
- ...(data ? { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } : {}),
263
- },
264
- }, res => {
265
- let raw = '';
266
- res.setEncoding('utf8');
267
- res.on('data', chunk => {
268
- raw += chunk;
269
- });
270
- res.on('end', () => {
271
- if (res.statusCode >= 200 && res.statusCode < 300) {
272
- resolve(raw ? JSON.parse(raw) : null);
273
- return;
274
- }
275
- reject(new Error(`${method} ${path} -> ${res.statusCode}: ${raw}`));
276
- });
277
- });
278
- req.on('error', reject);
279
- if (data) {
280
- req.write(data);
281
- }
282
- req.end();
283
- });
284
- }
285
-
286
- async function findExistingIssue(title) {
287
- const q = encodeURIComponent(`repo:${OWNER}/${REPO} type:issue in:title "${title}"`);
288
- const result = await githubRequest('GET', `/search/issues?q=${q}&per_page=10`);
289
- return result.items?.find(item => item.title === title) || null;
290
- }
291
-
292
- async function createOrReuseIssue(issue) {
293
- const existing = await findExistingIssue(issue.title);
294
- if (existing) {
295
- return existing;
296
- }
297
- return await githubRequest('POST', `/repos/${OWNER}/${REPO}/issues`, {
298
- title: issue.title,
299
- body: issue.body,
300
- });
301
- }
302
-
303
- function writeTracking(payload) {
304
- let content = fs.readFileSync(TRACKING_FILE, 'utf8');
305
- for (const replacement of payload.trackingReplacements) {
306
- content = content.replaceAll(replacement.placeholder, replacement.value);
307
- }
308
- fs.writeFileSync(TRACKING_FILE, content);
309
- }
310
-
311
- async function main() {
312
- const args = new Set(process.argv.slice(2));
313
- const dryRun = args.has('--dry-run') || !args.has('--apply');
314
- const shouldWriteTracking = args.has('--write-tracking') || args.has('--apply');
315
-
316
- if (dryRun) {
317
- process.stdout.write(`${JSON.stringify(buildPayload(), null, 2)}\n`);
318
- return;
319
- }
320
-
321
- const numbers = new Map();
322
- for (const issue of issues) {
323
- const created = await createOrReuseIssue(issue);
324
- numbers.set(issue.key, created.number);
325
- console.log(`#${created.number} ${created.title}`);
326
- }
327
-
328
- const payloadBeforeEpic = buildPayload(numbers);
329
- const epic = await createOrReuseIssue(payloadBeforeEpic.epic);
330
- numbers.set('epic', epic.number);
331
- console.log(`#${epic.number} ${epic.title}`);
332
-
333
- const finalPayload = buildPayload(numbers);
334
- if (shouldWriteTracking) {
335
- writeTracking(finalPayload);
336
- console.log(`${TRACKING_FILE} updated`);
337
- }
338
- }
339
-
340
- const invokedPath = process.argv[1] ? fileURLToPath(import.meta.url) === process.argv[1] : false;
341
- if (invokedPath) {
342
- try {
343
- await main();
344
- } catch (error) {
345
- const message = error instanceof Error ? error.message : String(error);
346
- console.error(`Failed to create v1.38 issues: ${message}`);
347
- process.exitCode = 1;
348
- }
349
- }
350
-
351
- export { buildPayload, issues };
1
+ #!/usr/bin/env node
2
+ import fs from 'node:fs';
3
+ import https from 'node:https';
4
+ import { fileURLToPath } from 'node:url';
5
+
6
+ const OWNER = 'alicomert';
7
+ const REPO = 'pixcode';
8
+ const TRACKING_FILE = 'RELEASE_TRACKING_v1.38.md';
9
+
10
+ const issues = [
11
+ {
12
+ key: 'remote',
13
+ placeholder: 'GH-TBD-remote',
14
+ title: 'feat(remote): add first-run local/remote connection mode and API URL pairing',
15
+ body: [
16
+ '## Problem',
17
+ 'Pixcode can run on a server, desktop, or local machine, but first-run setup still assumes the current machine is the primary runtime. Users need to choose whether they are using this computer directly or connecting to a remote Pixcode server.',
18
+ '',
19
+ '## Goal',
20
+ 'Add a first-run connection mode before normal setup and update checks: local computer mode or remote server mode. Remote mode should accept an API URL, handle login/register/pairing, show connection health, and keep the app usable when the controlled server continues running.',
21
+ '',
22
+ '## Requirements',
23
+ '- Ask local vs remote before normal onboarding and before startup update flow.',
24
+ '- Remote mode accepts server URL and API key/session credentials.',
25
+ '- If login/register is needed, guide the user inside the app instead of failing silently.',
26
+ '- Show a full-width connection warning when the remote server is unreachable or degraded.',
27
+ '- Persist the selected mode and allow changing it from Settings.',
28
+ '- Keep update checks and release notes aware of the selected runtime.',
29
+ '',
30
+ '## Acceptance Criteria',
31
+ '- New users can choose remote mode and connect to an existing Pixcode server.',
32
+ '- A disconnected remote server shows a clear banner and retry action.',
33
+ '- Local mode behavior remains unchanged.',
34
+ '- Smoke coverage verifies local/remote mode persistence and health banner behavior.',
35
+ ].join('\n'),
36
+ },
37
+ {
38
+ key: 'api',
39
+ placeholder: 'GH-TBD-api',
40
+ title: 'feat(api): expose complete Pixcode control surface through API keys',
41
+ body: [
42
+ '## Problem',
43
+ 'Pixcode has many internal endpoints, but users need a clean public API model so every major feature can be automated from external clients, scripts, Telegram, or another UI.',
44
+ '',
45
+ '## Goal',
46
+ 'Create a stable API key and base URL system that exposes projects, sessions, providers, orchestration, tasks, files, source-control state, notifications, and settings through documented endpoints.',
47
+ '',
48
+ '## Requirements',
49
+ '- Define public API groups for auth, projects, sessions, provider runs, orchestration, Taskmaster tasks, notifications, files, git/source-control, settings, and update status.',
50
+ '- Keep px_ API key prefix and support scoped/revocable keys.',
51
+ '- Add OpenAPI coverage for the public routes.',
52
+ '- Ensure Telegram and future remote clients use the same API/service layer instead of separate logic.',
53
+ '- Add rate limits and audit records for sensitive actions.',
54
+ '',
55
+ '## Acceptance Criteria',
56
+ '- A user can operate core Pixcode flows using API URL + API key without the web UI.',
57
+ '- OpenAPI docs include authenticated examples.',
58
+ '- Invalid/missing scopes produce clear 401/403 responses.',
59
+ '- Smoke coverage validates at least one full API-key flow: create/list project -> run provider prompt -> fetch result.',
60
+ ].join('\n'),
61
+ },
62
+ {
63
+ key: 'telegram',
64
+ placeholder: 'GH-TBD-telegram',
65
+ title: 'feat(telegram): reach web UI feature parity for remote control',
66
+ body: [
67
+ '## Problem',
68
+ 'Telegram control exists, but the long-term product goal is to manage Pixcode without opening the web UI. Telegram should not be just completion notifications or simple forwarding.',
69
+ '',
70
+ '## Goal',
71
+ 'Make Telegram a first-class Pixcode control client for sessions, projects, providers, models, orchestration, Taskmaster, settings, notifications, and progress/output preferences.',
72
+ '',
73
+ '## Requirements',
74
+ '- Add structured menus for active sessions, new chat, existing project, provider/model selection, orchestration workflows, Taskmaster tasks, and settings.',
75
+ '- Let users choose notification granularity: final result only, step summaries, all agent outputs, errors only.',
76
+ '- Allow selecting active worker slot and project from Telegram.',
77
+ '- Support task creation/start/stop/status from Telegram.',
78
+ '- Keep inline menus edited in place to avoid chat spam.',
79
+ '- Respect user language preference across every menu.',
80
+ '',
81
+ '## Acceptance Criteria',
82
+ '- A linked Telegram user can start an orchestration run and monitor it without the web UI.',
83
+ '- A linked Telegram user can create and run a Taskmaster task.',
84
+ '- Telegram can switch active project/session/provider/model.',
85
+ '- Smoke coverage verifies command routing, callback routing, language, and task/run status messages.',
86
+ ].join('\n'),
87
+ },
88
+ {
89
+ key: 'taskmaster',
90
+ placeholder: 'GH-TBD-taskmaster',
91
+ title: 'feat(tasks): make Taskmaster the shared execution queue for CLI agents',
92
+ body: [
93
+ '## Problem',
94
+ 'Taskmaster setup and Telegram execution foundations exist, but tasks are not yet the shared queue that coordinates all CLI agents and long-running project work.',
95
+ '',
96
+ '## Goal',
97
+ 'Make Taskmaster a first-class execution backbone: create tasks, assign provider/model, run until completion, update progress, retry/fallback on errors, and expose the same state in UI, API, and Telegram.',
98
+ '',
99
+ '## Requirements',
100
+ '- Add task create/edit/list/detail flows in the web UI.',
101
+ '- Bind tasks to project path, provider, model, permission mode, fallback provider, and worker slot.',
102
+ '- Persist step summaries, final output, failure reasons, and changed files per task.',
103
+ '- Support retry, pause/cancel, fallback, and continue-from-last-output.',
104
+ '- Emit notifications for task started, waiting, completed, failed, fallback used.',
105
+ '- Make Telegram and API operate the same task model.',
106
+ '',
107
+ '## Acceptance Criteria',
108
+ '- A task can be created in UI/API/Telegram and run by a selected CLI provider.',
109
+ '- Failed provider execution can route to configured fallback.',
110
+ '- Task detail shows progress, outputs, changed files, and final summary.',
111
+ '- Smoke coverage validates create -> dispatch -> progress -> completion/failure state.',
112
+ ].join('\n'),
113
+ },
114
+ {
115
+ key: 'plugins',
116
+ placeholder: 'GH-TBD-plugins',
117
+ title: 'feat(providers): expose CLI plugin and external tool configuration',
118
+ body: [
119
+ '## Problem',
120
+ 'Claude, Codex, OpenCode, Gemini, Qwen, and Cursor have their own plugin/MCP/tool configuration surfaces, but Pixcode does not yet make those external configurations visible and manageable in one place.',
121
+ '',
122
+ '## Goal',
123
+ 'Add provider plugin/tool configuration management so users can inspect, enable, disable, update, and validate provider-specific plugins/MCP/tool integrations without leaving Pixcode.',
124
+ '',
125
+ '## Requirements',
126
+ '- Detect provider-specific plugin/tool config locations where supported.',
127
+ '- Show installed/available plugin state per provider.',
128
+ '- Allow safe enable/disable/update with preview and backup.',
129
+ '- Add validation and repair hints for broken plugin configs.',
130
+ '- Avoid IDE-specific integrations unless explicitly requested.',
131
+ '- Keep secrets redacted.',
132
+ '',
133
+ '## Acceptance Criteria',
134
+ '- Settings shows provider plugin/tool state without slow repeated checks.',
135
+ '- Users can refresh plugin state manually.',
136
+ '- Broken config produces actionable diagnostics.',
137
+ '- Smoke coverage validates config discovery/parsing for sample provider configs.',
138
+ ].join('\n'),
139
+ },
140
+ {
141
+ key: 'desktop',
142
+ placeholder: 'GH-TBD-desktop',
143
+ title: 'build(desktop): harden installer release, signing, and update recovery',
144
+ body: [
145
+ '## Problem',
146
+ 'Desktop installers build, but macOS unsigned-app warnings, release artifact confidence, and update recovery need a dedicated release-hardening pass.',
147
+ '',
148
+ '## Goal',
149
+ 'Improve desktop release quality for .exe, .dmg, and AppImage users while keeping npm/server update recovery reliable.',
150
+ '',
151
+ '## Requirements',
152
+ '- Document and/or implement macOS signing/notarization path.',
153
+ '- Surface unsigned macOS warning guidance in README/release docs until signing is complete.',
154
+ '- Verify installer artifacts against the app version and bundled Pixcode dependency.',
155
+ '- Keep startup update/recovery visible to users.',
156
+ '- Add release checklist coverage for desktop artifacts.',
157
+ '',
158
+ '## Acceptance Criteria',
159
+ '- Desktop artifact versions match package version.',
160
+ '- Release notes clearly explain macOS unsigned behavior until signing is complete.',
161
+ '- Installer build workflow status is tracked as part of release readiness.',
162
+ '- Smoke or script coverage verifies desktop package version alignment.',
163
+ ].join('\n'),
164
+ },
165
+ {
166
+ key: 'observability',
167
+ placeholder: 'GH-TBD-observability',
168
+ title: 'feat(observability): add run diagnostics and provider health visibility',
169
+ body: [
170
+ '## Problem',
171
+ 'When a provider, workflow, Telegram action, or task stalls, users need a clear reason instead of guessing from blank screens or network panels.',
172
+ '',
173
+ '## Goal',
174
+ 'Add a diagnostics surface that explains provider availability, run state, queued work, recent errors, CLI auth/install status, WebSocket health, and notification delivery.',
175
+ '',
176
+ '## Requirements',
177
+ '- Add a diagnostics page/panel for provider health, active runs, WebSocket state, notification channel status, and recent errors.',
178
+ '- Add lightweight server-side event/error records for provider runs and workflow tasks.',
179
+ '- Show stalled/waiting/error states in user language.',
180
+ '- Add manual refresh instead of expensive repeated checks.',
181
+ '- Include copyable diagnostics bundle for support/debugging.',
182
+ '',
183
+ '## Acceptance Criteria',
184
+ '- Users can see why a CLI is unavailable or why a run is waiting.',
185
+ '- Settings no longer blocks on repeated provider checks.',
186
+ '- Diagnostics can be copied without leaking secrets.',
187
+ '- Smoke coverage validates health-state aggregation and secret redaction.',
188
+ ].join('\n'),
189
+ },
190
+ ];
191
+
192
+ function buildPayload(issueNumbers = new Map()) {
193
+ const scope = issues
194
+ .map(issue => {
195
+ const reference = issueNumbers.has(issue.key) ? `#${issueNumbers.get(issue.key)}` : issue.placeholder;
196
+ return `- ${reference} ${issue.title}`;
197
+ })
198
+ .join('\n');
199
+
200
+ const epic = {
201
+ key: 'epic',
202
+ placeholder: 'GH-TBD-epic',
203
+ title: 'epic(product): track v1.38 remote API and task operations',
204
+ body: [
205
+ '## Goal',
206
+ 'Track the v1.38 remote-control, API, task, provider, desktop, and diagnostics package as a GitHub-native work plan. v1.37 shipped the orchestration reliability foundation; v1.38 should make Pixcode easier to operate remotely, automate externally, and diagnose confidently.',
207
+ '',
208
+ '## Scope',
209
+ scope,
210
+ '',
211
+ '## Release Strategy',
212
+ '1. Stabilize remote/local first-run mode and public API foundation.',
213
+ '2. Build Telegram and Taskmaster on the same API/task service model.',
214
+ '3. Add provider plugin/tool configuration visibility and diagnostics.',
215
+ '4. Harden desktop installer/signing/update recovery paths.',
216
+ '5. Ship release notes with issue-backed progress metadata.',
217
+ '',
218
+ '## Acceptance Criteria',
219
+ '- Each child issue has implementation and smoke coverage before closure.',
220
+ '- The v1.38 release notes reference completed issue numbers.',
221
+ '- Update UI can show issue-backed progress for v1.38.',
222
+ '- API/Telegram/Taskmaster work share service contracts instead of divergent behavior.',
223
+ ].join('\n'),
224
+ };
225
+
226
+ return {
227
+ version: '1.38',
228
+ owner: OWNER,
229
+ repo: REPO,
230
+ issues,
231
+ epic,
232
+ trackingReplacements: [
233
+ ...issues.map(issue => ({
234
+ placeholder: issue.placeholder,
235
+ value: issueNumbers.has(issue.key) ? `#${issueNumbers.get(issue.key)}` : issue.placeholder,
236
+ })),
237
+ {
238
+ placeholder: epic.placeholder,
239
+ value: issueNumbers.has('epic') ? `#${issueNumbers.get('epic')}` : epic.placeholder,
240
+ },
241
+ ],
242
+ };
243
+ }
244
+
245
+ function githubRequest(method, path, payload) {
246
+ const token = process.env.GITHUB_TOKEN;
247
+ if (!token) {
248
+ throw new Error('GITHUB_TOKEN is required for --apply');
249
+ }
250
+
251
+ const data = payload ? JSON.stringify(payload) : undefined;
252
+ return new Promise((resolve, reject) => {
253
+ const req = https.request({
254
+ hostname: 'api.github.com',
255
+ path,
256
+ method,
257
+ headers: {
258
+ Authorization: `Bearer ${token}`,
259
+ Accept: 'application/vnd.github+json',
260
+ 'User-Agent': 'pixcode-v138-issue-planner',
261
+ 'X-GitHub-Api-Version': '2022-11-28',
262
+ ...(data ? { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) } : {}),
263
+ },
264
+ }, res => {
265
+ let raw = '';
266
+ res.setEncoding('utf8');
267
+ res.on('data', chunk => {
268
+ raw += chunk;
269
+ });
270
+ res.on('end', () => {
271
+ if (res.statusCode >= 200 && res.statusCode < 300) {
272
+ resolve(raw ? JSON.parse(raw) : null);
273
+ return;
274
+ }
275
+ reject(new Error(`${method} ${path} -> ${res.statusCode}: ${raw}`));
276
+ });
277
+ });
278
+ req.on('error', reject);
279
+ if (data) {
280
+ req.write(data);
281
+ }
282
+ req.end();
283
+ });
284
+ }
285
+
286
+ async function findExistingIssue(title) {
287
+ const q = encodeURIComponent(`repo:${OWNER}/${REPO} type:issue in:title "${title}"`);
288
+ const result = await githubRequest('GET', `/search/issues?q=${q}&per_page=10`);
289
+ return result.items?.find(item => item.title === title) || null;
290
+ }
291
+
292
+ async function createOrReuseIssue(issue) {
293
+ const existing = await findExistingIssue(issue.title);
294
+ if (existing) {
295
+ return existing;
296
+ }
297
+ return await githubRequest('POST', `/repos/${OWNER}/${REPO}/issues`, {
298
+ title: issue.title,
299
+ body: issue.body,
300
+ });
301
+ }
302
+
303
+ function writeTracking(payload) {
304
+ let content = fs.readFileSync(TRACKING_FILE, 'utf8');
305
+ for (const replacement of payload.trackingReplacements) {
306
+ content = content.replaceAll(replacement.placeholder, replacement.value);
307
+ }
308
+ fs.writeFileSync(TRACKING_FILE, content);
309
+ }
310
+
311
+ async function main() {
312
+ const args = new Set(process.argv.slice(2));
313
+ const dryRun = args.has('--dry-run') || !args.has('--apply');
314
+ const shouldWriteTracking = args.has('--write-tracking') || args.has('--apply');
315
+
316
+ if (dryRun) {
317
+ process.stdout.write(`${JSON.stringify(buildPayload(), null, 2)}\n`);
318
+ return;
319
+ }
320
+
321
+ const numbers = new Map();
322
+ for (const issue of issues) {
323
+ const created = await createOrReuseIssue(issue);
324
+ numbers.set(issue.key, created.number);
325
+ console.log(`#${created.number} ${created.title}`);
326
+ }
327
+
328
+ const payloadBeforeEpic = buildPayload(numbers);
329
+ const epic = await createOrReuseIssue(payloadBeforeEpic.epic);
330
+ numbers.set('epic', epic.number);
331
+ console.log(`#${epic.number} ${epic.title}`);
332
+
333
+ const finalPayload = buildPayload(numbers);
334
+ if (shouldWriteTracking) {
335
+ writeTracking(finalPayload);
336
+ console.log(`${TRACKING_FILE} updated`);
337
+ }
338
+ }
339
+
340
+ const invokedPath = process.argv[1] ? fileURLToPath(import.meta.url) === process.argv[1] : false;
341
+ if (invokedPath) {
342
+ try {
343
+ await main();
344
+ } catch (error) {
345
+ const message = error instanceof Error ? error.message : String(error);
346
+ console.error(`Failed to create v1.38 issues: ${message}`);
347
+ process.exitCode = 1;
348
+ }
349
+ }
350
+
351
+ export { buildPayload, issues };