@pixelbyte-software/pixcode 1.50.0 → 1.50.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.html CHANGED
@@ -35,7 +35,7 @@
35
35
 
36
36
  <!-- Prevent zoom on iOS -->
37
37
  <meta name="format-detection" content="telephone=no" />
38
- <script type="module" crossorigin src="/assets/index-81sOpj25.js"></script>
38
+ <script type="module" crossorigin src="/assets/index-cXJ8K8Bi.js"></script>
39
39
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-DB6V5Fl1.js">
40
40
  <link rel="modulepreload" crossorigin href="/assets/vendor-codemirror-CIYNS698.js">
41
41
  <link rel="modulepreload" crossorigin href="/assets/vendor-xterm-C7tpxJl7.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelbyte-software/pixcode",
3
- "version": "1.50.0",
3
+ "version": "1.50.2",
4
4
  "description": "Self-hosted AI coding agent control room for Claude Code, Cursor CLI, OpenAI Codex, Gemini CLI, Qwen Code, and OpenCode with chat, files, shell, Git, orchestration, API keys, Telegram, MCP, plugins, themes, and desktop/server deployment.",
5
5
  "type": "module",
6
6
  "main": "dist-server/server/index.js",
@@ -132,6 +132,21 @@ assert.match(
132
132
  /permissionOverrideRef/,
133
133
  'Shell websocket init should read launch-scoped permission overrides.',
134
134
  );
135
+ assert.match(
136
+ shellConnection,
137
+ /normalizeStartupInput\(input: string, provider: LLMProvider\)/,
138
+ 'Startup input normalization should be provider-aware.',
139
+ );
140
+ assert.match(
141
+ shellConnection,
142
+ /provider === 'codex' \? '\\n' : '\\r'/,
143
+ 'Codex startup input should submit with LF because CR can leave /init typed but unsubmitted in Codex TUI.',
144
+ );
145
+ assert.doesNotMatch(
146
+ workbench,
147
+ /hermesCliLaunch\.startupInput \? `\$\{hermesCliLaunch\.startupInput\}\\r` : null/,
148
+ 'Workbench should not pre-append CR before provider-aware startup input normalization.',
149
+ );
135
150
  assert.match(
136
151
  shellView,
137
152
  /permissionOverride/,
@@ -63,11 +63,16 @@ assert.match(workbench, /WORKBENCH_CLI_STATE_STORAGE_KEY/, 'CLI terminal should
63
63
  assert.match(workbench, /function WorkbenchBottomTerminal/, 'Terminal activity should render as a bottom plain-shell panel.');
64
64
  assert.match(workbench, /BOTTOM_TERMINAL_MIN_HEIGHT/, 'Bottom terminal should support height resizing.');
65
65
  assert.match(workbench, /isBottomTerminalMinimized/, 'Bottom terminal should support minimizing without closing.');
66
+ assert.match(workbench, /bottomTerminalProject/, 'Bottom terminal should stay bound to the project it was opened for.');
67
+ assert.match(workbench, /setBottomTerminalProject/, 'Opening a bottom terminal should capture its project instead of following workspace selection changes.');
68
+ assert.match(workbench, /terminalProject = bottomTerminalProject \?\? selectedProject/, 'Workbench should render bottom terminals against their captured project binding.');
66
69
  assert.match(workbench, /isPlainShell/, 'Bottom terminal should open the selected project folder without starting the selected AI CLI.');
67
70
  assert.doesNotMatch(workbench, /HERMES_AGENT_START_COMMAND/, 'Hermes Agent should not launch from the bottom terminal through a server-side sentinel.');
68
71
  assert.doesNotMatch(workbench, /HermesApiChatPanel|HermesTerminalTranscript/, 'Hermes Agent should use the real PTY terminal UI, not a custom REST chat transcript.');
69
72
  assert.doesNotMatch(workbench, /REST POST \/|transport=|response=|gateway=http/, 'Hermes terminal UI must not expose REST debug internals to the user.');
70
- assert.match(workbench, /command="hermes"/, 'Hermes Agent bottom panel should launch the actual `hermes` CLI in a PTY.');
73
+ assert.match(workbench, /HERMES_DEFAULT_COMMAND = 'hermes --yolo'/, 'Hermes Agent bottom panel should launch the actual `hermes` CLI in a bypass-enabled PTY.');
74
+ assert.match(workbench, /HERMES_HISTORY_COMMAND = 'hermes sessions'/, 'Hermes terminal should expose the native Hermes sessions/history command.');
75
+ assert.match(workbench, /onOpenHistory=\{openHermesHistory\}/, 'Hermes terminal header should wire its history button to the native Hermes sessions command.');
71
76
  assert.match(workbench, /Pixcode MCP Live/, 'Hermes terminal should show a user-facing Pixcode MCP live badge.');
72
77
  assert.doesNotMatch(workbench, /ml-auto border-blue-500\/40 bg-blue-500\/10/, 'Hermes REST panel must not use right-aligned chat bubbles.');
73
78
  assert.match(workbench, /terminal-launches\/stream/, 'Hermes CLI launch requests should arrive through an EventSource stream.');
@@ -88,7 +93,7 @@ assert.doesNotMatch(workbench, /suspendAutoConnect/, 'Right CLI provider starts
88
93
  assert.match(serverIndex, /\/api\/shell\/sessions\/terminate/, 'Backend should expose an authenticated endpoint to terminate cached provider PTYs immediately.');
89
94
  assert.match(serverIndex, /isPlainShell && !initialCommand/, 'Backend should spawn an interactive plain shell when no terminal command is provided.');
90
95
  assert.doesNotMatch(serverIndex, /pixcode:hermes:start/, 'Backend should not need a Hermes terminal sentinel for the workbench Hermes panel.');
91
- assert.doesNotMatch(serverIndex, /hermesCommand/, 'Provider shell starts should not reference the removed Hermes sentinel variable.');
96
+ assert.match(serverIndex, /buildHermesCliCommand/, 'Backend should configure Pixcode MCP before launching the resolved Hermes command.');
92
97
  assert.match(serverIndex, /configure-pixcode-mcp\.mjs/, 'Hermes PTY launches should configure Pixcode MCP before starting the CLI.');
93
98
  assert.match(serverIndex, /resolveHermesMcpBaseUrl/, 'Hermes MCP should use the local Pixcode API base URL from the host process.');
94
99
  assert.doesNotMatch(hermesInstallJobs, /iex \(irm https:\/\/raw\.githubusercontent\.com\/NousResearch\/hermes-agent\/main\/scripts\/install\.ps1\)/, 'Windows Hermes install should avoid the old inline iex pattern.');
@@ -282,6 +282,12 @@ for (const token of ['BOTTOM_TERMINAL_MIN_HEIGHT', 'isBottomTerminalMinimized',
282
282
  assert.match(workbench, new RegExp(token), `Workbench should include ${token}.`);
283
283
  }
284
284
 
285
+ assert.match(
286
+ workbench,
287
+ /bottomTerminalProject/,
288
+ 'Bottom terminal should keep its original project while workspace tabs change.',
289
+ );
290
+
285
291
  assert.match(
286
292
  workbench,
287
293
  /isPlainShell/,
@@ -294,10 +300,22 @@ assert.doesNotMatch(
294
300
  'Hermes Agent should not launch through the bottom terminal with a server-side command sentinel.',
295
301
  );
296
302
 
297
- assert.match(
303
+ assert.doesNotMatch(
298
304
  workbench,
299
305
  /HermesApiChatPanel/,
300
- 'Hermes Agent should use the REST chat panel in the bottom area.',
306
+ 'Hermes Agent should use the real PTY terminal UI instead of the removed REST chat panel.',
307
+ );
308
+
309
+ assert.match(
310
+ workbench,
311
+ /HERMES_DEFAULT_COMMAND = 'hermes --yolo'/,
312
+ 'Hermes Agent should launch the Hermes CLI directly in bypass mode.',
313
+ );
314
+
315
+ assert.match(
316
+ workbench,
317
+ /HERMES_HISTORY_COMMAND = 'hermes sessions'/,
318
+ 'Hermes Agent should expose native Hermes session history from the bottom terminal.',
301
319
  );
302
320
 
303
321
  assert.doesNotMatch(