@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
@@ -3,18 +3,18 @@
3
3
  *
4
4
  * The mechanism this file implements is small on purpose: given an initiative and a target
5
5
  * project, ask the fleet registry which session is that pair's LIAISON session, and hand the
6
- * message to CloudCLI's existing session send service — or, when nobody is there to take it,
6
+ * message to Cloudpit's existing session send service — or, when nobody is there to take it,
7
7
  * queue it in the initiative's inbox until the session comes back.
8
8
  *
9
9
  * ## Why the resolution is a REGISTRY READ and never a name
10
10
  *
11
11
  * `fleet-liaison-stable-addressing-probe` (2026-10-24) measured what is stable across a
12
- * restart: the CloudCLI session id is the only identity a registry row can hold that survives
12
+ * restart: the Cloudpit session id is the only identity a registry row can hold that survives
13
13
  * the process, while `pid` changes every launch (and can be reused) and `name` is not an
14
14
  * address at all — three live sessions shared one name on the observed host. So this service
15
15
  * never looks a peer up by name: it reads the (initiative, project) two-key mapping
16
16
  * (`registry.json`'s `liaisonSessions`, written by `registry sessions add --role liaison`),
17
- * and the registry's `sessionId` is the CloudCLI session id. Liveness is then the ONE
17
+ * and the registry's `sessionId` is the Cloudpit session id. Liveness is then the ONE
18
18
  * question the host registry answers (`liveHostForSession`), which is authoritative in this
19
19
  * process in a way a local `~/.claude/sessions/<pid>.json` cross-check is not.
20
20
  *
@@ -299,7 +299,7 @@ export type LiaisonRecoveryOutcome = {
299
299
  export type LiaisonDeliverDeps = {
300
300
  /** The fleet CLI seam (production: a real `quay-fleet` child). */
301
301
  runFleet: LiaisonFleetRun;
302
- /** Whether CloudCLI is currently serving this session (production: the host registry). */
302
+ /** Whether Cloudpit is currently serving this session (production: the host registry). */
303
303
  isSessionLive: (sessionId: string) => boolean;
304
304
  /** The existing session send service. */
305
305
  sendMessage: LiaisonSendMessage;
@@ -94,7 +94,7 @@ export type LiaisonModule = {
94
94
  * The real `quay-fleet` runner.
95
95
  *
96
96
  * The binary is looked up per call rather than captured at boot, so an operator can install
97
- * (or re-point `QUAY_FLEET_BIN` at) a fleet without restarting CloudCLI. A missing binary is
97
+ * (or re-point `QUAY_FLEET_BIN` at) a fleet without restarting Cloudpit. A missing binary is
98
98
  * the ordinary unavailable answer; the caller turns it into the explicit registry error AC2
99
99
  * requires rather than a silent drop.
100
100
  */
@@ -167,8 +167,9 @@ function resolvePrincipal(
167
167
  userId: verified.userId,
168
168
  tokenId: verified.tokenId,
169
169
  clientId: null,
170
- // Both spellings are accepted at issuance; every consumer compares the
171
- // legacy `requiredScopes` literals, so the principal carries canonical names.
170
+ // 3.0 issues only `cloudpit:*`, but every consumer compares the canonical
171
+ // `requiredScopes` literals, so the principal carries canonical names. An old
172
+ // token whose row holds the legacy spelling passes through unchanged.
172
173
  scopes: verified.scopes.map(canonicalScope),
173
174
  };
174
175
  }
@@ -2,8 +2,8 @@
2
2
  * The MCP gateway's self-referential guard (AC-252; SPEC
3
3
  * `docs/proposals/mcp-gateway-SPEC.md` v3.1 §290–§300).
4
4
  *
5
- * A gateway client can itself be a CloudCLI session — the canonical nesting is
6
- * "a Claude Code session opened inside CloudCLI calling CloudCLI's own MCP
5
+ * A gateway client can itself be a Cloudpit session — the canonical nesting is
6
+ * "a Claude Code session opened inside Cloudpit calling Cloudpit's own MCP
7
7
  * server". When that session calls a WRITE tool against ITSELF it does not just
8
8
  * act on a stranger: `session_send` queues a message behind the round that is
9
9
  * waiting for this very tool result, and `session_interrupt` / `session_close`
@@ -95,12 +95,24 @@ import type { McpRunGetDeps, RunGetPayload } from './mcp-run-get.js';
95
95
  */
96
96
  export type { McpControlCaller };
97
97
 
98
- /** The refusals `session_send` translates. The vocabulary is the control service's own. */
98
+ /**
99
+ * The refusals `session_send` translates. The vocabulary is the control
100
+ * service's own.
101
+ *
102
+ * The last two are the session's upstream-provider guard (AC-462): a model that
103
+ * would move the session to another provider, or one bound to a provider that
104
+ * no longer exists. The adapter does not pass them through verbatim — it maps
105
+ * both to the gateway's own `INVALID_ARGUMENT` so every tool keeps emitting a
106
+ * canonical `MCP_ERROR_CODES` value — but the seam has to state them, because
107
+ * the control service's result now carries them.
108
+ */
99
109
  export type McpControlRefusalCode =
100
110
  | 'SESSION_NOT_FOUND'
101
111
  | 'UNSUPPORTED_PROVIDER'
102
112
  | 'RUN_IN_PROGRESS'
103
- | 'FORBIDDEN';
113
+ | 'FORBIDDEN'
114
+ | 'SESSION_PROVIDER_MISMATCH'
115
+ | 'SESSION_PROVIDER_UNKNOWN';
104
116
 
105
117
  /**
106
118
  * The control service result `session_send` reads, declared structurally.
@@ -595,6 +607,13 @@ export async function buildSessionSend(
595
607
  hint: RUN_IN_PROGRESS_HINT,
596
608
  });
597
609
  }
610
+ if (result.code === 'SESSION_PROVIDER_MISMATCH' || result.code === 'SESSION_PROVIDER_UNKNOWN') {
611
+ // The selection is unusable for THIS session (its thread is bound to the
612
+ // provider it started under, or the bound provider is gone). The message
613
+ // already names the fork/new-session action, so the envelope only has to
614
+ // state the class in the gateway's own vocabulary.
615
+ throw new McpToolError(MCP_ERROR_CODES.INVALID_ARGUMENT, result.message, true);
616
+ }
598
617
  throw new McpToolError(result.code, result.message, true);
599
618
  }
600
619
 
@@ -27,7 +27,7 @@
27
27
  * behaviour; otherwise left false (the spec default).
28
28
  * - `openWorldHint` (spec default `true`): true when the tool's effect is
29
29
  * delivered OUTSIDE this server's own store — it drives, starts, stops or
30
- * authorizes a provider agent/process. False for tools confined to CloudCLI's
30
+ * authorizes a provider agent/process. False for tools confined to Cloudpit's
31
31
  * stored state (its database, its lease table, its queue, its cached
32
32
  * snapshot).
33
33
  *
@@ -163,18 +163,18 @@ export const MCP_TOOL_ANNOTATIONS: Record<McpGatewayToolName, ToolAnnotations> =
163
163
  // asks the connected browsers what they are showing and reads their answers:
164
164
  // nothing is stored, and a repeat with no browser state change reads the same
165
165
  // fact. The question reaches the browsers, but it drives no provider agent and
166
- // mutates no CloudCLI state, so the world stays closed.
166
+ // mutates no Cloudpit state, so the world stays closed.
167
167
  ui_visible_context: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
168
168
  // lists the connected browsers and status, reading their answers to one
169
169
  // round-trip question: nothing is stored, and a repeat with no browser state
170
170
  // change reads the same roster. The question reaches the browsers, but it
171
- // drives no provider agent and mutates no CloudCLI state, so the world stays
171
+ // drives no provider agent and mutates no Cloudpit state, so the world stays
172
172
  // closed — the same reading `ui_visible_context` above carries.
173
173
  ui_clients_list: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
174
174
  // scans the stored provider transcripts and titles and reads nothing else:
175
175
  // nothing is stored, and a repeat over an unchanged store reads the same
176
176
  // matches. The scan touches files on disk, but it drives no provider agent and
177
- // mutates no CloudCLI state, so the world stays closed.
177
+ // mutates no Cloudpit state, so the world stays closed.
178
178
  session_search: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
179
179
  // reads the user's transcript SELECTION through the same browser round trip as
180
180
  // `ui_visible_context`: nothing is stored, and a repeat with no browser state
@@ -22,10 +22,7 @@
22
22
  * objects in one process, and a process-lifetime cache would collapse them.
23
23
  */
24
24
 
25
- import {
26
- ACCESS_TOKEN_SCOPES,
27
- CLOUDPIT_ACCESS_TOKEN_SCOPES,
28
- } from '@/shared/mcp-contract/index.js';
25
+ import { CLOUDPIT_ACCESS_TOKEN_SCOPES } from '@/shared/mcp-contract/index.js';
29
26
 
30
27
  import { readMcpOauthEnabled } from './mcp-gateway.loopback.js';
31
28
 
@@ -183,7 +180,9 @@ export function buildAuthorizationServerMetadata(options: {
183
180
  code_challenge_methods_supported: ['S256'],
184
181
  grant_types_supported: ['authorization_code', 'refresh_token'],
185
182
  token_endpoint_auth_methods_supported: ['client_secret_post', 'none'],
186
- scopes_supported: [...CLOUDPIT_ACCESS_TOKEN_SCOPES, ...ACCESS_TOKEN_SCOPES],
183
+ // 3.0 advertises exactly the one wire vocabulary. The canonical `cloudcli:*` names are
184
+ // internal (stored grants and `requiredScopes`), never an accepted request spelling.
185
+ scopes_supported: [...CLOUDPIT_ACCESS_TOKEN_SCOPES],
187
186
  };
188
187
 
189
188
  if (dcrMode !== 'off') {
@@ -284,7 +284,7 @@ async function withHarness(arms: Arms, run: HarnessRun): Promise<void> {
284
284
  const readToken = tokens.issueToken({
285
285
  userId: USER_ONE,
286
286
  name: 'knowledge-effective-config-proof',
287
- scopes: ['cloudcli:read'],
287
+ scopes: ['cloudpit:read'],
288
288
  expiresInDays: 30,
289
289
  });
290
290
  if (!readToken.ok) throw new Error('the harness must mint a read token');
@@ -157,8 +157,8 @@ const CORRELATION = 'corr-peer-ask-1';
157
157
  const DELIVERY_ID = 'delivery-peer-ask-1';
158
158
  const REPLY_UUID = 'reply-assistant-1';
159
159
  const ASK_MESSAGE_ID = 'assistant-ask-1';
160
- const READ_SCOPE = 'cloudcli:read';
161
- const SEND_SCOPE = 'cloudcli:session:send';
160
+ const READ_SCOPE = 'cloudpit:read';
161
+ const SEND_SCOPE = 'cloudpit:session:send';
162
162
 
163
163
  function idsOf(tag: string) {
164
164
  return {
@@ -86,6 +86,7 @@ type AnyRecord = Record<string, unknown>;
86
86
  // --------------------------- fixture identities ---------------------------
87
87
 
88
88
  const USER_ONE = 1;
89
+ const wire = (scopes: string[]) => scopes.map((scope) => scope.replace('cloudcli:', 'cloudpit:'));
89
90
  const READ_SCOPE = 'cloudcli:read';
90
91
  const APPROVE_SCOPE = 'cloudcli:approve';
91
92
  /** The pinned "now" so `waitedMs` is exactly assertable. */
@@ -310,13 +311,13 @@ async function withHarness(options: HarnessOptions, run: (harness: Harness) => P
310
311
  const readToken = tokens.issueToken({
311
312
  userId: USER_ONE,
312
313
  name: 'ac274-read',
313
- scopes: [READ_SCOPE],
314
+ scopes: wire([READ_SCOPE]),
314
315
  expiresInDays: 30,
315
316
  });
316
317
  const approveToken = tokens.issueToken({
317
318
  userId: USER_ONE,
318
319
  name: 'ac274-approve',
319
- scopes: [READ_SCOPE, APPROVE_SCOPE],
320
+ scopes: wire([READ_SCOPE, APPROVE_SCOPE]),
320
321
  expiresInDays: 30,
321
322
  });
322
323
  if (!readToken.ok || !approveToken.ok) {
@@ -214,7 +214,7 @@ async function withAuditServer(run: (harness: Harness) => Promise<void>): Promis
214
214
  const address = server.address() as AddressInfo;
215
215
 
216
216
  const issue = (userId: number, name: string): { id: number; token: string } => {
217
- const issued = tokens.issueToken({ userId, name, scopes: ['cloudcli:read'], expiresInDays: 30 });
217
+ const issued = tokens.issueToken({ userId, name, scopes: ['cloudpit:read'], expiresInDays: 30 });
218
218
  if (!issued.ok) {
219
219
  throw new Error('the harness issued a token with a lifetime the service rejects');
220
220
  }
@@ -293,8 +293,8 @@ function assertIdentity(row: ReturnType<typeof lastRow>, tokenId: number): void
293
293
 
294
294
  test('(a) every tool call writes exactly one row, for ok, denied and error', async () => {
295
295
  await withAuditServer(async (server) => {
296
- const full = server.issue(['cloudcli:read', 'cloudcli:session:send']);
297
- const readOnly = server.issue(['cloudcli:read']);
296
+ const full = server.issue(['cloudpit:read', 'cloudpit:session:send']);
297
+ const readOnly = server.issue(['cloudpit:read']);
298
298
  const authorization = `Bearer ${full.token}`;
299
299
 
300
300
  const readings: string[] = [];
@@ -383,7 +383,7 @@ test('(a) every tool call writes exactly one row, for ok, denied and error', asy
383
383
 
384
384
  test('(b) the digest keeps ids verbatim and reduces free text to length + 40 chars', async () => {
385
385
  await withAuditServer(async (server) => {
386
- const full = server.issue(['cloudcli:session:send']);
386
+ const full = server.issue(['cloudpit:session:send']);
387
387
  const message = 'A'.repeat(500);
388
388
  const sessionId = 'sess-id-123';
389
389
  const projectId = 'proj-id-456';
@@ -421,7 +421,7 @@ test('(b) the digest keeps ids verbatim and reduces free text to length + 40 cha
421
421
 
422
422
  test('(c) unauthenticated calls answer 401, write no row, and leave the server alive', async () => {
423
423
  await withAuditServer(async (server) => {
424
- const valid = server.issue(['cloudcli:read']);
424
+ const valid = server.issue(['cloudpit:read']);
425
425
  const before = mcpAuditLogDb.count();
426
426
 
427
427
  const cases: { label: string; authorization?: string }[] = [
@@ -55,6 +55,8 @@ const MCP_ACCEPT = 'application/json, text/event-stream';
55
55
  const USER_ONE = 1;
56
56
  const START = new Date('2026-01-01T00:00:00.000Z');
57
57
  const MS_PER_DAY = 24 * 60 * 60 * 1000;
58
+ // The canonical spelling a stored token row and the principal carry; the harness
59
+ // mints its wire equivalent (`cloudpit:read`) through the real issue path.
58
60
  const VALID_SCOPES = ['cloudcli:read'];
59
61
 
60
62
  // --------------------------- HTTP ---------------------------
@@ -245,7 +247,7 @@ async function withMcpAuthServer(run: (harness: Harness) => Promise<void>): Prom
245
247
  const address = server.address() as AddressInfo;
246
248
 
247
249
  const issue = (expiresInDays: number): IssuedAccessToken => {
248
- const issued = tokens.issueToken({ userId: USER_ONE, name: 'mcp', scopes: VALID_SCOPES, expiresInDays });
250
+ const issued = tokens.issueToken({ userId: USER_ONE, name: 'mcp', scopes: VALID_SCOPES.map((scope) => scope.replace('cloudcli:', 'cloudpit:')), expiresInDays });
249
251
  if (!issued.ok) {
250
252
  throw new Error('the harness issued a token with a lifetime the service rejects');
251
253
  }
@@ -130,6 +130,7 @@ type RuntimeService = ReturnType<typeof createProviderRuntimeService>;
130
130
 
131
131
  const USER_ONE = 1;
132
132
  const DEBUG_PROVIDER = DEBUG_AGENT_PROVIDER_ID as LLMProvider;
133
+ const wire = (scopes: string[]) => scopes.map((scope) => scope.replace('cloudcli:', 'cloudpit:'));
133
134
  const READ_SCOPE = 'cloudcli:read';
134
135
  const SESSION_SEND_SCOPE = 'cloudcli:session:send';
135
136
  const SESSION_CONTROL_SCOPE = 'cloudcli:session:control';
@@ -410,13 +411,13 @@ async function withHarness(arm: ArmOptions, run: (harness: Harness) => Promise<v
410
411
  const mainToken = tokens.issueToken({
411
412
  userId: USER_ONE,
412
413
  name: 'ac271-main',
413
- scopes: [READ_SCOPE, SESSION_SEND_SCOPE, SESSION_CONTROL_SCOPE],
414
+ scopes: wire([READ_SCOPE, SESSION_SEND_SCOPE, SESSION_CONTROL_SCOPE]),
414
415
  expiresInDays: 30,
415
416
  });
416
417
  const sendOnlyToken = tokens.issueToken({
417
418
  userId: USER_ONE,
418
419
  name: 'ac271-send-only',
419
- scopes: [READ_SCOPE, SESSION_SEND_SCOPE],
420
+ scopes: wire([READ_SCOPE, SESSION_SEND_SCOPE]),
420
421
  expiresInDays: 30,
421
422
  });
422
423
  if (!mainToken.ok || !sendOnlyToken.ok) {
@@ -291,9 +291,13 @@ async function withArm(run: (arm: Arm) => Promise<void>): Promise<void> {
291
291
 
292
292
  const tokens = createAccessTokensService({ now: () => new Date() });
293
293
  const issued = {
294
- read: issue(tokens, 'cockpit-read', [MCP_COCKPIT_READ_SCOPE]),
295
- act: issue(tokens, 'cockpit-act', [MCP_COCKPIT_READ_SCOPE, MCP_COCKPIT_ACT_SCOPE]),
296
- navigate: issue(tokens, 'cockpit-navigate', ['cloudcli:navigate']),
294
+ // 3.0 issues the wire spelling; the tool declarations stay canonical `cloudcli:*`.
295
+ read: issue(tokens, 'cockpit-read', [MCP_COCKPIT_READ_SCOPE.replace('cloudcli:', 'cloudpit:')]),
296
+ act: issue(tokens, 'cockpit-act', [
297
+ MCP_COCKPIT_READ_SCOPE.replace('cloudcli:', 'cloudpit:'),
298
+ MCP_COCKPIT_ACT_SCOPE.replace('cloudcli:', 'cloudpit:'),
299
+ ]),
300
+ navigate: issue(tokens, 'cockpit-navigate', ['cloudpit:navigate']),
297
301
  };
298
302
 
299
303
  const app = express();
@@ -94,11 +94,11 @@ const SESSION_ROWS = [
94
94
  ];
95
95
 
96
96
  /** The scope each probed tool requires, from the one `ACCESS_TOKEN_SCOPES` vocabulary. */
97
- const SEND_SCOPES = ['cloudcli:session:send'];
98
- const CREATE_SCOPES = ['cloudcli:session:create'];
99
- const READ_SCOPES = ['cloudcli:read'];
100
- const APPROVE_SCOPES = ['cloudcli:approve'];
101
- const NAVIGATE_SCOPES = ['cloudcli:navigate'];
97
+ const SEND_SCOPES = ['cloudpit:session:send'];
98
+ const CREATE_SCOPES = ['cloudpit:session:create'];
99
+ const READ_SCOPES = ['cloudpit:read'];
100
+ const APPROVE_SCOPES = ['cloudpit:approve'];
101
+ const NAVIGATE_SCOPES = ['cloudpit:navigate'];
102
102
 
103
103
  type Registry = ReturnType<typeof createChatRunRegistry>;
104
104
 
@@ -567,7 +567,7 @@ test('(b2) a labelled session_create stamps the run its first message opened', {
567
567
 
568
568
  test('(c) sessions_list narrows to the sessions whose live run carries the label', { concurrency: false }, async () => {
569
569
  await withHarness(async (harness) => {
570
- const token = harness.issue(['cloudcli:read', 'cloudcli:session:send']).token;
570
+ const token = harness.issue(['cloudpit:read', 'cloudpit:session:send']).token;
571
571
  await labelSession(harness, token, 'sess-a', LABEL);
572
572
  await labelSession(harness, token, 'sess-b', LABEL);
573
573
  // A third running session under the OTHER label proves the filter is an
@@ -611,7 +611,7 @@ test('(c) sessions_list narrows to the sessions whose live run carries the label
611
611
 
612
612
  test('(c2) mcp_usage_stats aggregates exactly the audit rows carrying the label', { concurrency: false }, async () => {
613
613
  await withHarness(async (harness) => {
614
- const token = harness.issue(['cloudcli:read', 'cloudcli:session:send']).token;
614
+ const token = harness.issue(['cloudpit:read', 'cloudpit:session:send']).token;
615
615
  await labelSession(harness, token, 'sess-a', LABEL);
616
616
  await labelSession(harness, token, 'sess-b', LABEL);
617
617
  await labelSession(harness, token, 'sess-c', OTHER_LABEL);
@@ -646,7 +646,7 @@ test('(c2) mcp_usage_stats aggregates exactly the audit rows carrying the label'
646
646
 
647
647
  test('(d) a labelled call opens no extra run, writes only its own row and changes no state', { concurrency: false }, async () => {
648
648
  await withHarness(async (harness) => {
649
- const token = harness.issue(['cloudcli:read', 'cloudcli:session:send']).token;
649
+ const token = harness.issue(['cloudpit:read', 'cloudpit:session:send']).token;
650
650
 
651
651
  const runsBefore = harness.registry.listRecentRuns().length;
652
652
  const rowsBefore = mcpAuditLogDb.count();
@@ -109,6 +109,7 @@ type ChatControlService = ReturnType<typeof createChatControlService>;
109
109
  const USER_ONE = 1;
110
110
  const DEBUG_PROVIDER = DEBUG_AGENT_PROVIDER_ID as LLMProvider;
111
111
  const SESSION_SEND_SCOPE = 'cloudcli:session:send';
112
+ const wire = (scopes: string[]) => scopes.map((scope) => scope.replace('cloudcli:', 'cloudpit:'));
112
113
  const READ_SCOPE = 'cloudcli:read';
113
114
 
114
115
  /** The seed turn the scenario opens with. Not what the draft tools submit. */
@@ -298,13 +299,13 @@ async function withHarness(options: HarnessOptions, run: (harness: Harness) => P
298
299
  const mainToken = tokens.issueToken({
299
300
  userId: USER_ONE,
300
301
  name: 'gap-mcp-draft-main',
301
- scopes: [READ_SCOPE, SESSION_SEND_SCOPE],
302
+ scopes: wire([READ_SCOPE, SESSION_SEND_SCOPE]),
302
303
  expiresInDays: 30,
303
304
  });
304
305
  const readToken = tokens.issueToken({
305
306
  userId: USER_ONE,
306
307
  name: 'gap-mcp-draft-read',
307
- scopes: [READ_SCOPE],
308
+ scopes: wire([READ_SCOPE]),
308
309
  expiresInDays: 30,
309
310
  });
310
311
  if (!mainToken.ok || !readToken.ok) {
@@ -1167,7 +1167,7 @@ function extractStringLiterals(source: string): SourceLiteral[] {
1167
1167
  * router renders).
1168
1168
  *
1169
1169
  * `mcp-write-notification.ts` is DELIBERATELY excluded: it composes the
1170
- * notification a write call raises for the CloudCLI USER (title / body of an
1170
+ * notification a write call raises for the Cloudpit USER (title / body of an
1171
1171
  * in-app notification), not copy sent to the MCP caller, and it is outside
1172
1172
  * AC-289's field list. Translating it would change user-facing product copy in
1173
1173
  * a task that is about the caller-facing contract. `mcp-client-name.ts` carries
@@ -616,8 +616,8 @@ test('(b) the three barrels export the GOAL-020 symbols and the gateway consumes
616
616
 
617
617
  const USER_ONE = 1;
618
618
  const DEBUG_PROVIDER = DEBUG_AGENT_PROVIDER_ID as LLMProvider;
619
- const WRITE_SCOPE = 'cloudcli:session:send';
620
- const READ_SCOPE = 'cloudcli:read';
619
+ const WRITE_SCOPE = 'cloudpit:session:send';
620
+ const READ_SCOPE = 'cloudpit:read';
621
621
  const RUN_ALIVE_MS = 1_200;
622
622
 
623
623
  type SpyCaller = { userId: string | number | null; via: string };
@@ -406,7 +406,7 @@ async function withGateway(run: (harness: Harness) => Promise<void>): Promise<vo
406
406
  const clients = new Set<Client>();
407
407
 
408
408
  const issue = (scopes: string[]): { id: number; token: string } => {
409
- const issued = tokens.issueToken({ userId: USER_ONE, name: 'ac286', scopes, expiresInDays: 30 });
409
+ const issued = tokens.issueToken({ userId: USER_ONE, name: 'ac286', scopes: scopes.map((scope) => scope.replace('cloudcli:', 'cloudpit:')), expiresInDays: 30 });
410
410
  if (!issued.ok) {
411
411
  throw new Error('the harness issued a token with a lifetime the service rejects');
412
412
  }
@@ -302,7 +302,7 @@ async function withKnowledgeFactsHarness(run: HarnessRun, options: HarnessOption
302
302
  const readToken = tokens.issueToken({
303
303
  userId: USER_ONE,
304
304
  name: 'mcp-knowledge-facts',
305
- scopes: ['cloudcli:read'],
305
+ scopes: ['cloudpit:read'],
306
306
  expiresInDays: 30,
307
307
  });
308
308
  if (!readToken.ok) throw new Error('the harness must mint a read token');
@@ -525,7 +525,7 @@ async function withHarness(run: (harness: Harness) => Promise<void>): Promise<vo
525
525
  const issued = tokens.issueToken({
526
526
  userId: USER_ONE,
527
527
  name: 'ac287-criterion',
528
- scopes: ALL_SCOPES,
528
+ scopes: ALL_SCOPES.map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
529
529
  expiresInDays: 30,
530
530
  });
531
531
  if (!issued.ok) {
@@ -398,7 +398,8 @@ test('(b) a valid PAT and a valid OAuth token are both admitted and the audit ro
398
398
  await withOauthChallengeServer(async (h) => {
399
399
  h.env.MCP_OAUTH_ENABLED = 'true';
400
400
 
401
- const pat = h.issuePat([PROBE_SCOPE]);
401
+ // 3.0 mints the wire spelling; the probe tool's declaration stays canonical.
402
+ const pat = h.issuePat(['cloudpit:read']);
402
403
  const oauthToken = h.issueOAuthToken([PROBE_SCOPE]);
403
404
 
404
405
  const before = mcpAuditLogDb.count();
@@ -477,7 +478,7 @@ test('(e) an OAuth token missing the tool scope is denied with one denied audit
477
478
  await withOauthChallengeServer(async (h) => {
478
479
  h.env.MCP_OAUTH_ENABLED = 'true';
479
480
 
480
- const sendOnly = h.issueOAuthToken(['cloudcli:session:send']);
481
+ const sendOnly = h.issueOAuthToken(['cloudpit:session:send']);
481
482
  const readOk = h.issueOAuthToken([PROBE_SCOPE]);
482
483
 
483
484
  const before = mcpAuditLogDb.count();
@@ -474,7 +474,7 @@ async function withOverviewHarness(
474
474
 
475
475
  // ---- the tokens ----
476
476
  const tokens = createAccessTokensService({ now: () => new Date(HOST_NOW_MS) });
477
- const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-overview', scopes: ['cloudcli:read'], expiresInDays: 30 });
477
+ const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-overview', scopes: ['cloudpit:read'], expiresInDays: 30 });
478
478
  if (!readToken.ok) {
479
479
  throw new Error('the harness must mint a read token');
480
480
  }
@@ -752,7 +752,7 @@ test('(f) quay_snapshot carries the in-flight reading and overview deliberately
752
752
  assert.equal(refreshed.isError, false, 'the refreshing read must not error');
753
753
  const snapshot = (refreshed.payload as AnyRecord).snapshot as AnyRecord;
754
754
  console.log(`[f] quay_snapshot.inFlight = ${JSON.stringify(snapshot.inFlight)}`);
755
- // The in-flight task reaches the CloudCLI client verbatim, through the real mount.
755
+ // The in-flight task reaches the Cloudpit client verbatim, through the real mount.
756
756
  assert.deepEqual(snapshot.inFlight, IN_FLIGHT_READING, 'the in-flight reading must round-trip verbatim');
757
757
 
758
758
  // Scope guard: `overview`'s per-project summary is AC-247's and this task must not
@@ -111,8 +111,8 @@ type AnyRecord = Record<string, unknown>;
111
111
  // --------------------------- fixture identities ---------------------------
112
112
 
113
113
  const USER_ONE = 1;
114
- const READ_SCOPE = 'cloudcli:read';
115
- const APPROVE_SCOPE = 'cloudcli:approve';
114
+ const READ_SCOPE = 'cloudpit:read';
115
+ const APPROVE_SCOPE = 'cloudpit:approve';
116
116
  /** The deadline leg (b) asserts was INJECTED, not the 55000 default. */
117
117
  const INJECTED_TIMEOUT_MS = 4321;
118
118
  /** The instant every relative reading is measured against. */
@@ -450,9 +450,9 @@ async function withMcpReadTools(
450
450
 
451
451
  // ---- the tokens ----
452
452
  const tokens = createAccessTokensService({ now: () => new Date(NOW_MS) });
453
- const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-read', scopes: ['cloudcli:read'], expiresInDays: 30 });
453
+ const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-read', scopes: ['cloudpit:read'], expiresInDays: 30 });
454
454
  const scopedToken = tokens.issueToken({
455
- userId: USER_ONE, name: 'mcp-other', scopes: ['cloudcli:session:send'], expiresInDays: 30,
455
+ userId: USER_ONE, name: 'mcp-other', scopes: ['cloudpit:session:send'], expiresInDays: 30,
456
456
  });
457
457
  if (!readToken.ok || !scopedToken.ok) {
458
458
  throw new Error('the harness must mint both tokens');
@@ -580,7 +580,7 @@ test('(a) tools/list is exactly the stage-3 read tools, none of them a write too
580
580
  }
581
581
 
582
582
  for (const tool of MCP_STAGE3_READ_TOOLS) {
583
- assert.equal(tool.requiredScope, 'cloudcli:read', `${tool.name} must require cloudcli:read`);
583
+ assert.equal(tool.requiredScope, 'cloudcli:read', `${tool.name} must require the canonical read scope`);
584
584
  }
585
585
  for (const tool of listed.tools) {
586
586
  assert.ok(tool.description && tool.description.length > 0, `${tool.name} must carry a description`);
@@ -321,7 +321,7 @@ async function withRunGetHarness(run: (harness: Harness) => Promise<void>): Prom
321
321
  }
322
322
 
323
323
  const tokens = createAccessTokensService({ now: () => new Date(BASE_MS) });
324
- const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-run-get', scopes: ['cloudcli:read'], expiresInDays: 30 });
324
+ const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-run-get', scopes: ['cloudpit:read'], expiresInDays: 30 });
325
325
  if (!readToken.ok) {
326
326
  throw new Error('the harness must mint a read token');
327
327
  }
@@ -341,7 +341,7 @@ async function withHarness(run: (harness: Harness) => Promise<void>): Promise<vo
341
341
  const issued = tokens.issueToken({
342
342
  userId: USER_ONE,
343
343
  name: 'ac252-criterion',
344
- scopes: [READ_SCOPE, SEND_SCOPE, CONTROL_SCOPE],
344
+ scopes: [READ_SCOPE, SEND_SCOPE, CONTROL_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
345
345
  expiresInDays: 30,
346
346
  });
347
347
  if (!issued.ok) {
@@ -353,13 +353,13 @@ async function withHarness(options: HarnessOptions, run: (harness: Harness) => P
353
353
  const readToken = tokens.issueToken({
354
354
  userId: USER_ONE,
355
355
  name: 'ac273-read',
356
- scopes: [READ_SCOPE],
356
+ scopes: [READ_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
357
357
  expiresInDays: 30,
358
358
  });
359
359
  const controlToken = tokens.issueToken({
360
360
  userId: USER_ONE,
361
361
  name: 'ac273-control',
362
- scopes: [READ_SCOPE, SESSION_CONTROL_SCOPE],
362
+ scopes: [READ_SCOPE, SESSION_CONTROL_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
363
363
  expiresInDays: 30,
364
364
  });
365
365
  if (!readToken.ok || !controlToken.ok) {
@@ -376,7 +376,7 @@ async function withHarness(run: (harness: Harness) => Promise<void>): Promise<vo
376
376
 
377
377
  const tokens = createAccessTokensService({ now: () => new Date() });
378
378
  const mint = (name: string, scopes: string[]): string => {
379
- const issued = tokens.issueToken({ userId: USER_ONE, name, scopes, expiresInDays: 30 });
379
+ const issued = tokens.issueToken({ userId: USER_ONE, name, scopes: scopes.map((scope) => scope.replace('cloudcli:', 'cloudpit:')), expiresInDays: 30 });
380
380
  if (!issued.ok) {
381
381
  throw new Error(`the harness must mint the ${name} token`);
382
382
  }
@@ -629,7 +629,7 @@ async function withHarness(options: HarnessOptions, run: (harness: Harness) => P
629
629
 
630
630
  const tokens = createAccessTokensService({ now: () => new Date() });
631
631
  const mint = (name: string, scopes: string[]): string => {
632
- const issued = tokens.issueToken({ userId: USER_ONE, name, scopes, expiresInDays: 30 });
632
+ const issued = tokens.issueToken({ userId: USER_ONE, name, scopes: scopes.map((scope) => scope.replace('cloudcli:', 'cloudpit:')), expiresInDays: 30 });
633
633
  if (!issued.ok) {
634
634
  throw new Error(`the harness must mint the ${name} token`);
635
635
  }
@@ -434,13 +434,13 @@ async function withHarness(options: HarnessOptions, run: (harness: Harness) => P
434
434
  const mainToken = tokens.issueToken({
435
435
  userId: USER_ONE,
436
436
  name: 'ac272-main',
437
- scopes: [READ_SCOPE, SESSION_SEND_SCOPE, SESSION_CONTROL_SCOPE],
437
+ scopes: [READ_SCOPE, SESSION_SEND_SCOPE, SESSION_CONTROL_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
438
438
  expiresInDays: 30,
439
439
  });
440
440
  const sendOnlyToken = tokens.issueToken({
441
441
  userId: USER_ONE,
442
442
  name: 'ac272-send-only',
443
- scopes: [READ_SCOPE, SESSION_SEND_SCOPE],
443
+ scopes: [READ_SCOPE, SESSION_SEND_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
444
444
  expiresInDays: 30,
445
445
  });
446
446
  if (!mainToken.ok || !sendOnlyToken.ok) {
@@ -278,7 +278,7 @@ async function withPruningSearch(run: (harness: Harness, fixture: Fixture) => Pr
278
278
  assert.ok(projectId, 'the fixture project must be registered');
279
279
 
280
280
  const tokens = createAccessTokensService({ now: () => new Date(NOW_MS) });
281
- const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-search-pruning', scopes: ['cloudcli:read'], expiresInDays: 30 });
281
+ const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-search-pruning', scopes: ['cloudpit:read'], expiresInDays: 30 });
282
282
  if (!readToken.ok) {
283
283
  throw new Error('the harness must mint a cloudcli:read token');
284
284
  }
@@ -363,7 +363,7 @@ async function withSessionSearch(
363
363
 
364
364
  // ---- the tokens ----
365
365
  const tokens = createAccessTokensService({ now: () => new Date(NOW_MS) });
366
- const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-search', scopes: ['cloudcli:read'], expiresInDays: 30 });
366
+ const readToken = tokens.issueToken({ userId: USER_ONE, name: 'mcp-search', scopes: ['cloudpit:read'], expiresInDays: 30 });
367
367
  if (!readToken.ok) {
368
368
  throw new Error('the harness must mint a cloudcli:read token');
369
369
  }
@@ -427,13 +427,13 @@ async function withHarness(options: HarnessOptions, run: (harness: Harness) => P
427
427
  const mainToken = tokens.issueToken({
428
428
  userId: USER_ONE,
429
429
  name: 'ac249-main',
430
- scopes: [READ_SCOPE, SESSION_SEND_SCOPE, APPROVE_SCOPE],
430
+ scopes: [READ_SCOPE, SESSION_SEND_SCOPE, APPROVE_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
431
431
  expiresInDays: 30,
432
432
  });
433
433
  const readToken = tokens.issueToken({
434
434
  userId: USER_ONE,
435
435
  name: 'ac249-read',
436
- scopes: [READ_SCOPE],
436
+ scopes: [READ_SCOPE].map((scope) => scope.replace('cloudcli:', 'cloudpit:')),
437
437
  expiresInDays: 30,
438
438
  });
439
439
  if (!mainToken.ok || !readToken.ok) {