@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.
Files changed (690) hide show
  1. package/README.md +1 -1
  2. package/dist/api-docs.html +3 -3
  3. package/dist/assets/{abnfDiagram-N423BO3Z-D5yLnMt9.js → abnfDiagram-N423BO3Z-D7Xt05gV.js} +1 -1
  4. package/dist/assets/{abnfDiagram-N423BO3Z-bTHtQIhR.js → abnfDiagram-N423BO3Z-dmPRRPEm.js} +1 -1
  5. package/dist/assets/{arc-1DmrBEyG.js → arc-B7W3R5qH.js} +1 -1
  6. package/dist/assets/{arc-BlGK--01.js → arc-BHMlIcaQ.js} +1 -1
  7. package/dist/assets/{architectureDiagram-T3A2C74G--lzbKBn9.js → architectureDiagram-T3A2C74G-CUUpAoN0.js} +1 -1
  8. package/dist/assets/{architectureDiagram-T3A2C74G-7lKNAbUU.js → architectureDiagram-T3A2C74G-DpXhbHxu.js} +1 -1
  9. package/dist/assets/{blockDiagram-VBNYF7ZC-17cdO9zs.js → blockDiagram-VBNYF7ZC-Bf0yfNxj.js} +1 -1
  10. package/dist/assets/{blockDiagram-VBNYF7ZC-BPavJfDj.js → blockDiagram-VBNYF7ZC-Cki9AOhc.js} +1 -1
  11. package/dist/assets/{c4Diagram-5PPSVZJV-Bm1-2w3b.js → c4Diagram-5PPSVZJV-DK2RqNDO.js} +1 -1
  12. package/dist/assets/{c4Diagram-5PPSVZJV-aHvFL3Wb.js → c4Diagram-5PPSVZJV-DyhTF0e5.js} +1 -1
  13. package/dist/assets/channel-DTLMNzbH.js +1 -0
  14. package/dist/assets/channel-DiqxUuPf.js +1 -0
  15. package/dist/assets/{chunk-2GRJ4B5K-D7WqZewM.js → chunk-2GRJ4B5K-BYtByJbf.js} +1 -1
  16. package/dist/assets/{chunk-2GRJ4B5K-DbwzBiPF.js → chunk-2GRJ4B5K-CksFgocc.js} +1 -1
  17. package/dist/assets/{chunk-2Q5K7J3B-DdCr89uy.js → chunk-2Q5K7J3B-D2kQa5TZ.js} +1 -1
  18. package/dist/assets/{chunk-2Q5K7J3B-TFd0ECKO.js → chunk-2Q5K7J3B-NSSX86FA.js} +1 -1
  19. package/dist/assets/{chunk-5RXB4S5H-BdhRBpEi.js → chunk-5RXB4S5H-DNNYC8_t.js} +1 -1
  20. package/dist/assets/{chunk-5RXB4S5H-D0SQ3nIe.js → chunk-5RXB4S5H-Rx0YaqNI.js} +1 -1
  21. package/dist/assets/{chunk-5VM5RSS4-B9Lv3cWR.js → chunk-5VM5RSS4-B1k4I4CX.js} +1 -1
  22. package/dist/assets/{chunk-5VM5RSS4-DioqTIvB.js → chunk-5VM5RSS4-CsvQj3QC.js} +1 -1
  23. package/dist/assets/{chunk-6Q2QTUOP-09bwlcIv.js → chunk-6Q2QTUOP-48-dEgAs.js} +1 -1
  24. package/dist/assets/{chunk-6Q2QTUOP-JuhPJZZL.js → chunk-6Q2QTUOP-DCMSW5_0.js} +1 -1
  25. package/dist/assets/{chunk-GF5L2VYU-C6f2SgCw.js → chunk-GF5L2VYU-CGyvOsdN.js} +1 -1
  26. package/dist/assets/{chunk-GF5L2VYU-DzD9aOyp.js → chunk-GF5L2VYU-YXe113hp.js} +1 -1
  27. package/dist/assets/{chunk-JWPE2WC7-BggnWNZv.js → chunk-JWPE2WC7-BT7vCW4x.js} +1 -1
  28. package/dist/assets/{chunk-JWPE2WC7-Dte_Ax9K.js → chunk-JWPE2WC7-D2K1Oywq.js} +1 -1
  29. package/dist/assets/{chunk-KBJHAD2P-9TCQV92m.js → chunk-KBJHAD2P-CQZWamtE.js} +1 -1
  30. package/dist/assets/{chunk-KBJHAD2P-DDnJp7kJ.js → chunk-KBJHAD2P-gpEwZrNy.js} +1 -1
  31. package/dist/assets/{chunk-RYQCIY6F-CE2Y4D_h.js → chunk-RYQCIY6F-BI0fMtjY.js} +1 -1
  32. package/dist/assets/{chunk-RYQCIY6F-DsgFSTNw.js → chunk-RYQCIY6F-vguRdb4F.js} +1 -1
  33. package/dist/assets/{chunk-XXDRQBXY-B1FIfsqq.js → chunk-XXDRQBXY-B99qH1_w.js} +1 -1
  34. package/dist/assets/{chunk-XXDRQBXY-B4YfaqTO.js → chunk-XXDRQBXY-DZLJnbBB.js} +1 -1
  35. package/dist/assets/classDiagram-JCYQIIEL-BaV-s6x8.js +1 -0
  36. package/dist/assets/classDiagram-JCYQIIEL-D4M03B4L.js +1 -0
  37. package/dist/assets/classDiagram-v2-OCEON4UE-BaV-s6x8.js +1 -0
  38. package/dist/assets/classDiagram-v2-OCEON4UE-D4M03B4L.js +1 -0
  39. package/dist/assets/{cose-bilkent-JH36ORCC-C1AG5Pib.js → cose-bilkent-JH36ORCC-EsVnz-E6.js} +1 -1
  40. package/dist/assets/{cose-bilkent-JH36ORCC-lMwWDibI.js → cose-bilkent-JH36ORCC-VI2OjCIx.js} +1 -1
  41. package/dist/assets/{cynefin-VYW2F7L2-BlabniRL.js → cynefin-VYW2F7L2-BVYg0ixs.js} +1 -1
  42. package/dist/assets/{cynefin-VYW2F7L2-W-c-z4IW.js → cynefin-VYW2F7L2-BnHmA5I2.js} +1 -1
  43. package/dist/assets/{cynefinDiagram-MW4NZA55-BtTep_pq.js → cynefinDiagram-MW4NZA55-B-OCRLIw.js} +1 -1
  44. package/dist/assets/{cynefinDiagram-MW4NZA55-Due6EIPh.js → cynefinDiagram-MW4NZA55-ItLlzjDR.js} +1 -1
  45. package/dist/assets/{dagre-VZM6K2ZE-CWLaFfdt.js → dagre-VZM6K2ZE-DkVDkAWJ.js} +1 -1
  46. package/dist/assets/{dagre-VZM6K2ZE-DZldvqiQ.js → dagre-VZM6K2ZE-bYR4z8-Z.js} +1 -1
  47. package/dist/assets/{diagram-7IWD3JNH-RnmUHYwN.js → diagram-7IWD3JNH-DjXMue67.js} +1 -1
  48. package/dist/assets/{diagram-7IWD3JNH-Di-7-nSA.js → diagram-7IWD3JNH-FNEXlm5k.js} +1 -1
  49. package/dist/assets/{diagram-B4RE2ZJO-Wybyn8fw.js → diagram-B4RE2ZJO-73NYiO_P.js} +1 -1
  50. package/dist/assets/{diagram-B4RE2ZJO-mrK79C2E.js → diagram-B4RE2ZJO-dB4QHq0D.js} +1 -1
  51. package/dist/assets/{diagram-LBJQPF4R-JY6FqSFu.js → diagram-LBJQPF4R-DyKT610O.js} +1 -1
  52. package/dist/assets/{diagram-LBJQPF4R-sWhu2VLy.js → diagram-LBJQPF4R-rMgmnjvd.js} +1 -1
  53. package/dist/assets/{diagram-Q27KOJAE-BJ4T0WGp.js → diagram-Q27KOJAE-BvsfmmQt.js} +1 -1
  54. package/dist/assets/{diagram-Q27KOJAE-DyGT9KhB.js → diagram-Q27KOJAE-c6DEjLQX.js} +1 -1
  55. package/dist/assets/{diagram-UB23O5K3-oXFJAndB.js → diagram-UB23O5K3-BMo2VXVb.js} +1 -1
  56. package/dist/assets/{diagram-UB23O5K3-tTd8qwEM.js → diagram-UB23O5K3-DRMKefnZ.js} +1 -1
  57. package/dist/assets/{ebnfDiagram-BXEA7PRR-DV67cBe6.js → ebnfDiagram-BXEA7PRR-BrOAekWh.js} +1 -1
  58. package/dist/assets/{ebnfDiagram-BXEA7PRR-OQGm8tPs.js → ebnfDiagram-BXEA7PRR-YmQkylwV.js} +1 -1
  59. package/dist/assets/{elk-BRx4gEGg.js → elk-Hz3WRESK.js} +1 -1
  60. package/dist/assets/{elk-CdAQJ-NA.js → elk-tPSZwRVB.js} +1 -1
  61. package/dist/assets/{erDiagram-JOGREHBK-BhD2xZ2I.js → erDiagram-JOGREHBK-BlaZnoQi.js} +1 -1
  62. package/dist/assets/{erDiagram-JOGREHBK-BqP8DqqW.js → erDiagram-JOGREHBK-CRCfRUXt.js} +1 -1
  63. package/dist/assets/{flowDiagram-UKHOOZJN-B4AjZxPJ.js → flowDiagram-UKHOOZJN-DQ1gbjxo.js} +1 -1
  64. package/dist/assets/{flowDiagram-UKHOOZJN-CP_1WsW4.js → flowDiagram-UKHOOZJN-Dinlbmds.js} +1 -1
  65. package/dist/assets/{ganttDiagram-PKOTCBZU-BMk6nngr.js → ganttDiagram-PKOTCBZU-CMGpcBZO.js} +1 -1
  66. package/dist/assets/{ganttDiagram-PKOTCBZU-B_ce39Ld.js → ganttDiagram-PKOTCBZU-Eh94zuPI.js} +1 -1
  67. package/dist/assets/{gitGraphDiagram-DS77QQ5N-CnZA42iA.js → gitGraphDiagram-DS77QQ5N-Bp8xIZbk.js} +1 -1
  68. package/dist/assets/{gitGraphDiagram-DS77QQ5N-DqEz_iTn.js → gitGraphDiagram-DS77QQ5N-Cu-b4YNw.js} +1 -1
  69. package/dist/assets/index-51e8fagd.css +32 -0
  70. package/dist/assets/{index-D5nLH7qP.js → index-CQE9C6k6.js} +356 -356
  71. package/dist/assets/{index-CqyOGerp.js → index-S8ow0XfK.js} +356 -356
  72. package/dist/assets/{infoDiagram-6WML65LV-BQf7m4X4.js → infoDiagram-6WML65LV-CClEEtTq.js} +1 -1
  73. package/dist/assets/{infoDiagram-6WML65LV-Dntf4YFM.js → infoDiagram-6WML65LV-QmHeojgl.js} +1 -1
  74. package/dist/assets/{ishikawaDiagram-WSZJBQD7-BDjsldAI.js → ishikawaDiagram-WSZJBQD7-BemSj9lN.js} +1 -1
  75. package/dist/assets/{ishikawaDiagram-WSZJBQD7-BqXpJeoL.js → ishikawaDiagram-WSZJBQD7-nw48g1vr.js} +1 -1
  76. package/dist/assets/{journeyDiagram-NVQOT4AX-CBcFzP2M.js → journeyDiagram-NVQOT4AX-DeNtO6OU.js} +1 -1
  77. package/dist/assets/{journeyDiagram-NVQOT4AX-DoWKjgKd.js → journeyDiagram-NVQOT4AX-q1lCfOYn.js} +1 -1
  78. package/dist/assets/{kanban-definition-27J2QSJJ-9bspl7j-.js → kanban-definition-27J2QSJJ-Bzhu6hql.js} +1 -1
  79. package/dist/assets/{kanban-definition-27J2QSJJ-Cjxa-Fbb.js → kanban-definition-27J2QSJJ-VfvD33YG.js} +1 -1
  80. package/dist/assets/{linear-YogAXmU_.js → linear-C0Kwu3Yp.js} +1 -1
  81. package/dist/assets/{linear-lIhI5Y8l.js → linear-CbM_4-fP.js} +1 -1
  82. package/dist/assets/{mermaid.core-2Spxcrg7.js → mermaid.core-G2huIsXn.js} +5 -5
  83. package/dist/assets/{mermaid.core-BxxInCBm.js → mermaid.core-fvTQFUX1.js} +5 -5
  84. package/dist/assets/{mindmap-definition-FAOFIHXS-DblO5EG4.js → mindmap-definition-FAOFIHXS-BONvuyvz.js} +1 -1
  85. package/dist/assets/{mindmap-definition-FAOFIHXS-_nlvJ9VK.js → mindmap-definition-FAOFIHXS-BzYawGKQ.js} +1 -1
  86. package/dist/assets/{pegDiagram-VL7TDLO6-BBJFPAZG.js → pegDiagram-VL7TDLO6-Df2HAKGH.js} +1 -1
  87. package/dist/assets/{pegDiagram-VL7TDLO6-DhRH7YRf.js → pegDiagram-VL7TDLO6-DnMwBHn_.js} +1 -1
  88. package/dist/assets/{pieDiagram-7S7Q4E2Y-4Qy7Nk4U.js → pieDiagram-7S7Q4E2Y-Cd3-a-dM.js} +1 -1
  89. package/dist/assets/{pieDiagram-7S7Q4E2Y-BUtdeYBT.js → pieDiagram-7S7Q4E2Y-LV6TOhOD.js} +1 -1
  90. package/dist/assets/{quadrantDiagram-CIZ2JOQS-BUoIDY1r.js → quadrantDiagram-CIZ2JOQS-8VOnA3FV.js} +1 -1
  91. package/dist/assets/{quadrantDiagram-CIZ2JOQS-D90kdHA1.js → quadrantDiagram-CIZ2JOQS-CnwxFPxh.js} +1 -1
  92. package/dist/assets/{railroadDiagram-AXF67PYL-CJf9--tj.js → railroadDiagram-AXF67PYL-CXBFj3Iu.js} +1 -1
  93. package/dist/assets/{railroadDiagram-AXF67PYL-D3S1oliC.js → railroadDiagram-AXF67PYL-DLoAPcsb.js} +1 -1
  94. package/dist/assets/{requirementDiagram-LRYGKXZP-C04jhjS6.js → requirementDiagram-LRYGKXZP-LrVlZXSz.js} +1 -1
  95. package/dist/assets/{requirementDiagram-LRYGKXZP-cQaGai5h.js → requirementDiagram-LRYGKXZP-pakITowN.js} +1 -1
  96. package/dist/assets/{sankeyDiagram-W5VNT64P-AT4cTVbY.js → sankeyDiagram-W5VNT64P-BIQQ8A1I.js} +1 -1
  97. package/dist/assets/{sankeyDiagram-W5VNT64P-DfFUdqYO.js → sankeyDiagram-W5VNT64P-C6QWOxNM.js} +1 -1
  98. package/dist/assets/{sequenceDiagram-SI44F4Z6-DbjhG030.js → sequenceDiagram-SI44F4Z6-CpHBe2CG.js} +1 -1
  99. package/dist/assets/{sequenceDiagram-SI44F4Z6-DKjdupix.js → sequenceDiagram-SI44F4Z6-cnLxaxcV.js} +1 -1
  100. package/dist/assets/{sizeCapture-X5ZJPWSS-CCcKLP8m.js → sizeCapture-X5ZJPWSS-3g-1onHD.js} +1 -1
  101. package/dist/assets/{sizeCapture-X5ZJPWSS-DGxRWxeo.js → sizeCapture-X5ZJPWSS-4U6b3PSL.js} +1 -1
  102. package/dist/assets/{stateDiagram-OKZ733FA-D7wGCNb7.js → stateDiagram-OKZ733FA-CFwVDdlY.js} +1 -1
  103. package/dist/assets/{stateDiagram-OKZ733FA-qdMAailp.js → stateDiagram-OKZ733FA-CKVGJcM2.js} +1 -1
  104. package/dist/assets/{stateDiagram-v2-UEYNNEHI-BbmmtA9w.js → stateDiagram-v2-UEYNNEHI-Dnbk8ftm.js} +1 -1
  105. package/dist/assets/{stateDiagram-v2-UEYNNEHI-Diz_hFvh.js → stateDiagram-v2-UEYNNEHI-rlA-woxH.js} +1 -1
  106. package/dist/assets/{swimlanes-SLNWSIFB-CZgIPz6I.js → swimlanes-SLNWSIFB-DCwz8-mf.js} +2 -2
  107. package/dist/assets/{swimlanes-SLNWSIFB-B16H-6OU.js → swimlanes-SLNWSIFB-M9Oumwnl.js} +2 -2
  108. package/dist/assets/swimlanesDiagram-ULZ7WXOC-CTtTyW6-.js +8 -0
  109. package/dist/assets/swimlanesDiagram-ULZ7WXOC-Caohx6WZ.js +8 -0
  110. package/dist/assets/{timeline-definition-Z64GVDOM-7r7OVlrT.js → timeline-definition-Z64GVDOM-BVmfjoWH.js} +1 -1
  111. package/dist/assets/{timeline-definition-Z64GVDOM-nhnkS_wy.js → timeline-definition-Z64GVDOM-DyXvto1l.js} +1 -1
  112. package/dist/assets/{vennDiagram-T6HMQDX7-B1piFYrz.js → vennDiagram-T6HMQDX7-CNe6zorb.js} +1 -1
  113. package/dist/assets/{vennDiagram-T6HMQDX7-x8SJTFhK.js → vennDiagram-T6HMQDX7-DyzOWKx3.js} +1 -1
  114. package/dist/assets/{wardleyDiagram-T6FBY63Y-BdD4GExj.js → wardleyDiagram-T6FBY63Y-D5YvMVwa.js} +1 -1
  115. package/dist/assets/{wardleyDiagram-T6FBY63Y-C90xqNVS.js → wardleyDiagram-T6FBY63Y-DXo8BCrA.js} +1 -1
  116. package/dist/assets/{xychartDiagram-ELKLHX3M--Ndoz0Cq.js → xychartDiagram-ELKLHX3M-CIBffVxC.js} +1 -1
  117. package/dist/assets/{xychartDiagram-ELKLHX3M-BAKns-7o.js → xychartDiagram-ELKLHX3M-XlsWelDb.js} +1 -1
  118. package/dist/build-info.json +2 -2
  119. package/dist/convert-icons.md +10 -46
  120. package/dist/favicon.png +0 -0
  121. package/dist/favicon.svg +1 -9
  122. package/dist/generate-icons.js +67 -47
  123. package/dist/icons/icon-128x128.png +0 -0
  124. package/dist/icons/icon-144x144.png +0 -0
  125. package/dist/icons/icon-152x152.png +0 -0
  126. package/dist/icons/icon-192x192.png +0 -0
  127. package/dist/icons/icon-384x384.png +0 -0
  128. package/dist/icons/icon-512x512.png +0 -0
  129. package/dist/icons/icon-72x72.png +0 -0
  130. package/dist/icons/icon-96x96.png +0 -0
  131. package/dist/index.html +2 -2
  132. package/dist/logo-128.png +0 -0
  133. package/dist/logo-256.png +0 -0
  134. package/dist/logo-32.png +0 -0
  135. package/dist/logo-512.png +0 -0
  136. package/dist/logo-64.png +0 -0
  137. package/dist/logo-source.png +0 -0
  138. package/dist/logo.svg +1 -17
  139. package/dist/sw.js +7 -9
  140. package/dist-server/build-info.json +2 -2
  141. package/dist-server/server/load-env.js +12 -4
  142. package/dist-server/server/load-env.js.map +1 -1
  143. package/dist-server/server/modules/browser-use/browser-use.service.js +33 -11
  144. package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
  145. package/dist-server/server/modules/browser-use/index.js +4 -4
  146. package/dist-server/server/modules/browser-use/index.js.map +1 -1
  147. package/dist-server/server/modules/browser-use/mcp-server-names.js +6 -4
  148. package/dist-server/server/modules/browser-use/mcp-server-names.js.map +1 -1
  149. package/dist-server/server/modules/browser-use/tests/browser-use.service.test.js +49 -1
  150. package/dist-server/server/modules/browser-use/tests/browser-use.service.test.js.map +1 -1
  151. package/dist-server/server/modules/cli/asset-migration-files.js +74 -0
  152. package/dist-server/server/modules/cli/asset-migration-files.js.map +1 -0
  153. package/dist-server/server/modules/cli/asset-migration-report.js +80 -0
  154. package/dist-server/server/modules/cli/asset-migration-report.js.map +1 -0
  155. package/dist-server/server/modules/cli/asset-migration-store.js +153 -0
  156. package/dist-server/server/modules/cli/asset-migration-store.js.map +1 -0
  157. package/dist-server/server/modules/cli/asset-migration.service.js +161 -0
  158. package/dist-server/server/modules/cli/asset-migration.service.js.map +1 -0
  159. package/dist-server/server/modules/cli/browser-use-mcp.js +9 -4
  160. package/dist-server/server/modules/cli/browser-use-mcp.js.map +1 -1
  161. package/dist-server/server/modules/cli/cli.module.js +21 -1
  162. package/dist-server/server/modules/cli/cli.module.js.map +1 -1
  163. package/dist-server/server/modules/cli/cli.service.js +6 -1
  164. package/dist-server/server/modules/cli/cli.service.js.map +1 -1
  165. package/dist-server/server/modules/cli/tests/asset-migration.service.test.js +275 -0
  166. package/dist-server/server/modules/cli/tests/asset-migration.service.test.js.map +1 -0
  167. package/dist-server/server/modules/cli/tests/browser-use-mcp-entry.test.js +157 -0
  168. package/dist-server/server/modules/cli/tests/browser-use-mcp-entry.test.js.map +1 -1
  169. package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js +1 -0
  170. package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js.map +1 -1
  171. package/dist-server/server/modules/cli/tests/cli.service.test.js +6 -1
  172. package/dist-server/server/modules/cli/tests/cli.service.test.js.map +1 -1
  173. package/dist-server/server/modules/cockpit/cockpit-brief-prompt.js +1 -1
  174. package/dist-server/server/modules/cockpit/cockpit-card-actions.js +19 -3
  175. package/dist-server/server/modules/cockpit/cockpit-card-actions.js.map +1 -1
  176. package/dist-server/server/modules/cockpit/cockpit-card-feedback-store.js +94 -9
  177. package/dist-server/server/modules/cockpit/cockpit-card-feedback-store.js.map +1 -1
  178. package/dist-server/server/modules/cockpit/cockpit-card-registry.js +1 -1
  179. package/dist-server/server/modules/cockpit/cockpit-fleet-card-projection.js +3 -0
  180. package/dist-server/server/modules/cockpit/cockpit-fleet-card-projection.js.map +1 -1
  181. package/dist-server/server/modules/cockpit/cockpit-knowledge-reading.js +16 -0
  182. package/dist-server/server/modules/cockpit/cockpit-knowledge-reading.js.map +1 -1
  183. package/dist-server/server/modules/cockpit/cockpit.module.js +1 -1
  184. package/dist-server/server/modules/cockpit/tests/cockpit-card-feedback.test.js +96 -1
  185. package/dist-server/server/modules/cockpit/tests/cockpit-card-feedback.test.js.map +1 -1
  186. package/dist-server/server/modules/cockpit/tests/cockpit-fleet-card-provider.test.js +2 -2
  187. package/dist-server/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.js +169 -3
  188. package/dist-server/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.js.map +1 -1
  189. package/dist-server/server/modules/context-events/context-event-writer.js +5 -5
  190. package/dist-server/server/modules/context-events/context-events.module.js +2 -2
  191. package/dist-server/server/modules/context-events/session-ask-stream-reader.js +1 -1
  192. package/dist-server/server/modules/context-events/session-blocked-events.js +3 -3
  193. package/dist-server/server/modules/context-events/tests/session-ask-event-writer.test.js +1 -1
  194. package/dist-server/server/modules/context-events/tests/session-blocked-events.test.js +3 -3
  195. package/dist-server/server/modules/context-events/tests/session-run-events.test.js +1 -1
  196. package/dist-server/server/modules/database/migrations.js +23 -1
  197. package/dist-server/server/modules/database/migrations.js.map +1 -1
  198. package/dist-server/server/modules/database/repositories/sessions.db.js +25 -4
  199. package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
  200. package/dist-server/server/modules/database/repositories/voice-user-identifiers.db.js +1 -1
  201. package/dist-server/server/modules/database/schema.js +16 -2
  202. package/dist-server/server/modules/database/schema.js.map +1 -1
  203. package/dist-server/server/modules/database/tests/migrations-ensure-columns.test.js +2 -0
  204. package/dist-server/server/modules/database/tests/migrations-ensure-columns.test.js.map +1 -1
  205. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +2 -2
  206. package/dist-server/server/modules/debug-agent/tests/debug-agent-permission-popup.test.js +2 -2
  207. package/dist-server/server/modules/liaison/liaison-deliver.service.js +3 -3
  208. package/dist-server/server/modules/liaison/liaison.module.js +1 -1
  209. package/dist-server/server/modules/mcp-gateway/mcp-gateway.auth.js +3 -2
  210. package/dist-server/server/modules/mcp-gateway/mcp-gateway.auth.js.map +1 -1
  211. package/dist-server/server/modules/mcp-gateway/mcp-self-target.js +2 -2
  212. package/dist-server/server/modules/mcp-gateway/mcp-session-send.js +7 -0
  213. package/dist-server/server/modules/mcp-gateway/mcp-session-send.js.map +1 -1
  214. package/dist-server/server/modules/mcp-gateway/mcp-tool-annotations.js +4 -4
  215. package/dist-server/server/modules/mcp-gateway/oauth-metadata.gate.js +4 -2
  216. package/dist-server/server/modules/mcp-gateway/oauth-metadata.gate.js.map +1 -1
  217. package/dist-server/server/modules/mcp-gateway/tests/knowledge-effective-config-proof.test.js +1 -1
  218. package/dist-server/server/modules/mcp-gateway/tests/knowledge-peer-correlation-proof.test.js +2 -2
  219. package/dist-server/server/modules/mcp-gateway/tests/mcp-approvals.test.js +3 -2
  220. package/dist-server/server/modules/mcp-gateway/tests/mcp-approvals.test.js.map +1 -1
  221. package/dist-server/server/modules/mcp-gateway/tests/mcp-audit-route.test.js +1 -1
  222. package/dist-server/server/modules/mcp-gateway/tests/mcp-audit.test.js +4 -4
  223. package/dist-server/server/modules/mcp-gateway/tests/mcp-auth.test.js +3 -1
  224. package/dist-server/server/modules/mcp-gateway/tests/mcp-auth.test.js.map +1 -1
  225. package/dist-server/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.js +3 -2
  226. package/dist-server/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.js.map +1 -1
  227. package/dist-server/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.js +7 -3
  228. package/dist-server/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.js.map +1 -1
  229. package/dist-server/server/modules/mcp-gateway/tests/mcp-correlation-id.test.js +8 -8
  230. package/dist-server/server/modules/mcp-gateway/tests/mcp-draft.test.js +3 -2
  231. package/dist-server/server/modules/mcp-gateway/tests/mcp-draft.test.js.map +1 -1
  232. package/dist-server/server/modules/mcp-gateway/tests/mcp-english-only.test.js +1 -1
  233. package/dist-server/server/modules/mcp-gateway/tests/mcp-gateway-wiring.test.js +2 -2
  234. package/dist-server/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.js +1 -1
  235. package/dist-server/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.js.map +1 -1
  236. package/dist-server/server/modules/mcp-gateway/tests/mcp-knowledge-facts.test.js +1 -1
  237. package/dist-server/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.js +1 -1
  238. package/dist-server/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.js.map +1 -1
  239. package/dist-server/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.js +3 -2
  240. package/dist-server/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.js.map +1 -1
  241. package/dist-server/server/modules/mcp-gateway/tests/mcp-overview.test.js +2 -2
  242. package/dist-server/server/modules/mcp-gateway/tests/mcp-pending-interaction.test.js +2 -2
  243. package/dist-server/server/modules/mcp-gateway/tests/mcp-read-tools.test.js +3 -3
  244. package/dist-server/server/modules/mcp-gateway/tests/mcp-read-tools.test.js.map +1 -1
  245. package/dist-server/server/modules/mcp-gateway/tests/mcp-run-get.test.js +1 -1
  246. package/dist-server/server/modules/mcp-gateway/tests/mcp-self-target.test.js +1 -1
  247. package/dist-server/server/modules/mcp-gateway/tests/mcp-self-target.test.js.map +1 -1
  248. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-background.test.js +2 -2
  249. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-background.test.js.map +1 -1
  250. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-host-control.test.js +1 -1
  251. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-host-control.test.js.map +1 -1
  252. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.js +1 -1
  253. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.js.map +1 -1
  254. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.js +2 -2
  255. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.js.map +1 -1
  256. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-search-pruning.test.js +1 -1
  257. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-search.test.js +1 -1
  258. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-send.test.js +2 -2
  259. package/dist-server/server/modules/mcp-gateway/tests/mcp-session-send.test.js.map +1 -1
  260. package/dist-server/server/modules/mcp-gateway/tests/mcp-ui-last-opened.test.js +1 -1
  261. package/dist-server/server/modules/mcp-gateway/tests/mcp-usage-stats.test.js +1 -1
  262. package/dist-server/server/modules/mcp-gateway/tests/mcp-usage-stats.test.js.map +1 -1
  263. package/dist-server/server/modules/mcp-gateway/tests/mcp-write-notification.test.js +2 -2
  264. package/dist-server/server/modules/mcp-gateway/tests/mcp-write-notification.test.js.map +1 -1
  265. package/dist-server/server/modules/mcp-gateway/tests/oauth-flow.e2e.test.js +3 -3
  266. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
  267. package/dist-server/server/modules/oauth/access-tokens.service.js +8 -8
  268. package/dist-server/server/modules/oauth/oauth-consent.service.js +20 -15
  269. package/dist-server/server/modules/oauth/oauth-consent.service.js.map +1 -1
  270. package/dist-server/server/modules/oauth/tests/access-token-scopes.test.js +54 -34
  271. package/dist-server/server/modules/oauth/tests/access-token-scopes.test.js.map +1 -1
  272. package/dist-server/server/modules/oauth/tests/access-tokens.service.test.js +35 -14
  273. package/dist-server/server/modules/oauth/tests/access-tokens.service.test.js.map +1 -1
  274. package/dist-server/server/modules/oauth/tests/oauth-consent-page.test.js +27 -22
  275. package/dist-server/server/modules/oauth/tests/oauth-consent-page.test.js.map +1 -1
  276. package/dist-server/server/modules/oauth/tests/oauth-consent-ratelimit.test.js +2 -2
  277. package/dist-server/server/modules/oauth/tests/token-info.routes.test.js +2 -2
  278. package/dist-server/server/modules/oauth/tests/token-info.routes.test.js.map +1 -1
  279. package/dist-server/server/modules/observation/blind-spots.js +1 -1
  280. package/dist-server/server/modules/observation/observation-store.js +50 -17
  281. package/dist-server/server/modules/observation/observation-store.js.map +1 -1
  282. package/dist-server/server/modules/observation/observation-uri.js +31 -19
  283. package/dist-server/server/modules/observation/observation-uri.js.map +1 -1
  284. package/dist-server/server/modules/observation/observation.routes.js +1 -1
  285. package/dist-server/server/modules/observation/project-truth.js +1 -1
  286. package/dist-server/server/modules/observation/session-ask-decision-answer.js +2 -1
  287. package/dist-server/server/modules/observation/session-ask-decision-answer.js.map +1 -1
  288. package/dist-server/server/modules/observation/session-digest-llm.js +7 -1
  289. package/dist-server/server/modules/observation/session-digest-llm.js.map +1 -1
  290. package/dist-server/server/modules/observation/session-digest.js +39 -5
  291. package/dist-server/server/modules/observation/session-digest.js.map +1 -1
  292. package/dist-server/server/modules/observation/tests/architecture-delta.test.js +1 -1
  293. package/dist-server/server/modules/observation/tests/observation-routes.test.js +9 -0
  294. package/dist-server/server/modules/observation/tests/observation-routes.test.js.map +1 -1
  295. package/dist-server/server/modules/observation/tests/observation-store.test.js +38 -0
  296. package/dist-server/server/modules/observation/tests/observation-store.test.js.map +1 -1
  297. package/dist-server/server/modules/observation/tests/project-truth.test.js +2 -2
  298. package/dist-server/server/modules/observation/tests/session-ask-decision-digest.test.js +150 -0
  299. package/dist-server/server/modules/observation/tests/session-ask-decision-digest.test.js.map +1 -1
  300. package/dist-server/server/modules/observation/tests/session-digest.test.js +24 -1
  301. package/dist-server/server/modules/observation/tests/session-digest.test.js.map +1 -1
  302. package/dist-server/server/modules/providers/index.js +9 -0
  303. package/dist-server/server/modules/providers/index.js.map +1 -1
  304. package/dist-server/server/modules/providers/list/claude/claude-host-driver.provider.js +1 -1
  305. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +22 -3
  306. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -1
  307. package/dist-server/server/modules/providers/list/codex/codex-app-server.connection.js +1 -1
  308. package/dist-server/server/modules/providers/list/codex/codex-host-driver.contract.js +11 -9
  309. package/dist-server/server/modules/providers/list/codex/codex-host-driver.contract.js.map +1 -1
  310. package/dist-server/server/modules/providers/list/codex/codex-host-driver.provider.js +15 -1
  311. package/dist-server/server/modules/providers/list/codex/codex-host-driver.provider.js.map +1 -1
  312. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +14 -3
  313. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
  314. package/dist-server/server/modules/providers/list/codex/codex-provider-injection.js +248 -0
  315. package/dist-server/server/modules/providers/list/codex/codex-provider-injection.js.map +1 -0
  316. package/dist-server/server/modules/providers/list/codex/codex-resident-provider-launch.js +37 -0
  317. package/dist-server/server/modules/providers/list/codex/codex-resident-provider-launch.js.map +1 -0
  318. package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js +19 -1
  319. package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -1
  320. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +1 -1
  321. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +1 -1
  322. package/dist-server/server/modules/providers/provider.routes.js +23 -2
  323. package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
  324. package/dist-server/server/modules/providers/services/provider-models.service.js +136 -106
  325. package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
  326. package/dist-server/server/modules/providers/services/provider-runtime.service.js +3 -0
  327. package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
  328. package/dist-server/server/modules/providers/services/session-model-resolver.js +106 -0
  329. package/dist-server/server/modules/providers/services/session-model-resolver.js.map +1 -0
  330. package/dist-server/server/modules/providers/services/session-provider-binding.js +89 -0
  331. package/dist-server/server/modules/providers/services/session-provider-binding.js.map +1 -0
  332. package/dist-server/server/modules/providers/services/sessions.service.js +5 -1
  333. package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
  334. package/dist-server/server/modules/providers/tests/claude-resident-addressable.test.js +2 -2
  335. package/dist-server/server/modules/providers/tests/claude-session-name-authority.test.js +4 -4
  336. package/dist-server/server/modules/providers/tests/codex-app-server-protocol.test.js +1 -1
  337. package/dist-server/server/modules/providers/tests/codex-host-driver-persistent.test.js +2 -2
  338. package/dist-server/server/modules/providers/tests/codex-provider-model-binding.test.js +270 -0
  339. package/dist-server/server/modules/providers/tests/codex-provider-model-binding.test.js.map +1 -0
  340. package/dist-server/server/modules/providers/tests/codex-resident-provider-injection.test.js +484 -0
  341. package/dist-server/server/modules/providers/tests/codex-resident-provider-injection.test.js.map +1 -0
  342. package/dist-server/server/modules/providers/tests/codex-runtime-provider-injection.test.js +228 -0
  343. package/dist-server/server/modules/providers/tests/codex-runtime-provider-injection.test.js.map +1 -0
  344. package/dist-server/server/modules/providers/tests/codex-session-provider-binding.test.js +306 -0
  345. package/dist-server/server/modules/providers/tests/codex-session-provider-binding.test.js.map +1 -0
  346. package/dist-server/server/modules/providers/tests/codex-sessions.test.js +1 -1
  347. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +2 -2
  348. package/dist-server/server/modules/providers/tests/provider-models.service.test.js +15 -0
  349. package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
  350. package/dist-server/server/modules/providers/tests/provider.routes.test.js +1 -1
  351. package/dist-server/server/modules/quay/index.js +1 -1
  352. package/dist-server/server/modules/quay/quay-fleet-cli.js +1 -1
  353. package/dist-server/server/modules/quay/quay-fleet-locator.js +2 -2
  354. package/dist-server/server/modules/quay/quay-fleet-project-id.js +7 -7
  355. package/dist-server/server/modules/quay/quay-fleet-registry.js +3 -3
  356. package/dist-server/server/modules/quay/quay-suite-fanin-reader.js +1 -1
  357. package/dist-server/server/modules/quay/quay-uri-resolve.js +6 -6
  358. package/dist-server/server/modules/quay/quay.module.js +3 -3
  359. package/dist-server/server/modules/quay/quay.routes.js +1 -1
  360. package/dist-server/server/modules/quay/quay.service.js +4 -4
  361. package/dist-server/server/modules/quay/tests/contracts/fleet-cli-contracts.test.js +3 -3
  362. package/dist-server/server/modules/quay/tests/contracts/shapes.js +9 -9
  363. package/dist-server/server/modules/quay/tests/quay-fleet-locator.test.js +1 -1
  364. package/dist-server/server/modules/quay/tests/quay-fleet-project-id.test.js +4 -4
  365. package/dist-server/server/modules/quay/tests/quay-uri-resolve.test.js +10 -10
  366. package/dist-server/server/modules/session-hosts/tests/resident-server-restart.test.js +1 -1
  367. package/dist-server/server/modules/settings/codex-mcp-gateway.settings.js +1 -1
  368. package/dist-server/server/modules/settings/codex-model-providers.schema.js +349 -0
  369. package/dist-server/server/modules/settings/codex-model-providers.schema.js.map +1 -0
  370. package/dist-server/server/modules/settings/codex-model-providers.service.js +199 -0
  371. package/dist-server/server/modules/settings/codex-model-providers.service.js.map +1 -0
  372. package/dist-server/server/modules/settings/codex-model-providers.settings.js +547 -0
  373. package/dist-server/server/modules/settings/codex-model-providers.settings.js.map +1 -0
  374. package/dist-server/server/modules/settings/codex-model-providers.store.js +200 -0
  375. package/dist-server/server/modules/settings/codex-model-providers.store.js.map +1 -0
  376. package/dist-server/server/modules/settings/index.js +10 -0
  377. package/dist-server/server/modules/settings/index.js.map +1 -1
  378. package/dist-server/server/modules/settings/server-settings-file.js +28 -32
  379. package/dist-server/server/modules/settings/server-settings-file.js.map +1 -1
  380. package/dist-server/server/modules/settings/server-settings.js +2 -2
  381. package/dist-server/server/modules/settings/server-settings.js.map +1 -1
  382. package/dist-server/server/modules/settings/settings.module.js +35 -0
  383. package/dist-server/server/modules/settings/settings.module.js.map +1 -1
  384. package/dist-server/server/modules/settings/settings.routes.js +42 -0
  385. package/dist-server/server/modules/settings/settings.routes.js.map +1 -1
  386. package/dist-server/server/modules/settings/settings.service.js +8 -21
  387. package/dist-server/server/modules/settings/settings.service.js.map +1 -1
  388. package/dist-server/server/modules/settings/tests/cockpit-session-start-settings.routes.test.js +1 -0
  389. package/dist-server/server/modules/settings/tests/cockpit-session-start-settings.routes.test.js.map +1 -1
  390. package/dist-server/server/modules/settings/tests/codex-model-providers-settings.test.js +336 -0
  391. package/dist-server/server/modules/settings/tests/codex-model-providers-settings.test.js.map +1 -0
  392. package/dist-server/server/modules/settings/tests/codex-provider-advanced.test.js +466 -0
  393. package/dist-server/server/modules/settings/tests/codex-provider-advanced.test.js.map +1 -0
  394. package/dist-server/server/modules/settings/tests/codex-provider-import.test.js +475 -0
  395. package/dist-server/server/modules/settings/tests/codex-provider-import.test.js.map +1 -0
  396. package/dist-server/server/modules/voice/tests/voice-lexicon.test.js +9 -9
  397. package/dist-server/server/modules/voice/tests/voice-lexicon.test.js.map +1 -1
  398. package/dist-server/server/modules/voice/voice-lexicon.js +1 -1
  399. package/dist-server/server/modules/websocket/services/chat-control.service.js +21 -1
  400. package/dist-server/server/modules/websocket/services/chat-control.service.js.map +1 -1
  401. package/dist-server/server/modules/websocket/services/chat-websocket.service.js +25 -1
  402. package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
  403. package/dist-server/server/modules/websocket/tests/chat-background-task.test.js +18 -1
  404. package/dist-server/server/modules/websocket/tests/chat-background-task.test.js.map +1 -1
  405. package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js +18 -1
  406. package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js.map +1 -1
  407. package/dist-server/server/modules/worktrees/services/worktree-list.service.js +1 -1
  408. package/dist-server/server/modules/worktrees/services/worktree-open.service.js +1 -1
  409. package/dist-server/server/modules/worktrees/services/worktree-remove.service.js +1 -1
  410. package/dist-server/server/shared/brand.js +18 -20
  411. package/dist-server/server/shared/brand.js.map +1 -1
  412. package/dist-server/server/shared/data-root-migration.js +3 -2
  413. package/dist-server/server/shared/data-root-migration.js.map +1 -1
  414. package/dist-server/server/shared/data-root.js +54 -59
  415. package/dist-server/server/shared/data-root.js.map +1 -1
  416. package/dist-server/server/shared/mcp-contract/types.js +20 -15
  417. package/dist-server/server/shared/mcp-contract/types.js.map +1 -1
  418. package/dist-server/server/shared/ports/codex-provider-registry.port.js +66 -0
  419. package/dist-server/server/shared/ports/codex-provider-registry.port.js.map +1 -0
  420. package/dist-server/server/shared/settings-file.js +120 -6
  421. package/dist-server/server/shared/settings-file.js.map +1 -1
  422. package/dist-server/server/shared/tests/cloudpit-brand-env.test.js +76 -34
  423. package/dist-server/server/shared/tests/cloudpit-brand-env.test.js.map +1 -1
  424. package/dist-server/server/shared/tests/cloudpit-data-root.test.js +35 -18
  425. package/dist-server/server/shared/tests/cloudpit-data-root.test.js.map +1 -1
  426. package/dist-server/server/shared/tests/cloudpit-goal-exit-gate.test.js +153 -17
  427. package/dist-server/server/shared/tests/cloudpit-goal-exit-gate.test.js.map +1 -1
  428. package/dist-server/server/shared/tests/cloudpit-runtime-flip.test.js +116 -114
  429. package/dist-server/server/shared/tests/cloudpit-runtime-flip.test.js.map +1 -1
  430. package/dist-server/server/shared/tests/frontend-import-cycle-budget.test.js +9 -1
  431. package/dist-server/server/shared/tests/frontend-import-cycle-budget.test.js.map +1 -1
  432. package/dist-server/server/shared/tests/quay-test-script.test.js +40 -6
  433. package/dist-server/server/shared/tests/quay-test-script.test.js.map +1 -1
  434. package/dist-server/server/shared/tests/settings-file.test.js +58 -2
  435. package/dist-server/server/shared/tests/settings-file.test.js.map +1 -1
  436. package/dist-server/server/shared/types.js.map +1 -1
  437. package/dist-server/server/shared/utils.js +1 -1
  438. package/electron/appIdMigration.js +467 -0
  439. package/electron/assets/logo-macos.icns +0 -0
  440. package/electron/assets/logo-macos.png +0 -0
  441. package/electron/assets/logo-windows.ico +0 -0
  442. package/electron/brandEnv.js +64 -0
  443. package/electron/cloud.js +3 -3
  444. package/electron/desktopNotifications.js +1 -1
  445. package/electron/launcher/index.html +1 -1
  446. package/electron/localServer.js +41 -7
  447. package/electron/main.js +33 -15
  448. package/electron/scripts/generate-macos-icon.js +34 -28
  449. package/electron/scripts/generate-windows-icon.js +66 -0
  450. package/electron/serverInstaller.js +20 -11
  451. package/electron/tests/cloudpit-appid-migration.test.mjs +514 -0
  452. package/electron/tests/cloudpit-brand-env-wiring.test.mjs +324 -0
  453. package/electron/tests/cloudpit-desktop-identity.test.mjs +42 -19
  454. package/electron/tests/cloudpit-runtime-identity-surfaces.test.mjs +10 -4
  455. package/electron/tests/cloudpit-userdata-migration.test.mjs +18 -5
  456. package/electron/userDataMigration.js +3 -0
  457. package/package.json +7 -6
  458. package/public/api-docs.html +3 -3
  459. package/scripts/brand-allowlist-check.mjs +233 -12
  460. package/scripts/brand-allowlist-check.test.mjs +270 -1
  461. package/scripts/cloudpit-distribution-check.mjs +57 -23
  462. package/scripts/cloudpit-distribution-check.test.mjs +42 -9
  463. package/scripts/codex-protocol-smoke.mjs +1 -1
  464. package/scripts/isolated-instance.sh +1 -1
  465. package/scripts/mcp-smoke.mjs +2 -2
  466. package/scripts/release/tests/fork-release-workflows.test.mjs +45 -0
  467. package/scripts/release/tests/server-installer-bundle-url.test.mjs +57 -9
  468. package/scripts/restart-when-idle.sh +1 -1
  469. package/scripts/shadow-prediction-report.mjs +1 -1
  470. package/scripts/suite-duration-baseline.tsv +45 -0
  471. package/scripts/ui-scenario.mjs +195 -0
  472. package/scripts/ui-scenarios/codex-provider-import.json +63 -0
  473. package/scripts/ui-scenarios/codex-provider-settings.json +77 -0
  474. package/scripts/voice-capture-process-check.false-forms.test.mjs +1 -1
  475. package/scripts/voice-phase0-report.test.mjs +1 -1
  476. package/server/load-env.ts +15 -4
  477. package/server/modules/browser-use/browser-use.service.ts +45 -14
  478. package/server/modules/browser-use/index.ts +3 -4
  479. package/server/modules/browser-use/mcp-server-names.ts +6 -5
  480. package/server/modules/browser-use/tests/browser-use.service.test.ts +63 -1
  481. package/server/modules/cli/asset-migration-files.ts +96 -0
  482. package/server/modules/cli/asset-migration-report.ts +123 -0
  483. package/server/modules/cli/asset-migration-store.ts +228 -0
  484. package/server/modules/cli/asset-migration.service.ts +236 -0
  485. package/server/modules/cli/browser-use-mcp.ts +9 -4
  486. package/server/modules/cli/cli.module.ts +21 -1
  487. package/server/modules/cli/cli.service.ts +14 -1
  488. package/server/modules/cli/tests/asset-migration.service.test.ts +349 -0
  489. package/server/modules/cli/tests/browser-use-mcp-entry.test.ts +202 -0
  490. package/server/modules/cli/tests/cli-environment-bootstrap.test.ts +1 -0
  491. package/server/modules/cli/tests/cli.service.test.ts +6 -1
  492. package/server/modules/cockpit/cockpit-brief-prompt.ts +1 -1
  493. package/server/modules/cockpit/cockpit-card-actions.ts +20 -3
  494. package/server/modules/cockpit/cockpit-card-feedback-store.ts +104 -9
  495. package/server/modules/cockpit/cockpit-card-registry.ts +2 -2
  496. package/server/modules/cockpit/cockpit-fleet-card-projection.ts +3 -0
  497. package/server/modules/cockpit/cockpit-fleet-executor.ts +1 -1
  498. package/server/modules/cockpit/cockpit-knowledge-reading.ts +17 -0
  499. package/server/modules/cockpit/cockpit.module.ts +2 -2
  500. package/server/modules/cockpit/cockpit.reducer.ts +1 -1
  501. package/server/modules/cockpit/tests/cockpit-card-feedback.test.ts +116 -1
  502. package/server/modules/cockpit/tests/cockpit-fleet-card-provider.test.ts +2 -2
  503. package/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.ts +205 -3
  504. package/server/modules/context-events/context-event-writer.ts +6 -6
  505. package/server/modules/context-events/context-events.module.ts +2 -2
  506. package/server/modules/context-events/session-ask-stream-reader.ts +1 -1
  507. package/server/modules/context-events/session-blocked-events.ts +3 -3
  508. package/server/modules/context-events/tests/session-ask-event-writer.test.ts +1 -1
  509. package/server/modules/context-events/tests/session-blocked-events.test.ts +3 -3
  510. package/server/modules/context-events/tests/session-run-events.test.ts +1 -1
  511. package/server/modules/database/migrations.ts +24 -1
  512. package/server/modules/database/repositories/sessions.db.ts +41 -4
  513. package/server/modules/database/repositories/voice-user-identifiers.db.ts +1 -1
  514. package/server/modules/database/schema.ts +16 -2
  515. package/server/modules/database/tests/migrations-ensure-columns.test.ts +2 -0
  516. package/server/modules/database/tests/sessions-provider-mapping.test.ts +2 -2
  517. package/server/modules/debug-agent/tests/debug-agent-permission-popup.test.ts +2 -2
  518. package/server/modules/liaison/liaison-deliver.service.ts +4 -4
  519. package/server/modules/liaison/liaison.module.ts +1 -1
  520. package/server/modules/mcp-gateway/mcp-gateway.auth.ts +3 -2
  521. package/server/modules/mcp-gateway/mcp-self-target.ts +2 -2
  522. package/server/modules/mcp-gateway/mcp-session-send.ts +21 -2
  523. package/server/modules/mcp-gateway/mcp-tool-annotations.ts +4 -4
  524. package/server/modules/mcp-gateway/oauth-metadata.gate.ts +4 -5
  525. package/server/modules/mcp-gateway/tests/knowledge-effective-config-proof.test.ts +1 -1
  526. package/server/modules/mcp-gateway/tests/knowledge-peer-correlation-proof.test.ts +2 -2
  527. package/server/modules/mcp-gateway/tests/mcp-approvals.test.ts +3 -2
  528. package/server/modules/mcp-gateway/tests/mcp-audit-route.test.ts +1 -1
  529. package/server/modules/mcp-gateway/tests/mcp-audit.test.ts +4 -4
  530. package/server/modules/mcp-gateway/tests/mcp-auth.test.ts +3 -1
  531. package/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.ts +3 -2
  532. package/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.ts +7 -3
  533. package/server/modules/mcp-gateway/tests/mcp-correlation-id.test.ts +8 -8
  534. package/server/modules/mcp-gateway/tests/mcp-draft.test.ts +3 -2
  535. package/server/modules/mcp-gateway/tests/mcp-english-only.test.ts +1 -1
  536. package/server/modules/mcp-gateway/tests/mcp-gateway-wiring.test.ts +2 -2
  537. package/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.ts +1 -1
  538. package/server/modules/mcp-gateway/tests/mcp-knowledge-facts.test.ts +1 -1
  539. package/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.ts +1 -1
  540. package/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.ts +3 -2
  541. package/server/modules/mcp-gateway/tests/mcp-overview.test.ts +2 -2
  542. package/server/modules/mcp-gateway/tests/mcp-pending-interaction.test.ts +2 -2
  543. package/server/modules/mcp-gateway/tests/mcp-read-tools.test.ts +3 -3
  544. package/server/modules/mcp-gateway/tests/mcp-run-get.test.ts +1 -1
  545. package/server/modules/mcp-gateway/tests/mcp-self-target.test.ts +1 -1
  546. package/server/modules/mcp-gateway/tests/mcp-session-background.test.ts +2 -2
  547. package/server/modules/mcp-gateway/tests/mcp-session-host-control.test.ts +1 -1
  548. package/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.ts +1 -1
  549. package/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.ts +2 -2
  550. package/server/modules/mcp-gateway/tests/mcp-session-search-pruning.test.ts +1 -1
  551. package/server/modules/mcp-gateway/tests/mcp-session-search.test.ts +1 -1
  552. package/server/modules/mcp-gateway/tests/mcp-session-send.test.ts +2 -2
  553. package/server/modules/mcp-gateway/tests/mcp-ui-last-opened.test.ts +1 -1
  554. package/server/modules/mcp-gateway/tests/mcp-usage-stats.test.ts +1 -1
  555. package/server/modules/mcp-gateway/tests/mcp-write-notification.test.ts +2 -2
  556. package/server/modules/mcp-gateway/tests/oauth-flow.e2e.test.ts +3 -3
  557. package/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
  558. package/server/modules/oauth/access-tokens.service.ts +8 -8
  559. package/server/modules/oauth/oauth-consent.service.ts +20 -15
  560. package/server/modules/oauth/tests/access-token-scopes.test.ts +55 -34
  561. package/server/modules/oauth/tests/access-tokens.service.test.ts +50 -14
  562. package/server/modules/oauth/tests/oauth-consent-page.test.ts +29 -21
  563. package/server/modules/oauth/tests/oauth-consent-ratelimit.test.ts +2 -2
  564. package/server/modules/oauth/tests/token-info.routes.test.ts +2 -2
  565. package/server/modules/observation/architecture-delta.producer.ts +1 -1
  566. package/server/modules/observation/blind-spots.ts +1 -1
  567. package/server/modules/observation/observation-store.ts +54 -16
  568. package/server/modules/observation/observation-uri.ts +34 -21
  569. package/server/modules/observation/observation.routes.ts +1 -1
  570. package/server/modules/observation/project-truth.ts +3 -3
  571. package/server/modules/observation/session-ask-decision-answer.ts +2 -1
  572. package/server/modules/observation/session-digest-llm.ts +7 -1
  573. package/server/modules/observation/session-digest.ts +39 -5
  574. package/server/modules/observation/tests/architecture-delta.test.ts +1 -1
  575. package/server/modules/observation/tests/observation-routes.test.ts +13 -0
  576. package/server/modules/observation/tests/observation-store.test.ts +58 -0
  577. package/server/modules/observation/tests/project-truth.test.ts +2 -2
  578. package/server/modules/observation/tests/session-ask-decision-digest.test.ts +189 -0
  579. package/server/modules/observation/tests/session-digest.test.ts +43 -0
  580. package/server/modules/providers/index.ts +13 -0
  581. package/server/modules/providers/list/claude/claude-host-driver.provider.ts +1 -1
  582. package/server/modules/providers/list/codex/codex-app-server.client.ts +37 -5
  583. package/server/modules/providers/list/codex/codex-app-server.connection.ts +1 -1
  584. package/server/modules/providers/list/codex/codex-host-driver.contract.ts +18 -9
  585. package/server/modules/providers/list/codex/codex-host-driver.provider.ts +15 -1
  586. package/server/modules/providers/list/codex/codex-models.provider.ts +16 -3
  587. package/server/modules/providers/list/codex/codex-provider-injection.ts +323 -0
  588. package/server/modules/providers/list/codex/codex-resident-provider-launch.ts +71 -0
  589. package/server/modules/providers/list/codex/codex-runtime.provider.ts +20 -1
  590. package/server/modules/providers/list/cursor/cursor-models.provider.ts +1 -1
  591. package/server/modules/providers/list/opencode/opencode-models.provider.ts +1 -1
  592. package/server/modules/providers/provider.routes.ts +23 -2
  593. package/server/modules/providers/services/provider-models.service.ts +187 -124
  594. package/server/modules/providers/services/provider-runtime.service.ts +3 -0
  595. package/server/modules/providers/services/session-model-resolver.ts +180 -0
  596. package/server/modules/providers/services/session-provider-binding.ts +176 -0
  597. package/server/modules/providers/services/sessions.service.ts +5 -1
  598. package/server/modules/providers/tests/claude-resident-addressable.test.ts +2 -2
  599. package/server/modules/providers/tests/claude-session-name-authority.test.ts +4 -4
  600. package/server/modules/providers/tests/codex-app-server-protocol.test.ts +1 -1
  601. package/server/modules/providers/tests/codex-host-driver-persistent.test.ts +2 -2
  602. package/server/modules/providers/tests/codex-provider-model-binding.test.ts +345 -0
  603. package/server/modules/providers/tests/codex-resident-provider-injection.test.ts +561 -0
  604. package/server/modules/providers/tests/codex-runtime-provider-injection.test.ts +269 -0
  605. package/server/modules/providers/tests/codex-session-provider-binding.test.ts +386 -0
  606. package/server/modules/providers/tests/codex-sessions.test.ts +1 -1
  607. package/server/modules/providers/tests/opencode-sessions.test.ts +2 -2
  608. package/server/modules/providers/tests/provider-models.service.test.ts +15 -0
  609. package/server/modules/providers/tests/provider.routes.test.ts +1 -1
  610. package/server/modules/quay/index.ts +1 -1
  611. package/server/modules/quay/quay-dispatch-carrier.ts +1 -1
  612. package/server/modules/quay/quay-fleet-cli.ts +1 -1
  613. package/server/modules/quay/quay-fleet-locator.ts +2 -2
  614. package/server/modules/quay/quay-fleet-project-id.ts +14 -14
  615. package/server/modules/quay/quay-fleet-registry.ts +8 -8
  616. package/server/modules/quay/quay-suite-fanin-reader.ts +1 -1
  617. package/server/modules/quay/quay-uri-resolve.ts +8 -8
  618. package/server/modules/quay/quay.module.ts +3 -3
  619. package/server/modules/quay/quay.routes.ts +1 -1
  620. package/server/modules/quay/quay.service.ts +6 -6
  621. package/server/modules/quay/session-task-chain.service.ts +1 -1
  622. package/server/modules/quay/tests/contracts/fleet-cli-contracts.test.ts +3 -3
  623. package/server/modules/quay/tests/contracts/shapes.ts +10 -10
  624. package/server/modules/quay/tests/quay-fleet-locator.test.ts +1 -1
  625. package/server/modules/quay/tests/quay-fleet-project-id.test.ts +6 -6
  626. package/server/modules/quay/tests/quay-uri-resolve.test.ts +10 -10
  627. package/server/modules/session-hosts/tests/resident-server-restart.test.ts +1 -1
  628. package/server/modules/settings/codex-mcp-gateway.settings.ts +1 -1
  629. package/server/modules/settings/codex-model-providers.schema.ts +460 -0
  630. package/server/modules/settings/codex-model-providers.service.ts +235 -0
  631. package/server/modules/settings/codex-model-providers.settings.ts +713 -0
  632. package/server/modules/settings/codex-model-providers.store.ts +244 -0
  633. package/server/modules/settings/index.ts +18 -0
  634. package/server/modules/settings/server-settings-file.ts +29 -41
  635. package/server/modules/settings/server-settings.ts +2 -3
  636. package/server/modules/settings/settings.module.ts +41 -0
  637. package/server/modules/settings/settings.routes.ts +37 -0
  638. package/server/modules/settings/settings.service.ts +21 -26
  639. package/server/modules/settings/tests/cockpit-session-start-settings.routes.test.ts +1 -0
  640. package/server/modules/settings/tests/codex-model-providers-settings.test.ts +413 -0
  641. package/server/modules/settings/tests/codex-provider-advanced.test.ts +540 -0
  642. package/server/modules/settings/tests/codex-provider-import.test.ts +621 -0
  643. package/server/modules/voice/tests/voice-lexicon.test.ts +10 -10
  644. package/server/modules/voice/voice-lexicon.ts +1 -1
  645. package/server/modules/websocket/services/chat-control.service.ts +35 -2
  646. package/server/modules/websocket/services/chat-websocket.service.ts +25 -1
  647. package/server/modules/websocket/tests/chat-background-task.test.ts +17 -1
  648. package/server/modules/websocket/tests/chat-stop-task.test.ts +17 -1
  649. package/server/modules/worktrees/services/worktree-list.service.ts +1 -1
  650. package/server/modules/worktrees/services/worktree-open.service.ts +1 -1
  651. package/server/modules/worktrees/services/worktree-remove.service.ts +1 -1
  652. package/server/shared/brand.ts +24 -38
  653. package/server/shared/data-root-migration.ts +3 -2
  654. package/server/shared/data-root.ts +73 -79
  655. package/server/shared/interfaces.ts +1 -1
  656. package/server/shared/mcp-contract/types.ts +20 -15
  657. package/server/shared/ports/codex-provider-registry.port.ts +133 -0
  658. package/server/shared/ports/session-blocked-events.port.ts +1 -1
  659. package/server/shared/ports/session-run-events.port.ts +2 -2
  660. package/server/shared/settings-file.ts +167 -6
  661. package/server/shared/tests/architecture-ratchet.baseline.json +15 -15
  662. package/server/shared/tests/cloudpit-brand-env.test.ts +106 -36
  663. package/server/shared/tests/cloudpit-data-root.test.ts +42 -18
  664. package/server/shared/tests/cloudpit-goal-exit-gate.baseline.json +6 -2
  665. package/server/shared/tests/cloudpit-goal-exit-gate.test.ts +179 -17
  666. package/server/shared/tests/cloudpit-runtime-flip.test.ts +162 -123
  667. package/server/shared/tests/frontend-import-cycle-budget.baseline.json +8 -6
  668. package/server/shared/tests/frontend-import-cycle-budget.test.ts +9 -1
  669. package/server/shared/tests/quay-test-script.test.ts +40 -6
  670. package/server/shared/tests/settings-file.test.ts +83 -1
  671. package/server/shared/types.ts +121 -8
  672. package/server/shared/utils.ts +1 -1
  673. package/dist/assets/channel-D7XqNTJC.js +0 -1
  674. package/dist/assets/channel-sbQyI1an.js +0 -1
  675. package/dist/assets/classDiagram-JCYQIIEL-DHudi-zH.js +0 -1
  676. package/dist/assets/classDiagram-JCYQIIEL-DV7ybJJG.js +0 -1
  677. package/dist/assets/classDiagram-v2-OCEON4UE-DHudi-zH.js +0 -1
  678. package/dist/assets/classDiagram-v2-OCEON4UE-DV7ybJJG.js +0 -1
  679. package/dist/assets/index-BsACp0s2.css +0 -32
  680. package/dist/assets/swimlanesDiagram-ULZ7WXOC-CNMNp6YA.js +0 -8
  681. package/dist/assets/swimlanesDiagram-ULZ7WXOC-DOjtDEUW.js +0 -8
  682. package/dist/icons/icon-128x128.svg +0 -12
  683. package/dist/icons/icon-144x144.svg +0 -12
  684. package/dist/icons/icon-152x152.svg +0 -12
  685. package/dist/icons/icon-192x192.svg +0 -12
  686. package/dist/icons/icon-384x384.svg +0 -12
  687. package/dist/icons/icon-512x512.svg +0 -12
  688. package/dist/icons/icon-72x72.svg +0 -12
  689. package/dist/icons/icon-96x96.svg +0 -12
  690. 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, the movable local-server cache, the new-then-legacy
9
- * marker lookup, dual deep-link scheme registration, and the pinned invariants
10
- * (`appId`, the `cloudcli://auth/callback` URL, `app_surface=cloudcli_desktop`).
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\.cloudcli\.desktop';/,
79
- 'the Windows app user model id is unchanged',
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 maybeMigrateDesktopUserData before app.whenReady()', () => {
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 \{ maybeMigrateDesktopUserData \} from '\.\/userDataMigration\.js';/,
99
- 'the migration helper is imported',
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('maybeMigrateDesktopUserData({');
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 deep-link schemes are registered in the packaged app metadata', () => {
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 adds cloudpit');
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 adds cloudpit');
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 both schemes in the dev and packaged branches', () => {
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 = \['cloudcli', 'cloudpit'\];/);
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 and the cloudcli_desktop surface are unchanged', () => {
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.cloudcli.desktop');
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` app id and
27
- * the dual-read `cloudcli://` observation URIs) is asserted *present* in the
28
- * same run — a zero-hit scan must not be achieved by renaming it away.
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(mainSource, /const APP_USER_MODEL_ID = 'ai\.cloudcli\.desktop';/, 'the app id is unchanged');
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: electron/main.js imports and calls the helper and declares APP_NAME = Cloudpit', () => {
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 \{ maybeMigrateDesktopUserData \} from '\.\/userDataMigration\.js';/,
107
- 'the helper module is imported',
106
+ /import \{ maybeMigrateDesktopAppId \} from '\.\/appIdMigration\.js';/,
107
+ 'the v3.0 app-id migration entry point is imported',
108
108
  );
109
- assert.match(source, /maybeMigrateDesktopUserData\(\{/, 'the helper is called');
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": "2.0.0",
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.cloudcli.desktop",
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": "CloudCLI",
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": "CloudCLI",
118
- "CFBundleDisplayName": "CloudCLI",
118
+ "CFBundleName": "Cloudpit",
119
+ "CFBundleDisplayName": "Cloudpit",
119
120
  "CFBundleURLTypes": [
120
121
  {
121
- "CFBundleURLName": "CloudCLI",
122
+ "CFBundleURLName": "Cloudpit",
122
123
  "CFBundleURLSchemes": [
123
124
  "cloudcli",
124
125
  "cloudpit"
@@ -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>CloudCLI - API Documentation</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>CloudCLI</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
- CloudCLI runs a local HTTP server that serves its web interface. This page
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