@futdevpro/ccap 1.1.2654 → 1.1.2678
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/client-dist/{agent-instances.module-WRHXJGOG.js → agent-instances.module-57SLDNGT.js} +2 -2
- package/client-dist/{ca.module-WRRG6OCX.js → ca.module-7YEQLFCE.js} +2 -2
- package/client-dist/{cc.module-ENMKDGTO.js → cc.module-ZQRUJ2NA.js} +2 -2
- package/client-dist/{chunk-PM3PM5F5.js → chunk-3HKZQ6QH.js} +2 -2
- package/client-dist/{chunk-OO7ZXWDK.js → chunk-3O7GOMXE.js} +2 -2
- package/client-dist/{chunk-2BXZK757.js → chunk-46TROZ73.js} +2 -2
- package/client-dist/{chunk-NZQNHVSI.js → chunk-47OXWMO7.js} +2 -2
- package/client-dist/{chunk-255YTLCK.js → chunk-4BLOQJUZ.js} +2 -2
- package/client-dist/{chunk-MR5XA67R.js → chunk-4EWKZ7VX.js} +2 -2
- package/client-dist/{chunk-MVUT5LXS.js → chunk-55GMH22H.js} +2 -2
- package/client-dist/{chunk-PTGZ7SJJ.js → chunk-5BTF5S42.js} +2 -2
- package/client-dist/{chunk-QIRN5IIK.js → chunk-5PHMZ2PC.js} +2 -2
- package/client-dist/{chunk-KLOLLWQQ.js → chunk-5UZMSDHX.js} +2 -2
- package/client-dist/{chunk-HJLXZR6C.js → chunk-5WVHNGPP.js} +2 -2
- package/client-dist/{chunk-SRDISLMD.js → chunk-7TB2WG7K.js} +2 -2
- package/client-dist/{chunk-AUUGDAUL.js → chunk-7XLL7NID.js} +2 -2
- package/client-dist/{chunk-H6PKRAKC.js → chunk-AOLSZNC7.js} +2 -2
- package/client-dist/{chunk-R5YKSCH2.js → chunk-B2FB57VV.js} +2 -2
- package/client-dist/{chunk-VFBBAM67.js → chunk-B42T7WZA.js} +2 -2
- package/client-dist/{chunk-UWZYJKRW.js → chunk-BF24ZE6G.js} +2 -2
- package/client-dist/{chunk-BKYHWLA2.js → chunk-C4NA4HMD.js} +2 -2
- package/client-dist/{chunk-MGXZBMAI.js → chunk-CEOMFFZ6.js} +2 -2
- package/client-dist/{chunk-RE5Q7AQB.js → chunk-CN4NGPWP.js} +2 -2
- package/client-dist/{chunk-HM4OTDPI.js → chunk-CYFJDAU7.js} +2 -2
- package/client-dist/{chunk-2PBXAMU4.js → chunk-D55TUAWH.js} +2 -2
- package/client-dist/{chunk-65VFBUBX.js → chunk-FDETPIGK.js} +2 -2
- package/client-dist/{chunk-6Y34IH3F.js → chunk-FL2V7XCW.js} +2 -2
- package/client-dist/{chunk-Z6LK3IRI.js → chunk-FLBZDJPT.js} +2 -2
- package/client-dist/{chunk-O5IOSFEZ.js → chunk-GQV6D7YE.js} +2 -2
- package/client-dist/{chunk-UAYQOBBD.js → chunk-GZPA5HIL.js} +2 -2
- package/client-dist/{chunk-TAYROCOU.js → chunk-HH2Y4XQ3.js} +2 -2
- package/client-dist/{chunk-2UG6WXXP.js → chunk-I6Z5TNSY.js} +2 -2
- package/client-dist/{chunk-GXKOZ54H.js → chunk-IP3XY3MI.js} +2 -2
- package/client-dist/{chunk-GXKOZ54H.js.map → chunk-IP3XY3MI.js.map} +1 -1
- package/client-dist/{chunk-T32ST6OQ.js → chunk-K5XBE7SE.js} +2 -2
- package/client-dist/chunk-NKJRWTWR.js +18 -0
- package/client-dist/chunk-NKJRWTWR.js.map +7 -0
- package/client-dist/{chunk-CAHXKEWC.js → chunk-NU7PEHG3.js} +2 -2
- package/client-dist/{chunk-7QMVGTET.js → chunk-O3AIEHAX.js} +2 -2
- package/client-dist/{chunk-WOTQUQ5U.js → chunk-OCRY4GPS.js} +2 -2
- package/client-dist/{chunk-3BMZH55Z.js → chunk-OQQ4QRSE.js} +2 -2
- package/client-dist/{chunk-OF5XPPWX.js → chunk-P2UDIE7N.js} +2 -2
- package/client-dist/{chunk-VAZ4352K.js → chunk-PLOUSLDF.js} +2 -2
- package/client-dist/{chunk-KQ6RKBBW.js → chunk-Q6XEN3YG.js} +2 -2
- package/client-dist/{chunk-U4PMKYLN.js → chunk-R3GWWEAD.js} +2 -2
- package/client-dist/{chunk-WTUYJT46.js → chunk-RCDIEL4H.js} +2 -2
- package/client-dist/{chunk-NQLAJ7T4.js → chunk-RCVRN6Z2.js} +2 -2
- package/client-dist/{chunk-XI353JYH.js → chunk-SKP32LN3.js} +2 -2
- package/client-dist/{chunk-KSFWE4O2.js → chunk-SUKJ3JUX.js} +2 -2
- package/client-dist/{chunk-EIA5CAYG.js → chunk-T253RW73.js} +2 -2
- package/client-dist/{chunk-OFS5VM34.js → chunk-TBLNL5EM.js} +2 -2
- package/client-dist/{chunk-X63J4SYV.js → chunk-TUG3SWTI.js} +2 -2
- package/client-dist/{chunk-2I4UVN5M.js → chunk-U7F772X5.js} +2 -2
- package/client-dist/{chunk-MYWLR4W4.js → chunk-UPSZTEUC.js} +2 -2
- package/client-dist/{chunk-RSXBSBEM.js → chunk-UZAOBHKH.js} +2 -2
- package/client-dist/{chunk-GDPZSPXZ.js → chunk-WHY6Q25D.js} +2 -2
- package/client-dist/chunk-WHY6Q25D.js.map +7 -0
- package/client-dist/{chunk-UGU6H36A.js → chunk-YMGBYK2E.js} +2 -2
- package/client-dist/{chunk-QRNA2YDU.js → chunk-YSCAIGTV.js} +2 -2
- package/client-dist/{chunk-SU2KP2AJ.js → chunk-Z52KW27H.js} +2 -2
- package/client-dist/{chunk-W2ZNTZUV.js → chunk-ZFIOMFSD.js} +2 -2
- package/client-dist/{chunk-YLHY2HN2.js → chunk-ZG5SMVYD.js} +2 -2
- package/client-dist/{consultant.module-QGROFGTQ.js → consultant.module-POZHY2EP.js} +2 -2
- package/client-dist/{crd.module-YMIJIXBS.js → crd.module-Z4PJ7FDF.js} +2 -2
- package/client-dist/{dashboard.module-YUAYG77U.js → dashboard.module-VUSPPQCL.js} +2 -2
- package/client-dist/do.module-5I2LGJBB.js +18 -0
- package/client-dist/do.module-5I2LGJBB.js.map +7 -0
- package/client-dist/{document-library.module-TPHZOMD5.js → document-library.module-HLC4IW4I.js} +2 -2
- package/client-dist/{embedding-eval.module-XCNEY7ZW.js → embedding-eval.module-UHL5GVM5.js} +2 -2
- package/client-dist/{embedding-registry.module-FKTQGZPO.js → embedding-registry.module-6RFQC4DO.js} +2 -2
- package/client-dist/{err.module-6YTZPBSI.js → err.module-2LHZ2MNQ.js} +2 -2
- package/client-dist/{feedback.module-FXH4A2ZD.js → feedback.module-XF64MIM7.js} +2 -2
- package/client-dist/{host-runtime-mcp.module-QI343A2Q.js → host-runtime-mcp.module-DC6ADXTG.js} +2 -2
- package/client-dist/index.html +1 -1
- package/client-dist/{live-dev-pipeline.module-SH2WEZTD.js → live-dev-pipeline.module-PRAVJPON.js} +2 -2
- package/client-dist/{logs.module-KTANRNDB.js → logs.module-CR6DTVWV.js} +2 -2
- package/client-dist/{main-G5RE3MA7.js → main-UD3ZVCT3.js} +3 -3
- package/client-dist/{master-control-remote-poc.module-32TZYIYD.js → master-control-remote-poc.module-COTAN4DB.js} +2 -2
- package/client-dist/{mobile-app.module-SV32TTZQ.js → mobile-app.module-QSFE2Y3Y.js} +2 -2
- package/client-dist/{model-registry.module-GJXCEHAI.js → model-registry.module-BTTNZS2T.js} +2 -2
- package/client-dist/{oc.module-LOY2EZDI.js → oc.module-QNNKXRLV.js} +2 -2
- package/client-dist/{orc.module-EOHBGCPY.js → orc.module-APE7FQ3H.js} +2 -2
- package/client-dist/{project-management.module-FHVEHYHW.js → project-management.module-YIUZJFDS.js} +2 -2
- package/client-dist/project-source-routed.module-Y32IKRPT.js +2 -0
- package/client-dist/{scheduler.module-ER4EEHGN.js → scheduler.module-EYT42PK7.js} +2 -2
- package/client-dist/{session.module-IKU3SIWU.js → session.module-4VNLKOHD.js} +2 -2
- package/client-dist/{set.module-ULWKQEES.js → set.module-IRCVHVVQ.js} +2 -2
- package/client-dist/{setup.module-YTUD4KAQ.js → setup.module-STQIEGFT.js} +2 -2
- package/client-dist/{terminals.module-OV5CJCFH.js → terminals.module-CD5W6CQ5.js} +2 -2
- package/client-dist/{voice-notes-poc.module-OFSECMU5.js → voice-notes-poc.module-PWGOAH4P.js} +2 -2
- package/client-dist/{wfs.module-W62NHB6V.js → wfs.module-NDDLOD2Q.js} +2 -2
- package/package.json +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts +7 -2
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js +15 -3
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js +5 -2
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js +24 -2
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts +5 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js +7 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts +23 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js +63 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-rate-limit-state.data-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-rate-limit-state.data-service.js +50 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-rate-limit-state.data-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js +22 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js +31 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-grace-period.control-service.spec.js +33 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal-grace-period.control-service.spec.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts +25 -22
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js +235 -128
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js +34 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js.map +1 -1
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-runner-spawn.util.d.ts +43 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-runner-spawn.util.d.ts.map +1 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-runner-spawn.util.js +126 -0
- package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-runner-spawn.util.js.map +1 -0
- package/client-dist/chunk-GDPZSPXZ.js.map +0 -7
- package/client-dist/chunk-OLLOCVEF.js +0 -18
- package/client-dist/chunk-OLLOCVEF.js.map +0 -7
- package/client-dist/do.module-QSBT44I4.js +0 -18
- package/client-dist/do.module-QSBT44I4.js.map +0 -7
- package/client-dist/project-source-routed.module-EGLSADDV.js +0 -2
- /package/client-dist/{agent-instances.module-WRHXJGOG.js.map → agent-instances.module-57SLDNGT.js.map} +0 -0
- /package/client-dist/{ca.module-WRRG6OCX.js.map → ca.module-7YEQLFCE.js.map} +0 -0
- /package/client-dist/{cc.module-ENMKDGTO.js.map → cc.module-ZQRUJ2NA.js.map} +0 -0
- /package/client-dist/{chunk-PM3PM5F5.js.map → chunk-3HKZQ6QH.js.map} +0 -0
- /package/client-dist/{chunk-OO7ZXWDK.js.map → chunk-3O7GOMXE.js.map} +0 -0
- /package/client-dist/{chunk-2BXZK757.js.map → chunk-46TROZ73.js.map} +0 -0
- /package/client-dist/{chunk-NZQNHVSI.js.map → chunk-47OXWMO7.js.map} +0 -0
- /package/client-dist/{chunk-255YTLCK.js.map → chunk-4BLOQJUZ.js.map} +0 -0
- /package/client-dist/{chunk-MR5XA67R.js.map → chunk-4EWKZ7VX.js.map} +0 -0
- /package/client-dist/{chunk-MVUT5LXS.js.map → chunk-55GMH22H.js.map} +0 -0
- /package/client-dist/{chunk-PTGZ7SJJ.js.map → chunk-5BTF5S42.js.map} +0 -0
- /package/client-dist/{chunk-QIRN5IIK.js.map → chunk-5PHMZ2PC.js.map} +0 -0
- /package/client-dist/{chunk-KLOLLWQQ.js.map → chunk-5UZMSDHX.js.map} +0 -0
- /package/client-dist/{chunk-HJLXZR6C.js.map → chunk-5WVHNGPP.js.map} +0 -0
- /package/client-dist/{chunk-SRDISLMD.js.map → chunk-7TB2WG7K.js.map} +0 -0
- /package/client-dist/{chunk-AUUGDAUL.js.map → chunk-7XLL7NID.js.map} +0 -0
- /package/client-dist/{chunk-H6PKRAKC.js.map → chunk-AOLSZNC7.js.map} +0 -0
- /package/client-dist/{chunk-R5YKSCH2.js.map → chunk-B2FB57VV.js.map} +0 -0
- /package/client-dist/{chunk-VFBBAM67.js.map → chunk-B42T7WZA.js.map} +0 -0
- /package/client-dist/{chunk-UWZYJKRW.js.map → chunk-BF24ZE6G.js.map} +0 -0
- /package/client-dist/{chunk-BKYHWLA2.js.map → chunk-C4NA4HMD.js.map} +0 -0
- /package/client-dist/{chunk-MGXZBMAI.js.map → chunk-CEOMFFZ6.js.map} +0 -0
- /package/client-dist/{chunk-RE5Q7AQB.js.map → chunk-CN4NGPWP.js.map} +0 -0
- /package/client-dist/{chunk-HM4OTDPI.js.map → chunk-CYFJDAU7.js.map} +0 -0
- /package/client-dist/{chunk-2PBXAMU4.js.map → chunk-D55TUAWH.js.map} +0 -0
- /package/client-dist/{chunk-65VFBUBX.js.map → chunk-FDETPIGK.js.map} +0 -0
- /package/client-dist/{chunk-6Y34IH3F.js.map → chunk-FL2V7XCW.js.map} +0 -0
- /package/client-dist/{chunk-Z6LK3IRI.js.map → chunk-FLBZDJPT.js.map} +0 -0
- /package/client-dist/{chunk-O5IOSFEZ.js.map → chunk-GQV6D7YE.js.map} +0 -0
- /package/client-dist/{chunk-UAYQOBBD.js.map → chunk-GZPA5HIL.js.map} +0 -0
- /package/client-dist/{chunk-TAYROCOU.js.map → chunk-HH2Y4XQ3.js.map} +0 -0
- /package/client-dist/{chunk-2UG6WXXP.js.map → chunk-I6Z5TNSY.js.map} +0 -0
- /package/client-dist/{chunk-T32ST6OQ.js.map → chunk-K5XBE7SE.js.map} +0 -0
- /package/client-dist/{chunk-CAHXKEWC.js.map → chunk-NU7PEHG3.js.map} +0 -0
- /package/client-dist/{chunk-7QMVGTET.js.map → chunk-O3AIEHAX.js.map} +0 -0
- /package/client-dist/{chunk-WOTQUQ5U.js.map → chunk-OCRY4GPS.js.map} +0 -0
- /package/client-dist/{chunk-3BMZH55Z.js.map → chunk-OQQ4QRSE.js.map} +0 -0
- /package/client-dist/{chunk-OF5XPPWX.js.map → chunk-P2UDIE7N.js.map} +0 -0
- /package/client-dist/{chunk-VAZ4352K.js.map → chunk-PLOUSLDF.js.map} +0 -0
- /package/client-dist/{chunk-KQ6RKBBW.js.map → chunk-Q6XEN3YG.js.map} +0 -0
- /package/client-dist/{chunk-U4PMKYLN.js.map → chunk-R3GWWEAD.js.map} +0 -0
- /package/client-dist/{chunk-WTUYJT46.js.map → chunk-RCDIEL4H.js.map} +0 -0
- /package/client-dist/{chunk-NQLAJ7T4.js.map → chunk-RCVRN6Z2.js.map} +0 -0
- /package/client-dist/{chunk-XI353JYH.js.map → chunk-SKP32LN3.js.map} +0 -0
- /package/client-dist/{chunk-KSFWE4O2.js.map → chunk-SUKJ3JUX.js.map} +0 -0
- /package/client-dist/{chunk-EIA5CAYG.js.map → chunk-T253RW73.js.map} +0 -0
- /package/client-dist/{chunk-OFS5VM34.js.map → chunk-TBLNL5EM.js.map} +0 -0
- /package/client-dist/{chunk-X63J4SYV.js.map → chunk-TUG3SWTI.js.map} +0 -0
- /package/client-dist/{chunk-2I4UVN5M.js.map → chunk-U7F772X5.js.map} +0 -0
- /package/client-dist/{chunk-MYWLR4W4.js.map → chunk-UPSZTEUC.js.map} +0 -0
- /package/client-dist/{chunk-RSXBSBEM.js.map → chunk-UZAOBHKH.js.map} +0 -0
- /package/client-dist/{chunk-UGU6H36A.js.map → chunk-YMGBYK2E.js.map} +0 -0
- /package/client-dist/{chunk-QRNA2YDU.js.map → chunk-YSCAIGTV.js.map} +0 -0
- /package/client-dist/{chunk-SU2KP2AJ.js.map → chunk-Z52KW27H.js.map} +0 -0
- /package/client-dist/{chunk-W2ZNTZUV.js.map → chunk-ZFIOMFSD.js.map} +0 -0
- /package/client-dist/{chunk-YLHY2HN2.js.map → chunk-ZG5SMVYD.js.map} +0 -0
- /package/client-dist/{consultant.module-QGROFGTQ.js.map → consultant.module-POZHY2EP.js.map} +0 -0
- /package/client-dist/{crd.module-YMIJIXBS.js.map → crd.module-Z4PJ7FDF.js.map} +0 -0
- /package/client-dist/{dashboard.module-YUAYG77U.js.map → dashboard.module-VUSPPQCL.js.map} +0 -0
- /package/client-dist/{document-library.module-TPHZOMD5.js.map → document-library.module-HLC4IW4I.js.map} +0 -0
- /package/client-dist/{embedding-eval.module-XCNEY7ZW.js.map → embedding-eval.module-UHL5GVM5.js.map} +0 -0
- /package/client-dist/{embedding-registry.module-FKTQGZPO.js.map → embedding-registry.module-6RFQC4DO.js.map} +0 -0
- /package/client-dist/{err.module-6YTZPBSI.js.map → err.module-2LHZ2MNQ.js.map} +0 -0
- /package/client-dist/{feedback.module-FXH4A2ZD.js.map → feedback.module-XF64MIM7.js.map} +0 -0
- /package/client-dist/{host-runtime-mcp.module-QI343A2Q.js.map → host-runtime-mcp.module-DC6ADXTG.js.map} +0 -0
- /package/client-dist/{live-dev-pipeline.module-SH2WEZTD.js.map → live-dev-pipeline.module-PRAVJPON.js.map} +0 -0
- /package/client-dist/{logs.module-KTANRNDB.js.map → logs.module-CR6DTVWV.js.map} +0 -0
- /package/client-dist/{main-G5RE3MA7.js.map → main-UD3ZVCT3.js.map} +0 -0
- /package/client-dist/{master-control-remote-poc.module-32TZYIYD.js.map → master-control-remote-poc.module-COTAN4DB.js.map} +0 -0
- /package/client-dist/{mobile-app.module-SV32TTZQ.js.map → mobile-app.module-QSFE2Y3Y.js.map} +0 -0
- /package/client-dist/{model-registry.module-GJXCEHAI.js.map → model-registry.module-BTTNZS2T.js.map} +0 -0
- /package/client-dist/{oc.module-LOY2EZDI.js.map → oc.module-QNNKXRLV.js.map} +0 -0
- /package/client-dist/{orc.module-EOHBGCPY.js.map → orc.module-APE7FQ3H.js.map} +0 -0
- /package/client-dist/{project-management.module-FHVEHYHW.js.map → project-management.module-YIUZJFDS.js.map} +0 -0
- /package/client-dist/{project-source-routed.module-EGLSADDV.js.map → project-source-routed.module-Y32IKRPT.js.map} +0 -0
- /package/client-dist/{scheduler.module-ER4EEHGN.js.map → scheduler.module-EYT42PK7.js.map} +0 -0
- /package/client-dist/{session.module-IKU3SIWU.js.map → session.module-4VNLKOHD.js.map} +0 -0
- /package/client-dist/{set.module-ULWKQEES.js.map → set.module-IRCVHVVQ.js.map} +0 -0
- /package/client-dist/{setup.module-YTUD4KAQ.js.map → setup.module-STQIEGFT.js.map} +0 -0
- /package/client-dist/{terminals.module-OV5CJCFH.js.map → terminals.module-CD5W6CQ5.js.map} +0 -0
- /package/client-dist/{voice-notes-poc.module-OFSECMU5.js.map → voice-notes-poc.module-PWGOAH4P.js.map} +0 -0
- /package/client-dist/{wfs.module-W62NHB6V.js.map → wfs.module-NDDLOD2Q.js.map} +0 -0
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CC_AdapterTerminal_ControlService = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
|
-
const child_process_1 = require("child_process");
|
|
6
5
|
const fs = tslib_1.__importStar(require("fs"));
|
|
7
6
|
const path = tslib_1.__importStar(require("path"));
|
|
8
7
|
const crypto_1 = require("crypto");
|
|
@@ -12,19 +11,17 @@ const ccap_error_control_model_1 = require("../../../../../../../_collections/co
|
|
|
12
11
|
const version_const_1 = require("../../../../../../../_collections/core/version.const");
|
|
13
12
|
const eh_record_build_util_1 = require("../../../../../../ccap-agent/_modules/error-handling/_collections/utils/eh-record-build.util");
|
|
14
13
|
const ac_exec_terminal_window_status_enum_1 = require("../../../../../../ccap-agent/_modules/agent-core/_enums/ac-exec-terminal-window-status.enum");
|
|
15
|
-
const attach_mandatory_child_process_error_handler_util_1 = require("../../../../../../ccap-agent/_modules/tools/_collections/utils/exec/attach-mandatory-child-process-error-handler.util");
|
|
16
|
-
const get_windows_cmd_spawn_candidate_paths_util_1 = require("../../../../../../ccap-agent/_modules/tools/_collections/utils/exec/get-windows-cmd-spawn-candidate-paths.util");
|
|
17
14
|
const instance_id_service_1 = require("../../../../../_services/instance-id.service");
|
|
18
15
|
const cc_status_enum_1 = require("../../../_enums/cc-status.enum");
|
|
19
16
|
const cc_cli_args_util_1 = require("../../../_collections/utils/cc-cli-args.util");
|
|
20
17
|
const cc_process_exit_util_1 = require("../../../_collections/utils/lifecycle/cc-process-exit.util");
|
|
21
18
|
const cc_kill_reasons_const_1 = require("../../../_collections/consts/cc-kill-reasons.const");
|
|
22
|
-
const tls_linux_terminal_spawn_util_1 = require("../../../../../../ccap-agent/_modules/tools/_collections/utils/exec/tls-linux-terminal-spawn.util");
|
|
23
19
|
const sq_session_type_enum_1 = require("../../../../../../session-queue/_enums/sq-session-type.enum");
|
|
24
20
|
const session_queue_control_service_1 = require("../../../../../../session-queue/_services/control-services/session-queue.control-service");
|
|
25
21
|
const claude_code_data_service_1 = require("../claude-code.data-service");
|
|
26
22
|
const cc_terminal_data_service_1 = require("./cc-terminal.data-service");
|
|
27
23
|
const cc_terminal_lifecycle_control_service_1 = require("./cc-terminal-lifecycle.control-service");
|
|
24
|
+
const cc_terminal_runner_spawn_util_1 = require("./cc-terminal-runner-spawn.util");
|
|
28
25
|
/**
|
|
29
26
|
* CC Session terminal mode adapter (singleton).
|
|
30
27
|
* Minden terminál-specifikus funkció: Socket.IO namespace, runner spawn,
|
|
@@ -93,6 +90,19 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
93
90
|
/** Modul betöltés időpontja — grace period számításhoz (process.uptime() nem használható,
|
|
94
91
|
* mert a pipeline ugyanabban a Node.js process-ben fut a require-on keresztül). */
|
|
95
92
|
moduleLoadedAt = Date.now();
|
|
93
|
+
/**
|
|
94
|
+
* BUG-CC-RESTART-RECOVERY-POLL-001 (2026-05-08): in-flight resumeSession check
|
|
95
|
+
* callback (cyclic-import elkerülésére). A manager bootstrap-kor regisztrálja
|
|
96
|
+
* `setResumeInFlightChecker((sessionId) => manager.isResumeInFlight(sessionId))`-vel.
|
|
97
|
+
* A `verifyAndKillIfStillClosed` használja, hogy ne ölje meg a friss runner-t,
|
|
98
|
+
* miközben a resumeSession épp DB-státusz reset-en dolgozik (200ms re-read race).
|
|
99
|
+
* Default: () => false (manager még nincs készen → konzervatív, nem véd).
|
|
100
|
+
*/
|
|
101
|
+
resumeInFlightChecker = () => false;
|
|
102
|
+
/** Manager bootstrap-kor regisztrálja a checker-t. */
|
|
103
|
+
setResumeInFlightChecker(checker) {
|
|
104
|
+
this.resumeInFlightChecker = checker;
|
|
105
|
+
}
|
|
96
106
|
/** Flapping detection: gyors connect/disconnect ciklusok számlálása per session.
|
|
97
107
|
* count: window-based counter (FLAP_WINDOW_MS ablakon belüli disconnect-ek).
|
|
98
108
|
* totalCount: kumulatív counter (az output/reset óta összesen — force-exit-hez). */
|
|
@@ -461,109 +471,32 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
461
471
|
if (fallbackUrl) {
|
|
462
472
|
runnerArgs.push(`--fallbackServerUrl=${fallbackUrl}`);
|
|
463
473
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
];
|
|
476
|
-
// CMD spawn próba (multiple cmd.exe candidate paths, mint exec-terminal-manager).
|
|
477
|
-
const cmdCandidates = get_windows_cmd_spawn_candidate_paths_util_1.Tls_GetWindowsCmdSpawnCandidatePaths_Util.getWindowsCmdSpawnCandidatePaths();
|
|
478
|
-
spawnAttemptsCount = cmdCandidates.length;
|
|
479
|
-
for (const cmdPath of cmdCandidates) {
|
|
480
|
-
try {
|
|
481
|
-
const child = (0, child_process_1.spawn)(cmdPath, cmdArgs, {
|
|
482
|
-
detached: true,
|
|
483
|
-
stdio: 'ignore',
|
|
484
|
-
cwd: runnerDir,
|
|
485
|
-
});
|
|
486
|
-
attach_mandatory_child_process_error_handler_util_1.Tls_AttachMandatoryChildProcessErrorHandler_Util.attachMandatoryChildProcessErrorHandler({
|
|
487
|
-
child: child,
|
|
488
|
-
context: `CC_AdapterTerminal | spawn terminal runner (win32) | cmd=${cmdPath}`,
|
|
489
|
-
onError: (err) => {
|
|
490
|
-
lastSpawnError = err.message;
|
|
491
|
-
},
|
|
492
|
-
});
|
|
493
|
-
child.unref();
|
|
494
|
-
spawned = true;
|
|
495
|
-
chosenBinary = cmdPath;
|
|
496
|
-
fsm_dynamo_1.DyFM_Log.info(`CC_AdapterTerminal | terminal runner spawned (win32)`
|
|
497
|
-
+ ` | session: ${params.sessionId}`
|
|
498
|
-
+ ` | terminalId: ${terminalId}`
|
|
499
|
-
+ ` | cmd: ${cmdPath}`);
|
|
500
|
-
break;
|
|
501
|
-
}
|
|
502
|
-
catch (err) {
|
|
503
|
-
lastSpawnError = fsm_dynamo_1.DyFM_Error.getErrorMessage(err);
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
else {
|
|
508
|
-
// Linux: emulator detekció a Tls_LinuxTerminalSpawn_Util-ból (gnome-terminal / konsole /
|
|
509
|
-
// alacritty / kitty / tilix / xterm / x-terminal-emulator); headless host (nincs
|
|
510
|
-
// DISPLAY / WAYLAND) vagy hiányzó emulator → null → per-session fallback a caller-nél.
|
|
511
|
-
const plan = tls_linux_terminal_spawn_util_1.Tls_LinuxTerminalSpawn_Util.planSpawn({
|
|
512
|
-
workspacePath: params.workspacePath,
|
|
513
|
-
title: title,
|
|
514
|
-
command: 'node',
|
|
515
|
-
commandArgs: runnerArgs,
|
|
516
|
-
});
|
|
517
|
-
spawnAttemptsCount = plan ? 1 : 0;
|
|
518
|
-
if (!plan) {
|
|
519
|
-
lastSpawnError =
|
|
520
|
-
'No usable Linux terminal emulator found (no $DISPLAY / $WAYLAND_DISPLAY, or no known' +
|
|
521
|
-
' emulator in PATH). Install gnome-terminal / konsole / xterm / etc. and ensure a graphical session.';
|
|
522
|
-
}
|
|
523
|
-
else {
|
|
524
|
-
try {
|
|
525
|
-
const child = (0, child_process_1.spawn)(plan.binaryPath, plan.args, {
|
|
526
|
-
detached: true,
|
|
527
|
-
stdio: 'ignore',
|
|
528
|
-
cwd: plan.cwd,
|
|
529
|
-
});
|
|
530
|
-
attach_mandatory_child_process_error_handler_util_1.Tls_AttachMandatoryChildProcessErrorHandler_Util.attachMandatoryChildProcessErrorHandler({
|
|
531
|
-
child: child,
|
|
532
|
-
context: `CC_AdapterTerminal | spawn terminal runner (linux) | emulator=${plan.emulatorKind}`,
|
|
533
|
-
onError: (err) => {
|
|
534
|
-
lastSpawnError = err.message;
|
|
535
|
-
},
|
|
536
|
-
});
|
|
537
|
-
child.unref();
|
|
538
|
-
spawned = true;
|
|
539
|
-
chosenBinary = plan.binaryPath;
|
|
540
|
-
fsm_dynamo_1.DyFM_Log.info(`CC_AdapterTerminal | terminal runner spawned (linux)`
|
|
541
|
-
+ ` | session: ${params.sessionId}`
|
|
542
|
-
+ ` | terminalId: ${terminalId}`
|
|
543
|
-
+ ` | emulator: ${plan.emulatorKind}`
|
|
544
|
-
+ ` | binary: ${plan.binaryPath}`);
|
|
545
|
-
}
|
|
546
|
-
catch (err) {
|
|
547
|
-
lastSpawnError = fsm_dynamo_1.DyFM_Error.getErrorMessage(err);
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
if (!spawned) {
|
|
474
|
+
// Cycle 825: platform-specifikus spawn extracted to CC_TerminalRunnerSpawn_Util.
|
|
475
|
+
const spawnResult = await cc_terminal_runner_spawn_util_1.CC_TerminalRunnerSpawn_Util.spawnTerminalRunnerProcess({
|
|
476
|
+
sessionId: params.sessionId,
|
|
477
|
+
terminalId: terminalId,
|
|
478
|
+
workspacePath: params.workspacePath,
|
|
479
|
+
title: title,
|
|
480
|
+
runnerCommand: 'node',
|
|
481
|
+
runnerArgs: runnerArgs,
|
|
482
|
+
runnerCwd: runnerDir,
|
|
483
|
+
});
|
|
484
|
+
if (!spawnResult.spawned) {
|
|
552
485
|
this.terminalIds.delete(params.sessionId);
|
|
553
486
|
throw new ccap_error_control_model_1.CCAP_Error({
|
|
554
|
-
message: `Failed to spawn terminal runner: ${lastSpawnError}`,
|
|
487
|
+
message: `Failed to spawn terminal runner: ${spawnResult.lastSpawnError}`,
|
|
555
488
|
errorCode: 'CCAP-CCS-TERMINAL-SPAWN-FAIL',
|
|
556
489
|
status: 500,
|
|
557
|
-
error: new Error(`Failed to spawn terminal runner: ${lastSpawnError}`),
|
|
490
|
+
error: new Error(`Failed to spawn terminal runner: ${spawnResult.lastSpawnError}`),
|
|
558
491
|
additionalContent: eh_record_build_util_1.Eh_Record_BuildUtil.buildDyFmAdditionalContentForCcapTable({
|
|
559
492
|
additionalContext: {
|
|
560
493
|
source: 'cc-adapter-terminal | spawnTerminalRunner',
|
|
561
494
|
platform: process.platform,
|
|
562
495
|
ccSessionId: params.sessionId,
|
|
563
496
|
workspacePath: params.workspacePath,
|
|
564
|
-
spawnAttemptsCount: spawnAttemptsCount,
|
|
565
|
-
chosenBinary: chosenBinary,
|
|
566
|
-
lastSpawnError: lastSpawnError,
|
|
497
|
+
spawnAttemptsCount: spawnResult.spawnAttemptsCount,
|
|
498
|
+
chosenBinary: spawnResult.chosenBinary,
|
|
499
|
+
lastSpawnError: spawnResult.lastSpawnError,
|
|
567
500
|
},
|
|
568
501
|
}),
|
|
569
502
|
});
|
|
@@ -628,14 +561,20 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
628
561
|
// tűnik az üzenet"). A `runnerGracePeriodSec` lifecycle-célra (idle-timeout)
|
|
629
562
|
// van, NEM HTTP-send-blokkra. 30s bőven elég ahhoz, hogy egy érvényesen
|
|
630
563
|
// reconnect-elő runner befigyeljen; utána fail-fast → spawnTerminalRunner.
|
|
631
|
-
// - had-runner-disconnected:
|
|
632
|
-
//
|
|
564
|
+
// - had-runner-disconnected: minimális grace (1 iter = 500ms).
|
|
565
|
+
// BUG-CC-TERM-FAST-OPEN-001 (2026-05-08, cycle 805): a 2s wait gyakorlatilag
|
|
566
|
+
// pure waste a tipikus user-closed window forgatókönyvben (runner Node-process
|
|
567
|
+
// elment, semmi nincs amit várni). Cycle 263 még 4 iter-rel (2s) volt óvatos
|
|
568
|
+
// — most a Socket.IO transient blip (500ms-en belüli auto-reconnect) is megfér
|
|
569
|
+
// ebben az 1 iter-ben, és a túlnyomó többségi „klassszikus zárt-terminál" eset
|
|
570
|
+
// 1.5s-ot gyorsabb. A handleTerminalRegister stale-runner-rejection logika
|
|
571
|
+
// (line ~1110) kezeli, ha a régi runner késve csatlakozik és újat is spawnoltunk.
|
|
633
572
|
const graceCase = isServerRestartWindow
|
|
634
573
|
? 'server-restart'
|
|
635
574
|
: 'had-runner-disconnected';
|
|
636
575
|
const graceIterations = isServerRestartWindow
|
|
637
576
|
? CC_AdapterTerminal_ControlService.computeServerRestartGraceIterations(this.runnerGracePeriodSec)
|
|
638
|
-
:
|
|
577
|
+
: 1;
|
|
639
578
|
fsm_dynamo_1.DyFM_Log.info(`CC_AdapterTerminal | grace-period-enter`
|
|
640
579
|
+ ` | session: ${params.sessionId}`
|
|
641
580
|
+ ` | hadRunner: ${this.hadRunnerSet.has(params.sessionId)}`
|
|
@@ -672,10 +611,38 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
672
611
|
}
|
|
673
612
|
}
|
|
674
613
|
if (!socket || !socket.connected) {
|
|
675
|
-
|
|
614
|
+
// BUG-CC-TERM-FAST-OPEN-001 (2026-05-08, cycle 805): UI-feedback a spawn
|
|
615
|
+
// alatt. Eddig a user a spinner mögött ~1-2s-ig nem látott semmit, miközben
|
|
616
|
+
// a terminál ablak épp nyílt (gnome-terminal startup + Node runner cold-start
|
|
617
|
+
// + Socket.IO connect + cc:register). Most explicit `starting` státusz-push
|
|
618
|
+
// és statusMessage „Spawning terminal runner..." → a user lát feedback-et,
|
|
619
|
+
// hogy a rendszer dolgozik. A status-transition idempotens, a register utáni
|
|
620
|
+
// running-flip változatlan.
|
|
621
|
+
this.handleProcessStateChange({
|
|
676
622
|
sessionId: params.sessionId,
|
|
677
|
-
|
|
623
|
+
status: cc_status_enum_1.CC_Status_Type.starting,
|
|
624
|
+
statusMessage: 'Spawning terminal runner — opening new window…',
|
|
678
625
|
});
|
|
626
|
+
try {
|
|
627
|
+
await this.spawnTerminalRunner({
|
|
628
|
+
sessionId: params.sessionId,
|
|
629
|
+
workspacePath: params.config.workspacePath,
|
|
630
|
+
});
|
|
631
|
+
}
|
|
632
|
+
catch (spawnErr) {
|
|
633
|
+
// Spawn elhasalt (REG-TIMEOUT vagy SPAWN-FAIL) — a `starting` státusz
|
|
634
|
+
// ragadt volna meg, ami az `isBusyProcessing` busy-halmazában van, és
|
|
635
|
+
// a queue tryDeliverNext-et soha nem engedné kézbesíteni. Reset waitingInput-ra,
|
|
636
|
+
// hogy a következő prompt-küldés (vagy queue-retry) tisztán induljon.
|
|
637
|
+
// A spawn-hibát továbbra is throw-oljuk a hívási láncon felfelé (a route
|
|
638
|
+
// queue-fallback-je elnyeli ha transient, vagy /errors-be megy).
|
|
639
|
+
this.handleProcessStateChange({
|
|
640
|
+
sessionId: params.sessionId,
|
|
641
|
+
status: cc_status_enum_1.CC_Status_Type.waitingInput,
|
|
642
|
+
statusMessage: `Terminal spawn failed — ${fsm_dynamo_1.DyFM_Error.getErrorCode(spawnErr) || 'unknown'}`,
|
|
643
|
+
});
|
|
644
|
+
throw spawnErr;
|
|
645
|
+
}
|
|
679
646
|
socket = this.terminalSockets.get(params.sessionId);
|
|
680
647
|
}
|
|
681
648
|
if (!socket) {
|
|
@@ -863,7 +830,39 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
863
830
|
const sessionId = (params.data.sessionId ?? '').trim();
|
|
864
831
|
const terminalId = (params.data.terminalId ?? '').trim();
|
|
865
832
|
if (!sessionId || !terminalId) {
|
|
866
|
-
|
|
833
|
+
// BUG-CC-RUNNER-EVICT-VISIBILITY-001 (2026-05-07) Phase Silent-A: malformed
|
|
834
|
+
// register silent-drop megszüntetve. Eddig csak warn-log volt — a user nem
|
|
835
|
+
// látta hogy a runner próbálkozott regisztrálni hibás payload-dal, ami
|
|
836
|
+
// version-mismatch / outdated-runner / corrupt-state diagnosztika szempontjából
|
|
837
|
+
// kritikus. Most a /errors page-en is megjelenik.
|
|
838
|
+
fsm_dynamo_1.DyFM_Log.warn(`CC_AdapterTerminal | terminal register: missing sessionId or terminalId`
|
|
839
|
+
+ ` | rawSessionId: '${params.data.sessionId ?? '(undefined)'}'`
|
|
840
|
+
+ ` | rawTerminalId: '${params.data.terminalId ?? '(undefined)'}'`
|
|
841
|
+
+ ` | rawRunnerVersion: '${params.data.runnerVersion ?? '(undefined)'}'`);
|
|
842
|
+
const malformedError = new ccap_error_control_model_1.CCAP_Error({
|
|
843
|
+
message: 'CC Session terminal runner sent malformed register payload: missing'
|
|
844
|
+
+ ` sessionId or terminalId. The runner cannot be associated with a session`
|
|
845
|
+
+ ` and was silently dropped — likely an outdated runner version or`
|
|
846
|
+
+ ` corrupted runtime state.`,
|
|
847
|
+
errorCode: 'CCAP-CCS-TERMINAL-MALFORMED-REGISTER',
|
|
848
|
+
status: 400,
|
|
849
|
+
error: new Error('Malformed cc:register payload — missing sessionId or terminalId'),
|
|
850
|
+
additionalContent: eh_record_build_util_1.Eh_Record_BuildUtil.buildDyFmAdditionalContentForCcapTable({
|
|
851
|
+
additionalContext: {
|
|
852
|
+
source: 'cc-adapter-terminal | handleTerminalRegister',
|
|
853
|
+
rawSessionId: params.data.sessionId ?? null,
|
|
854
|
+
rawTerminalId: params.data.terminalId ?? null,
|
|
855
|
+
rawRunnerVersion: params.data.runnerVersion ?? null,
|
|
856
|
+
ready: params.data.ready ?? null,
|
|
857
|
+
hint: 'Az érkező runner cc:register payload-ja hiányos volt. Tipikus okok:\n'
|
|
858
|
+
+ ' (a) Outdated globális npm install (futtasd: `npm i -g'
|
|
859
|
+
+ ' @futdevpro/ccap@latest`).\n'
|
|
860
|
+
+ ' (b) Runner-process belső állapot-korrupciója (próbáld újraindítani).\n'
|
|
861
|
+
+ ' (c) Manuális Socket.IO klienssel csatlakozott külső eszköz.',
|
|
862
|
+
},
|
|
863
|
+
}),
|
|
864
|
+
});
|
|
865
|
+
nts_dynamo_1.DyNTS_GlobalService.globalErrorHandler(malformedError);
|
|
867
866
|
return;
|
|
868
867
|
}
|
|
869
868
|
// Cycle 781: runner version eltárolása. A régi (pre-cycle-781) runner-ek
|
|
@@ -929,6 +928,40 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
929
928
|
+ ` | session: ${sessionId}`
|
|
930
929
|
+ ` | terminalId: ${terminalId}`
|
|
931
930
|
+ ` | totalFlapCount: ${totalFlapCount}`);
|
|
931
|
+
// BUG-CC-RUNNER-EVICT-VISIBILITY-001 (2026-05-07) Phase Silent-A: a flapping
|
|
932
|
+
// force-exit eddig csak warn-log volt — a user a UI-on hirtelen ablak-bezárást
|
|
933
|
+
// látott (a runner socket lekapcsolva, terminál gyakran exit-elve), és nem
|
|
934
|
+
// értette miért. Most a /errors page-en explicit látszik az ok.
|
|
935
|
+
const flapWindow = this.flapTracker.get(sessionId);
|
|
936
|
+
const flapError = new ccap_error_control_model_1.CCAP_Error({
|
|
937
|
+
message: `CC Session terminal runner force-exit due to flapping (rapid reconnect cycling)`
|
|
938
|
+
+ ` | session: ${sessionId} | totalFlapCount: ${totalFlapCount}`
|
|
939
|
+
+ ` | window: ${CC_AdapterTerminal_ControlService.FLAP_WINDOW_MS}ms`,
|
|
940
|
+
errorCode: 'CCAP-CCS-TERMINAL-FLAPPING-FORCE-EXIT',
|
|
941
|
+
status: 503,
|
|
942
|
+
error: new Error(`Runner flapping force-exit (totalCount=${totalFlapCount},`
|
|
943
|
+
+ ` threshold=${CC_AdapterTerminal_ControlService.FLAP_FORCE_EXIT_THRESHOLD})`),
|
|
944
|
+
additionalContent: eh_record_build_util_1.Eh_Record_BuildUtil.buildDyFmAdditionalContentForCcapTable({
|
|
945
|
+
additionalContext: {
|
|
946
|
+
source: 'cc-adapter-terminal | handleTerminalRegister | flapping-force-exit',
|
|
947
|
+
ccSessionId: sessionId,
|
|
948
|
+
terminalId: terminalId,
|
|
949
|
+
totalFlapCount: totalFlapCount,
|
|
950
|
+
windowFlapCount: flapWindow?.count ?? 0,
|
|
951
|
+
forceExitThreshold: CC_AdapterTerminal_ControlService.FLAP_FORCE_EXIT_THRESHOLD,
|
|
952
|
+
flapWindowMs: CC_AdapterTerminal_ControlService.FLAP_WINDOW_MS,
|
|
953
|
+
hint: 'A runner túl gyakran csatlakozott le-fel az időablakon belül,'
|
|
954
|
+
+ ' a server kényszerített disconnect-tel megszakította. Tipikus okok:\n'
|
|
955
|
+
+ ' (a) Runner version-mismatch / corrupt npm cache → futtasd:'
|
|
956
|
+
+ ' `npm i -g @futdevpro/ccap@latest`.\n'
|
|
957
|
+
+ ' (b) Hálózati instabilitás (proxy, VPN reconnect-loop).\n'
|
|
958
|
+
+ ' (c) Runner-side bug a Socket.IO reconnect-loop logikában.\n'
|
|
959
|
+
+ ' Megoldás: várd meg, majd Restart Runner. Ha visszatér: nézd a'
|
|
960
|
+
+ ' runner-window-ot a hibaüzenetért, és frissítsd a runner-t.',
|
|
961
|
+
},
|
|
962
|
+
}),
|
|
963
|
+
});
|
|
964
|
+
nts_dynamo_1.DyNTS_GlobalService.globalErrorHandler(flapError);
|
|
932
965
|
this.flapTracker.delete(sessionId);
|
|
933
966
|
try {
|
|
934
967
|
params.socket.disconnect(true);
|
|
@@ -1022,10 +1055,8 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1022
1055
|
});
|
|
1023
1056
|
}
|
|
1024
1057
|
/**
|
|
1025
|
-
*
|
|
1026
|
-
*
|
|
1027
|
-
* az item duplikát (reconnect race) → eldobjuk, nem propagáljuk a manager-hez.
|
|
1028
|
-
* Sikeres feldolgozás után debounce-olt ack-ot kezdeményezünk a runner felé.
|
|
1058
|
+
* cc:output event handler. Sequence dedup REQ-CCSESS-TR-002 (sequence <= last → drop),
|
|
1059
|
+
* sikeres feldolgozás → debounce-olt ack a runner felé.
|
|
1029
1060
|
*/
|
|
1030
1061
|
handleTerminalOutput(params) {
|
|
1031
1062
|
const data = params.data;
|
|
@@ -1072,10 +1103,9 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1072
1103
|
}
|
|
1073
1104
|
}
|
|
1074
1105
|
/**
|
|
1075
|
-
* Throttle-olt ack emit
|
|
1076
|
-
*
|
|
1077
|
-
*
|
|
1078
|
-
* fire-kor a **friss** socket-et olvassuk ki (a reconnect közben a socket referencia cserélődhet).
|
|
1106
|
+
* Throttle-olt ack emit (REQ-CCSESS-TR-002): legalább 500ms-onként folyamatos output mellett
|
|
1107
|
+
* (debounce csak output-szünetben lőne). pendingAckSequence map a legmagasabb pending sequence-t
|
|
1108
|
+
* tárolja, timer fire-kor a friss socket-et olvassa (reconnect cserélheti a socket ref-et).
|
|
1079
1109
|
*/
|
|
1080
1110
|
scheduleAck(params) {
|
|
1081
1111
|
// Mindig frissítsük a pending sequence-t a legmagasabbra.
|
|
@@ -1290,7 +1320,45 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1290
1320
|
+ ` | terminalId: ${terminalId}`
|
|
1291
1321
|
+ ` | reason: ${reason ?? 'unknown'}`
|
|
1292
1322
|
+ ` | flap: ${this.flapTracker.get(sessionId)?.count ?? 0}/${this.flapTracker.get(sessionId)?.totalCount ?? 0}`);
|
|
1293
|
-
//
|
|
1323
|
+
// BUG-CC-RUNNER-EVICT-VISIBILITY-001 (2026-05-07) Phase Silent-A: ha az
|
|
1324
|
+
// disconnect oka NEM a tervezett kill (pendingKillReasons üres erre a
|
|
1325
|
+
// sessionre), akkor unexpected — érdemes /errors-be rögzíteni, hogy a
|
|
1326
|
+
// user lássa a runner-vesztés okát (network blip, runner-crash, X server
|
|
1327
|
+
// reset, manual close). A tervezett kill-ekre (user-terminate, runner-restart,
|
|
1328
|
+
// process-replace, lifecycle, stb.) silent — a process-exit handler
|
|
1329
|
+
// úgyis rögzít state-change event-et.
|
|
1330
|
+
const pendingKillReason = this.pendingKillReasons.get(sessionId);
|
|
1331
|
+
if (!pendingKillReason) {
|
|
1332
|
+
const disconnectError = new ccap_error_control_model_1.CCAP_Error({
|
|
1333
|
+
message: `CC Session terminal runner unexpectedly disconnected`
|
|
1334
|
+
+ ` | session: ${sessionId} | socketReason: ${reason ?? 'unknown'}`,
|
|
1335
|
+
errorCode: 'CCAP-CCS-TERMINAL-UNEXPECTED-DISCONNECT',
|
|
1336
|
+
status: 503,
|
|
1337
|
+
error: new Error(`Terminal runner unexpectedly disconnected: ${reason ?? 'unknown'}`),
|
|
1338
|
+
additionalContent: eh_record_build_util_1.Eh_Record_BuildUtil.buildDyFmAdditionalContentForCcapTable({
|
|
1339
|
+
additionalContext: {
|
|
1340
|
+
source: 'cc-adapter-terminal | handleTerminalDisconnect',
|
|
1341
|
+
ccSessionId: sessionId,
|
|
1342
|
+
terminalId: terminalId,
|
|
1343
|
+
socketReason: reason ?? 'unknown',
|
|
1344
|
+
flapCount: this.flapTracker.get(sessionId)?.count ?? 0,
|
|
1345
|
+
flapTotalCount: this.flapTracker.get(sessionId)?.totalCount ?? 0,
|
|
1346
|
+
hint: 'A runner socket-je váratlanul lecsatlakozott (NEM intencionált'
|
|
1347
|
+
+ ' kill volt). Tipikus okok a Socket.IO `reason` mező alapján:\n'
|
|
1348
|
+
+ ' - "transport error" → hálózati / proxy hiba.\n'
|
|
1349
|
+
+ ' - "ping timeout" → runner unresponsive (event-loop blokkolva, OS-szint).\n'
|
|
1350
|
+
+ ' - "io server disconnect" → szerver explicit szakította meg.\n'
|
|
1351
|
+
+ ' - "client namespace disconnect" → runner process explicit kilépett.\n'
|
|
1352
|
+
+ ' - "transport close" → terminál ablakot bezárta a user vagy az'
|
|
1353
|
+
+ ' emulator (claude exitelt és a window auto-close-olt).\n'
|
|
1354
|
+
+ ' Ha repeated → BUG-CC-TERM-CLOSE-PREMATURE-001 vagy network instability.',
|
|
1355
|
+
},
|
|
1356
|
+
}),
|
|
1357
|
+
});
|
|
1358
|
+
nts_dynamo_1.DyNTS_GlobalService.globalErrorHandler(disconnectError);
|
|
1359
|
+
}
|
|
1360
|
+
// DB státusz frissítése. .catch() → DyFM_Error.logSimple a server logba —
|
|
1361
|
+
// ha a DB nem elérhető, az nem visszafordítható itt, de legalább látszik.
|
|
1294
1362
|
if (terminalId) {
|
|
1295
1363
|
const termDS = new cc_terminal_data_service_1.CC_Terminal_DataService({ issuer: 'cc-adapter-terminal' });
|
|
1296
1364
|
termDS.findByTerminalId(terminalId).then((doc) => {
|
|
@@ -1298,9 +1366,15 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1298
1366
|
termDS.updateStatus({
|
|
1299
1367
|
id: doc._id,
|
|
1300
1368
|
status: ac_exec_terminal_window_status_enum_1.AC_ExecTerminalWindowStatus_Type.disconnected,
|
|
1301
|
-
}).catch(() => {
|
|
1369
|
+
}).catch((updateErr) => {
|
|
1370
|
+
fsm_dynamo_1.DyFM_Error.logSimple(`CC_AdapterTerminal | DB updateStatus(disconnected) failed`
|
|
1371
|
+
+ ` | session: ${sessionId} | terminalId: ${terminalId}`, updateErr);
|
|
1372
|
+
});
|
|
1302
1373
|
}
|
|
1303
|
-
}).catch(() => {
|
|
1374
|
+
}).catch((findErr) => {
|
|
1375
|
+
fsm_dynamo_1.DyFM_Error.logSimple(`CC_AdapterTerminal | DB findByTerminalId failed`
|
|
1376
|
+
+ ` | session: ${sessionId} | terminalId: ${terminalId}`, findErr);
|
|
1377
|
+
});
|
|
1304
1378
|
}
|
|
1305
1379
|
// Session manager értesítése: a futó prompt elveszett (runner ablak bezárva).
|
|
1306
1380
|
// waitingInput-ra váltunk, hogy a user azonnal újra tudjon küldeni.
|
|
@@ -1352,10 +1426,9 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1352
1426
|
}
|
|
1353
1427
|
}
|
|
1354
1428
|
/**
|
|
1355
|
-
* Lazy session config reload DB-ből (fire-and-forget).
|
|
1356
|
-
*
|
|
1357
|
-
*
|
|
1358
|
-
* Ha a session nem található a DB-ben, logol és nem hoz létre config-ot.
|
|
1429
|
+
* Lazy session config reload DB-ből (fire-and-forget). Server restart után az in-memory
|
|
1430
|
+
* sessionConfigs üres — a visszacsatlakozó runner-nek kell config (model, effort, mode);
|
|
1431
|
+
* ha a session DB-ben nincs, logol és nem hoz létre config-ot.
|
|
1359
1432
|
*/
|
|
1360
1433
|
reloadSessionConfigFromDb(params) {
|
|
1361
1434
|
const localCcapId = instance_id_service_1.ExS_InstanceId_Service.getInstance().getInstanceId();
|
|
@@ -1391,9 +1464,33 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1391
1464
|
+ ` | model: ${config.model ?? 'default'}`
|
|
1392
1465
|
+ ` | effort: ${config.reasoningEffort ?? 'default'}`);
|
|
1393
1466
|
}).catch((err) => {
|
|
1467
|
+
// BUG-CC-RUNNER-EVICT-VISIBILITY-001 (2026-05-07) Phase Silent-A: a
|
|
1468
|
+
// config-reload csendben hibázott — a következő prompt default config-gal
|
|
1469
|
+
// futott (a model / reasoningEffort / mode beállítások elvesztek a session-ből).
|
|
1470
|
+
// Most a /errors page-en is látszik, hogy a felhasználó tudjon róla.
|
|
1394
1471
|
fsm_dynamo_1.DyFM_Log.error(`CC_AdapterTerminal | reloadSessionConfigFromDb failed`
|
|
1395
1472
|
+ ` | sessionId: ${params.sessionId}`
|
|
1396
1473
|
+ ` | error: ${fsm_dynamo_1.DyFM_Error.getErrorMessage(err)}`);
|
|
1474
|
+
const reloadError = new ccap_error_control_model_1.CCAP_Error({
|
|
1475
|
+
message: `CC Session config reload from DB failed — subsequent prompts will use`
|
|
1476
|
+
+ ` default configuration (model / reasoning effort / mode / permission policy).`,
|
|
1477
|
+
errorCode: 'CCAP-CCS-CONFIG-RELOAD-FAILED',
|
|
1478
|
+
status: 500,
|
|
1479
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
1480
|
+
additionalContent: eh_record_build_util_1.Eh_Record_BuildUtil.buildDyFmAdditionalContentForCcapTable({
|
|
1481
|
+
additionalContext: {
|
|
1482
|
+
source: 'cc-adapter-terminal | reloadSessionConfigFromDb',
|
|
1483
|
+
ccSessionId: params.sessionId,
|
|
1484
|
+
localCcapId: localCcapId,
|
|
1485
|
+
hint: 'A session-config reload sikertelen volt. A user szempontjából a következő'
|
|
1486
|
+
+ ' prompt-nál a Claude default beállításokkal fut, ami nemkívánt viselkedést'
|
|
1487
|
+
+ ' eredményezhet (rossz model, rossz reasoning effort). Megoldás:\n'
|
|
1488
|
+
+ ' - Nézd meg a DB-elérhetőséget (mongo logs, replica lag).\n'
|
|
1489
|
+
+ ' - Ha visszatér: a session config-ját explicit állítsd újra a UI-on.',
|
|
1490
|
+
},
|
|
1491
|
+
}),
|
|
1492
|
+
});
|
|
1493
|
+
nts_dynamo_1.DyNTS_GlobalService.globalErrorHandler(reloadError);
|
|
1397
1494
|
});
|
|
1398
1495
|
}
|
|
1399
1496
|
// ── Private callback helpers ─────────────────────────────────
|
|
@@ -1425,10 +1522,9 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1425
1522
|
}
|
|
1426
1523
|
// ── Private: session completion guard ─────────────────────────
|
|
1427
1524
|
/**
|
|
1428
|
-
*
|
|
1429
|
-
*
|
|
1430
|
-
*
|
|
1431
|
-
* túlélte és reconnect-elt — enélkül idle-timeout-ig nyitva maradna.
|
|
1525
|
+
* Completion guard: ha a session DB completed/terminated/errored/deleted, runner cc:kill +
|
|
1526
|
+
* disconnect (fire-and-forget). Tipikus: server restart-recovery lezárta, de runner ablak
|
|
1527
|
+
* túlélte és reconnect-elt — idle-timeout-ig nyitva maradna.
|
|
1432
1528
|
*/
|
|
1433
1529
|
rejectRunnerIfSessionClosed(params) {
|
|
1434
1530
|
const localCcapId = instance_id_service_1.ExS_InstanceId_Service.getInstance().getInstanceId();
|
|
@@ -1483,12 +1579,9 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1483
1579
|
});
|
|
1484
1580
|
}
|
|
1485
1581
|
/**
|
|
1486
|
-
* Második DB-olvasás
|
|
1487
|
-
*
|
|
1488
|
-
* Ha
|
|
1489
|
-
* állapotra változott (pl. resumeSession lefutott közben), nem öljük a runnert — a session
|
|
1490
|
-
* aktívan használatban van. Ha viszont továbbra is closed (completed/terminated/errored),
|
|
1491
|
-
* akkor valódi orphan, ki kell ütni.
|
|
1582
|
+
* Második DB-olvasás kill előtt (race elkerülés). Ha az állapot creating/starting/running/
|
|
1583
|
+
* waiting-input/stalled-ra váltott (pl. resumeSession közben), NEM ölünk — aktív session.
|
|
1584
|
+
* Ha továbbra is closed (completed/terminated/errored) → valódi orphan, kill.
|
|
1492
1585
|
*/
|
|
1493
1586
|
verifyAndKillIfStillClosed(params) {
|
|
1494
1587
|
const localCcapId = instance_id_service_1.ExS_InstanceId_Service.getInstance().getInstanceId();
|
|
@@ -1510,6 +1603,20 @@ class CC_AdapterTerminal_ControlService extends nts_dynamo_1.DyNTS_SingletonServ
|
|
|
1510
1603
|
return;
|
|
1511
1604
|
}
|
|
1512
1605
|
if (params.closedStatuses.includes(session.status ?? '')) {
|
|
1606
|
+
// BUG-CC-RESTART-RECOVERY-POLL-001 (2026-05-08): in-flight resumeSession
|
|
1607
|
+
// race-protect. Ha a sessionre éppen FUT egy resumeSession (a manager
|
|
1608
|
+
// resumeInFlight Set-jében szerepel), akkor a 200ms re-read DB-snapshot
|
|
1609
|
+
// még a stale closed-státuszt mutathatja (a resumeSession DB-write még
|
|
1610
|
+
// nem committolt). Ne öljük meg a friss runner-t — a resumeSession be fogja
|
|
1611
|
+
// állítani a státuszt creating-re és a runner felhasználható.
|
|
1612
|
+
if (this.resumeInFlightChecker(params.sessionId)) {
|
|
1613
|
+
fsm_dynamo_1.DyFM_Log.info(`CC_AdapterTerminal | runner KEPT (resume in-flight): DB still shows closed,`
|
|
1614
|
+
+ ` but resumeSession is currently running and will set status to creating shortly`
|
|
1615
|
+
+ ` | session: ${params.sessionId}`
|
|
1616
|
+
+ ` | terminalId: ${params.terminalId}`
|
|
1617
|
+
+ ` | dbStatus: ${session.status}`);
|
|
1618
|
+
return;
|
|
1619
|
+
}
|
|
1513
1620
|
// Még mindig closed → valódi orphan, kill.
|
|
1514
1621
|
// BUG-CC-RUNNER-EVICT-VISIBILITY-001 (2026-05-07): user-visible error
|
|
1515
1622
|
// record a /errors page-en. Eddig csak warn-log volt, a user nem látta
|