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
@@ -1,35 +1,35 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.enigma.ai/boundary-manifest-v1.schema.json",
4
- "title": "Enigma Boundary Manifest v1",
5
- "type": "object",
6
- "required": ["schema", "manifest_id", "system_id", "created_at", "paths", "default_action"],
7
- "additionalProperties": false,
8
- "properties": {
9
- "schema": { "const": "enigma.boundary_manifest.v1" },
10
- "manifest_id": { "type": "string", "minLength": 8 },
11
- "system_id": { "type": "string", "minLength": 1 },
12
- "created_at": { "type": "string", "format": "date-time" },
13
- "default_action": { "const": "fail_unknown" },
14
- "paths": {
15
- "type": "array",
16
- "minItems": 1,
17
- "items": {
18
- "type": "object",
19
- "required": ["path_id", "surface", "classification"],
20
- "additionalProperties": false,
21
- "properties": {
22
- "path_id": { "type": "string", "minLength": 1 },
23
- "surface": {
24
- "type": "string",
25
- "enum": ["model_input", "model_output", "tool_args", "tool_result", "scratchpad", "memory_write", "memory_read", "rag_ingest", "rag_retrieve", "file_write", "log", "telemetry", "browser_dom", "mcp_resource", "network", "inter_agent", "cache", "human_approval"]
26
- },
27
- "classification": { "type": "string", "enum": ["committed", "blocked", "declared_out_of_scope", "broken"] },
28
- "adapter": { "type": "string" },
29
- "reason": { "type": "string" },
30
- "coverage_receipt_required": { "type": "boolean" }
31
- }
32
- }
33
- }
34
- }
35
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.enigma.ai/boundary-manifest-v1.schema.json",
4
+ "title": "Enigma Boundary Manifest v1",
5
+ "type": "object",
6
+ "required": ["schema", "manifest_id", "system_id", "created_at", "paths", "default_action"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "schema": { "const": "enigma.boundary_manifest.v1" },
10
+ "manifest_id": { "type": "string", "minLength": 8 },
11
+ "system_id": { "type": "string", "minLength": 1 },
12
+ "created_at": { "type": "string", "format": "date-time" },
13
+ "default_action": { "const": "fail_unknown" },
14
+ "paths": {
15
+ "type": "array",
16
+ "minItems": 1,
17
+ "items": {
18
+ "type": "object",
19
+ "required": ["path_id", "surface", "classification"],
20
+ "additionalProperties": false,
21
+ "properties": {
22
+ "path_id": { "type": "string", "minLength": 1 },
23
+ "surface": {
24
+ "type": "string",
25
+ "enum": ["model_input", "model_output", "tool_args", "tool_result", "scratchpad", "memory_write", "memory_read", "rag_ingest", "rag_retrieve", "file_write", "log", "telemetry", "browser_dom", "mcp_resource", "network", "inter_agent", "cache", "human_approval"]
26
+ },
27
+ "classification": { "type": "string", "enum": ["committed", "blocked", "declared_out_of_scope", "broken"] },
28
+ "adapter": { "type": "string" },
29
+ "reason": { "type": "string" },
30
+ "coverage_receipt_required": { "type": "boolean" }
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -1,55 +1,55 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.enigma.ai/capsule-v1.schema.json",
4
- "title": "Enigma Capsule v1",
5
- "type": "object",
6
- "required": ["schema", "capsule_id", "capsule_type", "issuer", "created_at", "expires_at", "scope", "payload", "proofs"],
7
- "additionalProperties": false,
8
- "properties": {
9
- "schema": { "const": "enigma.capsule.v1" },
10
- "capsule_id": { "type": "string", "minLength": 8 },
11
- "capsule_type": { "type": "string", "enum": ["personal_passport", "project", "session", "audit", "migration"] },
12
- "issuer": { "type": "string", "minLength": 1 },
13
- "holder": { "type": "string" },
14
- "created_at": { "type": "string", "format": "date-time" },
15
- "expires_at": { "type": "string", "format": "date-time" },
16
- "scope": {
17
- "type": "object",
18
- "required": ["subjects", "operations"],
19
- "additionalProperties": false,
20
- "properties": {
21
- "subjects": { "type": "array", "items": { "type": "string" } },
22
- "memory_addrs": { "type": "array", "items": { "type": "string" } },
23
- "operations": { "type": "array", "items": { "type": "string" } },
24
- "purpose": { "type": "string" }
25
- }
26
- },
27
- "payload": {
28
- "type": "object",
29
- "required": ["encryption", "objects_ref"],
30
- "additionalProperties": false,
31
- "properties": {
32
- "encryption": { "type": "string", "enum": ["encrypted", "receipt_only", "plaintext_user_requested"] },
33
- "objects_ref": { "type": "string" }
34
- }
35
- },
36
- "proofs": {
37
- "type": "object",
38
- "required": ["receipt_log_root", "active_set_root"],
39
- "additionalProperties": false,
40
- "properties": {
41
- "receipt_log_root": {
42
- "type": "string",
43
- "pattern": "^sha256:[a-f0-9]{64}$",
44
- "description": "Canonical custody roots must be derived from receipt objects that are available for verification; receipt-hash-only claims are candidate evidence."
45
- },
46
- "active_set_root": {
47
- "type": "string",
48
- "pattern": "^sha256:[a-f0-9]{64}$",
49
- "description": "Canonical custody roots must commit only memory addresses backed by matching receipt objects, not arbitrary receipt hashes."
50
- },
51
- "receipt_bundle_ref": { "type": "string" }
52
- }
53
- }
54
- }
55
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.enigma.ai/capsule-v1.schema.json",
4
+ "title": "Enigma Capsule v1",
5
+ "type": "object",
6
+ "required": ["schema", "capsule_id", "capsule_type", "issuer", "created_at", "expires_at", "scope", "payload", "proofs"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "schema": { "const": "enigma.capsule.v1" },
10
+ "capsule_id": { "type": "string", "minLength": 8 },
11
+ "capsule_type": { "type": "string", "enum": ["personal_passport", "project", "session", "audit", "migration"] },
12
+ "issuer": { "type": "string", "minLength": 1 },
13
+ "holder": { "type": "string" },
14
+ "created_at": { "type": "string", "format": "date-time" },
15
+ "expires_at": { "type": "string", "format": "date-time" },
16
+ "scope": {
17
+ "type": "object",
18
+ "required": ["subjects", "operations"],
19
+ "additionalProperties": false,
20
+ "properties": {
21
+ "subjects": { "type": "array", "items": { "type": "string" } },
22
+ "memory_addrs": { "type": "array", "items": { "type": "string" } },
23
+ "operations": { "type": "array", "items": { "type": "string" } },
24
+ "purpose": { "type": "string" }
25
+ }
26
+ },
27
+ "payload": {
28
+ "type": "object",
29
+ "required": ["encryption", "objects_ref"],
30
+ "additionalProperties": false,
31
+ "properties": {
32
+ "encryption": { "type": "string", "enum": ["encrypted", "receipt_only", "plaintext_user_requested"] },
33
+ "objects_ref": { "type": "string" }
34
+ }
35
+ },
36
+ "proofs": {
37
+ "type": "object",
38
+ "required": ["receipt_log_root", "active_set_root"],
39
+ "additionalProperties": false,
40
+ "properties": {
41
+ "receipt_log_root": {
42
+ "type": "string",
43
+ "pattern": "^sha256:[a-f0-9]{64}$",
44
+ "description": "Canonical custody roots must be derived from receipt objects that are available for verification; receipt-hash-only claims are candidate evidence."
45
+ },
46
+ "active_set_root": {
47
+ "type": "string",
48
+ "pattern": "^sha256:[a-f0-9]{64}$",
49
+ "description": "Canonical custody roots must commit only memory addresses backed by matching receipt objects, not arbitrary receipt hashes."
50
+ },
51
+ "receipt_bundle_ref": { "type": "string" }
52
+ }
53
+ }
54
+ }
55
+ }
@@ -1,22 +1,22 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.enigma.ai/claim-boundary-manifest-v1.schema.json",
4
- "title": "Enigma Claim Boundary Manifest v1",
5
- "type": "object",
6
- "required": ["schema", "claim_id", "claim_text", "allowed_scope", "forbidden_interpretations", "required_artifact_types", "truth_boundary", "not_proven", "release_status", "owner", "review_epoch"],
7
- "additionalProperties": false,
8
- "properties": {
9
- "schema": { "const": "enigma.claim_boundary_manifest.v1" },
10
- "claim_id": { "type": "string", "minLength": 8 },
11
- "claim_text": { "type": "string", "minLength": 1 },
12
- "allowed_scope": { "type": "string", "minLength": 1 },
13
- "forbidden_interpretations": { "type": "array", "minItems": 1, "items": { "type": "string" } },
14
- "required_artifact_types": { "type": "array", "minItems": 1, "items": { "type": "string" } },
15
- "required_tests": { "type": "array", "items": { "type": "string" } },
16
- "truth_boundary": { "type": "string", "minLength": 1 },
17
- "not_proven": { "type": "array", "minItems": 1, "items": { "type": "string" } },
18
- "release_status": { "type": "string", "enum": ["draft", "internal", "public", "withdrawn"] },
19
- "owner": { "type": "string", "minLength": 1 },
20
- "review_epoch": { "type": "integer", "minimum": 0 }
21
- }
22
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.enigma.ai/claim-boundary-manifest-v1.schema.json",
4
+ "title": "Enigma Claim Boundary Manifest v1",
5
+ "type": "object",
6
+ "required": ["schema", "claim_id", "claim_text", "allowed_scope", "forbidden_interpretations", "required_artifact_types", "truth_boundary", "not_proven", "release_status", "owner", "review_epoch"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "schema": { "const": "enigma.claim_boundary_manifest.v1" },
10
+ "claim_id": { "type": "string", "minLength": 8 },
11
+ "claim_text": { "type": "string", "minLength": 1 },
12
+ "allowed_scope": { "type": "string", "minLength": 1 },
13
+ "forbidden_interpretations": { "type": "array", "minItems": 1, "items": { "type": "string" } },
14
+ "required_artifact_types": { "type": "array", "minItems": 1, "items": { "type": "string" } },
15
+ "required_tests": { "type": "array", "items": { "type": "string" } },
16
+ "truth_boundary": { "type": "string", "minLength": 1 },
17
+ "not_proven": { "type": "array", "minItems": 1, "items": { "type": "string" } },
18
+ "release_status": { "type": "string", "enum": ["draft", "internal", "public", "withdrawn"] },
19
+ "owner": { "type": "string", "minLength": 1 },
20
+ "review_epoch": { "type": "integer", "minimum": 0 }
21
+ }
22
+ }
@@ -0,0 +1,291 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.enigma.ai/claim-ledger-v1.schema.json",
4
+ "title": "Enigma Claim Ledger v1",
5
+ "type": "object",
6
+ "required": [
7
+ "schema",
8
+ "ledger_id",
9
+ "generated_at",
10
+ "release_status",
11
+ "public_safety",
12
+ "release_gate",
13
+ "evidence_refs",
14
+ "claims"
15
+ ],
16
+ "additionalProperties": false,
17
+ "properties": {
18
+ "schema": { "const": "enigma.claim_ledger.v1" },
19
+ "ledger_id": { "$ref": "#/$defs/publicRef" },
20
+ "generated_at": { "type": "string", "format": "date-time" },
21
+ "release_status": { "$ref": "#/$defs/releaseStatus" },
22
+ "release_ref": { "$ref": "#/$defs/publicRef" },
23
+ "schema_refs": {
24
+ "type": "array",
25
+ "minItems": 1,
26
+ "items": { "$ref": "#/$defs/schemaId" },
27
+ "uniqueItems": true
28
+ },
29
+ "public_safety": { "$ref": "#/$defs/publicSafety" },
30
+ "release_gate": { "$ref": "#/$defs/releaseGate" },
31
+ "evidence_refs": {
32
+ "type": "array",
33
+ "minItems": 1,
34
+ "items": { "$ref": "#/$defs/publicRef" },
35
+ "uniqueItems": true
36
+ },
37
+ "claims": {
38
+ "type": "array",
39
+ "minItems": 1,
40
+ "items": { "$ref": "#/$defs/claimEntry" }
41
+ }
42
+ },
43
+ "$defs": {
44
+ "schemaId": {
45
+ "type": "string",
46
+ "pattern": "^enigma\\.[a-z0-9_]+\\.v1$"
47
+ },
48
+ "publicRef": {
49
+ "type": "string",
50
+ "pattern": "^(sha256:[a-f0-9]{64}|root:[a-z0-9][a-z0-9._:-]*|urn:enigma:[a-z0-9][a-z0-9._:-]*|schema:enigma\\.[a-z0-9_]+\\.v1|artifact:[a-z0-9][a-z0-9._:-]*|release:[a-z0-9][a-z0-9._:-]*|review:[a-z0-9][a-z0-9._:-]*|signer:[a-z0-9][a-z0-9._:-]*|signature:[a-z0-9][a-z0-9._:-]*|policy:[a-z0-9][a-z0-9._:-]*|capability:[a-z0-9][a-z0-9._:-]*|nullifier:[a-z0-9][a-z0-9._:-]*)$"
51
+ },
52
+ "releaseStatus": {
53
+ "type": "string",
54
+ "enum": ["draft", "blocked", "internal_review", "approved", "published", "expired", "withdrawn"]
55
+ },
56
+ "claimStatus": {
57
+ "type": "string",
58
+ "enum": ["allowed", "conditional", "prohibited"]
59
+ },
60
+ "boundary": {
61
+ "type": "string",
62
+ "enum": [
63
+ "local_vault_state_transition",
64
+ "receipt_chain_root",
65
+ "active_root",
66
+ "quarantine_root",
67
+ "tombstone_root",
68
+ "context_passport_selected_root",
69
+ "context_passport_omitted_root",
70
+ "context_passport_tombstone_root",
71
+ "capability_grant",
72
+ "capability_revocation",
73
+ "offline_verifier_output",
74
+ "public_release_metadata",
75
+ "public_evidence_metadata",
76
+ "provider_deletion",
77
+ "model_forgetting",
78
+ "provider_native_memory_control",
79
+ "compliance_certification",
80
+ "benchmark_superiority",
81
+ "hosted_saas_readiness",
82
+ "byoc_readiness",
83
+ "patentability_or_legal_conclusion",
84
+ "raw_embeddings_safe_public_metadata",
85
+ "hardware_tamper_proofing"
86
+ ]
87
+ },
88
+ "evidenceRequirement": {
89
+ "type": "string",
90
+ "enum": [
91
+ "local_validator_output",
92
+ "receipt_chain_root",
93
+ "active_root",
94
+ "quarantine_root",
95
+ "tombstone_root",
96
+ "context_passport_roots",
97
+ "capability_artifact_ref",
98
+ "offline_verifier_output",
99
+ "release_metadata_ref",
100
+ "review_approval_ref",
101
+ "expiry_review_ref",
102
+ "prohibited_claim_boundary_ref",
103
+ "live_deployment_evidence_ref",
104
+ "external_provider_evidence_ref",
105
+ "legal_security_approval_ref",
106
+ "benchmark_methodology_ref"
107
+ ]
108
+ },
109
+ "publicSafety": {
110
+ "type": "object",
111
+ "required": [
112
+ "public_payload_only",
113
+ "private_payload_detected",
114
+ "raw_memory_absent",
115
+ "prompts_transcripts_absent",
116
+ "embeddings_absent",
117
+ "provider_responses_absent",
118
+ "credentials_absent",
119
+ "local_paths_absent",
120
+ "evidence_refs_only"
121
+ ],
122
+ "additionalProperties": false,
123
+ "properties": {
124
+ "public_payload_only": { "const": true },
125
+ "private_payload_detected": { "const": false },
126
+ "raw_memory_absent": { "const": true },
127
+ "prompts_transcripts_absent": { "const": true },
128
+ "embeddings_absent": { "const": true },
129
+ "provider_responses_absent": { "const": true },
130
+ "credentials_absent": { "const": true },
131
+ "local_paths_absent": { "const": true },
132
+ "evidence_refs_only": { "const": true },
133
+ "scanner_ref": { "$ref": "#/$defs/publicRef" },
134
+ "scanned_at": { "type": "string", "format": "date-time" }
135
+ }
136
+ },
137
+ "releaseGate": {
138
+ "type": "object",
139
+ "required": [
140
+ "tokenless_publishing_required",
141
+ "long_lived_publishing_credentials_used",
142
+ "long_lived_publishing_credentials_present",
143
+ "publishing_evidence_refs"
144
+ ],
145
+ "additionalProperties": false,
146
+ "properties": {
147
+ "tokenless_publishing_required": { "const": true },
148
+ "long_lived_publishing_credentials_used": { "const": false },
149
+ "long_lived_publishing_credentials_present": { "const": false },
150
+ "publishing_evidence_refs": {
151
+ "type": "array",
152
+ "minItems": 1,
153
+ "items": { "$ref": "#/$defs/publicRef" },
154
+ "uniqueItems": true
155
+ },
156
+ "blocker_refs": {
157
+ "type": "array",
158
+ "items": { "$ref": "#/$defs/publicRef" },
159
+ "uniqueItems": true
160
+ }
161
+ }
162
+ },
163
+ "review": {
164
+ "type": "object",
165
+ "required": ["reviewer_ref", "review_status", "review_due_at", "expires_at"],
166
+ "additionalProperties": false,
167
+ "properties": {
168
+ "reviewer_ref": { "$ref": "#/$defs/publicRef" },
169
+ "review_status": {
170
+ "type": "string",
171
+ "enum": ["not_started", "in_review", "approved", "blocked", "expired", "withdrawn"]
172
+ },
173
+ "reviewed_at": { "type": "string", "format": "date-time" },
174
+ "review_due_at": { "type": "string", "format": "date-time" },
175
+ "expires_at": { "type": "string", "format": "date-time" },
176
+ "approval_ref": { "$ref": "#/$defs/publicRef" }
177
+ }
178
+ },
179
+ "claimEntry": {
180
+ "type": "object",
181
+ "required": [
182
+ "claim_id",
183
+ "claim_status",
184
+ "claim_text",
185
+ "boundary",
186
+ "evidence_requirements",
187
+ "evidence_refs",
188
+ "release_status",
189
+ "review",
190
+ "public_safety",
191
+ "not_proven"
192
+ ],
193
+ "additionalProperties": false,
194
+ "properties": {
195
+ "claim_id": { "$ref": "#/$defs/publicRef" },
196
+ "claim_status": { "$ref": "#/$defs/claimStatus" },
197
+ "claim_text": { "type": "string", "minLength": 1, "maxLength": 512 },
198
+ "boundary": { "$ref": "#/$defs/boundary" },
199
+ "evidence_requirements": {
200
+ "type": "array",
201
+ "minItems": 1,
202
+ "items": { "$ref": "#/$defs/evidenceRequirement" },
203
+ "uniqueItems": true
204
+ },
205
+ "evidence_refs": {
206
+ "type": "array",
207
+ "minItems": 1,
208
+ "items": { "$ref": "#/$defs/publicRef" },
209
+ "uniqueItems": true
210
+ },
211
+ "release_status": { "$ref": "#/$defs/releaseStatus" },
212
+ "review": { "$ref": "#/$defs/review" },
213
+ "public_safety": { "$ref": "#/$defs/publicSafety" },
214
+ "not_proven": {
215
+ "type": "array",
216
+ "minItems": 1,
217
+ "items": {
218
+ "type": "string",
219
+ "enum": [
220
+ "provider_deletion",
221
+ "model_forgetting",
222
+ "provider_native_memory_control",
223
+ "compliance_certification",
224
+ "benchmark_superiority",
225
+ "hosted_saas_readiness",
226
+ "byoc_readiness",
227
+ "patentability_or_legal_conclusion",
228
+ "raw_embeddings_safe_public_metadata",
229
+ "hardware_tamper_proofing"
230
+ ]
231
+ },
232
+ "uniqueItems": true
233
+ }
234
+ },
235
+ "allOf": [
236
+ {
237
+ "if": {
238
+ "properties": { "claim_status": { "enum": ["allowed", "conditional"] } }
239
+ },
240
+ "then": {
241
+ "properties": {
242
+ "boundary": {
243
+ "enum": [
244
+ "local_vault_state_transition",
245
+ "receipt_chain_root",
246
+ "active_root",
247
+ "quarantine_root",
248
+ "tombstone_root",
249
+ "context_passport_selected_root",
250
+ "context_passport_omitted_root",
251
+ "context_passport_tombstone_root",
252
+ "capability_grant",
253
+ "capability_revocation",
254
+ "offline_verifier_output",
255
+ "public_release_metadata",
256
+ "public_evidence_metadata"
257
+ ]
258
+ }
259
+ }
260
+ }
261
+ },
262
+ {
263
+ "if": {
264
+ "properties": { "claim_status": { "const": "prohibited" } }
265
+ },
266
+ "then": {
267
+ "properties": {
268
+ "boundary": {
269
+ "enum": [
270
+ "provider_deletion",
271
+ "model_forgetting",
272
+ "provider_native_memory_control",
273
+ "compliance_certification",
274
+ "benchmark_superiority",
275
+ "hosted_saas_readiness",
276
+ "byoc_readiness",
277
+ "patentability_or_legal_conclusion",
278
+ "raw_embeddings_safe_public_metadata",
279
+ "hardware_tamper_proofing"
280
+ ]
281
+ },
282
+ "evidence_requirements": {
283
+ "contains": { "const": "prohibited_claim_boundary_ref" }
284
+ }
285
+ }
286
+ }
287
+ }
288
+ ]
289
+ }
290
+ }
291
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.enigma.ai/context-passport-v1.schema.json",
4
+ "title": "Enigma Context Passport v1",
5
+ "type": "object",
6
+ "required": [
7
+ "schema",
8
+ "passport_id",
9
+ "issued_at",
10
+ "subject_ref",
11
+ "query_commitment",
12
+ "selected_context_root",
13
+ "omitted_context_root",
14
+ "tombstone_context_root",
15
+ "selected_count",
16
+ "omitted_count",
17
+ "tombstone_count",
18
+ "capability_ids",
19
+ "policy_ids",
20
+ "proof_refs"
21
+ ],
22
+ "additionalProperties": false,
23
+ "properties": {
24
+ "schema": { "const": "enigma.context_passport.v1" },
25
+ "passport_id": { "$ref": "#/$defs/publicId" },
26
+ "issued_at": { "type": "string", "format": "date-time" },
27
+ "subject_ref": { "$ref": "#/$defs/publicRef" },
28
+ "query_commitment": { "$ref": "#/$defs/sha256Digest" },
29
+ "selected_context_root": { "$ref": "#/$defs/sha256Digest" },
30
+ "omitted_context_root": { "$ref": "#/$defs/sha256Digest" },
31
+ "tombstone_context_root": { "$ref": "#/$defs/sha256Digest" },
32
+ "selected_count": { "type": "integer", "minimum": 0 },
33
+ "omitted_count": { "type": "integer", "minimum": 0 },
34
+ "tombstone_count": { "type": "integer", "minimum": 0 },
35
+ "capability_ids": {
36
+ "type": "array",
37
+ "minItems": 1,
38
+ "items": { "$ref": "#/$defs/publicId" },
39
+ "uniqueItems": true
40
+ },
41
+ "policy_ids": {
42
+ "type": "array",
43
+ "minItems": 1,
44
+ "items": { "$ref": "#/$defs/publicId" },
45
+ "uniqueItems": true
46
+ },
47
+ "proof_refs": {
48
+ "type": "array",
49
+ "minItems": 1,
50
+ "items": { "$ref": "#/$defs/publicRef" },
51
+ "uniqueItems": true
52
+ }
53
+ },
54
+ "$defs": {
55
+ "sha256Digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
56
+ "publicId": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$" },
57
+ "publicRef": { "type": "string", "pattern": "^(?![A-Za-z]:$)[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$" }
58
+ }
59
+ }
@@ -1,26 +1,26 @@
1
- {
2
- "$schema": "https://json-schema.org/draft/2020-12/schema",
3
- "$id": "https://schemas.enigma.ai/deletion-tombstone-v1.schema.json",
4
- "title": "Enigma Deletion Tombstone v1",
5
- "type": "object",
6
- "required": ["schema", "tombstone_id", "delete_receipt_hash", "target_memory_addrs", "effective_epoch", "active_memory_root_after", "deleted_memory_root_after", "erasure_scope", "not_proven", "issued_at"],
7
- "additionalProperties": false,
8
- "properties": {
9
- "schema": { "const": "enigma.deletion_tombstone.v1" },
10
- "tombstone_id": { "type": "string", "minLength": 8 },
11
- "delete_receipt_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
12
- "target_memory_addrs": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
13
- "effective_epoch": { "type": "integer", "minimum": 0 },
14
- "active_memory_root_after": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
15
- "deleted_memory_root_after": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
16
- "erasure_scope": {
17
- "type": "array",
18
- "items": { "type": "string", "enum": ["active_store", "local_cache", "device_sync_peer", "encrypted_backup", "enterprise_tenant_store", "user_export_bundle"] }
19
- },
20
- "key_refs_destroyed": { "type": "array", "items": { "type": "string" } },
21
- "downstream_delete_request_hashes": { "type": "array", "items": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" } },
22
- "backup_treatment": { "type": "string", "enum": ["not_applicable", "purged", "tombstoned_unreadable_by_destroyed_key", "legal_hold_retained", "outside_scope"] },
23
- "not_proven": { "type": "array", "minItems": 1, "items": { "type": "string" } },
24
- "issued_at": { "type": "string", "format": "date-time" }
25
- }
26
- }
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://schemas.enigma.ai/deletion-tombstone-v1.schema.json",
4
+ "title": "Enigma Deletion Tombstone v1",
5
+ "type": "object",
6
+ "required": ["schema", "tombstone_id", "delete_receipt_hash", "target_memory_addrs", "effective_epoch", "active_memory_root_after", "deleted_memory_root_after", "erasure_scope", "not_proven", "issued_at"],
7
+ "additionalProperties": false,
8
+ "properties": {
9
+ "schema": { "const": "enigma.deletion_tombstone.v1" },
10
+ "tombstone_id": { "type": "string", "minLength": 8 },
11
+ "delete_receipt_hash": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
12
+ "target_memory_addrs": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 1 } },
13
+ "effective_epoch": { "type": "integer", "minimum": 0 },
14
+ "active_memory_root_after": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
15
+ "deleted_memory_root_after": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
16
+ "erasure_scope": {
17
+ "type": "array",
18
+ "items": { "type": "string", "enum": ["active_store", "local_cache", "device_sync_peer", "encrypted_backup", "enterprise_tenant_store", "user_export_bundle"] }
19
+ },
20
+ "key_refs_destroyed": { "type": "array", "items": { "type": "string" } },
21
+ "downstream_delete_request_hashes": { "type": "array", "items": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" } },
22
+ "backup_treatment": { "type": "string", "enum": ["not_applicable", "purged", "tombstoned_unreadable_by_destroyed_key", "legal_hold_retained", "outside_scope"] },
23
+ "not_proven": { "type": "array", "minItems": 1, "items": { "type": "string" } },
24
+ "issued_at": { "type": "string", "format": "date-time" }
25
+ }
26
+ }