@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.
- package/dist/assets/{abnfDiagram-VCTEODGH-DF7LFtT-.js → abnfDiagram-VCTEODGH-K8VucbQ5.js} +1 -1
- package/dist/assets/{arc-xOmjWeVH.js → arc-DUmCdRoC.js} +1 -1
- package/dist/assets/{architectureDiagram-5GKGNRK7-CESzNPwa.js → architectureDiagram-5GKGNRK7-DYhs5vqD.js} +1 -1
- package/dist/assets/{blockDiagram-I7D4REHJ-BjdN78Ad.js → blockDiagram-I7D4REHJ-DaXJ9nve.js} +1 -1
- package/dist/assets/{c4Diagram-7LVT6UL2-BcK9EDWT.js → c4Diagram-7LVT6UL2-BLbi-zPT.js} +1 -1
- package/dist/assets/channel-CJIq1vqf.js +1 -0
- package/dist/assets/{chunk-2Q5K7J3B-DGUN1JFP.js → chunk-2Q5K7J3B-Bzs3gxaq.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-BG3BBcFr.js → chunk-5VM5RSS4-CQNzml7k.js} +1 -1
- package/dist/assets/{chunk-F27PBJKO-CLIOfrF5.js → chunk-F27PBJKO-B8xedWWH.js} +1 -1
- package/dist/assets/{chunk-IMKFNOWR-D6lGkqij.js → chunk-IMKFNOWR-CjBGlNOu.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BmF9vLBT.js → chunk-JWPE2WC7-vfnYEpgA.js} +1 -1
- package/dist/assets/{chunk-POPQ4Y6H-C_0SR3ak.js → chunk-POPQ4Y6H-Btl98tE8.js} +1 -1
- package/dist/assets/{chunk-SVP7TREG-rT20Wfpp.js → chunk-SVP7TREG-Bp6-pLjR.js} +1 -1
- package/dist/assets/{chunk-TICWLB2K-Cn2hkmcf.js → chunk-TICWLB2K-DvmznW2q.js} +1 -1
- package/dist/assets/{chunk-XXDRQBXY-Dm_eP1_v.js → chunk-XXDRQBXY-QSHJTsI3.js} +1 -1
- package/dist/assets/classDiagram-ZZMXUADV-BYkEWggn.js +1 -0
- package/dist/assets/classDiagram-v2-VYDZK3BY-BYkEWggn.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-cJeeJsep.js → cose-bilkent-JH36ORCC-DxpyZoe2.js} +1 -1
- package/dist/assets/{cynefin-OW5HDTMX-DX2ePIXe.js → cynefin-OW5HDTMX-B9GRp2Gn.js} +1 -1
- package/dist/assets/{cynefinDiagram-5FMLGOSQ-BvWXN-RR.js → cynefinDiagram-5FMLGOSQ-Q-2tz5GW.js} +1 -1
- package/dist/assets/{dagre-GXQ25YYZ-CkwPRhGR.js → dagre-GXQ25YYZ-3Rl3NqNe.js} +1 -1
- package/dist/assets/{diagram-S7CK7UJ4-CBGNzYyv.js → diagram-S7CK7UJ4-CreeWCO1.js} +1 -1
- package/dist/assets/{diagram-UQ7AKVKN-CiwCU0SJ.js → diagram-UQ7AKVKN-DNBoIyDJ.js} +1 -1
- package/dist/assets/{diagram-VSXAHHWV-Aekg4nTk.js → diagram-VSXAHHWV-ZkcE_cRk.js} +1 -1
- package/dist/assets/{diagram-VX7I27RA-DPFP5K7r.js → diagram-VX7I27RA-Dzdf7N2Q.js} +1 -1
- package/dist/assets/{diagram-Z3DM3KII-BHJkxoey.js → diagram-Z3DM3KII-M6b-nr1u.js} +1 -1
- package/dist/assets/{ebnfDiagram-PWID7BFC-2rV1P32T.js → ebnfDiagram-PWID7BFC-DunIw64n.js} +1 -1
- package/dist/assets/{erDiagram-RLTQ6QDP-C4BjyS_H.js → erDiagram-RLTQ6QDP-kN0Se5uc.js} +1 -1
- package/dist/assets/{flowDiagram-HODETNUW-DL1TBlAG.js → flowDiagram-HODETNUW-24YCovut.js} +1 -1
- package/dist/assets/{ganttDiagram-EL5Y4UJY-MKjvzCWz.js → ganttDiagram-EL5Y4UJY-DTUUEEy6.js} +1 -1
- package/dist/assets/{gitGraphDiagram-WWUBYQGX-CS_oTGK5.js → gitGraphDiagram-WWUBYQGX-BitrqhMr.js} +1 -1
- package/dist/assets/{index-XOGQDqU3.js → index-CG9hW1GU.js} +120 -120
- package/dist/assets/index-D_Dc_nQv.css +1 -0
- package/dist/assets/{infoDiagram-27XIBGKW-ihUr2GjN.js → infoDiagram-27XIBGKW-BNHN5Mby.js} +1 -1
- package/dist/assets/{ishikawaDiagram-5VMMS53U-D2YAnuir.js → ishikawaDiagram-5VMMS53U-De3IQKso.js} +1 -1
- package/dist/assets/{journeyDiagram-3NMN7TZE-Bc2hSZGD.js → journeyDiagram-3NMN7TZE-CWlkZ25T.js} +1 -1
- package/dist/assets/{kanban-definition-UXKFOSKX-LRMGNonX.js → kanban-definition-UXKFOSKX-2o_ax-Nk.js} +1 -1
- package/dist/assets/{layout-CcfWOlPV.js → layout-Btga9ZYP.js} +1 -1
- package/dist/assets/{linear-7JoS2gQO.js → linear-BoGGmqPG.js} +1 -1
- package/dist/assets/{mermaid.core-ijh_SsuN.js → mermaid.core-M308jnLQ.js} +6 -6
- package/dist/assets/{mindmap-definition-YA3MSWOX-DCE4nzfF.js → mindmap-definition-YA3MSWOX-BJ6C_grh.js} +1 -1
- package/dist/assets/{pegDiagram-XKGWAZYB-SjaGa7lE.js → pegDiagram-XKGWAZYB-qcdYX0Xe.js} +1 -1
- package/dist/assets/{pieDiagram-E7YTZNPT-1xcRidSZ.js → pieDiagram-E7YTZNPT-XPrSlt1M.js} +1 -1
- package/dist/assets/{quadrantDiagram-AXDQQJYC-obHAHnYV.js → quadrantDiagram-AXDQQJYC-COhHhra5.js} +1 -1
- package/dist/assets/{railroadDiagram-O6MQD6OU-BsCVcRZb.js → railroadDiagram-O6MQD6OU-Mw_KF6gb.js} +1 -1
- package/dist/assets/{requirementDiagram-BXWQKSXE-CUNkhvqb.js → requirementDiagram-BXWQKSXE-DPbt7jUM.js} +1 -1
- package/dist/assets/{sankeyDiagram-P5KCCOFB-DhezXMKm.js → sankeyDiagram-P5KCCOFB-B6HzL6Gh.js} +1 -1
- package/dist/assets/{sequenceDiagram-WJ2MYXX4-CL9VswXH.js → sequenceDiagram-WJ2MYXX4-B_dXXCC0.js} +1 -1
- package/dist/assets/{sizeCapture-INFHLROL-t0g9jiEz.js → sizeCapture-INFHLROL-DwODubWN.js} +1 -1
- package/dist/assets/{stateDiagram-D77RDMKH-BW-g-IOz.js → stateDiagram-D77RDMKH-5AUnOL3S.js} +1 -1
- package/dist/assets/stateDiagram-v2-MP3YSRHH-CFM_nDL9.js +1 -0
- package/dist/assets/{swimlanes-42K2YHIH-LsuyeBte.js → swimlanes-42K2YHIH-BLnIwbnd.js} +1 -1
- package/dist/assets/swimlanesDiagram-VR7AAH4N-BRQJYnDN.js +8 -0
- package/dist/assets/{timeline-definition-24CTP7MA-B0cFka1R.js → timeline-definition-24CTP7MA-B1Yc7-na.js} +1 -1
- package/dist/assets/{vendor-codemirror-C5qqu4R7.js → vendor-codemirror-CjW0lHR5.js} +5 -5
- package/dist/assets/{vennDiagram-4TSXK5OY-D3HNCDR3.js → vennDiagram-4TSXK5OY-BFRtl-NI.js} +1 -1
- package/dist/assets/{wardleyDiagram-VM6X3IG4-DJ3Co8nb.js → wardleyDiagram-VM6X3IG4-BsR8iaD_.js} +1 -1
- package/dist/assets/{xychartDiagram-S5SC5T6Z-Cz5E9New.js → xychartDiagram-S5SC5T6Z-Crh1SwrA.js} +1 -1
- package/dist/favicon.png +0 -0
- package/dist/favicon.svg +1 -9
- package/dist/generate-icons.js +47 -46
- package/dist/icons/icon-128x128.png +0 -0
- package/dist/icons/icon-128x128.svg +1 -12
- package/dist/icons/icon-144x144.png +0 -0
- package/dist/icons/icon-144x144.svg +1 -12
- package/dist/icons/icon-152x152.png +0 -0
- package/dist/icons/icon-152x152.svg +1 -12
- package/dist/icons/icon-192x192.png +0 -0
- package/dist/icons/icon-192x192.svg +1 -12
- package/dist/icons/icon-384x384.png +0 -0
- package/dist/icons/icon-384x384.svg +1 -12
- package/dist/icons/icon-512x512.png +0 -0
- package/dist/icons/icon-512x512.svg +1 -12
- package/dist/icons/icon-72x72.png +0 -0
- package/dist/icons/icon-72x72.svg +1 -12
- package/dist/icons/icon-96x96.png +0 -0
- package/dist/icons/icon-96x96.svg +1 -12
- package/dist/index.html +3 -3
- package/dist/logo-128.png +0 -0
- package/dist/logo-256.png +0 -0
- package/dist/logo-32.png +0 -0
- package/dist/logo-512.png +0 -0
- package/dist/logo-64.png +0 -0
- package/dist/logo-sources/logo-black.png +0 -0
- package/dist/logo-sources/logo-white.png +0 -0
- package/dist/logo.svg +1 -17
- package/dist/sw.js +1 -1
- package/dist-server/plugins/piecemaker-dossier/src/institutional-terms.js +91 -0
- package/dist-server/plugins/piecemaker-dossier/src/institutional-terms.js.map +1 -0
- package/dist-server/plugins/piecemaker-dossier/src/knowledge.js +112 -10
- package/dist-server/plugins/piecemaker-dossier/src/knowledge.js.map +1 -1
- package/dist-server/plugins/piecemaker-dossier/src/scan-result.js +5 -1
- package/dist-server/plugins/piecemaker-dossier/src/scan-result.js.map +1 -1
- package/dist-server/server/index.js +60 -26
- package/dist-server/server/index.js.map +1 -1
- package/dist-server/server/modules/cli/desktop-shortcut.js +80 -0
- package/dist-server/server/modules/cli/desktop-shortcut.js.map +1 -0
- package/dist-server/server/modules/cli/pwa-launcher.js +27 -4
- package/dist-server/server/modules/cli/pwa-launcher.js.map +1 -1
- package/dist-server/server/modules/database/repositories/projects.db.js +28 -6
- package/dist-server/server/modules/database/repositories/projects.db.js.map +1 -1
- package/dist-server/server/modules/database/tests/projects.db.integration.test.js +58 -1
- package/dist-server/server/modules/database/tests/projects.db.integration.test.js.map +1 -1
- package/dist-server/server/modules/plugins/plugins.routes.js +8 -1
- package/dist-server/server/modules/plugins/plugins.routes.js.map +1 -1
- package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js +2 -0
- package/dist-server/server/modules/projects/services/projects-with-sessions-fetch.service.js.map +1 -1
- package/dist-server/server/piecemaker/bodacc-search.js +191 -0
- package/dist-server/server/piecemaker/bodacc-search.js.map +1 -0
- package/dist-server/server/piecemaker/company-search.js +145 -0
- package/dist-server/server/piecemaker/company-search.js.map +1 -0
- package/dist-server/server/piecemaker/company-search.test.js +18 -0
- package/dist-server/server/piecemaker/company-search.test.js.map +1 -0
- package/dist-server/server/piecemaker/index.js +6 -2
- package/dist-server/server/piecemaker/index.js.map +1 -1
- package/dist-server/server/piecemaker/knowledge/index.js +9 -4
- package/dist-server/server/piecemaker/knowledge/index.js.map +1 -1
- package/dist-server/server/piecemaker/knowledge/pipeline.js +68 -58
- package/dist-server/server/piecemaker/knowledge/pipeline.js.map +1 -1
- package/dist-server/server/piecemaker/knowledge/routes.js +2 -4
- package/dist-server/server/piecemaker/knowledge/routes.js.map +1 -1
- package/dist-server/server/piecemaker/knowledge/scan-jobs.js +91 -0
- package/dist-server/server/piecemaker/knowledge/scan-jobs.js.map +1 -0
- package/dist-server/server/piecemaker/knowledge/service.js +18 -36
- package/dist-server/server/piecemaker/knowledge/service.js.map +1 -1
- package/dist-server/server/piecemaker/library/connector-installation.js +224 -0
- package/dist-server/server/piecemaker/library/connector-installation.js.map +1 -0
- package/dist-server/server/piecemaker/library/index.js +11 -1
- package/dist-server/server/piecemaker/library/index.js.map +1 -1
- package/dist-server/server/piecemaker/library/marketplace.js +102 -43
- package/dist-server/server/piecemaker/library/marketplace.js.map +1 -1
- package/dist-server/server/piecemaker/library/migrate.js +8 -1
- package/dist-server/server/piecemaker/library/migrate.js.map +1 -1
- package/dist-server/server/piecemaker/library/provider-agents.js +50 -0
- package/dist-server/server/piecemaker/library/provider-agents.js.map +1 -0
- package/dist-server/server/piecemaker/library/provider-connectors.js +80 -0
- package/dist-server/server/piecemaker/library/provider-connectors.js.map +1 -0
- package/dist-server/server/piecemaker/library/provider-skills.js +11 -2
- package/dist-server/server/piecemaker/library/provider-skills.js.map +1 -1
- package/dist-server/server/piecemaker/library/store.js +125 -35
- package/dist-server/server/piecemaker/library/store.js.map +1 -1
- package/dist-server/server/piecemaker/library/workspace-installation.js +53 -29
- package/dist-server/server/piecemaker/library/workspace-installation.js.map +1 -1
- package/dist-server/server/piecemaker/timesheet/service.js +4 -21
- package/dist-server/server/piecemaker/timesheet/service.js.map +1 -1
- package/package.json +3 -2
- package/product.config.json +1 -0
- package/scripts/piecemaker/cli/install-command.mjs +35 -9
- package/scripts/piecemaker/cli/lib/app-window.mjs +47 -0
- package/scripts/piecemaker/cli/lib/config.mjs +1 -0
- package/scripts/piecemaker/cli/lib/piecemaker-anonymizer.mjs +78 -0
- package/scripts/piecemaker/cli/lib/plugins.mjs +2 -0
- package/scripts/piecemaker/cli/lib/pwa.mjs +49 -13
- package/scripts/piecemaker/cli/lib/services.mjs +65 -4
- package/scripts/piecemaker/cli/piecemaker-command.test.mjs +25 -0
- package/scripts/piecemaker/cli/piecemaker.mjs +60 -45
- package/scripts/piecemaker/cli/piecemaker.ps1 +8 -0
- package/scripts/piecemaker/cli/piecemaker.sh +6 -1
- package/server/index.ts +52 -23
- package/server/modules/cli/desktop-shortcut.ts +89 -0
- package/server/modules/cli/pwa-launcher.ts +29 -4
- package/server/modules/database/repositories/projects.db.ts +28 -6
- package/server/modules/database/tests/projects.db.integration.test.ts +63 -1
- package/server/modules/plugins/plugins.routes.ts +8 -1
- package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +5 -0
- package/server/piecemaker/anonymizer/client-config.cjs +10 -2
- package/server/piecemaker/anonymizer/dictionary.cjs +6 -72
- package/server/piecemaker/bodacc-search.ts +205 -0
- package/server/piecemaker/company-search.test.ts +26 -0
- package/server/piecemaker/company-search.ts +183 -0
- package/server/piecemaker/index.ts +8 -2
- package/server/piecemaker/knowledge/index.ts +9 -4
- package/server/piecemaker/knowledge/pipeline.ts +89 -57
- package/server/piecemaker/knowledge/routes.ts +2 -4
- package/server/piecemaker/knowledge/scan-jobs.ts +111 -0
- package/server/piecemaker/knowledge/service.ts +18 -33
- package/server/piecemaker/library/connector-installation.ts +248 -0
- package/server/piecemaker/library/index.ts +5 -1
- package/server/piecemaker/library/marketplace.ts +104 -39
- package/server/piecemaker/library/migrate.ts +8 -1
- package/server/piecemaker/library/provider-agents.ts +49 -0
- package/server/piecemaker/library/provider-connectors.ts +89 -0
- package/server/piecemaker/library/provider-skills.ts +10 -1
- package/server/piecemaker/library/store.ts +129 -36
- package/server/piecemaker/library/workspace-installation.ts +54 -29
- package/server/piecemaker/router.cjs +2 -1
- package/server/piecemaker/timesheet/service.ts +4 -16
- package/server/piecemaker/vendor/installer/steps/03-python-gliner.mjs +0 -27
- package/server/piecemaker/vendor/installer/steps/14-mxc-sandbox.mjs +1 -1
- package/server/piecemaker/vendor/piecemaker-plugin/scripts/lib/substitution.cjs +2 -3
- package/server/piecemaker/vendor/piecemaker-plugin/skills/conversion-md/SKILL.md +3 -3
- package/server/piecemaker/vendor/websocket-server/admin-routes.cjs +3 -10
- package/server/piecemaker/vendor/websocket-server/originals-pipeline.cjs +135 -4
- package/server/piecemaker/vendor/websocket-server/process-group.cjs +95 -0
- package/server/piecemaker/vendor/websocket-server/scripts/__pycache__/scan_utils.cpython-312.pyc +0 -0
- package/server/piecemaker/vendor/websocket-server/scripts/convert_and_scan_pipeline.py +280 -149
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/__pycache__/model_config.cpython-312.pyc +0 -0
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/__pycache__/scanner_worker.cpython-312.pyc +0 -0
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/scanner_worker.py +35 -29
- package/server/piecemaker/vendor/websocket-server/scripts/requirements.txt +0 -5
- package/server/shared/types.ts +1 -0
- package/dist/assets/channel-Dz3eE5vU.js +0 -1
- package/dist/assets/classDiagram-ZZMXUADV-BC1eKV2j.js +0 -1
- package/dist/assets/classDiagram-v2-VYDZK3BY-BC1eKV2j.js +0 -1
- package/dist/assets/index-DhwJpHCq.css +0 -1
- package/dist/assets/stateDiagram-v2-MP3YSRHH-BXuT4zDG.js +0 -1
- package/dist/assets/swimlanesDiagram-VR7AAH4N-B0eYrB4U.js +0 -8
- package/server/piecemaker/vendor/websocket-server/case-instructions.cjs +0 -111
- package/server/piecemaker/vendor/websocket-server/scripts/ADDRESS_ANONYMIZATION.md +0 -216
- package/server/piecemaker/vendor/websocket-server/scripts/DEDUPLICATION_CHANGES.md +0 -134
- package/server/piecemaker/vendor/websocket-server/scripts/GLINER2_README.md +0 -138
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/AUDIT_PERF_QUALITE.md +0 -246
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/MODELE_COREML.md +0 -62
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/__pycache__/coreml_runtime.cpython-312.pyc +0 -0
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/build_coreml.py +0 -118
- package/server/piecemaker/vendor/websocket-server/scripts/presidio-gliner/coreml_runtime.py +0 -164
- 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
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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 {
|
|
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
|
|
42
|
-
const { target, source, installed } = entry;
|
|
43
|
-
if (enabled &&
|
|
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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,
|
|
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
|
|
30
|
-
const hash = createHash('sha256');
|
|
31
|
-
let descriptor;
|
|
29
|
+
function fingerprintFile(filePath) {
|
|
32
30
|
try {
|
|
33
|
-
|
|
34
|
-
|
|
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:
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAyC7C,MAAM,oBAAoB,GAA0B;IAClD,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,eAAe;CACzB,CAAC;AAEF,MAAM,sBAAsB,GAAG,EAAE,GAAG,EAAE,CAAC;AAEvC,SAAS,kBAAkB,CAAC,WAAmB,EAAE,UAAqC;IACpF,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,cAAc,CAAC;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,OAA0B;IAC7C,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACvE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC1D,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAgC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,
|
|
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.
|
|
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": {
|
package/product.config.json
CHANGED
|
@@ -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
|
|
109
|
-
|
|
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
|
-
|
|
122
|
+
let pathUpdated = false;
|
|
113
123
|
|
|
114
124
|
if (isWindows) {
|
|
115
125
|
try {
|
|
116
|
-
|
|
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
|
-
|
|
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
|
-
? `
|
|
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
|
-
|
|
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
|
|
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,
|
|
280
|
-
createWindowsShortcut(startMenuShortcut,
|
|
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
|
|