@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
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Criterion file for `gap-cloudpit-brand-env-reader-wiring` (v3.0 update).
|
|
3
|
+
*
|
|
4
|
+
* npx tsx --tsconfig server/tsconfig.json --test electron/tests/cloudpit-brand-env-wiring.test.mjs
|
|
5
|
+
*
|
|
6
|
+
* Electron cannot import `server/shared/brand.ts` (it runs plain JavaScript from
|
|
7
|
+
* source), so the production wiring reads through `electron/brandEnv.js`. This
|
|
8
|
+
* file holds the two things that keep that second implementation honest:
|
|
9
|
+
*
|
|
10
|
+
* 1. a cross-runtime PARITY table: one environment table drives both
|
|
11
|
+
* `createBrandEnvReader` implementations and compares `{value, source,
|
|
12
|
+
* key}` so the semantics cannot drift;
|
|
13
|
+
* 2. the WIRING arms: the Electron control-plane resolver, the local-server
|
|
14
|
+
* discovery keys and `ServerInstaller` resolve `CLOUDPIT_*` and keep their
|
|
15
|
+
* shipped defaults when no brand variable is set.
|
|
16
|
+
*
|
|
17
|
+
* v3.0 RETIREMENT: the legacy `CLOUDCLI_*` spelling is no longer read anywhere.
|
|
18
|
+
* Every arm below that used to assert the fallback now asserts the ignored
|
|
19
|
+
* spelling leaves the shipped default in force.
|
|
20
|
+
*
|
|
21
|
+
* The production wiring is driven through the same functions the modules use.
|
|
22
|
+
* `electron/main.js` imports Electron and cannot be loaded by node, so the
|
|
23
|
+
* control-plane arm drives `readBrandEnvValue` (the expression main.js binds)
|
|
24
|
+
* and a static arm pins that main.js binds it, and that no Electron module
|
|
25
|
+
* reads a legacy spelling directly.
|
|
26
|
+
*/
|
|
27
|
+
import assert from 'node:assert/strict';
|
|
28
|
+
import { readFileSync } from 'node:fs';
|
|
29
|
+
import path from 'node:path';
|
|
30
|
+
import test from 'node:test';
|
|
31
|
+
import { fileURLToPath } from 'node:url';
|
|
32
|
+
|
|
33
|
+
import {
|
|
34
|
+
createBrandEnvReader as createElectronBrandEnvReader,
|
|
35
|
+
readBrandEnvValue,
|
|
36
|
+
} from '../brandEnv.js';
|
|
37
|
+
import {
|
|
38
|
+
getExistingServerCandidateUrls,
|
|
39
|
+
isInstalledServerRequested,
|
|
40
|
+
} from '../localServer.js';
|
|
41
|
+
import { DEFAULT_INSTALL_ROOT, ServerInstaller } from '../serverInstaller.js';
|
|
42
|
+
import { createBrandEnvReader as createServerBrandEnvReader } from '../../server/shared/brand.js';
|
|
43
|
+
|
|
44
|
+
const TESTS_DIR = path.dirname(fileURLToPath(import.meta.url));
|
|
45
|
+
const REPO_ROOT = path.resolve(TESTS_DIR, '..', '..');
|
|
46
|
+
|
|
47
|
+
function readRepoFile(relativePath) {
|
|
48
|
+
return readFileSync(path.join(REPO_ROOT, relativePath), 'utf8');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Build a reader over `env`. */
|
|
52
|
+
function readWith(createReader, env) {
|
|
53
|
+
return createReader({ env });
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ── parity: the two createBrandEnvReader implementations ───────────────────
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The shared table. `expectedReadings` is what both implementations must return
|
|
60
|
+
* when the same key is read twice.
|
|
61
|
+
*/
|
|
62
|
+
const PARITY_ARMS = [
|
|
63
|
+
{
|
|
64
|
+
label: 'new only',
|
|
65
|
+
env: { CLOUDPIT_X: 'new' },
|
|
66
|
+
expectedReadings: [
|
|
67
|
+
{ value: 'new', source: 'new', key: 'CLOUDPIT_X' },
|
|
68
|
+
{ value: 'new', source: 'new', key: 'CLOUDPIT_X' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
label: 'both set',
|
|
73
|
+
env: { CLOUDPIT_X: 'new', CLOUDCLI_X: 'old' },
|
|
74
|
+
expectedReadings: [
|
|
75
|
+
{ value: 'new', source: 'new', key: 'CLOUDPIT_X' },
|
|
76
|
+
{ value: 'new', source: 'new', key: 'CLOUDPIT_X' },
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
label: 'legacy only',
|
|
81
|
+
env: { CLOUDCLI_X: 'old' },
|
|
82
|
+
expectedReadings: [
|
|
83
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
84
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
label: 'both empty',
|
|
89
|
+
env: { CLOUDPIT_X: '', CLOUDCLI_X: '' },
|
|
90
|
+
expectedReadings: [
|
|
91
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
92
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
label: 'new empty with legacy set',
|
|
97
|
+
env: { CLOUDPIT_X: '', CLOUDCLI_X: 'old' },
|
|
98
|
+
expectedReadings: [
|
|
99
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
100
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
label: 'neither set',
|
|
105
|
+
env: {},
|
|
106
|
+
expectedReadings: [
|
|
107
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
108
|
+
{ value: undefined, source: 'absent', key: 'CLOUDPIT_X' },
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
|
|
113
|
+
for (const arm of PARITY_ARMS) {
|
|
114
|
+
test(`parity ${arm.label}: the Electron reader matches the server reader`, () => {
|
|
115
|
+
const server = readWith(createServerBrandEnvReader, arm.env);
|
|
116
|
+
const electron = readWith(createElectronBrandEnvReader, arm.env);
|
|
117
|
+
|
|
118
|
+
const serverReadings = [server.read('X'), server.read('X')];
|
|
119
|
+
const electronReadings = [electron.read('X'), electron.read('X')];
|
|
120
|
+
|
|
121
|
+
assert.deepEqual(serverReadings, arm.expectedReadings, 'server implementation reads the arm');
|
|
122
|
+
assert.deepEqual(electronReadings, arm.expectedReadings, 'Electron implementation reads the arm');
|
|
123
|
+
assert.deepEqual(electronReadings, serverReadings, 'the two runtimes must return the same readings');
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ── Electron main: the control-plane resolver ──────────────────────────────
|
|
128
|
+
|
|
129
|
+
const DEFAULT_CONTROL_PLANE_URL = 'https://cloudcli.ai';
|
|
130
|
+
|
|
131
|
+
/** Resolve the control-plane URL through the same expression main.js binds. */
|
|
132
|
+
function resolveControlPlaneUrl(env) {
|
|
133
|
+
return readBrandEnvValue(readWith(createElectronBrandEnvReader, env), 'CONTROL_PLANE_URL', DEFAULT_CONTROL_PLANE_URL);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
test('Electron AC3: only CLOUDPIT_CONTROL_PLANE_URL set reads the new value', () => {
|
|
137
|
+
assert.equal(
|
|
138
|
+
resolveControlPlaneUrl({ CLOUDPIT_CONTROL_PLANE_URL: 'https://cloudpit.example' }),
|
|
139
|
+
'https://cloudpit.example',
|
|
140
|
+
);
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
test('Electron AC3 (v3.0): only CLOUDCLI_CONTROL_PLANE_URL set keeps the shipped default', () => {
|
|
144
|
+
assert.equal(
|
|
145
|
+
resolveControlPlaneUrl({ CLOUDCLI_CONTROL_PLANE_URL: 'https://legacy.example' }),
|
|
146
|
+
DEFAULT_CONTROL_PLANE_URL,
|
|
147
|
+
'the retired legacy spelling must not supply the control-plane address',
|
|
148
|
+
);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
test('Electron AC3: both set means the new value wins', () => {
|
|
152
|
+
assert.equal(
|
|
153
|
+
resolveControlPlaneUrl({
|
|
154
|
+
CLOUDPIT_CONTROL_PLANE_URL: 'https://new.example',
|
|
155
|
+
CLOUDCLI_CONTROL_PLANE_URL: 'https://old.example',
|
|
156
|
+
}),
|
|
157
|
+
'https://new.example',
|
|
158
|
+
);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test('Electron AC4: no control-plane env keeps https://cloudcli.ai', () => {
|
|
162
|
+
assert.equal(resolveControlPlaneUrl({}), DEFAULT_CONTROL_PLANE_URL);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test('Electron wiring: main.js binds the reader and keeps the third-party default', () => {
|
|
166
|
+
const source = readRepoFile('electron/main.js');
|
|
167
|
+
|
|
168
|
+
assert.match(
|
|
169
|
+
source,
|
|
170
|
+
/readBrandEnvValue\(brandEnv, 'CONTROL_PLANE_URL', 'https:\/\/cloudcli\.ai'\)/,
|
|
171
|
+
'main.js must resolve the control plane through the brand reader',
|
|
172
|
+
);
|
|
173
|
+
assert.ok(
|
|
174
|
+
source.includes("'https://cloudcli.ai'"),
|
|
175
|
+
'the default control-plane address is a third-party contract and must stay',
|
|
176
|
+
);
|
|
177
|
+
assert.doesNotMatch(source, /process\.env\.CLOUDCLI_/, 'main.js must not read a legacy spelling directly');
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// ── Electron localServer discovery ─────────────────────────────────────────
|
|
181
|
+
|
|
182
|
+
const DEFAULT_LOCAL_SERVER_URL = 'http://127.0.0.1:3001';
|
|
183
|
+
const NO_MARKERS = { markerPaths: [] };
|
|
184
|
+
|
|
185
|
+
test('localServer AC3: only CLOUDPIT_DESKTOP_LOCAL_SERVER_URL is discovered first', async () => {
|
|
186
|
+
const reader = readWith(createElectronBrandEnvReader, {
|
|
187
|
+
CLOUDPIT_DESKTOP_LOCAL_SERVER_URL: 'http://127.0.0.1:4401',
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
const urls = await getExistingServerCandidateUrls(DEFAULT_LOCAL_SERVER_URL, { reader, ...NO_MARKERS });
|
|
191
|
+
assert.equal(urls[0], 'http://127.0.0.1:4401');
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('localServer AC3 (v3.0): a legacy-only discovery variable is ignored', async () => {
|
|
195
|
+
const reader = readWith(createElectronBrandEnvReader, {
|
|
196
|
+
CLOUDCLI_DESKTOP_LOCAL_SERVER_URL: 'http://127.0.0.1:4402',
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
const urls = await getExistingServerCandidateUrls(DEFAULT_LOCAL_SERVER_URL, { reader, ...NO_MARKERS });
|
|
200
|
+
assert.deepEqual(urls, [DEFAULT_LOCAL_SERVER_URL], 'the retired spelling must not add a candidate');
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
test('localServer AC3: both spellings set means the new address is the only candidate', async () => {
|
|
204
|
+
const reader = readWith(createElectronBrandEnvReader, {
|
|
205
|
+
CLOUDPIT_DESKTOP_LOCAL_SERVER_URL: 'http://127.0.0.1:4401',
|
|
206
|
+
CLOUDCLI_DESKTOP_LOCAL_SERVER_URL: 'http://127.0.0.1:4402',
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
const urls = await getExistingServerCandidateUrls(DEFAULT_LOCAL_SERVER_URL, { reader, ...NO_MARKERS });
|
|
210
|
+
assert.equal(urls[0], 'http://127.0.0.1:4401');
|
|
211
|
+
assert.equal(urls.includes('http://127.0.0.1:4402'), false);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
test('localServer AC3: CLOUDPIT_SERVER_PORT supplies the port candidate', async () => {
|
|
215
|
+
const reader = readWith(createElectronBrandEnvReader, {
|
|
216
|
+
CLOUDPIT_SERVER_PORT: '4403',
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
const urls = await getExistingServerCandidateUrls(DEFAULT_LOCAL_SERVER_URL, { reader, ...NO_MARKERS });
|
|
220
|
+
assert.equal(urls.includes('http://127.0.0.1:4403'), true);
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test('localServer AC4: no discovery env means only the default URL', async () => {
|
|
224
|
+
const reader = readWith(createElectronBrandEnvReader, {});
|
|
225
|
+
|
|
226
|
+
const urls = await getExistingServerCandidateUrls(DEFAULT_LOCAL_SERVER_URL, { reader, ...NO_MARKERS });
|
|
227
|
+
assert.deepEqual(urls, [DEFAULT_LOCAL_SERVER_URL]);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test('localServer (v3.0): CLOUDPIT_USE_INSTALLED_SERVER is read, the legacy spelling is ignored', () => {
|
|
231
|
+
const newOnly = readWith(createElectronBrandEnvReader, { CLOUDPIT_USE_INSTALLED_SERVER: '1' });
|
|
232
|
+
assert.equal(isInstalledServerRequested(newOnly), true);
|
|
233
|
+
|
|
234
|
+
const legacyOnly = readWith(createElectronBrandEnvReader, { CLOUDCLI_USE_INSTALLED_SERVER: '1' });
|
|
235
|
+
assert.equal(isInstalledServerRequested(legacyOnly), false, 'the retired spelling must not opt in');
|
|
236
|
+
|
|
237
|
+
const both = readWith(createElectronBrandEnvReader, {
|
|
238
|
+
CLOUDPIT_USE_INSTALLED_SERVER: '0',
|
|
239
|
+
CLOUDCLI_USE_INSTALLED_SERVER: '1',
|
|
240
|
+
});
|
|
241
|
+
assert.equal(isInstalledServerRequested(both), false, 'the new value wins');
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
test('Electron wiring: localServer.js reads discovery names through the brand reader', () => {
|
|
245
|
+
const source = readRepoFile('electron/localServer.js');
|
|
246
|
+
|
|
247
|
+
assert.ok(
|
|
248
|
+
source.includes("readBrandEnvValue(reader, name, undefined)"),
|
|
249
|
+
'discovery names must go through the brand reader',
|
|
250
|
+
);
|
|
251
|
+
assert.ok(
|
|
252
|
+
source.includes("readBrandEnvValue(reader, 'USE_INSTALLED_SERVER', '')"),
|
|
253
|
+
'the installed-server switch must go through the brand reader',
|
|
254
|
+
);
|
|
255
|
+
assert.doesNotMatch(source, /process\.env\.CLOUDCLI_/);
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
// ── serverInstaller ────────────────────────────────────────────────────────
|
|
259
|
+
|
|
260
|
+
function installerWith(env) {
|
|
261
|
+
return new ServerInstaller({
|
|
262
|
+
version: '2.0.0',
|
|
263
|
+
platform: 'linux',
|
|
264
|
+
arch: 'x64',
|
|
265
|
+
env,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
test('serverInstaller AC4: no brand env keeps the shipped bundle defaults', () => {
|
|
270
|
+
const installer = installerWith({});
|
|
271
|
+
|
|
272
|
+
assert.equal(installer.bundleBaseUrl, 'https://github.com/yaleh/cloudpit/releases/download');
|
|
273
|
+
assert.equal(installer.bundleReleaseTag, 'v2.0.0');
|
|
274
|
+
assert.equal(installer.installRoot, DEFAULT_INSTALL_ROOT);
|
|
275
|
+
assert.equal(installer.migrateLegacyInstall, true);
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
test('serverInstaller AC3: only CLOUDPIT_* set reads the new values', () => {
|
|
279
|
+
const installer = installerWith({
|
|
280
|
+
CLOUDPIT_SERVER_BUNDLE_URL: 'https://bundles.example/new',
|
|
281
|
+
CLOUDPIT_SERVER_BUNDLE_RELEASE_TAG: 'v9',
|
|
282
|
+
CLOUDPIT_SERVER_DIR: '/opt/cloudpit-new',
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
assert.equal(installer.bundleBaseUrl, 'https://bundles.example/new');
|
|
286
|
+
assert.equal(installer.bundleReleaseTag, 'v9');
|
|
287
|
+
assert.equal(installer.installRoot, '/opt/cloudpit-new');
|
|
288
|
+
assert.equal(installer.migrateLegacyInstall, false);
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
test('serverInstaller AC3 (v3.0): only CLOUDCLI_* set keeps the shipped values', () => {
|
|
292
|
+
const installer = installerWith({
|
|
293
|
+
CLOUDCLI_SERVER_BUNDLE_URL: 'https://bundles.example/old',
|
|
294
|
+
CLOUDCLI_SERVER_BUNDLE_RELEASE_TAG: 'v8',
|
|
295
|
+
CLOUDCLI_SERVER_DIR: '/opt/cloudcli-old',
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
assert.equal(installer.bundleBaseUrl, 'https://github.com/yaleh/cloudpit/releases/download');
|
|
299
|
+
assert.equal(installer.bundleReleaseTag, 'v2.0.0');
|
|
300
|
+
assert.equal(installer.installRoot, DEFAULT_INSTALL_ROOT);
|
|
301
|
+
assert.equal(installer.migrateLegacyInstall, true);
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
test('serverInstaller AC3: both spellings set means the new values win', () => {
|
|
305
|
+
const installer = installerWith({
|
|
306
|
+
CLOUDPIT_SERVER_BUNDLE_URL: 'https://bundles.example/new',
|
|
307
|
+
CLOUDCLI_SERVER_BUNDLE_URL: 'https://bundles.example/old',
|
|
308
|
+
CLOUDPIT_SERVER_BUNDLE_RELEASE_TAG: 'v9',
|
|
309
|
+
CLOUDCLI_SERVER_BUNDLE_RELEASE_TAG: 'v8',
|
|
310
|
+
CLOUDPIT_SERVER_DIR: '/opt/cloudpit-new',
|
|
311
|
+
CLOUDCLI_SERVER_DIR: '/opt/cloudcli-old',
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
assert.equal(installer.bundleBaseUrl, 'https://bundles.example/new');
|
|
315
|
+
assert.equal(installer.bundleReleaseTag, 'v9');
|
|
316
|
+
assert.equal(installer.installRoot, '/opt/cloudpit-new');
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
test('Electron wiring: serverInstaller.js reads bundle names through the brand reader', () => {
|
|
320
|
+
const source = readRepoFile('electron/serverInstaller.js');
|
|
321
|
+
|
|
322
|
+
assert.ok(source.includes('const brandEnv = createBrandEnvReader({ env })'));
|
|
323
|
+
assert.doesNotMatch(source, /process\.env\.CLOUDCLI_/);
|
|
324
|
+
});
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* npx tsx --tsconfig server/tsconfig.json --test electron/tests/cloudpit-desktop-identity.test.mjs
|
|
6
6
|
*
|
|
7
7
|
* Covers the flipped display identity (`APP_NAME` / `productName`), the
|
|
8
|
-
* one-time userData copy
|
|
9
|
-
* marker lookup, dual deep-link scheme
|
|
10
|
-
*
|
|
8
|
+
* one-time userData copy (now owned by `appIdMigration.js`), the movable
|
|
9
|
+
* local-server cache, the new-then-legacy marker lookup, dual deep-link scheme
|
|
10
|
+
* registration, the v3.0 `appId` switch, and the pinned cloud-contract
|
|
11
|
+
* invariants (`cloudcli://auth/callback`, `app_surface=cloudcli_desktop`).
|
|
11
12
|
* File operations use real temp directories; only the failing-rename arm
|
|
12
13
|
* injects an `fs` whose `rename` rejects.
|
|
13
14
|
*/
|
|
@@ -75,8 +76,8 @@ test('AC2/AC7: main.js names the app Cloudpit while pinning the cloud identity',
|
|
|
75
76
|
assert.match(source, /const APP_NAME = 'Cloudpit';/, 'APP_NAME is Cloudpit');
|
|
76
77
|
assert.match(
|
|
77
78
|
source,
|
|
78
|
-
/const APP_USER_MODEL_ID = 'ai\.
|
|
79
|
-
'the Windows app user model id
|
|
79
|
+
/const APP_USER_MODEL_ID = 'ai\.cloudpit\.desktop';/,
|
|
80
|
+
'the Windows app user model id follows the v3.0 app id',
|
|
80
81
|
);
|
|
81
82
|
assert.match(source, /const CALLBACK_PROTOCOL = 'cloudcli';/, 'the cloud callback scheme is unchanged');
|
|
82
83
|
assert.ok(
|
|
@@ -90,13 +91,13 @@ test('AC2/AC7: main.js names the app Cloudpit while pinning the cloud identity',
|
|
|
90
91
|
);
|
|
91
92
|
});
|
|
92
93
|
|
|
93
|
-
test('AC3: bootstrap wires
|
|
94
|
+
test('AC3: bootstrap wires the app-id migration (and its userData copy) before app.whenReady()', () => {
|
|
94
95
|
const source = readFileSync(MAIN_SOURCE_PATH, 'utf8');
|
|
95
96
|
|
|
96
97
|
assert.match(
|
|
97
98
|
source,
|
|
98
|
-
/import \{
|
|
99
|
-
'the migration
|
|
99
|
+
/import \{ maybeMigrateDesktopAppId \} from '\.\/appIdMigration\.js';/,
|
|
100
|
+
'the v3.0 app-id migration entry point is imported',
|
|
100
101
|
);
|
|
101
102
|
|
|
102
103
|
const bootstrapStart = source.indexOf('async function bootstrap()');
|
|
@@ -104,15 +105,24 @@ test('AC3: bootstrap wires maybeMigrateDesktopUserData before app.whenReady()',
|
|
|
104
105
|
const bootstrapSource = source.slice(bootstrapStart, source.indexOf('\n}', bootstrapStart));
|
|
105
106
|
|
|
106
107
|
const titleIndex = bootstrapSource.indexOf('process.title = APP_NAME');
|
|
107
|
-
const callIndex = bootstrapSource.indexOf('
|
|
108
|
+
const callIndex = bootstrapSource.indexOf('maybeMigrateDesktopAppId({');
|
|
108
109
|
const readyIndex = bootstrapSource.indexOf('await app.whenReady()');
|
|
109
110
|
assert.ok(titleIndex >= 0, 'the app name is assigned first');
|
|
110
111
|
assert.ok(callIndex > titleIndex, 'migration runs after the app name is assigned');
|
|
111
112
|
assert.ok(readyIndex > callIndex, 'migration runs before app.whenReady()');
|
|
112
113
|
|
|
113
114
|
const callSource = bootstrapSource.slice(callIndex, readyIndex);
|
|
114
|
-
assert.match(callSource, /appName: APP_NAME,/, 'the call passes the flipped app name');
|
|
115
115
|
assert.match(callSource, /appDataDir: app\.getPath\('appData'\)/, 'the call targets appData');
|
|
116
|
+
|
|
117
|
+
// appIdMigration owns the three-file userData copy and still goes through the
|
|
118
|
+
// shared, app-name-guarded helper.
|
|
119
|
+
const migrationSource = readFileSync(path.join(ELECTRON_DIR, '..', 'appIdMigration.js'), 'utf8');
|
|
120
|
+
assert.match(
|
|
121
|
+
migrationSource,
|
|
122
|
+
/import \{[^}]*maybeMigrateDesktopUserData[^}]*\} from '\.\/userDataMigration\.js';/,
|
|
123
|
+
'the app-id migration reuses the userData helper',
|
|
124
|
+
);
|
|
125
|
+
assert.match(migrationSource, /appName: DESKTOP_PRODUCT_NAME,/, 'the helper runs under the Cloudpit name');
|
|
116
126
|
});
|
|
117
127
|
|
|
118
128
|
test('AC2: package.json names the app Cloudpit', () => {
|
|
@@ -231,22 +241,27 @@ test('AC5: server/index.ts writes the marker under .cloudpit', () => {
|
|
|
231
241
|
);
|
|
232
242
|
});
|
|
233
243
|
|
|
234
|
-
test('AC6: both
|
|
244
|
+
test('AC6: the packaged app metadata still claims both schemes (cloudcli stays for the auth callback)', () => {
|
|
235
245
|
const pkg = readPackageJson();
|
|
236
246
|
|
|
247
|
+
// R5 retires the cloudcli DEEP LINK (main.js registers only cloudpit), but the
|
|
248
|
+
// third-party login callback `cloudcli://auth/callback` must still reach the
|
|
249
|
+
// app, so the OS-level declaration keeps the legacy scheme.
|
|
237
250
|
const protocolSchemes = pkg.build.protocols.flatMap((protocol) => protocol.schemes);
|
|
238
|
-
assert.ok(protocolSchemes.includes('cloudcli'), 'build.protocols keeps cloudcli');
|
|
239
|
-
assert.ok(protocolSchemes.includes('cloudpit'), 'build.protocols
|
|
251
|
+
assert.ok(protocolSchemes.includes('cloudcli'), 'build.protocols keeps cloudcli for cloudcli://auth/callback');
|
|
252
|
+
assert.ok(protocolSchemes.includes('cloudpit'), 'build.protocols declares cloudpit');
|
|
240
253
|
|
|
241
254
|
const macSchemes = pkg.build.mac.extendInfo.CFBundleURLTypes.flatMap((type) => type.CFBundleURLSchemes);
|
|
242
|
-
assert.ok(macSchemes.includes('cloudcli'), 'mac CFBundleURLSchemes keeps cloudcli');
|
|
243
|
-
assert.ok(macSchemes.includes('cloudpit'), 'mac CFBundleURLSchemes
|
|
255
|
+
assert.ok(macSchemes.includes('cloudcli'), 'mac CFBundleURLSchemes keeps cloudcli for the auth callback');
|
|
256
|
+
assert.ok(macSchemes.includes('cloudpit'), 'mac CFBundleURLSchemes declares cloudpit');
|
|
244
257
|
});
|
|
245
258
|
|
|
246
|
-
test('AC6: main.js registers
|
|
259
|
+
test('AC6: main.js registers only the cloudpit deep link and still parses the cloudcli callback', () => {
|
|
247
260
|
const source = readFileSync(MAIN_SOURCE_PATH, 'utf8');
|
|
248
261
|
|
|
249
|
-
assert.match(source, /const DEEP_LINK_SCHEMES = \['
|
|
262
|
+
assert.match(source, /const DEEP_LINK_SCHEMES = \['cloudpit'\];/);
|
|
263
|
+
assert.match(source, /const CALLBACK_PROTOCOL = 'cloudcli';/);
|
|
264
|
+
assert.match(source, /const CALLBACK_URL = `\$\{CALLBACK_PROTOCOL\}:\/\/auth\/callback`;/);
|
|
250
265
|
|
|
251
266
|
const start = source.indexOf('function registerProtocolHandler()');
|
|
252
267
|
assert.ok(start >= 0, 'registerProtocolHandler() exists');
|
|
@@ -263,11 +278,19 @@ test('AC6: main.js registers both schemes in the dev and packaged branches', ()
|
|
|
263
278
|
/app\.setAsDefaultProtocolClient\(scheme\);/,
|
|
264
279
|
'the packaged branch registers every scheme',
|
|
265
280
|
);
|
|
281
|
+
|
|
282
|
+
// The cloudcli callback is still PARSED even though it is no longer registered
|
|
283
|
+
// as a deep link here; the OS association comes from build.protocols above.
|
|
284
|
+
const handleStart = source.indexOf('async function handleDeepLink(');
|
|
285
|
+
assert.ok(handleStart >= 0, 'handleDeepLink() exists');
|
|
286
|
+
const handleSource = source.slice(handleStart, source.indexOf('\n}', handleStart));
|
|
287
|
+
assert.match(handleSource, /parsed\.protocol !== `\$\{CALLBACK_PROTOCOL\}:`/);
|
|
288
|
+
assert.match(handleSource, /parsed\.hostname !== 'auth'/);
|
|
266
289
|
});
|
|
267
290
|
|
|
268
|
-
test('AC7: appId
|
|
291
|
+
test('AC7: appId follows the v3.0 identity while the cloudcli_desktop surface is unchanged', () => {
|
|
269
292
|
const pkg = readPackageJson();
|
|
270
|
-
assert.equal(pkg.build.appId, 'ai.
|
|
293
|
+
assert.equal(pkg.build.appId, 'ai.cloudpit.desktop');
|
|
271
294
|
|
|
272
295
|
const cloudSource = readFileSync(CLOUD_SOURCE_PATH, 'utf8');
|
|
273
296
|
assert.match(cloudSource, /app_surface', 'cloudcli_desktop'\)/);
|
|
@@ -23,9 +23,11 @@
|
|
|
23
23
|
* by path, so a future edit cannot make the criterion self-red).
|
|
24
24
|
*
|
|
25
25
|
* The non-goal identity (`cloudcli.ai`, the `cloudcli://auth/callback` login
|
|
26
|
-
* callback, `app_surface=cloudcli_desktop`, the `ai.cloudcli.desktop`
|
|
27
|
-
* the dual-read `cloudcli://` observation URIs) is asserted
|
|
28
|
-
* same run — a zero-hit scan must not be achieved by renaming
|
|
26
|
+
* callback, `app_surface=cloudcli_desktop`, the legacy `ai.cloudcli.desktop`
|
|
27
|
+
* app-id spelling and the dual-read `cloudcli://` observation URIs) is asserted
|
|
28
|
+
* *present* in the same run — a zero-hit scan must not be achieved by renaming
|
|
29
|
+
* it away. (v3.0's R13 keeps that legacy spelling as the migration constant in
|
|
30
|
+
* `electron/appIdMigration.js`; the live `APP_USER_MODEL_ID` is the new id.)
|
|
29
31
|
*/
|
|
30
32
|
import assert from 'node:assert/strict';
|
|
31
33
|
import {
|
|
@@ -425,7 +427,11 @@ test('AC4: a tmp fixture holding only the non-goal cloudcli identifiers stays cl
|
|
|
425
427
|
|
|
426
428
|
test('AC4: the live non-goal identity pins are untouched', () => {
|
|
427
429
|
const mainSource = readRepoFile('electron/main.js');
|
|
428
|
-
assert.match(
|
|
430
|
+
assert.match(
|
|
431
|
+
mainSource,
|
|
432
|
+
/const APP_USER_MODEL_ID = 'ai\.cloudpit\.desktop';/,
|
|
433
|
+
'the live app id follows the v3.0 switch (its legacy spelling is a non-goal token, not the live pin)',
|
|
434
|
+
);
|
|
429
435
|
assert.match(mainSource, /const CALLBACK_PROTOCOL = 'cloudcli';/, 'the login callback scheme is unchanged');
|
|
430
436
|
assert.ok(
|
|
431
437
|
mainSource.includes('const CALLBACK_URL = `${CALLBACK_PROTOCOL}://auth/callback`;'),
|
|
@@ -98,15 +98,28 @@ test('AC7: the CloudCLI app-name guard never touches the filesystem', (t) => {
|
|
|
98
98
|
assert.equal(existsSync(path.join(newUserDataDir, 'cache.bin')), false);
|
|
99
99
|
});
|
|
100
100
|
|
|
101
|
-
test('AC7:
|
|
101
|
+
test('AC7: main.js runs the app-id migration, which reuses the guarded helper under Cloudpit', () => {
|
|
102
102
|
const source = readFileSync(MAIN_SOURCE_PATH, 'utf8');
|
|
103
103
|
|
|
104
104
|
assert.match(
|
|
105
105
|
source,
|
|
106
|
-
/import \{
|
|
107
|
-
'the
|
|
106
|
+
/import \{ maybeMigrateDesktopAppId \} from '\.\/appIdMigration\.js';/,
|
|
107
|
+
'the v3.0 app-id migration entry point is imported',
|
|
108
108
|
);
|
|
109
|
-
assert.match(source, /
|
|
110
|
-
assert.match(source, /appName: APP_NAME,/, 'the call passes the flipped app name');
|
|
109
|
+
assert.match(source, /maybeMigrateDesktopAppId\(\{/, 'the migration is called from bootstrap()');
|
|
111
110
|
assert.match(source, /const APP_NAME = 'Cloudpit';/, 'APP_NAME is flipped to Cloudpit');
|
|
111
|
+
|
|
112
|
+
// The three-file copy moved into the app-id migration in v3.0 but still goes
|
|
113
|
+
// through the shared helper (and therefore through its app-name guard).
|
|
114
|
+
const migrationSource = readFileSync(
|
|
115
|
+
fileURLToPath(new URL('../appIdMigration.js', import.meta.url)),
|
|
116
|
+
'utf8',
|
|
117
|
+
);
|
|
118
|
+
assert.match(
|
|
119
|
+
migrationSource,
|
|
120
|
+
/import \{[^}]*maybeMigrateDesktopUserData[^}]*\} from '\.\/userDataMigration\.js';/,
|
|
121
|
+
'appIdMigration imports the helper',
|
|
122
|
+
);
|
|
123
|
+
assert.match(migrationSource, /maybeMigrateDesktopUserData\(\{/, 'appIdMigration calls the helper');
|
|
124
|
+
assert.match(migrationSource, /appName: DESKTOP_PRODUCT_NAME,/, 'the helper runs under Cloudpit');
|
|
112
125
|
});
|
|
@@ -24,6 +24,9 @@ export const DESKTOP_USER_DATA_FILES = [
|
|
|
24
24
|
const LEGACY_APP_DATA_DIRECTORY_NAME = 'CloudCLI';
|
|
25
25
|
const CLOUDPIT_APP_DATA_DIRECTORY_NAME = 'Cloudpit';
|
|
26
26
|
|
|
27
|
+
/** Exported so the app-id migration can name the legacy rollback folder. */
|
|
28
|
+
export const LEGACY_DESKTOP_USER_DATA_DIRECTORY = LEGACY_APP_DATA_DIRECTORY_NAME;
|
|
29
|
+
|
|
27
30
|
/**
|
|
28
31
|
* Copies the three desktop userData files from the CloudCLI folder into the
|
|
29
32
|
* Cloudpit folder.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yalehwang/cloudpit",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -44,6 +44,7 @@
|
|
|
44
44
|
"desktop:dist:win": "npm run build && npm run desktop:stage && electron-builder --projectDir .desktop-build/desktop-app --win nsis",
|
|
45
45
|
"server:bundle": "npm run build && node scripts/release/build-server-bundle.js",
|
|
46
46
|
"desktop:icon:mac": "node electron/scripts/generate-macos-icon.js",
|
|
47
|
+
"desktop:icon:win": "node electron/scripts/generate-windows-icon.js",
|
|
47
48
|
"build": "npm run build:client && npm run build:server",
|
|
48
49
|
"build:client": "vite build && node scripts/write-client-build-info.mjs",
|
|
49
50
|
"prebuild:server": "node -e \"require('node:fs').rmSync('dist-server.next', { recursive: true, force: true })\"",
|
|
@@ -72,7 +73,7 @@
|
|
|
72
73
|
"update:platform": "./update-platform.sh"
|
|
73
74
|
},
|
|
74
75
|
"build": {
|
|
75
|
-
"appId": "ai.
|
|
76
|
+
"appId": "ai.cloudpit.desktop",
|
|
76
77
|
"productName": "Cloudpit",
|
|
77
78
|
"asar": false,
|
|
78
79
|
"artifactName": "cloudpit-desktop-${version}-${os}-${arch}.${ext}",
|
|
@@ -94,7 +95,7 @@
|
|
|
94
95
|
],
|
|
95
96
|
"protocols": [
|
|
96
97
|
{
|
|
97
|
-
"name": "
|
|
98
|
+
"name": "Cloudpit",
|
|
98
99
|
"schemes": [
|
|
99
100
|
"cloudcli"
|
|
100
101
|
]
|
|
@@ -114,11 +115,11 @@
|
|
|
114
115
|
"dmg"
|
|
115
116
|
],
|
|
116
117
|
"extendInfo": {
|
|
117
|
-
"CFBundleName": "
|
|
118
|
-
"CFBundleDisplayName": "
|
|
118
|
+
"CFBundleName": "Cloudpit",
|
|
119
|
+
"CFBundleDisplayName": "Cloudpit",
|
|
119
120
|
"CFBundleURLTypes": [
|
|
120
121
|
{
|
|
121
|
-
"CFBundleURLName": "
|
|
122
|
+
"CFBundleURLName": "Cloudpit",
|
|
122
123
|
"CFBundleURLSchemes": [
|
|
123
124
|
"cloudcli",
|
|
124
125
|
"cloudpit"
|
package/public/api-docs.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>
|
|
6
|
+
<title>Cloudpit - API Documentation</title>
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
8
|
<link rel="icon" type="image/png" href="/favicon.png" />
|
|
9
9
|
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
</svg>
|
|
152
152
|
</div>
|
|
153
153
|
<div class="brand-text">
|
|
154
|
-
<h1>
|
|
154
|
+
<h1>Cloudpit</h1>
|
|
155
155
|
<div class="subtitle">API Documentation</div>
|
|
156
156
|
</div>
|
|
157
157
|
</div>
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
<main>
|
|
168
168
|
<h2>API Documentation</h2>
|
|
169
169
|
<p>
|
|
170
|
-
|
|
170
|
+
Cloudpit runs a local HTTP server that serves its web interface. This page
|
|
171
171
|
is the place for documentation of the HTTP API that server exposes.
|
|
172
172
|
</p>
|
|
173
173
|
|