@yalehwang/cloudpit 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api-docs.html +3 -3
- package/dist/assets/{abnfDiagram-N423BO3Z-D5yLnMt9.js → abnfDiagram-N423BO3Z-D7Xt05gV.js} +1 -1
- package/dist/assets/{abnfDiagram-N423BO3Z-bTHtQIhR.js → abnfDiagram-N423BO3Z-dmPRRPEm.js} +1 -1
- package/dist/assets/{arc-1DmrBEyG.js → arc-B7W3R5qH.js} +1 -1
- package/dist/assets/{arc-BlGK--01.js → arc-BHMlIcaQ.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G--lzbKBn9.js → architectureDiagram-T3A2C74G-CUUpAoN0.js} +1 -1
- package/dist/assets/{architectureDiagram-T3A2C74G-7lKNAbUU.js → architectureDiagram-T3A2C74G-DpXhbHxu.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-17cdO9zs.js → blockDiagram-VBNYF7ZC-Bf0yfNxj.js} +1 -1
- package/dist/assets/{blockDiagram-VBNYF7ZC-BPavJfDj.js → blockDiagram-VBNYF7ZC-Cki9AOhc.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-Bm1-2w3b.js → c4Diagram-5PPSVZJV-DK2RqNDO.js} +1 -1
- package/dist/assets/{c4Diagram-5PPSVZJV-aHvFL3Wb.js → c4Diagram-5PPSVZJV-DyhTF0e5.js} +1 -1
- package/dist/assets/channel-DTLMNzbH.js +1 -0
- package/dist/assets/channel-DiqxUuPf.js +1 -0
- package/dist/assets/{chunk-2GRJ4B5K-D7WqZewM.js → chunk-2GRJ4B5K-BYtByJbf.js} +1 -1
- package/dist/assets/{chunk-2GRJ4B5K-DbwzBiPF.js → chunk-2GRJ4B5K-CksFgocc.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-DdCr89uy.js → chunk-2Q5K7J3B-D2kQa5TZ.js} +1 -1
- package/dist/assets/{chunk-2Q5K7J3B-TFd0ECKO.js → chunk-2Q5K7J3B-NSSX86FA.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-BdhRBpEi.js → chunk-5RXB4S5H-DNNYC8_t.js} +1 -1
- package/dist/assets/{chunk-5RXB4S5H-D0SQ3nIe.js → chunk-5RXB4S5H-Rx0YaqNI.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-B9Lv3cWR.js → chunk-5VM5RSS4-B1k4I4CX.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-DioqTIvB.js → chunk-5VM5RSS4-CsvQj3QC.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-09bwlcIv.js → chunk-6Q2QTUOP-48-dEgAs.js} +1 -1
- package/dist/assets/{chunk-6Q2QTUOP-JuhPJZZL.js → chunk-6Q2QTUOP-DCMSW5_0.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-C6f2SgCw.js → chunk-GF5L2VYU-CGyvOsdN.js} +1 -1
- package/dist/assets/{chunk-GF5L2VYU-DzD9aOyp.js → chunk-GF5L2VYU-YXe113hp.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BggnWNZv.js → chunk-JWPE2WC7-BT7vCW4x.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-Dte_Ax9K.js → chunk-JWPE2WC7-D2K1Oywq.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-9TCQV92m.js → chunk-KBJHAD2P-CQZWamtE.js} +1 -1
- package/dist/assets/{chunk-KBJHAD2P-DDnJp7kJ.js → chunk-KBJHAD2P-gpEwZrNy.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-CE2Y4D_h.js → chunk-RYQCIY6F-BI0fMtjY.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DsgFSTNw.js → chunk-RYQCIY6F-vguRdb4F.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-B1FIfsqq.js → chunk-XXDRQBXY-B99qH1_w.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-B4YfaqTO.js → chunk-XXDRQBXY-DZLJnbBB.js} +1 -1
- package/dist/assets/classDiagram-JCYQIIEL-BaV-s6x8.js +1 -0
- package/dist/assets/classDiagram-JCYQIIEL-D4M03B4L.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-BaV-s6x8.js +1 -0
- package/dist/assets/classDiagram-v2-OCEON4UE-D4M03B4L.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-C1AG5Pib.js → cose-bilkent-JH36ORCC-EsVnz-E6.js} +1 -1
- package/dist/assets/{cose-bilkent-JH36ORCC-lMwWDibI.js → cose-bilkent-JH36ORCC-VI2OjCIx.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-BlabniRL.js → cynefin-VYW2F7L2-BVYg0ixs.js} +1 -1
- package/dist/assets/{cynefin-VYW2F7L2-W-c-z4IW.js → cynefin-VYW2F7L2-BnHmA5I2.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-BtTep_pq.js → cynefinDiagram-MW4NZA55-B-OCRLIw.js} +1 -1
- package/dist/assets/{cynefinDiagram-MW4NZA55-Due6EIPh.js → cynefinDiagram-MW4NZA55-ItLlzjDR.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-CWLaFfdt.js → dagre-VZM6K2ZE-DkVDkAWJ.js} +1 -1
- package/dist/assets/{dagre-VZM6K2ZE-DZldvqiQ.js → dagre-VZM6K2ZE-bYR4z8-Z.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-RnmUHYwN.js → diagram-7IWD3JNH-DjXMue67.js} +1 -1
- package/dist/assets/{diagram-7IWD3JNH-Di-7-nSA.js → diagram-7IWD3JNH-FNEXlm5k.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-Wybyn8fw.js → diagram-B4RE2ZJO-73NYiO_P.js} +1 -1
- package/dist/assets/{diagram-B4RE2ZJO-mrK79C2E.js → diagram-B4RE2ZJO-dB4QHq0D.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-JY6FqSFu.js → diagram-LBJQPF4R-DyKT610O.js} +1 -1
- package/dist/assets/{diagram-LBJQPF4R-sWhu2VLy.js → diagram-LBJQPF4R-rMgmnjvd.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-BJ4T0WGp.js → diagram-Q27KOJAE-BvsfmmQt.js} +1 -1
- package/dist/assets/{diagram-Q27KOJAE-DyGT9KhB.js → diagram-Q27KOJAE-c6DEjLQX.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-oXFJAndB.js → diagram-UB23O5K3-BMo2VXVb.js} +1 -1
- package/dist/assets/{diagram-UB23O5K3-tTd8qwEM.js → diagram-UB23O5K3-DRMKefnZ.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-DV67cBe6.js → ebnfDiagram-BXEA7PRR-BrOAekWh.js} +1 -1
- package/dist/assets/{ebnfDiagram-BXEA7PRR-OQGm8tPs.js → ebnfDiagram-BXEA7PRR-YmQkylwV.js} +1 -1
- package/dist/assets/{elk-BRx4gEGg.js → elk-Hz3WRESK.js} +1 -1
- package/dist/assets/{elk-CdAQJ-NA.js → elk-tPSZwRVB.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-BhD2xZ2I.js → erDiagram-JOGREHBK-BlaZnoQi.js} +1 -1
- package/dist/assets/{erDiagram-JOGREHBK-BqP8DqqW.js → erDiagram-JOGREHBK-CRCfRUXt.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-B4AjZxPJ.js → flowDiagram-UKHOOZJN-DQ1gbjxo.js} +1 -1
- package/dist/assets/{flowDiagram-UKHOOZJN-CP_1WsW4.js → flowDiagram-UKHOOZJN-Dinlbmds.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-BMk6nngr.js → ganttDiagram-PKOTCBZU-CMGpcBZO.js} +1 -1
- package/dist/assets/{ganttDiagram-PKOTCBZU-B_ce39Ld.js → ganttDiagram-PKOTCBZU-Eh94zuPI.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-CnZA42iA.js → gitGraphDiagram-DS77QQ5N-Bp8xIZbk.js} +1 -1
- package/dist/assets/{gitGraphDiagram-DS77QQ5N-DqEz_iTn.js → gitGraphDiagram-DS77QQ5N-Cu-b4YNw.js} +1 -1
- package/dist/assets/index-51e8fagd.css +32 -0
- package/dist/assets/{index-D5nLH7qP.js → index-CQE9C6k6.js} +356 -356
- package/dist/assets/{index-CqyOGerp.js → index-S8ow0XfK.js} +356 -356
- package/dist/assets/{infoDiagram-6WML65LV-BQf7m4X4.js → infoDiagram-6WML65LV-CClEEtTq.js} +1 -1
- package/dist/assets/{infoDiagram-6WML65LV-Dntf4YFM.js → infoDiagram-6WML65LV-QmHeojgl.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-BDjsldAI.js → ishikawaDiagram-WSZJBQD7-BemSj9lN.js} +1 -1
- package/dist/assets/{ishikawaDiagram-WSZJBQD7-BqXpJeoL.js → ishikawaDiagram-WSZJBQD7-nw48g1vr.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-CBcFzP2M.js → journeyDiagram-NVQOT4AX-DeNtO6OU.js} +1 -1
- package/dist/assets/{journeyDiagram-NVQOT4AX-DoWKjgKd.js → journeyDiagram-NVQOT4AX-q1lCfOYn.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-9bspl7j-.js → kanban-definition-27J2QSJJ-Bzhu6hql.js} +1 -1
- package/dist/assets/{kanban-definition-27J2QSJJ-Cjxa-Fbb.js → kanban-definition-27J2QSJJ-VfvD33YG.js} +1 -1
- package/dist/assets/{linear-YogAXmU_.js → linear-C0Kwu3Yp.js} +1 -1
- package/dist/assets/{linear-lIhI5Y8l.js → linear-CbM_4-fP.js} +1 -1
- package/dist/assets/{mermaid.core-2Spxcrg7.js → mermaid.core-G2huIsXn.js} +5 -5
- package/dist/assets/{mermaid.core-BxxInCBm.js → mermaid.core-fvTQFUX1.js} +5 -5
- package/dist/assets/{mindmap-definition-FAOFIHXS-DblO5EG4.js → mindmap-definition-FAOFIHXS-BONvuyvz.js} +1 -1
- package/dist/assets/{mindmap-definition-FAOFIHXS-_nlvJ9VK.js → mindmap-definition-FAOFIHXS-BzYawGKQ.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-BBJFPAZG.js → pegDiagram-VL7TDLO6-Df2HAKGH.js} +1 -1
- package/dist/assets/{pegDiagram-VL7TDLO6-DhRH7YRf.js → pegDiagram-VL7TDLO6-DnMwBHn_.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-4Qy7Nk4U.js → pieDiagram-7S7Q4E2Y-Cd3-a-dM.js} +1 -1
- package/dist/assets/{pieDiagram-7S7Q4E2Y-BUtdeYBT.js → pieDiagram-7S7Q4E2Y-LV6TOhOD.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-BUoIDY1r.js → quadrantDiagram-CIZ2JOQS-8VOnA3FV.js} +1 -1
- package/dist/assets/{quadrantDiagram-CIZ2JOQS-D90kdHA1.js → quadrantDiagram-CIZ2JOQS-CnwxFPxh.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-CJf9--tj.js → railroadDiagram-AXF67PYL-CXBFj3Iu.js} +1 -1
- package/dist/assets/{railroadDiagram-AXF67PYL-D3S1oliC.js → railroadDiagram-AXF67PYL-DLoAPcsb.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-C04jhjS6.js → requirementDiagram-LRYGKXZP-LrVlZXSz.js} +1 -1
- package/dist/assets/{requirementDiagram-LRYGKXZP-cQaGai5h.js → requirementDiagram-LRYGKXZP-pakITowN.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-AT4cTVbY.js → sankeyDiagram-W5VNT64P-BIQQ8A1I.js} +1 -1
- package/dist/assets/{sankeyDiagram-W5VNT64P-DfFUdqYO.js → sankeyDiagram-W5VNT64P-C6QWOxNM.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-DbjhG030.js → sequenceDiagram-SI44F4Z6-CpHBe2CG.js} +1 -1
- package/dist/assets/{sequenceDiagram-SI44F4Z6-DKjdupix.js → sequenceDiagram-SI44F4Z6-cnLxaxcV.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-CCcKLP8m.js → sizeCapture-X5ZJPWSS-3g-1onHD.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-DGxRWxeo.js → sizeCapture-X5ZJPWSS-4U6b3PSL.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-D7wGCNb7.js → stateDiagram-OKZ733FA-CFwVDdlY.js} +1 -1
- package/dist/assets/{stateDiagram-OKZ733FA-qdMAailp.js → stateDiagram-OKZ733FA-CKVGJcM2.js} +1 -1
- package/dist/assets/{stateDiagram-v2-UEYNNEHI-BbmmtA9w.js → stateDiagram-v2-UEYNNEHI-Dnbk8ftm.js} +1 -1
- package/dist/assets/{stateDiagram-v2-UEYNNEHI-Diz_hFvh.js → stateDiagram-v2-UEYNNEHI-rlA-woxH.js} +1 -1
- package/dist/assets/{swimlanes-SLNWSIFB-CZgIPz6I.js → swimlanes-SLNWSIFB-DCwz8-mf.js} +2 -2
- package/dist/assets/{swimlanes-SLNWSIFB-B16H-6OU.js → swimlanes-SLNWSIFB-M9Oumwnl.js} +2 -2
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CTtTyW6-.js +8 -0
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-Caohx6WZ.js +8 -0
- package/dist/assets/{timeline-definition-Z64GVDOM-7r7OVlrT.js → timeline-definition-Z64GVDOM-BVmfjoWH.js} +1 -1
- package/dist/assets/{timeline-definition-Z64GVDOM-nhnkS_wy.js → timeline-definition-Z64GVDOM-DyXvto1l.js} +1 -1
- package/dist/assets/{vennDiagram-T6HMQDX7-B1piFYrz.js → vennDiagram-T6HMQDX7-CNe6zorb.js} +1 -1
- package/dist/assets/{vennDiagram-T6HMQDX7-x8SJTFhK.js → vennDiagram-T6HMQDX7-DyzOWKx3.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-BdD4GExj.js → wardleyDiagram-T6FBY63Y-D5YvMVwa.js} +1 -1
- package/dist/assets/{wardleyDiagram-T6FBY63Y-C90xqNVS.js → wardleyDiagram-T6FBY63Y-DXo8BCrA.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M--Ndoz0Cq.js → xychartDiagram-ELKLHX3M-CIBffVxC.js} +1 -1
- package/dist/assets/{xychartDiagram-ELKLHX3M-BAKns-7o.js → xychartDiagram-ELKLHX3M-XlsWelDb.js} +1 -1
- package/dist/build-info.json +2 -2
- package/dist/convert-icons.md +10 -46
- package/dist/favicon.png +0 -0
- package/dist/favicon.svg +1 -9
- package/dist/generate-icons.js +67 -47
- package/dist/icons/icon-128x128.png +0 -0
- package/dist/icons/icon-144x144.png +0 -0
- package/dist/icons/icon-152x152.png +0 -0
- package/dist/icons/icon-192x192.png +0 -0
- package/dist/icons/icon-384x384.png +0 -0
- package/dist/icons/icon-512x512.png +0 -0
- package/dist/icons/icon-72x72.png +0 -0
- package/dist/icons/icon-96x96.png +0 -0
- package/dist/index.html +2 -2
- package/dist/logo-128.png +0 -0
- package/dist/logo-256.png +0 -0
- package/dist/logo-32.png +0 -0
- package/dist/logo-512.png +0 -0
- package/dist/logo-64.png +0 -0
- package/dist/logo-source.png +0 -0
- package/dist/logo.svg +1 -17
- package/dist/sw.js +7 -9
- package/dist-server/build-info.json +2 -2
- package/dist-server/server/load-env.js +12 -4
- package/dist-server/server/load-env.js.map +1 -1
- package/dist-server/server/modules/browser-use/browser-use.service.js +33 -11
- package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
- package/dist-server/server/modules/browser-use/index.js +4 -4
- package/dist-server/server/modules/browser-use/index.js.map +1 -1
- package/dist-server/server/modules/browser-use/mcp-server-names.js +6 -4
- package/dist-server/server/modules/browser-use/mcp-server-names.js.map +1 -1
- package/dist-server/server/modules/browser-use/tests/browser-use.service.test.js +49 -1
- package/dist-server/server/modules/browser-use/tests/browser-use.service.test.js.map +1 -1
- package/dist-server/server/modules/cli/asset-migration-files.js +74 -0
- package/dist-server/server/modules/cli/asset-migration-files.js.map +1 -0
- package/dist-server/server/modules/cli/asset-migration-report.js +80 -0
- package/dist-server/server/modules/cli/asset-migration-report.js.map +1 -0
- package/dist-server/server/modules/cli/asset-migration-store.js +153 -0
- package/dist-server/server/modules/cli/asset-migration-store.js.map +1 -0
- package/dist-server/server/modules/cli/asset-migration.service.js +161 -0
- package/dist-server/server/modules/cli/asset-migration.service.js.map +1 -0
- package/dist-server/server/modules/cli/browser-use-mcp.js +9 -4
- package/dist-server/server/modules/cli/browser-use-mcp.js.map +1 -1
- package/dist-server/server/modules/cli/cli.module.js +21 -1
- package/dist-server/server/modules/cli/cli.module.js.map +1 -1
- package/dist-server/server/modules/cli/cli.service.js +6 -1
- package/dist-server/server/modules/cli/cli.service.js.map +1 -1
- package/dist-server/server/modules/cli/tests/asset-migration.service.test.js +275 -0
- package/dist-server/server/modules/cli/tests/asset-migration.service.test.js.map +1 -0
- package/dist-server/server/modules/cli/tests/browser-use-mcp-entry.test.js +157 -0
- package/dist-server/server/modules/cli/tests/browser-use-mcp-entry.test.js.map +1 -1
- package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js +1 -0
- package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js.map +1 -1
- package/dist-server/server/modules/cli/tests/cli.service.test.js +6 -1
- package/dist-server/server/modules/cli/tests/cli.service.test.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-brief-prompt.js +1 -1
- package/dist-server/server/modules/cockpit/cockpit-card-actions.js +19 -3
- package/dist-server/server/modules/cockpit/cockpit-card-actions.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-card-feedback-store.js +94 -9
- package/dist-server/server/modules/cockpit/cockpit-card-feedback-store.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-card-registry.js +1 -1
- package/dist-server/server/modules/cockpit/cockpit-fleet-card-projection.js +3 -0
- package/dist-server/server/modules/cockpit/cockpit-fleet-card-projection.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit-knowledge-reading.js +16 -0
- package/dist-server/server/modules/cockpit/cockpit-knowledge-reading.js.map +1 -1
- package/dist-server/server/modules/cockpit/cockpit.module.js +1 -1
- package/dist-server/server/modules/cockpit/tests/cockpit-card-feedback.test.js +96 -1
- package/dist-server/server/modules/cockpit/tests/cockpit-card-feedback.test.js.map +1 -1
- package/dist-server/server/modules/cockpit/tests/cockpit-fleet-card-provider.test.js +2 -2
- package/dist-server/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.js +169 -3
- package/dist-server/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.js.map +1 -1
- package/dist-server/server/modules/context-events/context-event-writer.js +5 -5
- package/dist-server/server/modules/context-events/context-events.module.js +2 -2
- package/dist-server/server/modules/context-events/session-ask-stream-reader.js +1 -1
- package/dist-server/server/modules/context-events/session-blocked-events.js +3 -3
- package/dist-server/server/modules/context-events/tests/session-ask-event-writer.test.js +1 -1
- package/dist-server/server/modules/context-events/tests/session-blocked-events.test.js +3 -3
- package/dist-server/server/modules/context-events/tests/session-run-events.test.js +1 -1
- package/dist-server/server/modules/database/migrations.js +23 -1
- package/dist-server/server/modules/database/migrations.js.map +1 -1
- package/dist-server/server/modules/database/repositories/sessions.db.js +25 -4
- package/dist-server/server/modules/database/repositories/sessions.db.js.map +1 -1
- package/dist-server/server/modules/database/repositories/voice-user-identifiers.db.js +1 -1
- package/dist-server/server/modules/database/schema.js +16 -2
- package/dist-server/server/modules/database/schema.js.map +1 -1
- package/dist-server/server/modules/database/tests/migrations-ensure-columns.test.js +2 -0
- package/dist-server/server/modules/database/tests/migrations-ensure-columns.test.js.map +1 -1
- package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +2 -2
- package/dist-server/server/modules/debug-agent/tests/debug-agent-permission-popup.test.js +2 -2
- package/dist-server/server/modules/liaison/liaison-deliver.service.js +3 -3
- package/dist-server/server/modules/liaison/liaison.module.js +1 -1
- package/dist-server/server/modules/mcp-gateway/mcp-gateway.auth.js +3 -2
- package/dist-server/server/modules/mcp-gateway/mcp-gateway.auth.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/mcp-self-target.js +2 -2
- package/dist-server/server/modules/mcp-gateway/mcp-session-send.js +7 -0
- package/dist-server/server/modules/mcp-gateway/mcp-session-send.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/mcp-tool-annotations.js +4 -4
- package/dist-server/server/modules/mcp-gateway/oauth-metadata.gate.js +4 -2
- package/dist-server/server/modules/mcp-gateway/oauth-metadata.gate.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/knowledge-effective-config-proof.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/knowledge-peer-correlation-proof.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-approvals.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-approvals.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-audit-route.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-audit.test.js +4 -4
- package/dist-server/server/modules/mcp-gateway/tests/mcp-auth.test.js +3 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-auth.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.js +7 -3
- package/dist-server/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-correlation-id.test.js +8 -8
- package/dist-server/server/modules/mcp-gateway/tests/mcp-draft.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-draft.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-english-only.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-gateway-wiring.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-knowledge-facts.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.js +3 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-overview.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-pending-interaction.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-read-tools.test.js +3 -3
- package/dist-server/server/modules/mcp-gateway/tests/mcp-read-tools.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-run-get.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-self-target.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-self-target.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-background.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-background.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-host-control.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-host-control.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-search-pruning.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-search.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-send.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-session-send.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-ui-last-opened.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-usage-stats.test.js +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-usage-stats.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/mcp-write-notification.test.js +2 -2
- package/dist-server/server/modules/mcp-gateway/tests/mcp-write-notification.test.js.map +1 -1
- package/dist-server/server/modules/mcp-gateway/tests/oauth-flow.e2e.test.js +3 -3
- package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
- package/dist-server/server/modules/oauth/access-tokens.service.js +8 -8
- package/dist-server/server/modules/oauth/oauth-consent.service.js +20 -15
- package/dist-server/server/modules/oauth/oauth-consent.service.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/access-token-scopes.test.js +54 -34
- package/dist-server/server/modules/oauth/tests/access-token-scopes.test.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/access-tokens.service.test.js +35 -14
- package/dist-server/server/modules/oauth/tests/access-tokens.service.test.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/oauth-consent-page.test.js +27 -22
- package/dist-server/server/modules/oauth/tests/oauth-consent-page.test.js.map +1 -1
- package/dist-server/server/modules/oauth/tests/oauth-consent-ratelimit.test.js +2 -2
- package/dist-server/server/modules/oauth/tests/token-info.routes.test.js +2 -2
- package/dist-server/server/modules/oauth/tests/token-info.routes.test.js.map +1 -1
- package/dist-server/server/modules/observation/blind-spots.js +1 -1
- package/dist-server/server/modules/observation/observation-store.js +50 -17
- package/dist-server/server/modules/observation/observation-store.js.map +1 -1
- package/dist-server/server/modules/observation/observation-uri.js +31 -19
- package/dist-server/server/modules/observation/observation-uri.js.map +1 -1
- package/dist-server/server/modules/observation/observation.routes.js +1 -1
- package/dist-server/server/modules/observation/project-truth.js +1 -1
- package/dist-server/server/modules/observation/session-ask-decision-answer.js +2 -1
- package/dist-server/server/modules/observation/session-ask-decision-answer.js.map +1 -1
- package/dist-server/server/modules/observation/session-digest-llm.js +7 -1
- package/dist-server/server/modules/observation/session-digest-llm.js.map +1 -1
- package/dist-server/server/modules/observation/session-digest.js +39 -5
- package/dist-server/server/modules/observation/session-digest.js.map +1 -1
- package/dist-server/server/modules/observation/tests/architecture-delta.test.js +1 -1
- package/dist-server/server/modules/observation/tests/observation-routes.test.js +9 -0
- package/dist-server/server/modules/observation/tests/observation-routes.test.js.map +1 -1
- package/dist-server/server/modules/observation/tests/observation-store.test.js +38 -0
- package/dist-server/server/modules/observation/tests/observation-store.test.js.map +1 -1
- package/dist-server/server/modules/observation/tests/project-truth.test.js +2 -2
- package/dist-server/server/modules/observation/tests/session-ask-decision-digest.test.js +150 -0
- package/dist-server/server/modules/observation/tests/session-ask-decision-digest.test.js.map +1 -1
- package/dist-server/server/modules/observation/tests/session-digest.test.js +24 -1
- package/dist-server/server/modules/observation/tests/session-digest.test.js.map +1 -1
- package/dist-server/server/modules/providers/index.js +9 -0
- package/dist-server/server/modules/providers/index.js.map +1 -1
- package/dist-server/server/modules/providers/list/claude/claude-host-driver.provider.js +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +22 -3
- package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-app-server.connection.js +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.contract.js +11 -9
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.contract.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.provider.js +15 -1
- package/dist-server/server/modules/providers/list/codex/codex-host-driver.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +14 -3
- package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/codex/codex-provider-injection.js +248 -0
- package/dist-server/server/modules/providers/list/codex/codex-provider-injection.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-resident-provider-launch.js +37 -0
- package/dist-server/server/modules/providers/list/codex/codex-resident-provider-launch.js.map +1 -0
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js +19 -1
- package/dist-server/server/modules/providers/list/codex/codex-runtime.provider.js.map +1 -1
- package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +1 -1
- package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +1 -1
- package/dist-server/server/modules/providers/provider.routes.js +23 -2
- package/dist-server/server/modules/providers/provider.routes.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-models.service.js +136 -106
- package/dist-server/server/modules/providers/services/provider-models.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/provider-runtime.service.js +3 -0
- package/dist-server/server/modules/providers/services/provider-runtime.service.js.map +1 -1
- package/dist-server/server/modules/providers/services/session-model-resolver.js +106 -0
- package/dist-server/server/modules/providers/services/session-model-resolver.js.map +1 -0
- package/dist-server/server/modules/providers/services/session-provider-binding.js +89 -0
- package/dist-server/server/modules/providers/services/session-provider-binding.js.map +1 -0
- package/dist-server/server/modules/providers/services/sessions.service.js +5 -1
- package/dist-server/server/modules/providers/services/sessions.service.js.map +1 -1
- package/dist-server/server/modules/providers/tests/claude-resident-addressable.test.js +2 -2
- package/dist-server/server/modules/providers/tests/claude-session-name-authority.test.js +4 -4
- package/dist-server/server/modules/providers/tests/codex-app-server-protocol.test.js +1 -1
- package/dist-server/server/modules/providers/tests/codex-host-driver-persistent.test.js +2 -2
- package/dist-server/server/modules/providers/tests/codex-provider-model-binding.test.js +270 -0
- package/dist-server/server/modules/providers/tests/codex-provider-model-binding.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-resident-provider-injection.test.js +484 -0
- package/dist-server/server/modules/providers/tests/codex-resident-provider-injection.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-runtime-provider-injection.test.js +228 -0
- package/dist-server/server/modules/providers/tests/codex-runtime-provider-injection.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-session-provider-binding.test.js +306 -0
- package/dist-server/server/modules/providers/tests/codex-session-provider-binding.test.js.map +1 -0
- package/dist-server/server/modules/providers/tests/codex-sessions.test.js +1 -1
- package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +2 -2
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js +15 -0
- package/dist-server/server/modules/providers/tests/provider-models.service.test.js.map +1 -1
- package/dist-server/server/modules/providers/tests/provider.routes.test.js +1 -1
- package/dist-server/server/modules/quay/index.js +1 -1
- package/dist-server/server/modules/quay/quay-fleet-cli.js +1 -1
- package/dist-server/server/modules/quay/quay-fleet-locator.js +2 -2
- package/dist-server/server/modules/quay/quay-fleet-project-id.js +7 -7
- package/dist-server/server/modules/quay/quay-fleet-registry.js +3 -3
- package/dist-server/server/modules/quay/quay-suite-fanin-reader.js +1 -1
- package/dist-server/server/modules/quay/quay-uri-resolve.js +6 -6
- package/dist-server/server/modules/quay/quay.module.js +3 -3
- package/dist-server/server/modules/quay/quay.routes.js +1 -1
- package/dist-server/server/modules/quay/quay.service.js +4 -4
- package/dist-server/server/modules/quay/tests/contracts/fleet-cli-contracts.test.js +3 -3
- package/dist-server/server/modules/quay/tests/contracts/shapes.js +9 -9
- package/dist-server/server/modules/quay/tests/quay-fleet-locator.test.js +1 -1
- package/dist-server/server/modules/quay/tests/quay-fleet-project-id.test.js +4 -4
- package/dist-server/server/modules/quay/tests/quay-uri-resolve.test.js +10 -10
- package/dist-server/server/modules/session-hosts/tests/resident-server-restart.test.js +1 -1
- package/dist-server/server/modules/settings/codex-mcp-gateway.settings.js +1 -1
- package/dist-server/server/modules/settings/codex-model-providers.schema.js +349 -0
- package/dist-server/server/modules/settings/codex-model-providers.schema.js.map +1 -0
- package/dist-server/server/modules/settings/codex-model-providers.service.js +199 -0
- package/dist-server/server/modules/settings/codex-model-providers.service.js.map +1 -0
- package/dist-server/server/modules/settings/codex-model-providers.settings.js +547 -0
- package/dist-server/server/modules/settings/codex-model-providers.settings.js.map +1 -0
- package/dist-server/server/modules/settings/codex-model-providers.store.js +200 -0
- package/dist-server/server/modules/settings/codex-model-providers.store.js.map +1 -0
- package/dist-server/server/modules/settings/index.js +10 -0
- package/dist-server/server/modules/settings/index.js.map +1 -1
- package/dist-server/server/modules/settings/server-settings-file.js +28 -32
- package/dist-server/server/modules/settings/server-settings-file.js.map +1 -1
- package/dist-server/server/modules/settings/server-settings.js +2 -2
- package/dist-server/server/modules/settings/server-settings.js.map +1 -1
- package/dist-server/server/modules/settings/settings.module.js +35 -0
- package/dist-server/server/modules/settings/settings.module.js.map +1 -1
- package/dist-server/server/modules/settings/settings.routes.js +42 -0
- package/dist-server/server/modules/settings/settings.routes.js.map +1 -1
- package/dist-server/server/modules/settings/settings.service.js +8 -21
- package/dist-server/server/modules/settings/settings.service.js.map +1 -1
- package/dist-server/server/modules/settings/tests/cockpit-session-start-settings.routes.test.js +1 -0
- package/dist-server/server/modules/settings/tests/cockpit-session-start-settings.routes.test.js.map +1 -1
- package/dist-server/server/modules/settings/tests/codex-model-providers-settings.test.js +336 -0
- package/dist-server/server/modules/settings/tests/codex-model-providers-settings.test.js.map +1 -0
- package/dist-server/server/modules/settings/tests/codex-provider-advanced.test.js +466 -0
- package/dist-server/server/modules/settings/tests/codex-provider-advanced.test.js.map +1 -0
- package/dist-server/server/modules/settings/tests/codex-provider-import.test.js +475 -0
- package/dist-server/server/modules/settings/tests/codex-provider-import.test.js.map +1 -0
- package/dist-server/server/modules/voice/tests/voice-lexicon.test.js +9 -9
- package/dist-server/server/modules/voice/tests/voice-lexicon.test.js.map +1 -1
- package/dist-server/server/modules/voice/voice-lexicon.js +1 -1
- package/dist-server/server/modules/websocket/services/chat-control.service.js +21 -1
- package/dist-server/server/modules/websocket/services/chat-control.service.js.map +1 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js +25 -1
- package/dist-server/server/modules/websocket/services/chat-websocket.service.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-background-task.test.js +18 -1
- package/dist-server/server/modules/websocket/tests/chat-background-task.test.js.map +1 -1
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js +18 -1
- package/dist-server/server/modules/websocket/tests/chat-stop-task.test.js.map +1 -1
- package/dist-server/server/modules/worktrees/services/worktree-list.service.js +1 -1
- package/dist-server/server/modules/worktrees/services/worktree-open.service.js +1 -1
- package/dist-server/server/modules/worktrees/services/worktree-remove.service.js +1 -1
- package/dist-server/server/shared/brand.js +18 -20
- package/dist-server/server/shared/brand.js.map +1 -1
- package/dist-server/server/shared/data-root-migration.js +3 -2
- package/dist-server/server/shared/data-root-migration.js.map +1 -1
- package/dist-server/server/shared/data-root.js +54 -59
- package/dist-server/server/shared/data-root.js.map +1 -1
- package/dist-server/server/shared/mcp-contract/types.js +20 -15
- package/dist-server/server/shared/mcp-contract/types.js.map +1 -1
- package/dist-server/server/shared/ports/codex-provider-registry.port.js +66 -0
- package/dist-server/server/shared/ports/codex-provider-registry.port.js.map +1 -0
- package/dist-server/server/shared/settings-file.js +120 -6
- package/dist-server/server/shared/settings-file.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-brand-env.test.js +76 -34
- package/dist-server/server/shared/tests/cloudpit-brand-env.test.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-data-root.test.js +35 -18
- package/dist-server/server/shared/tests/cloudpit-data-root.test.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-goal-exit-gate.test.js +153 -17
- package/dist-server/server/shared/tests/cloudpit-goal-exit-gate.test.js.map +1 -1
- package/dist-server/server/shared/tests/cloudpit-runtime-flip.test.js +116 -114
- package/dist-server/server/shared/tests/cloudpit-runtime-flip.test.js.map +1 -1
- package/dist-server/server/shared/tests/frontend-import-cycle-budget.test.js +9 -1
- package/dist-server/server/shared/tests/frontend-import-cycle-budget.test.js.map +1 -1
- package/dist-server/server/shared/tests/quay-test-script.test.js +40 -6
- package/dist-server/server/shared/tests/quay-test-script.test.js.map +1 -1
- package/dist-server/server/shared/tests/settings-file.test.js +58 -2
- package/dist-server/server/shared/tests/settings-file.test.js.map +1 -1
- package/dist-server/server/shared/types.js.map +1 -1
- package/dist-server/server/shared/utils.js +1 -1
- package/electron/appIdMigration.js +467 -0
- package/electron/assets/logo-macos.icns +0 -0
- package/electron/assets/logo-macos.png +0 -0
- package/electron/assets/logo-windows.ico +0 -0
- package/electron/brandEnv.js +64 -0
- package/electron/cloud.js +3 -3
- package/electron/desktopNotifications.js +1 -1
- package/electron/launcher/index.html +1 -1
- package/electron/localServer.js +41 -7
- package/electron/main.js +33 -15
- package/electron/scripts/generate-macos-icon.js +34 -28
- package/electron/scripts/generate-windows-icon.js +66 -0
- package/electron/serverInstaller.js +20 -11
- package/electron/tests/cloudpit-appid-migration.test.mjs +514 -0
- package/electron/tests/cloudpit-brand-env-wiring.test.mjs +324 -0
- package/electron/tests/cloudpit-desktop-identity.test.mjs +42 -19
- package/electron/tests/cloudpit-runtime-identity-surfaces.test.mjs +10 -4
- package/electron/tests/cloudpit-userdata-migration.test.mjs +18 -5
- package/electron/userDataMigration.js +3 -0
- package/package.json +7 -6
- package/public/api-docs.html +3 -3
- package/scripts/brand-allowlist-check.mjs +233 -12
- package/scripts/brand-allowlist-check.test.mjs +270 -1
- package/scripts/cloudpit-distribution-check.mjs +57 -23
- package/scripts/cloudpit-distribution-check.test.mjs +42 -9
- package/scripts/codex-protocol-smoke.mjs +1 -1
- package/scripts/isolated-instance.sh +1 -1
- package/scripts/mcp-smoke.mjs +2 -2
- package/scripts/release/tests/fork-release-workflows.test.mjs +45 -0
- package/scripts/release/tests/server-installer-bundle-url.test.mjs +57 -9
- package/scripts/restart-when-idle.sh +1 -1
- package/scripts/shadow-prediction-report.mjs +1 -1
- package/scripts/suite-duration-baseline.tsv +45 -0
- package/scripts/ui-scenario.mjs +195 -0
- package/scripts/ui-scenarios/codex-provider-import.json +63 -0
- package/scripts/ui-scenarios/codex-provider-settings.json +77 -0
- package/scripts/voice-capture-process-check.false-forms.test.mjs +1 -1
- package/scripts/voice-phase0-report.test.mjs +1 -1
- package/server/load-env.ts +15 -4
- package/server/modules/browser-use/browser-use.service.ts +45 -14
- package/server/modules/browser-use/index.ts +3 -4
- package/server/modules/browser-use/mcp-server-names.ts +6 -5
- package/server/modules/browser-use/tests/browser-use.service.test.ts +63 -1
- package/server/modules/cli/asset-migration-files.ts +96 -0
- package/server/modules/cli/asset-migration-report.ts +123 -0
- package/server/modules/cli/asset-migration-store.ts +228 -0
- package/server/modules/cli/asset-migration.service.ts +236 -0
- package/server/modules/cli/browser-use-mcp.ts +9 -4
- package/server/modules/cli/cli.module.ts +21 -1
- package/server/modules/cli/cli.service.ts +14 -1
- package/server/modules/cli/tests/asset-migration.service.test.ts +349 -0
- package/server/modules/cli/tests/browser-use-mcp-entry.test.ts +202 -0
- package/server/modules/cli/tests/cli-environment-bootstrap.test.ts +1 -0
- package/server/modules/cli/tests/cli.service.test.ts +6 -1
- package/server/modules/cockpit/cockpit-brief-prompt.ts +1 -1
- package/server/modules/cockpit/cockpit-card-actions.ts +20 -3
- package/server/modules/cockpit/cockpit-card-feedback-store.ts +104 -9
- package/server/modules/cockpit/cockpit-card-registry.ts +2 -2
- package/server/modules/cockpit/cockpit-fleet-card-projection.ts +3 -0
- package/server/modules/cockpit/cockpit-fleet-executor.ts +1 -1
- package/server/modules/cockpit/cockpit-knowledge-reading.ts +17 -0
- package/server/modules/cockpit/cockpit.module.ts +2 -2
- package/server/modules/cockpit/cockpit.reducer.ts +1 -1
- package/server/modules/cockpit/tests/cockpit-card-feedback.test.ts +116 -1
- package/server/modules/cockpit/tests/cockpit-fleet-card-provider.test.ts +2 -2
- package/server/modules/cockpit/tests/cockpit-knowledge-decision-handoff.test.ts +205 -3
- package/server/modules/context-events/context-event-writer.ts +6 -6
- package/server/modules/context-events/context-events.module.ts +2 -2
- package/server/modules/context-events/session-ask-stream-reader.ts +1 -1
- package/server/modules/context-events/session-blocked-events.ts +3 -3
- package/server/modules/context-events/tests/session-ask-event-writer.test.ts +1 -1
- package/server/modules/context-events/tests/session-blocked-events.test.ts +3 -3
- package/server/modules/context-events/tests/session-run-events.test.ts +1 -1
- package/server/modules/database/migrations.ts +24 -1
- package/server/modules/database/repositories/sessions.db.ts +41 -4
- package/server/modules/database/repositories/voice-user-identifiers.db.ts +1 -1
- package/server/modules/database/schema.ts +16 -2
- package/server/modules/database/tests/migrations-ensure-columns.test.ts +2 -0
- package/server/modules/database/tests/sessions-provider-mapping.test.ts +2 -2
- package/server/modules/debug-agent/tests/debug-agent-permission-popup.test.ts +2 -2
- package/server/modules/liaison/liaison-deliver.service.ts +4 -4
- package/server/modules/liaison/liaison.module.ts +1 -1
- package/server/modules/mcp-gateway/mcp-gateway.auth.ts +3 -2
- package/server/modules/mcp-gateway/mcp-self-target.ts +2 -2
- package/server/modules/mcp-gateway/mcp-session-send.ts +21 -2
- package/server/modules/mcp-gateway/mcp-tool-annotations.ts +4 -4
- package/server/modules/mcp-gateway/oauth-metadata.gate.ts +4 -5
- package/server/modules/mcp-gateway/tests/knowledge-effective-config-proof.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/knowledge-peer-correlation-proof.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-approvals.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-audit-route.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-audit.test.ts +4 -4
- package/server/modules/mcp-gateway/tests/mcp-auth.test.ts +3 -1
- package/server/modules/mcp-gateway/tests/mcp-cancel-queued.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-cockpit-tools.test.ts +7 -3
- package/server/modules/mcp-gateway/tests/mcp-correlation-id.test.ts +8 -8
- package/server/modules/mcp-gateway/tests/mcp-draft.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-english-only.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-gateway-wiring.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-insufficient-scope.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-knowledge-facts.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-not-found-semantics.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-oauth-challenge.test.ts +3 -2
- package/server/modules/mcp-gateway/tests/mcp-overview.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-pending-interaction.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-read-tools.test.ts +3 -3
- package/server/modules/mcp-gateway/tests/mcp-run-get.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-self-target.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-background.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-session-host-control.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-lifecycle.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-reconfigure.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-session-search-pruning.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-search.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-session-send.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/mcp-ui-last-opened.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-usage-stats.test.ts +1 -1
- package/server/modules/mcp-gateway/tests/mcp-write-notification.test.ts +2 -2
- package/server/modules/mcp-gateway/tests/oauth-flow.e2e.test.ts +3 -3
- package/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
- package/server/modules/oauth/access-tokens.service.ts +8 -8
- package/server/modules/oauth/oauth-consent.service.ts +20 -15
- package/server/modules/oauth/tests/access-token-scopes.test.ts +55 -34
- package/server/modules/oauth/tests/access-tokens.service.test.ts +50 -14
- package/server/modules/oauth/tests/oauth-consent-page.test.ts +29 -21
- package/server/modules/oauth/tests/oauth-consent-ratelimit.test.ts +2 -2
- package/server/modules/oauth/tests/token-info.routes.test.ts +2 -2
- package/server/modules/observation/architecture-delta.producer.ts +1 -1
- package/server/modules/observation/blind-spots.ts +1 -1
- package/server/modules/observation/observation-store.ts +54 -16
- package/server/modules/observation/observation-uri.ts +34 -21
- package/server/modules/observation/observation.routes.ts +1 -1
- package/server/modules/observation/project-truth.ts +3 -3
- package/server/modules/observation/session-ask-decision-answer.ts +2 -1
- package/server/modules/observation/session-digest-llm.ts +7 -1
- package/server/modules/observation/session-digest.ts +39 -5
- package/server/modules/observation/tests/architecture-delta.test.ts +1 -1
- package/server/modules/observation/tests/observation-routes.test.ts +13 -0
- package/server/modules/observation/tests/observation-store.test.ts +58 -0
- package/server/modules/observation/tests/project-truth.test.ts +2 -2
- package/server/modules/observation/tests/session-ask-decision-digest.test.ts +189 -0
- package/server/modules/observation/tests/session-digest.test.ts +43 -0
- package/server/modules/providers/index.ts +13 -0
- package/server/modules/providers/list/claude/claude-host-driver.provider.ts +1 -1
- package/server/modules/providers/list/codex/codex-app-server.client.ts +37 -5
- package/server/modules/providers/list/codex/codex-app-server.connection.ts +1 -1
- package/server/modules/providers/list/codex/codex-host-driver.contract.ts +18 -9
- package/server/modules/providers/list/codex/codex-host-driver.provider.ts +15 -1
- package/server/modules/providers/list/codex/codex-models.provider.ts +16 -3
- package/server/modules/providers/list/codex/codex-provider-injection.ts +323 -0
- package/server/modules/providers/list/codex/codex-resident-provider-launch.ts +71 -0
- package/server/modules/providers/list/codex/codex-runtime.provider.ts +20 -1
- package/server/modules/providers/list/cursor/cursor-models.provider.ts +1 -1
- package/server/modules/providers/list/opencode/opencode-models.provider.ts +1 -1
- package/server/modules/providers/provider.routes.ts +23 -2
- package/server/modules/providers/services/provider-models.service.ts +187 -124
- package/server/modules/providers/services/provider-runtime.service.ts +3 -0
- package/server/modules/providers/services/session-model-resolver.ts +180 -0
- package/server/modules/providers/services/session-provider-binding.ts +176 -0
- package/server/modules/providers/services/sessions.service.ts +5 -1
- package/server/modules/providers/tests/claude-resident-addressable.test.ts +2 -2
- package/server/modules/providers/tests/claude-session-name-authority.test.ts +4 -4
- package/server/modules/providers/tests/codex-app-server-protocol.test.ts +1 -1
- package/server/modules/providers/tests/codex-host-driver-persistent.test.ts +2 -2
- package/server/modules/providers/tests/codex-provider-model-binding.test.ts +345 -0
- package/server/modules/providers/tests/codex-resident-provider-injection.test.ts +561 -0
- package/server/modules/providers/tests/codex-runtime-provider-injection.test.ts +269 -0
- package/server/modules/providers/tests/codex-session-provider-binding.test.ts +386 -0
- package/server/modules/providers/tests/codex-sessions.test.ts +1 -1
- package/server/modules/providers/tests/opencode-sessions.test.ts +2 -2
- package/server/modules/providers/tests/provider-models.service.test.ts +15 -0
- package/server/modules/providers/tests/provider.routes.test.ts +1 -1
- package/server/modules/quay/index.ts +1 -1
- package/server/modules/quay/quay-dispatch-carrier.ts +1 -1
- package/server/modules/quay/quay-fleet-cli.ts +1 -1
- package/server/modules/quay/quay-fleet-locator.ts +2 -2
- package/server/modules/quay/quay-fleet-project-id.ts +14 -14
- package/server/modules/quay/quay-fleet-registry.ts +8 -8
- package/server/modules/quay/quay-suite-fanin-reader.ts +1 -1
- package/server/modules/quay/quay-uri-resolve.ts +8 -8
- package/server/modules/quay/quay.module.ts +3 -3
- package/server/modules/quay/quay.routes.ts +1 -1
- package/server/modules/quay/quay.service.ts +6 -6
- package/server/modules/quay/session-task-chain.service.ts +1 -1
- package/server/modules/quay/tests/contracts/fleet-cli-contracts.test.ts +3 -3
- package/server/modules/quay/tests/contracts/shapes.ts +10 -10
- package/server/modules/quay/tests/quay-fleet-locator.test.ts +1 -1
- package/server/modules/quay/tests/quay-fleet-project-id.test.ts +6 -6
- package/server/modules/quay/tests/quay-uri-resolve.test.ts +10 -10
- package/server/modules/session-hosts/tests/resident-server-restart.test.ts +1 -1
- package/server/modules/settings/codex-mcp-gateway.settings.ts +1 -1
- package/server/modules/settings/codex-model-providers.schema.ts +460 -0
- package/server/modules/settings/codex-model-providers.service.ts +235 -0
- package/server/modules/settings/codex-model-providers.settings.ts +713 -0
- package/server/modules/settings/codex-model-providers.store.ts +244 -0
- package/server/modules/settings/index.ts +18 -0
- package/server/modules/settings/server-settings-file.ts +29 -41
- package/server/modules/settings/server-settings.ts +2 -3
- package/server/modules/settings/settings.module.ts +41 -0
- package/server/modules/settings/settings.routes.ts +37 -0
- package/server/modules/settings/settings.service.ts +21 -26
- package/server/modules/settings/tests/cockpit-session-start-settings.routes.test.ts +1 -0
- package/server/modules/settings/tests/codex-model-providers-settings.test.ts +413 -0
- package/server/modules/settings/tests/codex-provider-advanced.test.ts +540 -0
- package/server/modules/settings/tests/codex-provider-import.test.ts +621 -0
- package/server/modules/voice/tests/voice-lexicon.test.ts +10 -10
- package/server/modules/voice/voice-lexicon.ts +1 -1
- package/server/modules/websocket/services/chat-control.service.ts +35 -2
- package/server/modules/websocket/services/chat-websocket.service.ts +25 -1
- package/server/modules/websocket/tests/chat-background-task.test.ts +17 -1
- package/server/modules/websocket/tests/chat-stop-task.test.ts +17 -1
- package/server/modules/worktrees/services/worktree-list.service.ts +1 -1
- package/server/modules/worktrees/services/worktree-open.service.ts +1 -1
- package/server/modules/worktrees/services/worktree-remove.service.ts +1 -1
- package/server/shared/brand.ts +24 -38
- package/server/shared/data-root-migration.ts +3 -2
- package/server/shared/data-root.ts +73 -79
- package/server/shared/interfaces.ts +1 -1
- package/server/shared/mcp-contract/types.ts +20 -15
- package/server/shared/ports/codex-provider-registry.port.ts +133 -0
- package/server/shared/ports/session-blocked-events.port.ts +1 -1
- package/server/shared/ports/session-run-events.port.ts +2 -2
- package/server/shared/settings-file.ts +167 -6
- package/server/shared/tests/architecture-ratchet.baseline.json +15 -15
- package/server/shared/tests/cloudpit-brand-env.test.ts +106 -36
- package/server/shared/tests/cloudpit-data-root.test.ts +42 -18
- package/server/shared/tests/cloudpit-goal-exit-gate.baseline.json +6 -2
- package/server/shared/tests/cloudpit-goal-exit-gate.test.ts +179 -17
- package/server/shared/tests/cloudpit-runtime-flip.test.ts +162 -123
- package/server/shared/tests/frontend-import-cycle-budget.baseline.json +8 -6
- package/server/shared/tests/frontend-import-cycle-budget.test.ts +9 -1
- package/server/shared/tests/quay-test-script.test.ts +40 -6
- package/server/shared/tests/settings-file.test.ts +83 -1
- package/server/shared/types.ts +121 -8
- package/server/shared/utils.ts +1 -1
- package/dist/assets/channel-D7XqNTJC.js +0 -1
- package/dist/assets/channel-sbQyI1an.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-DHudi-zH.js +0 -1
- package/dist/assets/classDiagram-JCYQIIEL-DV7ybJJG.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-DHudi-zH.js +0 -1
- package/dist/assets/classDiagram-v2-OCEON4UE-DV7ybJJG.js +0 -1
- package/dist/assets/index-BsACp0s2.css +0 -32
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-CNMNp6YA.js +0 -8
- package/dist/assets/swimlanesDiagram-ULZ7WXOC-DOjtDEUW.js +0 -8
- package/dist/icons/icon-128x128.svg +0 -12
- package/dist/icons/icon-144x144.svg +0 -12
- package/dist/icons/icon-152x152.svg +0 -12
- package/dist/icons/icon-192x192.svg +0 -12
- package/dist/icons/icon-384x384.svg +0 -12
- package/dist/icons/icon-512x512.svg +0 -12
- package/dist/icons/icon-72x72.svg +0 -12
- package/dist/icons/icon-96x96.svg +0 -12
- package/dist/icons/icon-template.svg +0 -12
package/scripts/mcp-smoke.mjs
CHANGED
|
@@ -487,7 +487,7 @@ export function upsertSection(filePath, title, body) {
|
|
|
487
487
|
*/
|
|
488
488
|
function recordHeader() {
|
|
489
489
|
return [
|
|
490
|
-
'#
|
|
490
|
+
'# Cloudpit MCP 网关嵌套冒烟记录(AC-256)',
|
|
491
491
|
'',
|
|
492
492
|
'本文件由 `scripts/mcp-smoke.mjs` 写入:八节各含**原始**读数与一行结论。读数来自一次真跑——真服务',
|
|
493
493
|
'实例(临时 `DATABASE_PATH`、`HOST=127.0.0.1`、端口 `listen(0)` 探得且 ≠ 3001)+ 一个真 PAT +',
|
|
@@ -506,7 +506,7 @@ function recordHeader() {
|
|
|
506
506
|
*/
|
|
507
507
|
function residentRecordHeader() {
|
|
508
508
|
return [
|
|
509
|
-
'#
|
|
509
|
+
'# Cloudpit MCP 网关常驻专有能力冒烟记录(AC-276)',
|
|
510
510
|
'',
|
|
511
511
|
'本文件由 `scripts/mcp-smoke.mjs --run-resident` 写入:八节各含**原始**读数与一行结论。读数来自一次',
|
|
512
512
|
'真跑——真服务实例(临时 `DATABASE_PATH`、`HOST=127.0.0.1`、端口 `listen(0)` 探得且 ≠ 3001)+',
|
|
@@ -169,10 +169,34 @@ function scanUpstreamMentions() {
|
|
|
169
169
|
|
|
170
170
|
const upstreamMentions = scanUpstreamMentions();
|
|
171
171
|
|
|
172
|
+
// ── R12: the retired runtime tag / asset prefixes ───────────────────────────
|
|
173
|
+
// 2.0 never double-published the legacy tag aliases; 2.1 stops them for good. The frozen ledgers
|
|
174
|
+
// (docs/, tasks/, goals/, CHANGELOG.md) keep the history, so the scan is the LIVE release surface
|
|
175
|
+
// only: every workflow plus the scripts/package metadata that mint tags and asset names.
|
|
176
|
+
const LEGACY_TAG_PREFIXES = ['cloudcli-local-server-', 'cloudcli-desktop-'];
|
|
177
|
+
const RELEASE_SURFACE = [
|
|
178
|
+
'.github/workflows/release.yml',
|
|
179
|
+
'.github/workflows/desktop-release.yml',
|
|
180
|
+
'.github/workflows/desktop-windows-branch-build.yml',
|
|
181
|
+
'.github/workflows/desktop-macos-branch-build.yml',
|
|
182
|
+
'.github/workflows/docker.yml',
|
|
183
|
+
'scripts/release/build-server-bundle.js',
|
|
184
|
+
'scripts/release/prepare-desktop-app.js',
|
|
185
|
+
'electron/serverInstaller.js',
|
|
186
|
+
'package.json',
|
|
187
|
+
];
|
|
188
|
+
|
|
189
|
+
const legacyTagHits = RELEASE_SURFACE.flatMap((rel) =>
|
|
190
|
+
LEGACY_TAG_PREFIXES.flatMap((prefix) =>
|
|
191
|
+
read(rel).includes(prefix) ? [`${rel}:${prefix}`] : [],
|
|
192
|
+
),
|
|
193
|
+
);
|
|
194
|
+
|
|
172
195
|
console.log(`pkg.name=${pkg.name}`);
|
|
173
196
|
console.log(`npm.publish=${npmPublish}`);
|
|
174
197
|
console.log(`auth.env=${authEnv}`);
|
|
175
198
|
console.log(`legacy.upgradeCmds=${upstreamMentions.length}`);
|
|
199
|
+
console.log(`legacy.tag_prefixes=${legacyTagHits.length}`);
|
|
176
200
|
console.log(`requireBranch=${requireBranch}`);
|
|
177
201
|
console.log(`pushRepo=${pushRepo}`);
|
|
178
202
|
console.log(`macos.jobs=${macosJobs}`);
|
|
@@ -235,6 +259,27 @@ test('no user-facing command points at the upstream package scope', () => {
|
|
|
235
259
|
);
|
|
236
260
|
});
|
|
237
261
|
|
|
262
|
+
test('R12: the release surface carries no legacy runtime tag or asset prefix', () => {
|
|
263
|
+
assert.deepEqual(
|
|
264
|
+
legacyTagHits,
|
|
265
|
+
[],
|
|
266
|
+
`a release workflow or asset still mints a retired prefix (${LEGACY_TAG_PREFIXES.join(', ')}): ${legacyTagHits.join(', ')}`,
|
|
267
|
+
);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test('R12 control: the legacy-prefix scan would catch a reintroduction', () => {
|
|
271
|
+
// The 3.0 gate only re-confirms the 2.1 removal, so a vacuous green would be invisible. The
|
|
272
|
+
// same predicate must flag a synthetic reintroduction, and every scanned file must be live
|
|
273
|
+
// (non-empty) so "no hits" cannot come from reading nothing.
|
|
274
|
+
/** @param {string} text @returns {string[]} */
|
|
275
|
+
const detect = (text) => LEGACY_TAG_PREFIXES.filter((prefix) => text.includes(prefix));
|
|
276
|
+
assert.deepEqual(detect('cloudpit-local-server-v3.0.0'), [], 'the live prefix is not a hit');
|
|
277
|
+
assert.deepEqual(detect('cloudcli-local-server-v3.0.0'), ['cloudcli-local-server-'], 'a retired prefix is a hit');
|
|
278
|
+
for (const rel of RELEASE_SURFACE) {
|
|
279
|
+
assert.ok(read(rel).length > 0, `${rel} must be a live release-surface file`);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
|
|
238
283
|
test('desktop-release.yml drops the macOS build', () => {
|
|
239
284
|
assert.equal(macosJobs, 0, `desktop-release.yml builds a macOS job again (${macosJobs})`);
|
|
240
285
|
assert.equal(dmgRefs, 0, `desktop-release.yml still references a .dmg (${dmgRefs})`);
|
|
@@ -2,16 +2,17 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Criterion for gap-desktop-local-server-bundle-url-points-at-fork.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Cloudpit Desktop downloads its Local runtime bundle from a GitHub Release URL built by
|
|
6
6
|
* `electron/serverInstaller.js`. The default base URL named the UPSTREAM repository
|
|
7
7
|
* (`github.com/siteboon/claudecodeui`) while this fork publishes both the desktop installer and the
|
|
8
8
|
* `cloudpit-local-server-v<tag>` prerelease under `yaleh/cloudpit` — so a user who picked
|
|
9
|
-
* "Local
|
|
9
|
+
* "Local Cloudpit" asked a repository that never had the tag and got a 404.
|
|
10
10
|
*
|
|
11
11
|
* This criterion pins the two decisions that fix it, so neither can silently revert:
|
|
12
12
|
*
|
|
13
13
|
* 1. the DEFAULT base URL names the fork, and no upstream org reference survives in the source;
|
|
14
|
-
* 2. `
|
|
14
|
+
* 2. `CLOUDPIT_SERVER_BUNDLE_URL` still overrides it (the escape hatch admins already use);
|
|
15
|
+
* v3.0 retired the legacy `CLOUDCLI_SERVER_BUNDLE_URL` spelling, which is now ignored.
|
|
15
16
|
*
|
|
16
17
|
* It also pins the URL *shape* the release pipeline now produces: the release-tag path segment and
|
|
17
18
|
* the `cloudpit-local-server-v<version>-<platform>-<arch>.tar.gz` filename both carry the `v`
|
|
@@ -87,18 +88,38 @@ function installer() {
|
|
|
87
88
|
|
|
88
89
|
const sourceText = read(SOURCE_REL);
|
|
89
90
|
|
|
91
|
+
// R12 (2.1): the retired runtime tag / asset prefixes must not reappear on the release surface.
|
|
92
|
+
const LEGACY_TAG_PREFIXES = ['cloudcli-local-server-', 'cloudcli-desktop-'];
|
|
93
|
+
const RELEASE_SURFACE = [
|
|
94
|
+
SOURCE_REL,
|
|
95
|
+
'scripts/release/build-server-bundle.js',
|
|
96
|
+
'.github/workflows/desktop-release.yml',
|
|
97
|
+
];
|
|
98
|
+
const legacyTagHits = RELEASE_SURFACE.flatMap((rel) =>
|
|
99
|
+
LEGACY_TAG_PREFIXES.flatMap((prefix) => (read(rel).includes(prefix) ? [`${rel}:${prefix}`] : [])),
|
|
100
|
+
);
|
|
101
|
+
|
|
90
102
|
// The default reading must be taken with the override env UNSET: a stray
|
|
91
|
-
//
|
|
92
|
-
const savedBundleUrlEnv = process.env.
|
|
103
|
+
// CLOUDPIT_SERVER_BUNDLE_URL in the caller's environment would otherwise masquerade as the default.
|
|
104
|
+
const savedBundleUrlEnv = process.env.CLOUDPIT_SERVER_BUNDLE_URL;
|
|
105
|
+
const savedLegacyBundleUrlEnv = process.env.CLOUDCLI_SERVER_BUNDLE_URL;
|
|
106
|
+
delete process.env.CLOUDPIT_SERVER_BUNDLE_URL;
|
|
93
107
|
delete process.env.CLOUDCLI_SERVER_BUNDLE_URL;
|
|
94
108
|
const defaultUrl = installer().getBundleUrl();
|
|
95
109
|
const defaultBaseUrl = installer().bundleBaseUrl;
|
|
96
110
|
|
|
97
|
-
process.env.
|
|
111
|
+
process.env.CLOUDPIT_SERVER_BUNDLE_URL = OVERRIDE_BASE;
|
|
98
112
|
const overrideUrl = installer().getBundleUrl();
|
|
99
113
|
|
|
100
|
-
|
|
101
|
-
|
|
114
|
+
// v3.0 negative control: the retired legacy spelling must not override anything.
|
|
115
|
+
delete process.env.CLOUDPIT_SERVER_BUNDLE_URL;
|
|
116
|
+
process.env.CLOUDCLI_SERVER_BUNDLE_URL = 'https://legacy.invalid/bundles';
|
|
117
|
+
const legacyOnlyUrl = installer().getBundleUrl();
|
|
118
|
+
|
|
119
|
+
if (savedBundleUrlEnv === undefined) delete process.env.CLOUDPIT_SERVER_BUNDLE_URL;
|
|
120
|
+
else process.env.CLOUDPIT_SERVER_BUNDLE_URL = savedBundleUrlEnv;
|
|
121
|
+
if (savedLegacyBundleUrlEnv === undefined) delete process.env.CLOUDCLI_SERVER_BUNDLE_URL;
|
|
122
|
+
else process.env.CLOUDCLI_SERVER_BUNDLE_URL = savedLegacyBundleUrlEnv;
|
|
102
123
|
|
|
103
124
|
const defaultParsed = new URL(defaultUrl);
|
|
104
125
|
const defaultRepoPath = defaultParsed.pathname.split('/').filter(Boolean).slice(0, 2).join('/');
|
|
@@ -112,6 +133,7 @@ const envOverride = overrideUrl.startsWith(`${OVERRIDE_BASE}/`) ? 'honored' : 'i
|
|
|
112
133
|
console.log(`bundle.default.host=${defaultHost}`);
|
|
113
134
|
console.log(`bundle.default.upstream_refs=${upstreamRefs}`);
|
|
114
135
|
console.log(`bundle.env_override=${envOverride}`);
|
|
136
|
+
console.log(`legacy.tag_prefixes=${legacyTagHits.length}`);
|
|
115
137
|
|
|
116
138
|
// ── the assertions ───────────────────────────────────────────────────────────
|
|
117
139
|
|
|
@@ -141,7 +163,7 @@ test('the default bundle address points at the fork, not upstream', () => {
|
|
|
141
163
|
);
|
|
142
164
|
});
|
|
143
165
|
|
|
144
|
-
test('
|
|
166
|
+
test('CLOUDPIT_SERVER_BUNDLE_URL still overrides the default', () => {
|
|
145
167
|
assert.equal(envOverride, 'honored', 'the environment override must win over the default base URL');
|
|
146
168
|
assert.equal(
|
|
147
169
|
overrideUrl,
|
|
@@ -150,6 +172,32 @@ test('CLOUDCLI_SERVER_BUNDLE_URL still overrides the default', () => {
|
|
|
150
172
|
);
|
|
151
173
|
});
|
|
152
174
|
|
|
175
|
+
test('v3.0: CLOUDCLI_SERVER_BUNDLE_URL is ignored', () => {
|
|
176
|
+
assert.equal(
|
|
177
|
+
legacyOnlyUrl.startsWith(`${OVERRIDE_BASE}/`),
|
|
178
|
+
false,
|
|
179
|
+
'the retired legacy spelling must not override the base URL',
|
|
180
|
+
);
|
|
181
|
+
assert.equal(
|
|
182
|
+
legacyOnlyUrl,
|
|
183
|
+
defaultUrl,
|
|
184
|
+
'a legacy-only environment must resolve the same URL as no environment',
|
|
185
|
+
);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test('R12: no legacy runtime tag or asset prefix survives on the release surface', () => {
|
|
189
|
+
assert.deepEqual(
|
|
190
|
+
legacyTagHits,
|
|
191
|
+
[],
|
|
192
|
+
`the installer/workflow/build script still mints a retired prefix: ${legacyTagHits.join(', ')}`,
|
|
193
|
+
);
|
|
194
|
+
// Positive control: the replacement prefix is what the same surface produces.
|
|
195
|
+
assert.ok(
|
|
196
|
+
defaultUrl.includes('cloudpit-local-server-'),
|
|
197
|
+
'the live release surface must produce the cloudpit-local-server- shape',
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
|
|
153
201
|
test('the bundle URL shape matches the distribution asset prefix', () => {
|
|
154
202
|
assert.equal(
|
|
155
203
|
defaultUrl,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
# Restart the claudecodeui server once NO
|
|
2
|
+
# Restart the claudecodeui server once NO Cloudpit session is running a turn.
|
|
3
3
|
#
|
|
4
4
|
# Why this script exists: restarting the server unit kills every claude process under it, so doing
|
|
5
5
|
# it while another session is mid-turn loses that turn. It runs as a systemd USER transient unit
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* absent, so a damage line cannot quietly look like a hit.
|
|
15
15
|
*
|
|
16
16
|
* `--json` prints the same reading as one JSON document. The report is READ-ONLY:
|
|
17
|
-
* it never writes the stream (the fleet owns retention and
|
|
17
|
+
* it never writes the stream (the fleet owns retention and Cloudpit never deletes
|
|
18
18
|
* an event).
|
|
19
19
|
*
|
|
20
20
|
* Consumers: `scripts/shadow-prediction-report.test.mjs` (AC4, which drives the
|
|
@@ -973,3 +973,48 @@
|
|
|
973
973
|
# (dur=1863ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
974
974
|
# coverage floor clear: the tree collects 497 server test files and the baseline holds 448 of them).
|
|
975
975
|
1863 server/modules/mcp-gateway/tests/knowledge-effective-config-launch-request.test.ts
|
|
976
|
+
# and the codex-model-providers-settings row by codex-provider-config-surface,
|
|
977
|
+
# measured once on 2026-11-02 with
|
|
978
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/settings/tests/codex-model-providers-settings.test.ts`
|
|
979
|
+
# (dur=2206ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
980
|
+
# coverage floor clear: the tree collects 499 server test files and the baseline holds 450 of them).
|
|
981
|
+
2206 server/modules/settings/tests/codex-model-providers-settings.test.ts
|
|
982
|
+
# and the asset-migration.service row by gap-cloudpit-migrate-assets-rewrite,
|
|
983
|
+
# measured once on 2026-11-03 with
|
|
984
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/cli/tests/asset-migration.service.test.ts`
|
|
985
|
+
# (dur=1409ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
986
|
+
# coverage floor clear: the tree collects 500 server test files and the baseline holds 451 of them).
|
|
987
|
+
1409 server/modules/cli/tests/asset-migration.service.test.ts
|
|
988
|
+
# and the codex-provider-model-binding row by codex-model-entry-provider-binding,
|
|
989
|
+
# measured once on 2026-11-03 with
|
|
990
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/providers/tests/codex-provider-model-binding.test.ts`
|
|
991
|
+
# (dur=4412ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
992
|
+
# coverage floor clear: the tree collects 501 server test files and the baseline holds 452 of them).
|
|
993
|
+
4412 server/modules/providers/tests/codex-provider-model-binding.test.ts
|
|
994
|
+
# and the codex-perrun-provider-injection row by codex-perrun-provider-injection,
|
|
995
|
+
# measured once on 2026-11-03 with
|
|
996
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/providers/tests/codex-runtime-provider-injection.test.ts`
|
|
997
|
+
# (dur=6729ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
998
|
+
# coverage floor clear: the tree collects 502 server test files and the baseline holds 453 of them).
|
|
999
|
+
6729 server/modules/providers/tests/codex-runtime-provider-injection.test.ts
|
|
1000
|
+
# The codex-session-provider-id-binding row: measured once on 2026-11-03 with
|
|
1001
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/providers/tests/codex-session-provider-binding.test.ts`
|
|
1002
|
+
# (dur=6952ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
1003
|
+
# coverage floor clear: the tree collects 503 server test files and the baseline holds 454 of them).
|
|
1004
|
+
6952 server/modules/providers/tests/codex-session-provider-binding.test.ts
|
|
1005
|
+
# The codex-resident-provider-injection row: measured once on 2026-11-03 with
|
|
1006
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/providers/tests/codex-resident-provider-injection.test.ts`
|
|
1007
|
+
# (dur=8469ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
1008
|
+
# coverage floor clear: the tree collects 504 server test files and the baseline holds 455 of them).
|
|
1009
|
+
8469 server/modules/providers/tests/codex-resident-provider-injection.test.ts
|
|
1010
|
+
# The codex-provider-import-user-profile row: measured once on 2026-11-03 with
|
|
1011
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/settings/tests/codex-provider-import.test.ts`
|
|
1012
|
+
# (dur=1460ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
1013
|
+
# coverage floor clear: the tree collects 505 server test files and the baseline holds 456 of them).
|
|
1014
|
+
1460 server/modules/settings/tests/codex-provider-import.test.ts
|
|
1015
|
+
# The codex-provider-advanced-capabilities row: measured once on 2026-11-03 with
|
|
1016
|
+
# `npx tsx --tsconfig server/tsconfig.json --test server/modules/settings/tests/codex-provider-advanced.test.ts`
|
|
1017
|
+
# (dur=12784ms, its own new criterion; no green round contains it yet — the row keeps the 90%
|
|
1018
|
+
# coverage floor clear: the tree collects 506 server test files and the baseline holds 457 of them).
|
|
1019
|
+
# The 12.8s is dominated by the one real bundled-CLI turn and the DNS probe, not by load.
|
|
1020
|
+
12784 server/modules/settings/tests/codex-provider-advanced.test.ts
|
package/scripts/ui-scenario.mjs
CHANGED
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
* `settings` — the Settings dialog's Cockpit tab, opened from the sidebar's Settings
|
|
24
24
|
* button; the opener waits until the form's own reading is `ready`/`failed`,
|
|
25
25
|
* so the first step never catches it mid-load.
|
|
26
|
+
* `settings-agents-codex` — Settings → Agents → Codex → Models: the project provider
|
|
27
|
+
* registry with the bound model library and the user-profile import
|
|
28
|
+
* panel; waits until BOTH the registry's and the import panel's own
|
|
29
|
+
* statuses settle (`ready`/`failed`).
|
|
26
30
|
* `quay-pulse` — the title-bar Loop pulse popover of the session the page is already on;
|
|
27
31
|
* the opener presses the trigger and waits for the mention list to settle,
|
|
28
32
|
* because that list arrives over the network after the popover mounts.
|
|
@@ -550,6 +554,151 @@ function expectationFailures(expect, reading) {
|
|
|
550
554
|
if (actual !== expected) fail(key, expected, actual);
|
|
551
555
|
break;
|
|
552
556
|
}
|
|
557
|
+
case 'codexProvidersOpen': {
|
|
558
|
+
const actual = reading.codexProviders?.open === true;
|
|
559
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
560
|
+
break;
|
|
561
|
+
}
|
|
562
|
+
case 'codexProvidersStatus': {
|
|
563
|
+
const actual = reading.codexProviders?.status ?? null;
|
|
564
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
565
|
+
break;
|
|
566
|
+
}
|
|
567
|
+
case 'codexProvidersError': {
|
|
568
|
+
const actual = reading.codexProviders?.error ?? null;
|
|
569
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
570
|
+
break;
|
|
571
|
+
}
|
|
572
|
+
case 'codexProvidersCount': {
|
|
573
|
+
const actual = reading.codexProviders?.count ?? null;
|
|
574
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
575
|
+
break;
|
|
576
|
+
}
|
|
577
|
+
case 'codexProviderIds': {
|
|
578
|
+
// The registry's ids IN DRAW ORDER: a row that silently disappears is observable.
|
|
579
|
+
const actual = Array.isArray(reading.codexProviders?.ids) ? reading.codexProviders.ids : null;
|
|
580
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
581
|
+
break;
|
|
582
|
+
}
|
|
583
|
+
case 'codexProviderTokenSet': {
|
|
584
|
+
// Per row, whether a secret is stored — never the secret itself.
|
|
585
|
+
const actual = Array.isArray(reading.codexProviders?.tokenSet)
|
|
586
|
+
? reading.codexProviders.tokenSet
|
|
587
|
+
: null;
|
|
588
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
589
|
+
break;
|
|
590
|
+
}
|
|
591
|
+
case 'codexProviderWarningsInclude': {
|
|
592
|
+
const warnings = Array.isArray(reading.codexProviders?.warnings)
|
|
593
|
+
? reading.codexProviders.warnings.join('\n')
|
|
594
|
+
: '';
|
|
595
|
+
if (!warnings.includes(String(expected))) fail(key, expected, warnings);
|
|
596
|
+
break;
|
|
597
|
+
}
|
|
598
|
+
case 'codexResponsesOnlyIncludes': {
|
|
599
|
+
const actual = reading.codexProviders?.responsesOnly ?? null;
|
|
600
|
+
if (actual === null || !actual.includes(String(expected))) fail(key, expected, actual);
|
|
601
|
+
break;
|
|
602
|
+
}
|
|
603
|
+
case 'codexModelProvider': {
|
|
604
|
+
const actual = reading.codexProviders?.modelProvider ?? null;
|
|
605
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
606
|
+
break;
|
|
607
|
+
}
|
|
608
|
+
case 'codexModelProviderOptions': {
|
|
609
|
+
const actual = Array.isArray(reading.codexProviders?.modelProviderOptions)
|
|
610
|
+
? reading.codexProviders.modelProviderOptions
|
|
611
|
+
: null;
|
|
612
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
613
|
+
break;
|
|
614
|
+
}
|
|
615
|
+
case 'codexModelLibraryStatus': {
|
|
616
|
+
const actual = reading.codexProviders?.modelLibraryStatus ?? null;
|
|
617
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
618
|
+
break;
|
|
619
|
+
}
|
|
620
|
+
case 'codexModelLibraryNoticeIncludes': {
|
|
621
|
+
const actual = reading.codexProviders?.modelLibraryNotice ?? null;
|
|
622
|
+
if (actual === null || !actual.includes(String(expected))) fail(key, expected, actual);
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
case 'codexModelIds': {
|
|
626
|
+
const actual = Array.isArray(reading.codexProviders?.modelIds)
|
|
627
|
+
? reading.codexProviders.modelIds
|
|
628
|
+
: null;
|
|
629
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
630
|
+
break;
|
|
631
|
+
}
|
|
632
|
+
case 'codexModelLabelsInclude': {
|
|
633
|
+
const labels = Array.isArray(reading.codexProviders?.modelLabels)
|
|
634
|
+
? reading.codexProviders.modelLabels.join('\n')
|
|
635
|
+
: '';
|
|
636
|
+
if (!labels.includes(String(expected))) fail(key, expected, labels);
|
|
637
|
+
break;
|
|
638
|
+
}
|
|
639
|
+
case 'codexImportOpen': {
|
|
640
|
+
const actual = reading.codexProviders?.importOpen === true;
|
|
641
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
642
|
+
break;
|
|
643
|
+
}
|
|
644
|
+
case 'codexImportStatus': {
|
|
645
|
+
const actual = reading.codexProviders?.importStatus ?? null;
|
|
646
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
647
|
+
break;
|
|
648
|
+
}
|
|
649
|
+
case 'codexImportCount': {
|
|
650
|
+
const actual = reading.codexProviders?.importCount ?? null;
|
|
651
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
652
|
+
break;
|
|
653
|
+
}
|
|
654
|
+
case 'codexImportIds': {
|
|
655
|
+
// The user-profile rows IN DRAW ORDER (`config.toml` first, then profiles).
|
|
656
|
+
const actual = Array.isArray(reading.codexProviders?.importIds)
|
|
657
|
+
? reading.codexProviders.importIds
|
|
658
|
+
: null;
|
|
659
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
660
|
+
break;
|
|
661
|
+
}
|
|
662
|
+
case 'codexImportBindable': {
|
|
663
|
+
// A row this project refuses (reserved id / Chat Completions) reads `false` here.
|
|
664
|
+
const actual = Array.isArray(reading.codexProviders?.importBindable)
|
|
665
|
+
? reading.codexProviders.importBindable
|
|
666
|
+
: null;
|
|
667
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
668
|
+
break;
|
|
669
|
+
}
|
|
670
|
+
case 'codexImportEnvKeys': {
|
|
671
|
+
// The variable NAMES only; a value would have to be a different string.
|
|
672
|
+
const actual = Array.isArray(reading.codexProviders?.importEnvKeys)
|
|
673
|
+
? reading.codexProviders.importEnvKeys
|
|
674
|
+
: null;
|
|
675
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
676
|
+
break;
|
|
677
|
+
}
|
|
678
|
+
case 'codexImportBaseUrls': {
|
|
679
|
+
const actual = Array.isArray(reading.codexProviders?.importBaseUrls)
|
|
680
|
+
? reading.codexProviders.importBaseUrls
|
|
681
|
+
: null;
|
|
682
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
683
|
+
break;
|
|
684
|
+
}
|
|
685
|
+
case 'codexImportWireApis': {
|
|
686
|
+
const actual = Array.isArray(reading.codexProviders?.importWireApis)
|
|
687
|
+
? reading.codexProviders.importWireApis
|
|
688
|
+
: null;
|
|
689
|
+
if (!Array.isArray(expected) || !sameJson(actual, expected)) fail(key, expected, actual);
|
|
690
|
+
break;
|
|
691
|
+
}
|
|
692
|
+
case 'codexImportDirectoryIncludes': {
|
|
693
|
+
const actual = reading.codexProviders?.importDirectory ?? null;
|
|
694
|
+
if (actual === null || !actual.includes(String(expected))) fail(key, expected, actual);
|
|
695
|
+
break;
|
|
696
|
+
}
|
|
697
|
+
case 'codexImportError': {
|
|
698
|
+
const actual = reading.codexProviders?.importError ?? null;
|
|
699
|
+
if (actual !== expected) fail(key, expected, actual);
|
|
700
|
+
break;
|
|
701
|
+
}
|
|
553
702
|
case 'cockpitCardDismissNoticeOk': {
|
|
554
703
|
// The last dismiss answer's outcome, read from the list-level line that outlives the card.
|
|
555
704
|
// `null` (no dismiss attempted yet) is a real reading, not "skip".
|
|
@@ -1043,6 +1192,51 @@ async function openSettingsCockpit(page) {
|
|
|
1043
1192
|
);
|
|
1044
1193
|
}
|
|
1045
1194
|
|
|
1195
|
+
/**
|
|
1196
|
+
* Opens Settings → Agents → Codex → Models: the project provider registry with the bound model
|
|
1197
|
+
* library below it.
|
|
1198
|
+
*
|
|
1199
|
+
* The dialog has no route of its own, so the opener presses the same four controls a person
|
|
1200
|
+
* does: the sidebar's Settings button, the Agents tab, the Codex agent pill, and the Models
|
|
1201
|
+
* category tab. It then waits for the registry's own published status to settle (`ready` or
|
|
1202
|
+
* `failed`), because the reading arrives over the network and a scenario's first `expect` must
|
|
1203
|
+
* not catch it in `loading`.
|
|
1204
|
+
*
|
|
1205
|
+
* @param {import('playwright').Page} page
|
|
1206
|
+
*/
|
|
1207
|
+
async function openSettingsAgentsCodex(page) {
|
|
1208
|
+
if (!page.url().startsWith('http')) {
|
|
1209
|
+
await page.goto('/');
|
|
1210
|
+
}
|
|
1211
|
+
await waitForSurface(page);
|
|
1212
|
+
const opener = page.locator('[data-testid="open-settings"]:visible').first();
|
|
1213
|
+
await opener.waitFor({ state: 'visible', timeout: BOOT_TIMEOUT_MS });
|
|
1214
|
+
await opener.click();
|
|
1215
|
+
const tab = page.locator('[data-settings-tab="agents"]:visible').first();
|
|
1216
|
+
await tab.waitFor({ state: 'visible', timeout: BOOT_TIMEOUT_MS });
|
|
1217
|
+
await tab.click();
|
|
1218
|
+
const agent = page.locator('[data-settings-agent="codex"]:visible').first();
|
|
1219
|
+
await agent.waitFor({ state: 'visible', timeout: BOOT_TIMEOUT_MS });
|
|
1220
|
+
await agent.click();
|
|
1221
|
+
const category = page.locator('[data-settings-category="models"]:visible').first();
|
|
1222
|
+
await category.waitFor({ state: 'visible', timeout: BOOT_TIMEOUT_MS });
|
|
1223
|
+
await category.click();
|
|
1224
|
+
await page.waitForFunction(
|
|
1225
|
+
() => {
|
|
1226
|
+
const root = /** @type {any} */ (globalThis).document.querySelector('[data-codex-providers]');
|
|
1227
|
+
if (root === null) return false;
|
|
1228
|
+
const status = root.getAttribute('data-codex-providers');
|
|
1229
|
+
// The user-profile import is a second, independent read; a scenario whose first step
|
|
1230
|
+
// asserts it must not catch it mid-load.
|
|
1231
|
+
const importStatus = root.getAttribute('data-codex-import-status');
|
|
1232
|
+
return (status === 'ready' || status === 'failed')
|
|
1233
|
+
&& (importStatus === 'ready' || importStatus === 'failed');
|
|
1234
|
+
},
|
|
1235
|
+
undefined,
|
|
1236
|
+
{ timeout: PANEL_TIMEOUT_MS },
|
|
1237
|
+
);
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1046
1240
|
/**
|
|
1047
1241
|
* Opens the title-bar Loop pulse popover for the session already on screen.
|
|
1048
1242
|
*
|
|
@@ -1282,6 +1476,7 @@ async function runScenario(browser, scenario, options) {
|
|
|
1282
1476
|
cockpit: () => openCockpit(page),
|
|
1283
1477
|
'cockpit-cards': () => openCockpitCards(page),
|
|
1284
1478
|
settings: () => openSettingsCockpit(page),
|
|
1479
|
+
'settings-agents-codex': () => openSettingsAgentsCodex(page),
|
|
1285
1480
|
'quay-pulse': () => openQuayPulse(page),
|
|
1286
1481
|
'cost-panel': () => openCostPanel(page, target),
|
|
1287
1482
|
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codex-provider-import",
|
|
3
|
+
"description": "Settings → Agents → Codex: the user-profile import panel lists the operator's own ~/.codex providers (variable NAMES only, never a secret), one Bind writes the selected provider into the PROJECT registry, and the imported provider becomes a selectable binding for a new model. The isolated instance this runs against starts from an empty CODEX_SETTINGS_PATH and a HOME whose .codex/config.toml declares `bob` and whose bob-gpt.config.toml declares `bob-gpt`.",
|
|
4
|
+
"steps": [
|
|
5
|
+
{
|
|
6
|
+
"open": "settings-agents-codex",
|
|
7
|
+
"checkpoint": true,
|
|
8
|
+
"expect": {
|
|
9
|
+
"codexProvidersOpen": true,
|
|
10
|
+
"codexProvidersStatus": "ready",
|
|
11
|
+
"codexProvidersError": null,
|
|
12
|
+
"codexProvidersCount": 0,
|
|
13
|
+
"codexProviderIds": [],
|
|
14
|
+
"codexModelProvider": "",
|
|
15
|
+
"codexModelProviderOptions": [""],
|
|
16
|
+
"codexImportOpen": true,
|
|
17
|
+
"codexImportStatus": "ready",
|
|
18
|
+
"codexImportCount": 2,
|
|
19
|
+
"codexImportIds": ["bob", "bob-gpt"],
|
|
20
|
+
"codexImportBindable": [true, true],
|
|
21
|
+
"codexImportEnvKeys": ["BOB_API_KEY", "BOB_GPT_API_KEY"],
|
|
22
|
+
"codexImportBaseUrls": ["http://127.0.0.1:9/v1", "http://127.0.0.1:9/gpt/v1"],
|
|
23
|
+
"codexImportWireApis": ["responses", "responses"],
|
|
24
|
+
"codexImportDirectoryIncludes": ".codex",
|
|
25
|
+
"codexImportError": null
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"drive": { "codexProvider.import": "bob" },
|
|
30
|
+
"checkpoint": true,
|
|
31
|
+
"expect": {
|
|
32
|
+
"codexProvidersStatus": "ready",
|
|
33
|
+
"codexProvidersError": null,
|
|
34
|
+
"codexProvidersCount": 1,
|
|
35
|
+
"codexProviderIds": ["bob"],
|
|
36
|
+
"codexModelProviderOptions": ["", "bob"],
|
|
37
|
+
"codexImportStatus": "ready",
|
|
38
|
+
"codexImportError": null
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"drive": { "modelLibrary.setField": { "field": "name", "value": "Scenario Imported Model" } }
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"drive": { "modelLibrary.setField": { "field": "id", "value": "scenario-imported-model" } },
|
|
46
|
+
"expect": { "codexModelProviderOptions": ["", "bob"] }
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"drive": { "modelLibrary.selectCodexProvider": "bob" },
|
|
50
|
+
"expect": { "codexModelProvider": "bob" }
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"drive": { "modelLibrary.save": true },
|
|
54
|
+
"checkpoint": true,
|
|
55
|
+
"expect": {
|
|
56
|
+
"codexModelLibraryStatus": "saved",
|
|
57
|
+
"codexModelLibraryNoticeIncludes": "Scenario Imported Model was added.",
|
|
58
|
+
"codexModelIds": ["scenario-imported-model"],
|
|
59
|
+
"codexModelLabelsInclude": "· bob"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codex-provider-settings",
|
|
3
|
+
"description": "Settings → Agents → Codex → Models: create a project upstream provider (id/baseUrl/envKey/tokenFile + a secret that must be masked), save it, then add a custom Codex model bound to that provider and save it. The instance this runs against starts from an empty CODEX_SETTINGS_PATH, so the first reading has zero providers and the model picker offers only the inherit-default choice.",
|
|
4
|
+
"steps": [
|
|
5
|
+
{
|
|
6
|
+
"open": "settings-agents-codex",
|
|
7
|
+
"checkpoint": true,
|
|
8
|
+
"expect": {
|
|
9
|
+
"codexProvidersOpen": true,
|
|
10
|
+
"codexProvidersStatus": "ready",
|
|
11
|
+
"codexProvidersError": null,
|
|
12
|
+
"codexProvidersCount": 0,
|
|
13
|
+
"codexProviderIds": [],
|
|
14
|
+
"codexProviderTokenSet": [],
|
|
15
|
+
"codexResponsesOnlyIncludes": "responses",
|
|
16
|
+
"codexModelProvider": "",
|
|
17
|
+
"codexModelProviderOptions": [""]
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"drive": { "codexProvider.add": true },
|
|
22
|
+
"expect": { "codexProvidersCount": 1 }
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"drive": { "codexProvider.fill": { "index": 0, "field": "id", "value": "bob" } }
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"drive": { "codexProvider.fill": { "index": 0, "field": "name", "value": "Bob Endpoint" } }
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"drive": { "codexProvider.fill": { "index": 0, "field": "baseUrl", "value": "http://127.0.0.1:9/v1" } }
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"drive": { "codexProvider.fill": { "index": 0, "field": "envKey", "value": "BOB_API_KEY" } }
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"drive": { "codexProvider.fill": { "index": 0, "field": "tokenFile", "value": "/tmp/cloudpit-dod-bob.token" } }
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"drive": { "codexProvider.fill": { "index": 0, "field": "token", "value": "sk-scenario-secret" } },
|
|
41
|
+
"checkpoint": true
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"drive": { "codexProvider.save": true },
|
|
45
|
+
"checkpoint": true,
|
|
46
|
+
"expect": {
|
|
47
|
+
"codexProvidersStatus": "ready",
|
|
48
|
+
"codexProvidersError": null,
|
|
49
|
+
"codexProvidersCount": 1,
|
|
50
|
+
"codexProviderIds": ["bob"],
|
|
51
|
+
"codexProviderTokenSet": [true],
|
|
52
|
+
"codexModelProviderOptions": ["", "bob"]
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"drive": { "modelLibrary.setField": { "field": "name", "value": "Scenario Codex Model" } }
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"drive": { "modelLibrary.setField": { "field": "id", "value": "scenario-codex-model" } },
|
|
60
|
+
"expect": { "codexModelProviderOptions": ["", "bob"] }
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"drive": { "modelLibrary.selectCodexProvider": "bob" },
|
|
64
|
+
"expect": { "codexModelProvider": "bob" }
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"drive": { "modelLibrary.save": true },
|
|
68
|
+
"checkpoint": true,
|
|
69
|
+
"expect": {
|
|
70
|
+
"codexModelLibraryStatus": "saved",
|
|
71
|
+
"codexModelLibraryNoticeIncludes": "Scenario Codex Model was added.",
|
|
72
|
+
"codexModelIds": ["scenario-codex-model"],
|
|
73
|
+
"codexModelLabelsInclude": "· bob"
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
*
|
|
37
37
|
* `startup-line-missing` deletes the one call that announces the mode. It is NOT a bare
|
|
38
38
|
* deletion: `voiceCapture` is read again eight lines later, so removing the statement outright
|
|
39
|
-
* makes the module throw at load, the child never prints `
|
|
39
|
+
* makes the module throw at load, the child never prints `Cloudpit Server - Ready`, and the
|
|
40
40
|
* criterion exits 2 with no readings at all — a red that names nothing, which is the failure
|
|
41
41
|
* shape this AC is written against. The mutation therefore deletes the announcing call and
|
|
42
42
|
* inlines the single field the rest of the file reads, which is the smallest single-site change
|
|
@@ -446,7 +446,7 @@ test('error forms: every class is counted, rewrites are separated from correctio
|
|
|
446
446
|
const directory = scratchDir();
|
|
447
447
|
const pairs = [
|
|
448
448
|
['fan in', 'fan-in', 'form'],
|
|
449
|
-
['
|
|
449
|
+
['needs human', 'needs-human', 'form'],
|
|
450
450
|
['AC 零零二', 'AC-002', 'spoken-form'],
|
|
451
451
|
['GOAL 十三', 'GOAL-13', 'spoken-form'],
|
|
452
452
|
['翻译', 'fan-in', 'cjk-rendering'],
|