@yalehwang/cloudpit 2.0.0 → 3.0.0
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 +1 -1
- package/dist/api-docs.html +3 -3
- package/dist/assets/{abnfDiagram-N423BO3Z-D5yLnMt9.js → abnfDiagram-N423BO3Z-D7Xt05gV.js} +1 -1
- package/dist/assets/{abnfDiagram-N423BO3Z-bTHtQIhR.js → abnfDiagram-N423BO3Z-dmPRRPEm.js} +1 -1
- package/dist/assets/{arc-1DmrBEyG.js → arc-B7W3R5qH.js} +1 -1
- package/dist/assets/{arc-BlGK--01.js → arc-BHMlIcaQ.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G--lzbKBn9.js → architectureDiagram-T3A2C74G-CUUpAoN0.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-7lKNAbUU.js → architectureDiagram-T3A2C74G-DpXhbHxu.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-17cdO9zs.js → blockDiagram-VBNYF7ZC-Bf0yfNxj.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-BPavJfDj.js → blockDiagram-VBNYF7ZC-Cki9AOhc.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-Bm1-2w3b.js → c4Diagram-5PPSVZJV-DK2RqNDO.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-aHvFL3Wb.js → c4Diagram-5PPSVZJV-DyhTF0e5.js} +1 -1
- package/dist/assets/channel-DTLMNzbH.js +1 -0
- package/dist/assets/channel-DiqxUuPf.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-D7WqZewM.js → chunk-2GRJ4B5K-BYtByJbf.js} +1 -1
- package/dist/assets/{chunk-2GRJ4B5K-DbwzBiPF.js → chunk-2GRJ4B5K-CksFgocc.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-DdCr89uy.js → chunk-2Q5K7J3B-D2kQa5TZ.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-TFd0ECKO.js → chunk-2Q5K7J3B-NSSX86FA.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-BdhRBpEi.js → chunk-5RXB4S5H-DNNYC8_t.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-D0SQ3nIe.js → chunk-5RXB4S5H-Rx0YaqNI.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-B9Lv3cWR.js → chunk-5VM5RSS4-B1k4I4CX.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-DioqTIvB.js → chunk-5VM5RSS4-CsvQj3QC.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-09bwlcIv.js → chunk-6Q2QTUOP-48-dEgAs.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-JuhPJZZL.js → chunk-6Q2QTUOP-DCMSW5_0.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-C6f2SgCw.js → chunk-GF5L2VYU-CGyvOsdN.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-DzD9aOyp.js → chunk-GF5L2VYU-YXe113hp.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BggnWNZv.js → chunk-JWPE2WC7-BT7vCW4x.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-Dte_Ax9K.js → chunk-JWPE2WC7-D2K1Oywq.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-9TCQV92m.js → chunk-KBJHAD2P-CQZWamtE.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-DDnJp7kJ.js → chunk-KBJHAD2P-gpEwZrNy.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-CE2Y4D_h.js → chunk-RYQCIY6F-BI0fMtjY.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DsgFSTNw.js → chunk-RYQCIY6F-vguRdb4F.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-B1FIfsqq.js → chunk-XXDRQBXY-B99qH1_w.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-B4YfaqTO.js → chunk-XXDRQBXY-DZLJnbBB.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-BaV-s6x8.js +1 -0
- package/dist/assets/classDiagram-JCYQIIEL-D4M03B4L.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-BaV-s6x8.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-D4M03B4L.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-C1AG5Pib.js → cose-bilkent-JH36ORCC-EsVnz-E6.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-lMwWDibI.js → cose-bilkent-JH36ORCC-VI2OjCIx.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-BlabniRL.js → cynefin-VYW2F7L2-BVYg0ixs.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-W-c-z4IW.js → cynefin-VYW2F7L2-BnHmA5I2.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-BtTep_pq.js → cynefinDiagram-MW4NZA55-B-OCRLIw.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-Due6EIPh.js → cynefinDiagram-MW4NZA55-ItLlzjDR.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-CWLaFfdt.js → dagre-VZM6K2ZE-DkVDkAWJ.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-DZldvqiQ.js → dagre-VZM6K2ZE-bYR4z8-Z.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-RnmUHYwN.js → diagram-7IWD3JNH-DjXMue67.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-Di-7-nSA.js → diagram-7IWD3JNH-FNEXlm5k.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-Wybyn8fw.js → diagram-B4RE2ZJO-73NYiO_P.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-mrK79C2E.js → diagram-B4RE2ZJO-dB4QHq0D.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-JY6FqSFu.js → diagram-LBJQPF4R-DyKT610O.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-sWhu2VLy.js → diagram-LBJQPF4R-rMgmnjvd.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-BJ4T0WGp.js → diagram-Q27KOJAE-BvsfmmQt.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-DyGT9KhB.js → diagram-Q27KOJAE-c6DEjLQX.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-oXFJAndB.js → diagram-UB23O5K3-BMo2VXVb.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-tTd8qwEM.js → diagram-UB23O5K3-DRMKefnZ.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-DV67cBe6.js → ebnfDiagram-BXEA7PRR-BrOAekWh.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-OQGm8tPs.js → ebnfDiagram-BXEA7PRR-YmQkylwV.js} +1 -1
- package/dist/assets/{elk-BRx4gEGg.js → elk-Hz3WRESK.js} +1 -1
- package/dist/assets/{elk-CdAQJ-NA.js → elk-tPSZwRVB.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-BhD2xZ2I.js → erDiagram-JOGREHBK-BlaZnoQi.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-BqP8DqqW.js → erDiagram-JOGREHBK-CRCfRUXt.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-B4AjZxPJ.js → flowDiagram-UKHOOZJN-DQ1gbjxo.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-CP_1WsW4.js → flowDiagram-UKHOOZJN-Dinlbmds.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-BMk6nngr.js → ganttDiagram-PKOTCBZU-CMGpcBZO.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-B_ce39Ld.js → ganttDiagram-PKOTCBZU-Eh94zuPI.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-CnZA42iA.js → gitGraphDiagram-DS77QQ5N-Bp8xIZbk.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-DqEz_iTn.js → gitGraphDiagram-DS77QQ5N-Cu-b4YNw.js} +1 -1
- package/dist/assets/index-51e8fagd.css +32 -0
- package/dist/assets/{index-D5nLH7qP.js → index-CQE9C6k6.js} +356 -356
- package/dist/assets/{index-CqyOGerp.js → index-S8ow0XfK.js} +356 -356
- package/dist/assets/{infoDiagram-6WML65LV-BQf7m4X4.js → infoDiagram-6WML65LV-CClEEtTq.js} +1 -1
- package/dist/assets/{infoDiagram-6WML65LV-Dntf4YFM.js → infoDiagram-6WML65LV-QmHeojgl.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-BDjsldAI.js → ishikawaDiagram-WSZJBQD7-BemSj9lN.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-BqXpJeoL.js → ishikawaDiagram-WSZJBQD7-nw48g1vr.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-CBcFzP2M.js → journeyDiagram-NVQOT4AX-DeNtO6OU.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-DoWKjgKd.js → journeyDiagram-NVQOT4AX-q1lCfOYn.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-9bspl7j-.js → kanban-definition-27J2QSJJ-Bzhu6hql.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-Cjxa-Fbb.js → kanban-definition-27J2QSJJ-VfvD33YG.js} +1 -1
- package/dist/assets/{linear-YogAXmU_.js → linear-C0Kwu3Yp.js} +1 -1
- package/dist/assets/{linear-lIhI5Y8l.js → linear-CbM_4-fP.js} +1 -1
- package/dist/assets/{mermaid.core-2Spxcrg7.js → mermaid.core-G2huIsXn.js} +5 -5
- package/dist/assets/{mermaid.core-BxxInCBm.js → mermaid.core-fvTQFUX1.js} +5 -5
- package/dist/assets/{mindmap-definition-FAOFIHXS-DblO5EG4.js → mindmap-definition-FAOFIHXS-BONvuyvz.js} +1 -1
- package/dist/assets/{mindmap-definition-FAOFIHXS-_nlvJ9VK.js → mindmap-definition-FAOFIHXS-BzYawGKQ.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-BBJFPAZG.js → pegDiagram-VL7TDLO6-Df2HAKGH.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-DhRH7YRf.js → pegDiagram-VL7TDLO6-DnMwBHn_.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-4Qy7Nk4U.js → pieDiagram-7S7Q4E2Y-Cd3-a-dM.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-BUtdeYBT.js → pieDiagram-7S7Q4E2Y-LV6TOhOD.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-BUoIDY1r.js → quadrantDiagram-CIZ2JOQS-8VOnA3FV.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-D90kdHA1.js → quadrantDiagram-CIZ2JOQS-CnwxFPxh.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-CJf9--tj.js → railroadDiagram-AXF67PYL-CXBFj3Iu.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-D3S1oliC.js → railroadDiagram-AXF67PYL-DLoAPcsb.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-C04jhjS6.js → requirementDiagram-LRYGKXZP-LrVlZXSz.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-cQaGai5h.js → requirementDiagram-LRYGKXZP-pakITowN.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-AT4cTVbY.js → sankeyDiagram-W5VNT64P-BIQQ8A1I.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-DfFUdqYO.js → sankeyDiagram-W5VNT64P-C6QWOxNM.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-DbjhG030.js → sequenceDiagram-SI44F4Z6-CpHBe2CG.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-DKjdupix.js → sequenceDiagram-SI44F4Z6-cnLxaxcV.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-CCcKLP8m.js → sizeCapture-X5ZJPWSS-3g-1onHD.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-DGxRWxeo.js → sizeCapture-X5ZJPWSS-4U6b3PSL.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-D7wGCNb7.js → stateDiagram-OKZ733FA-CFwVDdlY.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-qdMAailp.js → stateDiagram-OKZ733FA-CKVGJcM2.js} +1 -1
- package/dist/assets/{stateDiagram-v2-UEYNNEHI-BbmmtA9w.js → stateDiagram-v2-UEYNNEHI-Dnbk8ftm.js} +1 -1
- package/dist/assets/{stateDiagram-v2-UEYNNEHI-Diz_hFvh.js → stateDiagram-v2-UEYNNEHI-rlA-woxH.js} +1 -1
- package/dist/assets/{swimlanes-SLNWSIFB-CZgIPz6I.js → swimlanes-SLNWSIFB-DCwz8-mf.js} +2 -2
- package/dist/assets/{swimlanes-SLNWSIFB-B16H-6OU.js → swimlanes-SLNWSIFB-M9Oumwnl.js} +2 -2
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CTtTyW6-.js +8 -0
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-Caohx6WZ.js +8 -0
- package/dist/assets/{timeline-definition-Z64GVDOM-7r7OVlrT.js → timeline-definition-Z64GVDOM-BVmfjoWH.js} +1 -1
- package/dist/assets/{timeline-definition-Z64GVDOM-nhnkS_wy.js → timeline-definition-Z64GVDOM-DyXvto1l.js} +1 -1
- package/dist/assets/{vennDiagram-T6HMQDX7-B1piFYrz.js → vennDiagram-T6HMQDX7-CNe6zorb.js} +1 -1
- package/dist/assets/{vennDiagram-T6HMQDX7-x8SJTFhK.js → vennDiagram-T6HMQDX7-DyzOWKx3.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-BdD4GExj.js → wardleyDiagram-T6FBY63Y-D5YvMVwa.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-C90xqNVS.js → wardleyDiagram-T6FBY63Y-DXo8BCrA.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M--Ndoz0Cq.js → xychartDiagram-ELKLHX3M-CIBffVxC.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-BAKns-7o.js → xychartDiagram-ELKLHX3M-XlsWelDb.js} +1 -1
- package/dist/build-info.json +2 -2
- package/dist/convert-icons.md +10 -46
- package/dist/favicon.png +0 -0
- package/dist/favicon.svg +1 -9
- package/dist/generate-icons.js +67 -47
- package/dist/icons/icon-128x128.png +0 -0
- package/dist/icons/icon-144x144.png +0 -0
- package/dist/icons/icon-152x152.png +0 -0
- package/dist/icons/icon-192x192.png +0 -0
- package/dist/icons/icon-384x384.png +0 -0
- package/dist/icons/icon-512x512.png +0 -0
- package/dist/icons/icon-72x72.png +0 -0
- package/dist/icons/icon-96x96.png +0 -0
- package/dist/index.html +2 -2
- package/dist/logo-128.png +0 -0
- package/dist/logo-256.png +0 -0
- package/dist/logo-32.png +0 -0
- package/dist/logo-512.png +0 -0
- package/dist/logo-64.png +0 -0
- package/dist/logo-source.png +0 -0
- package/dist/logo.svg +1 -17
- package/dist/sw.js +7 -9
- package/dist-server/build-info.json +2 -2
- package/dist-server/server/load-env.js +12 -4
- package/dist-server/server/load-env.js.map +1 -1
- package/dist-server/server/modules/browser-use/browser-use.service.js +33 -11
- package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
- package/dist-server/server/modules/browser-use/index.js +4 -4
- package/dist-server/server/modules/browser-use/index.js.map +1 -1
- package/dist-server/server/modules/browser-use/mcp-server-names.js +6 -4
- package/dist-server/server/modules/browser-use/mcp-server-names.js.map +1 -1
- package/dist-server/server/modules/browser-use/tests/browser-use.service.test.js +49 -1
- package/dist-server/server/modules/browser-use/tests/browser-use.service.test.js.map +1 -1
- package/dist-server/server/modules/cli/asset-migration-files.js +74 -0
- package/dist-server/server/modules/cli/asset-migration-files.js.map +1 -0
- package/dist-server/server/modules/cli/asset-migration-report.js +80 -0
- package/dist-server/server/modules/cli/asset-migration-report.js.map +1 -0
- package/dist-server/server/modules/cli/asset-migration-store.js +153 -0
- package/dist-server/server/modules/cli/asset-migration-store.js.map +1 -0
- package/dist-server/server/modules/cli/asset-migration.service.js +161 -0
- package/dist-server/server/modules/cli/asset-migration.service.js.map +1 -0
- package/dist-server/server/modules/cli/browser-use-mcp.js +9 -4
- package/dist-server/server/modules/cli/browser-use-mcp.js.map +1 -1
- package/dist-server/server/modules/cli/cli.module.js +21 -1
- package/dist-server/server/modules/cli/cli.module.js.map +1 -1
- package/dist-server/server/modules/cli/cli.service.js +6 -1
- package/dist-server/server/modules/cli/cli.service.js.map +1 -1
- package/dist-server/server/modules/cli/tests/asset-migration.service.test.js +275 -0
- package/dist-server/server/modules/cli/tests/asset-migration.service.test.js.map +1 -0
- package/dist-server/server/modules/cli/tests/browser-use-mcp-entry.test.js +157 -0
- package/dist-server/server/modules/cli/tests/browser-use-mcp-entry.test.js.map +1 -1
- package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js +1 -0
- package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js.map +1 -1
- package/dist-server/server/modules/cli/tests/cli.service.test.js +6 -1
- package/dist-server/server/modules/cli/tests/cli.service.test.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-brief-prompt.js +1 -1
- package/dist-server/server/modules/cockpit/cockpit-card-actions.js +19 -3
- package/dist-server/server/modules/cockpit/cockpit-card-actions.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-card-feedback-store.js +94 -9
- package/dist-server/server/modules/cockpit/cockpit-card-feedback-store.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-card-registry.js +1 -1
- package/dist-server/server/modules/cockpit/cockpit-fleet-card-projection.js +3 -0
- package/dist-server/server/modules/cockpit/cockpit-fleet-card-projection.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-knowledge-reading.js +16 -0
- package/dist-server/server/modules/cockpit/cockpit-knowledge-reading.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit.module.js +1 -1
- package/dist-server/server/modules/cockpit/tests/cockpit-card-feedback.test.js +96 -1
- package/dist-server/server/modules/cockpit/tests/cockpit-card-feedback.test.js.map +1 -1
- package/dist-server/server/modules/cockpit/tests/cockpit-fleet-card-provider.test.js +2 -2
- package/dist-server/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.js +169 -3
- package/dist-server/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.js.map +1 -1
- package/dist-server/server/modules/context-events/context-event-writer.js +5 -5
- package/dist-server/server/modules/context-events/context-events.module.js +2 -2
- package/dist-server/server/modules/context-events/session-ask-stream-reader.js +1 -1
- package/dist-server/server/modules/context-events/session-blocked-events.js +3 -3
- package/dist-server/server/modules/context-events/tests/session-ask-event-writer.test.js +1 -1
- package/dist-server/server/modules/context-events/tests/session-blocked-events.test.js +3 -3
- package/dist-server/server/modules/context-events/tests/session-run-events.test.js +1 -1
- package/dist-server/server/modules/database/migrations.js +23 -1
- package/dist-server/server/modules/database/migrations.js.map +1 -1
- package/dist-server/server/modules/database/repositories/sessions.db.js +25 -4
- package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
- package/dist-server/server/modules/database/repositories/voice-user-identifiers.db.js +1 -1
- package/dist-server/server/modules/database/schema.js +16 -2
- package/dist-server/server/modules/database/schema.js.map +1 -1
- package/dist-server/server/modules/database/tests/migrations-ensure-columns.test.js +2 -0
- package/dist-server/server/modules/database/tests/migrations-ensure-columns.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +2 -2
- package/dist-server/server/modules/debug-agent/tests/debug-agent-permission-popup.test.js +2 -2
- package/dist-server/server/modules/liaison/liaison-deliver.service.js +3 -3
- package/dist-server/server/modules/liaison/liaison.module.js +1 -1
- package/dist-server/server/modules/mcp-gateway/mcp-gateway.auth.js +3 -2
- package/dist-server/server/modules/mcp-gateway/mcp-gateway.auth.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/mcp-self-target.js +2 -2
- package/dist-server/server/modules/mcp-gateway/mcp-session-send.js +7 -0
- package/dist-server/server/modules/mcp-gateway/mcp-session-send.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/mcp-tool-annotations.js +4 -4
- package/dist-server/server/modules/mcp-gateway/oauth-metadata.gate.js +4 -2
- package/dist-server/server/modules/mcp-gateway/oauth-metadata.gate.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/knowledge-effective-config-proof.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/knowledge-peer-correlation-proof.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-approvals.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-approvals.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-audit-route.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-audit.test.js +4 -4
- package/dist-server/server/modules/mcp-gateway/tests/mcp-auth.test.js +3 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-auth.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.js +7 -3
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-correlation-id.test.js +8 -8
- package/dist-server/server/modules/mcp-gateway/tests/mcp-draft.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-draft.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-english-only.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-gateway-wiring.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-knowledge-facts.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-overview.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-pending-interaction.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-read-tools.test.js +3 -3
- package/dist-server/server/modules/mcp-gateway/tests/mcp-read-tools.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-run-get.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-self-target.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-self-target.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-background.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-background.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-host-control.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-host-control.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-search-pruning.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-search.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-send.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-send.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-ui-last-opened.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-usage-stats.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-usage-stats.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-write-notification.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-write-notification.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/oauth-flow.e2e.test.js +3 -3
- package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
- package/dist-server/server/modules/oauth/access-tokens.service.js +8 -8
- package/dist-server/server/modules/oauth/oauth-consent.service.js +20 -15
- package/dist-server/server/modules/oauth/oauth-consent.service.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/access-token-scopes.test.js +54 -34
- package/dist-server/server/modules/oauth/tests/access-token-scopes.test.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/access-tokens.service.test.js +35 -14
- package/dist-server/server/modules/oauth/tests/access-tokens.service.test.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/oauth-consent-page.test.js +27 -22
- package/dist-server/server/modules/oauth/tests/oauth-consent-page.test.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/oauth-consent-ratelimit.test.js +2 -2
- package/dist-server/server/modules/oauth/tests/token-info.routes.test.js +2 -2
- package/dist-server/server/modules/oauth/tests/token-info.routes.test.js.map +1 -1
- package/dist-server/server/modules/observation/blind-spots.js +1 -1
- package/dist-server/server/modules/observation/observation-store.js +50 -17
- package/dist-server/server/modules/observation/observation-store.js.map +1 -1
- package/dist-server/server/modules/observation/observation-uri.js +31 -19
- package/dist-server/server/modules/observation/observation-uri.js.map +1 -1
- package/dist-server/server/modules/observation/observation.routes.js +1 -1
- package/dist-server/server/modules/observation/project-truth.js +1 -1
- package/dist-server/server/modules/observation/session-ask-decision-answer.js +2 -1
- package/dist-server/server/modules/observation/session-ask-decision-answer.js.map +1 -1
- package/dist-server/server/modules/observation/session-digest-llm.js +7 -1
- package/dist-server/server/modules/observation/session-digest-llm.js.map +1 -1
- package/dist-server/server/modules/observation/session-digest.js +39 -5
- package/dist-server/server/modules/observation/session-digest.js.map +1 -1
- package/dist-server/server/modules/observation/tests/architecture-delta.test.js +1 -1
- package/dist-server/server/modules/observation/tests/observation-routes.test.js +9 -0
- package/dist-server/server/modules/observation/tests/observation-routes.test.js.map +1 -1
- package/dist-server/server/modules/observation/tests/observation-store.test.js +38 -0
- package/dist-server/server/modules/observation/tests/observation-store.test.js.map +1 -1
- package/dist-server/server/modules/observation/tests/project-truth.test.js +2 -2
- package/dist-server/server/modules/observation/tests/session-ask-decision-digest.test.js +150 -0
- package/dist-server/server/modules/observation/tests/session-ask-decision-digest.test.js.map +1 -1
- package/dist-server/server/modules/observation/tests/session-digest.test.js +24 -1
- package/dist-server/server/modules/observation/tests/session-digest.test.js.map +1 -1
- package/dist-server/server/modules/providers/index.js +9 -0
- package/dist-server/server/modules/providers/index.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-host-driver.provider.js +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +22 -3
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-app-server.connection.js +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.contract.js +11 -9
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.contract.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.provider.js +15 -1
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +14 -3
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-provider-injection.js +248 -0
- package/dist-server/server/modules/providers/list/codex/codex-provider-injection.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-resident-provider-launch.js +37 -0
- package/dist-server/server/modules/providers/list/codex/codex-resident-provider-launch.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js +19 -1
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +23 -2
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-models.service.js +136 -106
- package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-runtime.service.js +3 -0
- package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/session-model-resolver.js +106 -0
- package/dist-server/server/modules/providers/services/session-model-resolver.js.map +1 -0
- package/dist-server/server/modules/providers/services/session-provider-binding.js +89 -0
- package/dist-server/server/modules/providers/services/session-provider-binding.js.map +1 -0
- package/dist-server/server/modules/providers/services/sessions.service.js +5 -1
- package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-resident-addressable.test.js +2 -2
- package/dist-server/server/modules/providers/tests/claude-session-name-authority.test.js +4 -4
- package/dist-server/server/modules/providers/tests/codex-app-server-protocol.test.js +1 -1
- package/dist-server/server/modules/providers/tests/codex-host-driver-persistent.test.js +2 -2
- package/dist-server/server/modules/providers/tests/codex-provider-model-binding.test.js +270 -0
- package/dist-server/server/modules/providers/tests/codex-provider-model-binding.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-resident-provider-injection.test.js +484 -0
- package/dist-server/server/modules/providers/tests/codex-resident-provider-injection.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-runtime-provider-injection.test.js +228 -0
- package/dist-server/server/modules/providers/tests/codex-runtime-provider-injection.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-session-provider-binding.test.js +306 -0
- package/dist-server/server/modules/providers/tests/codex-session-provider-binding.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js +1 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +2 -2
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js +15 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider.routes.test.js +1 -1
- package/dist-server/server/modules/quay/index.js +1 -1
- package/dist-server/server/modules/quay/quay-fleet-cli.js +1 -1
- package/dist-server/server/modules/quay/quay-fleet-locator.js +2 -2
- package/dist-server/server/modules/quay/quay-fleet-project-id.js +7 -7
- package/dist-server/server/modules/quay/quay-fleet-registry.js +3 -3
- package/dist-server/server/modules/quay/quay-suite-fanin-reader.js +1 -1
- package/dist-server/server/modules/quay/quay-uri-resolve.js +6 -6
- package/dist-server/server/modules/quay/quay.module.js +3 -3
- package/dist-server/server/modules/quay/quay.routes.js +1 -1
- package/dist-server/server/modules/quay/quay.service.js +4 -4
- package/dist-server/server/modules/quay/tests/contracts/fleet-cli-contracts.test.js +3 -3
- package/dist-server/server/modules/quay/tests/contracts/shapes.js +9 -9
- package/dist-server/server/modules/quay/tests/quay-fleet-locator.test.js +1 -1
- package/dist-server/server/modules/quay/tests/quay-fleet-project-id.test.js +4 -4
- package/dist-server/server/modules/quay/tests/quay-uri-resolve.test.js +10 -10
- package/dist-server/server/modules/session-hosts/tests/resident-server-restart.test.js +1 -1
- package/dist-server/server/modules/settings/codex-mcp-gateway.settings.js +1 -1
- package/dist-server/server/modules/settings/codex-model-providers.schema.js +349 -0
- package/dist-server/server/modules/settings/codex-model-providers.schema.js.map +1 -0
- package/dist-server/server/modules/settings/codex-model-providers.service.js +199 -0
- package/dist-server/server/modules/settings/codex-model-providers.service.js.map +1 -0
- package/dist-server/server/modules/settings/codex-model-providers.settings.js +547 -0
- package/dist-server/server/modules/settings/codex-model-providers.settings.js.map +1 -0
- package/dist-server/server/modules/settings/codex-model-providers.store.js +200 -0
- package/dist-server/server/modules/settings/codex-model-providers.store.js.map +1 -0
- package/dist-server/server/modules/settings/index.js +10 -0
- package/dist-server/server/modules/settings/index.js.map +1 -1
- package/dist-server/server/modules/settings/server-settings-file.js +28 -32
- package/dist-server/server/modules/settings/server-settings-file.js.map +1 -1
- package/dist-server/server/modules/settings/server-settings.js +2 -2
- package/dist-server/server/modules/settings/server-settings.js.map +1 -1
- package/dist-server/server/modules/settings/settings.module.js +35 -0
- package/dist-server/server/modules/settings/settings.module.js.map +1 -1
- package/dist-server/server/modules/settings/settings.routes.js +42 -0
- package/dist-server/server/modules/settings/settings.routes.js.map +1 -1
- package/dist-server/server/modules/settings/settings.service.js +8 -21
- package/dist-server/server/modules/settings/settings.service.js.map +1 -1
- package/dist-server/server/modules/settings/tests/cockpit-session-start-settings.routes.test.js +1 -0
- package/dist-server/server/modules/settings/tests/cockpit-session-start-settings.routes.test.js.map +1 -1
- package/dist-server/server/modules/settings/tests/codex-model-providers-settings.test.js +336 -0
- package/dist-server/server/modules/settings/tests/codex-model-providers-settings.test.js.map +1 -0
- package/dist-server/server/modules/settings/tests/codex-provider-advanced.test.js +466 -0
- package/dist-server/server/modules/settings/tests/codex-provider-advanced.test.js.map +1 -0
- package/dist-server/server/modules/settings/tests/codex-provider-import.test.js +475 -0
- package/dist-server/server/modules/settings/tests/codex-provider-import.test.js.map +1 -0
- package/dist-server/server/modules/voice/tests/voice-lexicon.test.js +9 -9
- package/dist-server/server/modules/voice/tests/voice-lexicon.test.js.map +1 -1
- package/dist-server/server/modules/voice/voice-lexicon.js +1 -1
- package/dist-server/server/modules/websocket/services/chat-control.service.js +21 -1
- package/dist-server/server/modules/websocket/services/chat-control.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js +25 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-background-task.test.js +18 -1
- package/dist-server/server/modules/websocket/tests/chat-background-task.test.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js +18 -1
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js.map +1 -1
- package/dist-server/server/modules/worktrees/services/worktree-list.service.js +1 -1
- package/dist-server/server/modules/worktrees/services/worktree-open.service.js +1 -1
- package/dist-server/server/modules/worktrees/services/worktree-remove.service.js +1 -1
- package/dist-server/server/shared/brand.js +18 -20
- package/dist-server/server/shared/brand.js.map +1 -1
- package/dist-server/server/shared/data-root-migration.js +3 -2
- package/dist-server/server/shared/data-root-migration.js.map +1 -1
- package/dist-server/server/shared/data-root.js +54 -59
- package/dist-server/server/shared/data-root.js.map +1 -1
- package/dist-server/server/shared/mcp-contract/types.js +20 -15
- package/dist-server/server/shared/mcp-contract/types.js.map +1 -1
- package/dist-server/server/shared/ports/codex-provider-registry.port.js +66 -0
- package/dist-server/server/shared/ports/codex-provider-registry.port.js.map +1 -0
- package/dist-server/server/shared/settings-file.js +120 -6
- package/dist-server/server/shared/settings-file.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-brand-env.test.js +76 -34
- package/dist-server/server/shared/tests/cloudpit-brand-env.test.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-data-root.test.js +35 -18
- package/dist-server/server/shared/tests/cloudpit-data-root.test.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-goal-exit-gate.test.js +153 -17
- package/dist-server/server/shared/tests/cloudpit-goal-exit-gate.test.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-runtime-flip.test.js +116 -114
- package/dist-server/server/shared/tests/cloudpit-runtime-flip.test.js.map +1 -1
- package/dist-server/server/shared/tests/frontend-import-cycle-budget.test.js +9 -1
- package/dist-server/server/shared/tests/frontend-import-cycle-budget.test.js.map +1 -1
- package/dist-server/server/shared/tests/quay-test-script.test.js +40 -6
- package/dist-server/server/shared/tests/quay-test-script.test.js.map +1 -1
- package/dist-server/server/shared/tests/settings-file.test.js +58 -2
- package/dist-server/server/shared/tests/settings-file.test.js.map +1 -1
- package/dist-server/server/shared/types.js.map +1 -1
- package/dist-server/server/shared/utils.js +1 -1
- package/electron/appIdMigration.js +467 -0
- package/electron/assets/logo-macos.icns +0 -0
- package/electron/assets/logo-macos.png +0 -0
- package/electron/assets/logo-windows.ico +0 -0
- package/electron/brandEnv.js +64 -0
- package/electron/cloud.js +3 -3
- package/electron/desktopNotifications.js +1 -1
- package/electron/launcher/index.html +1 -1
- package/electron/localServer.js +41 -7
- package/electron/main.js +33 -15
- package/electron/scripts/generate-macos-icon.js +34 -28
- package/electron/scripts/generate-windows-icon.js +66 -0
- package/electron/serverInstaller.js +20 -11
- package/electron/tests/cloudpit-appid-migration.test.mjs +514 -0
- package/electron/tests/cloudpit-brand-env-wiring.test.mjs +324 -0
- package/electron/tests/cloudpit-desktop-identity.test.mjs +42 -19
- package/electron/tests/cloudpit-runtime-identity-surfaces.test.mjs +10 -4
- package/electron/tests/cloudpit-userdata-migration.test.mjs +18 -5
- package/electron/userDataMigration.js +3 -0
- package/package.json +7 -6
- package/public/api-docs.html +3 -3
- package/scripts/brand-allowlist-check.mjs +233 -12
- package/scripts/brand-allowlist-check.test.mjs +270 -1
- package/scripts/cloudpit-distribution-check.mjs +57 -23
- package/scripts/cloudpit-distribution-check.test.mjs +42 -9
- package/scripts/codex-protocol-smoke.mjs +1 -1
- package/scripts/isolated-instance.sh +1 -1
- package/scripts/mcp-smoke.mjs +2 -2
- package/scripts/release/tests/fork-release-workflows.test.mjs +45 -0
- package/scripts/release/tests/server-installer-bundle-url.test.mjs +57 -9
- package/scripts/restart-when-idle.sh +1 -1
- package/scripts/shadow-prediction-report.mjs +1 -1
- package/scripts/suite-duration-baseline.tsv +45 -0
- package/scripts/ui-scenario.mjs +195 -0
- package/scripts/ui-scenarios/codex-provider-import.json +63 -0
- package/scripts/ui-scenarios/codex-provider-settings.json +77 -0
- package/scripts/voice-capture-process-check.false-forms.test.mjs +1 -1
- package/scripts/voice-phase0-report.test.mjs +1 -1
- package/server/load-env.ts +15 -4
- package/server/modules/browser-use/browser-use.service.ts +45 -14
- package/server/modules/browser-use/index.ts +3 -4
- package/server/modules/browser-use/mcp-server-names.ts +6 -5
- package/server/modules/browser-use/tests/browser-use.service.test.ts +63 -1
- package/server/modules/cli/asset-migration-files.ts +96 -0
- package/server/modules/cli/asset-migration-report.ts +123 -0
- package/server/modules/cli/asset-migration-store.ts +228 -0
- package/server/modules/cli/asset-migration.service.ts +236 -0
- package/server/modules/cli/browser-use-mcp.ts +9 -4
- package/server/modules/cli/cli.module.ts +21 -1
- package/server/modules/cli/cli.service.ts +14 -1
- package/server/modules/cli/tests/asset-migration.service.test.ts +349 -0
- package/server/modules/cli/tests/browser-use-mcp-entry.test.ts +202 -0
- package/server/modules/cli/tests/cli-environment-bootstrap.test.ts +1 -0
- package/server/modules/cli/tests/cli.service.test.ts +6 -1
- package/server/modules/cockpit/cockpit-brief-prompt.ts +1 -1
- package/server/modules/cockpit/cockpit-card-actions.ts +20 -3
- package/server/modules/cockpit/cockpit-card-feedback-store.ts +104 -9
- package/server/modules/cockpit/cockpit-card-registry.ts +2 -2
- package/server/modules/cockpit/cockpit-fleet-card-projection.ts +3 -0
- package/server/modules/cockpit/cockpit-fleet-executor.ts +1 -1
- package/server/modules/cockpit/cockpit-knowledge-reading.ts +17 -0
- package/server/modules/cockpit/cockpit.module.ts +2 -2
- package/server/modules/cockpit/cockpit.reducer.ts +1 -1
- package/server/modules/cockpit/tests/cockpit-card-feedback.test.ts +116 -1
- package/server/modules/cockpit/tests/cockpit-fleet-card-provider.test.ts +2 -2
- package/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.ts +205 -3
- package/server/modules/context-events/context-event-writer.ts +6 -6
- package/server/modules/context-events/context-events.module.ts +2 -2
- package/server/modules/context-events/session-ask-stream-reader.ts +1 -1
- package/server/modules/context-events/session-blocked-events.ts +3 -3
- package/server/modules/context-events/tests/session-ask-event-writer.test.ts +1 -1
- package/server/modules/context-events/tests/session-blocked-events.test.ts +3 -3
- package/server/modules/context-events/tests/session-run-events.test.ts +1 -1
- package/server/modules/database/migrations.ts +24 -1
- package/server/modules/database/repositories/sessions.db.ts +41 -4
- package/server/modules/database/repositories/voice-user-identifiers.db.ts +1 -1
- package/server/modules/database/schema.ts +16 -2
- package/server/modules/database/tests/migrations-ensure-columns.test.ts +2 -0
- package/server/modules/database/tests/sessions-provider-mapping.test.ts +2 -2
- package/server/modules/debug-agent/tests/debug-agent-permission-popup.test.ts +2 -2
- package/server/modules/liaison/liaison-deliver.service.ts +4 -4
- package/server/modules/liaison/liaison.module.ts +1 -1
- package/server/modules/mcp-gateway/mcp-gateway.auth.ts +3 -2
- package/server/modules/mcp-gateway/mcp-self-target.ts +2 -2
- package/server/modules/mcp-gateway/mcp-session-send.ts +21 -2
- package/server/modules/mcp-gateway/mcp-tool-annotations.ts +4 -4
- package/server/modules/mcp-gateway/oauth-metadata.gate.ts +4 -5
- package/server/modules/mcp-gateway/tests/knowledge-effective-config-proof.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/knowledge-peer-correlation-proof.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-approvals.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-audit-route.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-audit.test.ts +4 -4
- package/server/modules/mcp-gateway/tests/mcp-auth.test.ts +3 -1
- package/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.ts +7 -3
- package/server/modules/mcp-gateway/tests/mcp-correlation-id.test.ts +8 -8
- package/server/modules/mcp-gateway/tests/mcp-draft.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-english-only.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-gateway-wiring.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-knowledge-facts.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-overview.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-pending-interaction.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-read-tools.test.ts +3 -3
- package/server/modules/mcp-gateway/tests/mcp-run-get.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-self-target.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-background.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-session-host-control.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-session-search-pruning.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-search.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-send.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-ui-last-opened.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-usage-stats.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-write-notification.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/oauth-flow.e2e.test.ts +3 -3
- package/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
- package/server/modules/oauth/access-tokens.service.ts +8 -8
- package/server/modules/oauth/oauth-consent.service.ts +20 -15
- package/server/modules/oauth/tests/access-token-scopes.test.ts +55 -34
- package/server/modules/oauth/tests/access-tokens.service.test.ts +50 -14
- package/server/modules/oauth/tests/oauth-consent-page.test.ts +29 -21
- package/server/modules/oauth/tests/oauth-consent-ratelimit.test.ts +2 -2
- package/server/modules/oauth/tests/token-info.routes.test.ts +2 -2
- package/server/modules/observation/architecture-delta.producer.ts +1 -1
- package/server/modules/observation/blind-spots.ts +1 -1
- package/server/modules/observation/observation-store.ts +54 -16
- package/server/modules/observation/observation-uri.ts +34 -21
- package/server/modules/observation/observation.routes.ts +1 -1
- package/server/modules/observation/project-truth.ts +3 -3
- package/server/modules/observation/session-ask-decision-answer.ts +2 -1
- package/server/modules/observation/session-digest-llm.ts +7 -1
- package/server/modules/observation/session-digest.ts +39 -5
- package/server/modules/observation/tests/architecture-delta.test.ts +1 -1
- package/server/modules/observation/tests/observation-routes.test.ts +13 -0
- package/server/modules/observation/tests/observation-store.test.ts +58 -0
- package/server/modules/observation/tests/project-truth.test.ts +2 -2
- package/server/modules/observation/tests/session-ask-decision-digest.test.ts +189 -0
- package/server/modules/observation/tests/session-digest.test.ts +43 -0
- package/server/modules/providers/index.ts +13 -0
- package/server/modules/providers/list/claude/claude-host-driver.provider.ts +1 -1
- package/server/modules/providers/list/codex/codex-app-server.client.ts +37 -5
- package/server/modules/providers/list/codex/codex-app-server.connection.ts +1 -1
- package/server/modules/providers/list/codex/codex-host-driver.contract.ts +18 -9
- package/server/modules/providers/list/codex/codex-host-driver.provider.ts +15 -1
- package/server/modules/providers/list/codex/codex-models.provider.ts +16 -3
- package/server/modules/providers/list/codex/codex-provider-injection.ts +323 -0
- package/server/modules/providers/list/codex/codex-resident-provider-launch.ts +71 -0
- package/server/modules/providers/list/codex/codex-runtime.provider.ts +20 -1
- package/server/modules/providers/list/cursor/cursor-models.provider.ts +1 -1
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +1 -1
- package/server/modules/providers/provider.routes.ts +23 -2
- package/server/modules/providers/services/provider-models.service.ts +187 -124
- package/server/modules/providers/services/provider-runtime.service.ts +3 -0
- package/server/modules/providers/services/session-model-resolver.ts +180 -0
- package/server/modules/providers/services/session-provider-binding.ts +176 -0
- package/server/modules/providers/services/sessions.service.ts +5 -1
- package/server/modules/providers/tests/claude-resident-addressable.test.ts +2 -2
- package/server/modules/providers/tests/claude-session-name-authority.test.ts +4 -4
- package/server/modules/providers/tests/codex-app-server-protocol.test.ts +1 -1
- package/server/modules/providers/tests/codex-host-driver-persistent.test.ts +2 -2
- package/server/modules/providers/tests/codex-provider-model-binding.test.ts +345 -0
- package/server/modules/providers/tests/codex-resident-provider-injection.test.ts +561 -0
- package/server/modules/providers/tests/codex-runtime-provider-injection.test.ts +269 -0
- package/server/modules/providers/tests/codex-session-provider-binding.test.ts +386 -0
- package/server/modules/providers/tests/codex-sessions.test.ts +1 -1
- package/server/modules/providers/tests/opencode-sessions.test.ts +2 -2
- package/server/modules/providers/tests/provider-models.service.test.ts +15 -0
- package/server/modules/providers/tests/provider.routes.test.ts +1 -1
- package/server/modules/quay/index.ts +1 -1
- package/server/modules/quay/quay-dispatch-carrier.ts +1 -1
- package/server/modules/quay/quay-fleet-cli.ts +1 -1
- package/server/modules/quay/quay-fleet-locator.ts +2 -2
- package/server/modules/quay/quay-fleet-project-id.ts +14 -14
- package/server/modules/quay/quay-fleet-registry.ts +8 -8
- package/server/modules/quay/quay-suite-fanin-reader.ts +1 -1
- package/server/modules/quay/quay-uri-resolve.ts +8 -8
- package/server/modules/quay/quay.module.ts +3 -3
- package/server/modules/quay/quay.routes.ts +1 -1
- package/server/modules/quay/quay.service.ts +6 -6
- package/server/modules/quay/session-task-chain.service.ts +1 -1
- package/server/modules/quay/tests/contracts/fleet-cli-contracts.test.ts +3 -3
- package/server/modules/quay/tests/contracts/shapes.ts +10 -10
- package/server/modules/quay/tests/quay-fleet-locator.test.ts +1 -1
- package/server/modules/quay/tests/quay-fleet-project-id.test.ts +6 -6
- package/server/modules/quay/tests/quay-uri-resolve.test.ts +10 -10
- package/server/modules/session-hosts/tests/resident-server-restart.test.ts +1 -1
- package/server/modules/settings/codex-mcp-gateway.settings.ts +1 -1
- package/server/modules/settings/codex-model-providers.schema.ts +460 -0
- package/server/modules/settings/codex-model-providers.service.ts +235 -0
- package/server/modules/settings/codex-model-providers.settings.ts +713 -0
- package/server/modules/settings/codex-model-providers.store.ts +244 -0
- package/server/modules/settings/index.ts +18 -0
- package/server/modules/settings/server-settings-file.ts +29 -41
- package/server/modules/settings/server-settings.ts +2 -3
- package/server/modules/settings/settings.module.ts +41 -0
- package/server/modules/settings/settings.routes.ts +37 -0
- package/server/modules/settings/settings.service.ts +21 -26
- package/server/modules/settings/tests/cockpit-session-start-settings.routes.test.ts +1 -0
- package/server/modules/settings/tests/codex-model-providers-settings.test.ts +413 -0
- package/server/modules/settings/tests/codex-provider-advanced.test.ts +540 -0
- package/server/modules/settings/tests/codex-provider-import.test.ts +621 -0
- package/server/modules/voice/tests/voice-lexicon.test.ts +10 -10
- package/server/modules/voice/voice-lexicon.ts +1 -1
- package/server/modules/websocket/services/chat-control.service.ts +35 -2
- package/server/modules/websocket/services/chat-websocket.service.ts +25 -1
- package/server/modules/websocket/tests/chat-background-task.test.ts +17 -1
- package/server/modules/websocket/tests/chat-stop-task.test.ts +17 -1
- package/server/modules/worktrees/services/worktree-list.service.ts +1 -1
- package/server/modules/worktrees/services/worktree-open.service.ts +1 -1
- package/server/modules/worktrees/services/worktree-remove.service.ts +1 -1
- package/server/shared/brand.ts +24 -38
- package/server/shared/data-root-migration.ts +3 -2
- package/server/shared/data-root.ts +73 -79
- package/server/shared/interfaces.ts +1 -1
- package/server/shared/mcp-contract/types.ts +20 -15
- package/server/shared/ports/codex-provider-registry.port.ts +133 -0
- package/server/shared/ports/session-blocked-events.port.ts +1 -1
- package/server/shared/ports/session-run-events.port.ts +2 -2
- package/server/shared/settings-file.ts +167 -6
- package/server/shared/tests/architecture-ratchet.baseline.json +15 -15
- package/server/shared/tests/cloudpit-brand-env.test.ts +106 -36
- package/server/shared/tests/cloudpit-data-root.test.ts +42 -18
- package/server/shared/tests/cloudpit-goal-exit-gate.baseline.json +6 -2
- package/server/shared/tests/cloudpit-goal-exit-gate.test.ts +179 -17
- package/server/shared/tests/cloudpit-runtime-flip.test.ts +162 -123
- package/server/shared/tests/frontend-import-cycle-budget.baseline.json +8 -6
- package/server/shared/tests/frontend-import-cycle-budget.test.ts +9 -1
- package/server/shared/tests/quay-test-script.test.ts +40 -6
- package/server/shared/tests/settings-file.test.ts +83 -1
- package/server/shared/types.ts +121 -8
- package/server/shared/utils.ts +1 -1
- package/dist/assets/channel-D7XqNTJC.js +0 -1
- package/dist/assets/channel-sbQyI1an.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-DHudi-zH.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-DV7ybJJG.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-DHudi-zH.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-DV7ybJJG.js +0 -1
- package/dist/assets/index-BsACp0s2.css +0 -32
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CNMNp6YA.js +0 -8
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-DOjtDEUW.js +0 -8
- package/dist/icons/icon-128x128.svg +0 -12
- package/dist/icons/icon-144x144.svg +0 -12
- package/dist/icons/icon-152x152.svg +0 -12
- package/dist/icons/icon-192x192.svg +0 -12
- package/dist/icons/icon-384x384.svg +0 -12
- package/dist/icons/icon-512x512.svg +0 -12
- package/dist/icons/icon-72x72.svg +0 -12
- package/dist/icons/icon-96x96.svg +0 -12
- package/dist/icons/icon-template.svg +0 -12
package/dist/assets/{xychartDiagram-ELKLHX3M-BAKns-7o.js → xychartDiagram-ELKLHX3M-XlsWelDb.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as n,s as xi,g as di,o as Yt,n as fi,a as pi,b as mi,l as Nt,D as yi,e as bi,p as Ai,y as kt,A as Ht,B as wi,E as Ci,i as Si,ay as Ri,O as Ot}from"./mermaid.core-
|
|
1
|
+
import{_ as n,s as xi,g as di,o as Yt,n as fi,a as pi,b as mi,l as Nt,D as yi,e as bi,p as Ai,y as kt,A as Ht,B as wi,E as Ci,i as Si,ay as Ri,O as Ot}from"./mermaid.core-fvTQFUX1.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as Wt}from"./linear-C0Kwu3Yp.js";import"./index-S8ow0XfK.js";import"./vendor-codemirror-BfCHTlzg.js";import"./vendor-react-D0N9rdhf.js";import"./vendor-xterm-CS4rQ5Mr.js";import"./defaultLocale-DX6XiGOO.js";function Ti(e,t,i){e=+e,t=+t,i=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+i;for(var s=-1,a=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(a);++s<a;)o[s]=e+s*i;return o}function wt(){var e=ki().unknown(void 0),t=e.domain,i=e.range,s=0,a=1,o,l,p=!1,d=0,k=0,T=.5;delete e.unknown;function _(){var b=t().length,E=a<s,L=E?a:s,P=E?s:a;o=(P-L)/Math.max(1,b-d+k*2),p&&(o=Math.floor(o)),L+=(P-L-o*(b-d))*T,l=o*(1-d),p&&(L=Math.round(L),l=Math.round(l));var I=Ti(b).map(function(m){return L+o*m});return i(E?I.reverse():I)}return e.domain=function(b){return arguments.length?(t(b),_()):t()},e.range=function(b){return arguments.length?([s,a]=b,s=+s,a=+a,_()):[s,a]},e.rangeRound=function(b){return[s,a]=b,s=+s,a=+a,p=!0,_()},e.bandwidth=function(){return l},e.step=function(){return o},e.round=function(b){return arguments.length?(p=!!b,_()):p},e.padding=function(b){return arguments.length?(d=Math.min(1,k=+b),_()):d},e.paddingInner=function(b){return arguments.length?(d=Math.min(1,b),_()):d},e.paddingOuter=function(b){return arguments.length?(k=+b,_()):k},e.align=function(b){return arguments.length?(T=Math.max(0,Math.min(1,b)),_()):T},e.copy=function(){return wt(t(),[s,a]).round(p).paddingInner(d).paddingOuter(k).align(T)},_i.apply(_(),arguments)}var Ct=function(){var e=n(function(F,h,u,g){for(u=u||{},g=F.length;g--;u[F[g]]=h);return u},"o"),t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],a=[1,5],o=[1,6],l=[1,7],p=[1,5,10,12,14,16,18,19,21,23,36,37,38],d=[1,25],k=[1,26],T=[1,28],_=[1,29],b=[1,30],E=[1,31],L=[1,32],P=[1,33],I=[1,34],m=[1,35],D=[1,36],c=[1,37],B=[1,43],W=[1,42],X=[1,47],Y=[1,50],S=[1,10,12,14,16,18,19,21,23,36,37,38],H=[1,10,12,14,16,18,19,21,23,24,26,28,29,36,37,38],A=[1,10,12,14,16,18,19,21,23,24,26,28,29,36,37,38,42,43,44,45,46,47,48,49,50,51],w=[1,65],V=[26,28],R={trace:n(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,dataPoints:25,SQUARE_BRACES_END:26,dataPoint:27,COMMA:28,NUMBER_WITH_DECIMAL:29,STR:30,xAxisData:31,bandData:32,ARROW_DELIMITER:33,commaSeparatedTexts:34,yAxisData:35,NEWLINE:36,SEMI:37,EOF:38,alphaNum:39,MD_STR:40,alphaNumToken:41,AMP:42,NUM:43,ALPHA:44,PLUS:45,EQUALS:46,MULT:47,DOT:48,BRKT:49,MINUS:50,UNDERSCORE:51,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",28:"COMMA",29:"NUMBER_WITH_DECIMAL",30:"STR",33:"ARROW_DELIMITER",36:"NEWLINE",37:"SEMI",38:"EOF",40:"MD_STR",42:"AMP",43:"NUM",44:"ALPHA",45:"PLUS",46:"EQUALS",47:"MULT",48:"DOT",49:"BRKT",50:"MINUS",51:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[27,2],[27,1],[13,1],[13,2],[13,1],[31,1],[31,3],[32,3],[34,3],[34,1],[15,1],[15,2],[15,1],[35,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[39,1],[39,2],[41,1],[41,1],[41,1],[41,1],[41,1],[41,1],[41,1],[41,1],[41,1],[41,1]],performAction:n(function(h,u,g,x,C,r,rt){var f=r.length-1;switch(C){case 5:x.setOrientation(r[f]);break;case 9:x.setDiagramTitle(r[f].text.trim());break;case 12:x.setLineData({text:"",type:"text"},r[f]);break;case 13:x.setLineData(r[f-1],r[f]);break;case 14:x.setBarData({text:"",type:"text"},r[f]);break;case 15:x.setBarData(r[f-1],r[f]);break;case 16:this.$=r[f].trim(),x.setAccTitle(this.$);break;case 17:case 18:this.$=r[f].trim(),x.setAccDescription(this.$);break;case 19:this.$=r[f-1];break;case 20:case 30:this.$=[r[f-2],...r[f]];break;case 21:case 31:this.$=[r[f]];break;case 22:this.$={value:Number(r[f-1]),label:r[f]};break;case 23:this.$={value:Number(r[f]),label:""};break;case 24:x.setXAxisTitle(r[f]);break;case 25:x.setXAxisTitle(r[f-1]);break;case 26:x.setXAxisTitle({type:"text",text:""});break;case 27:x.setXAxisBand(r[f]);break;case 28:x.setXAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 29:this.$=r[f-1];break;case 32:x.setYAxisTitle(r[f]);break;case 33:x.setYAxisTitle(r[f-1]);break;case 34:x.setYAxisTitle({type:"text",text:""});break;case 35:x.setYAxisRangeData(Number(r[f-2]),Number(r[f]));break;case 39:this.$={text:r[f],type:"text"};break;case 40:this.$={text:r[f],type:"text"};break;case 41:this.$={text:r[f],type:"markdown"};break;case 42:this.$=r[f];break;case 43:this.$=r[f-1]+""+r[f];break}},"anonymous"),table:[e(t,i,{3:1,4:2,7:4,5:s,36:a,37:o,38:l}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,36:a,37:o,38:l}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],36:a,37:o,38:l}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(p,[2,36]),e(p,[2,37]),e(p,[2,38]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,36:a,37:o,38:l}),{1:[2,3]},e(p,[2,5]),e(t,[2,7],{4:22,36:a,37:o,38:l}),{11:23,30:d,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},{11:39,13:38,24:B,29:W,30:d,31:40,32:41,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},{11:45,15:44,29:X,30:d,35:46,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},{11:49,17:48,24:Y,30:d,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},{11:52,17:51,24:Y,30:d,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},{20:[1,53]},{22:[1,54]},e(S,[2,18]),{1:[2,2]},e(S,[2,8]),e(S,[2,9]),e(H,[2,39],{41:55,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c}),e(H,[2,40]),e(H,[2,41]),e(A,[2,42]),e(A,[2,44]),e(A,[2,45]),e(A,[2,46]),e(A,[2,47]),e(A,[2,48]),e(A,[2,49]),e(A,[2,50]),e(A,[2,51]),e(A,[2,52]),e(A,[2,53]),e(S,[2,10]),e(S,[2,24],{32:41,31:56,24:B,29:W}),e(S,[2,26]),e(S,[2,27]),{33:[1,57]},{11:59,30:d,34:58,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},e(S,[2,11]),e(S,[2,32],{35:60,29:X}),e(S,[2,34]),{33:[1,61]},e(S,[2,12]),{17:62,24:Y},{25:63,27:64,29:w},e(S,[2,14]),{17:66,24:Y},e(S,[2,16]),e(S,[2,17]),e(A,[2,43]),e(S,[2,25]),{29:[1,67]},{26:[1,68]},{26:[2,31],28:[1,69]},e(S,[2,33]),{29:[1,70]},e(S,[2,13]),{26:[1,71]},{26:[2,21],28:[1,72]},e(V,[2,23],{30:[1,73]}),e(S,[2,15]),e(S,[2,28]),e(S,[2,29]),{11:59,30:d,34:74,39:24,40:k,41:27,42:T,43:_,44:b,45:E,46:L,47:P,48:I,49:m,50:D,51:c},e(S,[2,35]),e(S,[2,19]),{25:75,27:64,29:w},e(V,[2,22]),{26:[2,30]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],74:[2,30],75:[2,20]},parseError:n(function(h,u){if(u.recoverable)this.trace(h);else{var g=new Error(h);throw g.hash=u,g}},"parseError"),parse:n(function(h){var u=this,g=[0],x=[],C=[null],r=[],rt=this.table,f="",gt=0,Mt=0,li=2,zt=1,ci=r.slice.call(arguments,1),v=Object.create(this.lexer),$={yy:{}};for(var mt in this.yy)Object.prototype.hasOwnProperty.call(this.yy,mt)&&($.yy[mt]=this.yy[mt]);v.setInput(h,$.yy),$.yy.lexer=v,$.yy.parser=this,typeof v.yylloc>"u"&&(v.yylloc={});var yt=v.yylloc;r.push(yt);var ui=v.options&&v.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function gi(z){g.length=g.length-2*z,C.length=C.length-z,r.length=r.length-z}n(gi,"popStack");function Bt(){var z;return z=x.pop()||v.lex()||zt,typeof z!="number"&&(z instanceof Array&&(x=z,z=x.pop()),z=u.symbols_[z]||z),z}n(Bt,"lex");for(var M,U,O,bt,G={},xt,N,Vt,dt;;){if(U=g[g.length-1],this.defaultActions[U]?O=this.defaultActions[U]:((M===null||typeof M>"u")&&(M=Bt()),O=rt[U]&&rt[U][M]),typeof O>"u"||!O.length||!O[0]){var At="";dt=[];for(xt in rt[U])this.terminals_[xt]&&xt>li&&dt.push("'"+this.terminals_[xt]+"'");v.showPosition?At="Parse error on line "+(gt+1)+`:
|
|
2
2
|
`+v.showPosition()+`
|
|
3
3
|
Expecting `+dt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":At="Parse error on line "+(gt+1)+": Unexpected "+(M==zt?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(At,{text:v.match,token:this.terminals_[M]||M,line:v.yylineno,loc:yt,expected:dt})}if(O[0]instanceof Array&&O.length>1)throw new Error("Parse Error: multiple actions possible at state: "+U+", token: "+M);switch(O[0]){case 1:g.push(M),C.push(v.yytext),r.push(v.yylloc),g.push(O[1]),M=null,Mt=v.yyleng,f=v.yytext,gt=v.yylineno,yt=v.yylloc;break;case 2:if(N=this.productions_[O[1]][1],G.$=C[C.length-N],G._$={first_line:r[r.length-(N||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(N||1)].first_column,last_column:r[r.length-1].last_column},ui&&(G._$.range=[r[r.length-(N||1)].range[0],r[r.length-1].range[1]]),bt=this.performAction.apply(G,[f,Mt,gt,$.yy,O[1],C,r].concat(ci)),typeof bt<"u")return bt;N&&(g=g.slice(0,-1*N*2),C=C.slice(0,-1*N),r=r.slice(0,-1*N)),g.push(this.productions_[O[1]][0]),C.push(G.$),r.push(G._$),Vt=rt[g[g.length-2]][g[g.length-1]],g.push(Vt);break;case 3:return!0}}return!0},"parse")},ot=function(){var F={EOF:1,parseError:n(function(u,g){if(this.yy.parser)this.yy.parser.parseError(u,g);else throw new Error(u)},"parseError"),setInput:n(function(h,u){return this.yy=u||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:n(function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var u=h.match(/(?:\r\n?|\n).*/g);return u?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},"input"),unput:n(function(h){var u=h.length,g=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-u),this.offset-=u;var x=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===x.length?this.yylloc.first_column:0)+x[x.length-g.length].length-g[0].length:this.yylloc.first_column-u},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-u]),this.yyleng=this.yytext.length,this},"unput"),more:n(function(){return this._more=!0,this},"more"),reject:n(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
|
|
4
4
|
`+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:n(function(h){this.unput(this.match.slice(h))},"less"),pastInput:n(function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:n(function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:n(function(){var h=this.pastInput(),u=new Array(h.length+1).join("-");return h+this.upcomingInput()+`
|
package/dist/build-info.json
CHANGED
package/dist/convert-icons.md
CHANGED
|
@@ -1,53 +1,17 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Cloudpit icons
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The favicon, logo and PWA icons are generated from one committed raster source:
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
1. Go to https://cloudconvert.com/svg-to-png
|
|
7
|
-
2. Upload each SVG file from the `/icons/` directory
|
|
8
|
-
3. Download the PNG versions
|
|
9
|
-
4. Replace the existing PNG files
|
|
5
|
+
- `public/logo-source.png` — glossy blue airfoil canopy on navy (1254×1254, raster only).
|
|
10
6
|
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
npm install sharp
|
|
14
|
-
node -e "
|
|
15
|
-
const sharp = require('sharp');
|
|
16
|
-
const fs = require('fs');
|
|
17
|
-
const sizes = [72, 96, 128, 144, 152, 192, 384, 512];
|
|
18
|
-
sizes.forEach(size => {
|
|
19
|
-
const svgPath = \`./icons/icon-\${size}x\${size}.svg\`;
|
|
20
|
-
const pngPath = \`./icons/icon-\${size}x\${size}.png\`;
|
|
21
|
-
if (fs.existsSync(svgPath)) {
|
|
22
|
-
sharp(svgPath).png().toFile(pngPath);
|
|
23
|
-
console.log(\`Converted \${svgPath} to \${pngPath}\`);
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
"
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Method 3: Using ImageMagick (if installed)
|
|
30
|
-
```bash
|
|
31
|
-
cd public/icons
|
|
32
|
-
for size in 72 96 128 144 152 192 384 512; do
|
|
33
|
-
convert "icon-${size}x${size}.svg" "icon-${size}x${size}.png"
|
|
34
|
-
done
|
|
35
|
-
```
|
|
7
|
+
Regenerate the whole set from the repo root:
|
|
36
8
|
|
|
37
|
-
## Method 4: Using Inkscape (if installed)
|
|
38
9
|
```bash
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
done
|
|
10
|
+
node public/generate-icons.js # favicon, logo, PWA icons
|
|
11
|
+
node electron/scripts/generate-macos-icon.js # logo-macos.png + .icns
|
|
12
|
+
node electron/scripts/generate-windows-icon.js# logo-windows.ico
|
|
43
13
|
```
|
|
44
14
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
- Primary color background with rounded corners
|
|
49
|
-
- White stroke icon that's clearly visible
|
|
50
|
-
- Consistent sizing and proportions across all sizes
|
|
51
|
-
- Proper PWA-compliant format
|
|
52
|
-
|
|
53
|
-
Once converted, the PNG files will replace the existing ones and provide a consistent icon experience across all platforms.
|
|
15
|
+
The wide airfoil is used at full width with a centered navy field; maskable icon
|
|
16
|
+
consumers accept the tip crop. There is no vector source yet, so `favicon.svg` and
|
|
17
|
+
`logo.svg` are thin wrappers that embed a raster PNG.
|
package/dist/favicon.png
CHANGED
|
Binary file
|
package/dist/favicon.svg
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64">
|
|
2
|
-
<!-- Background fills entire canvas -->
|
|
3
|
-
<rect x="0" y="0" width="64" height="64" fill="hsl(240 5.9% 10%)"/>
|
|
4
|
-
|
|
5
|
-
<!-- MessageSquare icon - exact same as sidebar -->
|
|
6
|
-
<g transform="translate(32, 32) scale(1.333) translate(-12, -12)" stroke="white" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round">
|
|
7
|
-
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
|
|
8
|
-
</g>
|
|
9
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><image href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAPoAAAD6AG1e1JrAAAUiUlEQVR4nO2aeViN+R/3v/c5p2SJECEKRUpI2bLvyr7F2LLvzNjGMoaGQdnJmJGM7LLLXkpkCxGy71uRsqVFnfs+r+c6p5Bkfs9/54/nOdf1vs59Ttv7/Xl/tvt7EipLZ/5fhjA2AWNDGJuAsSGMTcDYEMYmYGwIYxMwNoSxCRgbwtgEjA1hbALGhjA2AWNDGJuAsSGMTcDYEMYmYGwIYxMwNoSxCRgbwtgEjA1hbALGhhDFHZFK/DfEN6+d/gP5fL2kcy7UQLL8jJo5qIVUSg8XpNKuSKXdkMrUQSpbD6lsA6Ry7jloiGTdEFX5RmgqNEZj0wSpfBOElTuiRF2ERR1U1k0wr9aOak370LbfZPpP8GXCnwHMWb2DZZuP8c+eKNYevMDaQzH8feAyK/deRIh8xIp8X/+H8JL5vV89GyX1cM5HeM1s4aVr5wh3RbLKEV6uAZK1O1L5xkg2zVFXbIGmcms09u0QldohbDwQFTwxqd6Tyq1H4fXzIuYF7GFX2AWu3E/gcVI6T99pSUyHhDS4/TqLmKcfibqbTNj1BA5eesKu0/fYEnkb8a2z+V3/L9e/hcgdgM+uf3FeL1oPl68wCHfLEV/f4LJBuG1z1PZt0Th0RHLsiajhjVRvLKU7zMJj4hqWbIngdOwD3qdmopD9SFcg/qPMlWcfCb3+ii2nHrBsbwwz1x1nzOLd9J8VROdfVtF6mB9Nvefg3meWPgC50ze32PzdF/9DvPjG/XxS3iA6j+tl9K67I1Vogsq2BRp7D9SOXRA1B6BuOYMqo4MY/E8U204/5HlSao5cDMJfpSmcf5pGcEwiC/bFMWxlKO1//Ze6/eYYsqNUnV5YOHlS2K4ZBW3cKWBdB9MytTGxcsHEqtbnEsg/AN9nweeyyJ3+OWleovpX8V+c/5z6OemeW7yVG8Lguj7dG6KyaY7Gvi1qh04Ip36YtppJS58QNl6IJzFN+UZ0fKqOk08y+OvUc0b9G03LqZup1H02Fu5DUNl5Iko1RJi7IMyqIUzsEZrKCE0lhMYWoa6AUJVHqKwRqnKfSyA/d3/UFH9Q619cz5X236T+V/FCn/Jl6iLK6FO+EZpKLVFX8URU6YFZk0l0mbuH0OsvyZK/6CZNhhtvFdbHJDF80xVqT9qKRTdfRIMJiOpDEE7eCJdhmDUdj13HKTTtO4M+4/5k8hx/Fqxcz8r1O1kbHMK6PUdYu/cYf+08ypItIXl7QO5O/n8r/nPqfxafu+5zNbtc9S6s6hqcV9s0RV25taGpmdYZRo9ZWzh3KwFdjuhPCrzMgNPP05gT9pgmi05RbMRWROeVSB6LEZ2XYz1qAz2Xh7Em/Bbn7r3iUeJ74t9n8Cxdx41UCH8FG+8qLLyUwbSI94zZn8iQ4Of03/yEfpse554C/8v5vAGonif9cwXAIDxv6n/t8irrhmgqNkdYt0Tl2JsOE/8m+sZTg2idDl6m6jj1NINlp17gte4yVXzCKTwlFNMpYZjPCKfO8nNMD7lF5N3XJKVr+QDczoC9r8AnTodXRCYNdn2g/JpEzHyfIs28g5hwFTH8HKJvOKJ3KKLLfkTDFfkH4Pvd4EfjTy8416jLm/aGGe+CKFUboQ9A2XpobJsgWTdDVPCgfv85HI++bRAuK3ArMZOg8y8ZGhiN0697KDJqB8WnH8dtzU0GHklg+eW3xLxKJ12rkAFcTYf18QqT47T0PKelVbiWuiEZOG7/iF3QW2z/eUXZZU8p8ec9ivwWR8GpVzEZH42m737UzZegdp2S/xjUB+BzEPLv+rlF51108s55vftuqMvVR12+EaJUY8o2Gcba3SeRZdmQ7lefp7L0yB06/rEbKy8/VB18Ef03YON7nt/OJHP1rWwoB0Mv0EFsmsz2RC2Ln2iZcUdmzFWZfudlOp7Q0uRQBrV3pOAQ9Aab1S8ps+wZxf0eU9jnNqZjTyN13oTUyBep7u9IblO/X4R+tPl93/md/7PmRU7qq8rUQVOhIaK0O+qK7Rjhs5bktykGMXHPU1iwJ5ZWEwMp3nwckutQRPPfKTB0C15bbxKdkJHTDxQUReGdVuZ+hsypFJkdr2VWPJWZcVtm1BWZ3ucUPMO1ND6YQZ3dqdTYlkKVDW8pt/I55lMvo/5pP1LrNYjGi5EaLsgOgOvk7ADk3f7yS/2vMz7X6PvO9Vx1X7o26rJ1UZdrgChen+qeYzl18aZBzrPkNJaHXKX1z/9QvMFARJVOSM79EK1m0XzBEU7cf2MQrtPpyJJlZDk7AB9khTufFMLey6xLkFnwUGZSnMzwywp9z+voFqXDM0Km4f50HNYmUmLmNTTexxAdtyLarENqtRqpyWKkBnOR3KYj1fr52wzIHQzxo/e+iM9b97nT3hVN+fqIknVQV2jJ1EUbyMzMJCNLYdvJO3SbsQGrht5IFVsiVfJEOA2g+vBV7L7wCFkHKTp4nCnzKkvmY47w51kKsWkKx97JbE2UWf1c5s8HChNvKgyMUehyMovGe1Ow/+sF5tOuIQZHIrwOILruRHTcjNR2LVKzZUju85Dq/Y5UewpSjXG5e0B+6Z8j/EtPyCf9v+n2tVBZuaLRu160NlWbDyTqYpzB9XO34hnmtwv7tqNRV2iEsG6EKN+WYk3HMmfLCV5naHmmQMQ7mcgPWmLTFa6lK0R/lAn/oHDgrcyOJJnABIUZ9xR+ipHxjMqixeFUam9OotSiJ4hfriG8zyIGRiJ5hyH1CkHVZRuqdoGoWvqjauKHVN8HyW0akssEpBqj8+8BeYPxeVvMLoH8Gl+2eHUZN1Sl3BAl6jF02lLS0tJ58zET3y0ncekxDbNKTRH6kai/g7P1oOMkf6KfJnFHga2vZAJeaNmeKLM7SSb4tcymVzLrX8oEJMjMf6zQM1ah5kmFzucVlt6SiXiexa2kTB6/yeTqywx2x31g0JaHWIyMRHTZg6pbMKJNIKLRMkT9BYh6f6Cq9xsqt8moXH7ODsB/rbzfBiLvTU7u29taaMq6IcydKVHNg+CDkQbXj164T5eJq7Cs2dmwJ6j0S1CJOljV78eKA2e5/AkCE3T8fjuLBQ+1LHmssPixwqLHMr6PZX69q9DzioJTpILYq1ArXGHfC4VM/cxEQavTkfxJx9OPOh5+0PEgBW68h3VXPuI46QSiVSAlu6+nolcANt38KdZyPsJ5AqLaaITjCETVwfltgv91L5Dn/t6yBqrSLmisXBFmjjTuMponz1+SlJLJjL8PUrXNCDSlXbIzR78LlHCjzci57HuYTFASjL6iZdQVLRPjZCbekA31PCZOR9cLCk6hMoX2yYhtWsRGLdOvymQqCugU4tMULrxWOPJUJvi+zIbbWtbGZbIq9hP+lzPY/VAh7Ekmh2Jfcv7Re84+TWPfrRQWn0hgQEAs1YZvxrzNAsw7LP1RAL4V/l33N5RBDdRWtZFK1DA4P+kPfzKzZEJjHtF+zBIsHNogilZBVaomolh1Cldqxs9rD7AxEcbF6ehxJov+F2UGXFTod0lHt/My9Y5lUmrHJ1QbPiHWZyDWpWEamMrGe1qD448/KoS+UFh3W2buxUwmRmUwMjyNgUc/MiQ0lRlnPxF0W2sIzNFnCrsf61h5NYvZZ9OZGPGRUaEf6ROSQrONiVRd+hCreXe/BuCbMZfnVvjbu7xsaKxcEIUcKGnXlN2HIniXpmXu+jAc241EoxddtApqvfsFq2DXuDcLT9/B7wX0OKulS5SWbmcVOp3R0SpCS+XgVCT/t4hFbxFL3iIt1z8nIy1LJujWJ9JlHYefKSy5qmVM5Ce6Hkylxa4P1N/yFreNb2i18z1Dj6cz42wGk06l433kIx673tFwUxINNrymbmACTv5PsJ53G/NpsZj+HI16VBTS0PD8esCPdoHsnV9lWQNN6VoIk8o08PDmzoOnxDxIwuvXv7Gs7oEwt0NVwgm1ZU2EmT2thvxGwIMUJtyBjqey6HBKoWWEQt0jWspsSkX4vcbE7xWNt71lcmQKS2LSWHgpjeFhH/C9lMaFZB1+sTIDwjJovjMF56BkKq1JpJx/AmVWJuD0bxJNg9/hvvUtToGJVPCPp9SSp1jMe4DF7FsUnnoFk3HnEcNOIQ0KRzUgFFXfw4he+xHdd//oRCj/Gx+9cKmYI6JQVcZN8+Vl8kc2hV3DvddUTPUZUbgy6lI1UVk4IZlXw3teANve6Fj0SGH5PS3+DxQW3JYZEa3FYdtHSq5OZlzYBy6/yuR1hsKzNB3nXus4Fq/j4HMd/jdkfgpNx337e+zWJlHK/xVFFr/AzPcZZn7PKbEsnlLL4jGf/4gCv9/BZMo11OMvoh51FvXQk6i8w1D1PYLU+wCixz5E5x2IdlsQbTci2m+mYK9d+Y3B7/d+g+v605MClSlZqSEbdxzkaXIGc/49RiV3L0ShiqiKV0NTuibCvCoFSrswbcMhojIh9r2W+HQtj9IVTiUrLL0jM+iczG+xMqcTZe6m6Nj3TMHnshbvE5n0Op5Fz7BMmu1Lw2HTB8quScZiWQIF/Z6jmfsY1cx7SFNvoZl2E9XEq0hjLqAafgb1kEg0A8OR+h1D9D6M6L4f0WEHou1WRMftmHrtxnZsGI3mXaLX+keM2pvIqL3x/zEFSuqF62td76gjwqQiTTsN5trtR9xMSGPknH8pUs4Njbkd1k4tKFKhDqJAJYrZNiDweDSPgMRPWp5/Ugh5DZOuQeNwqBMKwy/BkrswNRY6hSu47c3Efksqtus/UC7gDRZLX2I27wkms+6hmXoT9YRrqMbGoBoZjXrEeTQjzqIaEoXwPoHoE4boeQTROQTRfrfB6UIDD1Pt1yg6rbzGL3tfsPjMewIup/B3dBLzDlxjxNJdtBo2lyrN+uUTgC/Ca6EuWd1wjGRhU49Fq4LI0CpE332Jp/c0hLoslWq0okW3kRSzrY9Ql8e2Ziui7zw0HFvFvc9i2+NMxlz4hMu+VEpuSsV+awqNgt9SJ+g1FVbEU2z+YwrOfoDptFuYTLyOemwM0vBopKHnUA05gzQoCjHgJKLvCcRP4YhexxE9QhE9jiF+CsNsWCQVJp6hud8Vxm57gH/Ua3ZcfUv4/TecuBPP5uMXmBuwg74T5uLWrj/mNvUMJglhiRBFEaJk7kNRJ1T67l66ZvYBh2llTErWYNC4mdx79IJ3WRB04AxV67Q3/KD3OB/GzFxGgVI1EAUqYufqwYGoK2w5eYvus3Zh3z+Qgp6rkNquRmoXiKbjFjRddiK67kN0O4TocQThdQzhFfZVWE/9dQTiJ71ovcNnKTD6AlaTr+DoE0c7/3uM3/WCRSeS2HQhiaM3kjh//xVHzl9nTfBhpvv+Ref+Y7FzbYuqqANClEEIC4QogtBYU6icKzY1WtPQcyBdh0xnwKRF2QFQWzqjLlUDqWg1RIEqFLBpSt8xs7l24x4fZNh58hadhs1CU6QyRUs7sv1gJKs3hyAKVkIyr4KwqIZjw55Y1+2PsOqMZN0HYT8c4fwLwvV3hPtiRNO/EK3XI9oHI7qGIHqFoR50BrPRl7CYHEuF2TdxnH+Lhktu0HF1HIODrjFl+xVmbz/H/I3H8A0IZuaiNQyf6kuPkb/h3n00VvV6ZH8wYqIXa4sQ5RCFHbCwa0T1Rl3p2Hcc46b7MWd5ECuC9rFq6zFWbj/BnMDDjF+4nQGz1uV8MmRWGVHQnjI1Pfl18Qbuxr/lTSZsDo+jzRAfilZuYnC9TtOuPIlP5NGzBMwtqyOK2KOxrI7asjpSUX0ZuaKxaYVp1a6YOg/EpPZoTBtMoUALH8w8FlKoywqK9lqN5YB/KDfob2wHr8Rh8EKcvX1w+WkStbsOx7l1L+zqeVK6qjsmlo6IAvqTXBuEqJAtsqATamt3rGq2p1arAXQdMo1Jc1axeM12NuwOY8+xc4SciCHk1HU2H4th5Y4o5qwLZczCHXhNXUPH8ctpPdyXJgNmU6/nFEQha1fDPP9t4b/sjbjMrshrjJ2/nopNvQ0nOaoiVRCmNnTwGk5qavaZfMSZKxQp74YoYodUqBKigI3hewww+fxcAaEp/xXqXNcGWCPUOZCsEaYVUZesSQm7JlSu2wnX1v1p0/sXBk+cz++L1rEyaB9bQk4SEhFD6Lk4wi7cJeLyQw5F32fz8ev8E3IJv21RTPnrEMN9d9D/j830mBqAx+jFtBj0Bw17T8XFcwT2jXpRrmY7LCo3wqyMC8K1hRctu4/Cre1AilZtiSisj7odokgVPpeHKObArqNnCL1wl9l/7WaYzzr6Tl5Gj5E+ePabSItuI2jc3hv3dv1o0LYf9Vr3oV6bvjTwGECjDoNo3mUYbXuNpfvgKQwa78PPM5fis2gtywOCWb/zKPvCzhF29ionY25z5tpDzsY94ezNF5y6/oID5x+w9cRNAo9exX/fRf7cdJLJqw8zZulehs7fTp+Z/9Jt4iraj/Kl5YCZ1O86HucW/ano1gkrxxYUrVgfE32fMrc37ClfUMTesK0KUawqwtTW0Mj01yrL6mj0PcHSObs56kvEwgGbut2p6zWNxgN8aDVsPp1/WUn/WeuZsGIf8zdHsvZILDtP3yP0ylMuP0rmSfInPmTqvnxslfeh3+5fpem4EZ9G1O3X7D3/iMCj1/Hbdobpa44xamEw/WYG0nXCCjxG+tJq4GwaeU3CtcNInJr3xdatI6UcmmNRyZ2CZWujsqiGKFgRUdA2BxWzhep7VDEHw3aaF5L+nEMqXs1Qw/qR9/nN76D/5UXsDH+ovEsHnFsPxL3HBDyH+tBrwhIGz/yHSQu3MC9gP38Hh7P98FkOnrjI8TOXiTx3mcjTF4iIPMOBoyfYsOMQSwKCmboggEGT/eg8ZAbNeo7Dte0gqjXqiY2LB5ZVmhr2icLWbpjqm7OFA0Jfama5xH0WaHCyKsJCL9IRVQ5n/XP2dTUD//zh8P//P0AYm4CxIYxNwNgQxiZgbAhjEzA2hLEJGBvC2ASMDWFsAsaGMDYBY0MYm4CxIYxNwNgQxiZgbAhjEzA2hLEJGBvC2ASMDWFsAsbG/wGtpY4+ATU/PwAAAABJRU5ErkJggg==" width="64" height="64"/></svg>
|
package/dist/generate-icons.js
CHANGED
|
@@ -1,49 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
//
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
//
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
// public/generate-icons.js — regenerate the Cloudpit favicon/logo/PWA icon set from the
|
|
2
|
+
// committed raster source `public/logo-source.png` (glossy blue airfoil canopy on navy, 1254×1254).
|
|
3
|
+
//
|
|
4
|
+
// The source is raster-only (no vector), so the SVG favicon/logo are thin wrappers that embed a
|
|
5
|
+
// raster PNG; browsers render them identically to the PNG while keeping the existing
|
|
6
|
+
// `type="image/svg+xml"` link in index.html valid.
|
|
7
|
+
//
|
|
8
|
+
// Layout: full airfoil, full width, vertically centered, navy field above and below. No cropping
|
|
9
|
+
// and no zoom — the wide shape is the mark; maskable icon consumers accept the tip crop.
|
|
10
|
+
//
|
|
11
|
+
// Run from the repo root: node public/generate-icons.js
|
|
12
|
+
|
|
13
|
+
import fs from 'node:fs/promises';
|
|
14
|
+
import path from 'node:path';
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import sharp from 'sharp';
|
|
17
|
+
|
|
18
|
+
const here = path.dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
const SOURCE = path.join(here, 'logo-source.png');
|
|
20
|
+
|
|
21
|
+
// Navy background sampled from the source corners, used to build the square canvas.
|
|
22
|
+
const BG = { r: 2, g: 20, b: 44 };
|
|
23
|
+
|
|
24
|
+
// Airfoil content bbox on the 1254×1254 source (measured vs the navy background).
|
|
25
|
+
const CONTENT = { left: 36, top: 312, width: 1218, height: 583 };
|
|
26
|
+
|
|
27
|
+
/** Render the full airfoil centered in an `size`×`size` navy square, no crop/zoom. */
|
|
28
|
+
async function renderSquare(size) {
|
|
29
|
+
const stripHeight = Math.round((size * CONTENT.height) / CONTENT.width);
|
|
30
|
+
const strip = await sharp(SOURCE)
|
|
31
|
+
.extract(CONTENT)
|
|
32
|
+
.resize(size, stripHeight)
|
|
33
|
+
.png()
|
|
34
|
+
.toBuffer();
|
|
35
|
+
const top = Math.round((size - stripHeight) / 2);
|
|
36
|
+
return sharp({ create: { width: size, height: size, channels: 3, background: BG } })
|
|
37
|
+
.composite([{ input: strip, left: 0, top }])
|
|
38
|
+
.png()
|
|
39
|
+
.toBuffer();
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Wrap a raster PNG in a minimal SVG so `type="image/svg+xml"` links keep working. */
|
|
43
|
+
async function renderSvgWrapper(size) {
|
|
44
|
+
const png = await renderSquare(size);
|
|
45
|
+
const b64 = png.toString('base64');
|
|
46
|
+
return Buffer.from(
|
|
47
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="${size}" height="${size}" viewBox="0 0 ${size} ${size}">` +
|
|
48
|
+
`<image href="data:image/png;base64,${b64}" width="${size}" height="${size}"/></svg>`,
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
await fs.mkdir(path.join(here, 'icons'), { recursive: true });
|
|
53
|
+
|
|
54
|
+
// Favicon + wordmark/logo SVGs.
|
|
55
|
+
await fs.writeFile(path.join(here, 'favicon.png'), await renderSquare(64));
|
|
56
|
+
await fs.writeFile(path.join(here, 'favicon.svg'), await renderSvgWrapper(64));
|
|
57
|
+
await fs.writeFile(path.join(here, 'logo.svg'), await renderSvgWrapper(128));
|
|
58
|
+
|
|
59
|
+
// README/desktop launcher logos.
|
|
60
|
+
for (const size of [32, 64, 128, 256, 512]) {
|
|
61
|
+
await fs.writeFile(path.join(here, `logo-${size}.png`), await renderSquare(size));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// PWA + apple-touch icons (maskable: the wide airfoil's tips crop under a circular mask).
|
|
65
|
+
for (const size of [72, 96, 128, 144, 152, 192, 384, 512]) {
|
|
66
|
+
await fs.writeFile(path.join(here, 'icons', `icon-${size}x${size}.png`), await renderSquare(size));
|
|
34
67
|
}
|
|
35
68
|
|
|
36
|
-
|
|
37
|
-
sizes.forEach(size => {
|
|
38
|
-
const svgContent = createIconSVG(size);
|
|
39
|
-
const filename = `icon-${size}x${size}.svg`;
|
|
40
|
-
const filepath = path.join(__dirname, 'icons', filename);
|
|
41
|
-
|
|
42
|
-
fs.writeFileSync(filepath, svgContent);
|
|
43
|
-
console.log(`Created ${filename}`);
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
console.log('\nSVG icons created! To convert to PNG, you can use:');
|
|
47
|
-
console.log('1. Online converter like cloudconvert.com');
|
|
48
|
-
console.log('2. If you have ImageMagick: convert icon.svg icon.png');
|
|
49
|
-
console.log('3. If you have Inkscape: inkscape --export-type=png icon.svg');
|
|
69
|
+
console.log('public/generate-icons.js: regenerated favicon, logo and PWA icons from logo-source.png');
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/index.html
CHANGED
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
|
|
34
34
|
<!-- Prevent zoom on iOS -->
|
|
35
35
|
<meta name="format-detection" content="telephone=no" />
|
|
36
|
-
<script type="module" crossorigin src="/assets/index-
|
|
36
|
+
<script type="module" crossorigin src="/assets/index-CQE9C6k6.js"></script>
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/vendor-react-D0N9rdhf.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/vendor-codemirror-BfCHTlzg.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/vendor-xterm-CS4rQ5Mr.js">
|
|
40
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
40
|
+
<link rel="stylesheet" crossorigin href="/assets/index-51e8fagd.css">
|
|
41
41
|
</head>
|
|
42
42
|
<body>
|
|
43
43
|
<div id="root"></div>
|
package/dist/logo-128.png
CHANGED
|
Binary file
|
package/dist/logo-256.png
CHANGED
|
Binary file
|
package/dist/logo-32.png
CHANGED
|
Binary file
|
package/dist/logo-512.png
CHANGED
|
Binary file
|
package/dist/logo-64.png
CHANGED
|
Binary file
|
|
Binary file
|
package/dist/logo.svg
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
<svg
|
|
2
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
3
|
-
width="32"
|
|
4
|
-
height="32"
|
|
5
|
-
viewBox="0 0 32 32"
|
|
6
|
-
fill="none"
|
|
7
|
-
>
|
|
8
|
-
<rect width="32" height="32" rx="8" fill="hsl(221.2 83.2% 53.3%)"/>
|
|
9
|
-
<path
|
|
10
|
-
d="M8 9C8 8.44772 8.44772 8 9 8H23C23.5523 8 24 8.44772 24 9V18C24 18.5523 23.5523 19 23 19H12L8 23V9Z"
|
|
11
|
-
stroke="white"
|
|
12
|
-
strokeWidth="2"
|
|
13
|
-
strokeLinecap="round"
|
|
14
|
-
strokeLinejoin="round"
|
|
15
|
-
fill="none"
|
|
16
|
-
/>
|
|
17
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128"><image href="data:image/png;base64,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" width="128" height="128"/></svg>
|
package/dist/sw.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// Service Worker for
|
|
1
|
+
// Service Worker for Cloudpit PWA
|
|
2
2
|
// Cache only manifest (needed for PWA install). HTML and JS are never pre-cached
|
|
3
3
|
// so a rebuild + refresh always picks up the latest assets.
|
|
4
4
|
const CACHE_PREFIX = 'cloudpit-';
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
|
|
5
|
+
// 3.0 purges only this worker's own prefix. The pre-flip `claude-ui-*` family is
|
|
6
|
+
// no longer cleaned: 1.x → 3.x direct upgrades are unsupported (release notes
|
|
7
|
+
// require going through 2.x, which already dropped those caches).
|
|
8
8
|
// Bumped from v2 so activating this worker drops the unbounded v2 asset cache once.
|
|
9
9
|
const CACHE_NAME = 'cloudpit-v1';
|
|
10
10
|
const urlsToCache = [
|
|
@@ -117,9 +117,7 @@ self.addEventListener('activate', event => {
|
|
|
117
117
|
caches.keys().then(cacheNames =>
|
|
118
118
|
Promise.all(
|
|
119
119
|
cacheNames
|
|
120
|
-
.filter(name =>
|
|
121
|
-
(name.startsWith(CACHE_PREFIX) || name.startsWith(LEGACY_CACHE_PREFIX)) && name !== CACHE_NAME
|
|
122
|
-
)
|
|
120
|
+
.filter(name => name.startsWith(CACHE_PREFIX) && name !== CACHE_NAME)
|
|
123
121
|
.map(name => caches.delete(name))
|
|
124
122
|
)
|
|
125
123
|
).then(() => self.clients.claim())
|
|
@@ -134,7 +132,7 @@ self.addEventListener('push', event => {
|
|
|
134
132
|
try {
|
|
135
133
|
payload = event.data.json();
|
|
136
134
|
} catch {
|
|
137
|
-
payload = { title: '
|
|
135
|
+
payload = { title: 'Cloudpit', body: event.data.text() };
|
|
138
136
|
}
|
|
139
137
|
|
|
140
138
|
const options = {
|
|
@@ -147,7 +145,7 @@ self.addEventListener('push', event => {
|
|
|
147
145
|
};
|
|
148
146
|
|
|
149
147
|
event.waitUntil(
|
|
150
|
-
self.registration.showNotification(payload.title || '
|
|
148
|
+
self.registration.showNotification(payload.title || 'Cloudpit', options)
|
|
151
149
|
);
|
|
152
150
|
});
|
|
153
151
|
|
|
@@ -45,10 +45,18 @@ catch (e) {
|
|
|
45
45
|
console.error('No .env file found or error reading it:', e.message);
|
|
46
46
|
}
|
|
47
47
|
// Resolve the data root AFTER `.env` was read (module imports are hoisted, but this call is not),
|
|
48
|
-
// so `CLOUDPIT_HOME`
|
|
49
|
-
// legacy `~/.cloudcli` layout once
|
|
50
|
-
// `server/index.ts` reuses this single
|
|
51
|
-
|
|
48
|
+
// so `CLOUDPIT_HOME` from the file is honoured. The Cloudpit default (`~/.cloudpit`) is the only
|
|
49
|
+
// default and migrates a legacy `~/.cloudcli` layout once; a failed migration is reported below
|
|
50
|
+
// and does NOT fall back to the old root (v3.0). Exported so `server/index.ts` reuses this single
|
|
51
|
+
// resolution instead of migrating a second time.
|
|
52
|
+
export const DATA_ROOTS = resolveDataRoots();
|
|
53
|
+
if (DATA_ROOTS.migrationError !== null) {
|
|
54
|
+
// v3.0: a failed one-time migration is an explicit error, never a silent fallback to
|
|
55
|
+
// `~/.cloudcli`. The server keeps running on the Cloudpit root so the operator can fix
|
|
56
|
+
// the cause (e.g. an occupied SQLite database) and restart.
|
|
57
|
+
console.error(`Cloudpit data-root migration failed (${DATA_ROOTS.reason}): ${DATA_ROOTS.migrationError}. ` +
|
|
58
|
+
`Continuing with ${DATA_ROOTS.activeRoot}; the legacy root was left untouched.`);
|
|
59
|
+
}
|
|
52
60
|
if (!process.env.DATABASE_PATH) {
|
|
53
61
|
process.env.DATABASE_PATH = DATA_ROOTS.authDatabasePath;
|
|
54
62
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../server/load-env.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,oFAAoF;AACpF,2FAA2F;AAC3F,qFAAqF;AACrF,+FAA+F;AAC/F,4FAA4F;AAC5F,yFAAyF;AACzF,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAEnC,8EAA8E;AAC9E,kEAAkE;AAClE,SAAS,2BAA2B,CAAC,aAAqB;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IACnE,IAAI,UAAU,GAAG,eAAe,CAAC;IACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC5E,UAAU,GAAG,MAAM,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACjF,CAAC;AAED,0FAA0F;AAC1F,8FAA8F;AAC9F,MAAM,QAAQ,GAAG,2BAA2B,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE9D,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACjC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACpD,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAAC,OAAO,CAAM,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,kGAAkG;AAClG,
|
|
1
|
+
{"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../server/load-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,13 +7,34 @@ import path from 'node:path';
|
|
|
7
7
|
import spawn from 'cross-spawn';
|
|
8
8
|
import { appConfigDb } from '../../modules/database/index.js';
|
|
9
9
|
import { providerMcpService } from '../../modules/providers/index.js';
|
|
10
|
+
import { createBrandEnvReader } from '../../shared/brand.js';
|
|
10
11
|
import { getModuleDirectory } from '../../shared/utils.js';
|
|
11
12
|
import { getBrowserUseRuntime } from './browser-use-runtime.js';
|
|
12
|
-
import {
|
|
13
|
+
import { MCP_SERVER_NAME, mcpServerNamesToRemove, } from './mcp-server-names.js';
|
|
13
14
|
const require = createRequire(import.meta.url);
|
|
14
15
|
const __dirname = getModuleDirectory(import.meta.url);
|
|
15
|
-
const
|
|
16
|
-
const
|
|
16
|
+
const DEFAULT_MAX_SESSIONS_PER_OWNER = 3;
|
|
17
|
+
const DEFAULT_SESSION_TTL_MS = 30 * 60 * 1000;
|
|
18
|
+
const DEFAULT_INSTALL_TIMEOUT_MS = 10 * 60 * 1000;
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the browser-use limits from the brand environment.
|
|
21
|
+
*
|
|
22
|
+
* v3.0: only the `CLOUDPIT_*` spelling is read; a deployment that still exports
|
|
23
|
+
* `CLOUDCLI_*` gets these shipped defaults.
|
|
24
|
+
*
|
|
25
|
+
* Exported so the wiring criterion can drive the exact reads the service uses
|
|
26
|
+
* with an injected environment instead of mutating this process.
|
|
27
|
+
*/
|
|
28
|
+
export function readBrowserUseEnvDefaults(env) {
|
|
29
|
+
const reader = createBrandEnvReader({ env });
|
|
30
|
+
const readInteger = (name, fallback) => Number.parseInt(reader.read(name).value || String(fallback), 10);
|
|
31
|
+
return {
|
|
32
|
+
maxSessionsPerOwner: readInteger('BROWSER_USE_MAX_SESSIONS_PER_OWNER', DEFAULT_MAX_SESSIONS_PER_OWNER),
|
|
33
|
+
sessionTtlMs: readInteger('BROWSER_USE_SESSION_TTL_MS', DEFAULT_SESSION_TTL_MS),
|
|
34
|
+
installTimeoutMs: readInteger('BROWSER_USE_INSTALL_TIMEOUT_MS', DEFAULT_INSTALL_TIMEOUT_MS),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const browserUseEnvDefaults = readBrowserUseEnvDefaults(process.env);
|
|
17
38
|
const BROWSER_USE_SETTINGS_KEY = 'browser_use_settings';
|
|
18
39
|
const BROWSER_USE_MCP_TOKEN_KEY = 'browser_use_mcp_token';
|
|
19
40
|
const DEFAULT_SETTINGS = {
|
|
@@ -252,7 +273,7 @@ class BrowserUseRuntime {
|
|
|
252
273
|
* for status reporting, agent-session creation, and runtime installation.
|
|
253
274
|
*/
|
|
254
275
|
export const browserUseRuntime = new BrowserUseRuntime();
|
|
255
|
-
const INSTALL_COMMAND_TIMEOUT_MS =
|
|
276
|
+
const INSTALL_COMMAND_TIMEOUT_MS = browserUseEnvDefaults.installTimeoutMs;
|
|
256
277
|
function runCommand(command, args) {
|
|
257
278
|
return new Promise((resolve, reject) => {
|
|
258
279
|
const child = spawn(command, args, {
|
|
@@ -293,7 +314,7 @@ function runCommand(command, args) {
|
|
|
293
314
|
function formatInstallError(error) {
|
|
294
315
|
const message = error instanceof Error ? error.message : String(error);
|
|
295
316
|
if (message.includes('sudo') && message.includes('password')) {
|
|
296
|
-
return 'Installing Chromium system dependencies requires administrator privileges. Run `npx playwright install-deps chromium` on the machine where
|
|
317
|
+
return 'Installing Chromium system dependencies requires administrator privileges. Run `npx playwright install-deps chromium` on the machine where Cloudpit runs, then try again.';
|
|
297
318
|
}
|
|
298
319
|
return message || 'Failed to install Browser runtime.';
|
|
299
320
|
}
|
|
@@ -330,7 +351,7 @@ async function expireStaleSessions(now = Date.now()) {
|
|
|
330
351
|
return;
|
|
331
352
|
}
|
|
332
353
|
const updatedAt = Date.parse(session.updatedAt);
|
|
333
|
-
if (!Number.isFinite(updatedAt) || now - updatedAt <=
|
|
354
|
+
if (!Number.isFinite(updatedAt) || now - updatedAt <= browserUseEnvDefaults.sessionTtlMs) {
|
|
334
355
|
return;
|
|
335
356
|
}
|
|
336
357
|
await closeHandle(session.id);
|
|
@@ -407,7 +428,8 @@ export const browserUseService = {
|
|
|
407
428
|
},
|
|
408
429
|
async registerAgentMcp() {
|
|
409
430
|
const { command, args } = getMcpCommand();
|
|
410
|
-
|
|
431
|
+
const mcpToken = getOrCreateMcpToken();
|
|
432
|
+
const mcpApiUrl = getMcpApiUrl();
|
|
411
433
|
const results = await providerMcpService.addMcpServerToAllProviders({
|
|
412
434
|
name: MCP_SERVER_NAME,
|
|
413
435
|
scope: 'user',
|
|
@@ -415,8 +437,8 @@ export const browserUseService = {
|
|
|
415
437
|
command,
|
|
416
438
|
args,
|
|
417
439
|
env: {
|
|
418
|
-
|
|
419
|
-
|
|
440
|
+
CLOUDPIT_BROWSER_USE_MCP_TOKEN: mcpToken,
|
|
441
|
+
CLOUDPIT_BROWSER_USE_API_URL: mcpApiUrl,
|
|
420
442
|
},
|
|
421
443
|
});
|
|
422
444
|
return { name: MCP_SERVER_NAME, command, args, results };
|
|
@@ -467,8 +489,8 @@ export const browserUseService = {
|
|
|
467
489
|
cursor: null,
|
|
468
490
|
};
|
|
469
491
|
const activeOwnerSessions = ownerSessions(AGENT_OWNER_ID).filter((item) => item.status === 'ready');
|
|
470
|
-
if (activeOwnerSessions.length >=
|
|
471
|
-
throw new Error(`Browser is limited to ${
|
|
492
|
+
if (activeOwnerSessions.length >= browserUseEnvDefaults.maxSessionsPerOwner) {
|
|
493
|
+
throw new Error(`Browser is limited to ${browserUseEnvDefaults.maxSessionsPerOwner} active agent sessions.`);
|
|
472
494
|
}
|
|
473
495
|
const readiness = browserUseRuntime.probe();
|
|
474
496
|
if (!settings.enabled || !readiness.playwrightInstalled || !readiness.chromiumInstalled || !readiness.playwright) {
|