@pixelbyte-software/pixcode 1.53.28 → 1.54.1
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/assets/{index-BBDYzJ7B.js → index-CLO8YURv.js} +148 -148
- package/dist/index.html +1 -1
- package/dist-server/server/claude-sdk.js +6 -0
- package/dist-server/server/claude-sdk.js.map +1 -1
- package/dist-server/server/cli.js +67 -0
- package/dist-server/server/cli.js.map +1 -1
- package/dist-server/server/index.js +278 -54
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/middleware/account-lockout.js +101 -0
- package/dist-server/server/middleware/account-lockout.js.map +1 -0
- package/dist-server/server/middleware/auth.js +71 -9
- package/dist-server/server/middleware/auth.js.map +1 -1
- package/dist-server/server/middleware/rate-limiter.js +62 -0
- package/dist-server/server/middleware/rate-limiter.js.map +1 -0
- package/dist-server/server/routes/agent.js +3 -4
- package/dist-server/server/routes/agent.js.map +1 -1
- package/dist-server/server/routes/auth.js +75 -13
- package/dist-server/server/routes/auth.js.map +1 -1
- package/dist-server/server/routes/codex.js +1 -1
- package/dist-server/server/routes/codex.js.map +1 -1
- package/dist-server/server/routes/diagnostics.js +6 -3
- package/dist-server/server/routes/diagnostics.js.map +1 -1
- package/dist-server/server/routes/gemini.js +1 -1
- package/dist-server/server/routes/gemini.js.map +1 -1
- package/dist-server/server/routes/git.js +9 -9
- package/dist-server/server/routes/git.js.map +1 -1
- package/dist-server/server/routes/live-view.js +2 -2
- package/dist-server/server/routes/live-view.js.map +1 -1
- package/dist-server/server/routes/plugins.js +12 -12
- package/dist-server/server/routes/plugins.js.map +1 -1
- package/dist-server/server/routes/projects.js +2 -2
- package/dist-server/server/routes/projects.js.map +1 -1
- package/dist-server/server/routes/qwen.js +1 -1
- package/dist-server/server/routes/qwen.js.map +1 -1
- package/dist-server/server/routes/remote.js +1 -1
- package/dist-server/server/routes/remote.js.map +1 -1
- package/dist-server/server/routes/webhooks.js +1 -1
- package/dist-server/server/routes/webhooks.js.map +1 -1
- package/dist-server/server/services/startup-update.js +31 -6
- package/dist-server/server/services/startup-update.js.map +1 -1
- package/dist-server/server/services/telegram/bot.js +6 -4
- package/dist-server/server/services/telegram/bot.js.map +1 -1
- package/dist-server/server/setup-wizard.js +246 -0
- package/dist-server/server/setup-wizard.js.map +1 -0
- package/dist-server/server/utils/plugin-loader.js +3 -0
- package/dist-server/server/utils/plugin-loader.js.map +1 -1
- package/dist-server/server/utils/port-access.js +25 -8
- package/dist-server/server/utils/port-access.js.map +1 -1
- package/dist-server/server/utils/security-log.js +89 -0
- package/dist-server/server/utils/security-log.js.map +1 -0
- package/package.json +1 -1
- package/server/claude-sdk.js +7 -0
- package/server/cli.js +67 -0
- package/server/index.js +287 -55
- package/server/middleware/account-lockout.js +112 -0
- package/server/middleware/auth.js +72 -9
- package/server/middleware/rate-limiter.js +82 -0
- package/server/routes/agent.js +3 -4
- package/server/routes/auth.js +86 -13
- package/server/routes/codex.js +1 -1
- package/server/routes/diagnostics.js +6 -3
- package/server/routes/gemini.js +1 -1
- package/server/routes/git.js +9 -9
- package/server/routes/live-view.js +2 -2
- package/server/routes/plugins.js +12 -12
- package/server/routes/projects.js +2 -2
- package/server/routes/qwen.js +1 -1
- package/server/routes/remote.js +1 -1
- package/server/routes/webhooks.js +1 -1
- package/server/services/startup-update.js +31 -6
- package/server/services/telegram/bot.js +6 -4
- package/server/setup-wizard.js +263 -0
- package/server/utils/plugin-loader.js +4 -0
- package/server/utils/port-access.js +26 -8
- package/server/utils/security-log.js +84 -0
package/server/cli.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Commands:
|
|
8
8
|
* (no args) - Start the server (default)
|
|
9
9
|
* start - Start the server
|
|
10
|
+
* setup - Run the interactive setup wizard
|
|
10
11
|
* sandbox - Manage Docker sandbox environments
|
|
11
12
|
* daemon - Manage persistent Linux service modes
|
|
12
13
|
* status - Show configuration and data locations
|
|
@@ -23,6 +24,7 @@ import { spawn } from 'node:child_process';
|
|
|
23
24
|
import { findAppRoot, getModuleDir } from './utils/runtime-paths.js';
|
|
24
25
|
import { buildDaemonCliCommand, handleDaemonCommand, hasInstalledDaemonUnit } from './daemon-manager.js';
|
|
25
26
|
import { runStartupAutoUpdate, startupUpdateReexecEnv } from './services/startup-update.js';
|
|
27
|
+
import { runSetupWizard, postStartupGuidance, isFirstRun, isPortAvailable, findAvailablePort, waitForServerReady } from './setup-wizard.js';
|
|
26
28
|
|
|
27
29
|
const __dirname = getModuleDir(import.meta.url);
|
|
28
30
|
// The CLI is compiled into dist-server/server, but it still needs to read the top-level
|
|
@@ -169,6 +171,7 @@ Usage:
|
|
|
169
171
|
|
|
170
172
|
Commands:
|
|
171
173
|
start Start the Pixcode server (default)
|
|
174
|
+
setup Run the interactive setup wizard (port, mode, browser)
|
|
172
175
|
daemon Manage persistent Linux service (system-first)
|
|
173
176
|
sandbox Manage Docker sandbox environments
|
|
174
177
|
status Show configuration and data locations
|
|
@@ -180,14 +183,17 @@ Options:
|
|
|
180
183
|
-p, --port <port> Set server port (default: 3001)
|
|
181
184
|
--database-path <path> Set custom database location
|
|
182
185
|
--no-daemon Disable automatic daemon startup on Linux
|
|
186
|
+
--no-browser Do not auto-open browser on startup
|
|
183
187
|
--restart-daemon Restart daemon automatically after update
|
|
184
188
|
-h, --help Show this help information
|
|
185
189
|
-v, --version Show version information
|
|
186
190
|
|
|
187
191
|
Examples:
|
|
188
192
|
$ pixcode # Start with defaults
|
|
193
|
+
$ pixcode setup # Run the interactive setup wizard
|
|
189
194
|
$ pixcode --port 8080 # Start on port 8080
|
|
190
195
|
$ pixcode --no-daemon # Force foreground mode
|
|
196
|
+
$ pixcode --no-browser # Start without auto-opening browser
|
|
191
197
|
$ sudo pixcode daemon install --mode system --port 3001
|
|
192
198
|
$ pixcode daemon install --mode user --port 3001 --single-port
|
|
193
199
|
$ pixcode daemon doctor --mode system
|
|
@@ -945,6 +951,8 @@ function parseArgs(args) {
|
|
|
945
951
|
parsed.options.databasePath = arg.split('=')[1];
|
|
946
952
|
} else if (arg === '--no-daemon') {
|
|
947
953
|
parsed.options.noDaemon = true;
|
|
954
|
+
} else if (arg === '--no-browser') {
|
|
955
|
+
parsed.options.noBrowser = true;
|
|
948
956
|
} else if (arg === '--restart-daemon') {
|
|
949
957
|
parsed.options.restartDaemon = true;
|
|
950
958
|
} else if (arg === '--help' || arg === '-h') {
|
|
@@ -982,6 +990,9 @@ async function main() {
|
|
|
982
990
|
if (options.noDaemon) {
|
|
983
991
|
process.env.PIXCODE_NO_DAEMON = '1';
|
|
984
992
|
}
|
|
993
|
+
if (options.noBrowser) {
|
|
994
|
+
process.env.PIXCODE_NO_BROWSER = '1';
|
|
995
|
+
}
|
|
985
996
|
if (options.databasePath) {
|
|
986
997
|
process.env.DATABASE_PATH = options.databasePath;
|
|
987
998
|
}
|
|
@@ -991,11 +1002,67 @@ async function main() {
|
|
|
991
1002
|
if (process.env.PIXCODE_ENABLE_STARTUP_UPDATE === '1' && await runStartupUpdateGate()) {
|
|
992
1003
|
break;
|
|
993
1004
|
}
|
|
1005
|
+
{
|
|
1006
|
+
const effectivePort = Number(options.serverPort || process.env.SERVER_PORT || process.env.PORT || '3001');
|
|
1007
|
+
|
|
1008
|
+
// First-run setup wizard
|
|
1009
|
+
if (isFirstRun()) {
|
|
1010
|
+
const wizardResult = await runSetupWizard(options);
|
|
1011
|
+
if (wizardResult) {
|
|
1012
|
+
if (!options.serverPort) {
|
|
1013
|
+
process.env.SERVER_PORT = String(wizardResult.port);
|
|
1014
|
+
}
|
|
1015
|
+
if (wizardResult.useDaemon === false) {
|
|
1016
|
+
options.noDaemon = true;
|
|
1017
|
+
process.env.PIXCODE_NO_DAEMON = '1';
|
|
1018
|
+
}
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
// Port conflict detection (every run, not just first)
|
|
1023
|
+
const currentPort = Number(options.serverPort || process.env.SERVER_PORT || process.env.PORT || '3001');
|
|
1024
|
+
if (!await isPortAvailable(currentPort)) {
|
|
1025
|
+
const alreadyRunning = await waitForServerReady(currentPort, 2000);
|
|
1026
|
+
if (alreadyRunning) {
|
|
1027
|
+
console.log(`\n${c.ok('[OK]')} Pixcode is already running on port ${c.bright(String(currentPort))}.`);
|
|
1028
|
+
await postStartupGuidance(currentPort);
|
|
1029
|
+
break;
|
|
1030
|
+
}
|
|
1031
|
+
console.log(`\n${c.warn('[WARN]')} Port ${c.bright(String(currentPort))} is in use by another process.`);
|
|
1032
|
+
const altPort = await findAvailablePort(currentPort + 1);
|
|
1033
|
+
if (altPort) {
|
|
1034
|
+
console.log(`${c.info('[INFO]')} Switching to port ${c.bright(String(altPort))}.`);
|
|
1035
|
+
process.env.SERVER_PORT = String(altPort);
|
|
1036
|
+
options.serverPort = String(altPort);
|
|
1037
|
+
} else {
|
|
1038
|
+
console.error(`${c.error('[ERROR]')} No free ports found. Specify one with ${c.bright('--port <port>')}.`);
|
|
1039
|
+
process.exit(1);
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
994
1043
|
if (await maybeAutoDaemonStart(options)) {
|
|
1044
|
+
const daemonPort = Number(options.serverPort || process.env.SERVER_PORT || process.env.PORT || '3001');
|
|
1045
|
+
const ready = await waitForServerReady(daemonPort, 15000);
|
|
1046
|
+
if (ready) {
|
|
1047
|
+
await postStartupGuidance(daemonPort);
|
|
1048
|
+
}
|
|
995
1049
|
break;
|
|
996
1050
|
}
|
|
997
1051
|
await startServer();
|
|
998
1052
|
break;
|
|
1053
|
+
case 'setup':
|
|
1054
|
+
{
|
|
1055
|
+
const wizardResult = await runSetupWizard(options);
|
|
1056
|
+
if (wizardResult) {
|
|
1057
|
+
process.env.SERVER_PORT = String(wizardResult.port);
|
|
1058
|
+
if (wizardResult.useDaemon === false) {
|
|
1059
|
+
options.noDaemon = true;
|
|
1060
|
+
process.env.PIXCODE_NO_DAEMON = '1';
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
console.log(`\n${c.ok('[OK]')} Setup complete! Run ${c.bright('pixcode start')} to launch.`);
|
|
1064
|
+
}
|
|
1065
|
+
break;
|
|
999
1066
|
case 'sandbox':
|
|
1000
1067
|
await sandboxCommand(remainingArgs || []);
|
|
1001
1068
|
break;
|