projax 3.3.51 → 3.3.52
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/README.md +0 -73
- package/coverage/core-bridge.ts.html +24 -3
- package/coverage/index.html +34 -19
- package/coverage/lcov-report/core-bridge.ts.html +24 -3
- package/coverage/lcov-report/index.html +34 -19
- package/coverage/lcov-report/port-extractor.ts.html +1 -1
- package/coverage/lcov-report/port-scanner.ts.html +3 -3
- package/coverage/lcov-report/port-utils.ts.html +1 -1
- package/coverage/lcov-report/script-runner.ts.html +302 -11
- package/coverage/lcov-report/test-parser.ts.html +799 -0
- package/coverage/lcov.info +270 -49
- package/coverage/port-extractor.ts.html +1 -1
- package/coverage/port-scanner.ts.html +3 -3
- package/coverage/port-utils.ts.html +1 -1
- package/coverage/script-runner.ts.html +302 -11
- package/coverage/test-parser.ts.html +799 -0
- package/dist/__tests__/port-scanner.test.js +17 -7
- package/dist/__tests__/script-runner.test.js +17 -7
- package/dist/api/__tests__/database.test.js +17 -7
- package/dist/api/__tests__/database.test.js.map +1 -1
- package/dist/api/__tests__/routes.test.js +18 -7
- package/dist/api/__tests__/routes.test.js.map +1 -1
- package/dist/api/__tests__/scanner.test.js +18 -7
- package/dist/api/__tests__/scanner.test.js.map +1 -1
- package/dist/api/database.d.ts +0 -8
- package/dist/api/database.d.ts.map +1 -1
- package/dist/api/database.js +24 -57
- package/dist/api/database.js.map +1 -1
- package/dist/api/index.js +19 -9
- package/dist/api/index.js.map +1 -1
- package/dist/api/migrate.js +1 -2
- package/dist/api/migrate.js.map +1 -1
- package/dist/api/package.json +6 -3
- package/dist/api/routes/backup.d.ts +2 -1
- package/dist/api/routes/backup.d.ts.map +1 -1
- package/dist/api/routes/backup.js.map +1 -1
- package/dist/api/routes/index.d.ts +2 -1
- package/dist/api/routes/index.d.ts.map +1 -1
- package/dist/api/routes/index.js +0 -2
- package/dist/api/routes/index.js.map +1 -1
- package/dist/api/routes/projects.d.ts +2 -1
- package/dist/api/routes/projects.d.ts.map +1 -1
- package/dist/api/routes/projects.js +17 -7
- package/dist/api/routes/projects.js.map +1 -1
- package/dist/api/routes/settings.d.ts +2 -1
- package/dist/api/routes/settings.d.ts.map +1 -1
- package/dist/api/routes/settings.js +22 -57
- package/dist/api/routes/settings.js.map +1 -1
- package/dist/api/routes/workspaces.d.ts +2 -1
- package/dist/api/routes/workspaces.d.ts.map +1 -1
- package/dist/api/routes/workspaces.js +21 -96
- package/dist/api/routes/workspaces.js.map +1 -1
- package/dist/api/services/scanner.js +19 -10
- package/dist/api/services/scanner.js.map +1 -1
- package/dist/api/services/test-parser.js +2 -3
- package/dist/api/services/test-parser.js.map +1 -1
- package/dist/api/types.d.ts +0 -5
- package/dist/api/types.d.ts.map +1 -1
- package/dist/core/__tests__/database.test.js +17 -7
- package/dist/core/__tests__/detector.test.js +17 -7
- package/dist/core/__tests__/index.test.js +18 -7
- package/dist/core/__tests__/scanner.test.js +18 -7
- package/dist/core/__tests__/settings.test.js +18 -7
- package/dist/core/backup-utils.js +20 -11
- package/dist/core/database.js +18 -9
- package/dist/core/detector.js +21 -11
- package/dist/core/git-utils.js +19 -10
- package/dist/core/index.js +5 -5
- package/dist/core/scanner.js +2 -3
- package/dist/core/settings.d.ts +0 -85
- package/dist/core/settings.js +9 -306
- package/dist/core/workspace-utils.js +20 -11
- package/dist/core-bridge.js +22 -8
- package/dist/electron/core/__tests__/database.test.js +17 -7
- package/dist/electron/core/__tests__/detector.test.js +17 -7
- package/dist/electron/core/__tests__/index.test.js +18 -7
- package/dist/electron/core/__tests__/scanner.test.js +18 -7
- package/dist/electron/core/__tests__/settings.test.js +18 -7
- package/dist/electron/core/backup-utils.js +20 -11
- package/dist/electron/core/database.js +18 -9
- package/dist/electron/core/detector.js +21 -11
- package/dist/electron/core/git-utils.js +19 -10
- package/dist/electron/core/index.js +5 -5
- package/dist/electron/core/scanner.js +2 -3
- package/dist/electron/core/settings.d.ts +0 -85
- package/dist/electron/core/settings.js +9 -306
- package/dist/electron/core/workspace-utils.js +20 -11
- package/dist/electron/core.js +22 -8
- package/dist/electron/main.js +143 -444
- package/dist/electron/port-extractor.js +18 -9
- package/dist/electron/port-scanner.js +21 -12
- package/dist/electron/port-utils.js +4 -5
- package/dist/electron/preload.d.ts +2 -13
- package/dist/electron/preload.js +2 -9
- package/dist/electron/renderer/assets/index-BjZn_mEF.js +66 -0
- package/dist/electron/renderer/assets/index-CZmDxbJO.js +66 -0
- package/dist/electron/renderer/assets/{index-DWe2TQFv.css → index-DfocdjIj.css} +1 -1
- package/dist/electron/renderer/index.html +2 -2
- package/dist/electron/script-runner.js +29 -20
- package/dist/index.js +37 -134
- package/dist/port-extractor.js +18 -9
- package/dist/port-scanner.js +21 -12
- package/dist/port-utils.js +4 -5
- package/dist/prxi.d.ts +1 -0
- package/dist/prxi.js +1106 -0
- package/dist/prxi.tsx +6 -6
- package/dist/script-runner.js +29 -20
- package/dist/test-parser.js +2 -3
- package/jest.config.js +8 -0
- package/package.json +9 -6
- package/dist/api/routes/mcp.d.ts +0 -3
- package/dist/api/routes/mcp.d.ts.map +0 -1
- package/dist/api/routes/mcp.js +0 -147
- package/dist/api/routes/mcp.js.map +0 -1
- package/dist/electron/renderer/assets/index-59AhiV_K.css +0 -1
- package/dist/electron/renderer/assets/index-A04svynq.js +0 -62
- package/dist/electron/renderer/assets/index-B-etDnj2.js +0 -64
- package/dist/electron/renderer/assets/index-BGodNljq.js +0 -62
- package/dist/electron/renderer/assets/index-Bx18Cyic.js +0 -64
- package/dist/electron/renderer/assets/index-ByBOaxqv.js +0 -62
- package/dist/electron/renderer/assets/index-ByHY-x-j.js +0 -62
- package/dist/electron/renderer/assets/index-C1SRt6Jx.js +0 -62
- package/dist/electron/renderer/assets/index-C8f5yNYe.js +0 -64
- package/dist/electron/renderer/assets/index-C9Fo49a8.js +0 -61
- package/dist/electron/renderer/assets/index-CGx7K7jh.js +0 -62
- package/dist/electron/renderer/assets/index-CIZ3Wl6c.css +0 -1
- package/dist/electron/renderer/assets/index-CJbsU9y8.css +0 -1
- package/dist/electron/renderer/assets/index-CJrLunKK.js +0 -62
- package/dist/electron/renderer/assets/index-CQTleudf.css +0 -1
- package/dist/electron/renderer/assets/index-CQcilqlv.js +0 -62
- package/dist/electron/renderer/assets/index-CS-85xbL.css +0 -1
- package/dist/electron/renderer/assets/index-CYph0WPA.js +0 -62
- package/dist/electron/renderer/assets/index-C_WSLD6y.css +0 -1
- package/dist/electron/renderer/assets/index-CgB-tTpV.js +0 -62
- package/dist/electron/renderer/assets/index-ChoTzPLo.css +0 -1
- package/dist/electron/renderer/assets/index-CopVNRnR.js +0 -64
- package/dist/electron/renderer/assets/index-D1jmaGv5.css +0 -1
- package/dist/electron/renderer/assets/index-D2AOB6Er.js +0 -62
- package/dist/electron/renderer/assets/index-DAfjuYKX.js +0 -61
- package/dist/electron/renderer/assets/index-DEOOHPEi.css +0 -1
- package/dist/electron/renderer/assets/index-DTtg6XrF.css +0 -1
- package/dist/electron/renderer/assets/index-DUvcepWm.js +0 -64
- package/dist/electron/renderer/assets/index-DVWDlM1D.js +0 -62
- package/dist/electron/renderer/assets/index-DZzB20Xf.css +0 -1
- package/dist/electron/renderer/assets/index-Dk0EQt0u.css +0 -1
- package/dist/electron/renderer/assets/index-DknLdADV.js +0 -63
- package/dist/electron/renderer/assets/index-DocuD8Lk.js +0 -64
- package/dist/electron/renderer/assets/index-DwRy5FqP.js +0 -62
- package/dist/electron/renderer/assets/index-DyU-xfd8.css +0 -1
- package/dist/electron/renderer/assets/index-GwC-JVUy.css +0 -1
- package/dist/electron/renderer/assets/index-JXrtTB1F.js +0 -63
- package/dist/electron/renderer/assets/index-Ocrdv8Lb.css +0 -1
- package/dist/electron/renderer/assets/index-R-HsWJ0K.js +0 -62
- package/dist/electron/renderer/assets/index-Ytah0wbZ.js +0 -62
- package/dist/electron/renderer/assets/index-ZVyXUshO.css +0 -1
- package/dist/electron/renderer/assets/index-Z_8dJn3i.js +0 -62
- package/dist/electron/renderer/assets/index-fehviker.js +0 -63
- package/dist/electron/renderer/assets/index-nts9ST-M.js +0 -62
- package/dist/electron/renderer/assets/index-q8NVIH3g.css +0 -1
- package/dist/electron/renderer/assets/index-thUWIXon.js +0 -62
- package/dist/electron/renderer/assets/index-tuQmrwcm.css +0 -1
- package/dist/prxi/src/index.tsx +0 -1370
package/dist/index.js
CHANGED
|
@@ -16,13 +16,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
}) : function(o, v) {
|
|
17
17
|
o["default"] = v;
|
|
18
18
|
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || function (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
26
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
37
|
const commander_1 = require("commander");
|
|
28
38
|
const path = __importStar(require("path"));
|
|
@@ -608,7 +618,7 @@ program
|
|
|
608
618
|
console.log(`✓ Found ${result.testsFound} test file(s)`);
|
|
609
619
|
if (result.tests.length > 0) {
|
|
610
620
|
console.log(' Test files:');
|
|
611
|
-
result.tests.forEach(test => {
|
|
621
|
+
result.tests.forEach((test) => {
|
|
612
622
|
console.log(` - ${test.file_path}${test.framework ? ` (${test.framework})` : ''}`);
|
|
613
623
|
});
|
|
614
624
|
}
|
|
@@ -620,7 +630,7 @@ program
|
|
|
620
630
|
const ports = db.getProjectPorts(project.id);
|
|
621
631
|
if (ports.length > 0) {
|
|
622
632
|
console.log(`✓ Found ${ports.length} port(s)`);
|
|
623
|
-
const portList = ports.map(p => p.port).sort((a, b) => a - b).join(', ');
|
|
633
|
+
const portList = ports.map((p) => p.port).sort((a, b) => a - b).join(', ');
|
|
624
634
|
console.log(` Ports: ${portList}`);
|
|
625
635
|
}
|
|
626
636
|
else {
|
|
@@ -699,7 +709,7 @@ program
|
|
|
699
709
|
// Table format
|
|
700
710
|
console.log(`\nTracked Projects (${projects.length}):\n`);
|
|
701
711
|
// Fetch git branches for all projects
|
|
702
|
-
const { getCurrentBranch } = await Promise.resolve().then(() => __importStar(require('
|
|
712
|
+
const { getCurrentBranch } = await Promise.resolve().then(() => __importStar(require('projax-core')));
|
|
703
713
|
const branchMap = new Map();
|
|
704
714
|
for (const project of projects) {
|
|
705
715
|
try {
|
|
@@ -712,8 +722,8 @@ program
|
|
|
712
722
|
}
|
|
713
723
|
// Calculate column widths
|
|
714
724
|
const idWidth = Math.max(3, projects.length.toString().length);
|
|
715
|
-
const nameWidth = Math.max(4, ...projects.map(p => p.name.length));
|
|
716
|
-
const pathWidth = Math.max(4, Math.min(35, ...projects.map(p => p.path.length)));
|
|
725
|
+
const nameWidth = Math.max(4, ...projects.map((p) => p.name.length));
|
|
726
|
+
const pathWidth = Math.max(4, Math.min(35, ...projects.map((p) => p.path.length)));
|
|
717
727
|
const branchWidth = 15;
|
|
718
728
|
const portsWidth = 12;
|
|
719
729
|
const testsWidth = 6;
|
|
@@ -738,7 +748,7 @@ program
|
|
|
738
748
|
? new Date(project.last_scanned * 1000).toLocaleString()
|
|
739
749
|
: 'Never';
|
|
740
750
|
const portStr = ports.length > 0
|
|
741
|
-
? ports.map(p => p.port).sort((a, b) => a - b).join(', ')
|
|
751
|
+
? ports.map((p) => p.port).sort((a, b) => a - b).join(', ')
|
|
742
752
|
: 'N/A';
|
|
743
753
|
const pathDisplay = project.path.length > 35
|
|
744
754
|
? '...' + project.path.slice(-32)
|
|
@@ -786,7 +796,7 @@ program
|
|
|
786
796
|
console.log(`✓ Found ${result.testsFound} test file(s)`);
|
|
787
797
|
if (result.tests.length > 0) {
|
|
788
798
|
console.log('\nTest files:');
|
|
789
|
-
result.tests.forEach(test => {
|
|
799
|
+
result.tests.forEach((test) => {
|
|
790
800
|
console.log(` - ${test.file_path}${test.framework ? ` (${test.framework})` : ''}`);
|
|
791
801
|
});
|
|
792
802
|
}
|
|
@@ -797,7 +807,7 @@ program
|
|
|
797
807
|
const ports = db.getProjectPorts(project.id);
|
|
798
808
|
if (ports.length > 0) {
|
|
799
809
|
console.log(`✓ Found ${ports.length} port(s)`);
|
|
800
|
-
const portList = ports.map(p => p.port).sort((a, b) => a - b).join(', ');
|
|
810
|
+
const portList = ports.map((p) => p.port).sort((a, b) => a - b).join(', ');
|
|
801
811
|
console.log(` Ports: ${portList}`);
|
|
802
812
|
}
|
|
803
813
|
else {
|
|
@@ -845,7 +855,7 @@ program
|
|
|
845
855
|
try {
|
|
846
856
|
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
847
857
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
848
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
858
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
849
859
|
if (!project) {
|
|
850
860
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
851
861
|
process.exit(1);
|
|
@@ -875,7 +885,7 @@ program
|
|
|
875
885
|
await ensureAPIServerRunning(true);
|
|
876
886
|
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
877
887
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
878
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
888
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
879
889
|
if (!project) {
|
|
880
890
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
881
891
|
process.exit(1);
|
|
@@ -918,7 +928,7 @@ program
|
|
|
918
928
|
await ensureAPIServerRunning(true);
|
|
919
929
|
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
920
930
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
921
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
931
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
922
932
|
if (!project) {
|
|
923
933
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
924
934
|
process.exit(1);
|
|
@@ -931,7 +941,7 @@ program
|
|
|
931
941
|
}
|
|
932
942
|
else {
|
|
933
943
|
console.log(`Tags for "${project.name}":`);
|
|
934
|
-
currentTags.forEach(t => console.log(` - ${t}`));
|
|
944
|
+
currentTags.forEach((t) => console.log(` - ${t}`));
|
|
935
945
|
}
|
|
936
946
|
}
|
|
937
947
|
else if (action === 'add') {
|
|
@@ -958,7 +968,7 @@ program
|
|
|
958
968
|
console.log(`Tag "${tagToRemove}" does not exist for "${project.name}"`);
|
|
959
969
|
}
|
|
960
970
|
else {
|
|
961
|
-
db.updateProject(project.id, { tags: currentTags.filter(t => t !== tagToRemove) });
|
|
971
|
+
db.updateProject(project.id, { tags: currentTags.filter((t) => t !== tagToRemove) });
|
|
962
972
|
console.log(`✓ Removed tag "${tagToRemove}" from "${project.name}"`);
|
|
963
973
|
}
|
|
964
974
|
}
|
|
@@ -981,7 +991,7 @@ program
|
|
|
981
991
|
try {
|
|
982
992
|
await ensureAPIServerRunning(true);
|
|
983
993
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
984
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
994
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
985
995
|
if (!project) {
|
|
986
996
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
987
997
|
process.exit(1);
|
|
@@ -1046,7 +1056,7 @@ program
|
|
|
1046
1056
|
.action((projectIdentifier) => {
|
|
1047
1057
|
try {
|
|
1048
1058
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
1049
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
1059
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
1050
1060
|
if (!project) {
|
|
1051
1061
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
1052
1062
|
process.exit(1);
|
|
@@ -1083,7 +1093,7 @@ program
|
|
|
1083
1093
|
try {
|
|
1084
1094
|
await ensureAPIServerRunning(true);
|
|
1085
1095
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
1086
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
1096
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
1087
1097
|
if (!project) {
|
|
1088
1098
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
1089
1099
|
process.exit(1);
|
|
@@ -1134,7 +1144,7 @@ program
|
|
|
1134
1144
|
await ensureAPIServerRunning(true);
|
|
1135
1145
|
const db = (0, core_bridge_1.getDatabaseManager)();
|
|
1136
1146
|
const projects = (0, core_bridge_1.getAllProjects)();
|
|
1137
|
-
const project = projects.find(p => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
1147
|
+
const project = projects.find((p) => p.id.toString() === projectIdentifier || p.name === projectIdentifier);
|
|
1138
1148
|
if (!project) {
|
|
1139
1149
|
console.error(`Error: Project not found: ${projectIdentifier}`);
|
|
1140
1150
|
process.exit(1);
|
|
@@ -1839,7 +1849,7 @@ program
|
|
|
1839
1849
|
const ports = db.getProjectPorts(project.id);
|
|
1840
1850
|
if (ports.length > 0) {
|
|
1841
1851
|
console.log(`✓ Found ${ports.length} port(s)`);
|
|
1842
|
-
ports.forEach(port => {
|
|
1852
|
+
ports.forEach((port) => {
|
|
1843
1853
|
const scriptLabel = port.script_name ? ` (${port.script_name})` : '';
|
|
1844
1854
|
console.log(` Port ${port.port}${scriptLabel} - ${port.config_source}`);
|
|
1845
1855
|
});
|
|
@@ -1855,7 +1865,7 @@ program
|
|
|
1855
1865
|
for (const project of projects) {
|
|
1856
1866
|
const ports = db.getProjectPorts(project.id);
|
|
1857
1867
|
if (ports.length > 0) {
|
|
1858
|
-
const portList = ports.map(p => p.port).sort((a, b) => a - b).join(', ');
|
|
1868
|
+
const portList = ports.map((p) => p.port).sort((a, b) => a - b).join(', ');
|
|
1859
1869
|
console.log(`${project.name}: ${portList}`);
|
|
1860
1870
|
}
|
|
1861
1871
|
}
|
|
@@ -2127,118 +2137,11 @@ program
|
|
|
2127
2137
|
process.exit(1);
|
|
2128
2138
|
}
|
|
2129
2139
|
});
|
|
2130
|
-
// MCP Server command
|
|
2131
|
-
program
|
|
2132
|
-
.command('mcp')
|
|
2133
|
-
.description('Start Projax MCP (Model Context Protocol) server for AI tools')
|
|
2134
|
-
.action(async () => {
|
|
2135
|
-
try {
|
|
2136
|
-
// Check if MCP server package is available
|
|
2137
|
-
const mcpServerPath = path.join(__dirname, '..', '..', 'mcp-server', 'dist', 'index.js');
|
|
2138
|
-
const isLocalDev = fs.existsSync(mcpServerPath);
|
|
2139
|
-
if (!isLocalDev) {
|
|
2140
|
-
// Try to find in node_modules (for global install)
|
|
2141
|
-
try {
|
|
2142
|
-
require.resolve('@projax/mcp-server');
|
|
2143
|
-
const { spawn } = require('child_process');
|
|
2144
|
-
const mcpServer = spawn('projax-mcp', [], {
|
|
2145
|
-
stdio: 'inherit',
|
|
2146
|
-
env: process.env,
|
|
2147
|
-
});
|
|
2148
|
-
mcpServer.on('exit', (code) => {
|
|
2149
|
-
process.exit(code || 0);
|
|
2150
|
-
});
|
|
2151
|
-
return;
|
|
2152
|
-
}
|
|
2153
|
-
catch (error) {
|
|
2154
|
-
console.error('Error: MCP server not found.');
|
|
2155
|
-
console.error('\nThe MCP server is not built or installed.');
|
|
2156
|
-
console.error('Please run: npm run build:mcp-server');
|
|
2157
|
-
process.exit(1);
|
|
2158
|
-
}
|
|
2159
|
-
}
|
|
2160
|
-
// Local development mode
|
|
2161
|
-
const { spawn } = require('child_process');
|
|
2162
|
-
const mcpServer = spawn('node', [mcpServerPath], {
|
|
2163
|
-
stdio: 'inherit',
|
|
2164
|
-
env: process.env,
|
|
2165
|
-
});
|
|
2166
|
-
mcpServer.on('exit', (code) => {
|
|
2167
|
-
process.exit(code || 0);
|
|
2168
|
-
});
|
|
2169
|
-
}
|
|
2170
|
-
catch (error) {
|
|
2171
|
-
console.error('Error starting MCP server:', error instanceof Error ? error.message : error);
|
|
2172
|
-
process.exit(1);
|
|
2173
|
-
}
|
|
2174
|
-
});
|
|
2175
|
-
// MCP Config command
|
|
2176
|
-
program
|
|
2177
|
-
.command('mcp-config')
|
|
2178
|
-
.description('Display MCP server configuration for Cursor or VS Code')
|
|
2179
|
-
.option('--cursor', 'Show Cursor-specific configuration')
|
|
2180
|
-
.option('--vscode', 'Show VS Code-specific configuration')
|
|
2181
|
-
.action(async (options) => {
|
|
2182
|
-
try {
|
|
2183
|
-
// Find prx command path
|
|
2184
|
-
let prxPath = 'prx';
|
|
2185
|
-
try {
|
|
2186
|
-
prxPath = (0, child_process_1.execSync)('which prx', { encoding: 'utf-8' }).trim();
|
|
2187
|
-
}
|
|
2188
|
-
catch {
|
|
2189
|
-
// If which fails, use 'prx' as default
|
|
2190
|
-
}
|
|
2191
|
-
const cursorConfig = {
|
|
2192
|
-
mcpServers: {
|
|
2193
|
-
projax: {
|
|
2194
|
-
command: prxPath,
|
|
2195
|
-
args: ['mcp'],
|
|
2196
|
-
},
|
|
2197
|
-
},
|
|
2198
|
-
};
|
|
2199
|
-
const vscodeConfig = {
|
|
2200
|
-
"mcp.servers": {
|
|
2201
|
-
projax: {
|
|
2202
|
-
command: prxPath,
|
|
2203
|
-
args: ['mcp'],
|
|
2204
|
-
},
|
|
2205
|
-
},
|
|
2206
|
-
};
|
|
2207
|
-
console.log('\n╔═══════════════════════════════════════════════════════╗');
|
|
2208
|
-
console.log('║ Projax MCP Server Configuration ║');
|
|
2209
|
-
console.log('╚═══════════════════════════════════════════════════════╝\n');
|
|
2210
|
-
if (options.vscode) {
|
|
2211
|
-
console.log('VS Code Configuration (settings.json):');
|
|
2212
|
-
console.log(JSON.stringify(vscodeConfig, null, 2));
|
|
2213
|
-
}
|
|
2214
|
-
else if (options.cursor) {
|
|
2215
|
-
console.log('Cursor Configuration (~/.cursor/mcp.json):');
|
|
2216
|
-
console.log(JSON.stringify(cursorConfig, null, 2));
|
|
2217
|
-
}
|
|
2218
|
-
else {
|
|
2219
|
-
// Show both
|
|
2220
|
-
console.log('Cursor Configuration (~/.cursor/mcp.json):');
|
|
2221
|
-
console.log(JSON.stringify(cursorConfig, null, 2));
|
|
2222
|
-
console.log('\nVS Code Configuration (settings.json):');
|
|
2223
|
-
console.log(JSON.stringify(vscodeConfig, null, 2));
|
|
2224
|
-
}
|
|
2225
|
-
console.log('\n📝 Instructions:');
|
|
2226
|
-
console.log('1. Copy the configuration above');
|
|
2227
|
-
console.log('2. For Cursor: Paste into ~/.cursor/mcp.json (or use Cursor Settings > MCP)');
|
|
2228
|
-
console.log('3. For VS Code: Paste into settings.json (or use MCP extension)');
|
|
2229
|
-
console.log('4. Restart your editor');
|
|
2230
|
-
console.log('\n💡 Test with: Ask your AI assistant about your current project context');
|
|
2231
|
-
}
|
|
2232
|
-
catch (error) {
|
|
2233
|
-
console.error('Error displaying configuration:', error instanceof Error ? error.message : error);
|
|
2234
|
-
process.exit(1);
|
|
2235
|
-
}
|
|
2236
|
-
});
|
|
2237
2140
|
// Handle script execution before parsing
|
|
2238
2141
|
// Check if first argument is not a known command
|
|
2239
2142
|
(async () => {
|
|
2240
2143
|
const args = process.argv.slice(2);
|
|
2241
|
-
const knownCommands = ['prxi', 'i', 'add', 'list', 'scan', 'remove', 'rn', 'rename', 'cd', 'pwd', 'run', 'ps', 'stop', 'web', 'desktop', 'ui', 'scripts', 'scan-ports', 'api', 'docs', 'vscode-extension', 'extension', 'ext', 'desc', 'description', 'tags', 'open', 'files', 'urls', 'workspace', 'ws', 'backup', 'restore', '
|
|
2144
|
+
const knownCommands = ['prxi', 'i', 'add', 'list', 'scan', 'remove', 'rn', 'rename', 'cd', 'pwd', 'run', 'ps', 'stop', 'web', 'desktop', 'ui', 'scripts', 'scan-ports', 'api', 'docs', 'vscode-extension', 'extension', 'ext', 'desc', 'description', 'tags', 'open', 'files', 'urls', 'workspace', 'ws', 'backup', 'restore', '--help', '-h', '--version', '-V'];
|
|
2242
2145
|
// If we have at least 1 argument and first is not a known command, treat as project identifier
|
|
2243
2146
|
if (args.length >= 1 && !knownCommands.includes(args[0])) {
|
|
2244
2147
|
const projectIdentifier = args[0];
|
package/dist/port-extractor.js
CHANGED
|
@@ -15,15 +15,25 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.extractPortsFromProject =
|
|
36
|
+
exports.extractPortsFromProject = extractPortsFromProject;
|
|
27
37
|
const fs = __importStar(require("fs"));
|
|
28
38
|
const path = __importStar(require("path"));
|
|
29
39
|
/**
|
|
@@ -56,7 +66,6 @@ async function extractPortsFromProject(projectPath) {
|
|
|
56
66
|
const uniquePorts = Array.from(new Map(ports.map(p => [`${p.port}-${p.script || ''}`, p])).values());
|
|
57
67
|
return uniquePorts;
|
|
58
68
|
}
|
|
59
|
-
exports.extractPortsFromProject = extractPortsFromProject;
|
|
60
69
|
/**
|
|
61
70
|
* Extract ports from package.json scripts
|
|
62
71
|
*/
|
package/dist/port-scanner.js
CHANGED
|
@@ -15,15 +15,27 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
15
15
|
}) : function(o, v) {
|
|
16
16
|
o["default"] = v;
|
|
17
17
|
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
};
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
25
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.
|
|
36
|
+
exports.scanProjectPorts = scanProjectPorts;
|
|
37
|
+
exports.scanAllProjectPorts = scanAllProjectPorts;
|
|
38
|
+
exports.shouldRescanPorts = shouldRescanPorts;
|
|
27
39
|
const core_bridge_1 = require("./core-bridge");
|
|
28
40
|
const port_extractor_1 = require("./port-extractor");
|
|
29
41
|
const fs = __importStar(require("fs"));
|
|
@@ -48,7 +60,6 @@ async function scanProjectPorts(projectId) {
|
|
|
48
60
|
db.addProjectPort(projectId, portInfo.port, portInfo.source, portInfo.script);
|
|
49
61
|
}
|
|
50
62
|
}
|
|
51
|
-
exports.scanProjectPorts = scanProjectPorts;
|
|
52
63
|
/**
|
|
53
64
|
* Scan ports for all projects
|
|
54
65
|
*/
|
|
@@ -65,7 +76,6 @@ async function scanAllProjectPorts() {
|
|
|
65
76
|
}
|
|
66
77
|
}
|
|
67
78
|
}
|
|
68
|
-
exports.scanAllProjectPorts = scanAllProjectPorts;
|
|
69
79
|
/**
|
|
70
80
|
* Check if ports need to be rescanned (stale check)
|
|
71
81
|
* Returns true if ports haven't been scanned in the last 24 hours
|
|
@@ -78,7 +88,6 @@ function shouldRescanPorts(projectId) {
|
|
|
78
88
|
}
|
|
79
89
|
// Check if any port was detected 24 hours ago or older
|
|
80
90
|
const twentyFourHoursAgo = Math.floor(Date.now() / 1000) - (24 * 60 * 60);
|
|
81
|
-
const needsRescan = ports.some(port => (port.last_detected || 0) <= twentyFourHoursAgo);
|
|
91
|
+
const needsRescan = ports.some((port) => (port.last_detected || 0) <= twentyFourHoursAgo);
|
|
82
92
|
return needsRescan;
|
|
83
93
|
}
|
|
84
|
-
exports.shouldRescanPorts = shouldRescanPorts;
|
package/dist/port-utils.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.detectPortInUse = detectPortInUse;
|
|
4
|
+
exports.getProcessOnPort = getProcessOnPort;
|
|
5
|
+
exports.killProcessOnPort = killProcessOnPort;
|
|
6
|
+
exports.extractPortFromError = extractPortFromError;
|
|
4
7
|
const child_process_1 = require("child_process");
|
|
5
8
|
const util_1 = require("util");
|
|
6
9
|
const execAsync = (0, util_1.promisify)(child_process_1.exec);
|
|
@@ -40,7 +43,6 @@ async function detectPortInUse(port) {
|
|
|
40
43
|
return false;
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
|
-
exports.detectPortInUse = detectPortInUse;
|
|
44
46
|
/**
|
|
45
47
|
* Get process information for a port (cross-platform)
|
|
46
48
|
*/
|
|
@@ -102,7 +104,6 @@ async function getProcessOnPort(port) {
|
|
|
102
104
|
return null;
|
|
103
105
|
}
|
|
104
106
|
}
|
|
105
|
-
exports.getProcessOnPort = getProcessOnPort;
|
|
106
107
|
/**
|
|
107
108
|
* Kill process(es) using a port (cross-platform)
|
|
108
109
|
*/
|
|
@@ -168,7 +169,6 @@ async function killProcessOnPort(port) {
|
|
|
168
169
|
return false;
|
|
169
170
|
}
|
|
170
171
|
}
|
|
171
|
-
exports.killProcessOnPort = killProcessOnPort;
|
|
172
172
|
/**
|
|
173
173
|
* Extract port number from error messages
|
|
174
174
|
* Handles common port conflict error patterns
|
|
@@ -198,4 +198,3 @@ function extractPortFromError(error) {
|
|
|
198
198
|
}
|
|
199
199
|
return null;
|
|
200
200
|
}
|
|
201
|
-
exports.extractPortFromError = extractPortFromError;
|
package/dist/prxi.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|