@piecemaker-legal/piecemaker 1.0.6 → 1.0.8

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 (217) hide show
  1. package/dist/assets/{abnfDiagram-VCTEODGH-DF7LFtT-.js → abnfDiagram-VCTEODGH-K8VucbQ5.js} +1 -1
  2. package/dist/assets/{arc-xOmjWeVH.js → arc-DUmCdRoC.js} +1 -1
  3. package/dist/assets/{architectureDiagram-5GKGNRK7-CESzNPwa.js → architectureDiagram-5GKGNRK7-DYhs5vqD.js} +1 -1
  4. package/dist/assets/{blockDiagram-I7D4REHJ-BjdN78Ad.js → blockDiagram-I7D4REHJ-DaXJ9nve.js} +1 -1
  5. package/dist/assets/{c4Diagram-7LVT6UL2-BcK9EDWT.js → c4Diagram-7LVT6UL2-BLbi-zPT.js} +1 -1
  6. package/dist/assets/channel-CJIq1vqf.js +1 -0
  7. package/dist/assets/{chunk-2Q5K7J3B-DGUN1JFP.js → chunk-2Q5K7J3B-Bzs3gxaq.js} +1 -1
  8. package/dist/assets/{chunk-5VM5RSS4-BG3BBcFr.js → chunk-5VM5RSS4-CQNzml7k.js} +1 -1
  9. package/dist/assets/{chunk-F27PBJKO-CLIOfrF5.js → chunk-F27PBJKO-B8xedWWH.js} +1 -1
  10. package/dist/assets/{chunk-IMKFNOWR-D6lGkqij.js → chunk-IMKFNOWR-CjBGlNOu.js} +1 -1
  11. package/dist/assets/{chunk-JWPE2WC7-BmF9vLBT.js → chunk-JWPE2WC7-vfnYEpgA.js} +1 -1
  12. package/dist/assets/{chunk-POPQ4Y6H-C_0SR3ak.js → chunk-POPQ4Y6H-Btl98tE8.js} +1 -1
  13. package/dist/assets/{chunk-SVP7TREG-rT20Wfpp.js → chunk-SVP7TREG-Bp6-pLjR.js} +1 -1
  14. package/dist/assets/{chunk-TICWLB2K-Cn2hkmcf.js → chunk-TICWLB2K-DvmznW2q.js} +1 -1
  15. package/dist/assets/{chunk-XXDRQBXY-Dm_eP1_v.js → chunk-XXDRQBXY-QSHJTsI3.js} +1 -1
  16. package/dist/assets/classDiagram-ZZMXUADV-BYkEWggn.js +1 -0
  17. package/dist/assets/classDiagram-v2-VYDZK3BY-BYkEWggn.js +1 -0
  18. package/dist/assets/{cose-bilkent-JH36ORCC-cJeeJsep.js → cose-bilkent-JH36ORCC-DxpyZoe2.js} +1 -1
  19. package/dist/assets/{cynefin-OW5HDTMX-DX2ePIXe.js → cynefin-OW5HDTMX-B9GRp2Gn.js} +1 -1
  20. package/dist/assets/{cynefinDiagram-5FMLGOSQ-BvWXN-RR.js → cynefinDiagram-5FMLGOSQ-Q-2tz5GW.js} +1 -1
  21. package/dist/assets/{dagre-GXQ25YYZ-CkwPRhGR.js → dagre-GXQ25YYZ-3Rl3NqNe.js} +1 -1
  22. package/dist/assets/{diagram-S7CK7UJ4-CBGNzYyv.js → diagram-S7CK7UJ4-CreeWCO1.js} +1 -1
  23. package/dist/assets/{diagram-UQ7AKVKN-CiwCU0SJ.js → diagram-UQ7AKVKN-DNBoIyDJ.js} +1 -1
  24. package/dist/assets/{diagram-VSXAHHWV-Aekg4nTk.js → diagram-VSXAHHWV-ZkcE_cRk.js} +1 -1
  25. package/dist/assets/{diagram-VX7I27RA-DPFP5K7r.js → diagram-VX7I27RA-Dzdf7N2Q.js} +1 -1
  26. package/dist/assets/{diagram-Z3DM3KII-BHJkxoey.js → diagram-Z3DM3KII-M6b-nr1u.js} +1 -1
  27. package/dist/assets/{ebnfDiagram-PWID7BFC-2rV1P32T.js → ebnfDiagram-PWID7BFC-DunIw64n.js} +1 -1
  28. package/dist/assets/{erDiagram-RLTQ6QDP-C4BjyS_H.js → erDiagram-RLTQ6QDP-kN0Se5uc.js} +1 -1
  29. package/dist/assets/{flowDiagram-HODETNUW-DL1TBlAG.js → flowDiagram-HODETNUW-24YCovut.js} +1 -1
  30. package/dist/assets/{ganttDiagram-EL5Y4UJY-MKjvzCWz.js → ganttDiagram-EL5Y4UJY-DTUUEEy6.js} +1 -1
  31. package/dist/assets/{gitGraphDiagram-WWUBYQGX-CS_oTGK5.js → gitGraphDiagram-WWUBYQGX-BitrqhMr.js} +1 -1
  32. package/dist/assets/{index-XOGQDqU3.js → index-CG9hW1GU.js} +120 -120
  33. package/dist/assets/index-D_Dc_nQv.css +1 -0
  34. package/dist/assets/{infoDiagram-27XIBGKW-ihUr2GjN.js → infoDiagram-27XIBGKW-BNHN5Mby.js} +1 -1
  35. package/dist/assets/{ishikawaDiagram-5VMMS53U-D2YAnuir.js → ishikawaDiagram-5VMMS53U-De3IQKso.js} +1 -1
  36. package/dist/assets/{journeyDiagram-3NMN7TZE-Bc2hSZGD.js → journeyDiagram-3NMN7TZE-CWlkZ25T.js} +1 -1
  37. package/dist/assets/{kanban-definition-UXKFOSKX-LRMGNonX.js → kanban-definition-UXKFOSKX-2o_ax-Nk.js} +1 -1
  38. package/dist/assets/{layout-CcfWOlPV.js → layout-Btga9ZYP.js} +1 -1
  39. package/dist/assets/{linear-7JoS2gQO.js → linear-BoGGmqPG.js} +1 -1
  40. package/dist/assets/{mermaid.core-ijh_SsuN.js → mermaid.core-M308jnLQ.js} +6 -6
  41. package/dist/assets/{mindmap-definition-YA3MSWOX-DCE4nzfF.js → mindmap-definition-YA3MSWOX-BJ6C_grh.js} +1 -1
  42. package/dist/assets/{pegDiagram-XKGWAZYB-SjaGa7lE.js → pegDiagram-XKGWAZYB-qcdYX0Xe.js} +1 -1
  43. package/dist/assets/{pieDiagram-E7YTZNPT-1xcRidSZ.js → pieDiagram-E7YTZNPT-XPrSlt1M.js} +1 -1
  44. package/dist/assets/{quadrantDiagram-AXDQQJYC-obHAHnYV.js → quadrantDiagram-AXDQQJYC-COhHhra5.js} +1 -1
  45. package/dist/assets/{railroadDiagram-O6MQD6OU-BsCVcRZb.js → railroadDiagram-O6MQD6OU-Mw_KF6gb.js} +1 -1
  46. package/dist/assets/{requirementDiagram-BXWQKSXE-CUNkhvqb.js → requirementDiagram-BXWQKSXE-DPbt7jUM.js} +1 -1
  47. package/dist/assets/{sankeyDiagram-P5KCCOFB-DhezXMKm.js → sankeyDiagram-P5KCCOFB-B6HzL6Gh.js} +1 -1
  48. package/dist/assets/{sequenceDiagram-WJ2MYXX4-CL9VswXH.js → sequenceDiagram-WJ2MYXX4-B_dXXCC0.js} +1 -1
  49. package/dist/assets/{sizeCapture-INFHLROL-t0g9jiEz.js → sizeCapture-INFHLROL-DwODubWN.js} +1 -1
  50. package/dist/assets/{stateDiagram-D77RDMKH-BW-g-IOz.js → stateDiagram-D77RDMKH-5AUnOL3S.js} +1 -1
  51. package/dist/assets/stateDiagram-v2-MP3YSRHH-CFM_nDL9.js +1 -0
  52. package/dist/assets/{swimlanes-42K2YHIH-LsuyeBte.js → swimlanes-42K2YHIH-BLnIwbnd.js} +1 -1
  53. package/dist/assets/swimlanesDiagram-VR7AAH4N-BRQJYnDN.js +8 -0
  54. package/dist/assets/{timeline-definition-24CTP7MA-B0cFka1R.js → timeline-definition-24CTP7MA-B1Yc7-na.js} +1 -1
  55. package/dist/assets/{vendor-codemirror-C5qqu4R7.js → vendor-codemirror-CjW0lHR5.js} +5 -5
  56. package/dist/assets/{vennDiagram-4TSXK5OY-D3HNCDR3.js → vennDiagram-4TSXK5OY-BFRtl-NI.js} +1 -1
  57. package/dist/assets/{wardleyDiagram-VM6X3IG4-DJ3Co8nb.js → wardleyDiagram-VM6X3IG4-BsR8iaD_.js} +1 -1
  58. package/dist/assets/{xychartDiagram-S5SC5T6Z-Cz5E9New.js → xychartDiagram-S5SC5T6Z-Crh1SwrA.js} +1 -1
  59. package/dist/favicon.png +0 -0
  60. package/dist/favicon.svg +1 -9
  61. package/dist/generate-icons.js +47 -46
  62. package/dist/icons/icon-128x128.png +0 -0
  63. package/dist/icons/icon-128x128.svg +1 -12
  64. package/dist/icons/icon-144x144.png +0 -0
  65. package/dist/icons/icon-144x144.svg +1 -12
  66. package/dist/icons/icon-152x152.png +0 -0
  67. package/dist/icons/icon-152x152.svg +1 -12
  68. package/dist/icons/icon-192x192.png +0 -0
  69. package/dist/icons/icon-192x192.svg +1 -12
  70. package/dist/icons/icon-384x384.png +0 -0
  71. package/dist/icons/icon-384x384.svg +1 -12
  72. package/dist/icons/icon-512x512.png +0 -0
  73. package/dist/icons/icon-512x512.svg +1 -12
  74. package/dist/icons/icon-72x72.png +0 -0
  75. package/dist/icons/icon-72x72.svg +1 -12
  76. package/dist/icons/icon-96x96.png +0 -0
  77. package/dist/icons/icon-96x96.svg +1 -12
  78. package/dist/index.html +3 -3
  79. package/dist/logo-128.png +0 -0
  80. package/dist/logo-256.png +0 -0
  81. package/dist/logo-32.png +0 -0
  82. package/dist/logo-512.png +0 -0
  83. package/dist/logo-64.png +0 -0
  84. package/dist/logo-sources/logo-black.png +0 -0
  85. package/dist/logo-sources/logo-white.png +0 -0
  86. package/dist/logo.svg +1 -17
  87. package/dist/sw.js +1 -1
  88. package/dist-server/plugins/piecemaker-dossier/src/institutional-terms.js +91 -0
  89. package/dist-server/plugins/piecemaker-dossier/src/institutional-terms.js.map +1 -0
  90. package/dist-server/plugins/piecemaker-dossier/src/knowledge.js +112 -10
  91. package/dist-server/plugins/piecemaker-dossier/src/knowledge.js.map +1 -1
  92. package/dist-server/plugins/piecemaker-dossier/src/scan-result.js +5 -1
  93. package/dist-server/plugins/piecemaker-dossier/src/scan-result.js.map +1 -1
  94. package/dist-server/server/index.js +60 -26
  95. package/dist-server/server/index.js.map +1 -1
  96. package/dist-server/server/modules/cli/desktop-shortcut.js +80 -0
  97. package/dist-server/server/modules/cli/desktop-shortcut.js.map +1 -0
  98. package/dist-server/server/modules/cli/pwa-launcher.js +27 -4
  99. package/dist-server/server/modules/cli/pwa-launcher.js.map +1 -1
  100. package/dist-server/server/modules/database/repositories/projects.db.js +28 -6
  101. package/dist-server/server/modules/database/repositories/projects.db.js.map +1 -1
  102. package/dist-server/server/modules/database/tests/projects.db.integration.test.js +58 -1
  103. package/dist-server/server/modules/database/tests/projects.db.integration.test.js.map +1 -1
  104. package/dist-server/server/modules/plugins/plugins.routes.js +8 -1
  105. package/dist-server/server/modules/plugins/plugins.routes.js.map +1 -1
  106. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js +2 -0
  107. package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js.map +1 -1
  108. package/dist-server/server/piecemaker/bodacc-search.js +191 -0
  109. package/dist-server/server/piecemaker/bodacc-search.js.map +1 -0
  110. package/dist-server/server/piecemaker/company-search.js +145 -0
  111. package/dist-server/server/piecemaker/company-search.js.map +1 -0
  112. package/dist-server/server/piecemaker/company-search.test.js +18 -0
  113. package/dist-server/server/piecemaker/company-search.test.js.map +1 -0
  114. package/dist-server/server/piecemaker/index.js +6 -2
  115. package/dist-server/server/piecemaker/index.js.map +1 -1
  116. package/dist-server/server/piecemaker/knowledge/index.js +9 -4
  117. package/dist-server/server/piecemaker/knowledge/index.js.map +1 -1
  118. package/dist-server/server/piecemaker/knowledge/pipeline.js +68 -58
  119. package/dist-server/server/piecemaker/knowledge/pipeline.js.map +1 -1
  120. package/dist-server/server/piecemaker/knowledge/routes.js +2 -4
  121. package/dist-server/server/piecemaker/knowledge/routes.js.map +1 -1
  122. package/dist-server/server/piecemaker/knowledge/scan-jobs.js +91 -0
  123. package/dist-server/server/piecemaker/knowledge/scan-jobs.js.map +1 -0
  124. package/dist-server/server/piecemaker/knowledge/service.js +18 -36
  125. package/dist-server/server/piecemaker/knowledge/service.js.map +1 -1
  126. package/dist-server/server/piecemaker/library/connector-installation.js +224 -0
  127. package/dist-server/server/piecemaker/library/connector-installation.js.map +1 -0
  128. package/dist-server/server/piecemaker/library/index.js +11 -1
  129. package/dist-server/server/piecemaker/library/index.js.map +1 -1
  130. package/dist-server/server/piecemaker/library/marketplace.js +102 -43
  131. package/dist-server/server/piecemaker/library/marketplace.js.map +1 -1
  132. package/dist-server/server/piecemaker/library/migrate.js +8 -1
  133. package/dist-server/server/piecemaker/library/migrate.js.map +1 -1
  134. package/dist-server/server/piecemaker/library/provider-agents.js +50 -0
  135. package/dist-server/server/piecemaker/library/provider-agents.js.map +1 -0
  136. package/dist-server/server/piecemaker/library/provider-connectors.js +80 -0
  137. package/dist-server/server/piecemaker/library/provider-connectors.js.map +1 -0
  138. package/dist-server/server/piecemaker/library/provider-skills.js +11 -2
  139. package/dist-server/server/piecemaker/library/provider-skills.js.map +1 -1
  140. package/dist-server/server/piecemaker/library/store.js +125 -35
  141. package/dist-server/server/piecemaker/library/store.js.map +1 -1
  142. package/dist-server/server/piecemaker/library/workspace-installation.js +53 -29
  143. package/dist-server/server/piecemaker/library/workspace-installation.js.map +1 -1
  144. package/dist-server/server/piecemaker/timesheet/service.js +4 -21
  145. package/dist-server/server/piecemaker/timesheet/service.js.map +1 -1
  146. package/package.json +3 -2
  147. package/product.config.json +1 -0
  148. package/scripts/piecemaker/cli/install-command.mjs +35 -9
  149. package/scripts/piecemaker/cli/lib/app-window.mjs +47 -0
  150. package/scripts/piecemaker/cli/lib/config.mjs +1 -0
  151. package/scripts/piecemaker/cli/lib/piecemaker-anonymizer.mjs +78 -0
  152. package/scripts/piecemaker/cli/lib/plugins.mjs +2 -0
  153. package/scripts/piecemaker/cli/lib/pwa.mjs +49 -13
  154. package/scripts/piecemaker/cli/lib/services.mjs +65 -4
  155. package/scripts/piecemaker/cli/piecemaker-command.test.mjs +25 -0
  156. package/scripts/piecemaker/cli/piecemaker.mjs +60 -45
  157. package/scripts/piecemaker/cli/piecemaker.ps1 +8 -0
  158. package/scripts/piecemaker/cli/piecemaker.sh +6 -1
  159. package/server/index.ts +52 -23
  160. package/server/modules/cli/desktop-shortcut.ts +89 -0
  161. package/server/modules/cli/pwa-launcher.ts +29 -4
  162. package/server/modules/database/repositories/projects.db.ts +28 -6
  163. package/server/modules/database/tests/projects.db.integration.test.ts +63 -1
  164. package/server/modules/plugins/plugins.routes.ts +8 -1
  165. package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +5 -0
  166. package/server/piecemaker/anonymizer/client-config.cjs +10 -2
  167. package/server/piecemaker/anonymizer/dictionary.cjs +6 -72
  168. package/server/piecemaker/bodacc-search.ts +205 -0
  169. package/server/piecemaker/company-search.test.ts +26 -0
  170. package/server/piecemaker/company-search.ts +183 -0
  171. package/server/piecemaker/index.ts +8 -2
  172. package/server/piecemaker/knowledge/index.ts +9 -4
  173. package/server/piecemaker/knowledge/pipeline.ts +89 -57
  174. package/server/piecemaker/knowledge/routes.ts +2 -4
  175. package/server/piecemaker/knowledge/scan-jobs.ts +111 -0
  176. package/server/piecemaker/knowledge/service.ts +18 -33
  177. package/server/piecemaker/library/connector-installation.ts +248 -0
  178. package/server/piecemaker/library/index.ts +5 -1
  179. package/server/piecemaker/library/marketplace.ts +104 -39
  180. package/server/piecemaker/library/migrate.ts +8 -1
  181. package/server/piecemaker/library/provider-agents.ts +49 -0
  182. package/server/piecemaker/library/provider-connectors.ts +89 -0
  183. package/server/piecemaker/library/provider-skills.ts +10 -1
  184. package/server/piecemaker/library/store.ts +129 -36
  185. package/server/piecemaker/library/workspace-installation.ts +54 -29
  186. package/server/piecemaker/router.cjs +2 -1
  187. package/server/piecemaker/timesheet/service.ts +4 -16
  188. package/server/piecemaker/vendor/installer/steps/03-python-gliner.mjs +0 -27
  189. package/server/piecemaker/vendor/installer/steps/14-mxc-sandbox.mjs +1 -1
  190. package/server/piecemaker/vendor/piecemaker-plugin/scripts/lib/substitution.cjs +2 -3
  191. package/server/piecemaker/vendor/piecemaker-plugin/skills/conversion-md/SKILL.md +3 -3
  192. package/server/piecemaker/vendor/websocket-server/admin-routes.cjs +3 -10
  193. package/server/piecemaker/vendor/websocket-server/originals-pipeline.cjs +135 -4
  194. package/server/piecemaker/vendor/websocket-server/process-group.cjs +95 -0
  195. package/server/piecemaker/vendor/websocket-server/scripts/__pycache__/scan_utils.cpython-312.pyc +0 -0
  196. package/server/piecemaker/vendor/websocket-server/scripts/convert_and_scan_pipeline.py +280 -149
  197. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/__pycache__/model_config.cpython-312.pyc +0 -0
  198. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/__pycache__/scanner_worker.cpython-312.pyc +0 -0
  199. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/scanner_worker.py +35 -29
  200. package/server/piecemaker/vendor/websocket-server/scripts/requirements.txt +0 -5
  201. package/server/shared/types.ts +1 -0
  202. package/dist/assets/channel-Dz3eE5vU.js +0 -1
  203. package/dist/assets/classDiagram-ZZMXUADV-BC1eKV2j.js +0 -1
  204. package/dist/assets/classDiagram-v2-VYDZK3BY-BC1eKV2j.js +0 -1
  205. package/dist/assets/index-DhwJpHCq.css +0 -1
  206. package/dist/assets/stateDiagram-v2-MP3YSRHH-BXuT4zDG.js +0 -1
  207. package/dist/assets/swimlanesDiagram-VR7AAH4N-B0eYrB4U.js +0 -8
  208. package/server/piecemaker/vendor/websocket-server/case-instructions.cjs +0 -111
  209. package/server/piecemaker/vendor/websocket-server/scripts/ADDRESS_ANONYMIZATION.md +0 -216
  210. package/server/piecemaker/vendor/websocket-server/scripts/DEDUPLICATION_CHANGES.md +0 -134
  211. package/server/piecemaker/vendor/websocket-server/scripts/GLINER2_README.md +0 -138
  212. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/AUDIT_PERF_QUALITE.md +0 -246
  213. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/MODELE_COREML.md +0 -62
  214. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/__pycache__/coreml_runtime.cpython-312.pyc +0 -0
  215. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/build_coreml.py +0 -118
  216. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/coreml_runtime.py +0 -164
  217. package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/presidio-gliner.py +0 -479
@@ -1,46 +1,70 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
+ const SKILL_PROVIDERS = ['.claude', '.agents', '.cursor', '.opencode', '.grok'];
4
+ const AGENT_TARGETS = [
5
+ { provider: '.claude', folder: 'agents', extension: '.md', sourceFile: 'agent.md' },
6
+ { provider: '.codex', folder: 'agents', extension: '.toml', sourceFile: 'agent.toml' },
7
+ { provider: '.opencode', folder: 'agent', extension: '.md', sourceFile: 'agent.md' },
8
+ { provider: '.grok', folder: 'agents', extension: '.md', sourceFile: 'agent.md' },
9
+ ];
10
+ function assertWorkspaceDirectory(workspace, directory, enabled) {
11
+ if (!fs.existsSync(directory)) {
12
+ if (enabled)
13
+ fs.mkdirSync(directory);
14
+ return;
15
+ }
16
+ if (!fs.statSync(directory).isDirectory() || !fs.realpathSync(directory).startsWith(workspace + path.sep)) {
17
+ throw new Error(`Répertoire de composants hors du dossier : ${directory}`);
18
+ }
19
+ }
3
20
  export function prepareWorkspaceInstallation(workspace, id, packageRoot, kind, enabled) {
4
- const providers = kind === 'skill' ? ['.claude', '.agents'] : ['.claude', '.codex'];
5
- const targets = providers.map((provider) => {
6
- const parent = path.join(workspace, provider, kind === 'skill' ? 'skills' : 'agents');
7
- const extension = kind === 'skill' ? '' : provider === '.claude' ? '.md' : '.toml';
8
- const source = kind === 'skill' ? packageRoot : path.join(packageRoot, `agent${extension}`);
9
- for (const directory of [path.dirname(parent), parent]) {
10
- if (!fs.existsSync(directory)) {
11
- if (enabled)
12
- fs.mkdirSync(directory);
13
- continue;
14
- }
15
- if (!fs.statSync(directory).isDirectory() || !fs.realpathSync(directory).startsWith(workspace + path.sep)) {
16
- throw new Error(`Répertoire de composants hors du dossier : ${directory}`);
17
- }
18
- }
19
- const target = path.join(parent, `piecemaker-${id}${extension}`);
21
+ const targets = kind === 'skill'
22
+ ? SKILL_PROVIDERS.map((provider) => {
23
+ const parent = path.join(workspace, provider, 'skills');
24
+ for (const directory of [path.dirname(parent), parent])
25
+ assertWorkspaceDirectory(workspace, directory, enabled);
26
+ return {
27
+ parent,
28
+ target: path.join(parent, `piecemaker-${id}`),
29
+ source: packageRoot,
30
+ kind: 'skill',
31
+ };
32
+ })
33
+ : AGENT_TARGETS.map((entry) => {
34
+ const parent = path.join(workspace, entry.provider, entry.folder);
35
+ for (const directory of [path.dirname(parent), parent])
36
+ assertWorkspaceDirectory(workspace, directory, enabled);
37
+ return {
38
+ parent,
39
+ target: path.join(parent, `piecemaker-${id}${entry.extension}`),
40
+ source: path.join(packageRoot, entry.sourceFile),
41
+ kind: 'agent',
42
+ };
43
+ });
44
+ const prepared = targets.map((entry) => {
20
45
  let existing;
21
46
  try {
22
- existing = fs.lstatSync(target);
47
+ existing = fs.lstatSync(entry.target);
23
48
  }
24
49
  catch (error) {
25
50
  if (error.code === 'ENOENT')
26
- return { target, source, installed: false, content: null };
51
+ return { ...entry, installed: false, content: null };
27
52
  throw error;
28
53
  }
29
- const content = kind === 'agent' && existing.isFile() ? fs.readFileSync(target) : null;
30
- const owned = kind === 'skill'
31
- ? existing.isSymbolicLink() && path.resolve(parent, fs.readlinkSync(target)) === source
32
- : content && fs.existsSync(source) && content.equals(fs.readFileSync(source));
33
- if (!owned) {
34
- throw new Error(`Composant personnel préservé : ${target}`);
35
- }
36
- return { target, source, installed: true, content };
54
+ const content = entry.kind === 'agent' && existing.isFile() ? fs.readFileSync(entry.target) : null;
55
+ const owned = entry.kind === 'skill'
56
+ ? existing.isSymbolicLink() && path.resolve(entry.parent, fs.readlinkSync(entry.target)) === entry.source
57
+ : content && fs.existsSync(entry.source) && content.equals(fs.readFileSync(entry.source));
58
+ if (!owned)
59
+ throw new Error(`Composant personnel préservé : ${entry.target}`);
60
+ return { ...entry, installed: true, content };
37
61
  });
38
62
  return () => {
39
63
  const changed = [];
40
64
  try {
41
- for (const entry of targets) {
42
- const { target, source, installed } = entry;
43
- if (enabled && kind === 'agent') {
65
+ for (const entry of prepared) {
66
+ const { target, source, installed, kind: targetKind } = entry;
67
+ if (enabled && targetKind === 'agent') {
44
68
  fs.copyFileSync(source, target);
45
69
  changed.push(entry);
46
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-installation.js","sourceRoot":"","sources":["../../../../server/piecemaker/library/workspace-installation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-installation.js","sourceRoot":"","sources":["../../../../server/piecemaker/library/workspace-installation.ts"],"names":[],"mappings":"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"}
@@ -26,31 +26,14 @@ function validTimestamp(value) {
26
26
  const date = new Date(value);
27
27
  return Number.isNaN(date.getTime()) ? null : date.toISOString();
28
28
  }
29
- function hashFile(filePath) {
30
- const hash = createHash('sha256');
31
- let descriptor;
29
+ function fingerprintFile(filePath) {
32
30
  try {
33
- descriptor = fs.openSync(filePath, 'r');
34
- const buffer = Buffer.allocUnsafe(64 * 1024);
35
- let bytesRead = 0;
36
- do {
37
- bytesRead = fs.readSync(descriptor, buffer, 0, buffer.length, null);
38
- if (bytesRead > 0)
39
- hash.update(buffer.subarray(0, bytesRead));
40
- } while (bytesRead > 0);
41
- return hash.digest('hex');
31
+ const stats = fs.statSync(filePath);
32
+ return `${stats.size}:${stats.mtimeMs}`;
42
33
  }
43
34
  catch {
44
35
  return 'missing';
45
36
  }
46
- finally {
47
- if (descriptor !== undefined) {
48
- try {
49
- fs.closeSync(descriptor);
50
- }
51
- catch { }
52
- }
53
- }
54
37
  }
55
38
  function hashHistory(messages) {
56
39
  const hash = createHash('sha256');
@@ -71,7 +54,7 @@ function fingerprint(session, dependencies, messages) {
71
54
  createdAt: session.created_at,
72
55
  updatedAt: session.updated_at,
73
56
  transcript: session.jsonl_path
74
- ? { path: session.jsonl_path, content: hashFile(session.jsonl_path) }
57
+ ? { path: session.jsonl_path, content: fingerprintFile(session.jsonl_path) }
75
58
  : { history: messages ? hashHistory(messages) : 'pending' },
76
59
  })).digest('hex');
77
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../server/piecemaker/timesheet/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../server/piecemaker/timesheet/service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@piecemaker-legal/piecemaker",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "productName": "PieceMaker",
5
5
  "description": "Plateforme IA pour juristes français",
6
6
  "type": "module",
@@ -16,7 +16,8 @@
16
16
  "dist/",
17
17
  "dist-server/",
18
18
  "scripts/",
19
- "README.md"
19
+ "README.md",
20
+ "!server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/eval/**"
20
21
  ],
21
22
  "homepage": "https://github.com/PieceMaker-Legal/piecemaker-droit-francais",
22
23
  "repository": {
@@ -6,6 +6,7 @@
6
6
  "slug": "piecemaker-droit-francais",
7
7
  "appId": "legal.piecemaker.droitfrancais",
8
8
  "protocol": "piecemaker",
9
+ "desktopPort": 3101,
9
10
  "dataDirectoryName": ".piecemaker-droit-francais",
10
11
  "homepage": "https://github.com/PieceMaker-Legal/piecemaker-droit-francais",
11
12
  "repository": "PieceMaker-Legal/piecemaker-droit-francais",
@@ -4,7 +4,7 @@ import { execFileSync } from 'node:child_process';
4
4
  import fs from 'node:fs';
5
5
  import os from 'node:os';
6
6
  import path from 'node:path';
7
- import { fileURLToPath } from 'node:url';
7
+ import { fileURLToPath, pathToFileURL } from 'node:url';
8
8
 
9
9
  import { BIN_DIR } from './lib/config.mjs';
10
10
  import { ok, banner, detail, warn, blank } from './lib/ui.mjs';
@@ -28,7 +28,7 @@ function installPosixShim() {
28
28
  try {
29
29
  fs.mkdirSync(path.dirname(target), { recursive: true });
30
30
  fs.rmSync(target, { force: true });
31
- fs.writeFileSync(target, source, 'utf8');
31
+ fs.writeFileSync(target, source, { encoding: 'utf8', mode: 0o755 });
32
32
  fs.chmodSync(target, 0o755);
33
33
  installed.push(target);
34
34
  } catch (error) {
@@ -105,26 +105,52 @@ function ensureWindowsPathEntry() {
105
105
  return true;
106
106
  }
107
107
 
108
- function main() {
109
- banner('Installation de la commande piecemaker');
108
+ export function piecemakerExecutable() {
109
+ const names = isWindows ? [`${COMMAND_NAME}.cmd`, `${COMMAND_NAME}.ps1`] : [COMMAND_NAME];
110
+ const directories = [BIN_DIR, path.dirname(process.execPath)];
111
+ for (const directory of directories) {
112
+ for (const name of names) {
113
+ const candidate = path.join(directory, name);
114
+ if (fs.existsSync(candidate)) return candidate;
115
+ }
116
+ }
117
+ return COMMAND_NAME;
118
+ }
110
119
 
120
+ export function installPiecemakerCommand() {
111
121
  const shims = isWindows ? installWindowsShim() : installPosixShim();
112
- for (const shim of shims) ok(`commande installée : ${shim}`);
122
+ let pathUpdated = false;
113
123
 
114
124
  if (isWindows) {
115
125
  try {
116
- if (ensureWindowsPathEntry()) detail(`PATH complété (redémarrez le terminal pour le prendre en compte)`);
126
+ pathUpdated = ensureWindowsPathEntry();
117
127
  } catch (error) {
118
128
  warn(`PATH non complété automatiquement : ${error.message}`);
119
129
  }
120
130
  } else {
121
131
  const pathFiles = ensurePosixPathEntry();
122
- for (const file of pathFiles) detail(`PATH complété dans ${file}`);
132
+ pathUpdated = pathFiles.length > 0;
133
+ }
134
+
135
+ return { shims, pathUpdated, executable: piecemakerExecutable() };
136
+ }
137
+
138
+ function invokedAsCli() {
139
+ const entry = process.argv[1];
140
+ if (!entry) return false;
141
+ try {
142
+ return import.meta.url === pathToFileURL(fs.realpathSync(entry)).href;
143
+ } catch {
144
+ return false;
123
145
  }
146
+ }
124
147
 
148
+ if (invokedAsCli()) {
149
+ banner('Installation de la commande piecemaker');
150
+ const result = installPiecemakerCommand();
151
+ for (const shim of result.shims) ok(`commande installée : ${shim}`);
152
+ if (result.pathUpdated) detail(isWindows ? 'PATH complété (redémarrez le terminal pour le prendre en compte)' : `PATH complété avec ${BIN_DIR}`);
125
153
  blank();
126
154
  detail(`${COMMAND_NAME} installe, met à jour et lance toute la plateforme`);
127
155
  blank();
128
156
  }
129
-
130
- main();
@@ -0,0 +1,47 @@
1
+ import path from 'node:path';
2
+ import { spawn } from 'node:child_process';
3
+
4
+ import { APP_URL, PIECEMAKER_HOME } from './config.mjs';
5
+ import { macChromiumBrowser, windowsChromiumBrowser } from './pwa.mjs';
6
+ import { stopApplication } from './services.mjs';
7
+
8
+ const DELEGATED_LAUNCH_MS = 3000;
9
+
10
+ export function pwaProfileDirectory() {
11
+ return path.join(PIECEMAKER_HOME, 'pwa-profile');
12
+ }
13
+
14
+ export function browserExecutable() {
15
+ if (process.platform === 'darwin') {
16
+ const bundle = macChromiumBrowser();
17
+ return bundle ? path.join(bundle, 'Contents', 'MacOS', path.basename(bundle, '.app')) : null;
18
+ }
19
+ if (process.platform === 'win32') return windowsChromiumBrowser();
20
+ return null;
21
+ }
22
+
23
+ function waitForWindow(executable, profileDirectory) {
24
+ return new Promise((resolve) => {
25
+ const child = spawn(executable, [`--app=${APP_URL}`, `--user-data-dir=${profileDirectory}`], {
26
+ stdio: 'ignore',
27
+ windowsHide: true,
28
+ });
29
+ child.once('error', (error) => resolve({ opened: false, error }));
30
+ child.once('exit', () => resolve({ opened: true }));
31
+ });
32
+ }
33
+
34
+ export async function runApplicationWindow() {
35
+ const executable = browserExecutable();
36
+ if (!executable) return { supervised: false, reason: 'navigateur Chromium introuvable' };
37
+
38
+ const openedAt = Date.now();
39
+ const window = await waitForWindow(executable, pwaProfileDirectory());
40
+ if (!window.opened) return { supervised: false, reason: window.error.message };
41
+ if (Date.now() - openedAt < DELEGATED_LAUNCH_MS) {
42
+ return { supervised: false, reason: 'fenêtre rattachée à un navigateur déjà ouvert' };
43
+ }
44
+
45
+ const stopped = await stopApplication();
46
+ return { supervised: true, stopped };
47
+ }
@@ -25,6 +25,7 @@ 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),
28
29
  };
29
30
 
30
31
  export const APP_URL = `http://localhost:${PORTS.appClient}`;
@@ -0,0 +1,78 @@
1
+ import os from 'node:os';
2
+ import path from 'node:path';
3
+
4
+ import { PIECEMAKER_HOME } from './config.mjs';
5
+
6
+ /**
7
+ * Répare le câblage PII de Codex/Claude Code avant chaque lancement de
8
+ * `piecemaker`, indépendamment de l'état du serveur applicatif.
9
+ *
10
+ * Le serveur (`server:dev`) répare déjà ce câblage à son propre démarrage via
11
+ * `startRequiredAnonymizer`, mais uniquement quand il tourne. Les applications
12
+ * clientes (Codex notamment) réécrivent parfois `config.toml` en entier lors
13
+ * d'une mise à jour et effacent le bloc géré sans le savoir. Ce module rejoue
14
+ * la même réparation ici, tôt dans le CLI, pour que `piecemaker` seul —
15
+ * sans dépendre du serveur — suffise à débloquer un client mal configuré.
16
+ *
17
+ * Best-effort : un échec ici ne doit jamais empêcher `piecemaker` de lancer
18
+ * l'application. On rapporte simplement l'état au journal.
19
+ */
20
+ export async function repairClientProxies({ appDir, report }) {
21
+ const { step, ok, warn } = report;
22
+ step('Vérification du routage PII (Claude, Codex)');
23
+
24
+ let configureClaudeCodeProxy;
25
+ let configureCodexProxy;
26
+ try {
27
+ const clientConfig = await import(
28
+ path.join(appDir, 'server', 'piecemaker', 'anonymizer', 'client-config.cjs')
29
+ );
30
+ ({ configureClaudeCodeProxy, configureCodexProxy } = clientConfig);
31
+ } catch (error) {
32
+ warn(`réparation du routage PII ignorée : ${error.message}`);
33
+ return;
34
+ }
35
+
36
+ const userHome = os.homedir();
37
+ const origin = `http://127.0.0.1:${await resolveAnonymizerPort()}`;
38
+
39
+ const attempt = (name, run) => {
40
+ try {
41
+ const result = run();
42
+ if (result.conflict) {
43
+ warn(`${name} : routage PII non réparé (${result.reason || 'conflit'}) — voir ${result.file}`);
44
+ } else if (result.changed) {
45
+ ok(`${name} : routage PII réparé`);
46
+ }
47
+ return result;
48
+ } catch (error) {
49
+ warn(`${name} : réparation du routage PII a échoué (${error.message})`);
50
+ return null;
51
+ }
52
+ };
53
+
54
+ attempt('claude', () => configureClaudeCodeProxy({ baseUrl: `${origin}/anthropic`, userHome }));
55
+ attempt('codex', () => configureCodexProxy({
56
+ baseUrl: `${origin}/chatgpt`,
57
+ codexHome: process.env.CODEX_HOME || path.join(userHome, '.codex'),
58
+ }));
59
+ }
60
+
61
+ /**
62
+ * Le port du proxy PII est publié dans `config.json` par le service au
63
+ * démarrage (`mikePiiPort`). On le lit ici pour rester cohérent avec le port
64
+ * réellement écouté même s'il a dévié du port préféré ; à défaut, on retombe
65
+ * sur le port préféré par défaut du service.
66
+ */
67
+ async function resolveAnonymizerPort() {
68
+ const DEFAULT_PORT = 4111;
69
+ try {
70
+ const fs = await import('node:fs');
71
+ const configFile = path.join(PIECEMAKER_HOME, 'config.json');
72
+ const current = JSON.parse(fs.readFileSync(configFile, 'utf8'));
73
+ const port = Number.parseInt(current?.mikePiiPort, 10);
74
+ return Number.isInteger(port) && port > 0 ? port : DEFAULT_PORT;
75
+ } catch {
76
+ return DEFAULT_PORT;
77
+ }
78
+ }
@@ -10,6 +10,8 @@ const INSTALL_TIMEOUT = 2 * 60_000;
10
10
  export const PLUGINS = [
11
11
  { id: 'piecemaker-timesheet', label: 'Plugin Timesheet' },
12
12
  { id: 'piecemaker-tampon', label: 'Plugin Bordereau' },
13
+ { id: 'piecemaker-dossier', label: 'Plugin Dossier' },
14
+ { id: 'piecemaker-library', label: 'Plugin Bibliothèque' },
13
15
  ];
14
16
 
15
17
  export async function installPlugins(runtime, report) {
@@ -3,11 +3,16 @@ import http from 'node:http';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
5
 
6
+ import { piecemakerExecutable } from '../install-command.mjs';
6
7
  import { APP, APP_URL, PIECEMAKER_HOME } from './config.mjs';
7
8
  import { runCapture } from './exec.mjs';
8
9
 
9
10
  const APPLICATION_NAME = 'PieceMaker';
10
11
 
12
+ function shellQuote(value) {
13
+ return `'${String(value).replace(/'/g, `'\\''`)}'`;
14
+ }
15
+
11
16
  function fetchStatus(url) {
12
17
  return new Promise((resolve) => {
13
18
  const request = http.get(url, { timeout: 4000 }, (response) => {
@@ -41,7 +46,7 @@ export async function verifyPwaAssets() {
41
46
  };
42
47
  }
43
48
 
44
- function macChromiumBrowser() {
49
+ export function macChromiumBrowser() {
45
50
  const candidates = [
46
51
  '/Applications/Google Chrome.app',
47
52
  '/Applications/Microsoft Edge.app',
@@ -98,12 +103,12 @@ function installMacApplication() {
98
103
  fs.mkdirSync(resourcesDir, { recursive: true });
99
104
 
100
105
  const browser = macChromiumBrowser();
106
+ const launcherPath = path.join(macosDir, APPLICATION_NAME);
107
+ const command = piecemakerExecutable();
101
108
  const launchCommand = browser
102
- ? `open -na "${browser}" --args --app="${APP_URL}" --user-data-dir="$HOME/.piecemaker/pwa-profile"`
109
+ ? `exec ${shellQuote(command)} --window >/dev/null 2>&1`
103
110
  : `open "${APP_URL}"`;
104
-
105
- const launcherPath = path.join(macosDir, APPLICATION_NAME);
106
- fs.writeFileSync(launcherPath, `#!/bin/sh\n/usr/bin/env piecemaker --launch-only >/dev/null 2>&1 &\nsleep 2\n${launchCommand}\n`, 'utf8');
111
+ fs.writeFileSync(launcherPath, `#!/bin/sh\n${shellQuote(command)} --launch-only >/dev/null 2>&1\n${launchCommand}\n`, 'utf8');
107
112
  fs.chmodSync(launcherPath, 0o755);
108
113
 
109
114
  const iconFile = writeMacIcon(resourcesDir);
@@ -136,7 +141,8 @@ function installMacApplication() {
136
141
  }
137
142
 
138
143
  function linuxDesktopEntryContent() {
139
- return `[Desktop Entry]\nType=Application\nName=${APPLICATION_NAME}\nComment=Plateforme IA pour juristes français\nExec=sh -c "piecemaker --launch-only >/dev/null 2>&1 & sleep 1; xdg-open ${APP_URL}"\nIcon=${path.join(APP.directory, 'public', 'logo-512.png')}\nCategories=Office;Legal;\nTerminal=false\n`;
144
+ const command = piecemakerExecutable();
145
+ return `[Desktop Entry]\nType=Application\nName=${APPLICATION_NAME}\nComment=Plateforme IA pour juristes français\nExec=sh -c ${JSON.stringify(`${command} --launch-only >/dev/null 2>&1 & sleep 1; xdg-open ${APP_URL}`)}\nIcon=${path.join(APP.directory, 'public', 'logo-512.png')}\nCategories=Office;Legal;\nTerminal=false\n`;
140
146
  }
141
147
 
142
148
  function installLinuxApplication() {
@@ -202,7 +208,7 @@ function writeWindowsIcon() {
202
208
  }
203
209
  }
204
210
 
205
- function windowsChromiumBrowser() {
211
+ export function windowsChromiumBrowser() {
206
212
  const programFiles = process.env['ProgramFiles'] || 'C:\\Program Files';
207
213
  const programFilesX86 = process.env['ProgramFiles(x86)'] || 'C:\\Program Files (x86)';
208
214
  const localAppData = process.env.LOCALAPPDATA || '';
@@ -221,6 +227,22 @@ function windowsChromiumBrowser() {
221
227
  return candidates.find((candidate) => fs.existsSync(candidate)) || null;
222
228
  }
223
229
 
230
+ export function applicationWindowIsOpen() {
231
+ const appArgument = `--app=${APP_URL}`;
232
+ if (process.platform === 'win32') {
233
+ const result = runCapture('powershell.exe', [
234
+ '-NoProfile',
235
+ '-NonInteractive',
236
+ '-Command',
237
+ `(Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -like '*${appArgument}*' }).Count`,
238
+ ]);
239
+ return result.code === 0 && Number.parseInt(result.stdout.trim(), 10) > 0;
240
+ }
241
+
242
+ const result = runCapture('ps', ['-ax', '-o', 'command=']);
243
+ return result.code === 0 && result.stdout.split('\n').some((line) => line.includes(appArgument));
244
+ }
245
+
224
246
  function windowsDesktopDir() {
225
247
  const standard = path.join(os.homedir(), 'Desktop');
226
248
  if (fs.existsSync(standard)) return standard;
@@ -260,13 +282,27 @@ function createWindowsShortcut(shortcutPath, targetPath, shortcutArgs, iconPath)
260
282
  return result.code === 0;
261
283
  }
262
284
 
285
+ function writeWindowsLauncher(browser) {
286
+ const command = piecemakerExecutable();
287
+ const lines = [
288
+ '@echo off',
289
+ `call "${command}" --launch-only`,
290
+ ];
291
+ if (browser) {
292
+ lines.push(`call "${command}" --window`);
293
+ } else {
294
+ lines.push(`start "" "${APP_URL}"`);
295
+ }
296
+ const launcher = path.join(PIECEMAKER_HOME, 'bin', 'open-piecemaker.cmd');
297
+ fs.mkdirSync(path.dirname(launcher), { recursive: true });
298
+ fs.writeFileSync(launcher, `${lines.join('\r\n')}\r\n`, 'utf8');
299
+ return launcher;
300
+ }
301
+
263
302
  function installWindowsApplication() {
264
303
  const browser = windowsChromiumBrowser();
265
304
  const iconPath = writeWindowsIcon();
266
- const userDataDir = path.join(os.homedir(), '.piecemaker', 'pwa-profile');
267
-
268
- const targetPath = browser || path.join(process.env.WINDIR || 'C:\\Windows', 'explorer.exe');
269
- const shortcutArgs = browser ? `--app=${APP_URL} --user-data-dir=${userDataDir}` : APP_URL;
305
+ const launcher = writeWindowsLauncher(browser);
270
306
 
271
307
  const desktopDir = windowsDesktopDir();
272
308
  const startMenuDir = windowsStartMenuDir();
@@ -276,8 +312,8 @@ function installWindowsApplication() {
276
312
  const desktopShortcut = path.join(desktopDir, `${APPLICATION_NAME}.lnk`);
277
313
  const startMenuShortcut = path.join(startMenuDir, `${APPLICATION_NAME}.lnk`);
278
314
 
279
- createWindowsShortcut(desktopShortcut, targetPath, shortcutArgs, iconPath);
280
- createWindowsShortcut(startMenuShortcut, targetPath, shortcutArgs, iconPath);
315
+ createWindowsShortcut(desktopShortcut, launcher, '', iconPath);
316
+ createWindowsShortcut(startMenuShortcut, launcher, '', iconPath);
281
317
 
282
318
  const locations = [desktopShortcut, startMenuShortcut].filter((candidate) => fs.existsSync(candidate));
283
319