@pixelbyte-software/pixcode 1.53.26 → 1.53.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pixelbyte-software/pixcode",
3
- "version": "1.53.26",
3
+ "version": "1.53.28",
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",
@@ -29,6 +29,14 @@ const checks = [
29
29
  source.includes('fs.createReadStream'),
30
30
  message: 'Backend watchers/file tree scans must be bounded and must not broadcast full project trees.',
31
31
  },
32
+ {
33
+ path: 'server/index.js',
34
+ assert: (source) =>
35
+ source.includes('function resizeTerminalPty') &&
36
+ source.includes("resizeTerminalPty(shellProcess, data.cols, data.rows, 'reconnect resize')") &&
37
+ source.includes('resizeTerminalPty(activePty, data.cols, data.rows)'),
38
+ message: 'Shell reconnect must resize existing PTYs with the latest browser rows and columns.',
39
+ },
32
40
  {
33
41
  path: 'server/routes/git.js',
34
42
  assert: (source) =>
@@ -87,10 +95,11 @@ const checks = [
87
95
  path: 'src/components/shell/utils/terminalFit.ts',
88
96
  assert: (source) =>
89
97
  source.includes('getBoundingClientRect()') &&
98
+ source.includes('measureCellFromDom') &&
90
99
  source.includes('proposeDimensionsFromContainer') &&
91
100
  source.includes('right-cli:') &&
92
101
  source.includes('terminal.resize(nextCols, nextRows)') &&
93
- source.includes('terminal.options.fontSize = nextFontSize'),
102
+ !source.includes('terminal.options.fontSize = nextFontSize'),
94
103
  message: 'Terminal fit utility must use real container geometry for the right CLI panel.',
95
104
  },
96
105
  {
@@ -100,12 +109,12 @@ const checks = [
100
109
  source.includes('display: flex') &&
101
110
  source.includes('max-width: 100%') &&
102
111
  source.includes('.pixcode-shell-terminal .xterm-viewport') &&
103
- source.includes('.pixcode-shell-terminal--right-cli .xterm-rows > div') &&
104
- source.includes('white-space: pre-wrap !important') &&
105
- source.includes('overflow-wrap: anywhere !important') &&
106
- source.includes('word-break: break-word !important') &&
112
+ source.includes('.pixcode-shell-terminal--right-cli .xterm-rows') &&
113
+ !source.includes('white-space: pre-wrap !important') &&
114
+ !source.includes('overflow-wrap: anywhere !important') &&
115
+ !source.includes('word-break: break-word !important') &&
107
116
  !source.includes('.pixcode-shell-terminal .xterm-rows > div'),
108
- message: 'Terminal styles must preserve global xterm row semantics while wrapping only the scoped right CLI panel.',
117
+ message: 'Terminal styles must preserve xterm row semantics and avoid CSS wrapping terminal rows.',
109
118
  },
110
119
  {
111
120
  path: 'src/components/vscode-workbench/view/VSCodeWorkbench.tsx',
package/server/index.js CHANGED
@@ -1458,6 +1458,26 @@ function writeTerminalInputChunks(ptyProcess, data) {
1458
1458
  return true;
1459
1459
  }
1460
1460
 
1461
+ function resizeTerminalPty(ptyProcess, cols, rows, context = 'resize') {
1462
+ if (!ptyProcess || typeof ptyProcess.resize !== 'function') return false;
1463
+ const nextCols = Number.parseInt(cols, 10);
1464
+ const nextRows = Number.parseInt(rows, 10);
1465
+ if (!Number.isFinite(nextCols) || !Number.isFinite(nextRows) || nextCols < 2 || nextRows < 1) {
1466
+ return false;
1467
+ }
1468
+
1469
+ try {
1470
+ ptyProcess.resize(nextCols, nextRows);
1471
+ return true;
1472
+ } catch (error) {
1473
+ const message = error instanceof Error ? error.message : String(error);
1474
+ if (!/already exited/i.test(message)) {
1475
+ console.warn(`Terminal ${context} failed:`, message);
1476
+ }
1477
+ return false;
1478
+ }
1479
+ }
1480
+
1461
1481
  function readPtyTarget(value) {
1462
1482
  return typeof value === 'string' && value.trim() ? value.trim() : null;
1463
1483
  }
@@ -4074,6 +4094,7 @@ function handleShellConnection(ws, request) {
4074
4094
  } else {
4075
4095
  console.log('♻️ Reconnecting to existing PTY session:', ptySessionKey);
4076
4096
  shellProcess = existingSession.pty;
4097
+ resizeTerminalPty(shellProcess, data.cols, data.rows, 'reconnect resize');
4077
4098
 
4078
4099
  clearTimeout(existingSession.timeoutId);
4079
4100
 
@@ -4411,14 +4432,7 @@ function handleShellConnection(ws, request) {
4411
4432
  const session = ptySessionKey ? ptySessionsMap.get(ptySessionKey) : null;
4412
4433
  const activePty = session?.pty || shellProcess;
4413
4434
  if (activePty && typeof activePty.resize === 'function' && session?.lifecycleState !== 'completed' && session?.lifecycleState !== 'failed') {
4414
- try {
4415
- activePty.resize(data.cols, data.rows);
4416
- } catch (error) {
4417
- const message = error instanceof Error ? error.message : String(error);
4418
- if (!/already exited/i.test(message)) {
4419
- console.warn('Terminal resize failed:', message);
4420
- }
4421
- }
4435
+ resizeTerminalPty(activePty, data.cols, data.rows);
4422
4436
  }
4423
4437
  }
4424
4438
  } catch (error) {