enigma-memory 0.1.18 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/README.md +76 -24
  2. package/apps/cli/bin/enigma-desktop.mjs +140 -0
  3. package/apps/cli/bin/enigma-terminal.mjs +78 -0
  4. package/apps/cli/bin/enigma.mjs +1923 -285
  5. package/apps/desktop/electron-main.cjs +217 -0
  6. package/apps/desktop/package.json +12 -0
  7. package/apps/desktop/src/app.js +264 -7
  8. package/apps/desktop/src/index.html +3514 -1373
  9. package/apps/desktop/src/launch-electron.mjs +51 -0
  10. package/apps/desktop/src/server.mjs +2914 -0
  11. package/apps/desktop/src/styles.css +2972 -260
  12. package/apps/desktop/src/zk-browser-prove.mjs +53 -0
  13. package/apps/desktop/src/zk-state.mjs +1789 -0
  14. package/apps/gateway/bin/enigma-gateway.mjs +102 -5
  15. package/apps/gateway/src/server.mjs +271 -8
  16. package/apps/ios/EnigmaCore/Package.swift +12 -0
  17. package/apps/ios/EnigmaCore/Sources/EnigmaCore/EnigmaAPIClient.swift +227 -0
  18. package/apps/ios/EnigmaCore/Sources/EnigmaCore/Models.swift +278 -0
  19. package/apps/ios/EnigmaCore/Sources/EnigmaCore/PKCE.swift +96 -0
  20. package/apps/ios/EnigmaCore/Sources/EnigmaCore/PrivacyMinimizer.swift +187 -0
  21. package/apps/ios/EnigmaCore/Sources/EnigmaCore/ToolModels.swift +129 -0
  22. package/apps/ios/EnigmaCore/Tests/EnigmaCoreTests/EnigmaCoreTests.swift +42 -0
  23. package/apps/ios/EnigmaIOS/Enigma/AppModel.swift +346 -0
  24. package/apps/ios/EnigmaIOS/Enigma/Assets.xcassets/AccentColor.colorset/Contents.json +12 -0
  25. package/apps/ios/EnigmaIOS/Enigma/Assets.xcassets/AppIcon.appiconset/Contents.json +11 -0
  26. package/apps/ios/EnigmaIOS/Enigma/Assets.xcassets/AppIcon.appiconset/EnigmaAppIcon.png +0 -0
  27. package/apps/ios/EnigmaIOS/Enigma/Assets.xcassets/Contents.json +3 -0
  28. package/apps/ios/EnigmaIOS/Enigma/Assets.xcassets/LaunchBackground.colorset/Contents.json +12 -0
  29. package/apps/ios/EnigmaIOS/Enigma/ChatView.swift +181 -0
  30. package/apps/ios/EnigmaIOS/Enigma/CouncilView.swift +78 -0
  31. package/apps/ios/EnigmaIOS/Enigma/CreateView.swift +152 -0
  32. package/apps/ios/EnigmaIOS/Enigma/EnigmaApp.swift +52 -0
  33. package/apps/ios/EnigmaIOS/Enigma/Info.plist +52 -0
  34. package/apps/ios/EnigmaIOS/Enigma/NaturalLanguagePrivacyTagger.swift +26 -0
  35. package/apps/ios/EnigmaIOS/Enigma/OAuthClient.swift +321 -0
  36. package/apps/ios/EnigmaIOS/Enigma/OnboardingView.swift +105 -0
  37. package/apps/ios/EnigmaIOS/Enigma/PrivateVaultView.swift +275 -0
  38. package/apps/ios/EnigmaIOS/Enigma/SecureStore.swift +76 -0
  39. package/apps/ios/EnigmaIOS/Enigma/SettingsView.swift +60 -0
  40. package/apps/ios/EnigmaIOS/Enigma/Theme.swift +80 -0
  41. package/apps/ios/EnigmaIOS/EnigmaIOS.xcodeproj/project.pbxproj +211 -0
  42. package/apps/ios/EnigmaIOS/EnigmaIOS.xcodeproj/xcshareddata/xcschemes/Enigma.xcscheme +23 -0
  43. package/apps/native-host/README.md +19 -8
  44. package/apps/native-host/bin/enigma-native-host.mjs +229 -13
  45. package/apps/relay/bin/enigma-relay.mjs +103 -5
  46. package/apps/relay/src/federation-runtime.mjs +618 -0
  47. package/apps/relay/src/server.mjs +310 -9
  48. package/apps/verifier/bin/enigma-verify.mjs +327 -11
  49. package/cortex-v3/circuits/build/intent_vk_bytes.json +35 -0
  50. package/cortex-v3/circuits/build/sale_vk_bytes.json +35 -0
  51. package/cortex-v3/circuits/build/vk_bytes.json +32 -0
  52. package/cortex-v3/proving-assets.json +64 -0
  53. package/cortex-v3/zk/BUILD-CONTRACT.md +87 -0
  54. package/cortex-v3/zk/action-transition-vk.json +119 -0
  55. package/cortex-v3/zk/alias-adversarial.test.mjs +220 -0
  56. package/cortex-v3/zk/groth16-verify-child.mjs +17 -0
  57. package/cortex-v3/zk/intent-witness.mjs +365 -0
  58. package/cortex-v3/zk/intent-witness.test.mjs +485 -0
  59. package/cortex-v3/zk/proving-assets.mjs +203 -0
  60. package/cortex-v3/zk/sale-witness.mjs +783 -0
  61. package/cortex-v3/zk/sale-witness.test.mjs +784 -0
  62. package/cortex-v3/zk/sealed-sale-release-vk.json +119 -0
  63. package/cortex-v3/zk/settlement-evidence.mjs +722 -0
  64. package/cortex-v3/zk/setup-intent.mjs +688 -0
  65. package/cortex-v3/zk/setup-sale.mjs +666 -0
  66. package/cortex-v3/zk/setup.mjs +594 -0
  67. package/cortex-v3/zk/witness.mjs +184 -0
  68. package/cortex-v3/zk/zk-codec.mjs +232 -0
  69. package/cortex-v3/zk/zk-codec.test.mjs +293 -0
  70. package/cortex-v3/zk/zk-settle.mjs +370 -0
  71. package/cortex-v3/zk/zk-tree.mjs +256 -0
  72. package/cortex-v3/zk/zk-tree.test.mjs +419 -0
  73. package/deploy/docker-compose.local-production-simulation.yml +36 -0
  74. package/docs/browser-extension-install.md +8 -6
  75. package/docs/client-connectors.md +15 -11
  76. package/docs/developer-ecosystem.md +15 -13
  77. package/docs/enigma-memory-ready-conformance.md +11 -9
  78. package/docs/install-anywhere.md +61 -28
  79. package/docs/installers-and-desktop.md +8 -7
  80. package/docs/novelty-invention-candidates.md +161 -161
  81. package/docs/proof-network-claim-boundaries.md +320 -318
  82. package/examples/01-quickstart-agent/index.mjs +49 -0
  83. package/examples/01_agent_memory_quickstart.mjs +57 -0
  84. package/examples/02-multi-agent-swarm/index.mjs +57 -0
  85. package/examples/02_cross_model_passport.mjs +64 -0
  86. package/examples/03-langchain-memory/index.mjs +41 -0
  87. package/examples/03_poseidon_commitment_verification.mjs +71 -0
  88. package/examples/04-python-trading-agent/trader.py +49 -0
  89. package/examples/README.md +27 -0
  90. package/examples/ci/github-actions.yml +7 -2
  91. package/package.json +142 -11
  92. package/packages/adapters/PACKAGE_CONTRACT.md +1 -1
  93. package/packages/connectors/src/index.js +196 -4
  94. package/packages/connectors/swarm-router.mjs +168 -0
  95. package/packages/core/src/index.js +248 -1
  96. package/packages/core/src/version.mjs +7 -0
  97. package/packages/dev-tools/package.json +19 -0
  98. package/packages/dev-tools/src/index.js +4 -0
  99. package/packages/dev-tools/src/memory-benchmark-suite.js +112 -0
  100. package/packages/dev-tools/src/swarm-simulator.js +101 -0
  101. package/packages/dev-tools/src/vault-inspector.js +114 -0
  102. package/packages/dev-tools/src/vector-benchmark.js +100 -0
  103. package/packages/developer-platform/src/access-credentials.js +341 -0
  104. package/packages/developer-platform/src/http.js +132 -0
  105. package/packages/developer-platform/src/index.js +4 -0
  106. package/packages/developer-platform/src/usage-http.js +60 -0
  107. package/packages/developer-platform/src/usage.js +295 -0
  108. package/packages/enclave-runtime/attestation.mjs +159 -0
  109. package/packages/enclave-runtime/index.mjs +47 -0
  110. package/packages/enclave-runtime/session-manager.mjs +253 -0
  111. package/packages/enclave-runtime/zeroization-proof.mjs +227 -0
  112. package/packages/enigma-reflex/package.json +14 -0
  113. package/packages/enigma-reflex/src/index.js +204 -0
  114. package/packages/enigma-reflex/training/generate-dataset.mjs +40 -0
  115. package/packages/enigma-reflex/training/requirements.txt +8 -0
  116. package/packages/enigma-reflex/training/train.py +314 -0
  117. package/packages/enigma-weave/LICENSE +22 -0
  118. package/packages/enigma-weave/UPSTREAM.json +21 -0
  119. package/packages/enigma-weave/package.json +14 -0
  120. package/packages/enigma-weave/src/index.js +286 -0
  121. package/packages/hosted-cloud/src/index.js +80 -5
  122. package/packages/importers/src/index.js +432 -0
  123. package/packages/inference-runtime/src/browser.js +401 -0
  124. package/packages/inference-runtime/src/chat.js +265 -0
  125. package/packages/inference-runtime/src/code.js +407 -0
  126. package/packages/inference-runtime/src/contracts.js +162 -0
  127. package/packages/inference-runtime/src/http.js +232 -0
  128. package/packages/inference-runtime/src/image.js +186 -0
  129. package/packages/inference-runtime/src/index.js +10 -0
  130. package/packages/inference-runtime/src/model-router.js +320 -0
  131. package/packages/inference-runtime/src/platform.js +125 -0
  132. package/packages/inference-runtime/src/privacy.js +400 -0
  133. package/packages/inference-runtime/src/video.js +253 -0
  134. package/packages/mcp-server/README.md +22 -6
  135. package/packages/mcp-server/bin/enigma-mcp.mjs +2 -1
  136. package/packages/mcp-server/src/index.js +1418 -105
  137. package/packages/mcp-server/src/oauth.js +561 -0
  138. package/packages/mcp-server/src/private-handoff.js +84 -0
  139. package/packages/mcp-server/src/remote-http.js +273 -0
  140. package/packages/mcp-server/src/remote-policy.js +72 -0
  141. package/packages/mcp-server/swarm-bridge.mjs +361 -0
  142. package/packages/mesh/index.d.ts +283 -0
  143. package/packages/mesh/package.json +23 -0
  144. package/packages/mesh/src/crypto.js +189 -0
  145. package/packages/mesh/src/federation-packets.js +353 -0
  146. package/packages/mesh/src/gossip.js +311 -0
  147. package/packages/mesh/src/index.js +6 -0
  148. package/packages/mesh/src/protocol.js +255 -0
  149. package/packages/mesh/src/router.js +279 -0
  150. package/packages/mesh/src/transport.js +306 -0
  151. package/packages/passport/src/index.js +426 -1
  152. package/packages/private-economy/src/credits-http.js +100 -0
  153. package/packages/private-economy/src/credits.js +447 -0
  154. package/packages/private-economy/src/index.js +5 -0
  155. package/packages/private-economy/src/payments-http.js +120 -0
  156. package/packages/private-economy/src/payments.js +509 -0
  157. package/packages/private-economy/src/x402.js +346 -0
  158. package/packages/proof-network/PACKAGE_CONTRACT.md +21 -0
  159. package/packages/rag/index.d.ts +182 -0
  160. package/packages/rag/models/Xenova/all-MiniLM-L6-v2/THIRD_PARTY_LICENSES.txt +207 -0
  161. package/packages/rag/models/Xenova/all-MiniLM-L6-v2/config.json +25 -0
  162. package/packages/rag/models/Xenova/all-MiniLM-L6-v2/onnx/model_quantized.onnx +0 -0
  163. package/packages/rag/models/Xenova/all-MiniLM-L6-v2/sha256-manifest.json +28 -0
  164. package/packages/rag/models/Xenova/all-MiniLM-L6-v2/tokenizer.json +30686 -0
  165. package/packages/rag/models/Xenova/all-MiniLM-L6-v2/tokenizer_config.json +15 -0
  166. package/packages/rag/package.json +27 -0
  167. package/packages/rag/src/blinded-search.js +109 -0
  168. package/packages/rag/src/bm25.js +169 -0
  169. package/packages/rag/src/embeddings.js +459 -0
  170. package/packages/rag/src/hybrid.js +76 -0
  171. package/packages/rag/src/index.js +38 -0
  172. package/packages/rag/src/reranker.js +61 -0
  173. package/packages/rag/src/research.js +107 -0
  174. package/packages/rag/src/vector-store.js +430 -0
  175. package/packages/rag/src/verify-model-artifacts.mjs +4 -0
  176. package/packages/sdk/index.d.ts +760 -0
  177. package/packages/sdk/package.json +33 -0
  178. package/packages/sdk/python/README.md +24 -0
  179. package/packages/sdk/python/enigma_sdk.py +250 -0
  180. package/packages/sdk/python/pyproject.toml +34 -0
  181. package/packages/sdk/python/requirements.txt +1 -0
  182. package/packages/sdk/python/setup.py +20 -0
  183. package/packages/sdk/src/federation/capability-grant.js +389 -0
  184. package/packages/sdk/src/federation/federation-router.js +360 -0
  185. package/packages/sdk/src/federation/ghostmesh-bridge.js +497 -0
  186. package/packages/sdk/src/federation/index.js +3 -0
  187. package/packages/sdk/src/index.js +1796 -0
  188. package/packages/sdk/src/intelligence/contradiction.js +337 -0
  189. package/packages/sdk/src/intelligence/decision-engine.js +155 -0
  190. package/packages/sdk/src/intelligence/index.js +4 -0
  191. package/packages/sdk/src/intelligence/ontology.js +122 -0
  192. package/packages/sdk/src/intelligence/temporal.js +123 -0
  193. package/packages/sdk/src/market-client.js +142 -0
  194. package/packages/sdk/src/mesh-client.js +110 -0
  195. package/packages/sdk/src/middleware/index.js +3 -0
  196. package/packages/sdk/src/middleware/langchain.js +159 -0
  197. package/packages/sdk/src/middleware/llamaindex.js +101 -0
  198. package/packages/sdk/src/middleware/vercel-ai.js +112 -0
  199. package/packages/sdk/src/rag-client.js +85 -0
  200. package/packages/sdk/src/swarm-orchestrator.js +260 -0
  201. package/packages/settlement/PACKAGE_CONTRACT.md +1 -1
  202. package/packages/snapcompact/THIRD_PARTY_LICENSES.txt +40 -0
  203. package/packages/snapcompact/assets/8x13-latin1.bdf +3837 -0
  204. package/packages/snapcompact/index.d.ts +284 -0
  205. package/packages/snapcompact/package.json +25 -0
  206. package/packages/snapcompact/src/index.js +716 -0
  207. package/packages/storage/PACKAGE_CONTRACT.md +1 -1
  208. package/packages/terminal-console/animations.mjs +240 -0
  209. package/packages/terminal-console/auto-anchor.mjs +220 -0
  210. package/packages/terminal-console/banner.mjs +91 -0
  211. package/packages/terminal-console/commands.mjs +459 -0
  212. package/packages/terminal-console/delegation.mjs +152 -0
  213. package/packages/terminal-console/index.mjs +5 -0
  214. package/packages/terminal-console/outbox.mjs +143 -0
  215. package/packages/terminal-console/phantom-bridge.mjs +637 -0
  216. package/packages/terminal-console/repl.mjs +136 -0
  217. package/packages/terminal-console/signer-store.mjs +130 -0
  218. package/packages/terminal-console/solana-rpc.mjs +214 -0
  219. package/packages/terminal-console/solana-transport.mjs +189 -0
  220. package/packages/terminal-tui/dashboard.mjs +214 -0
  221. package/packages/terminal-tui/index.mjs +28 -0
  222. package/packages/terminal-tui/merkle-tree-renderer.mjs +268 -0
  223. package/packages/terminal-tui/telemetry-hud.mjs +137 -0
  224. package/packages/vault/index.d.ts +449 -0
  225. package/packages/vault/package.json +27 -0
  226. package/packages/vault/src/e2ee.mjs +393 -0
  227. package/packages/vault/src/enclave.js +481 -0
  228. package/packages/vault/src/erasure.js +207 -0
  229. package/packages/vault/src/index.js +1018 -155
  230. package/packages/vault/src/persistence.js +307 -0
  231. package/packages/vault/src/poseidon.js +354 -0
  232. package/packages/vault/src/receipt.js +459 -0
  233. package/scripts/benchmark-optical-context.mjs +166 -0
  234. package/scripts/bootstrap-enigma.mjs +502 -0
  235. package/scripts/build-edge-backend-workers.mjs +20 -5
  236. package/scripts/build-goal-completion-audit.mjs +72 -25
  237. package/scripts/build-hosted-api-key-lifecycle.mjs +26 -8
  238. package/scripts/build-hosted-customer-lifecycle.mjs +20 -3
  239. package/scripts/build-hosted-probe-worker.mjs +19 -4
  240. package/scripts/build-installer-assets.mjs +41 -21
  241. package/scripts/build-operator-evidence-starter.mjs +59 -1
  242. package/scripts/build-production-backend-env-kit.mjs +2 -0
  243. package/scripts/build-production-unblocker.mjs +3 -0
  244. package/scripts/check.mjs +17 -3
  245. package/scripts/collect-hosted-backend-live-evidence.mjs +49 -12
  246. package/scripts/install-enigma-local.mjs +18 -5
  247. package/scripts/release-audit.mjs +65 -109
  248. package/scripts/release-provenance.mjs +6 -0
  249. package/scripts/run-backend-readiness-smoke.mjs +112 -10
  250. package/scripts/scan-secrets.mjs +1 -0
  251. package/scripts/simulate-production-env.mjs +7 -2
  252. package/scripts/validate-hosted-backend-live.mjs +112 -1
  253. package/specs/antibody-pack-v1.schema.json +95 -0
  254. package/specs/antigen-envelope-v1.schema.json +81 -0
  255. package/specs/boundary-manifest-v1.schema.json +35 -35
  256. package/specs/capsule-v1.schema.json +55 -55
  257. package/specs/claim-boundary-manifest-v1.schema.json +22 -22
  258. package/specs/claim-ledger-v1.schema.json +291 -0
  259. package/specs/context-passport-v1.schema.json +59 -0
  260. package/specs/deletion-tombstone-v1.schema.json +26 -26
  261. package/specs/evidence-packet-v1.schema.json +177 -0
  262. package/specs/hosted-backend-live-evidence-v1.schema.json +72 -3
  263. package/specs/immune-scan-report-v1.schema.json +112 -0
  264. package/specs/lifecycle-receipt-log-v1.schema.json +67 -0
  265. package/specs/memory-atom-v1.schema.json +59 -0
  266. package/specs/memory-event-v1.schema.json +42 -42
  267. package/specs/passport-v1.schema.json +50 -50
  268. package/specs/proof-of-non-use-v1.schema.json +65 -0
  269. package/specs/quarantine-record-v1.schema.json +126 -0
  270. package/specs/receipt-v1.schema.json +61 -61
  271. package/specs/state-checkpoint-v1.schema.json +37 -37
  272. package/specs/trust-bundle-v1.schema.json +56 -56
  273. package/specs/trust-card-v1.schema.json +119 -0
  274. package/docs/proof-network-launch-plan.md +0 -421
  275. package/packages/metering/PACKAGE_CONTRACT.md +0 -20
  276. package/scripts/build-ai-orchestration-plan.mjs +0 -248
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Enigma
2
2
 
3
+ > **Official $ENIGMA Token (Solana Mainnet):**
4
+ > Contract Address (CA): `EknDj8VZUHL6FhV9pSk3m6xP2U2sDzwjRDVstKeQpump`
5
+ > [Solscan Explorer](https://solscan.io/token/EknDj8VZUHL6FhV9pSk3m6xP2U2sDzwjRDVstKeQpump) • [Pump.fun](https://pump.fun/coin/EknDj8VZUHL6FhV9pSk3m6xP2U2sDzwjRDVstKeQpump) • [Official Website](https://enigmamemory.com) • [Official X (@Engimamemory)](https://x.com/Engimamemory)
6
+
3
7
  Enigma Memory is a local-first AI Memory Passport. It gives you one canonical local memory vault, receipt-backed proof for Enigma-controlled events, and MCP connections into assistants such as Claude Desktop, Cursor, Kimi Code, and generic MCP clients.
4
8
 
5
9
  Start with the Memory Drive loop below — one install, one connect, then health and status verification. You do not need to understand relay, gateway, mesh, browser, desktop, hosted infrastructure, or the proof network before trying Enigma locally.
@@ -13,18 +17,20 @@ Enigma does not claim that a closed provider deleted internal data, that model w
13
17
  Prerequisites:
14
18
 
15
19
  - Node.js `>=24`
16
- - No database, package registry account, provider credential, cloud credential, hosted Enigma account, or external account for the local setup path
20
+ - A local passphrase supplied through `ENIGMA_PASSPHRASE` or a user-readable-only passphrase file; no database, package registry account, provider credential, cloud credential, hosted Enigma account, or external account is needed
17
21
  - Git only when you choose the advanced source-checkout path
18
22
 
19
23
  Use Enigma as your private Memory Drive for AI: install once, connect the AI clients you already have, then inspect drive health and passport status before remembering, retrieving, packaging, and verifying context.
20
24
 
21
25
  ```sh
22
26
  npm install -g enigma-memory
23
- enigma setup --bundle "$HOME/.enigma/bundle.json" --client auto --connect-installed --overwrite
27
+ PASSPHRASE_FILE="$HOME/.enigma/passphrase"
28
+ test -s "$PASSPHRASE_FILE" || { printf '%s\n' 'Create $HOME/.enigma/passphrase with an approved secret manager or secure editor, then restrict it to the current user.' >&2; exit 1; }
29
+ enigma setup --bundle "$HOME/.enigma/bundle.json" --passphrase-file "$PASSPHRASE_FILE" --client auto --connect-installed --overwrite
24
30
  echo "Keep all Q3 planning notes in the project-context tag." > memory.txt
25
- enigma remember --bundle "$HOME/.enigma/bundle.json" --text-file memory.txt
26
- enigma search --bundle "$HOME/.enigma/bundle.json" --query "Q3 planning"
27
- enigma context --bundle "$HOME/.enigma/bundle.json" --query "Q3 planning" --out "$HOME/.enigma/context-pack.json"
31
+ enigma remember --bundle "$HOME/.enigma/bundle.json" --passphrase-file "$PASSPHRASE_FILE" --text-file memory.txt
32
+ enigma search --bundle "$HOME/.enigma/bundle.json" --passphrase-file "$PASSPHRASE_FILE" --query "Q3 planning"
33
+ enigma context --bundle "$HOME/.enigma/bundle.json" --passphrase-file "$PASSPHRASE_FILE" --query "Q3 planning" --out "$HOME/.enigma/context-pack.json"
28
34
  enigma verify --export "$HOME/.enigma/export.json"
29
35
  ```
30
36
 
@@ -32,16 +38,45 @@ Windows CMD:
32
38
 
33
39
  ```cmd
34
40
  npm install -g enigma-memory
35
- enigma setup --bundle "%USERPROFILE%\.enigma\bundle.json" --client auto --connect-installed --overwrite
41
+ set "ENIGMA_PASSPHRASE_FILE=%USERPROFILE%\.enigma\passphrase"
42
+ if not exist "%ENIGMA_PASSPHRASE_FILE%" (echo Create the passphrase file with an approved secret manager or secure editor and restrict it to your user. & exit /b 1)
43
+ enigma setup --bundle "%USERPROFILE%\.enigma\bundle.json" --passphrase-file "%ENIGMA_PASSPHRASE_FILE%" --client auto --connect-installed --overwrite
36
44
  echo Keep all Q3 planning notes in the project-context tag.> memory.txt
37
- enigma remember --bundle "%USERPROFILE%\.enigma\bundle.json" --text-file memory.txt
38
- enigma search --bundle "%USERPROFILE%\.enigma\bundle.json" --query "Q3 planning"
39
- enigma context --bundle "%USERPROFILE%\.enigma\bundle.json" --query "Q3 planning" --out "%USERPROFILE%\.enigma\context-pack.json"
45
+ enigma remember --bundle "%USERPROFILE%\.enigma\bundle.json" --passphrase-file "%ENIGMA_PASSPHRASE_FILE%" --text-file memory.txt
46
+ enigma search --bundle "%USERPROFILE%\.enigma\bundle.json" --passphrase-file "%ENIGMA_PASSPHRASE_FILE%" --query "Q3 planning"
47
+ enigma context --bundle "%USERPROFILE%\.enigma\bundle.json" --passphrase-file "%ENIGMA_PASSPHRASE_FILE%" --query "Q3 planning" --out "%USERPROFILE%\.enigma\context-pack.json"
40
48
  enigma verify --export "%USERPROFILE%\.enigma\export.json"
41
49
  ```
42
50
 
43
- `enigma setup` is the credential-free first run: it creates the local `.enigma` workspace, bundle, proof artifacts, and a demo memory, then connects every installed/config-present client it detects (Claude Desktop, Cursor, Kimi Code, VS Code/Cline, Roo, OpenCode, generic MCP). It skips clients that are not installed and never creates configs from scratch; preview with `--dry-run` first if you want to see which clients will be written. If no clients are installed, setup still succeeds and the local CLI path works; use the copy-paste MCP snippets below to connect a client later, or run `enigma connect generic-mcp --dry-run` to preview a standalone snippet. The same commands run on Windows PowerShell via the `enigma.cmd` shim the npm global install adds. Neither command prints raw memory plaintext.
51
+ `enigma setup` is the encrypted first run: it requires `ENIGMA_PASSPHRASE` or `--passphrase-file`, creates the local `.enigma` workspace, encrypted bundle, proof artifacts, and a demo memory, then connects every installed/config-present client it detects (Claude Desktop, Cursor, Kimi Code, VS Code/Cline, Roo, OpenCode, generic MCP). `enigma start` aliases the quickstart flow. Setup skips clients that are not installed and never creates configs from scratch; preview with `--dry-run` first if you want to see which clients will be written.
52
+
53
+ ### Keyring Security Modes & At-Rest Confidentiality
54
+
55
+ - **Encrypted default (`local_secret_encrypted`)**: Normal `enigma init`, `enigma setup`, and `enigma quickstart` require `ENIGMA_PASSPHRASE` or `--passphrase-file <path>`. Prefer a user-readable-only file created through an approved secret manager or secure editor; never put the passphrase itself in command arguments.
56
+ - **Insecure evaluation mode (`local_secret`)**: `--insecure-dev` is an explicit, **INSECURE, EVALUATION-ONLY** escape hatch for disposable local data. It stores an unencrypted developer keyring (`unencrypted: true`), provides no at-rest confidentiality, and must not be used for normal or persistent data.
57
+
58
+ Encrypted + Solana-connected local flow:
59
+
60
+ ```sh
61
+ npm install -g enigma-memory
62
+ PASSPHRASE_FILE="$HOME/.enigma/passphrase"
63
+ test -s "$PASSPHRASE_FILE" || { printf '%s\n' 'Create $HOME/.enigma/passphrase with an approved secret manager or secure editor, then restrict it to the current user.' >&2; exit 1; }
64
+ enigma quickstart --bundle "$HOME/.enigma/bundle.json" --passphrase-file "$PASSPHRASE_FILE" --overwrite
65
+ enigma remember --bundle "$HOME/.enigma/bundle.json" --passphrase-file "$PASSPHRASE_FILE" --text-file memory.txt
66
+ enigma-terminal --exec "solana status --cluster devnet"
67
+ enigma chain anchor-bundle --bundle "$HOME/.enigma/bundle.json" --cluster devnet --out "$HOME/.enigma/anchor-batch.json"
68
+ enigma chain submit-solana --file "$HOME/.enigma/anchor-batch.json" --cluster devnet
69
+ # Actual on-chain write, when you provide a funded Solana CLI keypair:
70
+ # enigma chain submit-solana --file "$HOME/.enigma/anchor-batch.json" --cluster devnet --execute --keypair ~/.config/solana/id.json
71
+ ```
44
72
 
73
+ `chain anchor-bundle` anchors only public commitment roots (`active_set_root`, `receipt_log_root`) and public refs. It never places raw memory, plaintext prompts, vault keys, passphrases, private keys, or encrypted bundle bodies on-chain. `chain submit-solana` defaults to dry-run; `--execute` writes a compact SPL Memo proof reference to Solana using your explicitly supplied funded keypair.
74
+
75
+ The cypherpunk research basis is recorded in [`docs/research/sovereign-cypherpunk-memory.md`](docs/research/sovereign-cypherpunk-memory.md): Shamir 1979 threshold sharing, Merkle 1979 accumulators, Rubberhose/TrueCrypt plausible-deniability storage patterns, OTR/Signal ratchets, and Unix/Windows memory-locking constraints. The document is explicitly exploratory; production Enigma only ships the reviewed local vault primitives and public-safe Solana commitment anchoring described above.
76
+
77
+ Run setup or quickstart before treating `enigma doctor` as a fully green install check. Doctor checks both the local package/runtime environment and existing connector configs; on a fresh install it can be red when an MCP client config already names an Enigma bundle that has not been initialized yet, or when clients still point somewhere else. That is expected first-run state, not evidence that the npm package failed to install. After creating `./.enigma/passphrase` through an approved secret manager or secure editor, run `enigma quickstart --bundle ./.enigma/bundle.json --passphrase-file ./.enigma/passphrase --overwrite` or `enigma setup --bundle ./.enigma/bundle.json --passphrase-file ./.enigma/passphrase --overwrite`, then `enigma doctor --bundle ./.enigma/bundle.json`. If no clients are installed, setup still succeeds and the local CLI path works; use the copy-paste MCP snippets below to connect a client later.
78
+
79
+ For the no-global-install path, create the same protected passphrase file, then run `npx --yes --package enigma-memory enigma quickstart --bundle ./.enigma/bundle.json --passphrase-file ./.enigma/passphrase --overwrite` before `npx --yes --package enigma-memory enigma doctor --bundle ./.enigma/bundle.json`; running npx doctor first can surface the same expected red generic-MCP missing-bundle state.
45
80
  ## Enigma Proof Network
46
81
 
47
82
  Enigma Proof Network is the public proof layer for AI memory: local tools can package privacy-preserving roots, refs, counts, signatures, scoped capability grants, revocations, and benchmark attestations without exposing raw memory, prompts, transcripts, completions, embeddings, tenant names, private keys, provider responses, or provider credentials.
@@ -50,6 +85,16 @@ The `enigma chain anchor|grant|revoke|attest|verify` commands are local planning
50
85
 
51
86
  Start with the category narrative in [`docs/market-category-narrative.md`](docs/market-category-narrative.md), then read the technical overview in [`docs/proof-network.md`](docs/proof-network.md), use its [Solana role](docs/proof-network.md#solana-role) section for the Solana-ready anchoring boundary, and read [`docs/proof-network-faq.md`](docs/proof-network-faq.md) for claim boundaries.
52
87
 
88
+ ## ZK state layer (localnet-verified)
89
+
90
+ `cortex-v3/` contains a working zero-knowledge state layer for AI agent memory on Solana: every shared-state transition is a **client-generated Groth16 proof** (circom 2.2.3, BN254, ~2s proving) verified **on-chain** by the `enigma_nullifier` Anchor program via `alt_bn128` syscalls. Notes are E2EE-sealed (per-note XChaCha20-Poly1305 + HPKE/X25519 recipient envelopes) and bound into the proof as Poseidon commitments; revocations insert deterministic nullifiers into an Aztec-style indexed Merkle tree with strict non-membership proofs. Only `{proof, 6 public inputs}` ever leave the client.
91
+
92
+ - Program: `E18KZR1Jq8fG3FFACpoHsE21ME3t1ftKPEwXL7cFWkoZ` (localnet; **not** on mainnet)
93
+ - Circuit: 90,897 constraints, one fixed-shape VK, alias-safe (`Num2Bits_strict`, adversarially tested)
94
+ - Reproduce end-to-end (E2EE → prove → on-chain verify → replay rejection): [`docs/zk-state-layer.md`](docs/zk-state-layer.md)
95
+
96
+ Claim boundaries: development trusted setup (production needs a multi-party ceremony); nullifiers prove protocol-level non-use, never physical deletion; privacy requires a populated shared tree — the mechanism is verified, operative anonymity requires real participants.
97
+
53
98
 
54
99
  ## Advanced/source-only path
55
100
 
@@ -58,8 +103,9 @@ Use a source checkout only when you need source-only docs, Docker assets, browse
58
103
  ```sh
59
104
  git clone https://github.com/Enigma-Memory/enigma-memory.git
60
105
  cd enigma-memory
61
- npm run install:local -- --execute --init-vault --bundle ./.enigma/bundle.json
62
- enigma doctor
106
+ test -s ./.enigma/passphrase || { printf '%s\n' 'Create ./.enigma/passphrase securely before continuing.' >&2; exit 1; }
107
+ npm run install:local -- --execute --init-vault --bundle ./.enigma/bundle.json --passphrase-file ./.enigma/passphrase
108
+ enigma doctor --bundle ./.enigma/bundle.json
63
109
  enigma-relay demo
64
110
  enigma-gateway demo
65
111
  ```
@@ -74,10 +120,12 @@ POSIX shell:
74
120
  mkdir -p .enigma
75
121
  ENIGMA_DEMO_MEMORY_FILE=/absolute/path/to/tenant-approved-smoke-memory.txt
76
122
  test -f "$ENIGMA_DEMO_MEMORY_FILE"
77
- enigma init --bundle ./.enigma/bundle.json --subject local-user --display-name "Local user"
78
- enigma remember --bundle ./.enigma/bundle.json --text-file "$ENIGMA_DEMO_MEMORY_FILE" --purpose user_memory --tags local
79
- enigma context --bundle ./.enigma/bundle.json --query "local context" --purpose local_answer --out ./.enigma/context-pack.json
80
- enigma export --bundle ./.enigma/bundle.json --out ./.enigma/export.json
123
+ ENIGMA_PASSPHRASE_FILE=./.enigma/passphrase
124
+ test -s "$ENIGMA_PASSPHRASE_FILE" || { printf '%s\n' 'Create ./.enigma/passphrase securely before continuing.' >&2; exit 1; }
125
+ enigma init --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE" --subject local-user --display-name "Local user"
126
+ enigma remember --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE" --text-file "$ENIGMA_DEMO_MEMORY_FILE" --purpose user_memory --tags local
127
+ enigma context --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE" --query "local context" --purpose local_answer --out ./.enigma/context-pack.json
128
+ enigma export --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE" --out ./.enigma/export.json
81
129
  enigma verify --export ./.enigma/export.json
82
130
  ```
83
131
 
@@ -87,10 +135,12 @@ Windows PowerShell:
87
135
  New-Item -ItemType Directory -Force .enigma | Out-Null
88
136
  $env:ENIGMA_DEMO_MEMORY_FILE = "C:\path\to\tenant-approved-smoke-memory.txt"
89
137
  if (-not (Test-Path -LiteralPath $env:ENIGMA_DEMO_MEMORY_FILE)) { throw "Missing ENIGMA_DEMO_MEMORY_FILE" }
90
- enigma init --bundle .\.enigma\bundle.json --subject local-user --display-name "Local user"
91
- enigma remember --bundle .\.enigma\bundle.json --text-file $env:ENIGMA_DEMO_MEMORY_FILE --purpose user_memory --tags local
92
- enigma context --bundle .\.enigma\bundle.json --query "local context" --purpose local_answer --out .\.enigma\context-pack.json
93
- enigma export --bundle .\.enigma\bundle.json --out .\.enigma\export.json
138
+ $env:ENIGMA_PASSPHRASE_FILE = ".\.enigma\passphrase"
139
+ if (-not (Test-Path -LiteralPath $env:ENIGMA_PASSPHRASE_FILE -PathType Leaf)) { throw "Create the passphrase file securely before continuing." }
140
+ enigma init --bundle .\.enigma\bundle.json --passphrase-file $env:ENIGMA_PASSPHRASE_FILE --subject local-user --display-name "Local user"
141
+ enigma remember --bundle .\.enigma\bundle.json --passphrase-file $env:ENIGMA_PASSPHRASE_FILE --text-file $env:ENIGMA_DEMO_MEMORY_FILE --purpose user_memory --tags local
142
+ enigma context --bundle .\.enigma\bundle.json --passphrase-file $env:ENIGMA_PASSPHRASE_FILE --query "local context" --purpose local_answer --out .\.enigma\context-pack.json
143
+ enigma export --bundle .\.enigma\bundle.json --passphrase-file $env:ENIGMA_PASSPHRASE_FILE --out .\.enigma\export.json
94
144
  enigma verify --export .\.enigma\export.json
95
145
  ```
96
146
 
@@ -156,7 +206,7 @@ Supported connector profiles are:
156
206
  - `opencode`
157
207
  - `generic-mcp`
158
208
 
159
- The one-command path above (`enigma setup --client auto --connect-installed --overwrite`) already connects every installed/config-present client. To connect or preview a single client instead:
209
+ The one-command path above (`enigma setup --passphrase-file "$HOME/.enigma/passphrase" --client auto --connect-installed --overwrite`) already connects every installed/config-present client. To connect or preview a single client instead:
160
210
 
161
211
  ```sh
162
212
  enigma connect claude-desktop --dry-run
@@ -359,9 +409,11 @@ Local smoke path:
359
409
  ```sh
360
410
  ENIGMA_DEMO_MEMORY_FILE=/absolute/path/to/tenant-approved-smoke-memory.txt
361
411
  test -f "$ENIGMA_DEMO_MEMORY_FILE"
362
- enigma init --bundle ./.enigma/bundle.json
363
- enigma remember --bundle ./.enigma/bundle.json --text-file "$ENIGMA_DEMO_MEMORY_FILE" --purpose local_test
364
- enigma export --bundle ./.enigma/bundle.json --out ./.enigma/export.json
412
+ ENIGMA_PASSPHRASE_FILE=./.enigma/passphrase
413
+ test -s "$ENIGMA_PASSPHRASE_FILE" || { printf '%s\n' 'Create ./.enigma/passphrase securely before continuing.' >&2; exit 1; }
414
+ enigma init --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE"
415
+ enigma remember --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE" --text-file "$ENIGMA_DEMO_MEMORY_FILE" --purpose local_test
416
+ enigma export --bundle ./.enigma/bundle.json --passphrase-file "$ENIGMA_PASSPHRASE_FILE" --out ./.enigma/export.json
365
417
  enigma verify --export ./.enigma/export.json
366
418
  enigma boundary run --scenario committed_crossing
367
419
  ```
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import { startDesktopServer } from '../../desktop/src/server.mjs';
5
+ import { ENIGMA_VERSION } from '../../../packages/core/src/version.mjs';
6
+ import { createEmbeddingProvider } from '../../../packages/rag/src/index.js';
7
+ import { EnigmaRagClient } from '../../../packages/sdk/src/index.js';
8
+
9
+ export function parseArgs(argv) {
10
+ const flags = {
11
+ port: 8765,
12
+ openBrowser: true,
13
+ bundlePath: undefined,
14
+ passphrase: process.env.ENIGMA_PASSPHRASE || undefined,
15
+ vaultKey: process.env.ENIGMA_VAULT_KEY || undefined,
16
+ allowHostBoundDemo: process.env.ENIGMA_ALLOW_HOSTBOUND === '1' || undefined,
17
+ embeddingModel: undefined,
18
+ };
19
+
20
+ for (let i = 0; i < argv.length; i++) {
21
+ const arg = argv[i];
22
+ if (arg === '--port' || arg === '-p') {
23
+ const value = argv[++i];
24
+ const port = Number(value);
25
+ if (value === undefined || !Number.isInteger(port) || port < 0 || port > 65535) {
26
+ throw new Error('--port must be an integer between 0 and 65535');
27
+ }
28
+ flags.port = port;
29
+ } else if (arg === '--no-open' || arg === '--headless') {
30
+ flags.openBrowser = false;
31
+ } else if (arg === '--bundle' || arg === '-b') {
32
+ flags.bundlePath = argv[++i];
33
+ } else if (arg === '--passphrase-file') {
34
+ const p = argv[++i];
35
+ if (!p) throw new Error('Missing file path for --passphrase-file');
36
+ flags.passphrase = fs.readFileSync(path.resolve(p), 'utf8').trim();
37
+ } else if (arg === '--vault-key-file') {
38
+ const p = argv[++i];
39
+ if (!p) throw new Error('Missing file path for --vault-key-file');
40
+ flags.vaultKey = fs.readFileSync(path.resolve(p), 'utf8').trim();
41
+ } else if (arg === '--allow-host-bound-demo') {
42
+ flags.allowHostBoundDemo = true;
43
+ } else if (arg === '--embedding-model') {
44
+ const modelType = argv[++i];
45
+ if (modelType !== 'neural' && modelType !== 'lexical') {
46
+ throw new Error('--embedding-model must be "neural" or "lexical"');
47
+ }
48
+ flags.embeddingModel = modelType;
49
+ } else if (arg === '--passphrase' || arg === '--vault-key') {
50
+ throw new Error(
51
+ `Passing secrets directly in CLI arguments (${arg}) is prohibited by security policy (process table leakage). `
52
+ + 'Use --passphrase-file <path>, --vault-key-file <path>, or set ENIGMA_PASSPHRASE / ENIGMA_VAULT_KEY environment variables.'
53
+ );
54
+ } else if (arg === '--version' || arg === '-v') {
55
+ flags.version = true;
56
+ } else if (arg === '--help' || arg === '-h') {
57
+ flags.help = true;
58
+ }
59
+ }
60
+
61
+ return flags;
62
+ }
63
+
64
+ export async function main(argv = process.argv.slice(2), io = { stdout: process.stdout, stderr: process.stderr }) {
65
+ let flags;
66
+ try {
67
+ flags = parseArgs(argv);
68
+ } catch (err) {
69
+ io.stderr.write(`Error: ${err.message}\n`);
70
+ return 1;
71
+ }
72
+
73
+ if (flags.version) {
74
+ io.stdout.write(`enigma-desktop v${ENIGMA_VERSION}\n`);
75
+ return 0;
76
+ }
77
+
78
+ if (flags.help) {
79
+ io.stdout.write(`
80
+ Enigma Sovereign AI Memory Terminal — Desktop GUI Application
81
+
82
+ Usage: enigma-desktop [options]
83
+
84
+ Options:
85
+ --port, -p <number> Port to bind local desktop host server (default: 8765)
86
+ --no-open, --headless Start host server without automatically opening window
87
+ --bundle, -b <path> Active memory bundle path (default: .enigma/bundle.json)
88
+ --passphrase-file <path> Path to file containing master passphrase (zero-secrets-in-argv)
89
+ --vault-key-file <path> Path to file containing 32-byte hex master vault key
90
+ --allow-host-bound-demo Explicitly allow host-bound key custody for local CLI demos
91
+ --embedding-model <type> Embedding runtime: neural (default) or lexical
92
+ --version, -v Display enigma-desktop version
93
+ --help, -h Show this help reference
94
+
95
+ Environment Variables:
96
+ ENIGMA_PASSPHRASE Master passphrase for encrypted memory and vector store
97
+ ENIGMA_VAULT_KEY 32-byte hex master vault key
98
+ ENIGMA_ALLOW_HOSTBOUND Set to '1' to allow host-bound key custody in development
99
+ \n`);
100
+ return 0;
101
+ }
102
+
103
+ let server;
104
+ try {
105
+ const embeddingProvider = flags.embeddingModel
106
+ ? createEmbeddingProvider({ modelType: flags.embeddingModel })
107
+ : undefined;
108
+ const ragClient = flags.embeddingModel
109
+ ? new EnigmaRagClient({ embeddingModel: flags.embeddingModel })
110
+ : undefined;
111
+ server = await startDesktopServer({
112
+ port: flags.port,
113
+ openBrowser: flags.openBrowser,
114
+ bundlePath: flags.bundlePath,
115
+ passphrase: flags.passphrase,
116
+ vaultKey: flags.vaultKey,
117
+ allowHostBoundDemo: flags.allowHostBoundDemo,
118
+ ...(embeddingProvider ? { embeddingProvider, ownEmbeddingProvider: true } : {}),
119
+ ...(ragClient ? { sdk: { ragClient, ownRagClient: true } } : {}),
120
+ });
121
+ } catch (err) {
122
+ io.stderr.write(`Error starting enigma-desktop: ${err.message}\n`);
123
+ return 1;
124
+ }
125
+
126
+ await new Promise((resolve) => {
127
+ process.on('SIGINT', resolve);
128
+ process.on('SIGTERM', resolve);
129
+ });
130
+
131
+ await server.close();
132
+ return 0;
133
+ }
134
+
135
+ if (process.argv[1] && process.argv[1].endsWith('enigma-desktop.mjs')) {
136
+ main().catch((err) => {
137
+ process.stderr.write(`Error starting enigma-desktop: ${err.message}\n`);
138
+ process.exit(1);
139
+ });
140
+ }
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ import { runTerminalConsole, renderTerminalBanner } from '../../../packages/terminal-console/index.mjs';
3
+ import { ENIGMA_VERSION } from '../../../packages/core/src/version.mjs';
4
+
5
+ function parseArgs(argv) {
6
+ const flags = {};
7
+ let execCommand = undefined;
8
+
9
+ for (let i = 0; i < argv.length; i++) {
10
+ const arg = argv[i];
11
+ if (arg === '--bundle' || arg === '-b') {
12
+ flags.bundle = argv[++i];
13
+ } else if (arg === '--exec' || arg === '-e') {
14
+ execCommand = argv[++i];
15
+ } else if (arg === '--no-color') {
16
+ flags.noColor = true;
17
+ } else if (arg === '--help' || arg === '-h') {
18
+ flags.help = true;
19
+ } else if (arg === '--version' || arg === '-v') {
20
+ flags.version = true;
21
+ }
22
+ }
23
+
24
+ return { flags, execCommand };
25
+ }
26
+
27
+ export async function main(argv = process.argv.slice(2), io = { stdin: process.stdin, stdout: process.stdout, stderr: process.stderr }) {
28
+ const { flags, execCommand } = parseArgs(argv);
29
+
30
+ if (flags.version) {
31
+ io.stdout.write(`enigma-terminal v${ENIGMA_VERSION}\n`);
32
+ return 0;
33
+ }
34
+
35
+ if (flags.help) {
36
+ io.stdout.write(renderTerminalBanner({ color: !flags.noColor }) + '\n');
37
+ io.stdout.write(`
38
+ Usage: enigma-terminal [options]
39
+
40
+ Options:
41
+ --bundle, -b <path> Path to memory bundle (default: .enigma/bundle.json)
42
+ --exec, -e <cmd> Execute a command and exit immediately
43
+ --no-color Disable colored ANSI output
44
+ --help, -h Show this help catalog
45
+ --version, -v Show version
46
+
47
+ Interactive Commands:
48
+ quickstart Initialize a new sovereign memory vault
49
+ remember <text> Store encrypted memory atom with signed receipt
50
+ context <query> Retrieve purpose-scoped context pack
51
+ tree Render live ASCII Merkle tree with proof path
52
+ tui | dashboard Launch real-time terminal control plane HUD
53
+ enclave cycle Execute atomic ephemeral key zeroization
54
+ swarm status Inspect multi-agent swarm namespace state
55
+ export / verify Export & verify cryptographic receipts offline
56
+ token | ca Display Solana SPL token contract address
57
+ exit | quit Close session
58
+ \n`);
59
+ return 0;
60
+ }
61
+
62
+ return await runTerminalConsole({
63
+ bundlePath: flags.bundle || '.enigma/bundle.json',
64
+ color: !flags.noColor,
65
+ execCommand,
66
+ interactive: Boolean(io.stdin?.isTTY) && !execCommand,
67
+ io,
68
+ });
69
+ }
70
+
71
+ function isMainModule(metaUrl) {
72
+ if (!process.argv[1]) return false;
73
+ return metaUrl.endsWith(process.argv[1].replace(/\\/g, '/')) || process.argv[1].replace(/\\/g, '/').endsWith('enigma-terminal.mjs');
74
+ }
75
+
76
+ if (isMainModule(import.meta.url)) {
77
+ process.exitCode = await main();
78
+ }