@futdevpro/ccap 1.1.2 → 1.1.4

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 (52) hide show
  1. package/cli/build/_collections/auto-start.util.d.ts.map +1 -1
  2. package/cli/build/_collections/auto-start.util.js +8 -12
  3. package/cli/build/_collections/auto-start.util.js.map +1 -1
  4. package/cli/build/_collections/process-control.util.d.ts +27 -0
  5. package/cli/build/_collections/process-control.util.d.ts.map +1 -0
  6. package/cli/build/_collections/process-control.util.js +172 -0
  7. package/cli/build/_collections/process-control.util.js.map +1 -0
  8. package/cli/build/_collections/setup-wizard.util.d.ts +5 -0
  9. package/cli/build/_collections/setup-wizard.util.d.ts.map +1 -1
  10. package/cli/build/_collections/setup-wizard.util.js +113 -94
  11. package/cli/build/_collections/setup-wizard.util.js.map +1 -1
  12. package/cli/build/_commands/restart.d.ts +2 -2
  13. package/cli/build/_commands/restart.d.ts.map +1 -1
  14. package/cli/build/_commands/restart.js +4 -14
  15. package/cli/build/_commands/restart.js.map +1 -1
  16. package/cli/build/_commands/start.d.ts +1 -8
  17. package/cli/build/_commands/start.d.ts.map +1 -1
  18. package/cli/build/_commands/start.js +3 -67
  19. package/cli/build/_commands/start.js.map +1 -1
  20. package/cli/build/_commands/status.js +3 -3
  21. package/cli/build/_commands/status.js.map +1 -1
  22. package/cli/build/_commands/stop.d.ts +1 -2
  23. package/cli/build/_commands/stop.d.ts.map +1 -1
  24. package/cli/build/_commands/stop.js +3 -33
  25. package/cli/build/_commands/stop.js.map +1 -1
  26. package/cli/build/_commands/update.d.ts +6 -0
  27. package/cli/build/_commands/update.d.ts.map +1 -0
  28. package/cli/build/_commands/update.js +26 -0
  29. package/cli/build/_commands/update.js.map +1 -0
  30. package/cli/build/program.js +13 -3
  31. package/cli/build/program.js.map +1 -1
  32. package/client-dist/browser/chunk-FMFEMJE7.js +218 -0
  33. package/client-dist/browser/{chunk-KJ7FQNUG.js → chunk-YV5G3XYV.js} +1 -1
  34. package/client-dist/browser/index.html +2 -2
  35. package/client-dist/browser/main-XZGF4SOO.js +2 -0
  36. package/client-dist/browser/styles-TSK27CYC.css +1 -0
  37. package/package.json +2 -1
  38. package/server/build/src/_modules/agent/assemble-conversation.control-service.js +4 -3
  39. package/server/build/src/_modules/agent/assemble-conversation.control-service.js.map +1 -1
  40. package/server/build/src/_modules/default-path/default-path.util-service.js +8 -0
  41. package/server/build/src/_modules/default-path/default-path.util-service.js.map +1 -1
  42. package/server/build/src/_modules/default-path/default-path.util-service.spec.js +10 -0
  43. package/server/build/src/_modules/default-path/default-path.util-service.spec.js.map +1 -1
  44. package/server/build/src/_modules/default-path/soul-file.util-service.js +15 -11
  45. package/server/build/src/_modules/default-path/soul-file.util-service.js.map +1 -1
  46. package/server/build/src/_routes/client-static/client-static.controller.js +7 -3
  47. package/server/build/src/_routes/client-static/client-static.controller.js.map +1 -1
  48. package/server/build/src/_routes/setup/setup.controller.js +23 -1
  49. package/server/build/src/_routes/setup/setup.controller.js.map +1 -1
  50. package/client-dist/browser/chunk-UTNU5A7U.js +0 -218
  51. package/client-dist/browser/main-RHNH7LDD.js +0 -2
  52. package/client-dist/browser/styles-VWWGDWT7.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"auto-start.util.d.ts","sourceRoot":"","sources":["../../src/_collections/auto-start.util.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBvE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAsBxD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BvD"}
1
+ {"version":3,"file":"auto-start.util.d.ts","sourceRoot":"","sources":["../../src/_collections/auto-start.util.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBvE;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAsBxD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBvD"}
@@ -6,10 +6,10 @@ exports.autoStartIfNeeded = autoStartIfNeeded;
6
6
  const tslib_1 = require("tslib");
7
7
  const http = tslib_1.__importStar(require("http"));
8
8
  const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
9
- const start_1 = require("../_commands/start");
9
+ const process_control_util_1 = require("./process-control.util");
10
10
  const config_util_1 = require("./config.util");
11
- /** Várakozási idő a server indulás után (ms). */
12
- const START_WAIT_MS = 3000;
11
+ /** Auto-start után legfeljebb ennyi ms-ig várunk a server health-re (ugyanúgy mint start parancsnál). */
12
+ const AUTO_START_WAIT_FOR_SERVER_MS = 30000;
13
13
  /** Polling interval a waitForServer-ban (ms). */
14
14
  const POLL_INTERVAL_MS = 1000;
15
15
  /**
@@ -57,18 +57,14 @@ async function autoStartIfNeeded() {
57
57
  return;
58
58
  }
59
59
  fsm_dynamo_1.DyFM_Log.info('CCAP server nem fut – automatikus indítás...');
60
- await (0, start_1.c_ccapStart)();
61
- // Várakozás az indulásra
62
- await new Promise((resolve) => {
63
- setTimeout(resolve, START_WAIT_MS);
64
- });
65
- // Újra ellenőrzés
66
- const runningAfterStart = await isServerRunning();
60
+ await (0, process_control_util_1.startServerAndClient)();
61
+ // Várakozás a server health-re (ha már futott, a PID miatt c_ccapStart azonnal visszatért – itt megvárjuk)
62
+ const runningAfterStart = await waitForServer(AUTO_START_WAIT_FOR_SERVER_MS);
67
63
  if (runningAfterStart) {
68
- fsm_dynamo_1.DyFM_Log.success('CCAP server elindult.');
64
+ fsm_dynamo_1.DyFM_Log.success('CCAP server elérhető.');
69
65
  }
70
66
  else {
71
- fsm_dynamo_1.DyFM_Log.error('CCAP server indítás sikertelen.'
67
+ fsm_dynamo_1.DyFM_Log.error('CCAP server nem vált elérhetővé a megadott időn belül.'
72
68
  + ' Indítsd manuálisan: ccap start');
73
69
  }
74
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auto-start.util.js","sourceRoot":"","sources":["../../src/_collections/auto-start.util.ts"],"names":[],"mappings":";;AAkBA,sCAkBC;AAKD,0CAsBC;AAMD,8CA6BC;;AAlGD,mDAA6B;AAE7B,sDAAiD;AAEjD,8CAAiD;AAEjD,+CAAiD;AAEjD,iDAAiD;AACjD,MAAM,aAAa,GAAW,IAAI,CAAC;AAEnC,iDAAiD;AACjD,MAAM,gBAAgB,GAAW,IAAI,CAAC;AAEtC;;;GAGG;AACI,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,QAAQ,GAAW,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAEhD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAY,MAAM,eAAe,EAAE,CAAC;QAEjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,OAAO,CACf,CAAC,OAAmB,EAAQ,EAAE;YAC5B,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACxC,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,MAAM,aAAa,GAAW,IAAA,8BAAgB,GAAE,CAAC;IAEjD,OAAO,IAAI,OAAO,CAChB,CAAC,OAAiC,EAAQ,EAAE;QAC1C,MAAM,GAAG,GAAuB,IAAI,CAAC,GAAG,CACtC,GAAG,aAAa,oBAAoB,EACpC,CAAC,GAAyB,EAAQ,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAS,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAS,EAAE;YAC9B,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAY,MAAM,eAAe,EAAE,CAAC;IAEjD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,qBAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAE9D,MAAM,IAAA,mBAAW,GAAE,CAAC;IAEpB,yBAAyB;IACzB,MAAM,IAAI,OAAO,CACf,CAAC,OAAmB,EAAQ,EAAE;QAC5B,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACrC,CAAC,CACF,CAAC;IAEF,kBAAkB;IAClB,MAAM,iBAAiB,GAAY,MAAM,eAAe,EAAE,CAAC;IAE3D,IAAI,iBAAiB,EAAE,CAAC;QACtB,qBAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,qBAAQ,CAAC,KAAK,CACZ,iCAAiC;cAC/B,iCAAiC,CACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"auto-start.util.js","sourceRoot":"","sources":["../../src/_collections/auto-start.util.ts"],"names":[],"mappings":";;AAiBA,sCAkBC;AAKD,0CAsBC;AAMD,8CAuBC;;AA3FD,mDAA6B;AAE7B,sDAAiD;AAEjD,iEAA8D;AAC9D,+CAAiD;AAEjD,yGAAyG;AACzG,MAAM,6BAA6B,GAAW,KAAK,CAAC;AAEpD,iDAAiD;AACjD,MAAM,gBAAgB,GAAW,IAAI,CAAC;AAEtC;;;GAGG;AACI,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,QAAQ,GAAW,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAEhD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAY,MAAM,eAAe,EAAE,CAAC;QAEjD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,OAAO,CACf,CAAC,OAAmB,EAAQ,EAAE;YAC5B,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACxC,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,MAAM,aAAa,GAAW,IAAA,8BAAgB,GAAE,CAAC;IAEjD,OAAO,IAAI,OAAO,CAChB,CAAC,OAAiC,EAAQ,EAAE;QAC1C,MAAM,GAAG,GAAuB,IAAI,CAAC,GAAG,CACtC,GAAG,aAAa,oBAAoB,EACpC,CAAC,GAAyB,EAAQ,EAAE;YAClC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;QAClC,CAAC,CACF,CAAC;QAEF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAS,EAAE;YACzB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,GAAS,EAAE;YAC9B,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,iBAAiB;IACrC,MAAM,OAAO,GAAY,MAAM,eAAe,EAAE,CAAC;IAEjD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,qBAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAE9D,MAAM,IAAA,2CAAoB,GAAE,CAAC;IAE7B,2GAA2G;IAC3G,MAAM,iBAAiB,GACrB,MAAM,aAAa,CAAC,6BAA6B,CAAC,CAAC;IAErD,IAAI,iBAAiB,EAAE,CAAC;QACtB,qBAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,qBAAQ,CAAC,KAAK,CACZ,wDAAwD;cACtD,iCAAiC,CACpC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Single source of truth: CCAP server és client indítás, leállítás, újraindítás.
3
+ * A start, stop, restart parancsok és a setup flow végén mind innen hívnak.
4
+ */
5
+ /** PID fájl elérési útja (server). */
6
+ export declare const PID_FILE_PATH: string;
7
+ /** PID fájl elérési útja (kliens). */
8
+ export declare const CLIENT_PID_FILE_PATH: string;
9
+ /**
10
+ * Server és kliens indítása háttérben.
11
+ * Ha valamelyik már fut (érvényes PID), azt nem indítjuk újra; csak a hiányzót.
12
+ */
13
+ export declare function startServerAndClient(): Promise<void>;
14
+ /**
15
+ * Server és kliens leállítása. Előbb kliens, majd server.
16
+ */
17
+ export declare function stopServerAndClient(): void;
18
+ /**
19
+ * Újraindítás: stop, várakozás, start.
20
+ */
21
+ export declare function restartServerAndClient(): Promise<void>;
22
+ /**
23
+ * Setup flow végén: ha bármelyik fut, újraindítjuk; ha egyik sem, elindítjuk.
24
+ * Egy helyen kezeli az „indítsd újra ha futott, indítsd ha nem” ellentmondást.
25
+ */
26
+ export declare function ensureRunningAfterSetup(): Promise<void>;
27
+ //# sourceMappingURL=process-control.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-control.util.d.ts","sourceRoot":"","sources":["../../src/_collections/process-control.util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,sCAAsC;AACtC,eAAO,MAAM,aAAa,EAAE,MAG3B,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,oBAAoB,EAAE,MAGlC,CAAC;AAyEF;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAkE1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAW1C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAS5D;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAS7D"}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ /**
3
+ * Single source of truth: CCAP server és client indítás, leállítás, újraindítás.
4
+ * A start, stop, restart parancsok és a setup flow végén mind innen hívnak.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CLIENT_PID_FILE_PATH = exports.PID_FILE_PATH = void 0;
8
+ exports.startServerAndClient = startServerAndClient;
9
+ exports.stopServerAndClient = stopServerAndClient;
10
+ exports.restartServerAndClient = restartServerAndClient;
11
+ exports.ensureRunningAfterSetup = ensureRunningAfterSetup;
12
+ const tslib_1 = require("tslib");
13
+ const child_process_1 = require("child_process");
14
+ const fs = tslib_1.__importStar(require("fs"));
15
+ const path = tslib_1.__importStar(require("path"));
16
+ const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
17
+ const config_util_1 = require("./config.util");
18
+ const version_const_1 = require("./version.const");
19
+ /** PID fájl elérési útja (server). */
20
+ exports.PID_FILE_PATH = path.join(process.env.HOME ?? process.env.USERPROFILE ?? '.', '.ccap-server.pid');
21
+ /** PID fájl elérési útja (kliens). */
22
+ exports.CLIENT_PID_FILE_PATH = path.join(process.env.HOME ?? process.env.USERPROFILE ?? '.', '.ccap-client.pid');
23
+ /** Várakozás a port felszabadulásra restart után (ms). */
24
+ const RESTART_DELAY_MS = 2000;
25
+ /**
26
+ * Megnézi, hogy a megadott PID-ű process még fut-e (0 signal = csak ellenőrzés).
27
+ */
28
+ function isProcessAlive(pid) {
29
+ try {
30
+ process.kill(pid, 0);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ /**
38
+ * Ha a pidFilePath létezik, ellenőrzi, hogy a process fut-e; ha nem, törli a fájlt.
39
+ * Visszatérés: true ha a process fut, false ha nincs/nem fut.
40
+ */
41
+ function ensurePidFileValid(pidFilePath, label) {
42
+ if (!fs.existsSync(pidFilePath)) {
43
+ return false;
44
+ }
45
+ const pidStr = fs.readFileSync(pidFilePath, 'utf-8').trim();
46
+ const pid = parseInt(pidStr, 10);
47
+ if (Number.isNaN(pid) || !isProcessAlive(pid)) {
48
+ try {
49
+ fs.unlinkSync(pidFilePath);
50
+ }
51
+ catch {
52
+ // ignore
53
+ }
54
+ fsm_dynamo_1.DyFM_Log.info(`CCAP ${label} (PID: ${pidStr}) már nem fut. PID fájl törölve.`);
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ /**
60
+ * Egy PID fájl alapján leállítja a process-t (SIGTERM), majd törli a fájlt.
61
+ */
62
+ function stopProcessByPidFile(pidFilePath, label) {
63
+ if (!fs.existsSync(pidFilePath)) {
64
+ return;
65
+ }
66
+ const pid = fs.readFileSync(pidFilePath, 'utf-8').trim();
67
+ const pidNumber = parseInt(pid, 10);
68
+ try {
69
+ process.kill(pidNumber, 'SIGTERM');
70
+ fs.unlinkSync(pidFilePath);
71
+ fsm_dynamo_1.DyFM_Log.success(`CCAP ${label} leállítva (PID: ${pid}).`);
72
+ }
73
+ catch {
74
+ fs.unlinkSync(pidFilePath);
75
+ fsm_dynamo_1.DyFM_Log.info(`CCAP ${label} process (PID: ${pid}) már nem fut. PID fájl törölve.`);
76
+ }
77
+ }
78
+ /**
79
+ * Server és kliens indítása háttérben.
80
+ * Ha valamelyik már fut (érvényes PID), azt nem indítjuk újra; csak a hiányzót.
81
+ */
82
+ async function startServerAndClient() {
83
+ fsm_dynamo_1.DyFM_Log.info(`CCAP v${version_const_1.CCAP_VERSION}`);
84
+ const repoRoot = path.resolve(__dirname, '..', '..', '..');
85
+ const serverEntry = path.join(repoRoot, 'server', 'build', 'src', 'index.js');
86
+ if (!fs.existsSync(serverEntry)) {
87
+ fsm_dynamo_1.DyFM_Log.error(`Server entry pont nem található: ${serverEntry}`
88
+ + ` – futtasd előbb a "pnpm run build" parancsot a server mappában.`);
89
+ return;
90
+ }
91
+ const serverRunning = ensurePidFileValid(exports.PID_FILE_PATH, 'server');
92
+ if (serverRunning) {
93
+ fsm_dynamo_1.DyFM_Log.info(`CCAP server már fut (van .ccap-server.pid). Használd a "ccap restart" parancsot az újraindításhoz.`);
94
+ }
95
+ else {
96
+ const serverChild = (0, child_process_1.fork)(serverEntry, [], {
97
+ detached: true,
98
+ stdio: 'ignore',
99
+ });
100
+ if (!serverChild.pid) {
101
+ fsm_dynamo_1.DyFM_Log.error('CCAP server indítása sikertelen.');
102
+ return;
103
+ }
104
+ fs.writeFileSync(exports.PID_FILE_PATH, String(serverChild.pid), 'utf-8');
105
+ serverChild.unref();
106
+ fsm_dynamo_1.DyFM_Log.success(`CCAP server elindult (PID: ${serverChild.pid}).`);
107
+ }
108
+ const clientDir = path.join(repoRoot, 'client');
109
+ const clientPackagePath = path.join(clientDir, 'package.json');
110
+ if (!fs.existsSync(clientPackagePath)) {
111
+ fsm_dynamo_1.DyFM_Log.info(`Kliens mappa nincs (pl. globális install) – a kliens UI a serverről érhető el.`);
112
+ fsm_dynamo_1.DyFM_Log.info(`Nyisd meg a böngészőben: ${(0, config_util_1.getServerBaseUrl)()}`);
113
+ return;
114
+ }
115
+ const clientRunning = ensurePidFileValid(exports.CLIENT_PID_FILE_PATH, 'client');
116
+ if (clientRunning) {
117
+ fsm_dynamo_1.DyFM_Log.info('CCAP client már fut (van .ccap-client.pid). Használd a "ccap restart" parancsot az újraindításhoz.');
118
+ return;
119
+ }
120
+ const clientChild = (0, child_process_1.spawn)('npm', ['run', 'serve'], {
121
+ cwd: clientDir,
122
+ detached: true,
123
+ stdio: 'ignore',
124
+ });
125
+ if (clientChild.pid) {
126
+ fs.writeFileSync(exports.CLIENT_PID_FILE_PATH, String(clientChild.pid), 'utf-8');
127
+ clientChild.unref();
128
+ fsm_dynamo_1.DyFM_Log.success(`CCAP client elindult (PID: ${clientChild.pid}).`);
129
+ }
130
+ else {
131
+ fsm_dynamo_1.DyFM_Log.info('CCAP client indítása sikertelen (npm run serve).');
132
+ }
133
+ }
134
+ /**
135
+ * Server és kliens leállítása. Előbb kliens, majd server.
136
+ */
137
+ function stopServerAndClient() {
138
+ const clientRunning = fs.existsSync(exports.CLIENT_PID_FILE_PATH);
139
+ const serverRunning = fs.existsSync(exports.PID_FILE_PATH);
140
+ if (!clientRunning && !serverRunning) {
141
+ fsm_dynamo_1.DyFM_Log.info('CCAP service-ek nem futnak (nincs PID fájl).');
142
+ return;
143
+ }
144
+ stopProcessByPidFile(exports.CLIENT_PID_FILE_PATH, 'client');
145
+ stopProcessByPidFile(exports.PID_FILE_PATH, 'server');
146
+ }
147
+ /**
148
+ * Újraindítás: stop, várakozás, start.
149
+ */
150
+ async function restartServerAndClient() {
151
+ fsm_dynamo_1.DyFM_Log.info('CCAP újraindítás...');
152
+ stopServerAndClient();
153
+ await new Promise((resolve) => {
154
+ setTimeout(resolve, RESTART_DELAY_MS);
155
+ });
156
+ await startServerAndClient();
157
+ }
158
+ /**
159
+ * Setup flow végén: ha bármelyik fut, újraindítjuk; ha egyik sem, elindítjuk.
160
+ * Egy helyen kezeli az „indítsd újra ha futott, indítsd ha nem” ellentmondást.
161
+ */
162
+ async function ensureRunningAfterSetup() {
163
+ const serverRunning = ensurePidFileValid(exports.PID_FILE_PATH, 'server');
164
+ const clientRunning = ensurePidFileValid(exports.CLIENT_PID_FILE_PATH, 'client');
165
+ if (serverRunning || clientRunning) {
166
+ await restartServerAndClient();
167
+ }
168
+ else {
169
+ await startServerAndClient();
170
+ }
171
+ }
172
+ //# sourceMappingURL=process-control.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-control.util.js","sourceRoot":"","sources":["../../src/_collections/process-control.util.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * Setup wizard: 12 lépéses interaktív CLI (REQ-SYS-007).
3
+ * @inquirer/prompts (select, checkbox, input, confirm); CCAP CLI + CCAP Client mindig aktív.
4
+ */
1
5
  import { CCAP_SetupAiProviderConfig_Interface, CCAP_SetupMessageProviderConfig_Interface } from './setup.util';
2
6
  /** Wizard állapot (összegyűjtött mezők). */
3
7
  export interface CCAP_SetupWizardState_Interface {
@@ -15,6 +19,7 @@ export interface CCAP_SetupWizardState_Interface {
15
19
  /**
16
20
  * Teljes setup wizard (12 lépés) futtatása.
17
21
  * Feltételezi: server fut (ensureSetupBeforeRun már meghívva).
22
+ * REQ-SYS-007: interaktív promptok (@inquirer/prompts), CCAP CLI + CCAP Client fixen aktívak.
18
23
  */
19
24
  export declare function runSetupWizard(params: {
20
25
  startChat: () => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"setup-wizard.util.d.ts","sourceRoot":"","sources":["../../src/_collections/setup-wizard.util.ts"],"names":[],"mappings":"AAQA,OAAO,EAKL,oCAAoC,EACpC,yCAAyC,EAC1C,MAAM,cAAc,CAAC;AAEtB,4CAA4C;AAC5C,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IACvE,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAsUD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuChB"}
1
+ {"version":3,"file":"setup-wizard.util.d.ts","sourceRoot":"","sources":["../../src/_collections/setup-wizard.util.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAKL,oCAAoC,EACpC,yCAAyC,EAC1C,MAAM,cAAc,CAAC;AAEtB,4CAA4C;AAC5C,MAAM,WAAW,+BAA+B;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IACvE,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;IACjF,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAqTD;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChB"}
@@ -1,25 +1,32 @@
1
1
  "use strict";
2
+ /**
3
+ * Setup wizard: 12 lépéses interaktív CLI (REQ-SYS-007).
4
+ * @inquirer/prompts (select, checkbox, input, confirm); CCAP CLI + CCAP Client mindig aktív.
5
+ */
2
6
  Object.defineProperty(exports, "__esModule", { value: true });
3
7
  exports.runSetupWizard = runSetupWizard;
4
8
  const tslib_1 = require("tslib");
5
9
  const crypto = tslib_1.__importStar(require("crypto"));
6
10
  const fs = tslib_1.__importStar(require("fs"));
7
11
  const path = tslib_1.__importStar(require("path"));
8
- const readline = tslib_1.__importStar(require("readline"));
12
+ const prompts_1 = require("@inquirer/prompts");
9
13
  const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
10
14
  const config_util_1 = require("./config.util");
15
+ const process_control_util_1 = require("./process-control.util");
11
16
  const setup_util_1 = require("./setup.util");
12
- const AI_PROVIDER_IDS = ['open-ai', 'custom-local-ai'];
13
- const MESSAGE_PROVIDER_IDS = ['discord', 'ccap-cli', 'ccap-client'];
17
+ /** AI providerek, amelyekből multiselect-tel választhat a user. */
18
+ const AI_PROVIDER_CHOICES = [
19
+ { value: 'open-ai', name: 'OpenAI' },
20
+ { value: 'custom-local-ai', name: 'Custom Local AI' },
21
+ ];
22
+ /** Fix message providerek – mindig aktívak, nem jelennek meg választólistában. */
23
+ const FIX_MESSAGE_PROVIDERS = ['ccap-cli', 'ccap-client'];
24
+ /** Opcionális message providerek – ezekből multiselect. */
25
+ const OPTIONAL_MESSAGE_PROVIDER_CHOICES = [
26
+ { value: 'discord', name: 'Discord' },
27
+ ];
14
28
  const DEFAULT_MONGO_URI = 'mongodb://0.0.0.0:29017';
15
29
  const CCAP_DIR = path.join(process.env.HOME ?? process.env.USERPROFILE ?? '.', '.ccap');
16
- function ask(rl, question) {
17
- return new Promise((resolve) => {
18
- rl.question(question, (answer) => {
19
- resolve(answer ?? '');
20
- });
21
- });
22
- }
23
30
  /**
24
31
  * Lépés 1: Kliens URL kiírása.
25
32
  */
@@ -32,14 +39,22 @@ function step1PrintUrl() {
32
39
  fsm_dynamo_1.DyFM_Log.info('---');
33
40
  }
34
41
  /**
35
- * Lépés 2: Vault key – generálás vagy saját (lokálisan fájlba).
42
+ * Lépés 2: Vault key – generálás vagy saját (select + opcionális input).
36
43
  */
37
- async function step2VaultKey(rl, state) {
44
+ async function step2VaultKey(state) {
38
45
  fsm_dynamo_1.DyFM_Log.info('Vault key: sajátot akkor érdemes megadni, ha közös MongoDB-t használsz több agenttel.');
39
- const choice = await ask(rl, 'Generáljunk új vault key-t (1) vagy megadsz sajátot (2)? [1]: ');
46
+ const choice = await (0, prompts_1.select)({
47
+ message: 'Vault key',
48
+ choices: [
49
+ { value: 'generate', name: 'Generáljunk új vault key-t' },
50
+ { value: 'custom', name: 'Megadok saját vault key-t' },
51
+ ],
52
+ });
40
53
  const keyPath = path.join(CCAP_DIR, 'vault-master.key');
41
- if ((choice.trim() || '1') === '2') {
42
- const custom = await ask(rl, 'Add meg a vault master key-et: ');
54
+ if (choice === 'custom') {
55
+ const custom = await (0, prompts_1.input)({
56
+ message: 'Add meg a vault master key-et',
57
+ });
43
58
  if (custom.trim()) {
44
59
  if (!fs.existsSync(CCAP_DIR)) {
45
60
  fs.mkdirSync(CCAP_DIR, { recursive: true });
@@ -61,98 +76,101 @@ async function step2VaultKey(rl, state) {
61
76
  }
62
77
  }
63
78
  /**
64
- * Lépés 3: MongoDB address.
79
+ * Lépés 3: MongoDB address (input, default értékkel).
65
80
  */
66
- async function step3MongoDb(rl, state) {
67
- const input = await ask(rl, `MongoDB address (Enter = ${DEFAULT_MONGO_URI}): `);
68
- state.mongodbUri = input.trim() || DEFAULT_MONGO_URI;
81
+ async function step3MongoDb(state) {
82
+ const value = await (0, prompts_1.input)({
83
+ message: 'MongoDB address',
84
+ default: DEFAULT_MONGO_URI,
85
+ });
86
+ state.mongodbUri = value.trim() || DEFAULT_MONGO_URI;
69
87
  }
70
88
  /**
71
- * Lépés 4: AI providerek multiselect + per-provider.
89
+ * Lépés 4: AI providerek multiselect + per-provider beállítás (input).
72
90
  */
73
- async function step4AiProviders(rl, state) {
74
- fsm_dynamo_1.DyFM_Log.info('AI providerek: 1=open-ai, 2=custom-local-ai (többet vesszővel, pl. 1,2)');
75
- const sel = await ask(rl, 'Válassz (pl. 1,2): ');
76
- const chosen = [];
77
- const parts = sel.split(',').map((p) => p.trim());
78
- for (const p of parts) {
79
- if (p === '1') {
80
- chosen.push('open-ai');
81
- }
82
- else if (p === '2') {
83
- chosen.push('custom-local-ai');
84
- }
85
- }
91
+ async function step4AiProviders(state) {
92
+ const chosen = await (0, prompts_1.checkbox)({
93
+ message: 'Milyen AI providereket szeretnél beállítani?',
94
+ choices: AI_PROVIDER_CHOICES,
95
+ required: true,
96
+ });
86
97
  state.enabledAiProviders = chosen.length > 0 ? chosen : ['open-ai'];
87
98
  state.aiProviderConfig = {};
88
99
  for (const id of state.enabledAiProviders) {
89
100
  if (id === 'open-ai') {
90
- const apiKey = await ask(rl, 'OpenAI API key: ');
91
- const model = await ask(rl, 'OpenAI model (Enter = gpt-4o): ');
101
+ const apiKey = await (0, prompts_1.input)({ message: 'OpenAI API key' });
102
+ const model = await (0, prompts_1.input)({
103
+ message: 'OpenAI model',
104
+ default: 'gpt-4o',
105
+ });
92
106
  state.aiProviderConfig[id] = {
93
107
  apiKey: apiKey.trim(),
94
108
  model: model.trim() || 'gpt-4o',
95
109
  };
96
110
  }
97
111
  else if (id === 'custom-local-ai') {
98
- const baseUrl = await ask(rl, 'Local AI base URL (pl. http://localhost:1234/v1): ');
112
+ const baseUrl = await (0, prompts_1.input)({
113
+ message: 'Local AI base URL (pl. http://localhost:1234/v1)',
114
+ });
99
115
  state.aiProviderConfig[id] = { baseUrl: baseUrl.trim() };
100
116
  }
101
117
  }
102
118
  }
103
119
  /**
104
- * Lépés 5: Message providerek multiselect + per-provider.
120
+ * Lépés 5: Message providerek CCAP CLI + Client fixen aktívak; többi multiselect (REQ-SYS-007).
105
121
  */
106
- async function step5MessageProviders(rl, state) {
107
- fsm_dynamo_1.DyFM_Log.info('Message providerek: 1=discord, 2=ccap-cli, 3=ccap-client (többet vesszővel)');
108
- const sel = await ask(rl, 'Válassz (pl. 1,2,3): ');
109
- const chosen = [];
110
- const parts = sel.split(',').map((p) => p.trim());
111
- for (const p of parts) {
112
- if (p === '1') {
113
- chosen.push('discord');
114
- }
115
- else if (p === '2') {
116
- chosen.push('ccap-cli');
117
- }
118
- else if (p === '3') {
119
- chosen.push('ccap-client');
120
- }
122
+ async function step5MessageProviders(state) {
123
+ state.enabledMessageProviders = [...FIX_MESSAGE_PROVIDERS];
124
+ if (OPTIONAL_MESSAGE_PROVIDER_CHOICES.length === 0) {
125
+ state.messageProviderConfig = {};
126
+ return;
127
+ }
128
+ const chosenOptional = await (0, prompts_1.checkbox)({
129
+ message: 'Melyik további message providereket szeretnéd? (CCAP CLI és CCAP Client mindig aktívak.)',
130
+ choices: OPTIONAL_MESSAGE_PROVIDER_CHOICES,
131
+ });
132
+ for (const id of chosenOptional) {
133
+ state.enabledMessageProviders.push(id);
121
134
  }
122
- state.enabledMessageProviders =
123
- chosen.length > 0 ? chosen : ['ccap-cli', 'ccap-client'];
124
135
  state.messageProviderConfig = {};
125
136
  if (state.enabledMessageProviders.includes('discord')) {
126
- const token = await ask(rl, 'Discord bot token: ');
137
+ const token = await (0, prompts_1.input)({ message: 'Discord bot token' });
127
138
  state.messageProviderConfig['discord'] = { botToken: token.trim() };
128
139
  }
129
140
  }
130
141
  /**
131
- * Lépés 6: OpenClaw env.
142
+ * Lépés 6: OpenClaw env (confirm).
132
143
  */
133
- async function step6OpenClaw(rl, state) {
134
- const input = await ask(rl, 'Használd az OpenClaw environment-et? (I/n): ');
135
- state.useOpenClawPath =
136
- input.trim().toLowerCase() !== 'n' && input.trim().toLowerCase() !== 'no';
144
+ async function step6OpenClaw(state) {
145
+ state.useOpenClawPath = await (0, prompts_1.confirm)({
146
+ message: 'Használd az OpenClaw environment-et?',
147
+ default: false,
148
+ });
137
149
  }
138
150
  /**
139
- * Lépés 7: Default path override.
151
+ * Lépés 7: Default path override (input, opcionális).
140
152
  */
141
- async function step7DefaultPath(rl, state) {
142
- const input = await ask(rl, 'Default path override (Enter = nem): ');
143
- state.defaultPathOverride = input.trim();
153
+ async function step7DefaultPath(state) {
154
+ const value = await (0, prompts_1.input)({
155
+ message: 'Default path override (Enter = nem)',
156
+ default: '',
157
+ });
158
+ state.defaultPathOverride = value.trim();
144
159
  }
145
160
  /**
146
- * Lépés 8: Soul – ellenőrzés, opcionális generálás.
161
+ * Lépés 8: Soul – ellenőrzés, opcionális generálás (confirm + postGenerateSoul).
147
162
  */
148
- async function step8Soul(rl, state) {
163
+ async function step8Soul(state) {
149
164
  const status = await (0, setup_util_1.getSoulStatus)();
150
165
  if (status.hasSoul) {
151
166
  fsm_dynamo_1.DyFM_Log.info('Soul fájl már létezik.');
152
167
  return;
153
168
  }
154
- const input = await ask(rl, 'Nincs soul fájl. Generáljunk alap soul-t LLM-mel? (I/n): ');
155
- if (input.trim().toLowerCase() === 'n' || input.trim().toLowerCase() === 'no') {
169
+ const generate = await (0, prompts_1.confirm)({
170
+ message: 'Nincs soul fájl. Generáljunk alap soul-t LLM-mel?',
171
+ default: true,
172
+ });
173
+ if (!generate) {
156
174
  return;
157
175
  }
158
176
  const openaiKey = state.aiProviderConfig['open-ai']?.apiKey ?? '';
@@ -179,12 +197,13 @@ function step9Summary(state) {
179
197
  fsm_dynamo_1.DyFM_Log.info('-------------------');
180
198
  }
181
199
  /**
182
- * Lépés 10: Auto start with system.
200
+ * Lépés 10: Auto start with system (confirm).
183
201
  */
184
- async function step10AutoStart(rl, state) {
185
- const input = await ask(rl, 'Auto start with system (rendszer indításakor induljon)? (i/N): ');
186
- state.autoStartWithSystem =
187
- input.trim().toLowerCase() === 'i' || input.trim().toLowerCase() === 'igen';
202
+ async function step10AutoStart(state) {
203
+ state.autoStartWithSystem = await (0, prompts_1.confirm)({
204
+ message: 'Auto start with system (rendszer indításakor induljon)?',
205
+ default: false,
206
+ });
188
207
  }
189
208
  /**
190
209
  * Lépés 11: POST /api/setup – mentés.
@@ -219,13 +238,17 @@ async function step11Submit(state) {
219
238
  return false;
220
239
  }
221
240
  /**
222
- * Lépés 12: Folytatás CLI vagy kliens.
241
+ * Lépés 12: Folytatás CLI vagy kliens (select).
223
242
  */
224
- async function step12Continue(rl, startChat) {
225
- const input = await ask(rl, 'Folytatás: CLI chat (1) vagy kliens oldal (2)? [1]: ');
226
- const choice = (input.trim() || '1').trim();
227
- rl.close();
228
- if (choice === '2') {
243
+ async function step12Continue(startChat) {
244
+ const choice = await (0, prompts_1.select)({
245
+ message: 'Hol szeretnéd folytatni?',
246
+ choices: [
247
+ { value: 'cli', name: 'CLI chat' },
248
+ { value: 'client', name: 'Kliens oldal (URL kiírása)' },
249
+ ],
250
+ });
251
+ if (choice === 'client') {
229
252
  const clientUrl = (0, config_util_1.getClientBaseUrl)();
230
253
  fsm_dynamo_1.DyFM_Log.info(`Kliens chat: ${clientUrl}/session`);
231
254
  }
@@ -236,12 +259,9 @@ async function step12Continue(rl, startChat) {
236
259
  /**
237
260
  * Teljes setup wizard (12 lépés) futtatása.
238
261
  * Feltételezi: server fut (ensureSetupBeforeRun már meghívva).
262
+ * REQ-SYS-007: interaktív promptok (@inquirer/prompts), CCAP CLI + CCAP Client fixen aktívak.
239
263
  */
240
264
  async function runSetupWizard(params) {
241
- const rl = readline.createInterface({
242
- input: process.stdin,
243
- output: process.stdout,
244
- });
245
265
  const state = {
246
266
  mongodbUri: DEFAULT_MONGO_URI,
247
267
  useOpenClawPath: false,
@@ -255,21 +275,20 @@ async function runSetupWizard(params) {
255
275
  };
256
276
  fsm_dynamo_1.DyFM_Log.info('CCAP Setup – 12 lépéses wizard');
257
277
  step1PrintUrl();
258
- await step2VaultKey(rl, state);
259
- await step3MongoDb(rl, state);
260
- await step4AiProviders(rl, state);
261
- await step5MessageProviders(rl, state);
262
- await step6OpenClaw(rl, state);
263
- await step7DefaultPath(rl, state);
264
- await step8Soul(rl, state);
278
+ await step2VaultKey(state);
279
+ await step3MongoDb(state);
280
+ await step4AiProviders(state);
281
+ await step5MessageProviders(state);
282
+ await step6OpenClaw(state);
283
+ await step7DefaultPath(state);
284
+ await step8Soul(state);
265
285
  step9Summary(state);
266
- await step10AutoStart(rl, state);
286
+ await step10AutoStart(state);
267
287
  const ok = await step11Submit(state);
268
288
  if (!ok) {
269
- rl.close();
270
289
  return;
271
290
  }
272
- fsm_dynamo_1.DyFM_Log.info('Indítsd újra a szervert (ccap restart), ha már futott.');
273
- await step12Continue(rl, params.startChat);
291
+ await (0, process_control_util_1.ensureRunningAfterSetup)();
292
+ await step12Continue(params.startChat);
274
293
  }
275
294
  //# sourceMappingURL=setup-wizard.util.js.map