@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
@@ -40,6 +40,8 @@ const createSessionStore = (
40
40
  model,
41
41
  effort: efforts[sessionId] ?? null,
42
42
  permission_mode: permissionModes[sessionId] ?? null,
43
+ // The upstream provider a session is bound to; NULL until recorded.
44
+ model_provider_id: null as string | null,
43
45
  },
44
46
  ]));
45
47
  return {
@@ -52,6 +54,15 @@ const createSessionStore = (
52
54
  session.model = model;
53
55
  }
54
56
  },
57
+ // Write-once, like the column: a second call cannot move the binding.
58
+ setSessionModelProviderId: (sessionId: string, modelProviderId: string) => {
59
+ const session = sessions.get(sessionId);
60
+ if (!session || session.model_provider_id) {
61
+ return false;
62
+ }
63
+ session.model_provider_id = modelProviderId;
64
+ return true;
65
+ },
55
66
  setSessionEffort: (sessionId: string, effort: string) => {
56
67
  const session = sessions.get(sessionId);
57
68
  if (session) {
@@ -396,6 +407,10 @@ test('setSessionModel records the model on the session row', () => {
396
407
  model: 'opus',
397
408
  effort: null,
398
409
  permissionMode: null,
410
+ // The fixture installs no provider registry and binds no model entry, so
411
+ // no upstream provider is recorded and there is nothing to mark.
412
+ modelProviderId: null,
413
+ modelProviderProblem: null,
399
414
  source: 'session',
400
415
  });
401
416
  assert.equal(sessions.sessions.get('session-1')?.model, 'opus');
@@ -55,7 +55,7 @@ async function withProviderServer(
55
55
  }
56
56
  }
57
57
 
58
- test('session creation route names a CloudCLI session from the initial message', async () => {
58
+ test('session creation route names a Cloudpit session from the initial message', async () => {
59
59
  await withProviderServer(async (baseUrl, workspacePath) => {
60
60
  const response = await fetch(`${baseUrl}/api/providers/sessions`, {
61
61
  method: 'POST',
@@ -7,7 +7,7 @@
7
7
  // load-on-demand path the `quay_snapshot` tool's explicit refresh uses.
8
8
  // quayFleetRegistry: the fleet's per-project 「对人接口会话」 pin, read/written by the cockpit
9
9
  // hub's target resolver (injected at the composition root, so the cockpit module itself stays
10
- // a leaf). It maps a CloudCLI project id to the fleet registry id and answers failures as
10
+ // a leaf). It maps a Cloudpit project id to the fleet registry id and answers failures as
11
11
  // values rather than throwing.
12
12
  // quayCapabilities / quayDispatchCarrier / quayTaskEvents: the event-driven refresh's three
13
13
  // composed pieces. `quayCapabilities` answers whether a project's pinned quay has `task log`;
@@ -48,7 +48,7 @@ export type QuayDispatchSet =
48
48
 
49
49
  /** The injectable boundaries of the dispatch carrier reader. */
50
50
  export type QuayDispatchCarrierDependencies = {
51
- /** CloudCLI project id → the project root the carrier path is joined under. */
51
+ /** Cloudpit project id → the project root the carrier path is joined under. */
52
52
  resolveProjectPathById(projectId: string): string | null;
53
53
  /** The service's read-only filesystem boundary (stat size + whole-file UTF-8 read). */
54
54
  readFile: QuayFileReader;
@@ -118,7 +118,7 @@ export function parseFleetJsonObject(text: string): Record<string, unknown> | nu
118
118
  /**
119
119
  * A path canonicalized for root comparison: symlinks resolved, trailing separators dropped.
120
120
  * Consumers: the project-id join and the registry, both matching a registered root against a
121
- * CloudCLI project path. An unresolvable path falls back to a lexical absolute form so a
121
+ * Cloudpit project path. An unresolvable path falls back to a lexical absolute form so a
122
122
  * project that has been moved still compares as itself.
123
123
  */
124
124
  export function canonicalFleetPath(filePath: string): string {
@@ -40,10 +40,10 @@ import {
40
40
  * because every consumer is a server surface that must keep answering when the fleet is absent.
41
41
  */
42
42
 
43
- /** The environment variable an operator uses to point CloudCLI at one exact binary. */
43
+ /** The environment variable an operator uses to point Cloudpit at one exact binary. */
44
44
  export const QUAY_FLEET_BIN_ENV = 'QUAY_FLEET_BIN';
45
45
 
46
- /** The contract versions THIS build of CloudCLI speaks. */
46
+ /** The contract versions THIS build of Cloudpit speaks. */
47
47
  export const QUAY_FLEET_SUPPORTED_CONTRACTS = {
48
48
  wallUri: 'v0',
49
49
  registry: 1,
@@ -14,19 +14,19 @@ import {
14
14
  } from './quay-fleet-locator.js';
15
15
 
16
16
  /**
17
- * The CloudCLI project id → quay-fleet registry id mapping.
17
+ * The Cloudpit project id → quay-fleet registry id mapping.
18
18
  *
19
19
  * WHY THIS EXISTS. A `quay://` reference's project segment is spoken out loud and dereferenced
20
20
  * by quay-fleet, so it must be the fleet's own stable identity (`projects[].id` in
21
- * `~/.quay-fleet/registry.json`, e.g. `claudecodeui`), never CloudCLI's internal project UUID.
22
- * The fleet registers projects by their ROOT path; CloudCLI addresses them by a database id.
23
- * This module is the single place that joins the two: the CloudCLI project's path (canonicalized,
21
+ * `~/.quay-fleet/registry.json`, e.g. `claudecodeui`), never Cloudpit's internal project UUID.
22
+ * The fleet registers projects by their ROOT path; Cloudpit addresses them by a database id.
23
+ * This module is the single place that joins the two: the Cloudpit project's path (canonicalized,
24
24
  * so a trailing separator or a symlinked checkout still matches) is looked up in the registry's
25
25
  * project rows, and the registry id found there is the only project segment the wall may mint.
26
26
  *
27
27
  * The same join answers the other direction: given a registry id from an incoming reference,
28
- * it names the registered root (quay-fleet's `--root`) and, when CloudCLI knows that root, the
29
- * CloudCLI project whose snapshot can answer the read.
28
+ * it names the registered root (quay-fleet's `--root`) and, when Cloudpit knows that root, the
29
+ * Cloudpit project whose snapshot can answer the read.
30
30
  *
31
31
  * A FLEET THAT CANNOT ANSWER IS AN ANSWER. No binary, a non-zero exit, malformed output — every
32
32
  * failure reads `null`, never throws. `null` is the honest "this project is not registered"
@@ -60,9 +60,9 @@ export type QuayFleetRegisteredProject = {
60
60
  };
61
61
 
62
62
  /**
63
- * One registry id joined to the CloudCLI project it names.
63
+ * One registry id joined to the Cloudpit project it names.
64
64
  *
65
- * `projectId` is `null` when CloudCLI does not know the registered root (an archived project,
65
+ * `projectId` is `null` when Cloudpit does not know the registered root (an archived project,
66
66
  * or a fleet host whose registry lists a checkout this instance never added). The root is
67
67
  * still authoritative for the fleet read port; only the snapshot fallback needs `projectId`.
68
68
  */
@@ -90,9 +90,9 @@ export type QuayFleetAvailability = QuayFleetCliReading;
90
90
  * Both methods return `null` for "no such project" and never throw.
91
91
  */
92
92
  export type QuayFleetProjectIdResolver = {
93
- /** CloudCLI project id → fleet registry id, or `null` when its root is not registered. */
93
+ /** Cloudpit project id → fleet registry id, or `null` when its root is not registered. */
94
94
  resolveFleetProjectId(projectId: string): Promise<string | null>;
95
- /** Fleet registry id → registered root + the CloudCLI project at that root. */
95
+ /** Fleet registry id → registered root + the Cloudpit project at that root. */
96
96
  resolveFleetProject(projectSegment: string): Promise<QuayFleetProjectMatch | null>;
97
97
  /**
98
98
  * Whether the fleet CLI answered at all, and why not when it did not.
@@ -106,11 +106,11 @@ export type QuayFleetProjectIdResolver = {
106
106
 
107
107
  /** The seams the mapper reads through; every one of them is replaceable in a test. */
108
108
  export type QuayFleetProjectIdDependencies = {
109
- /** CloudCLI project id → absolute project path; `null`/absent for an unknown project. */
109
+ /** Cloudpit project id → absolute project path; `null`/absent for an unknown project. */
110
110
  resolveProjectPathById: (projectId: string) => string | null | undefined;
111
111
  /**
112
- * Every project this CloudCLI instance knows, used only for the reverse join
113
- * (registry id → CloudCLI project). Absent leaves `projectId: null` on every match, which
112
+ * Every project this Cloudpit instance knows, used only for the reverse join
113
+ * (registry id → Cloudpit project). Absent leaves `projectId: null` on every match, which
114
114
  * still resolves references through the fleet read port but has no snapshot fallback.
115
115
  */
116
116
  listProjects?: () => readonly { projectId: string; projectPath: string }[];
@@ -152,7 +152,7 @@ function readProjectRow(value: unknown): { id: string; root: string } | null {
152
152
  * Builds the mapping service.
153
153
  *
154
154
  * The binary is resolved per call rather than captured at boot so an operator can install the
155
- * fleet CLI (or point `QUAY_FLEET_BIN` at a checkout) without restarting CloudCLI; a missing
155
+ * fleet CLI (or point `QUAY_FLEET_BIN` at a checkout) without restarting Cloudpit; a missing
156
156
  * binary is the ordinary "nothing is registered here" answer, not a boot failure.
157
157
  */
158
158
  export function createQuayFleetProjectIdResolver(
@@ -10,12 +10,12 @@ import { locateQuayFleetCli } from './quay-fleet-locator.js';
10
10
  /**
11
11
  * The fleet registry's per-project 「对人接口会话」, as the cockpit reads and writes it.
12
12
  *
13
- * THE FLEET IS THE AUTHORITY, and this module is the CloudCLI side of that contract. The registry
13
+ * THE FLEET IS THE AUTHORITY, and this module is the Cloudpit side of that contract. The registry
14
14
  * keeps the field as `projects[].interfaceSessionId` and exposes it through
15
15
  * `quay-fleet registry interface-session get|set|clear <project> --json`; the browser cannot spawn
16
16
  * that CLI, so the server is where the two calls live. Nothing here invents a project identity:
17
- * the CloudCLI project id is mapped to the fleet's own registry id by comparing the registered
18
- * ROOT with the project's path, because a CloudCLI UUID is not a fleet handle.
17
+ * the Cloudpit project id is mapped to the fleet's own registry id by comparing the registered
18
+ * ROOT with the project's path, because a Cloudpit UUID is not a fleet handle.
19
19
  *
20
20
  * A FLEET THAT CANNOT ANSWER IS AN ANSWER. Every failure — no binary, a non-zero exit, malformed
21
21
  * output — is reported as `{ok:false, reason}`, never thrown: the cockpit falls back to the
@@ -33,7 +33,7 @@ export type QuayFleetInterfaceSessionWrite =
33
33
  | { ok: true; project: string; interfaceSessionId: string | null }
34
34
  | { ok: false; reason: string; detail?: string };
35
35
 
36
- /** The two operations the cockpit needs, both addressed by the CloudCLI project id. */
36
+ /** The two operations the cockpit needs, both addressed by the Cloudpit project id. */
37
37
  export type QuayFleetRegistryService = {
38
38
  /** Reads the project's pinned target conversation; `interfaceSessionId: null` means none. */
39
39
  readInterfaceSession(projectId: string): Promise<QuayFleetInterfaceSessionReading>;
@@ -45,7 +45,7 @@ export type QuayFleetRegistryService = {
45
45
  };
46
46
 
47
47
  export type QuayFleetRegistryDependencies = {
48
- /** CloudCLI project id → absolute project path; `null` for an unknown project. */
48
+ /** Cloudpit project id → absolute project path; `null` for an unknown project. */
49
49
  resolveProjectPathById: (projectId: string) => string | null | undefined;
50
50
  /** The fleet CLI to spawn. Defaults to the shared locator, which owns the lookup order. */
51
51
  binPath?: string;
@@ -69,7 +69,7 @@ function isProjectRow(value: unknown): value is { id: string; root: string } {
69
69
  * Builds the fleet-registry service.
70
70
  *
71
71
  * The binary is resolved per call rather than captured at boot so an operator can install the
72
- * fleet CLI (or point `QUAY_FLEET_BIN` at a checkout) without restarting CloudCLI; a missing
72
+ * fleet CLI (or point `QUAY_FLEET_BIN` at a checkout) without restarting Cloudpit; a missing
73
73
  * binary is the ordinary `fleet-cli-unavailable` answer, not a boot failure.
74
74
  */
75
75
  export function createQuayFleetRegistry(
@@ -91,10 +91,10 @@ export function createQuayFleetRegistry(
91
91
  const run = createQuayFleetRunner({ resolveBinPath, exec: dependencies.exec });
92
92
 
93
93
  /**
94
- * Resolves the CloudCLI project to the fleet's own registry id.
94
+ * Resolves the Cloudpit project to the fleet's own registry id.
95
95
  *
96
96
  * The path comes from the database, never from the request, and the fleet id is matched by root
97
- * so a project CloudCLI knows but the fleet does not register is `unknown-project` rather than
97
+ * so a project Cloudpit knows but the fleet does not register is `unknown-project` rather than
98
98
  * being guessed from the display name.
99
99
  */
100
100
  const resolveFleetProject = async (
@@ -11,7 +11,7 @@ import { readNullableNumber, readNullableString } from '@/shared/utils.js';
11
11
  /**
12
12
  * The Tests and Fan-in readings, taken through quay's own read-only verbs.
13
13
  *
14
- * CloudCLI used to parse three `.quay/` carrier files itself (`full-suite-state.json`,
14
+ * Cloudpit used to parse three `.quay/` carrier files itself (`full-suite-state.json`,
15
15
  * `verification-round.jsonl`, `worker-outcome.jsonl`) — including a ~100 MB tail scan of the
16
16
  * rounds ledger. quay 0.24.0 publishes both readings as bounded JSON instead:
17
17
  *
@@ -20,7 +20,7 @@ import { locateQuayFleetCli } from './quay-fleet-locator.js';
20
20
  * `wall summary` to it VERBATIM — the same project-scoped address
21
21
  * (`quay://<project>/…`) the wall mints, because that is the only form the fleet parses.
22
22
  * When that read port is unavailable, a TASK reference
23
- * falls back to the snapshot CloudCLI already reads for the Quay panel, which is honest
23
+ * falls back to the snapshot Cloudpit already reads for the Quay panel, which is honest
24
24
  * stored data — never a summary generated on the spot. `wall resolve` never consults the
25
25
  * registry, so the fleet's `project-not-registered` refusal can only arrive from
26
26
  * `wall summary`; it is read as its own fallback reason rather than as a broken reader.
@@ -78,7 +78,7 @@ function reject(reason: QuayUriRejection): QuayUriParseResult {
78
78
  * Parses one `quay://` reference into its L1 shape, or names why it is not one.
79
79
  *
80
80
  * The project segment is a quay-fleet REGISTRY ID (`claudecodeui`, `quay-fleet`), never
81
- * CloudCLI's internal project UUID — see `quay-fleet-project-id.ts` for the join.
81
+ * Cloudpit's internal project UUID — see `quay-fleet-project-id.ts` for the join.
82
82
  *
83
83
  * Accepted forms (project segment mandatory):
84
84
  * quay://<fleet-project-id>/task/<id>
@@ -512,7 +512,7 @@ export type QuayUriSummaryResult = QuayUriSummarySuccess | QuayUriFailure;
512
512
  * `root` is the registered workspace root the segment joins to. It is passed to `wall
513
513
  * summary` as its OPTIONAL `--root` consistency override; a blank root means the segment
514
514
  * alone selects the workspace. `projectId`
515
- * is the CloudCLI project at that root, when this instance knows one; the snapshot fallback
515
+ * is the Cloudpit project at that root, when this instance knows one; the snapshot fallback
516
516
  * reads that project, and `null` means there is no snapshot to fall back to.
517
517
  */
518
518
  export type QuayUriFleetProject = {
@@ -526,7 +526,7 @@ export type QuayUriResolveDependencies = {
526
526
  fleetWallReader: QuayFleetWallReader | null;
527
527
  /**
528
528
  * Resolves a reference's project segment — a quay-fleet REGISTRY ID (`claudecodeui`), never
529
- * a CloudCLI project id — to the registered root and the CloudCLI project at it. `null` when
529
+ * a Cloudpit project id — to the registered root and the Cloudpit project at it. `null` when
530
530
  * the registry does not know the segment.
531
531
  */
532
532
  resolveFleetProject(projectSegment: string): Promise<QuayUriFleetProject | null>;
@@ -591,7 +591,7 @@ export function createQuayUriResolver(dependencies: QuayUriResolveDependencies):
591
591
  * The optional `--root` consistency override for a summary read.
592
592
  *
593
593
  * The URI's PROJECT SEGMENT is authoritative: the fleet resolves it to a workspace root
594
- * through its own registry. CloudCLI knows a root only through that same registry join
594
+ * through its own registry. Cloudpit knows a root only through that same registry join
595
595
  * ({@link QuayUriResolveDependencies.resolveFleetProject}), so the root passed here is by
596
596
  * construction the segment's own root — a consistency override, never a competing one. A
597
597
  * join without a root therefore sends no override (the segment alone selects the
@@ -625,7 +625,7 @@ export function createQuayUriResolver(dependencies: QuayUriResolveDependencies):
625
625
  * port answered (a summary miss keeps its type/actions/fragment); it is absent when the
626
626
  * port could not be read, in which case no action set is forwarded.
627
627
  *
628
- * A registered fleet project CloudCLI has no project for still has an L1 reading; only the
628
+ * A registered fleet project Cloudpit has no project for still has an L1 reading; only the
629
629
  * fallback's CONTENT is missing, which is reported as `snapshot-unavailable`.
630
630
  */
631
631
  const resolveFromSnapshot = async (
@@ -639,7 +639,7 @@ export function createQuayUriResolver(dependencies: QuayUriResolveDependencies):
639
639
  return reference === undefined
640
640
  ? failure(
641
641
  'snapshot-unavailable',
642
- `fleet project '${address.project}' is registered but no CloudCLI project is open at '${project.root}'`,
642
+ `fleet project '${address.project}' is registered but no Cloudpit project is open at '${project.root}'`,
643
643
  )
644
644
  : fleetAnswer(address, uri, reference);
645
645
  }
@@ -677,7 +677,7 @@ export function createQuayUriResolver(dependencies: QuayUriResolveDependencies):
677
677
  const { address } = parsed;
678
678
  const canonical = formatQuayAddress(address);
679
679
 
680
- // The project segment is a fleet REGISTRY ID. An unresolvable segment (a CloudCLI UUID is
680
+ // The project segment is a fleet REGISTRY ID. An unresolvable segment (a Cloudpit UUID is
681
681
  // the usual shape) is named as such before any read is attempted.
682
682
  const project = await dependencies.resolveFleetProject(address.project);
683
683
  if (project === null) {
@@ -94,9 +94,9 @@ const probeWebService = async (host: string, port: number): Promise<boolean> =>
94
94
  };
95
95
 
96
96
  /**
97
- * The CloudCLI project id → quay-fleet registry id join behind every `quay://` project segment.
97
+ * The Cloudpit project id → quay-fleet registry id join behind every `quay://` project segment.
98
98
  * The fleet is the authority for project identity: a reference must say `quay://claudecodeui/…`,
99
- * never the CloudCLI UUID, so the registry id is looked up per registered root and cached for a
99
+ * never the Cloudpit UUID, so the registry id is looked up per registered root and cached for a
100
100
  * short TTL. A host without the fleet CLI reads every project as unregistered instead of failing.
101
101
  */
102
102
  export const quayFleetProjectIds = createQuayFleetProjectIdResolver({
@@ -294,7 +294,7 @@ taskIndexReadListener.current = quayTaskEvents.noteProjectRead;
294
294
 
295
295
  /**
296
296
  * The fleet registry seam the cockpit's pinned-target read/write goes through. It maps a
297
- * CloudCLI project id to the fleet's own registry id by comparing registered roots, and every
297
+ * Cloudpit project id to the fleet's own registry id by comparing registered roots, and every
298
298
  * failure is an answer (`{ok:false, reason}`) rather than a thrown error — a host without the
299
299
  * fleet CLI still renders and routes, falling back to the last-opened session.
300
300
  */
@@ -2,7 +2,7 @@
2
2
  * QUAY DISPLAY ROUTES
3
3
  * ===================
4
4
  *
5
- * Endpoints that expose a project's quay state to the CloudCLI UI:
5
+ * Endpoints that expose a project's quay state to the Cloudpit UI:
6
6
  * - `GET /api/quay/fleet-summary` — the eager cross-project reading.
7
7
  * - `GET /api/quay/resolve` — dereference one `quay://` reference.
8
8
  * - `GET /api/quay/summary` — a reference's summary reading.
@@ -343,7 +343,7 @@ export type QuayFleetProjectSummary = {
343
343
  /**
344
344
  * The project's quay-fleet REGISTRY id — the only project segment a `quay://` reference may
345
345
  * mint. `null` means the root is not registered in the fleet, so this project declares no
346
- * addressable objects (falling back to the CloudCLI UUID would mint a reference the fleet
346
+ * addressable objects (falling back to the Cloudpit UUID would mint a reference the fleet
347
347
  * cannot dereference).
348
348
  */
349
349
  fleetProjectId: string | null;
@@ -611,7 +611,7 @@ export const QUAY_READ_ONLY_COMMANDS: readonly (readonly string[])[] = [
611
611
  ['goal', 'list', '--json'],
612
612
  ['adr', 'list', '--json'],
613
613
  // The Tests and Fan-in cards' readings. quay 0.24.0 publishes both as bounded JSON from its
614
- // own readers, so CloudCLI no longer parses `.quay/` carrier files itself. Exact-match entries
614
+ // own readers, so Cloudpit no longer parses `.quay/` carrier files itself. Exact-match entries
615
615
  // (no prefix rule): the window is part of the reading, and any other flag combination is
616
616
  // refused before a child is spawned.
617
617
  QUAY_SUITE_READ_COMMAND,
@@ -1109,7 +1109,7 @@ type QuayServiceDependencies = {
1109
1109
  */
1110
1110
  fleetWallReader?: QuayFleetWallReader | null;
1111
1111
  /**
1112
- * The CloudCLI project id → quay-fleet registry id join (`quay-fleet-project-id.ts`), behind
1112
+ * The Cloudpit project id → quay-fleet registry id join (`quay-fleet-project-id.ts`), behind
1113
1113
  * the wall's project segment and the per-project `fleetProjectId` reading. OPTIONAL so a
1114
1114
  * composition that does not run a fleet still works: absent means every project is
1115
1115
  * unregistered (`fleetProjectId: null`), which the UI renders as 「未登记到 quay-fleet」
@@ -1936,7 +1936,7 @@ export function createQuayService(dependencies: QuayServiceDependencies) {
1936
1936
  };
1937
1937
 
1938
1938
  /**
1939
- * The CloudCLI project id → fleet registry id join. A composition without a fleet answers
1939
+ * The Cloudpit project id → fleet registry id join. A composition without a fleet answers
1940
1940
  * `null` for every project — the honest "nothing is registered here" reading that makes the
1941
1941
  * UI render 「未登记到 quay-fleet」 instead of minting a UUID reference the fleet cannot read.
1942
1942
  */
@@ -2655,7 +2655,7 @@ export function createQuayService(dependencies: QuayServiceDependencies) {
2655
2655
  * The Tier-2 snapshot as `GET /api/quay/:projectId/snapshot` answers it: the stored reading
2656
2656
  * plus the project's `fleetProjectId`. The join is stamped here, on every branch, because it
2657
2657
  * is what the wall mints its project segment from — a cached snapshot body carrying a stale
2658
- * (or absent) join would let the renderer fall back to the CloudCLI id.
2658
+ * (or absent) join would let the renderer fall back to the Cloudpit id.
2659
2659
  */
2660
2660
  const getQuaySnapshot = async (
2661
2661
  projectId: string,
@@ -2933,7 +2933,7 @@ export function createQuayService(dependencies: QuayServiceDependencies) {
2933
2933
  const quayUriResolver = createQuayUriResolver({
2934
2934
  fleetWallReader,
2935
2935
  // The project segment is a quay-fleet REGISTRY ID. The join names the registered root the
2936
- // fleet read port is called with, and the CloudCLI project (if any) whose snapshot can
2936
+ // fleet read port is called with, and the Cloudpit project (if any) whose snapshot can
2937
2937
  // supplement a task reference.
2938
2938
  resolveFleetProject: (projectSegment) => fleetProjectIds.resolveFleetProject(projectSegment),
2939
2939
  // Cached first, so dereferencing a URI the panel just rendered spawns nothing. A cold
@@ -107,7 +107,7 @@ export type SessionTaskStoreRecord = {
107
107
  * production classification with stubs and no filesystem, git or deployment state.
108
108
  */
109
109
  export type SessionTaskChainDependencies = {
110
- /** The CloudCLI project path for a project id, or `null` when the project is unknown. */
110
+ /** The Cloudpit project path for a project id, or `null` when the project is unknown. */
111
111
  resolveProjectPath(projectId: string): string | null;
112
112
  /** The session's transcript (JSONL) path, or `null` when it has none yet. */
113
113
  resolveTranscriptPath(input: { projectId: string; sessionId: string }): string | null;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * Cross-repository contract tests: CloudCLI against the INSTALLED quay-fleet.
2
+ * Cross-repository contract tests: Cloudpit against the INSTALLED quay-fleet.
3
3
  *
4
- * WHAT THIS FILE PROVES. Every `quay-fleet` invocation CloudCLI consumes is run against the real
4
+ * WHAT THIS FILE PROVES. Every `quay-fleet` invocation Cloudpit consumes is run against the real
5
5
  * binary on this host, and its JSON answer is checked against the declaration in `shapes.ts`.
6
6
  * The handshake goes first: if the fleet declares a contract this build does not speak, the run
7
7
  * reds and names the contract instead of exercising verbs whose output may have moved under us.
@@ -475,7 +475,7 @@ if (binPath === null) {
475
475
  );
476
476
  assertShape(contract.id, document, contract.shape);
477
477
 
478
- // `wall resolve` was asked for the `#ac-<n>` form; validate the branch CloudCLI renders,
478
+ // `wall resolve` was asked for the `#ac-<n>` form; validate the branch Cloudpit renders,
479
479
  // not merely its presence (the shape declaration already pins kind/index).
480
480
  if (contract.id === 'wall-resolve') {
481
481
  const fragment = document?.fragment as { kind?: unknown; index?: unknown } | undefined;
@@ -1,7 +1,7 @@
1
1
  /**
2
- * The JSON shape declarations for every `quay-fleet` CLI contract CloudCLI consumes.
2
+ * The JSON shape declarations for every `quay-fleet` CLI contract Cloudpit consumes.
3
3
  *
4
- * WHY THIS FILE EXISTS. CloudCLI talks to a separately versioned program — the installed
4
+ * WHY THIS FILE EXISTS. Cloudpit talks to a separately versioned program — the installed
5
5
  * `quay-fleet` — through plain JSON on stdout. Until this file, every consumer parsed that JSON
6
6
  * with its own hand-written reader and no test ever compared the READER against the REAL CLI:
7
7
  * the two sides were validated independently, so a rename in the fleet's output was discovered
@@ -9,19 +9,19 @@
9
9
  * project-segment disagreement (`quay://task/<id>` vs `quay://<project>/task/<id>`): each side's
10
10
  * own tests were green, and the breakage only appeared when the two real programs met.
11
11
  *
12
- * A contract here is therefore (a) the exact argv CloudCLI runs and (b) a declared shape for the
12
+ * A contract here is therefore (a) the exact argv Cloudpit runs and (b) a declared shape for the
13
13
  * JSON it must answer with. `fleet-cli-contracts.test.ts` invokes the INSTALLED fleet and checks
14
14
  * every answer against these declarations, so an incompatible change on either side reds before
15
15
  * merge instead of in production.
16
16
  *
17
17
  * THE LYING RISK THIS FILE MUST NOT HAVE. A shape that accepts everything protects nothing. The
18
- * declarations below therefore name the fields CloudCLI actually reads as REQUIRED, pin the
18
+ * declarations below therefore name the fields Cloudpit actually reads as REQUIRED, pin the
19
19
  * closed-vocabulary ones to their legal values (the trivalent readings the fleet uses throughout:
20
20
  * `ok` / `absent` / `invalid`, and `string | null`), and let UNDECLARED fields through on purpose
21
21
  * — a fleet that ADDS a field stays compatible, which is exactly the forward-compatibility rule
22
22
  * the contract must encode.
23
23
  *
24
- * ADDING A CONSUMER. Whenever CloudCLI starts invoking a new `quay-fleet` verb (or starts reading
24
+ * ADDING A CONSUMER. Whenever Cloudpit starts invoking a new `quay-fleet` verb (or starts reading
25
25
  * a new field from an existing one), add the invocation and its shape here AND a case to
26
26
  * `fleet-cli-contracts.test.ts`. The rule and its rationale are repeated in `README.md`, which is
27
27
  * where a human adding a consumer is expected to look first.
@@ -250,7 +250,7 @@ export type FleetCliContractContext = {
250
250
  export type FleetCliContract = {
251
251
  /** Stable id printed in every failure and per-contract report line. */
252
252
  id: string;
253
- /** The CloudCLI reader that consumes this invocation. */
253
+ /** The Cloudpit reader that consumes this invocation. */
254
254
  consumer: string;
255
255
  /** True when the verb mutates the fleet home (must run against a temporary home). */
256
256
  writes: boolean;
@@ -293,7 +293,7 @@ export const HANDSHAKE_SHAPE: Shape = {
293
293
  * `quay-fleet wall resolve <uri> --json` — the L1 reference.
294
294
  *
295
295
  * The test always asks for the fragment form (`#ac-<n>`), so `fragment` is REQUIRED here rather
296
- * than optional: dropping it would silently stop exercising the branch CloudCLI renders.
296
+ * than optional: dropping it would silently stop exercising the branch Cloudpit renders.
297
297
  */
298
298
  export const WALL_RESOLVE_SHAPE: Shape = {
299
299
  type: 'object',
@@ -318,7 +318,7 @@ export const WALL_RESOLVE_SHAPE: Shape = {
318
318
  * `quay-fleet wall summary <uri> --root <dir> --json` — the L2 reading.
319
319
  *
320
320
  * Three-valued on purpose: `ok` carries the stored summary, `absent` is an honest reading of the
321
- * write path (no row stored yet), and `invalid` means the URI itself was rejected. CloudCLI's
321
+ * write path (no row stored yet), and `invalid` means the URI itself was rejected. Cloudpit's
322
322
  * `readFleetL2` treats `ok`/`absent` as readings and everything else as unreadable, so the three
323
323
  * states must stay distinguishable here.
324
324
  */
@@ -595,7 +595,7 @@ export const LIVENESS_SHAPE: Shape = {
595
595
  },
596
596
  };
597
597
 
598
- // The fleet's `status` document is the largest contract, but CloudCLI consumes it section by
598
+ // The fleet's `status` document is the largest contract, but Cloudpit consumes it section by
599
599
  // section. Every field below is one a reader or the cockpit displays; nested extras (the outbox's
600
600
  // per-class attribution detail, for example) are deliberately not declared — they may grow.
601
601
  const DRIVER_READ_SHAPE: Shape = {
@@ -784,7 +784,7 @@ export const STATUS_SHAPE: Shape = {
784
784
  };
785
785
 
786
786
  /**
787
- * Every contract CloudCLI consumes. Order is the report order; the handshake is first because a
787
+ * Every contract Cloudpit consumes. Order is the report order; the handshake is first because a
788
788
  * listener reading the output needs the negotiated version before the verb results.
789
789
  */
790
790
  export const FLEET_CLI_CONTRACTS: readonly FleetCliContract[] = [
@@ -28,7 +28,7 @@ import {
28
28
  * include is `src/**` and would find no tests here.
29
29
  */
30
30
 
31
- /** The handshake this CloudCLI build speaks. */
31
+ /** The handshake this Cloudpit build speaks. */
32
32
  const SUPPORTED = { wallUri: 'v0', registry: 1, interfaceSession: 'v0' } as const;
33
33
 
34
34
  /** A `quay-fleet --version --json` document. */
@@ -12,10 +12,10 @@ import {
12
12
  import { createQuayService } from '../quay.service.js';
13
13
 
14
14
  /**
15
- * The CloudCLI project id → quay-fleet registry id join (quay-fleet-project-id).
15
+ * The Cloudpit project id → quay-fleet registry id join (quay-fleet-project-id).
16
16
  *
17
17
  * THE MATCH IS BY ROOT, NOT BY NAME. The fleet registry is the authority for project identity,
18
- * and it registers a project by its root path; CloudCLI knows projects by a database id. The
18
+ * and it registers a project by its root path; Cloudpit knows projects by a database id. The
19
19
  * join therefore canonicalizes BOTH sides — a trailing separator and a symlinked checkout are
20
20
  * the same project — and only an exact (canonical) root match yields a registry id.
21
21
  *
@@ -60,7 +60,7 @@ function staticExec(stdout: string, calls: ExecCall[] = []): QuayFleetProjectIdD
60
60
 
61
61
  /**
62
62
  * A temp workspace: `real/` is the checkout, `link/` a symlink to it. The registry registers
63
- * `real/` (with a trailing slash) while CloudCLI addresses the project through `link/` — the
63
+ * `real/` (with a trailing slash) while Cloudpit addresses the project through `link/` — the
64
64
  * two spellings must still join.
65
65
  */
66
66
  function createWorkspace(): {
@@ -86,7 +86,7 @@ test('AC3: a registered root matches through a trailing separator and a symlink'
86
86
  const resolver = createQuayFleetProjectIdResolver({
87
87
  resolveProjectPathById: (projectId) =>
88
88
  projectId === 'cloud-project'
89
- // CloudCLI stored the SYMLINKED path, with a trailing separator of its own.
89
+ // Cloudpit stored the SYMLINKED path, with a trailing separator of its own.
90
90
  ? `${workspace.link}${path.sep}`
91
91
  : null,
92
92
  listProjects: () => [{ projectId: 'cloud-project', projectPath: workspace.link }],
@@ -127,9 +127,9 @@ test('AC3: an unregistered root and an unregistered segment are null, never a gu
127
127
  });
128
128
 
129
129
  assert.equal(await resolver.resolveFleetProjectId('elsewhere'), null);
130
- // An unknown CloudCLI project is null without even reading the registry.
130
+ // An unknown Cloudpit project is null without even reading the registry.
131
131
  assert.equal(await resolver.resolveFleetProjectId('no-such-project'), null);
132
- // A registry id nobody registered is null; CloudCLI ids are never accepted as segments.
132
+ // A registry id nobody registered is null; Cloudpit ids are never accepted as segments.
133
133
  assert.equal(await resolver.resolveFleetProject('cloud-uuid'), null);
134
134
  } finally {
135
135
  fs.rmSync(workspace.directory, { recursive: true, force: true });
@@ -31,10 +31,10 @@ import { createQuayService } from '../quay.service.js';
31
31
  * of it. The fleet side is a stub whose payloads use quay-fleet's v0 enum
32
32
  * (`config/object-uri.types.v0.json`) verbatim.
33
33
  *
34
- * THE TWO IDENTITIES ARE DELIBERATELY DIFFERENT. `CLOUD_PROJECT_ID` is what CloudCLI's database
34
+ * THE TWO IDENTITIES ARE DELIBERATELY DIFFERENT. `CLOUD_PROJECT_ID` is what Cloudpit's database
35
35
  * keys the project by; `FLEET_PROJECT_ID` is the registry id a `quay://` reference carries. A
36
36
  * UUID-shaped project segment must NOT resolve (it is the shape this task removed), and the
37
- * snapshot fallback must still be read through the CloudCLI id — the join is what proves both.
37
+ * snapshot fallback must still be read through the Cloudpit id — the join is what proves both.
38
38
  *
39
39
  * RUNNER NOTE: this is a server test, so it runs under the repository's canonical server
40
40
  * runner (`tsx --test`, `scripts/test.sh`), not vitest — vitest's `include` is `src/**` only
@@ -48,7 +48,7 @@ const AC_URI = `quay://${FLEET_PROJECT_ID}/task/T-42#ac-3`;
48
48
  const GOAL_URI = `quay://${FLEET_PROJECT_ID}/goal/G-1`;
49
49
  const PROJECT_ROOT = '/workspace/claudecodeui';
50
50
 
51
- /** A project segment in the shape the removed mapping used to accept: CloudCLI's own UUID. */
51
+ /** A project segment in the shape the removed mapping used to accept: Cloudpit's own UUID. */
52
52
  const UUID_URI = `quay://${CLOUD_PROJECT_ID}/task/T-42`;
53
53
 
54
54
  /** quay-fleet's v0 action enum, copied from its `config/object-uri.types.v0.json` fixture. */
@@ -146,9 +146,9 @@ function createStubFleet(available = true, calls: string[] = []): QuayFleetWallR
146
146
  }
147
147
 
148
148
  /**
149
- * Resolves the one fixture fleet project to its registered root and CloudCLI project.
149
+ * Resolves the one fixture fleet project to its registered root and Cloudpit project.
150
150
  *
151
- * Only the fleet REGISTRY id resolves; the CloudCLI project id (a UUID) is deliberately absent,
151
+ * Only the fleet REGISTRY id resolves; the Cloudpit project id (a UUID) is deliberately absent,
152
152
  * which is what makes a UUID-shaped project segment an `unknown-project`.
153
153
  */
154
154
  function resolveFleetProject(
@@ -162,8 +162,8 @@ function resolveFleetProject(
162
162
  }
163
163
 
164
164
  /**
165
- * The project-id seam the service composes: the CloudCLI id joins to the fleet registry id
166
- * only through the registry, and the fleet id joins back to this fixture's root + CloudCLI id.
165
+ * The project-id seam the service composes: the Cloudpit id joins to the fleet registry id
166
+ * only through the registry, and the fleet id joins back to this fixture's root + Cloudpit id.
167
167
  */
168
168
  const fleetProjectIdResolver: QuayFleetProjectIdResolver = {
169
169
  async resolveFleetProjectId(projectId) {
@@ -610,7 +610,7 @@ test('AC4: the project segment is a fleet registry id, and a UUID segment is unk
610
610
  assert.equal(resolved.uri, TASK_URI);
611
611
  assert.deepEqual(roots, [PROJECT_ROOT], 'the fleet summary must be called with the registered root');
612
612
 
613
- // The removed shape: a CloudCLI UUID as the project segment. The registry does not know it,
613
+ // The removed shape: a Cloudpit UUID as the project segment. The registry does not know it,
614
614
  // so the reference is named `unknown-project` and no fleet read is attempted for it.
615
615
  const before = roots.length;
616
616
  for (const result of [await resolver.resolve(UUID_URI), await resolver.summary(UUID_URI)]) {
@@ -668,7 +668,7 @@ test('AC3: the routes answer invalid references with 4xx and no read port with 5
668
668
  const unavailableBody = (await unavailable.json()) as { error: { code: string } };
669
669
  assert.equal(unavailableBody.error.code, 'fleet-unavailable');
670
670
 
671
- // A project segment the fleet does not register (CloudCLI's UUID, the removed shape) is
671
+ // A project segment the fleet does not register (Cloudpit's UUID, the removed shape) is
672
672
  // a 404 naming `unknown-project` — never a UUID-addressed read.
673
673
  const unknown = await fetch(`${base}/resolve?uri=${encodeURIComponent(UUID_URI)}`);
674
674
  assert.equal(unknown.status, 404);
@@ -709,7 +709,7 @@ test('AC1: the service composes the injected fleet reader into its dereference m
709
709
  assert.equal(resolved.source, 'fleet');
710
710
 
711
711
  // The Tier-2 snapshot carries the same join: its project segment is the registry id, never
712
- // the CloudCLI id the request was keyed by.
712
+ // the Cloudpit id the request was keyed by.
713
713
  const snapshot = await service.getQuaySnapshot(CLOUD_PROJECT_ID);
714
714
  assert.equal(snapshot?.projectId, CLOUD_PROJECT_ID);
715
715
  assert.equal(snapshot?.fleetProjectId, FLEET_PROJECT_ID);
@@ -129,7 +129,7 @@ const SCOPE_TIMEOUT_MS = 15_000;
129
129
  *
130
130
  * It used to be a bare 60_000, which the three boots alone (75_000) already
131
131
  * exceeded: on 2026-10-02 a run whose servers had each reached
132
- * `CloudCLI Server - Ready` was killed at the 60s boundary with `exit=3` because
132
+ * `Cloudpit Server - Ready` was killed at the 60s boundary with `exit=3` because
133
133
  * the budget, not the boot, was too small — and a process-level kill names no
134
134
  * `node:test` case, which is why that red could not be attributed.
135
135
  *