@creezio/electron-shell 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/.creezio-src-hash.json +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/meili.d.ts +1 -1
- package/dist/meili.d.ts.map +1 -1
- package/dist/meili.js +1 -1
- package/dist/meili.js.map +1 -1
- package/dist-cjs/index.js +6 -8
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/meili.js +1 -2
- package/dist-cjs/meili.js.map +1 -1
- package/package.json +9 -9
- package/dist/desktop/legacy-brand-compat.d.ts +0 -45
- package/dist/desktop/legacy-brand-compat.d.ts.map +0 -1
- package/dist/desktop/legacy-brand-compat.js +0 -49
- package/dist/desktop/legacy-brand-compat.js.map +0 -1
- package/dist/factory-reset-runtime.d.ts +0 -11
- package/dist/factory-reset-runtime.d.ts.map +0 -1
- package/dist/factory-reset-runtime.js +0 -77
- package/dist/factory-reset-runtime.js.map +0 -1
- package/dist/host/ai-workspace/actions.d.ts +0 -12
- package/dist/host/ai-workspace/actions.d.ts.map +0 -1
- package/dist/host/ai-workspace/actions.js +0 -243
- package/dist/host/ai-workspace/actions.js.map +0 -1
- package/dist/host/ai-workspace/bindings.d.ts +0 -51
- package/dist/host/ai-workspace/bindings.d.ts.map +0 -1
- package/dist/host/ai-workspace/bindings.js +0 -40
- package/dist/host/ai-workspace/bindings.js.map +0 -1
- package/dist/host/ai-workspace/index.d.ts +0 -11
- package/dist/host/ai-workspace/index.d.ts.map +0 -1
- package/dist/host/ai-workspace/index.js +0 -6
- package/dist/host/ai-workspace/index.js.map +0 -1
- package/dist/host/ai-workspace/manager.d.ts +0 -128
- package/dist/host/ai-workspace/manager.d.ts.map +0 -1
- package/dist/host/ai-workspace/manager.js +0 -519
- package/dist/host/ai-workspace/manager.js.map +0 -1
- package/dist/host/ai-workspace/profile-window.d.ts +0 -37
- package/dist/host/ai-workspace/profile-window.d.ts.map +0 -1
- package/dist/host/ai-workspace/profile-window.js +0 -121
- package/dist/host/ai-workspace/profile-window.js.map +0 -1
- package/dist/host/ai-workspace/screencast.d.ts +0 -56
- package/dist/host/ai-workspace/screencast.d.ts.map +0 -1
- package/dist/host/ai-workspace/screencast.js +0 -245
- package/dist/host/ai-workspace/screencast.js.map +0 -1
- package/dist/host/ai-workspace/types.d.ts +0 -40
- package/dist/host/ai-workspace/types.d.ts.map +0 -1
- package/dist/host/ai-workspace/types.js +0 -6
- package/dist/host/ai-workspace/types.js.map +0 -1
- package/dist/host/brand-host-runtime.d.ts +0 -107
- package/dist/host/brand-host-runtime.d.ts.map +0 -1
- package/dist/host/brand-host-runtime.js +0 -274
- package/dist/host/brand-host-runtime.js.map +0 -1
- package/dist/host/brand-host-stack.d.ts +0 -117
- package/dist/host/brand-host-stack.d.ts.map +0 -1
- package/dist/host/brand-host-stack.js +0 -253
- package/dist/host/brand-host-stack.js.map +0 -1
- package/dist/host/brand-kernel-http.d.ts +0 -34
- package/dist/host/brand-kernel-http.d.ts.map +0 -1
- package/dist/host/brand-kernel-http.js +0 -95
- package/dist/host/brand-kernel-http.js.map +0 -1
- package/dist/host/brand-meili-boot.d.ts +0 -67
- package/dist/host/brand-meili-boot.d.ts.map +0 -1
- package/dist/host/brand-meili-boot.js +0 -100
- package/dist/host/brand-meili-boot.js.map +0 -1
- package/dist/host/bridge-client.d.ts +0 -54
- package/dist/host/bridge-client.d.ts.map +0 -1
- package/dist/host/bridge-client.js +0 -187
- package/dist/host/bridge-client.js.map +0 -1
- package/dist/host/context.d.ts +0 -70
- package/dist/host/context.d.ts.map +0 -1
- package/dist/host/context.js +0 -16
- package/dist/host/context.js.map +0 -1
- package/dist/host/contracts.d.ts +0 -39
- package/dist/host/contracts.d.ts.map +0 -1
- package/dist/host/contracts.js +0 -26
- package/dist/host/contracts.js.map +0 -1
- package/dist/host/crash-reporter.d.ts +0 -65
- package/dist/host/crash-reporter.d.ts.map +0 -1
- package/dist/host/crash-reporter.js +0 -371
- package/dist/host/crash-reporter.js.map +0 -1
- package/dist/host/ensure-kit-binaries.d.ts +0 -17
- package/dist/host/ensure-kit-binaries.d.ts.map +0 -1
- package/dist/host/ensure-kit-binaries.js +0 -205
- package/dist/host/ensure-kit-binaries.js.map +0 -1
- package/dist/host/feature-off-host.d.ts +0 -130
- package/dist/host/feature-off-host.d.ts.map +0 -1
- package/dist/host/feature-off-host.js +0 -138
- package/dist/host/feature-off-host.js.map +0 -1
- package/dist/host/hermes/crm-key.d.ts +0 -49
- package/dist/host/hermes/crm-key.d.ts.map +0 -1
- package/dist/host/hermes/crm-key.js +0 -126
- package/dist/host/hermes/crm-key.js.map +0 -1
- package/dist/host/hermes/ensure-crm-key-db.d.ts +0 -7
- package/dist/host/hermes/ensure-crm-key-db.d.ts.map +0 -1
- package/dist/host/hermes/ensure-crm-key-db.js +0 -84
- package/dist/host/hermes/ensure-crm-key-db.js.map +0 -1
- package/dist/host/hermes/launcher.d.ts +0 -98
- package/dist/host/hermes/launcher.d.ts.map +0 -1
- package/dist/host/hermes/launcher.js +0 -972
- package/dist/host/hermes/launcher.js.map +0 -1
- package/dist/host/hermes/runtime-bootstrap.d.ts +0 -172
- package/dist/host/hermes/runtime-bootstrap.d.ts.map +0 -1
- package/dist/host/hermes/runtime-bootstrap.js +0 -789
- package/dist/host/hermes/runtime-bootstrap.js.map +0 -1
- package/dist/host/hermes/skills-seed.d.ts +0 -40
- package/dist/host/hermes/skills-seed.d.ts.map +0 -1
- package/dist/host/hermes/skills-seed.js +0 -100
- package/dist/host/hermes/skills-seed.js.map +0 -1
- package/dist/host/host-stack.d.ts +0 -35
- package/dist/host/host-stack.d.ts.map +0 -1
- package/dist/host/host-stack.js +0 -38
- package/dist/host/host-stack.js.map +0 -1
- package/dist/host/kit-os-resources.d.ts +0 -6
- package/dist/host/kit-os-resources.d.ts.map +0 -1
- package/dist/host/kit-os-resources.js +0 -88
- package/dist/host/kit-os-resources.js.map +0 -1
- package/dist/host/load-electron.d.ts +0 -2
- package/dist/host/load-electron.d.ts.map +0 -1
- package/dist/host/load-electron.js +0 -44
- package/dist/host/load-electron.js.map +0 -1
- package/dist/host/local-config.d.ts +0 -120
- package/dist/host/local-config.d.ts.map +0 -1
- package/dist/host/local-config.js +0 -633
- package/dist/host/local-config.js.map +0 -1
- package/dist/host/meili/browse.d.ts +0 -58
- package/dist/host/meili/browse.d.ts.map +0 -1
- package/dist/host/meili/browse.js +0 -98
- package/dist/host/meili/browse.js.map +0 -1
- package/dist/host/meili/coherence-db.d.ts +0 -35
- package/dist/host/meili/coherence-db.d.ts.map +0 -1
- package/dist/host/meili/coherence-db.js +0 -129
- package/dist/host/meili/coherence-db.js.map +0 -1
- package/dist/host/meili/coherence-query.d.ts +0 -10
- package/dist/host/meili/coherence-query.d.ts.map +0 -1
- package/dist/host/meili/coherence-query.js +0 -23
- package/dist/host/meili/coherence-query.js.map +0 -1
- package/dist/host/meili/coherence.d.ts +0 -53
- package/dist/host/meili/coherence.d.ts.map +0 -1
- package/dist/host/meili/coherence.js +0 -148
- package/dist/host/meili/coherence.js.map +0 -1
- package/dist/host/meili/feed.d.ts +0 -82
- package/dist/host/meili/feed.d.ts.map +0 -1
- package/dist/host/meili/feed.js +0 -100
- package/dist/host/meili/feed.js.map +0 -1
- package/dist/host/meili/generic-indexer.d.ts +0 -34
- package/dist/host/meili/generic-indexer.d.ts.map +0 -1
- package/dist/host/meili/generic-indexer.js +0 -333
- package/dist/host/meili/generic-indexer.js.map +0 -1
- package/dist/host/meili/index-schema.d.ts +0 -64
- package/dist/host/meili/index-schema.d.ts.map +0 -1
- package/dist/host/meili/index-schema.js +0 -70
- package/dist/host/meili/index-schema.js.map +0 -1
- package/dist/host/meili/index.d.ts +0 -13
- package/dist/host/meili/index.d.ts.map +0 -1
- package/dist/host/meili/index.js +0 -8
- package/dist/host/meili/index.js.map +0 -1
- package/dist/host/meili/indexer.d.ts +0 -31
- package/dist/host/meili/indexer.d.ts.map +0 -1
- package/dist/host/meili/indexer.js +0 -49
- package/dist/host/meili/indexer.js.map +0 -1
- package/dist/host/meili-launcher.d.ts +0 -30
- package/dist/host/meili-launcher.d.ts.map +0 -1
- package/dist/host/meili-launcher.js +0 -115
- package/dist/host/meili-launcher.js.map +0 -1
- package/dist/host/n8n/agent-isolation.d.ts +0 -55
- package/dist/host/n8n/agent-isolation.d.ts.map +0 -1
- package/dist/host/n8n/agent-isolation.js +0 -158
- package/dist/host/n8n/agent-isolation.js.map +0 -1
- package/dist/host/n8n/api-key.d.ts +0 -67
- package/dist/host/n8n/api-key.d.ts.map +0 -1
- package/dist/host/n8n/api-key.js +0 -297
- package/dist/host/n8n/api-key.js.map +0 -1
- package/dist/host/n8n/launcher.d.ts +0 -126
- package/dist/host/n8n/launcher.d.ts.map +0 -1
- package/dist/host/n8n/launcher.js +0 -1170
- package/dist/host/n8n/launcher.js.map +0 -1
- package/dist/host/n8n/runtime-bootstrap.d.ts +0 -44
- package/dist/host/n8n/runtime-bootstrap.d.ts.map +0 -1
- package/dist/host/n8n/runtime-bootstrap.js +0 -230
- package/dist/host/n8n/runtime-bootstrap.js.map +0 -1
- package/dist/host/node-runtime.d.ts +0 -52
- package/dist/host/node-runtime.d.ts.map +0 -1
- package/dist/host/node-runtime.js +0 -257
- package/dist/host/node-runtime.js.map +0 -1
- package/dist/host/npm-cli.d.ts +0 -43
- package/dist/host/npm-cli.d.ts.map +0 -1
- package/dist/host/npm-cli.js +0 -213
- package/dist/host/npm-cli.js.map +0 -1
- package/dist/host/plugins/accept-check.d.ts +0 -19
- package/dist/host/plugins/accept-check.d.ts.map +0 -1
- package/dist/host/plugins/accept-check.js +0 -172
- package/dist/host/plugins/accept-check.js.map +0 -1
- package/dist/host/plugins/brand-bindings.d.ts +0 -103
- package/dist/host/plugins/brand-bindings.d.ts.map +0 -1
- package/dist/host/plugins/brand-bindings.js +0 -65
- package/dist/host/plugins/brand-bindings.js.map +0 -1
- package/dist/host/plugins/control-adapters.d.ts +0 -11
- package/dist/host/plugins/control-adapters.d.ts.map +0 -1
- package/dist/host/plugins/control-adapters.js +0 -83
- package/dist/host/plugins/control-adapters.js.map +0 -1
- package/dist/host/plugins/control-extras.d.ts +0 -61
- package/dist/host/plugins/control-extras.d.ts.map +0 -1
- package/dist/host/plugins/control-extras.js +0 -382
- package/dist/host/plugins/control-extras.js.map +0 -1
- package/dist/host/plugins/control-plane.d.ts +0 -42
- package/dist/host/plugins/control-plane.d.ts.map +0 -1
- package/dist/host/plugins/control-plane.js +0 -124
- package/dist/host/plugins/control-plane.js.map +0 -1
- package/dist/host/plugins/control-token.d.ts +0 -24
- package/dist/host/plugins/control-token.d.ts.map +0 -1
- package/dist/host/plugins/control-token.js +0 -77
- package/dist/host/plugins/control-token.js.map +0 -1
- package/dist/host/plugins/crm-key.d.ts +0 -25
- package/dist/host/plugins/crm-key.d.ts.map +0 -1
- package/dist/host/plugins/crm-key.js +0 -126
- package/dist/host/plugins/crm-key.js.map +0 -1
- package/dist/host/plugins/data.d.ts +0 -21
- package/dist/host/plugins/data.d.ts.map +0 -1
- package/dist/host/plugins/data.js +0 -100
- package/dist/host/plugins/data.js.map +0 -1
- package/dist/host/plugins/events.d.ts +0 -6
- package/dist/host/plugins/events.d.ts.map +0 -1
- package/dist/host/plugins/events.js +0 -6
- package/dist/host/plugins/events.js.map +0 -1
- package/dist/host/plugins/execution-grant.d.ts +0 -6
- package/dist/host/plugins/execution-grant.d.ts.map +0 -1
- package/dist/host/plugins/execution-grant.js +0 -6
- package/dist/host/plugins/execution-grant.js.map +0 -1
- package/dist/host/plugins/git.d.ts +0 -56
- package/dist/host/plugins/git.d.ts.map +0 -1
- package/dist/host/plugins/git.js +0 -357
- package/dist/host/plugins/git.js.map +0 -1
- package/dist/host/plugins/host.d.ts +0 -68
- package/dist/host/plugins/host.d.ts.map +0 -1
- package/dist/host/plugins/host.js +0 -276
- package/dist/host/plugins/host.js.map +0 -1
- package/dist/host/plugins/launcher.d.ts +0 -146
- package/dist/host/plugins/launcher.d.ts.map +0 -1
- package/dist/host/plugins/launcher.js +0 -489
- package/dist/host/plugins/launcher.js.map +0 -1
- package/dist/host/plugins/runtime.d.ts +0 -28
- package/dist/host/plugins/runtime.d.ts.map +0 -1
- package/dist/host/plugins/runtime.js +0 -430
- package/dist/host/plugins/runtime.js.map +0 -1
- package/dist/host/plugins/test-runner.d.ts +0 -15
- package/dist/host/plugins/test-runner.d.ts.map +0 -1
- package/dist/host/plugins/test-runner.js +0 -106
- package/dist/host/plugins/test-runner.js.map +0 -1
- package/dist/host/safe-storage.d.ts +0 -21
- package/dist/host/safe-storage.d.ts.map +0 -1
- package/dist/host/safe-storage.js +0 -55
- package/dist/host/safe-storage.js.map +0 -1
- package/dist/host/sandbox/embed-sandbox.d.ts +0 -133
- package/dist/host/sandbox/embed-sandbox.d.ts.map +0 -1
- package/dist/host/sandbox/embed-sandbox.js +0 -378
- package/dist/host/sandbox/embed-sandbox.js.map +0 -1
- package/dist/host/sandbox/os-sandbox.d.ts +0 -41
- package/dist/host/sandbox/os-sandbox.d.ts.map +0 -1
- package/dist/host/sandbox/os-sandbox.js +0 -98
- package/dist/host/sandbox/os-sandbox.js.map +0 -1
- package/dist/host/server-env.d.ts +0 -50
- package/dist/host/server-env.d.ts.map +0 -1
- package/dist/host/server-env.js +0 -64
- package/dist/host/server-env.js.map +0 -1
- package/dist/host/server-launcher.d.ts +0 -49
- package/dist/host/server-launcher.d.ts.map +0 -1
- package/dist/host/server-launcher.js +0 -43
- package/dist/host/server-launcher.js.map +0 -1
- package/dist/host/tunnel/cloudflared-respawn.d.ts +0 -58
- package/dist/host/tunnel/cloudflared-respawn.d.ts.map +0 -1
- package/dist/host/tunnel/cloudflared-respawn.js +0 -73
- package/dist/host/tunnel/cloudflared-respawn.js.map +0 -1
- package/dist/host/tunnel/tunnel.d.ts +0 -72
- package/dist/host/tunnel/tunnel.d.ts.map +0 -1
- package/dist/host/tunnel/tunnel.js +0 -462
- package/dist/host/tunnel/tunnel.js.map +0 -1
- package/dist/logger.d.ts +0 -44
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -252
- package/dist/logger.js.map +0 -1
- package/dist-cjs/desktop/legacy-brand-compat.js +0 -56
- package/dist-cjs/desktop/legacy-brand-compat.js.map +0 -1
- package/dist-cjs/factory-reset-runtime.js +0 -117
- package/dist-cjs/factory-reset-runtime.js.map +0 -1
- package/dist-cjs/host/ai-workspace/actions.js +0 -247
- package/dist-cjs/host/ai-workspace/actions.js.map +0 -1
- package/dist-cjs/host/ai-workspace/bindings.js +0 -49
- package/dist-cjs/host/ai-workspace/bindings.js.map +0 -1
- package/dist-cjs/host/ai-workspace/index.js +0 -21
- package/dist-cjs/host/ai-workspace/index.js.map +0 -1
- package/dist-cjs/host/ai-workspace/manager.js +0 -528
- package/dist-cjs/host/ai-workspace/manager.js.map +0 -1
- package/dist-cjs/host/ai-workspace/profile-window.js +0 -125
- package/dist-cjs/host/ai-workspace/profile-window.js.map +0 -1
- package/dist-cjs/host/ai-workspace/screencast.js +0 -249
- package/dist-cjs/host/ai-workspace/screencast.js.map +0 -1
- package/dist-cjs/host/ai-workspace/types.js +0 -7
- package/dist-cjs/host/ai-workspace/types.js.map +0 -1
- package/dist-cjs/host/brand-host-runtime.js +0 -286
- package/dist-cjs/host/brand-host-runtime.js.map +0 -1
- package/dist-cjs/host/brand-host-stack.js +0 -259
- package/dist-cjs/host/brand-host-stack.js.map +0 -1
- package/dist-cjs/host/brand-kernel-http.js +0 -101
- package/dist-cjs/host/brand-kernel-http.js.map +0 -1
- package/dist-cjs/host/brand-meili-boot.js +0 -106
- package/dist-cjs/host/brand-meili-boot.js.map +0 -1
- package/dist-cjs/host/bridge-client.js +0 -191
- package/dist-cjs/host/bridge-client.js.map +0 -1
- package/dist-cjs/host/context.js +0 -20
- package/dist-cjs/host/context.js.map +0 -1
- package/dist-cjs/host/contracts.js +0 -32
- package/dist-cjs/host/contracts.js.map +0 -1
- package/dist-cjs/host/crash-reporter.js +0 -422
- package/dist-cjs/host/crash-reporter.js.map +0 -1
- package/dist-cjs/host/ensure-kit-binaries.js +0 -212
- package/dist-cjs/host/ensure-kit-binaries.js.map +0 -1
- package/dist-cjs/host/feature-off-host.js +0 -144
- package/dist-cjs/host/feature-off-host.js.map +0 -1
- package/dist-cjs/host/hermes/crm-key.js +0 -137
- package/dist-cjs/host/hermes/crm-key.js.map +0 -1
- package/dist-cjs/host/hermes/ensure-crm-key-db.js +0 -89
- package/dist-cjs/host/hermes/ensure-crm-key-db.js.map +0 -1
- package/dist-cjs/host/hermes/launcher.js +0 -981
- package/dist-cjs/host/hermes/launcher.js.map +0 -1
- package/dist-cjs/host/hermes/runtime-bootstrap.js +0 -853
- package/dist-cjs/host/hermes/runtime-bootstrap.js.map +0 -1
- package/dist-cjs/host/hermes/skills-seed.js +0 -110
- package/dist-cjs/host/hermes/skills-seed.js.map +0 -1
- package/dist-cjs/host/host-stack.js +0 -42
- package/dist-cjs/host/host-stack.js.map +0 -1
- package/dist-cjs/host/kit-os-resources.js +0 -96
- package/dist-cjs/host/kit-os-resources.js.map +0 -1
- package/dist-cjs/host/load-electron.js +0 -47
- package/dist-cjs/host/load-electron.js.map +0 -1
- package/dist-cjs/host/local-config.js +0 -640
- package/dist-cjs/host/local-config.js.map +0 -1
- package/dist-cjs/host/meili/browse.js +0 -103
- package/dist-cjs/host/meili/browse.js.map +0 -1
- package/dist-cjs/host/meili/coherence-db.js +0 -139
- package/dist-cjs/host/meili/coherence-db.js.map +0 -1
- package/dist-cjs/host/meili/coherence-query.js +0 -25
- package/dist-cjs/host/meili/coherence-query.js.map +0 -1
- package/dist-cjs/host/meili/coherence.js +0 -158
- package/dist-cjs/host/meili/coherence.js.map +0 -1
- package/dist-cjs/host/meili/feed.js +0 -108
- package/dist-cjs/host/meili/feed.js.map +0 -1
- package/dist-cjs/host/meili/generic-indexer.js +0 -340
- package/dist-cjs/host/meili/generic-indexer.js.map +0 -1
- package/dist-cjs/host/meili/index-schema.js +0 -79
- package/dist-cjs/host/meili/index-schema.js.map +0 -1
- package/dist-cjs/host/meili/index.js +0 -45
- package/dist-cjs/host/meili/index.js.map +0 -1
- package/dist-cjs/host/meili/indexer.js +0 -85
- package/dist-cjs/host/meili/indexer.js.map +0 -1
- package/dist-cjs/host/meili-launcher.js +0 -121
- package/dist-cjs/host/meili-launcher.js.map +0 -1
- package/dist-cjs/host/n8n/agent-isolation.js +0 -173
- package/dist-cjs/host/n8n/agent-isolation.js.map +0 -1
- package/dist-cjs/host/n8n/api-key.js +0 -314
- package/dist-cjs/host/n8n/api-key.js.map +0 -1
- package/dist-cjs/host/n8n/launcher.js +0 -1209
- package/dist-cjs/host/n8n/launcher.js.map +0 -1
- package/dist-cjs/host/n8n/runtime-bootstrap.js +0 -244
- package/dist-cjs/host/n8n/runtime-bootstrap.js.map +0 -1
- package/dist-cjs/host/node-runtime.js +0 -274
- package/dist-cjs/host/node-runtime.js.map +0 -1
- package/dist-cjs/host/npm-cli.js +0 -224
- package/dist-cjs/host/npm-cli.js.map +0 -1
- package/dist-cjs/host/plugins/accept-check.js +0 -176
- package/dist-cjs/host/plugins/accept-check.js.map +0 -1
- package/dist-cjs/host/plugins/brand-bindings.js +0 -78
- package/dist-cjs/host/plugins/brand-bindings.js.map +0 -1
- package/dist-cjs/host/plugins/control-adapters.js +0 -89
- package/dist-cjs/host/plugins/control-adapters.js.map +0 -1
- package/dist-cjs/host/plugins/control-extras.js +0 -397
- package/dist-cjs/host/plugins/control-extras.js.map +0 -1
- package/dist-cjs/host/plugins/control-plane.js +0 -130
- package/dist-cjs/host/plugins/control-plane.js.map +0 -1
- package/dist-cjs/host/plugins/control-token.js +0 -90
- package/dist-cjs/host/plugins/control-token.js.map +0 -1
- package/dist-cjs/host/plugins/crm-key.js +0 -135
- package/dist-cjs/host/plugins/crm-key.js.map +0 -1
- package/dist-cjs/host/plugins/data.js +0 -107
- package/dist-cjs/host/plugins/data.js.map +0 -1
- package/dist-cjs/host/plugins/events.js +0 -19
- package/dist-cjs/host/plugins/events.js.map +0 -1
- package/dist-cjs/host/plugins/execution-grant.js +0 -11
- package/dist-cjs/host/plugins/execution-grant.js.map +0 -1
- package/dist-cjs/host/plugins/git.js +0 -371
- package/dist-cjs/host/plugins/git.js.map +0 -1
- package/dist-cjs/host/plugins/host.js +0 -283
- package/dist-cjs/host/plugins/host.js.map +0 -1
- package/dist-cjs/host/plugins/launcher.js +0 -514
- package/dist-cjs/host/plugins/launcher.js.map +0 -1
- package/dist-cjs/host/plugins/runtime.js +0 -446
- package/dist-cjs/host/plugins/runtime.js.map +0 -1
- package/dist-cjs/host/plugins/test-runner.js +0 -112
- package/dist-cjs/host/plugins/test-runner.js.map +0 -1
- package/dist-cjs/host/safe-storage.js +0 -95
- package/dist-cjs/host/safe-storage.js.map +0 -1
- package/dist-cjs/host/sandbox/embed-sandbox.js +0 -396
- package/dist-cjs/host/sandbox/embed-sandbox.js.map +0 -1
- package/dist-cjs/host/sandbox/os-sandbox.js +0 -106
- package/dist-cjs/host/sandbox/os-sandbox.js.map +0 -1
- package/dist-cjs/host/server-env.js +0 -69
- package/dist-cjs/host/server-env.js.map +0 -1
- package/dist-cjs/host/server-launcher.js +0 -52
- package/dist-cjs/host/server-launcher.js.map +0 -1
- package/dist-cjs/host/tunnel/cloudflared-respawn.js +0 -80
- package/dist-cjs/host/tunnel/cloudflared-respawn.js.map +0 -1
- package/dist-cjs/host/tunnel/tunnel.js +0 -470
- package/dist-cjs/host/tunnel/tunnel.js.map +0 -1
- package/dist-cjs/logger.js +0 -269
- package/dist-cjs/logger.js.map +0 -1
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browse paginé Meili — API publique `@creezio/electron-shell/meili`.
|
|
3
|
-
* Meili est un composant CORE (fail-closed) pour le browse catalogue.
|
|
4
|
-
*
|
|
5
|
-
* Contrat (SoT AGENTS.md section Meili) :
|
|
6
|
-
* - `q` vide = browse filtré / page catalogue (POST `q:""` + filter).
|
|
7
|
-
* - Meili KO sur une liste catalogue = **erreur visible côté appelant**
|
|
8
|
-
* (503 `meili_unavailable`, ou `engine:"indexing"` pendant l'indexation
|
|
9
|
-
* initiale) — plus jamais de LIKE SQL de secours. Utiliser
|
|
10
|
-
* `browseMeiliIndexOutcome` pour distinguer incident / hors index.
|
|
11
|
-
* - SQL légitime UNIQUEMENT hors index (agrégats, joins métier, écritures,
|
|
12
|
-
* filtre rejeté visible) ou avec `CREEZIO_ALLOW_NO_MEILI=1` (dev/tests).
|
|
13
|
-
* - 0 hit sur un index peuplé = succès (pas un fallback SQL).
|
|
14
|
-
* - Interdit : `if (q) meili else sql`.
|
|
15
|
-
* - Ne pas utiliser `searchMeiliIndexes` pour le browse (retourne [] si q vide).
|
|
16
|
-
*/
|
|
17
|
-
export type MeiliBrowseRequest = {
|
|
18
|
-
host: string;
|
|
19
|
-
apiKey?: string;
|
|
20
|
-
indexUid: string;
|
|
21
|
-
query?: string;
|
|
22
|
-
filters?: string[];
|
|
23
|
-
sort?: string[];
|
|
24
|
-
page?: number;
|
|
25
|
-
hitsPerPage?: number;
|
|
26
|
-
attributesToRetrieve?: string[];
|
|
27
|
-
facets?: string[];
|
|
28
|
-
timeoutMs?: number;
|
|
29
|
-
};
|
|
30
|
-
export type MeiliBrowseResult = {
|
|
31
|
-
hits: Array<Record<string, unknown>>;
|
|
32
|
-
total: number;
|
|
33
|
-
facetDistribution?: Record<string, Record<string, number>>;
|
|
34
|
-
};
|
|
35
|
-
export declare function meiliFilterEq(attr: string, raw: string): string;
|
|
36
|
-
/** Issue détaillée d'un browse — incident (fail-closed) vs hors index. */
|
|
37
|
-
export type MeiliBrowseOutcome = {
|
|
38
|
-
kind: "ok";
|
|
39
|
-
result: MeiliBrowseResult;
|
|
40
|
-
} | {
|
|
41
|
-
kind: "empty_index";
|
|
42
|
-
} | {
|
|
43
|
-
kind: "index_missing";
|
|
44
|
-
} | {
|
|
45
|
-
kind: "filter_rejected";
|
|
46
|
-
} | {
|
|
47
|
-
kind: "unavailable";
|
|
48
|
-
reason: string;
|
|
49
|
-
} | {
|
|
50
|
-
kind: "unconfigured";
|
|
51
|
-
};
|
|
52
|
-
export declare function browseMeiliIndexOutcome(req: MeiliBrowseRequest): Promise<MeiliBrowseOutcome>;
|
|
53
|
-
/**
|
|
54
|
-
* Compat historique : `null` = tout sauf `ok`. Préférer
|
|
55
|
-
* `browseMeiliIndexOutcome` (fail-closed) pour le browse catalogue.
|
|
56
|
-
*/
|
|
57
|
-
export declare function browseMeiliIndex(req: MeiliBrowseRequest): Promise<MeiliBrowseResult | null>;
|
|
58
|
-
//# sourceMappingURL=browse.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browse.d.ts","sourceRoot":"","sources":["../../../src/host/meili/browse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5D,CAAC;AASF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO/D;AAED,0EAA0E;AAC1E,MAAM,MAAM,kBAAkB,GAC1B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC;AAE7B,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,kBAAkB,CAAC,CA4D7B;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAGnC"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browse paginé Meili — API publique `@creezio/electron-shell/meili`.
|
|
3
|
-
* Meili est un composant CORE (fail-closed) pour le browse catalogue.
|
|
4
|
-
*
|
|
5
|
-
* Contrat (SoT AGENTS.md section Meili) :
|
|
6
|
-
* - `q` vide = browse filtré / page catalogue (POST `q:""` + filter).
|
|
7
|
-
* - Meili KO sur une liste catalogue = **erreur visible côté appelant**
|
|
8
|
-
* (503 `meili_unavailable`, ou `engine:"indexing"` pendant l'indexation
|
|
9
|
-
* initiale) — plus jamais de LIKE SQL de secours. Utiliser
|
|
10
|
-
* `browseMeiliIndexOutcome` pour distinguer incident / hors index.
|
|
11
|
-
* - SQL légitime UNIQUEMENT hors index (agrégats, joins métier, écritures,
|
|
12
|
-
* filtre rejeté visible) ou avec `CREEZIO_ALLOW_NO_MEILI=1` (dev/tests).
|
|
13
|
-
* - 0 hit sur un index peuplé = succès (pas un fallback SQL).
|
|
14
|
-
* - Interdit : `if (q) meili else sql`.
|
|
15
|
-
* - Ne pas utiliser `searchMeiliIndexes` pour le browse (retourne [] si q vide).
|
|
16
|
-
*/
|
|
17
|
-
function meiliHeaders(apiKey) {
|
|
18
|
-
return {
|
|
19
|
-
"Content-Type": "application/json",
|
|
20
|
-
...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export function meiliFilterEq(attr, raw) {
|
|
24
|
-
const n = Number(raw);
|
|
25
|
-
if (raw !== "" && Number.isFinite(n) && String(n) === raw) {
|
|
26
|
-
return `${attr} = ${n}`;
|
|
27
|
-
}
|
|
28
|
-
const escaped = raw.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
|
|
29
|
-
return `${attr} = "${escaped}"`;
|
|
30
|
-
}
|
|
31
|
-
export async function browseMeiliIndexOutcome(req) {
|
|
32
|
-
const host = (req.host || "").replace(/\/+$/, "");
|
|
33
|
-
if (!host || !req.indexUid)
|
|
34
|
-
return { kind: "unconfigured" };
|
|
35
|
-
const timeoutMs = req.timeoutMs ?? 3000;
|
|
36
|
-
const headers = meiliHeaders(req.apiKey);
|
|
37
|
-
try {
|
|
38
|
-
const statsRes = await fetch(`${host}/indexes/${req.indexUid}/stats`, {
|
|
39
|
-
headers,
|
|
40
|
-
signal: AbortSignal.timeout(timeoutMs),
|
|
41
|
-
});
|
|
42
|
-
if (statsRes.status === 404)
|
|
43
|
-
return { kind: "index_missing" };
|
|
44
|
-
if (!statsRes.ok) {
|
|
45
|
-
return { kind: "unavailable", reason: `stats_${statsRes.status}` };
|
|
46
|
-
}
|
|
47
|
-
const stats = (await statsRes.json());
|
|
48
|
-
if (Number(stats.numberOfDocuments || 0) <= 0) {
|
|
49
|
-
return { kind: "empty_index" };
|
|
50
|
-
}
|
|
51
|
-
const page = Math.max(1, req.page ?? 1);
|
|
52
|
-
const hitsPerPage = Math.min(Math.max(req.hitsPerPage ?? 20, 1), 200);
|
|
53
|
-
const searchRes = await fetch(`${host}/indexes/${req.indexUid}/search`, {
|
|
54
|
-
method: "POST",
|
|
55
|
-
headers,
|
|
56
|
-
body: JSON.stringify({
|
|
57
|
-
q: req.query ?? "",
|
|
58
|
-
filter: req.filters?.length ? req.filters : undefined,
|
|
59
|
-
sort: req.sort?.length ? req.sort : undefined,
|
|
60
|
-
page,
|
|
61
|
-
hitsPerPage,
|
|
62
|
-
attributesToRetrieve: req.attributesToRetrieve ?? ["id"],
|
|
63
|
-
facets: req.facets?.length ? req.facets : undefined,
|
|
64
|
-
}),
|
|
65
|
-
signal: AbortSignal.timeout(timeoutMs),
|
|
66
|
-
});
|
|
67
|
-
if (searchRes.status === 400)
|
|
68
|
-
return { kind: "filter_rejected" };
|
|
69
|
-
if (!searchRes.ok) {
|
|
70
|
-
return { kind: "unavailable", reason: `search_${searchRes.status}` };
|
|
71
|
-
}
|
|
72
|
-
const data = (await searchRes.json());
|
|
73
|
-
const hits = Array.isArray(data.hits) ? data.hits : [];
|
|
74
|
-
return {
|
|
75
|
-
kind: "ok",
|
|
76
|
-
result: {
|
|
77
|
-
hits,
|
|
78
|
-
total: Number(data.totalHits ?? data.estimatedTotalHits ?? hits.length),
|
|
79
|
-
facetDistribution: data.facetDistribution,
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
catch (err) {
|
|
84
|
-
return {
|
|
85
|
-
kind: "unavailable",
|
|
86
|
-
reason: err instanceof Error ? err.message : String(err),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Compat historique : `null` = tout sauf `ok`. Préférer
|
|
92
|
-
* `browseMeiliIndexOutcome` (fail-closed) pour le browse catalogue.
|
|
93
|
-
*/
|
|
94
|
-
export async function browseMeiliIndex(req) {
|
|
95
|
-
const outcome = await browseMeiliIndexOutcome(req);
|
|
96
|
-
return outcome.kind === "ok" ? outcome.result : null;
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=browse.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"browse.js","sourceRoot":"","sources":["../../../src/host/meili/browse.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Accès SQLite pour la cohérence Meili — process Node vanilla uniquement
|
|
3
|
-
* (better-sqlite3 ABI Node). Ne jamais importer depuis electron/main.ts.
|
|
4
|
-
*
|
|
5
|
-
* Compteurs alignés sur l'indexeur catalogue (tables via
|
|
6
|
-
* `configureMeiliCatalogSqlTables` — défaut TF produits + fournisseurs).
|
|
7
|
-
*/
|
|
8
|
-
import { type CatalogSqlCounts, type MeiliFingerprint } from "./index-schema.js";
|
|
9
|
-
export type GedSqlCounts = CatalogSqlCounts;
|
|
10
|
-
/** Compteurs SQL alignés sur l'indexeur catalogue (tables configurables). */
|
|
11
|
-
export declare function countCatalogSql(dbPath: string): CatalogSqlCounts;
|
|
12
|
-
/** Alias historique (API Fidu GED). */
|
|
13
|
-
export declare function countGedSql(dbPath: string): CatalogSqlCounts;
|
|
14
|
-
export declare function readSqliteSchemaVersion(dbPath: string): number;
|
|
15
|
-
export declare function readFingerprintFromDb(dbPath: string): MeiliFingerprint | null;
|
|
16
|
-
export declare function writeFingerprintToDb(dbPath: string, fp: MeiliFingerprint): void;
|
|
17
|
-
export declare function buildFingerprint(opts: {
|
|
18
|
-
sql: CatalogSqlCounts;
|
|
19
|
-
sqliteSchema: number;
|
|
20
|
-
appVersion?: string;
|
|
21
|
-
}): MeiliFingerprint;
|
|
22
|
-
export type MeiliIndexInProgress = {
|
|
23
|
-
startedAt: string;
|
|
24
|
-
appVersion?: string;
|
|
25
|
-
};
|
|
26
|
-
export declare function readIndexInProgress(dbPath: string): MeiliIndexInProgress | null;
|
|
27
|
-
export type CoherenceDbSnapshot = {
|
|
28
|
-
sql: CatalogSqlCounts;
|
|
29
|
-
sqliteSchema: number;
|
|
30
|
-
fingerprint: MeiliFingerprint | null;
|
|
31
|
-
/** Indexation précédente jamais terminée (marqueur resté en place). */
|
|
32
|
-
indexInProgress: MeiliIndexInProgress | null;
|
|
33
|
-
};
|
|
34
|
-
export declare function readCoherenceDbSnapshot(dbPath: string): CoherenceDbSnapshot;
|
|
35
|
-
//# sourceMappingURL=coherence-db.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coherence-db.d.ts","sourceRoot":"","sources":["../../../src/host/meili/coherence-db.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAOL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAoB3B,MAAM,MAAM,YAAY,GAAG,gBAAgB,CAAC;AAmB5C,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAmBhE;AAED,uCAAuC;AACvC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAE5D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAW7E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,gBAAgB,GAAG,IAAI,CAU/E;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,gBAAgB,CAQnB;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAiB/E;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,gBAAgB,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,uEAAuE;IACvE,eAAe,EAAE,oBAAoB,GAAG,IAAI,CAAC;CAC9C,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAO3E"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Accès SQLite pour la cohérence Meili — process Node vanilla uniquement
|
|
3
|
-
* (better-sqlite3 ABI Node). Ne jamais importer depuis electron/main.ts.
|
|
4
|
-
*
|
|
5
|
-
* Compteurs alignés sur l'indexeur catalogue (tables via
|
|
6
|
-
* `configureMeiliCatalogSqlTables` — défaut TF produits + fournisseurs).
|
|
7
|
-
*/
|
|
8
|
-
import { createAppRequire } from "@creezio/platform-core";
|
|
9
|
-
import { INDEX_SCHEMA_VERSION, MEILI_FINGERPRINT_META_KEY, MEILI_INDEX_IN_PROGRESS_KEY, getMeiliCatalogSqlTables, parseFingerprint, serializeFingerprint, } from "./index-schema.js";
|
|
10
|
-
function loadDatabase() {
|
|
11
|
-
const req = createAppRequire();
|
|
12
|
-
return req("better-sqlite3");
|
|
13
|
-
}
|
|
14
|
-
function tableExists(db, name) {
|
|
15
|
-
const row = db
|
|
16
|
-
.prepare(`SELECT COUNT(*) AS c FROM sqlite_master WHERE type='table' AND name=?`)
|
|
17
|
-
.get(name);
|
|
18
|
-
return row.c > 0;
|
|
19
|
-
}
|
|
20
|
-
function count(db, sql) {
|
|
21
|
-
const row = db.prepare(sql).get();
|
|
22
|
-
return Number(row?.c || 0);
|
|
23
|
-
}
|
|
24
|
-
/** Identifiant table SQLite sûr (alphanum + underscore). */
|
|
25
|
-
function safeTableName(name) {
|
|
26
|
-
return /^[A-Za-z_][A-Za-z0-9_]*$/.test(name) ? name : null;
|
|
27
|
-
}
|
|
28
|
-
/** Compteurs SQL alignés sur l'indexeur catalogue (tables configurables). */
|
|
29
|
-
export function countCatalogSql(dbPath) {
|
|
30
|
-
const tables = getMeiliCatalogSqlTables();
|
|
31
|
-
const produitsTable = safeTableName(tables.produits);
|
|
32
|
-
const sitesTable = safeTableName(tables.sites);
|
|
33
|
-
const db = new (loadDatabase())(dbPath, { readonly: true, fileMustExist: true });
|
|
34
|
-
try {
|
|
35
|
-
const produits = produitsTable && tableExists(db, produitsTable)
|
|
36
|
-
? count(db, `SELECT COUNT(*) AS c FROM ${produitsTable}`)
|
|
37
|
-
: 0;
|
|
38
|
-
// Champ fingerprint historique `fournisseurs` = compteur table `sites`.
|
|
39
|
-
const fournisseurs = sitesTable && tableExists(db, sitesTable)
|
|
40
|
-
? count(db, `SELECT COUNT(*) AS c FROM ${sitesTable}`)
|
|
41
|
-
: 0;
|
|
42
|
-
return { produits, fournisseurs };
|
|
43
|
-
}
|
|
44
|
-
finally {
|
|
45
|
-
db.close();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/** Alias historique (API Fidu GED). */
|
|
49
|
-
export function countGedSql(dbPath) {
|
|
50
|
-
return countCatalogSql(dbPath);
|
|
51
|
-
}
|
|
52
|
-
export function readSqliteSchemaVersion(dbPath) {
|
|
53
|
-
const db = new (loadDatabase())(dbPath, { readonly: true, fileMustExist: true });
|
|
54
|
-
try {
|
|
55
|
-
if (!tableExists(db, "meta"))
|
|
56
|
-
return 0;
|
|
57
|
-
const row = db
|
|
58
|
-
.prepare(`SELECT value FROM meta WHERE key='schema_version'`)
|
|
59
|
-
.get();
|
|
60
|
-
return Number(row?.value || 0);
|
|
61
|
-
}
|
|
62
|
-
finally {
|
|
63
|
-
db.close();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
export function readFingerprintFromDb(dbPath) {
|
|
67
|
-
const db = new (loadDatabase())(dbPath, { readonly: true, fileMustExist: true });
|
|
68
|
-
try {
|
|
69
|
-
if (!tableExists(db, "meta"))
|
|
70
|
-
return null;
|
|
71
|
-
const row = db
|
|
72
|
-
.prepare(`SELECT value FROM meta WHERE key=?`)
|
|
73
|
-
.get(MEILI_FINGERPRINT_META_KEY);
|
|
74
|
-
return parseFingerprint(row?.value);
|
|
75
|
-
}
|
|
76
|
-
finally {
|
|
77
|
-
db.close();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
export function writeFingerprintToDb(dbPath, fp) {
|
|
81
|
-
const db = new (loadDatabase())(dbPath, { fileMustExist: true });
|
|
82
|
-
try {
|
|
83
|
-
db.prepare(`INSERT INTO meta(key, value) VALUES (?, ?)
|
|
84
|
-
ON CONFLICT(key) DO UPDATE SET value = excluded.value`).run(MEILI_FINGERPRINT_META_KEY, serializeFingerprint(fp));
|
|
85
|
-
}
|
|
86
|
-
finally {
|
|
87
|
-
db.close();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
export function buildFingerprint(opts) {
|
|
91
|
-
return {
|
|
92
|
-
indexSchema: INDEX_SCHEMA_VERSION,
|
|
93
|
-
sqliteSchema: opts.sqliteSchema,
|
|
94
|
-
counts: opts.sql,
|
|
95
|
-
builtAt: new Date().toISOString(),
|
|
96
|
-
appVersion: opts.appVersion,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
export function readIndexInProgress(dbPath) {
|
|
100
|
-
const db = new (loadDatabase())(dbPath, { readonly: true, fileMustExist: true });
|
|
101
|
-
try {
|
|
102
|
-
if (!tableExists(db, "meta"))
|
|
103
|
-
return null;
|
|
104
|
-
const row = db
|
|
105
|
-
.prepare(`SELECT value FROM meta WHERE key=?`)
|
|
106
|
-
.get(MEILI_INDEX_IN_PROGRESS_KEY);
|
|
107
|
-
if (!row?.value)
|
|
108
|
-
return null;
|
|
109
|
-
try {
|
|
110
|
-
const data = JSON.parse(row.value);
|
|
111
|
-
return typeof data.startedAt === "string" ? data : null;
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
finally {
|
|
118
|
-
db.close();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
export function readCoherenceDbSnapshot(dbPath) {
|
|
122
|
-
return {
|
|
123
|
-
sql: countCatalogSql(dbPath),
|
|
124
|
-
sqliteSchema: readSqliteSchemaVersion(dbPath),
|
|
125
|
-
fingerprint: readFingerprintFromDb(dbPath),
|
|
126
|
-
indexInProgress: readIndexInProgress(dbPath),
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=coherence-db.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coherence-db.js","sourceRoot":"","sources":["../../../src/host/meili/coherence-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Node vanilla : lit counts SQL + fingerprint (JSON sur stdout).
|
|
3
|
-
* Spawn depuis electron/main via nodeBinary() + NODE_PATH (better-sqlite3).
|
|
4
|
-
*
|
|
5
|
-
* DB_PATH=... node …/meili/coherence-query.js
|
|
6
|
-
*
|
|
7
|
-
* Dual-build safe : pas d'`import.meta` (CJS Electron).
|
|
8
|
-
*/
|
|
9
|
-
export {};
|
|
10
|
-
//# sourceMappingURL=coherence-query.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coherence-query.d.ts","sourceRoot":"","sources":["../../../src/host/meili/coherence-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Node vanilla : lit counts SQL + fingerprint (JSON sur stdout).
|
|
3
|
-
* Spawn depuis electron/main via nodeBinary() + NODE_PATH (better-sqlite3).
|
|
4
|
-
*
|
|
5
|
-
* DB_PATH=... node …/meili/coherence-query.js
|
|
6
|
-
*
|
|
7
|
-
* Dual-build safe : pas d'`import.meta` (CJS Electron).
|
|
8
|
-
*/
|
|
9
|
-
import { readCoherenceDbSnapshot } from "./coherence-db.js";
|
|
10
|
-
function main() {
|
|
11
|
-
const dbPath = process.env.DB_PATH;
|
|
12
|
-
if (!dbPath) {
|
|
13
|
-
console.error("DB_PATH manquant");
|
|
14
|
-
process.exit(2);
|
|
15
|
-
}
|
|
16
|
-
const snap = readCoherenceDbSnapshot(dbPath);
|
|
17
|
-
process.stdout.write(JSON.stringify(snap) + "\n");
|
|
18
|
-
}
|
|
19
|
-
const cliEntry = process.argv[1] || "";
|
|
20
|
-
if (/(^|[\\/])coherence-query\.(c?js|mjs)$/.test(cliEntry)) {
|
|
21
|
-
main();
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=coherence-query.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coherence-query.js","sourceRoot":"","sources":["../../../src/host/meili/coherence-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,SAAS,IAAI;IACX,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC,IAAI,uCAAuC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC3D,IAAI,EAAE,CAAC;AACT,CAAC"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cohérence SQLite ↔ Meili au boot Electron.
|
|
3
|
-
*
|
|
4
|
-
* IMPORTANT : pas de better-sqlite3 ici (ABI Node ≠ Electron). Les lectures
|
|
5
|
-
* SQLite passent par un spawn Node vanilla (meili-coherence-query.js).
|
|
6
|
-
*/
|
|
7
|
-
import { type GedSqlCounts, type MeiliFingerprint } from "./index-schema.js";
|
|
8
|
-
import type { RunningMeili } from "../meili-launcher.js";
|
|
9
|
-
export type MeiliCoherencePaths = {
|
|
10
|
-
dbPath: () => string;
|
|
11
|
-
nodeBinary: () => string;
|
|
12
|
-
nodeScript: (rel: string) => string;
|
|
13
|
-
nodeModulesPathForScripts: () => string | null | undefined;
|
|
14
|
-
};
|
|
15
|
-
/** Configure les chemins spawn (marque) — requis avant decideMeiliReady. */
|
|
16
|
-
export declare function configureMeiliCoherencePaths(next: MeiliCoherencePaths): void;
|
|
17
|
-
export type { GedSqlCounts, MeiliFingerprint };
|
|
18
|
-
export { INDEX_SCHEMA_VERSION } from "./index-schema.js";
|
|
19
|
-
/**
|
|
20
|
-
* Chemin absolu du script de sonde SQL embarqué dans le package
|
|
21
|
-
* (resources/scripts, copié hors asar côté desktop). Utilisable par le
|
|
22
|
-
* harness serveur pour configurer MeiliCoherencePaths sans connaître le
|
|
23
|
-
* layout interne du package.
|
|
24
|
-
*/
|
|
25
|
-
export declare function meiliCoherenceScriptPath(): string;
|
|
26
|
-
export type MeiliReadyDecision = {
|
|
27
|
-
ready: boolean;
|
|
28
|
-
reason: string;
|
|
29
|
-
sql: GedSqlCounts;
|
|
30
|
-
/** Docs par UID vérifié (UIDs du feed marque, sinon catalog_* génériques). */
|
|
31
|
-
meili: Record<string, number>;
|
|
32
|
-
fingerprint: MeiliFingerprint | null;
|
|
33
|
-
sqliteSchema: number;
|
|
34
|
-
/** Indexation précédente interrompue (marqueur meta resté en place). */
|
|
35
|
-
interruptedPrevious: boolean;
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* Ready seulement si fingerprint aligné + chaque index attendu peuplé si SQL > 0.
|
|
39
|
-
*
|
|
40
|
-
* UIDs + compteurs attendus : depuis le `BrandMeiliFeed` configuré si
|
|
41
|
-
* présent (marques feed) — sinon les UIDs génériques `catalog_*` par défaut.
|
|
42
|
-
*
|
|
43
|
-
* `strictCounts` (serveur headless) : exige l'égalité exacte des compteurs
|
|
44
|
-
* SQL ↔ Meili par index — le mode desktop historique tolère la dérive
|
|
45
|
-
* (seul « index vide alors que SQL > 0 » invalide), mais côté serveur le
|
|
46
|
-
* feed de boot est la SEULE resynchronisation (pas d'indexation
|
|
47
|
-
* incrémentale aux imports) : sauter une réindexation malgré une dérive
|
|
48
|
-
* figerait l'index jusqu'au prochain bump de schemaVersion.
|
|
49
|
-
*/
|
|
50
|
-
export declare function decideMeiliReady(m: RunningMeili, dbFile?: string, opts?: {
|
|
51
|
-
strictCounts?: boolean;
|
|
52
|
-
}): Promise<MeiliReadyDecision>;
|
|
53
|
-
//# sourceMappingURL=coherence.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coherence.d.ts","sourceRoot":"","sources":["../../../src/host/meili/coherence.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,yBAAyB,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5D,CAAC;AAIF,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI,CAE5E;AAWD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAMjD;AA2DD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,YAAY,CAAC;IAClB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,CAAC,EAAE,YAAY,EACf,MAAM,CAAC,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,kBAAkB,CAAC,CAoE7B"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cohérence SQLite ↔ Meili au boot Electron.
|
|
3
|
-
*
|
|
4
|
-
* IMPORTANT : pas de better-sqlite3 ici (ABI Node ≠ Electron). Les lectures
|
|
5
|
-
* SQLite passent par un spawn Node vanilla (meili-coherence-query.js).
|
|
6
|
-
*/
|
|
7
|
-
import { spawnSync } from "node:child_process";
|
|
8
|
-
import path from "node:path";
|
|
9
|
-
import { GED_INDEXES, INDEX_SCHEMA_VERSION, expectedMeiliCounts, } from "./index-schema.js";
|
|
10
|
-
import { kitOsResourcesRoot } from "../kit-os-resources.js";
|
|
11
|
-
import { expectedCountsForFeed, getMeiliBrandFeed } from "./feed.js";
|
|
12
|
-
import { envForNodeScriptSpawn } from "../node-runtime.js";
|
|
13
|
-
let paths = null;
|
|
14
|
-
/** Configure les chemins spawn (marque) — requis avant decideMeiliReady. */
|
|
15
|
-
export function configureMeiliCoherencePaths(next) {
|
|
16
|
-
paths = next;
|
|
17
|
-
}
|
|
18
|
-
function requirePaths() {
|
|
19
|
-
if (!paths) {
|
|
20
|
-
throw new Error("MeiliCoherencePaths absents — appeler configureMeiliCoherencePaths()");
|
|
21
|
-
}
|
|
22
|
-
return paths;
|
|
23
|
-
}
|
|
24
|
-
export { INDEX_SCHEMA_VERSION } from "./index-schema.js";
|
|
25
|
-
/**
|
|
26
|
-
* Chemin absolu du script de sonde SQL embarqué dans le package
|
|
27
|
-
* (resources/scripts, copié hors asar côté desktop). Utilisable par le
|
|
28
|
-
* harness serveur pour configurer MeiliCoherencePaths sans connaître le
|
|
29
|
-
* layout interne du package.
|
|
30
|
-
*/
|
|
31
|
-
export function meiliCoherenceScriptPath() {
|
|
32
|
-
return path.join(kitOsResourcesRoot(), "scripts", "meili-coherence-query.cjs");
|
|
33
|
-
}
|
|
34
|
-
function queryDbSnapshot(dbFile) {
|
|
35
|
-
const p = requirePaths();
|
|
36
|
-
const script = p.nodeScript("meili-coherence-query.js");
|
|
37
|
-
const bin = p.nodeBinary();
|
|
38
|
-
const env = {
|
|
39
|
-
...envForNodeScriptSpawn(bin),
|
|
40
|
-
DB_PATH: dbFile,
|
|
41
|
-
};
|
|
42
|
-
const nm = p.nodeModulesPathForScripts();
|
|
43
|
-
if (nm)
|
|
44
|
-
env.NODE_PATH = nm;
|
|
45
|
-
const r = spawnSync(bin, [script], {
|
|
46
|
-
env,
|
|
47
|
-
encoding: "utf8",
|
|
48
|
-
windowsHide: true,
|
|
49
|
-
timeout: 20_000,
|
|
50
|
-
});
|
|
51
|
-
if (r.error)
|
|
52
|
-
throw r.error;
|
|
53
|
-
if (r.status !== 0) {
|
|
54
|
-
throw new Error(`meili-coherence-query exit ${r.status}: ${(r.stderr || r.stdout || "").slice(0, 400)}`);
|
|
55
|
-
}
|
|
56
|
-
const line = (r.stdout || "")
|
|
57
|
-
.split("\n")
|
|
58
|
-
.map((l) => l.trim())
|
|
59
|
-
.filter(Boolean)
|
|
60
|
-
.pop();
|
|
61
|
-
if (!line)
|
|
62
|
-
throw new Error("meili-coherence-query: stdout vide");
|
|
63
|
-
return JSON.parse(line);
|
|
64
|
-
}
|
|
65
|
-
async function meiliIndexStats(m, uid) {
|
|
66
|
-
try {
|
|
67
|
-
const res = await fetch(`${m.host}/indexes/${uid}/stats`, {
|
|
68
|
-
headers: { Authorization: `Bearer ${m.masterKey}` },
|
|
69
|
-
signal: AbortSignal.timeout(5000),
|
|
70
|
-
});
|
|
71
|
-
if (res.status === 404)
|
|
72
|
-
return { ok: true, missing: true, docs: 0 };
|
|
73
|
-
if (!res.ok)
|
|
74
|
-
return { ok: false, missing: false, docs: 0 };
|
|
75
|
-
const data = (await res.json());
|
|
76
|
-
return { ok: true, missing: false, docs: Number(data.numberOfDocuments || 0) };
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
return { ok: false, missing: false, docs: 0 };
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Ready seulement si fingerprint aligné + chaque index attendu peuplé si SQL > 0.
|
|
84
|
-
*
|
|
85
|
-
* UIDs + compteurs attendus : depuis le `BrandMeiliFeed` configuré si
|
|
86
|
-
* présent (marques feed) — sinon les UIDs génériques `catalog_*` par défaut.
|
|
87
|
-
*
|
|
88
|
-
* `strictCounts` (serveur headless) : exige l'égalité exacte des compteurs
|
|
89
|
-
* SQL ↔ Meili par index — le mode desktop historique tolère la dérive
|
|
90
|
-
* (seul « index vide alors que SQL > 0 » invalide), mais côté serveur le
|
|
91
|
-
* feed de boot est la SEULE resynchronisation (pas d'indexation
|
|
92
|
-
* incrémentale aux imports) : sauter une réindexation malgré une dérive
|
|
93
|
-
* figerait l'index jusqu'au prochain bump de schemaVersion.
|
|
94
|
-
*/
|
|
95
|
-
export async function decideMeiliReady(m, dbFile, opts) {
|
|
96
|
-
dbFile = dbFile ?? requirePaths().dbPath();
|
|
97
|
-
const snap = queryDbSnapshot(dbFile);
|
|
98
|
-
const { sql, sqliteSchema, fingerprint } = snap;
|
|
99
|
-
const interruptedPrevious = Boolean(snap.indexInProgress);
|
|
100
|
-
const feed = getMeiliBrandFeed();
|
|
101
|
-
const expectedSchema = feed ? feed.schemaVersion : INDEX_SCHEMA_VERSION;
|
|
102
|
-
const uids = feed
|
|
103
|
-
? feed.indexes.map((i) => i.uid)
|
|
104
|
-
: GED_INDEXES;
|
|
105
|
-
const expected = feed
|
|
106
|
-
? expectedCountsForFeed(feed, sql)
|
|
107
|
-
: expectedMeiliCounts(sql);
|
|
108
|
-
const meili = {};
|
|
109
|
-
const decide = (ready, reason) => ({
|
|
110
|
-
ready,
|
|
111
|
-
reason,
|
|
112
|
-
sql,
|
|
113
|
-
meili,
|
|
114
|
-
fingerprint,
|
|
115
|
-
sqliteSchema,
|
|
116
|
-
interruptedPrevious,
|
|
117
|
-
});
|
|
118
|
-
if (!fingerprint) {
|
|
119
|
-
return decide(false, interruptedPrevious
|
|
120
|
-
? "fingerprint-absent (indexation précédente interrompue)"
|
|
121
|
-
: "fingerprint-absent");
|
|
122
|
-
}
|
|
123
|
-
if (fingerprint.indexSchema !== expectedSchema) {
|
|
124
|
-
return decide(false, `index-schema-mismatch fp=${fingerprint.indexSchema} want=${expectedSchema}`);
|
|
125
|
-
}
|
|
126
|
-
if (fingerprint.sqliteSchema !== sqliteSchema) {
|
|
127
|
-
return decide(false, `sqlite-schema-mismatch fp=${fingerprint.sqliteSchema} want=${sqliteSchema}`);
|
|
128
|
-
}
|
|
129
|
-
for (const uid of uids) {
|
|
130
|
-
const st = await meiliIndexStats(m, uid);
|
|
131
|
-
if (!st.ok) {
|
|
132
|
-
return decide(false, `meili-stats-error:${uid}`);
|
|
133
|
-
}
|
|
134
|
-
if (st.missing) {
|
|
135
|
-
return decide(false, `index-missing:${uid}`);
|
|
136
|
-
}
|
|
137
|
-
meili[uid] = st.docs;
|
|
138
|
-
const want = expected[uid] ?? 0;
|
|
139
|
-
if (want > 0 && st.docs === 0) {
|
|
140
|
-
return decide(false, `index-empty-while-sql:${uid} sql=${want}`);
|
|
141
|
-
}
|
|
142
|
-
if (opts?.strictCounts && st.docs !== want) {
|
|
143
|
-
return decide(false, `count-drift:${uid} meili=${st.docs} want=${want}`);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return decide(true, "fingerprint-ok");
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=coherence.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coherence.js","sourceRoot":"","sources":["../../../src/host/meili/coherence.ts"],"names":[],"mappings":"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"}
|