@piecemaker-legal/piecemaker 2.0.8 → 2.0.10

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 (169) hide show
  1. package/dist/assets/FindReplaceDialog-KU5TEIBJ-CQ76sPaJ.js +1 -0
  2. package/dist/assets/FootnotePropertiesDialog-W3YHM4BV-BpgYQvvd.js +1 -0
  3. package/dist/assets/HyperlinkDialog-ZYH7ZHRF-qIPBOssF.css +1 -0
  4. package/dist/assets/HyperlinkDialog-ZYH7ZHRF-z08UbYbL.js +144 -0
  5. package/dist/assets/ImagePositionDialog-HEWYR6Q3-CFzOnzAt.js +1 -0
  6. package/dist/assets/ImagePropertiesDialog-RAB47C6M-D-ThGU-b.js +1 -0
  7. package/dist/assets/PageSetupDialog-AIGIXO3E-_PYIO8eb.js +1 -0
  8. package/dist/assets/SplitCellDialog-IFBKYCD6-Cb9uQOB8.js +1 -0
  9. package/dist/assets/TablePropertiesDialog-TMLKGOOW-12vmjb6B.js +1 -0
  10. package/dist/assets/WatermarkDialog-KRL7WMIS-C-d8rzt2.js +1 -0
  11. package/dist/assets/{abnfDiagram-VCTEODGH-XuFdW3jA.js → abnfDiagram-VCTEODGH-B4OsX7eF.js} +1 -1
  12. package/dist/assets/arc-BK1oUIk7.js +1 -0
  13. package/dist/assets/architectureDiagram-5GKGNRK7-CfaFI6L7.js +36 -0
  14. package/dist/assets/{blockDiagram-I7D4REHJ-CsgOSDLB.js → blockDiagram-I7D4REHJ-DQEI2azY.js} +1 -1
  15. package/dist/assets/{c4Diagram-7LVT6UL2-awKtsGCB.js → c4Diagram-7LVT6UL2-DbravpVi.js} +1 -1
  16. package/dist/assets/channel-DVyNr2Yg.js +1 -0
  17. package/dist/assets/{chunk-2Q5K7J3B-DA5F8ig-.js → chunk-2Q5K7J3B-BLpZ9huC.js} +1 -1
  18. package/dist/assets/{chunk-5VM5RSS4-DawRFEGW.js → chunk-5VM5RSS4-BLlEdmX9.js} +1 -1
  19. package/dist/assets/{chunk-F27PBJKO-BO6B_U1p.js → chunk-F27PBJKO-D-ZNhI6q.js} +1 -1
  20. package/dist/assets/{chunk-IMKFNOWR-Dhrf_k6W.js → chunk-IMKFNOWR-vzSiKnhh.js} +1 -1
  21. package/dist/assets/{chunk-JWPE2WC7-BTGX4CJ7.js → chunk-JWPE2WC7-DfF0k4nb.js} +1 -1
  22. package/dist/assets/{chunk-POPQ4Y6H-ByKLZ0wa.js → chunk-POPQ4Y6H-BnwCYsPP.js} +1 -1
  23. package/dist/assets/{chunk-SVP7TREG-DNCtUeow.js → chunk-SVP7TREG-DRxc8fhq.js} +1 -1
  24. package/dist/assets/{chunk-TICWLB2K-bgcAtBKw.js → chunk-TICWLB2K-Dd2Q-md-.js} +1 -1
  25. package/dist/assets/{chunk-XXDRQBXY-AD-pwqOj.js → chunk-XXDRQBXY-DBjkEUp_.js} +1 -1
  26. package/dist/assets/classDiagram-ZZMXUADV-2pGPHl5H.js +1 -0
  27. package/dist/assets/classDiagram-v2-VYDZK3BY-2pGPHl5H.js +1 -0
  28. package/dist/assets/{cose-bilkent-JH36ORCC-D23VMTjy.js → cose-bilkent-JH36ORCC-By6PS4oe.js} +1 -1
  29. package/dist/assets/{cynefin-OW5HDTMX-thDLtHBg.js → cynefin-OW5HDTMX-YxWpjc5W.js} +1 -1
  30. package/dist/assets/{cynefinDiagram-5FMLGOSQ-BTG5qDGi.js → cynefinDiagram-5FMLGOSQ-DrtXzz3p.js} +1 -1
  31. package/dist/assets/{dagre-GXQ25YYZ-yXAeLV32.js → dagre-GXQ25YYZ-BDpTLKqZ.js} +1 -1
  32. package/dist/assets/{diagram-S7CK7UJ4-v1-YDY3c.js → diagram-S7CK7UJ4-C4LvqeCs.js} +1 -1
  33. package/dist/assets/{diagram-UQ7AKVKN-DlO9hQ63.js → diagram-UQ7AKVKN-BTpnMeHp.js} +1 -1
  34. package/dist/assets/{diagram-VSXAHHWV-B3Bz2C6Y.js → diagram-VSXAHHWV-DucHHWev.js} +1 -1
  35. package/dist/assets/{diagram-VX7I27RA-BosIgZRa.js → diagram-VX7I27RA-DYHZNmmH.js} +1 -1
  36. package/dist/assets/{diagram-Z3DM3KII-C1MFbIji.js → diagram-Z3DM3KII-BHIH2BGN.js} +1 -1
  37. package/dist/assets/{ebnfDiagram-PWID7BFC-B6g9aRAb.js → ebnfDiagram-PWID7BFC-CGiEkwj0.js} +1 -1
  38. package/dist/assets/{erDiagram-RLTQ6QDP-BuV5RUQ-.js → erDiagram-RLTQ6QDP-AJMHi2Us.js} +1 -1
  39. package/dist/assets/{flowDiagram-HODETNUW-OFcS8Psg.js → flowDiagram-HODETNUW-BqzANBh2.js} +1 -1
  40. package/dist/assets/{ganttDiagram-EL5Y4UJY-CxCIs-y4.js → ganttDiagram-EL5Y4UJY-B0xPDY2_.js} +1 -1
  41. package/dist/assets/{gitGraphDiagram-WWUBYQGX-DQHfgTRq.js → gitGraphDiagram-WWUBYQGX-CzPX5CNO.js} +1 -1
  42. package/dist/assets/{index-BPmxqMd5.js → index-Bk2iXKnJ.js} +140 -140
  43. package/dist/assets/index-Dc9wNuS4.css +1 -0
  44. package/dist/assets/{infoDiagram-27XIBGKW-UvDaFHGE.js → infoDiagram-27XIBGKW-Cjc44H0O.js} +1 -1
  45. package/dist/assets/{ishikawaDiagram-5VMMS53U-B04u_588.js → ishikawaDiagram-5VMMS53U-BWhr2v7r.js} +1 -1
  46. package/dist/assets/{journeyDiagram-3NMN7TZE-BYvBbjXl.js → journeyDiagram-3NMN7TZE-Bl4r6RrP.js} +1 -1
  47. package/dist/assets/{kanban-definition-UXKFOSKX-DxAJd2LW.js → kanban-definition-UXKFOSKX-FV-T0Vy1.js} +6 -6
  48. package/dist/assets/layout-CTfb1sAF.js +1 -0
  49. package/dist/assets/{linear-CmWY0F-m.js → linear-Dfgi6vlo.js} +1 -1
  50. package/dist/assets/{mermaid.core-ClUcKNvb.js → mermaid.core-DOCGsdlo.js} +7 -7
  51. package/dist/assets/{mindmap-definition-YA3MSWOX-DZ2GO-J-.js → mindmap-definition-YA3MSWOX-CymQ86ir.js} +1 -1
  52. package/dist/assets/{pegDiagram-XKGWAZYB-DF4i_o7r.js → pegDiagram-XKGWAZYB-1VMq_vi0.js} +1 -1
  53. package/dist/assets/{pieDiagram-E7YTZNPT-G20Z0KTO.js → pieDiagram-E7YTZNPT-C5GgXtJU.js} +1 -1
  54. package/dist/assets/processTemplate-GPFDLQMX-B1sVV2O0.js +22 -0
  55. package/dist/assets/{quadrantDiagram-AXDQQJYC-5MRlN0BO.js → quadrantDiagram-AXDQQJYC-C6zpryYf.js} +1 -1
  56. package/dist/assets/{railroadDiagram-O6MQD6OU-B4Fp-guo.js → railroadDiagram-O6MQD6OU-D-sv4SWi.js} +1 -1
  57. package/dist/assets/{requirementDiagram-BXWQKSXE-DFL0eww_.js → requirementDiagram-BXWQKSXE-CkjY-z4B.js} +1 -1
  58. package/dist/assets/sankeyDiagram-P5KCCOFB-De-d8Q6L.js +40 -0
  59. package/dist/assets/{sequenceDiagram-WJ2MYXX4-iP9OUxwi.js → sequenceDiagram-WJ2MYXX4-DCsGSJa9.js} +1 -1
  60. package/dist/assets/{server.browser-BzI1jrZw.js → server.browser-BY3bL-IX.js} +1 -1
  61. package/dist/assets/{sizeCapture-INFHLROL-C95kgcA-.js → sizeCapture-INFHLROL-xINZhgER.js} +1 -1
  62. package/dist/assets/stateDiagram-D77RDMKH-CuLUTWSL.js +1 -0
  63. package/dist/assets/stateDiagram-v2-MP3YSRHH-Cnbs-M92.js +1 -0
  64. package/dist/assets/{swimlanes-42K2YHIH-BbMY7ECY.js → swimlanes-42K2YHIH-BwxARD7N.js} +1 -1
  65. package/dist/assets/swimlanesDiagram-VR7AAH4N-D7p8qZI2.js +8 -0
  66. package/dist/assets/{timeline-definition-24CTP7MA-BQs8wPer.js → timeline-definition-24CTP7MA-BIOvnn-l.js} +3 -3
  67. package/dist/assets/{vendor-codemirror-CjW0lHR5.js → vendor-codemirror-CN-sJePf.js} +2 -2
  68. package/dist/assets/{vendor-react-D809iwXR.js → vendor-react-B22wqN3J.js} +5 -5
  69. package/dist/assets/{vennDiagram-4TSXK5OY-Imm0EPbt.js → vennDiagram-4TSXK5OY-BSD6Pfmt.js} +4 -4
  70. package/dist/assets/{wardleyDiagram-VM6X3IG4-DpMMDayn.js → wardleyDiagram-VM6X3IG4-7Zz2iRkF.js} +1 -1
  71. package/dist/assets/{xychartDiagram-S5SC5T6Z-DdLp1sYL.js → xychartDiagram-S5SC5T6Z-Ctx17Y1D.js} +1 -1
  72. package/dist/index.html +4 -4
  73. package/dist/sw.js +1 -1
  74. package/dist-server/server/modules/providers/list/mistral/mistral-models.provider.js +4 -53
  75. package/dist-server/server/modules/providers/list/mistral/mistral-models.provider.js.map +1 -1
  76. package/dist-server/server/modules/providers/list/mistral/mistral-runtime.provider.js +2 -3
  77. package/dist-server/server/modules/providers/list/mistral/mistral-runtime.provider.js.map +1 -1
  78. package/dist-server/server/modules/providers/list/mistral/mistral-vibe-models.js +30 -0
  79. package/dist-server/server/modules/providers/list/mistral/mistral-vibe-models.js.map +1 -0
  80. package/dist-server/server/modules/providers/tests/mistral-vibe-models.test.js +24 -0
  81. package/dist-server/server/modules/providers/tests/mistral-vibe-models.test.js.map +1 -0
  82. package/dist-server/server/piecemaker/anonymizer/lifecycle.js +2 -3
  83. package/dist-server/server/piecemaker/anonymizer/lifecycle.js.map +1 -1
  84. package/dist-server/server/piecemaker/desktop-update/index.js +4 -3
  85. package/dist-server/server/piecemaker/desktop-update/index.js.map +1 -1
  86. package/dist-server/server/piecemaker/docx-document.js +50 -0
  87. package/dist-server/server/piecemaker/docx-document.js.map +1 -0
  88. package/dist-server/server/piecemaker/index.js +9 -2
  89. package/dist-server/server/piecemaker/index.js.map +1 -1
  90. package/dist-server/server/piecemaker/model-discovery/codex-catalog.js +46 -0
  91. package/dist-server/server/piecemaker/model-discovery/codex-catalog.js.map +1 -0
  92. package/dist-server/server/piecemaker/model-discovery/index.js +42 -0
  93. package/dist-server/server/piecemaker/model-discovery/index.js.map +1 -0
  94. package/dist-server/server/piecemaker/model-discovery/mistral-catalog.js +19 -0
  95. package/dist-server/server/piecemaker/model-discovery/mistral-catalog.js.map +1 -0
  96. package/dist-server/server/piecemaker/model-discovery/stdio-rpc.js +61 -0
  97. package/dist-server/server/piecemaker/model-discovery/stdio-rpc.js.map +1 -0
  98. package/dist-server/server/piecemaker/project-registry.js +29 -0
  99. package/dist-server/server/piecemaker/project-registry.js.map +1 -0
  100. package/package.json +12 -1
  101. package/scripts/piecemaker/cli/disable-anonymizer.mjs +19 -0
  102. package/scripts/piecemaker/cli/lib/config.mjs +0 -1
  103. package/scripts/piecemaker/cli/lib/services.mjs +1 -10
  104. package/scripts/piecemaker/cli/piecemaker.mjs +0 -3
  105. package/server/modules/providers/list/mistral/mistral-models.provider.ts +4 -53
  106. package/server/modules/providers/list/mistral/mistral-runtime.provider.ts +2 -3
  107. package/server/modules/providers/list/mistral/mistral-vibe-models.ts +43 -0
  108. package/server/modules/providers/tests/mistral-vibe-models.test.ts +27 -0
  109. package/server/piecemaker/anonymizer/client-config.cjs +92 -92
  110. package/server/piecemaker/anonymizer/hudsucker-fixture.cjs +9 -16
  111. package/server/piecemaker/anonymizer/hudsucker-proxy/Cargo.toml +1 -1
  112. package/server/piecemaker/anonymizer/hudsucker-proxy/src/main.rs +251 -268
  113. package/server/piecemaker/anonymizer/lifecycle.ts +2 -3
  114. package/server/piecemaker/anonymizer/rewriter-bridge.cjs +6 -0
  115. package/server/piecemaker/anonymizer/service.cjs +117 -175
  116. package/server/piecemaker/desktop-update/index.ts +4 -3
  117. package/server/piecemaker/docx-document.ts +54 -0
  118. package/server/piecemaker/harness/decisions.cjs +1 -1
  119. package/server/piecemaker/harness/index.cjs +2 -3
  120. package/server/piecemaker/harness/verification.cjs +1 -1
  121. package/server/piecemaker/index.ts +11 -3
  122. package/server/piecemaker/model-discovery/codex-catalog.ts +67 -0
  123. package/server/piecemaker/model-discovery/index.ts +69 -0
  124. package/server/piecemaker/model-discovery/mistral-catalog.ts +36 -0
  125. package/server/piecemaker/model-discovery/stdio-rpc.ts +79 -0
  126. package/server/piecemaker/project-registry.ts +34 -0
  127. package/server/piecemaker/router.cjs +6 -7
  128. package/server/piecemaker/vendor/installer/bin/piecemaker.mjs +31 -77
  129. package/server/piecemaker/vendor/installer/lib/codex-skills.mjs +2 -84
  130. package/server/piecemaker/vendor/installer/lib/service.mjs +4 -24
  131. package/server/piecemaker/vendor/installer/steps/06-hooks.mjs +10 -21
  132. package/server/piecemaker/vendor/installer/steps/09-claude-assets.mjs +0 -11
  133. package/server/piecemaker/vendor/installer/steps/09-codex-plugin.mjs +6 -36
  134. package/server/piecemaker/vendor/installer/steps/13-garde-secrets.mjs +30 -12
  135. package/server/piecemaker/vendor/piecemaker-plugin/README.md +2 -9
  136. package/server/piecemaker/vendor/piecemaker-plugin/scripts/billing-track.mjs +5 -5
  137. package/server/piecemaker/vendor/piecemaker-plugin/scripts/classify-ai-documents.mjs +8 -8
  138. package/server/piecemaker/vendor/piecemaker-plugin/scripts/commit-track.mjs +2 -2
  139. package/server/piecemaker/vendor/piecemaker-plugin/scripts/compile-recherche.mjs +4 -6
  140. package/server/piecemaker/vendor/piecemaker-plugin/scripts/lib/case-folders.cjs +71 -38
  141. package/server/piecemaker/vendor/piecemaker-plugin/scripts/lib/mapping.cjs +8 -38
  142. package/server/piecemaker/vendor/piecemaker-plugin/scripts/lib/protection.cjs +82 -61
  143. package/server/piecemaker/vendor/piecemaker-plugin/scripts/protect-originals.mjs +4 -55
  144. package/server/piecemaker/vendor/piecemaker-plugin/scripts/statusline.mjs +24 -117
  145. package/server/piecemaker/vendor/piecemaker-plugin/skills/tamponnage/SKILL.md +2 -2
  146. package/server/piecemaker/vendor/websocket-server/admin-routes.cjs +15 -121
  147. package/server/piecemaker/vendor/websocket-server/case-registry.cjs +16 -32
  148. package/server/piecemaker/vendor/websocket-server/claude-hooks.cjs +0 -73
  149. package/server/piecemaker/vendor/websocket-server/originals-pipeline.cjs +0 -7
  150. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/scanner_worker.py +2 -0
  151. package/server/piecemaker/vendor/websocket-server/stamping-routes.cjs +3 -12
  152. package/server/piecemaker/vendor/websocket-server/workspace-paths.cjs +6 -6
  153. package/dist/assets/arc-CsCtfL20.js +0 -1
  154. package/dist/assets/architectureDiagram-5GKGNRK7-DGxozBGS.js +0 -36
  155. package/dist/assets/channel-DnynWwYa.js +0 -1
  156. package/dist/assets/classDiagram-ZZMXUADV-CHIsGj2B.js +0 -1
  157. package/dist/assets/classDiagram-v2-VYDZK3BY-CHIsGj2B.js +0 -1
  158. package/dist/assets/index-WwknP0l4.css +0 -1
  159. package/dist/assets/layout-R7w2kLxO.js +0 -1
  160. package/dist/assets/sankeyDiagram-P5KCCOFB-CpOdmqdy.js +0 -40
  161. package/dist/assets/stateDiagram-D77RDMKH-D9WHRvlY.js +0 -1
  162. package/dist/assets/stateDiagram-v2-MP3YSRHH-D9Qlflkb.js +0 -1
  163. package/dist/assets/swimlanesDiagram-VR7AAH4N-CA64dwpM.js +0 -8
  164. package/scripts/piecemaker/cli/lib/piecemaker-anonymizer.mjs +0 -78
  165. package/scripts/piecemaker/hooks/proxy-guard.mjs +0 -251
  166. package/server/piecemaker/anonymizer/providers.cjs +0 -120
  167. package/server/piecemaker/vendor/installer/steps/08-telegram.mjs +0 -482
  168. package/server/piecemaker/vendor/piecemaker-plugin/scripts/lib/central-mapping.cjs +0 -0
  169. package/server/piecemaker/vendor/websocket-server/telegram-admin.cjs +0 -602
@@ -0,0 +1,24 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { MISTRAL_PREDEFINED_MODELS } from '../list/mistral/mistral-models.provider.js';
4
+ import { buildVibeModelsEnvironment } from '../list/mistral/mistral-vibe-models.js';
5
+ test('Vibe receives the GLM models alongside Mistral Medium without overriding thinking by default', () => {
6
+ const models = JSON.parse(buildVibeModelsEnvironment());
7
+ assert.deepEqual(Object.keys(models), ['mistral-medium-3.5', 'glm-5.3', 'glm-5.2']);
8
+ assert.deepEqual(models['glm-5.3'], { name: 'zai-glm-5-3', provider: 'mistral', alias: 'glm-5.3', display_name: 'Z.ai GLM 5.3' });
9
+ assert.equal(models['mistral-medium-3.5'].thinking, undefined);
10
+ });
11
+ test('the selected effort becomes Vibe thinking only on models with adjustable reasoning', () => {
12
+ assert.equal(JSON.parse(buildVibeModelsEnvironment('mistral-medium-3.5', 'none'))['mistral-medium-3.5'].thinking, 'low');
13
+ assert.equal(JSON.parse(buildVibeModelsEnvironment('mistral-medium-3.5', 'high'))['mistral-medium-3.5'].thinking, 'high');
14
+ assert.equal(JSON.parse(buildVibeModelsEnvironment('glm-5.3', 'high'))['glm-5.3'].thinking, undefined);
15
+ assert.equal(JSON.parse(buildVibeModelsEnvironment('mistral-medium-3.5', 'bogus'))['mistral-medium-3.5'].thinking, undefined);
16
+ });
17
+ test('the curated Mistral catalog lists GLM 5.3 and 5.2 and offers effort on Medium 3.5 only', () => {
18
+ const byValue = Object.fromEntries(MISTRAL_PREDEFINED_MODELS.OPTIONS.map((option) => [option.value, option]));
19
+ assert.deepEqual(Object.keys(byValue), ['mistral-medium-3.5', 'glm-5.3', 'glm-5.2', 'local']);
20
+ assert.deepEqual(byValue['mistral-medium-3.5'].effort?.values.map((value) => value.value), ['none', 'high']);
21
+ assert.equal(byValue['glm-5.3'].effort, undefined);
22
+ assert.equal(MISTRAL_PREDEFINED_MODELS.DEFAULT, 'mistral-medium-3.5');
23
+ });
24
+ //# sourceMappingURL=mistral-vibe-models.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral-vibe-models.test.js","sourceRoot":"","sources":["../../../../../server/modules/providers/tests/mistral-vibe-models.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,6DAA6D,CAAC;AACxG,OAAO,EAAE,0BAA0B,EAAE,MAAM,yDAAyD,CAAC;AAErG,IAAI,CAAC,8FAA8F,EAAE,GAAG,EAAE;IACxG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;IAClI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACjE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oFAAoF,EAAE,GAAG,EAAE;IAC9F,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACzH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1H,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACvG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAChI,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wFAAwF,EAAE,GAAG,EAAE;IAClG,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,yBAAyB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9G,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9F,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7G,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
@@ -1,11 +1,10 @@
1
1
  export async function startRequiredAnonymizer(service) {
2
2
  const ensureReady = () => {
3
3
  const status = service.status();
4
+ if (status.reason === 'disabled')
5
+ return;
4
6
  if (!status.enabled || !status.listening)
5
7
  throw new Error('PieceMaker : le proxy PII est indisponible. Démarrage IA refusé.');
6
- const missing = ['claude', 'codex'].filter((provider) => status.coverage[provider]?.state !== 'filtered');
7
- if (missing.length)
8
- throw new Error(`PieceMaker : routage PII non configuré pour ${missing.join(', ')}. Démarrage IA refusé.`);
9
8
  };
10
9
  try {
11
10
  await service.start();
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../server/piecemaker/anonymizer/lifecycle.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAA0B;IACtE,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAC9H,MAAM,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,UAAU,CAAC,CAAC;QAC1G,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjI,CAAC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,WAAW,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../server/piecemaker/anonymizer/lifecycle.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAA0B;IACtE,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;YAAE,OAAO;QACzC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAChI,CAAC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,WAAW,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { spawn } from 'node:child_process';
2
+ import path from 'node:path';
2
3
  import { loadProductConfig } from '../../../shared/product-config.mjs';
3
4
  import { createDesktopUpdateRouter } from './routes.js';
4
5
  import { createDesktopUpdateService } from './service.js';
@@ -19,9 +20,9 @@ function runInstaller(command, environment) {
19
20
  child.once('close', (exitCode) => resolve({ exitCode, output, errorOutput }));
20
21
  });
21
22
  }
22
- function productRepository() {
23
+ function productRepository(appRoot) {
23
24
  try {
24
- return loadProductConfig().repository;
25
+ return loadProductConfig(process.env.CLOUDCLI_PRODUCT_CONFIG || path.join(appRoot, 'product.config.json')).repository;
25
26
  }
26
27
  catch {
27
28
  return null;
@@ -34,7 +35,7 @@ export function createPieceMakerDesktopUpdateRouter(appRoot) {
34
35
  return createDesktopUpdateRouter(createDesktopUpdateService({
35
36
  appRoot,
36
37
  platform: process.platform,
37
- repository: productRepository(),
38
+ repository: productRepository(appRoot),
38
39
  applicationPid: process.ppid,
39
40
  environment: process.env,
40
41
  runInstaller,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/piecemaker/desktop-update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,SAAS,YAAY,CAAC,OAAe,EAAE,WAA8B;IACnE,OAAO,IAAI,OAAO,CAAmE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACpH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,OAAe;IACjE,OAAO,yBAAyB,CAAC,0BAA0B,CAAC;QAC1D,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,iBAAiB,EAAE;QAC/B,cAAc,EAAE,OAAO,CAAC,IAAI;QAC5B,WAAW,EAAE,OAAO,CAAC,GAAG;QACxB,YAAY;QACZ,cAAc;QACd,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC;KAC/D,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/piecemaker/desktop-update/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAE1D,SAAS,YAAY,CAAC,OAAe,EAAE,WAA8B;IACnE,OAAO,IAAI,OAAO,CAAmE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACvG,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACpH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,WAAW,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,UAAU,CAAC;IACxH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,OAAe;IACjE,OAAO,yBAAyB,CAAC,0BAA0B,CAAC;QAC1D,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC;QACtC,cAAc,EAAE,OAAO,CAAC,IAAI;QAC5B,WAAW,EAAE,OAAO,CAAC,GAAG;QACxB,YAAY;QACZ,cAAc;QACd,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC;KAC/D,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { rename, rm, stat, writeFile } from 'fs/promises';
3
+ import path from 'path';
4
+ import express from 'express';
5
+ import { projectsDb } from '../modules/database/index.js';
6
+ const MAX_DOCX_BYTES = '100mb';
7
+ function resolveDocxPath(request) {
8
+ const projectId = typeof request.query.projectId === 'string' ? request.query.projectId : '';
9
+ const filePath = typeof request.query.path === 'string' ? request.query.path : '';
10
+ const projectRoot = projectId ? projectsDb.getProjectPathById(projectId) : null;
11
+ if (!projectRoot || !filePath.toLowerCase().endsWith('.docx'))
12
+ return null;
13
+ const resolved = path.resolve(projectRoot, filePath);
14
+ return resolved.startsWith(path.resolve(projectRoot) + path.sep) ? resolved : null;
15
+ }
16
+ async function readVersion(filePath) {
17
+ return (await stat(filePath)).mtimeMs;
18
+ }
19
+ export function createDocxDocumentRouter() {
20
+ const router = express.Router();
21
+ router.get('/docx-document/version', async (request, response) => {
22
+ const filePath = resolveDocxPath(request);
23
+ if (!filePath)
24
+ return response.status(400).json({ error: 'Invalid docx path' });
25
+ try {
26
+ response.json({ version: await readVersion(filePath) });
27
+ }
28
+ catch {
29
+ response.status(404).json({ error: 'File not found' });
30
+ }
31
+ });
32
+ router.put('/docx-document', express.raw({ type: () => true, limit: MAX_DOCX_BYTES }), async (request, response) => {
33
+ const filePath = resolveDocxPath(request);
34
+ if (!filePath || !Buffer.isBuffer(request.body) || request.body.length === 0) {
35
+ return response.status(400).json({ error: 'Invalid docx payload' });
36
+ }
37
+ const temporaryPath = `${filePath}.${randomUUID()}.tmp`;
38
+ try {
39
+ await writeFile(temporaryPath, request.body);
40
+ await rename(temporaryPath, filePath);
41
+ response.json({ version: await readVersion(filePath) });
42
+ }
43
+ catch (error) {
44
+ await rm(temporaryPath, { force: true });
45
+ response.status(500).json({ error: error instanceof Error ? error.message : String(error) });
46
+ }
47
+ });
48
+ return router;
49
+ }
50
+ //# sourceMappingURL=docx-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docx-document.js","sourceRoot":"","sources":["../../../server/piecemaker/docx-document.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { createRequire } from 'module';
2
2
  import path from 'path';
3
3
  import { providerRuntimeService, sessionsService } from '../modules/providers/index.js';
4
+ import { providerRegistry } from '../modules/providers/provider.registry.js';
4
5
  import { findApplicationRoot, getModuleDirectory } from '../shared/utils.js';
5
6
  import { startRequiredAnonymizer } from './anonymizer/lifecycle.js';
6
7
  import { createCitationStore } from './harness/citation-store.js';
@@ -11,7 +12,10 @@ import { createKnowledgeBackend } from './knowledge/index.js';
11
12
  import { createTimesheetBackend } from './timesheet/index.js';
12
13
  import { createCompanySearchRouter } from './company-search.js';
13
14
  import { createBodaccSearchRouter } from './bodacc-search.js';
15
+ import { createDocxDocumentRouter } from './docx-document.js';
14
16
  import { createShellEnvironmentRouter, resolveDesktopShellEnvironment } from './shell-environment.js';
17
+ import { installModelDiscovery } from './model-discovery/index.js';
18
+ import { startProjectRegistry } from './project-registry.js';
15
19
  /**
16
20
  * Point d'entrée PieceMaker. Les modules de `server/piecemaker/vendor/` sont du
17
21
  * CommonJS : `createRequire` les charge tels quels, sans les convertir ni les
@@ -26,20 +30,22 @@ const routerPath = path.join(applicationRoot, 'server', 'piecemaker', 'router.cj
26
30
  const shellEnvironment = await resolveDesktopShellEnvironment();
27
31
  const vendor = createRequire(import.meta.url)(routerPath);
28
32
  export const { piecemakerHome, stopOriginalsJobs } = vendor;
33
+ const publishProjects = startProjectRegistry(vendor.publishProjectSource);
29
34
  const { createAnonymizerService } = createRequire(import.meta.url)(path.join(applicationRoot, 'server/piecemaker/anonymizer/service.cjs'));
30
- const anonymizer = createAnonymizerService({ homeDir: piecemakerHome(), required: true });
35
+ const anonymizer = createAnonymizerService({ homeDir: piecemakerHome() });
31
36
  const ensureProxy = await startRequiredAnonymizer(anonymizer);
32
37
  const citations = createCitationStore(piecemakerHome());
33
38
  installChatCitationHarness({ runtime: providerRuntimeService, sessions: sessionsService, store: citations, ensureProxy });
34
39
  const library = await openLibrary(piecemakerHome(), applicationRoot);
35
40
  installLibraryRuntime(providerRuntimeService, sessionsService, library.store);
41
+ installModelDiscovery(providerRegistry);
36
42
  const timesheet = createTimesheetBackend(piecemakerHome());
37
43
  const knowledge = createKnowledgeBackend(applicationRoot);
38
44
  export function createPieceMakerLocalRouter() {
39
45
  return knowledge.localRouter;
40
46
  }
41
47
  export function createPieceMakerRouter(options = {}) {
42
- const router = vendor.createPieceMakerRouter({ ...options, anonymizer });
48
+ const router = vendor.createPieceMakerRouter({ ...options, anonymizer, publishProjects });
43
49
  router.use(createCitationsRouter(citations, (id) => {
44
50
  try {
45
51
  sessionsService.getSessionDetailsById(id);
@@ -54,6 +60,7 @@ export function createPieceMakerRouter(options = {}) {
54
60
  router.use(knowledge.router);
55
61
  router.use(createCompanySearchRouter());
56
62
  router.use(createBodaccSearchRouter());
63
+ router.use(createDocxDocumentRouter());
57
64
  router.use(createShellEnvironmentRouter(shellEnvironment));
58
65
  return router;
59
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/piecemaker/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../server/piecemaker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACtG,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,eAAe,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACjF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;AAepF,MAAM,gBAAgB,GAAG,MAAM,8BAA8B,EAAE,CAAC;AAChE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAA2B,CAAC;AAEpF,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC5D,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAC1E,MAAM,EAAE,uBAAuB,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,0CAA0C,CAAC,CAAC,CAAC;AAC3I,MAAM,UAAU,GAAG,uBAAuB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;AAC1E,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,UAAU,CAAC,CAAC;AAC9D,MAAM,SAAS,GAAG,mBAAmB,CAAC,cAAc,EAAE,CAAC,CAAC;AACxD,0BAA0B,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC;AAC1H,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,cAAc,EAAE,EAAE,eAAe,CAAC,CAAC;AACrE,qBAAqB,CAAC,sBAAsB,EAAE,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;AACxC,MAAM,SAAS,GAAG,sBAAsB,CAAC,cAAc,EAAE,CAAC,CAAC;AAC3D,MAAM,SAAS,GAAG,sBAAsB,CAAC,eAAe,CAAC,CAAC;AAE1D,MAAM,UAAU,2BAA2B;IACzC,OAAO,SAAS,CAAC,WAAW,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,UAAgE,EAAE;IACvG,MAAM,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC;IAC1F,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;QACjD,IAAI,CAAC;YAAC,eAAe,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,KAAK,CAAC;QAAC,CAAC;IACzF,CAAC,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { createRequire } from 'node:module';
2
+ import { withStdioRpcServer } from './stdio-rpc.js';
3
+ const MAX_PAGES = 10;
4
+ function bundledCodexAppServer() {
5
+ const launcher = createRequire(import.meta.url).resolve('@openai/codex/bin/codex.js');
6
+ return { command: process.execPath, args: [launcher, 'app-server'] };
7
+ }
8
+ function toModelOption(listed) {
9
+ const efforts = listed.supportedReasoningEfforts ?? [];
10
+ return {
11
+ value: listed.model,
12
+ label: listed.displayName || listed.model,
13
+ ...(listed.description ? { description: listed.description } : {}),
14
+ ...(efforts.length > 0 ? {
15
+ effort: {
16
+ ...(listed.defaultReasoningEffort ? { default: listed.defaultReasoningEffort } : {}),
17
+ values: efforts.map(({ reasoningEffort, description }) => ({
18
+ value: reasoningEffort,
19
+ ...(description ? { description } : {}),
20
+ })),
21
+ },
22
+ } : {}),
23
+ };
24
+ }
25
+ export async function listCodexModels(call) {
26
+ const listed = [];
27
+ let cursor = null;
28
+ for (let page = 0; page < MAX_PAGES; page += 1) {
29
+ const result = await call('model/list', { cursor, includeHidden: false });
30
+ listed.push(...(result.data ?? []));
31
+ cursor = result.nextCursor ?? null;
32
+ if (!cursor)
33
+ break;
34
+ }
35
+ const visible = listed.filter((model) => model.model && !model.hidden);
36
+ if (visible.length === 0)
37
+ throw new Error('codex app-server listed no models');
38
+ return {
39
+ OPTIONS: visible.map(toModelOption),
40
+ DEFAULT: (visible.find((model) => model.isDefault) ?? visible[0]).model,
41
+ };
42
+ }
43
+ export function discoverCodexModels(timeoutMs) {
44
+ return withStdioRpcServer(bundledCodexAppServer(), listCodexModels, timeoutMs);
45
+ }
46
+ //# sourceMappingURL=codex-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-catalog.js","sourceRoot":"","sources":["../../../../server/piecemaker/model-discovery/codex-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,EAAE,kBAAkB,EAAqC,MAAM,gBAAgB,CAAC;AAiBvF,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,SAAS,qBAAqB;IAC5B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACtF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,aAAa,CAAC,MAAwB;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,yBAAyB,IAAI,EAAE,CAAC;IACvD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK;QACzC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,EAAE;gBACN,GAAG,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;oBACzD,KAAK,EAAE,eAAe;oBACtB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxC,CAAC,CAAC;aACJ;SACF,CAAC,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAa;IACjD,MAAM,MAAM,GAAuB,EAAE,CAAC;IACtC,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAuB,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACpC,MAAM,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,MAAM;IACrB,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC/E,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACnC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,kBAAkB,CAAC,qBAAqB,EAAE,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { discoverCodexModels } from './codex-catalog.js';
2
+ import { discoverMistralModels } from './mistral-catalog.js';
3
+ const DEFAULT_DISCOVERERS = {
4
+ codex: discoverCodexModels,
5
+ mistral: discoverMistralModels,
6
+ };
7
+ export function installModelDiscovery(registry, options = {}) {
8
+ const { discoverers = DEFAULT_DISCOVERERS, refreshAfterMs = 10 * 60_000, retryAfterMs = 60_000, timeoutMs = 20_000, now = Date.now, warn = (message) => console.warn(message), } = options;
9
+ for (const [provider, discover] of Object.entries(discoverers)) {
10
+ const models = registry.resolveProvider(provider).models;
11
+ const curated = models.getSupportedModels.bind(models);
12
+ let lastDiscovered = null;
13
+ let served = null;
14
+ let expiresAt = 0;
15
+ let refreshing = null;
16
+ const refresh = () => {
17
+ refreshing ??= (async () => {
18
+ try {
19
+ lastDiscovered = await discover(timeoutMs);
20
+ served = lastDiscovered;
21
+ expiresAt = now() + refreshAfterMs;
22
+ }
23
+ catch (error) {
24
+ warn(`[PieceMaker] ${provider} model discovery failed: ${error instanceof Error ? error.message : String(error)}`);
25
+ served = lastDiscovered ?? await curated();
26
+ expiresAt = now() + retryAfterMs;
27
+ }
28
+ return served;
29
+ })().finally(() => { refreshing = null; });
30
+ return refreshing;
31
+ };
32
+ models.getSupportedModels = async () => {
33
+ if (!served)
34
+ return refresh();
35
+ if (now() >= expiresAt)
36
+ void refresh();
37
+ return served;
38
+ };
39
+ void models.getSupportedModels();
40
+ }
41
+ }
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/piecemaker/model-discovery/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAiB7D,MAAM,mBAAmB,GAA6B;IACpD,KAAK,EAAE,mBAAmB;IAC1B,OAAO,EAAE,qBAAqB;CAC/B,CAAC;AAEF,MAAM,UAAU,qBAAqB,CAAC,QAAwB,EAAE,UAAiC,EAAE;IACjG,MAAM,EACJ,WAAW,GAAG,mBAAmB,EACjC,cAAc,GAAG,EAAE,GAAG,MAAM,EAC5B,YAAY,GAAG,MAAM,EACrB,SAAS,GAAG,MAAM,EAClB,GAAG,GAAG,IAAI,CAAC,GAAG,EACd,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAC1C,GAAG,OAAO,CAAC;IAEZ,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,cAAc,GAAoC,IAAI,CAAC;QAC3D,IAAI,MAAM,GAAoC,IAAI,CAAC;QACnD,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAA6C,IAAI,CAAC;QAEhE,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,UAAU,KAAK,CAAC,KAAK,IAAI,EAAE;gBACzB,IAAI,CAAC;oBACH,cAAc,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC3C,MAAM,GAAG,cAAc,CAAC;oBACxB,SAAS,GAAG,GAAG,EAAE,GAAG,cAAc,CAAC;gBACrC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,gBAAgB,QAAQ,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;oBACnH,MAAM,GAAG,cAAc,IAAI,MAAM,OAAO,EAAE,CAAC;oBAC3C,SAAS,GAAG,GAAG,EAAE,GAAG,YAAY,CAAC;gBACnC,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;QAEF,MAAM,CAAC,kBAAkB,GAAG,KAAK,IAAI,EAAE;YACrC,IAAI,CAAC,MAAM;gBAAE,OAAO,OAAO,EAAE,CAAC;YAC9B,IAAI,GAAG,EAAE,IAAI,SAAS;gBAAE,KAAK,OAAO,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QAEF,KAAK,MAAM,CAAC,kBAAkB,EAAE,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { buildVibeModelsEnvironment, vibeModelOption } from '../../modules/providers/list/mistral/mistral-vibe-models.js';
2
+ import { withStdioRpcServer } from './stdio-rpc.js';
3
+ export async function listVibeModels(call) {
4
+ const { config } = await call('config/read', {});
5
+ const models = (config?.models ?? []).filter((model) => model.alias);
6
+ if (models.length === 0)
7
+ throw new Error('vibe-app-server listed no models');
8
+ const aliases = new Set(models.map((model) => model.alias));
9
+ const preferred = [config?.activeModel?.alias, config?.defaultModelAlias].find((alias) => alias && aliases.has(alias));
10
+ return {
11
+ OPTIONS: models.map((model) => vibeModelOption(model.alias, model.displayName || model.alias, model.name)),
12
+ DEFAULT: preferred ?? models[0].alias,
13
+ };
14
+ }
15
+ export function discoverMistralModels(timeoutMs) {
16
+ const env = { ...process.env, VIBE_MODELS: buildVibeModelsEnvironment() };
17
+ return withStdioRpcServer({ command: 'vibe-app-server', args: [], env }, listVibeModels, timeoutMs);
18
+ }
19
+ //# sourceMappingURL=mistral-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mistral-catalog.js","sourceRoot":"","sources":["../../../../server/piecemaker/model-discovery/mistral-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,yDAAyD,CAAC;AAGtH,OAAO,EAAE,kBAAkB,EAAgB,MAAM,gBAAgB,CAAC;AAgBlE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAa;IAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,CAAmB,CAAC;IACnE,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAE7E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACvH,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1G,OAAO,EAAE,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAiB;IACrD,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,0BAA0B,EAAE,EAAE,CAAC;IAC1E,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;AACtG,CAAC"}
@@ -0,0 +1,61 @@
1
+ import readline from 'node:readline';
2
+ import crossSpawn from 'cross-spawn';
3
+ const CLIENT_INFO = { name: 'piecemaker', title: 'PieceMaker', version: '1' };
4
+ export async function withStdioRpcServer(server, exchange, timeoutMs) {
5
+ const child = crossSpawn(server.command, server.args, { env: server.env ?? process.env, stdio: ['pipe', 'pipe', 'pipe'] });
6
+ const pending = new Map();
7
+ let nextId = 1;
8
+ let stderr = '';
9
+ const failAll = (reason) => {
10
+ for (const settle of pending.values())
11
+ settle({ error: { message: reason } });
12
+ pending.clear();
13
+ };
14
+ child.stderr?.on('data', (chunk) => { stderr = (stderr + String(chunk)).slice(-1000); });
15
+ child.on('error', (error) => failAll(error.message));
16
+ child.on('exit', (code) => failAll(`${server.command} exited (code ${code ?? 'null'}) ${stderr.trim().split('\n').pop() ?? ''}`.trim()));
17
+ child.stdin?.on('error', (error) => failAll(error.message));
18
+ child.stdout?.on('error', (error) => failAll(error.message));
19
+ child.stderr?.on('error', () => { });
20
+ const reader = readline.createInterface({ input: child.stdout });
21
+ reader.on('line', (line) => {
22
+ let reply;
23
+ try {
24
+ reply = JSON.parse(line);
25
+ }
26
+ catch {
27
+ return;
28
+ }
29
+ if (typeof reply.id !== 'number')
30
+ return;
31
+ pending.get(reply.id)?.(reply);
32
+ pending.delete(reply.id);
33
+ });
34
+ const call = (method, params) => new Promise((resolve, reject) => {
35
+ const id = nextId++;
36
+ pending.set(id, (reply) => (reply.error
37
+ ? reject(new Error(reply.error.message || `${server.command} rejected ${method}`))
38
+ : resolve(reply.result)));
39
+ child.stdin?.write(`${JSON.stringify({ jsonrpc: '2.0', id, method, params })}\n`);
40
+ });
41
+ let timer;
42
+ const deadline = new Promise((_, reject) => {
43
+ timer = setTimeout(() => reject(new Error(`${server.command} did not answer within ${timeoutMs} ms`)), timeoutMs);
44
+ });
45
+ try {
46
+ return await Promise.race([
47
+ (async () => {
48
+ await call('initialize', { clientInfo: CLIENT_INFO, capabilities: {} });
49
+ child.stdin?.write(`${JSON.stringify({ jsonrpc: '2.0', method: 'initialized', params: {} })}\n`);
50
+ return exchange(call);
51
+ })(),
52
+ deadline,
53
+ ]);
54
+ }
55
+ finally {
56
+ clearTimeout(timer);
57
+ reader.close();
58
+ child.kill();
59
+ }
60
+ }
61
+ //# sourceMappingURL=stdio-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio-rpc.js","sourceRoot":"","sources":["../../../../server/piecemaker/model-discovery/stdio-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import path from 'path';
2
+ import { projectsDb } from '../modules/database/index.js';
3
+ const PUBLISH_INTERVAL_MS = 5000;
4
+ export function startProjectRegistry(publishProjectSource) {
5
+ const sourceId = `database:${path.resolve(process.env.DATABASE_PATH || 'auth.db')}`;
6
+ let publishedSignature = null;
7
+ const publishProjects = () => {
8
+ const folders = [...projectsDb.getProjectPaths(), ...projectsDb.getArchivedProjectPaths()]
9
+ .map((row) => row.project_path)
10
+ .sort();
11
+ const signature = folders.join('\n');
12
+ if (signature === publishedSignature)
13
+ return;
14
+ publishProjectSource(sourceId, folders);
15
+ publishedSignature = signature;
16
+ };
17
+ const publishProjectsSafely = () => {
18
+ try {
19
+ publishProjects();
20
+ }
21
+ catch (error) {
22
+ console.error('[PieceMaker] Publication des projets impossible :', error);
23
+ }
24
+ };
25
+ publishProjectsSafely();
26
+ setInterval(publishProjectsSafely, PUBLISH_INTERVAL_MS).unref();
27
+ return publishProjectsSafely;
28
+ }
29
+ //# sourceMappingURL=project-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry.js","sourceRoot":"","sources":["../../../server/piecemaker/project-registry.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAIjC,MAAM,UAAU,oBAAoB,CAAC,oBAA0C;IAC7E,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,SAAS,CAAC,EAAE,CAAC;IACpF,IAAI,kBAAkB,GAAkB,IAAI,CAAC;IAE7C,MAAM,eAAe,GAAG,GAAG,EAAE;QAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,eAAe,EAAE,EAAE,GAAG,UAAU,CAAC,uBAAuB,EAAE,CAAC;aACvF,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;aAC9B,IAAI,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,SAAS,KAAK,kBAAkB;YAAE,OAAO;QAC7C,oBAAoB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,kBAAkB,GAAG,SAAS,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,GAAG,EAAE;QACjC,IAAI,CAAC;YACH,eAAe,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,KAAK,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC;IAEF,qBAAqB,EAAE,CAAC;IACxB,WAAW,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC,KAAK,EAAE,CAAC;IAChE,OAAO,qBAAqB,CAAC;AAC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piecemaker-legal/piecemaker",
3
- "version": "2.0.8",
3
+ "version": "2.0.10",
4
4
  "productName": "PieceMaker",
5
5
  "description": "Plateforme IA pour juristes français",
6
6
  "type": "module",
@@ -159,6 +159,8 @@
159
159
  "@codemirror/lang-python": "^6.2.1",
160
160
  "@codemirror/merge": "^6.11.1",
161
161
  "@codemirror/theme-one-dark": "^6.1.2",
162
+ "@eigenpal/docx-editor-i18n": "^1.9.0",
163
+ "@eigenpal/docx-editor-react": "^1.9.0",
162
164
  "@iarna/toml": "^2.2.5",
163
165
  "@octokit/rest": "^22.0.0",
164
166
  "@openai/codex": "0.153.4",
@@ -196,6 +198,15 @@
196
198
  "node-fetch": "^2.7.0",
197
199
  "node-pty": "^1.2.0-beta.12",
198
200
  "pdf-lib": "^1.17.1",
201
+ "prosemirror-commands": "^1.7.2",
202
+ "prosemirror-dropcursor": "^1.8.4",
203
+ "prosemirror-history": "^1.5.0",
204
+ "prosemirror-keymap": "^1.2.3",
205
+ "prosemirror-model": "^1.25.12",
206
+ "prosemirror-state": "^1.4.4",
207
+ "prosemirror-tables": "^1.8.5",
208
+ "prosemirror-transform": "^1.12.2",
209
+ "prosemirror-view": "^1.42.6",
199
210
  "react": "^18.2.0",
200
211
  "react-dom": "^18.2.0",
201
212
  "react-dropzone": "^14.2.3",
@@ -0,0 +1,19 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+
5
+ import { removeLegacyProxyConfig } from '../../../server/piecemaker/anonymizer/client-config.cjs';
6
+
7
+ const userHome = os.homedir();
8
+ const homeDir = path.join(userHome, '.piecemaker');
9
+ const configFile = path.join(homeDir, 'config.json');
10
+ const config = JSON.parse(fs.readFileSync(configFile, 'utf8'));
11
+ if (!config || typeof config !== 'object' || Array.isArray(config)) throw new Error('Configuration PieceMaker invalide');
12
+
13
+ const next = { ...config, anonymizer: { ...config.anonymizer, enabled: false } };
14
+ const temporary = `${configFile}.piecemaker-${process.pid}-${Date.now()}`;
15
+ fs.writeFileSync(temporary, `${JSON.stringify(next, null, 2)}\n`, { mode: 0o600 });
16
+ fs.renameSync(temporary, configFile);
17
+
18
+ removeLegacyProxyConfig({ userHome, homeDir });
19
+ process.stdout.write('Proxy PII PieceMaker désactivé.\n');
@@ -25,7 +25,6 @@ export const INSTALLER_ENTRY = path.join(APP.directory, 'server', 'piecemaker',
25
25
  export const PORTS = {
26
26
  appServer: numberFromEnv('PIECEMAKER_APP_PORT', 3003),
27
27
  appClient: numberFromEnv('PIECEMAKER_VITE_PORT', 5173),
28
- anonymizer: numberFromEnv('PIECEMAKER_PII_PORT', 4111),
29
28
  };
30
29
 
31
30
  export const APP_URL = `http://localhost:${PORTS.appClient}`;
@@ -33,15 +33,6 @@ export function appClientReachable() {
33
33
  return httpReachable(`http://127.0.0.1:${PORTS.appClient}/`);
34
34
  }
35
35
 
36
- function anonymizerPort() {
37
- try {
38
- const port = Number.parseInt(JSON.parse(fs.readFileSync(path.join(PIECEMAKER_HOME, 'config.json'), 'utf8')).mikePiiPort, 10);
39
- if (Number.isInteger(port) && port > 0) return port;
40
- } catch {
41
- }
42
- return PORTS.anonymizer;
43
- }
44
-
45
36
  function stopPid(pid) {
46
37
  if (!Number.isInteger(pid) || pid <= 0 || pid === process.pid) return false;
47
38
  if (process.platform === 'win32') {
@@ -61,7 +52,7 @@ export async function stopApplication() {
61
52
  } catch {
62
53
  }
63
54
 
64
- for (const port of [PORTS.appClient, PORTS.appServer, anonymizerPort()]) {
55
+ for (const port of [PORTS.appClient, PORTS.appServer]) {
65
56
  const result = await freePort(port);
66
57
  killed.push(...result.killed);
67
58
  if (!result.released) occupied.push(port);
@@ -2,7 +2,6 @@
2
2
 
3
3
  import { installPiecemakerCommand, piecemakerExecutable } from './install-command.mjs';
4
4
  import { APP, APP_URL, PORTS } from './lib/config.mjs';
5
- import { repairClientProxies } from './lib/piecemaker-anonymizer.mjs';
6
5
  import { installComponents } from './lib/composants.mjs';
7
6
  import { installPlugins } from './lib/plugins.mjs';
8
7
  import { gitAvailable, resolveNodeRuntime } from './lib/node-runtime.mjs';
@@ -130,8 +129,6 @@ async function main() {
130
129
  if (command.shims.length) ok(`installée : ${command.executable}`);
131
130
  else warn('commande absente du PATH — relancez node scripts/piecemaker/cli/install-command.mjs');
132
131
 
133
- await repairClientProxies({ appDir: APP.directory, report });
134
-
135
132
  if (!options.launchOnly || !(await applicationIsRunning())) {
136
133
  const running = await resetAndLaunch(runtime);
137
134
  if (!running) return 1;
@@ -1,3 +1,4 @@
1
+ import { VIBE_MODEL_PRESETS, vibeModelOption } from '@/modules/providers/list/mistral/mistral-vibe-models.js';
1
2
  import type { IProviderModels } from '@/shared/interfaces.js';
2
3
  import type {
3
4
  ProviderCurrentActiveModel,
@@ -8,60 +9,10 @@ import { buildDefaultProviderCurrentActiveModel } from '@/shared/utils.js';
8
9
  /** Curated Mistral catalog shipped as immutable CloudCLI defaults. */
9
10
  export const MISTRAL_PREDEFINED_MODELS: ProviderModelsDefinition = {
10
11
  OPTIONS: [
11
- {
12
- value: 'mistral-large-latest',
13
- label: 'Mistral Large',
14
- description: 'Most powerful Mistral model for complex reasoning and advanced tasks.',
15
- effort: {
16
- default: 'medium',
17
- values: [
18
- { value: 'low' },
19
- { value: 'medium' },
20
- { value: 'high' },
21
- ],
22
- },
23
- },
24
- {
25
- value: 'mistral-medium-latest',
26
- label: 'Mistral Medium',
27
- description: 'Balanced model for everyday tasks and coding.',
28
- effort: {
29
- default: 'medium',
30
- values: [
31
- { value: 'low' },
32
- { value: 'medium' },
33
- { value: 'high' },
34
- ],
35
- },
36
- },
37
- {
38
- value: 'mistral-small-latest',
39
- label: 'Mistral Small',
40
- description: 'Fast and efficient model for simpler tasks.',
41
- effort: {
42
- default: 'medium',
43
- values: [
44
- { value: 'low' },
45
- { value: 'medium' },
46
- { value: 'high' },
47
- ],
48
- },
49
- },
50
- {
51
- value: 'codestral-latest',
52
- label: 'Codestral',
53
- description: 'Mistral model specialized for coding and development tasks.',
54
- effort: {
55
- default: 'medium',
56
- values: [
57
- { value: 'low' },
58
- { value: 'medium' },
59
- { value: 'high' },
60
- ],
61
- },
62
- },
12
+ ...VIBE_MODEL_PRESETS.map((preset) => vibeModelOption(preset.alias, preset.display_name, preset.name)),
13
+ vibeModelOption('local', 'Devstral (local)', 'devstral'),
63
14
  ],
64
- DEFAULT: 'mistral-large-latest',
15
+ DEFAULT: 'mistral-medium-3.5',
65
16
  };
66
17
 
67
18
  /** Provider registry model adapter for Mistral predefined models. */