@remnic/core 9.54.4 → 9.54.6

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 (648) hide show
  1. package/dist/access-admin-ops-surface.d.ts +24 -23
  2. package/dist/access-admin-ops-surface.js +55 -50
  3. package/dist/access-authorization-probe.d.ts +25 -22
  4. package/dist/access-authorization-probe.js +58 -51
  5. package/dist/access-boundary.d.ts +26 -23
  6. package/dist/access-boundary.js +59 -52
  7. package/dist/access-cli.js +115 -107
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +19 -18
  11. package/dist/access-extraction-force-flush.js +55 -50
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +22 -21
  14. package/dist/access-http-lifecycle-flush.d.ts +22 -21
  15. package/dist/access-http-offline-stream.d.ts +19 -18
  16. package/dist/access-http-query.js +55 -50
  17. package/dist/access-http.d.ts +55 -36
  18. package/dist/access-http.js +76 -65
  19. package/dist/access-identity-continuity-surface.d.ts +9 -9
  20. package/dist/access-identity-continuity-surface.js +55 -50
  21. package/dist/access-lcm-surface.d.ts +21 -20
  22. package/dist/access-lcm-surface.js +55 -50
  23. package/dist/access-mcp.d.ts +22 -21
  24. package/dist/access-mcp.js +63 -57
  25. package/dist/access-memory-search-fanout.d.ts +22 -2
  26. package/dist/access-memory-search-fanout.js +1 -1
  27. package/dist/{access-namespace-preflight-C7n4tgWC.d.ts → access-namespace-preflight-CCNn_6NE.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +55 -50
  30. package/dist/access-observe-write-surface.d.ts +22 -21
  31. package/dist/access-observe-write-surface.js +55 -50
  32. package/dist/access-offline-manifest.d.ts +10 -9
  33. package/dist/access-offline-manifest.js +12 -10
  34. package/dist/access-operations-batch.js +57 -52
  35. package/dist/access-operations.d.ts +23 -22
  36. package/dist/access-operations.js +61 -55
  37. package/dist/access-recall-concurrency.d.ts +21 -20
  38. package/dist/access-recall-concurrency.js +55 -50
  39. package/dist/access-recall-response.d.ts +19 -18
  40. package/dist/access-recall-response.js +55 -50
  41. package/dist/access-recall-surface.d.ts +19 -18
  42. package/dist/access-recall-surface.js +55 -50
  43. package/dist/access-schema.d.ts +2 -2
  44. package/dist/access-schema.js +5 -4
  45. package/dist/{access-service-CXvbxLK-.d.ts → access-service-DkSdXK4S.d.ts} +1314 -83
  46. package/dist/access-service-helpers.d.ts +22 -21
  47. package/dist/access-service.d.ts +31 -30
  48. package/dist/access-service.js +55 -50
  49. package/dist/access-surface-catalog.d.ts +22 -21
  50. package/dist/access-surface-catalog.js +209 -2
  51. package/dist/access-surface-catalog.js.map +1 -1
  52. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  53. package/dist/action-confidence.d.ts +1 -1
  54. package/dist/active-memory-bridge.d.ts +14 -1
  55. package/dist/active-memory-bridge.js +6 -1
  56. package/dist/active-recall.d.ts +1 -1
  57. package/dist/active-recall.js +4 -2
  58. package/dist/active-recall.js.map +1 -1
  59. package/dist/adapters/index.js +7 -7
  60. package/dist/adapters/registry.js +3 -3
  61. package/dist/admin-console/public/what-helps-me/app.js +1594 -0
  62. package/dist/admin-console/public/what-helps-me/index.html +339 -0
  63. package/dist/admin-console/public/what-helps-me/model.js +685 -0
  64. package/dist/admin-console/public/what-helps-me/what-helps-me.css +1296 -0
  65. package/dist/ambient-provenance.d.ts +1 -1
  66. package/dist/artifact-search.d.ts +1 -1
  67. package/dist/{auto-sync-TDHLZPVP.js → auto-sync-NR3GPCOA.js} +4 -4
  68. package/dist/behavior-learner.d.ts +1 -1
  69. package/dist/behavior-signals.d.ts +1 -1
  70. package/dist/bootstrap.d.ts +9 -9
  71. package/dist/briefing.d.ts +2 -2
  72. package/dist/briefing.js +33 -12
  73. package/dist/buffer-surprise-report.d.ts +1 -1
  74. package/dist/buffer-turn-helpers.d.ts +1 -1
  75. package/dist/buffer.d.ts +2 -2
  76. package/dist/buffer.js +3 -3
  77. package/dist/bulk-import/index.d.ts +3 -3
  78. package/dist/calibration.d.ts +1 -1
  79. package/dist/calibration.js +1 -1
  80. package/dist/capabilities.d.ts +1 -1
  81. package/dist/{catalog-BOOxl-I2.d.ts → catalog-DGFf8mD9.d.ts} +1 -1
  82. package/dist/causal-behavior.d.ts +1 -1
  83. package/dist/causal-consolidation.d.ts +1 -1
  84. package/dist/causal-consolidation.js +34 -13
  85. package/dist/causal-consolidation.js.map +1 -1
  86. package/dist/causal-trajectory-graph.d.ts +1 -1
  87. package/dist/{chunk-ZYLC7NFO.js → chunk-26ZXBTYN.js} +4 -4
  88. package/dist/chunk-26ZXBTYN.js.map +1 -0
  89. package/dist/{chunk-LLJMAULE.js → chunk-2FKEIPIT.js} +5 -5
  90. package/dist/{chunk-3CSX3ETE.js → chunk-2LWQSV6A.js} +23 -11
  91. package/dist/chunk-2LWQSV6A.js.map +1 -0
  92. package/dist/{chunk-JBPKEARU.js → chunk-2QSZNTDO.js} +7 -7
  93. package/dist/chunk-37DZZFFM.js +502 -0
  94. package/dist/chunk-37DZZFFM.js.map +1 -0
  95. package/dist/chunk-3HSRWJTC.js +9 -0
  96. package/dist/chunk-3HSRWJTC.js.map +1 -0
  97. package/dist/{chunk-XUAMCLY4.js → chunk-3TIZPSJC.js} +17 -13
  98. package/dist/chunk-3TIZPSJC.js.map +1 -0
  99. package/dist/{chunk-PDDTI7IC.js → chunk-43SEBY2M.js} +1 -1
  100. package/dist/{chunk-HWRD23DW.js → chunk-46SZBVDS.js} +3 -3
  101. package/dist/{chunk-6HPHEFXT.js → chunk-5FD7JMTX.js} +2 -2
  102. package/dist/{chunk-7BZOBA5J.js → chunk-5NB726GV.js} +70 -16
  103. package/dist/chunk-5NB726GV.js.map +1 -0
  104. package/dist/chunk-62OKGIJA.js +39 -0
  105. package/dist/chunk-62OKGIJA.js.map +1 -0
  106. package/dist/{chunk-IBKR2TFR.js → chunk-6CYHUWCO.js} +2 -2
  107. package/dist/{chunk-YN6ASZUG.js → chunk-6QPI2ITJ.js} +5 -5
  108. package/dist/{chunk-UU3G6GUP.js → chunk-76JJSXK7.js} +1 -1
  109. package/dist/chunk-76JJSXK7.js.map +1 -0
  110. package/dist/{chunk-PX2LSHYM.js → chunk-7BD6O7ZV.js} +189 -4
  111. package/dist/chunk-7BD6O7ZV.js.map +1 -0
  112. package/dist/chunk-7TBXNYLO.js +346 -0
  113. package/dist/chunk-7TBXNYLO.js.map +1 -0
  114. package/dist/{chunk-NH5IR2WM.js → chunk-BRR5EUTF.js} +6 -2
  115. package/dist/chunk-BRR5EUTF.js.map +1 -0
  116. package/dist/{chunk-NIS256NW.js → chunk-CIAI24TQ.js} +3 -3
  117. package/dist/{chunk-T2JHZWH6.js → chunk-D3LBIUWV.js} +11703 -7573
  118. package/dist/chunk-D3LBIUWV.js.map +1 -0
  119. package/dist/{chunk-7FGL6CGA.js → chunk-DVYRD4HY.js} +2 -2
  120. package/dist/{chunk-G7Z6EENO.js → chunk-EKTP7MNS.js} +4 -4
  121. package/dist/{chunk-S75M5ZRK.js → chunk-F2JRDPON.js} +16 -1
  122. package/dist/chunk-F2JRDPON.js.map +1 -0
  123. package/dist/{chunk-RZ4XGKOJ.js → chunk-FFRTNF3L.js} +8 -8
  124. package/dist/{chunk-VKXWK44Q.js → chunk-FONWBCVY.js} +3 -3
  125. package/dist/{chunk-DZD576ZU.js → chunk-FPLM2TKD.js} +2 -2
  126. package/dist/{chunk-ZPJ4QSGP.js → chunk-FTPONF6B.js} +2 -2
  127. package/dist/{chunk-LJS7KUPV.js → chunk-FWX7W5PM.js} +2 -2
  128. package/dist/{chunk-UTRO5UJU.js → chunk-G6DFSS6A.js} +5 -1
  129. package/dist/chunk-G6DFSS6A.js.map +1 -0
  130. package/dist/{chunk-6LAPLZOS.js → chunk-GJ776BC2.js} +8 -3
  131. package/dist/chunk-GJ776BC2.js.map +1 -0
  132. package/dist/{chunk-G4T7L557.js → chunk-GN3WRFJY.js} +6 -6
  133. package/dist/{chunk-QT2FRYI4.js → chunk-H7NAZ3UB.js} +2 -2
  134. package/dist/{chunk-APPFNGX6.js → chunk-HBUFQRIM.js} +2 -2
  135. package/dist/{chunk-UU7TRFNE.js → chunk-HGJ6NJ4E.js} +2 -2
  136. package/dist/{chunk-WB7JSQCP.js → chunk-HIEWDJ2O.js} +5 -2
  137. package/dist/{chunk-WB7JSQCP.js.map → chunk-HIEWDJ2O.js.map} +1 -1
  138. package/dist/{chunk-UES4BHA2.js → chunk-I3MSGFGD.js} +17 -6
  139. package/dist/chunk-I3MSGFGD.js.map +1 -0
  140. package/dist/{chunk-C4ZNGVK3.js → chunk-IKP5OYQQ.js} +2 -2
  141. package/dist/{chunk-KQAFEZQX.js → chunk-IPLYGWQF.js} +5 -5
  142. package/dist/{chunk-RDJRFDJY.js → chunk-IQ4NVWEF.js} +2 -2
  143. package/dist/{chunk-CGVHPCP2.js → chunk-JYG4OLWH.js} +2 -2
  144. package/dist/{chunk-WOPA3SGI.js → chunk-K26NWEOC.js} +8 -8
  145. package/dist/{chunk-K4QS7LXU.js → chunk-K2UGPTYY.js} +485 -44
  146. package/dist/chunk-K2UGPTYY.js.map +1 -0
  147. package/dist/{chunk-L6CQ7WIW.js → chunk-KFBOPMF6.js} +11 -11
  148. package/dist/chunk-KFBOPMF6.js.map +1 -0
  149. package/dist/{chunk-G7A5HLUS.js → chunk-KJH6W2I7.js} +2 -2
  150. package/dist/{chunk-IXEBUYO4.js → chunk-KM55SMLG.js} +11 -2
  151. package/dist/{chunk-IXEBUYO4.js.map → chunk-KM55SMLG.js.map} +1 -1
  152. package/dist/{chunk-HOIRB77A.js → chunk-L6Z5OAS4.js} +2 -2
  153. package/dist/chunk-LC2BDILZ.js +57 -0
  154. package/dist/chunk-LC2BDILZ.js.map +1 -0
  155. package/dist/{chunk-227UFSEQ.js → chunk-LEPOP46W.js} +4 -4
  156. package/dist/{chunk-6R4G7N4S.js → chunk-M4YHAODQ.js} +388 -748
  157. package/dist/chunk-M4YHAODQ.js.map +1 -0
  158. package/dist/{chunk-3JLPGJ43.js → chunk-MIH3CJPN.js} +5 -5
  159. package/dist/{chunk-QHFV6VNU.js → chunk-MK5VEWCR.js} +2 -2
  160. package/dist/chunk-NISZQW72.js +140 -0
  161. package/dist/chunk-NISZQW72.js.map +1 -0
  162. package/dist/{chunk-GUKBW4HL.js → chunk-NQMSEB5D.js} +6 -6
  163. package/dist/{chunk-G2LUMAUF.js → chunk-OCIP6YMD.js} +12 -5
  164. package/dist/chunk-OCIP6YMD.js.map +1 -0
  165. package/dist/{chunk-47P3RYZP.js → chunk-PG4QBPVG.js} +21 -11
  166. package/dist/chunk-PG4QBPVG.js.map +1 -0
  167. package/dist/{chunk-WRJVB3C2.js → chunk-PO7NXBG2.js} +2 -2
  168. package/dist/{chunk-QWGE2PUH.js → chunk-PT54WISF.js} +190 -56
  169. package/dist/chunk-PT54WISF.js.map +1 -0
  170. package/dist/{chunk-AZM4CCAC.js → chunk-QZLDRQ4I.js} +8 -8
  171. package/dist/{chunk-THPPCISA.js → chunk-RBII7637.js} +5 -5
  172. package/dist/{chunk-JDZPNCMA.js → chunk-RUNORG2P.js} +6 -3
  173. package/dist/chunk-RUNORG2P.js.map +1 -0
  174. package/dist/{chunk-JV5YUBIZ.js → chunk-RZQ6W2W4.js} +50 -44
  175. package/dist/chunk-RZQ6W2W4.js.map +1 -0
  176. package/dist/{chunk-RUMNY5DT.js → chunk-SMNYAMJD.js} +6 -2
  177. package/dist/chunk-SMNYAMJD.js.map +1 -0
  178. package/dist/{chunk-MKQBXQKU.js → chunk-TB6CBZ5V.js} +22 -15
  179. package/dist/chunk-TB6CBZ5V.js.map +1 -0
  180. package/dist/{chunk-VMMQDEN5.js → chunk-TO7ZTWJW.js} +2 -2
  181. package/dist/{chunk-K2TDK7GG.js → chunk-TWTUGCTY.js} +2 -2
  182. package/dist/{chunk-HLYR2TQL.js → chunk-UCTS3DDH.js} +2 -2
  183. package/dist/{chunk-JYIJNNN3.js → chunk-UG6VXIOK.js} +2 -2
  184. package/dist/{chunk-WM65LU67.js → chunk-UKYS3NU5.js} +2 -2
  185. package/dist/{chunk-WDBX6VER.js → chunk-UPLZNJKN.js} +5 -5
  186. package/dist/{chunk-C23BYTJV.js → chunk-UW5NPZJ2.js} +40 -12
  187. package/dist/chunk-UW5NPZJ2.js.map +1 -0
  188. package/dist/{chunk-2GFK22OZ.js → chunk-V6ERBR7U.js} +2 -2
  189. package/dist/{chunk-CYF6WVE7.js → chunk-W5ZKPI34.js} +139 -158
  190. package/dist/chunk-W5ZKPI34.js.map +1 -0
  191. package/dist/chunk-XX4HPFFM.js +370 -0
  192. package/dist/chunk-XX4HPFFM.js.map +1 -0
  193. package/dist/{chunk-ZMYDYNI4.js → chunk-XZHE2DEN.js} +4 -4
  194. package/dist/chunk-YXQEKCZM.js +223 -0
  195. package/dist/chunk-YXQEKCZM.js.map +1 -0
  196. package/dist/{chunk-GYPQL6XN.js → chunk-Z4N7SVVF.js} +35 -47
  197. package/dist/chunk-Z4N7SVVF.js.map +1 -0
  198. package/dist/{chunk-MAXVH44E.js → chunk-Z54EM5YZ.js} +7 -7
  199. package/dist/{chunk-YGLY6QFV.js → chunk-ZRZVLB7O.js} +2 -2
  200. package/dist/{chunk-4IIFL7GC.js → chunk-ZUKIUXHQ.js} +10 -10
  201. package/dist/{cli-DVUFIa5E.d.ts → cli-Bze8S0Qs.d.ts} +5 -5
  202. package/dist/cli.d.ts +22 -21
  203. package/dist/cli.js +90 -80
  204. package/dist/coding/pre-action-gate.d.ts +1 -1
  205. package/dist/compounding/engine.d.ts +2 -2
  206. package/dist/compounding/engine.js +33 -12
  207. package/dist/compounding/preference-consolidator.d.ts +1 -1
  208. package/dist/compression-optimizer.d.ts +1 -1
  209. package/dist/config.d.ts +1 -1
  210. package/dist/config.js +4 -2
  211. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  212. package/dist/connectors/codex-materialize-runner.js +33 -12
  213. package/dist/connectors/codex-materialize.d.ts +1 -1
  214. package/dist/connectors/index.d.ts +1 -1
  215. package/dist/connectors/index.js +32 -12
  216. package/dist/consolidation-provenance-check.d.ts +2 -2
  217. package/dist/consolidation-undo.d.ts +2 -2
  218. package/dist/contradiction/index.d.ts +2 -2
  219. package/dist/contradiction/index.js +3 -1
  220. package/dist/contradiction-scan-JDTBXRGW.js +20 -0
  221. package/dist/converge-config.d.ts +1 -1
  222. package/dist/convergence-refresh.d.ts +2 -2
  223. package/dist/convergence-refresh.js +35 -14
  224. package/dist/conversation-index/backend.d.ts +1 -1
  225. package/dist/conversation-index/backend.js +2 -2
  226. package/dist/conversation-index/chunker.d.ts +1 -1
  227. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  228. package/dist/conversation-index/indexer.d.ts +1 -1
  229. package/dist/conversation-index/search.d.ts +1 -1
  230. package/dist/corpus-watermark.d.ts +1 -1
  231. package/dist/corpus-watermark.js +25 -24
  232. package/dist/day-summary.d.ts +1 -1
  233. package/dist/delinearize.d.ts +1 -1
  234. package/dist/dependency-propagation-config.d.ts +1 -1
  235. package/dist/{dependency-propagation-delivery-XzF76C9n.d.ts → dependency-propagation-delivery-CzEfB31P.d.ts} +1 -1
  236. package/dist/direct-answer-wiring.d.ts +1 -1
  237. package/dist/direct-answer.d.ts +1 -1
  238. package/dist/embedding-fallback.d.ts +1 -1
  239. package/dist/enrichment/index.d.ts +1 -1
  240. package/dist/entity-retrieval.d.ts +2 -2
  241. package/dist/entity-retrieval.js +33 -12
  242. package/dist/entity-schema.d.ts +1 -1
  243. package/dist/explicit-capture.d.ts +9 -9
  244. package/dist/explicit-capture.js +7 -4
  245. package/dist/external-wiki-access.d.ts +22 -21
  246. package/dist/external-wiki-access.js +56 -51
  247. package/dist/external-wiki-collection-registration.d.ts +1 -1
  248. package/dist/external-wiki-collection.d.ts +1 -1
  249. package/dist/external-wiki-mcp-tools.d.ts +22 -21
  250. package/dist/extraction-error-classification.d.ts +1 -1
  251. package/dist/extraction-faithfulness.d.ts +1 -1
  252. package/dist/extraction-faithfulness.js +2 -2
  253. package/dist/extraction-judge-telemetry.d.ts +1 -1
  254. package/dist/extraction-judge-training.d.ts +1 -1
  255. package/dist/extraction-judge.d.ts +1 -1
  256. package/dist/extraction-judge.js +2 -2
  257. package/dist/extraction-liveness.d.ts +1 -1
  258. package/dist/extraction-normalization.d.ts +1 -1
  259. package/dist/extraction-prompt.d.ts +1 -1
  260. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  261. package/dist/extraction-source-grounding.d.ts +1 -1
  262. package/dist/extraction.d.ts +1 -1
  263. package/dist/extraction.js +35 -19
  264. package/dist/fallback-llm.d.ts +14 -1
  265. package/dist/fallback-llm.js +1 -1
  266. package/dist/{first-start-migration-626C5554.js → first-start-migration-CRZCZAJN.js} +11 -3
  267. package/dist/first-start-migration-CRZCZAJN.js.map +1 -0
  268. package/dist/graph-dashboard-diff.d.ts +1 -1
  269. package/dist/graph-dashboard-key.d.ts +1 -1
  270. package/dist/graph-dashboard-parser.d.ts +1 -1
  271. package/dist/graph-edge-reinforcement.d.ts +1 -1
  272. package/dist/graph-path-reconstruction.d.ts +1 -1
  273. package/dist/graph-path-scoring.d.ts +1 -1
  274. package/dist/graph-snapshot.d.ts +1 -1
  275. package/dist/graph.d.ts +1 -1
  276. package/dist/harmonic-retrieval.js +1 -1
  277. package/dist/importance.d.ts +1 -1
  278. package/dist/importers/index.d.ts +1 -1
  279. package/dist/in-flight-reads.d.ts +1 -1
  280. package/dist/index.d.ts +314 -308
  281. package/dist/index.js +304 -133
  282. package/dist/inline-script.d.ts +3 -0
  283. package/dist/inline-script.js +8 -0
  284. package/dist/inline-script.js.map +1 -0
  285. package/dist/intent.d.ts +1 -1
  286. package/dist/lcm/engine.d.ts +1 -1
  287. package/dist/lcm/engine.js +3 -3
  288. package/dist/lcm/index.d.ts +1 -1
  289. package/dist/lcm/index.js +6 -6
  290. package/dist/lcm/tools.d.ts +1 -1
  291. package/dist/lifecycle.d.ts +1 -1
  292. package/dist/live-connectors-runner.d.ts +1 -1
  293. package/dist/local-llm.d.ts +2 -1
  294. package/dist/local-llm.js +2 -2
  295. package/dist/local-model-endpoint.d.ts +1 -1
  296. package/dist/maintenance/memory-governance.d.ts +1 -1
  297. package/dist/maintenance/memory-governance.js +33 -12
  298. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  299. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +33 -12
  300. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  301. package/dist/maintenance/rebuild-memory-projection.js +34 -13
  302. package/dist/{maintenance-BJzNIKBE.d.ts → maintenance-C8aRWfhq.d.ts} +3 -3
  303. package/dist/mcp-memory-inspector-app.d.ts +22 -21
  304. package/dist/mcp-read-only-tools.js +1 -1
  305. package/dist/memory-action-policy.d.ts +1 -1
  306. package/dist/memory-cache.d.ts +1 -1
  307. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  308. package/dist/memory-projection-mutations.js +2 -2
  309. package/dist/memory-projection-store.d.ts +6 -2
  310. package/dist/memory-projection-store.js +1 -1
  311. package/dist/memory-provenance.d.ts +1 -1
  312. package/dist/memory-snapshot.d.ts +1 -1
  313. package/dist/memory-worth-outcomes.d.ts +2 -2
  314. package/dist/models-json.d.ts +1 -1
  315. package/dist/namespaces/migrate.d.ts +3 -3
  316. package/dist/namespaces/migrate.js +24 -23
  317. package/dist/namespaces/principal.d.ts +1 -1
  318. package/dist/namespaces/search.d.ts +1 -1
  319. package/dist/namespaces/search.js +8 -8
  320. package/dist/namespaces/storage.d.ts +3 -3
  321. package/dist/namespaces/storage.js +33 -12
  322. package/dist/native-knowledge.d.ts +1 -1
  323. package/dist/offline-sync-file-io.d.ts +20 -0
  324. package/dist/offline-sync-file-io.js +18 -0
  325. package/dist/offline-sync-file-io.js.map +1 -0
  326. package/dist/offline-sync-impression-drain.d.ts +1 -1
  327. package/dist/offline-sync-impression-drain.js +5 -5
  328. package/dist/offline-sync.d.ts +8 -6
  329. package/dist/offline-sync.js +2 -1
  330. package/dist/operator-doctor-corpus.d.ts +1 -1
  331. package/dist/operator-doctor-corpus.js +26 -25
  332. package/dist/operator-doctor-replica.d.ts +1 -1
  333. package/dist/operator-toolkit.d.ts +3 -3
  334. package/dist/operator-toolkit.js +39 -36
  335. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  336. package/dist/orchestration/maintenance.d.ts +4 -4
  337. package/dist/orchestration/maintenance.js +38 -18
  338. package/dist/{orchestrator-BiXgBJBQ.d.ts → orchestrator-D85CzDDY.d.ts} +11 -8
  339. package/dist/orchestrator.d.ts +9 -9
  340. package/dist/orchestrator.js +117 -109
  341. package/dist/patterns-cli.d.ts +1 -1
  342. package/dist/{pipeline-sz_dcuLg.d.ts → pipeline-DPcUifCO.d.ts} +1 -1
  343. package/dist/policy-runtime.d.ts +1 -1
  344. package/dist/proactive-contention.d.ts +1 -1
  345. package/dist/provenance.d.ts +1 -1
  346. package/dist/public-http-D-SyWNj6.d.ts +25 -0
  347. package/dist/{purge-533FZLS4.js → purge-GB7PZHT2.js} +2 -2
  348. package/dist/{qmd-eAWObK4M.d.ts → qmd-dFCHp1r0.d.ts} +1 -1
  349. package/dist/qmd-preflight.d.ts +2 -2
  350. package/dist/qmd-recall-cache.d.ts +1 -1
  351. package/dist/qmd.d.ts +2 -2
  352. package/dist/recall-concurrency-config.d.ts +1 -1
  353. package/dist/recall-disclosure-escalation.d.ts +1 -1
  354. package/dist/recall-explain-renderer.d.ts +1 -1
  355. package/dist/recall-explain-renderer.js +3 -3
  356. package/dist/recall-memory-map.d.ts +1 -1
  357. package/dist/recall-planner-llm.d.ts +1 -1
  358. package/dist/recall-planner-llm.js +1 -1
  359. package/dist/recall-state.d.ts +1 -1
  360. package/dist/recall-tag-filter.d.ts +1 -1
  361. package/dist/recall-timings.d.ts +1 -1
  362. package/dist/recall-xray-cli.d.ts +1 -1
  363. package/dist/recall-xray-cli.js +4 -4
  364. package/dist/recall-xray-renderer.d.ts +1 -1
  365. package/dist/recall-xray-renderer.js +3 -3
  366. package/dist/recall-xray.d.ts +1 -1
  367. package/dist/recall-xray.js +2 -2
  368. package/dist/reconcile/cursor.d.ts +2 -1
  369. package/dist/reconcile/manifest.d.ts +2 -1
  370. package/dist/reconcile/manifest.js +6 -5
  371. package/dist/reconcile/plan.d.ts +2 -1
  372. package/dist/reconcile/plan.js +3 -2
  373. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  374. package/dist/replay/normalizers/claude.d.ts +1 -1
  375. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  376. package/dist/replay/normalizers/shared.d.ts +1 -1
  377. package/dist/replay/runner.d.ts +1 -1
  378. package/dist/replay/types.d.ts +1 -1
  379. package/dist/replica-divergence.d.ts +1 -1
  380. package/dist/replica-peers-config.d.ts +1 -1
  381. package/dist/resolve-auth-token.d.ts +1 -1
  382. package/dist/resume-bundles.js +5 -3
  383. package/dist/retrieval-agents.d.ts +2 -2
  384. package/dist/retrieval-tiers.d.ts +1 -1
  385. package/dist/routing/engine.d.ts +1 -1
  386. package/dist/routing/store.d.ts +1 -1
  387. package/dist/salvage-envelope.d.ts +1 -1
  388. package/dist/schemas.d.ts +38 -38
  389. package/dist/{scope-profiles-BBQsXuyj.d.ts → scope-profiles-DICK7GtN.d.ts} +1 -1
  390. package/dist/search/embed-helper.d.ts +1 -1
  391. package/dist/search/factory.d.ts +1 -1
  392. package/dist/search/factory.js +6 -6
  393. package/dist/search/index.d.ts +1 -1
  394. package/dist/search/index.js +12 -12
  395. package/dist/search/lancedb-backend.d.ts +1 -1
  396. package/dist/search/meilisearch-backend.d.ts +1 -1
  397. package/dist/search/noop-backend.d.ts +1 -1
  398. package/dist/search/orama-backend.d.ts +1 -1
  399. package/dist/search/port.d.ts +1 -1
  400. package/dist/search/remote-backend.d.ts +1 -1
  401. package/dist/{semantic-consolidation-HD8RkzVA.d.ts → semantic-consolidation-BP7NAX0N.d.ts} +1 -1
  402. package/dist/semantic-consolidation.d.ts +2 -2
  403. package/dist/semantic-consolidation.js +34 -13
  404. package/dist/semantic-rule-promotion.js +33 -12
  405. package/dist/semantic-rule-verifier.d.ts +1 -1
  406. package/dist/semantic-rule-verifier.js +33 -12
  407. package/dist/{service-DIrtHHEg.d.ts → service-DT-pJyda.d.ts} +660 -660
  408. package/dist/session-observer-bands.d.ts +1 -1
  409. package/dist/session-observer-state.d.ts +1 -1
  410. package/dist/shared-context/manager.d.ts +1 -1
  411. package/dist/signal.d.ts +1 -1
  412. package/dist/source-agent-qualifier.d.ts +1 -1
  413. package/dist/source-agent-qualifier.js +31 -15
  414. package/dist/{storage-DqCzXi56.d.ts → storage-qOnaJ1Lw.d.ts} +49 -13
  415. package/dist/storage.d.ts +2 -2
  416. package/dist/storage.js +33 -12
  417. package/dist/summarizer.d.ts +1 -1
  418. package/dist/summarizer.js +5 -5
  419. package/dist/summary-snapshot.d.ts +1 -1
  420. package/dist/support-passport/index.d.ts +518 -0
  421. package/dist/support-passport/index.js +357 -0
  422. package/dist/support-passport/index.js.map +1 -0
  423. package/dist/temporal-supersession.d.ts +2 -2
  424. package/dist/temporal-timeline-recall.d.ts +1 -1
  425. package/dist/temporal-validity.d.ts +1 -1
  426. package/dist/threading.d.ts +1 -1
  427. package/dist/tier-migration.d.ts +2 -2
  428. package/dist/tier-routing.d.ts +2 -2
  429. package/dist/tier-routing.js +7 -1
  430. package/dist/{tier-stats-2JCZYEF7.js → tier-stats-EXYSKSVN.js} +8 -2
  431. package/dist/{tier-stats-2JCZYEF7.js.map → tier-stats-EXYSKSVN.js.map} +1 -1
  432. package/dist/topics.d.ts +1 -1
  433. package/dist/transcript.d.ts +1 -1
  434. package/dist/transfer/autodetect.js +1 -1
  435. package/dist/transfer/backup.js +1 -1
  436. package/dist/transfer/capsule-export.js +2 -2
  437. package/dist/transfer/types.d.ts +36 -36
  438. package/dist/trust-score-stage.d.ts +1 -1
  439. package/dist/trust-score.d.ts +1 -1
  440. package/dist/{types-d_j4vC6N.d.ts → types-ed-SvS2t.d.ts} +8 -1
  441. package/dist/types.d.ts +1 -1
  442. package/dist/types.js +1 -1
  443. package/dist/utility-runtime.d.ts +2 -2
  444. package/dist/verified-recall.js +33 -12
  445. package/dist/write-envelope.d.ts +1 -1
  446. package/dist/write-rate-limiter.d.ts +11 -5
  447. package/dist/write-rate-limiter.js +1 -1
  448. package/package.json +12 -2
  449. package/scripts/build-with-heap.mjs +11 -1
  450. package/src/access-authorization-probe.ts +20 -2
  451. package/src/access-boundary.ts +32 -0
  452. package/src/access-http.test.ts +1971 -643
  453. package/src/access-http.ts +81 -74
  454. package/src/access-mcp.ts +3 -1
  455. package/src/access-memory-search-fanout.ts +24 -1
  456. package/src/access-offline-manifest.ts +5 -0
  457. package/src/access-operations.ts +2 -0
  458. package/src/access-service-namespace.test.ts +14 -0
  459. package/src/access-service-observe-scope.test.ts +2 -0
  460. package/src/access-service-offline-file-content.test.ts +211 -0
  461. package/src/access-service.ts +628 -884
  462. package/src/access-surface-catalog.test.ts +40 -10
  463. package/src/access-surface-catalog.ts +15 -0
  464. package/src/active-memory-bridge.test.ts +151 -0
  465. package/src/active-memory-bridge.ts +95 -21
  466. package/src/briefing.test.ts +38 -0
  467. package/src/briefing.ts +3 -3
  468. package/src/cli.ts +6 -1
  469. package/src/config.ts +18 -9
  470. package/src/connectors/codex-materialize-runner.ts +2 -0
  471. package/src/contradiction/contradiction-scan.ts +2 -0
  472. package/src/contradiction/contradiction.test.ts +42 -0
  473. package/src/correction/correction-access-wiring.ts +8 -2
  474. package/src/correction/correction-storage-integration.test.ts +7 -0
  475. package/src/explicit-capture.test.ts +24 -0
  476. package/src/explicit-capture.ts +2 -0
  477. package/src/fallback-llm.test.ts +54 -0
  478. package/src/fallback-llm.ts +54 -9
  479. package/src/index.ts +3 -0
  480. package/src/inline-script.ts +6 -0
  481. package/src/local-llm-headers-timeout.test.ts +42 -0
  482. package/src/local-llm.ts +8 -8
  483. package/src/maintenance/first-start-migration.ts +2 -1
  484. package/src/maintenance/memory-governance.test.ts +25 -0
  485. package/src/maintenance/memory-governance.ts +4 -1
  486. package/src/maintenance/pattern-reinforcement.test.ts +20 -0
  487. package/src/maintenance/pattern-reinforcement.ts +2 -1
  488. package/src/maintenance/rebuild-memory-projection.ts +8 -8
  489. package/src/mcp-read-only-tools.ts +3 -0
  490. package/src/memory-projection-store.ts +25 -27
  491. package/src/offline-sync-file-io.ts +68 -0
  492. package/src/offline-sync.ts +43 -57
  493. package/src/orchestration/consolidation-run.ts +5 -4
  494. package/src/orchestration/contradiction-linking-coordinator.ts +7 -0
  495. package/src/orchestration/contradiction-localization.integration.test.ts +115 -0
  496. package/src/orchestration/lifecycle-policy-coordinator.ts +2 -1
  497. package/src/orchestration/qmd-result-resolver.test.ts +215 -14
  498. package/src/orchestration/qmd-result-resolver.ts +142 -82
  499. package/src/orchestration/recall-search-pipeline.test.ts +41 -0
  500. package/src/orchestration/recall-search-pipeline.ts +12 -0
  501. package/src/orchestration/semantic-consolidation-coordinator.ts +2 -1
  502. package/src/orchestration/tier-migration-coordinator.ts +23 -56
  503. package/src/orchestration/workspace-ops.test.ts +37 -0
  504. package/src/orchestration/workspace-ops.ts +5 -29
  505. package/src/orchestrator.ts +7 -8
  506. package/src/relay/mission-access.test.ts +11 -11
  507. package/src/relay/mission-ui.test.ts +3 -1
  508. package/src/storage/supersession-audit.ts +7 -1
  509. package/src/storage/supersession-side-effects.ts +17 -5
  510. package/src/storage/tombstone-blocked-capture-sync.ts +31 -0
  511. package/src/storage-contract/failure-semantics.test.ts +102 -0
  512. package/src/storage.ts +18 -19
  513. package/src/support-passport/access-http-base.ts +143 -0
  514. package/src/support-passport/access-http.ts +172 -0
  515. package/src/support-passport/access-operations.ts +272 -0
  516. package/src/support-passport/access-service-base.test.ts +193 -0
  517. package/src/support-passport/access-service-base.ts +176 -0
  518. package/src/support-passport/access-surface.test.ts +283 -0
  519. package/src/support-passport/access-surface.ts +286 -0
  520. package/src/support-passport/card-projection.test.ts +137 -0
  521. package/src/support-passport/card-projection.ts +348 -0
  522. package/src/support-passport/card-replacement.ts +126 -0
  523. package/src/support-passport/card-service-commit-forwarding.test.ts +160 -0
  524. package/src/support-passport/card-service.test.ts +2964 -0
  525. package/src/support-passport/card-service.ts +1184 -0
  526. package/src/support-passport/card-state.ts +158 -0
  527. package/src/support-passport/config-model-routing.test.ts +37 -0
  528. package/src/support-passport/config.test.ts +34 -0
  529. package/src/support-passport/config.ts +41 -0
  530. package/src/support-passport/contracts.test.ts +156 -0
  531. package/src/support-passport/contracts.ts +149 -0
  532. package/src/support-passport/errors.ts +30 -0
  533. package/src/support-passport/generated-batch.test.ts +185 -0
  534. package/src/support-passport/generated-batch.ts +338 -0
  535. package/src/support-passport/grant-contracts.ts +183 -0
  536. package/src/support-passport/grant-generated-batch-scope.test.ts +201 -0
  537. package/src/support-passport/grant-service-cache.test.ts +148 -0
  538. package/src/support-passport/grant-service-cancellation.test.ts +83 -0
  539. package/src/support-passport/grant-service-marker-cache.test.ts +62 -0
  540. package/src/support-passport/grant-service.test.ts +3496 -0
  541. package/src/support-passport/grant-service.ts +513 -0
  542. package/src/support-passport/grant-store-commit-hook.test.ts +123 -0
  543. package/src/support-passport/grant-store-order.test.ts +60 -0
  544. package/src/support-passport/grant-store-path-safety.test.ts +30 -0
  545. package/src/support-passport/grant-store-recovery.test.ts +448 -0
  546. package/src/support-passport/grant-store.ts +906 -0
  547. package/src/support-passport/index.ts +17 -0
  548. package/src/support-passport/mcp-tools.test.ts +222 -0
  549. package/src/support-passport/mcp-tools.ts +187 -0
  550. package/src/support-passport/model-adapter.test.ts +840 -0
  551. package/src/support-passport/model-adapter.ts +602 -0
  552. package/src/support-passport/model-audit-pinned-write.test.ts +59 -0
  553. package/src/support-passport/model-audit.ts +152 -0
  554. package/src/support-passport/model-bridge.test.ts +456 -0
  555. package/src/support-passport/model-bridge.ts +439 -0
  556. package/src/support-passport/model-contracts.ts +124 -0
  557. package/src/support-passport/model-service.test.ts +1731 -0
  558. package/src/support-passport/model-service.ts +399 -0
  559. package/src/support-passport/offline-sync-guard.ts +230 -0
  560. package/src/support-passport/owner-http.test.ts +671 -0
  561. package/src/support-passport/owner-lock.ts +70 -0
  562. package/src/support-passport/private-file.test.ts +99 -0
  563. package/src/support-passport/private-file.ts +498 -0
  564. package/src/support-passport/public-http.test.ts +476 -0
  565. package/src/support-passport/public-http.ts +601 -0
  566. package/src/support-passport/ui.test.ts +181 -0
  567. package/src/tier-routing.ts +28 -17
  568. package/src/training-export/converter.test.ts +24 -0
  569. package/src/training-export/converter.ts +2 -0
  570. package/src/types.ts +8 -1
  571. package/src/wearables/service.test.ts +13 -0
  572. package/src/wearables/service.ts +2 -0
  573. package/src/write-rate-limiter.test.ts +30 -6
  574. package/src/write-rate-limiter.ts +29 -18
  575. package/dist/chunk-3CSX3ETE.js.map +0 -1
  576. package/dist/chunk-47P3RYZP.js.map +0 -1
  577. package/dist/chunk-6LAPLZOS.js.map +0 -1
  578. package/dist/chunk-6R4G7N4S.js.map +0 -1
  579. package/dist/chunk-7BZOBA5J.js.map +0 -1
  580. package/dist/chunk-C23BYTJV.js.map +0 -1
  581. package/dist/chunk-CYF6WVE7.js.map +0 -1
  582. package/dist/chunk-G2LUMAUF.js.map +0 -1
  583. package/dist/chunk-GYPQL6XN.js.map +0 -1
  584. package/dist/chunk-JDZPNCMA.js.map +0 -1
  585. package/dist/chunk-JV5YUBIZ.js.map +0 -1
  586. package/dist/chunk-K4QS7LXU.js.map +0 -1
  587. package/dist/chunk-L6CQ7WIW.js.map +0 -1
  588. package/dist/chunk-MKQBXQKU.js.map +0 -1
  589. package/dist/chunk-NH5IR2WM.js.map +0 -1
  590. package/dist/chunk-PX2LSHYM.js.map +0 -1
  591. package/dist/chunk-QWGE2PUH.js.map +0 -1
  592. package/dist/chunk-RUMNY5DT.js.map +0 -1
  593. package/dist/chunk-S75M5ZRK.js.map +0 -1
  594. package/dist/chunk-T2JHZWH6.js.map +0 -1
  595. package/dist/chunk-UES4BHA2.js.map +0 -1
  596. package/dist/chunk-UTRO5UJU.js.map +0 -1
  597. package/dist/chunk-UU3G6GUP.js.map +0 -1
  598. package/dist/chunk-XUAMCLY4.js.map +0 -1
  599. package/dist/chunk-ZYLC7NFO.js.map +0 -1
  600. package/dist/contradiction-scan-HYLIRMJ2.js +0 -14
  601. package/dist/first-start-migration-626C5554.js.map +0 -1
  602. /package/dist/{auto-sync-TDHLZPVP.js.map → auto-sync-NR3GPCOA.js.map} +0 -0
  603. /package/dist/{chunk-LLJMAULE.js.map → chunk-2FKEIPIT.js.map} +0 -0
  604. /package/dist/{chunk-JBPKEARU.js.map → chunk-2QSZNTDO.js.map} +0 -0
  605. /package/dist/{chunk-PDDTI7IC.js.map → chunk-43SEBY2M.js.map} +0 -0
  606. /package/dist/{chunk-HWRD23DW.js.map → chunk-46SZBVDS.js.map} +0 -0
  607. /package/dist/{chunk-6HPHEFXT.js.map → chunk-5FD7JMTX.js.map} +0 -0
  608. /package/dist/{chunk-IBKR2TFR.js.map → chunk-6CYHUWCO.js.map} +0 -0
  609. /package/dist/{chunk-YN6ASZUG.js.map → chunk-6QPI2ITJ.js.map} +0 -0
  610. /package/dist/{chunk-NIS256NW.js.map → chunk-CIAI24TQ.js.map} +0 -0
  611. /package/dist/{chunk-7FGL6CGA.js.map → chunk-DVYRD4HY.js.map} +0 -0
  612. /package/dist/{chunk-G7Z6EENO.js.map → chunk-EKTP7MNS.js.map} +0 -0
  613. /package/dist/{chunk-RZ4XGKOJ.js.map → chunk-FFRTNF3L.js.map} +0 -0
  614. /package/dist/{chunk-VKXWK44Q.js.map → chunk-FONWBCVY.js.map} +0 -0
  615. /package/dist/{chunk-DZD576ZU.js.map → chunk-FPLM2TKD.js.map} +0 -0
  616. /package/dist/{chunk-ZPJ4QSGP.js.map → chunk-FTPONF6B.js.map} +0 -0
  617. /package/dist/{chunk-LJS7KUPV.js.map → chunk-FWX7W5PM.js.map} +0 -0
  618. /package/dist/{chunk-G4T7L557.js.map → chunk-GN3WRFJY.js.map} +0 -0
  619. /package/dist/{chunk-QT2FRYI4.js.map → chunk-H7NAZ3UB.js.map} +0 -0
  620. /package/dist/{chunk-APPFNGX6.js.map → chunk-HBUFQRIM.js.map} +0 -0
  621. /package/dist/{chunk-UU7TRFNE.js.map → chunk-HGJ6NJ4E.js.map} +0 -0
  622. /package/dist/{chunk-C4ZNGVK3.js.map → chunk-IKP5OYQQ.js.map} +0 -0
  623. /package/dist/{chunk-KQAFEZQX.js.map → chunk-IPLYGWQF.js.map} +0 -0
  624. /package/dist/{chunk-RDJRFDJY.js.map → chunk-IQ4NVWEF.js.map} +0 -0
  625. /package/dist/{chunk-CGVHPCP2.js.map → chunk-JYG4OLWH.js.map} +0 -0
  626. /package/dist/{chunk-WOPA3SGI.js.map → chunk-K26NWEOC.js.map} +0 -0
  627. /package/dist/{chunk-G7A5HLUS.js.map → chunk-KJH6W2I7.js.map} +0 -0
  628. /package/dist/{chunk-HOIRB77A.js.map → chunk-L6Z5OAS4.js.map} +0 -0
  629. /package/dist/{chunk-227UFSEQ.js.map → chunk-LEPOP46W.js.map} +0 -0
  630. /package/dist/{chunk-3JLPGJ43.js.map → chunk-MIH3CJPN.js.map} +0 -0
  631. /package/dist/{chunk-QHFV6VNU.js.map → chunk-MK5VEWCR.js.map} +0 -0
  632. /package/dist/{chunk-GUKBW4HL.js.map → chunk-NQMSEB5D.js.map} +0 -0
  633. /package/dist/{chunk-WRJVB3C2.js.map → chunk-PO7NXBG2.js.map} +0 -0
  634. /package/dist/{chunk-AZM4CCAC.js.map → chunk-QZLDRQ4I.js.map} +0 -0
  635. /package/dist/{chunk-THPPCISA.js.map → chunk-RBII7637.js.map} +0 -0
  636. /package/dist/{chunk-VMMQDEN5.js.map → chunk-TO7ZTWJW.js.map} +0 -0
  637. /package/dist/{chunk-K2TDK7GG.js.map → chunk-TWTUGCTY.js.map} +0 -0
  638. /package/dist/{chunk-HLYR2TQL.js.map → chunk-UCTS3DDH.js.map} +0 -0
  639. /package/dist/{chunk-JYIJNNN3.js.map → chunk-UG6VXIOK.js.map} +0 -0
  640. /package/dist/{chunk-WM65LU67.js.map → chunk-UKYS3NU5.js.map} +0 -0
  641. /package/dist/{chunk-WDBX6VER.js.map → chunk-UPLZNJKN.js.map} +0 -0
  642. /package/dist/{chunk-2GFK22OZ.js.map → chunk-V6ERBR7U.js.map} +0 -0
  643. /package/dist/{chunk-ZMYDYNI4.js.map → chunk-XZHE2DEN.js.map} +0 -0
  644. /package/dist/{chunk-MAXVH44E.js.map → chunk-Z54EM5YZ.js.map} +0 -0
  645. /package/dist/{chunk-YGLY6QFV.js.map → chunk-ZRZVLB7O.js.map} +0 -0
  646. /package/dist/{chunk-4IIFL7GC.js.map → chunk-ZUKIUXHQ.js.map} +0 -0
  647. /package/dist/{contradiction-scan-HYLIRMJ2.js.map → contradiction-scan-JDTBXRGW.js.map} +0 -0
  648. /package/dist/{purge-533FZLS4.js.map → purge-GB7PZHT2.js.map} +0 -0
@@ -0,0 +1,158 @@
1
+ import type { StorageManager } from "../index.js";
2
+ import type { MemoryFile } from "../types.js";
3
+ import {
4
+ SUPPORT_PASSPORT_ATTRIBUTE_KEYS,
5
+ type StoredSupportPassportCard,
6
+ activeSupportPassportReplacementPredecessorIds,
7
+ computeSupportPassportOwnerKey,
8
+ decodeSupportPassportNamespaceAttributes,
9
+ projectSupportPassportCard,
10
+ } from "./card-projection.js";
11
+ import { type SupportPassportCard, computeSupportPassportCardRevision } from "./contracts.js";
12
+ import { SupportPassportListCardsInputSchema, SupportPassportNamespaceSchema } from "./contracts.js";
13
+ import { SupportPassportError } from "./errors.js";
14
+
15
+ export interface SupportPassportOwnerScope {
16
+ principal: string;
17
+ namespace: string;
18
+ storage: StorageManager;
19
+ }
20
+
21
+ export interface SupportPassportCardServiceDependencies {
22
+ resolveOwner(principal: string): Promise<SupportPassportOwnerScope>;
23
+ now?: () => Date;
24
+ }
25
+
26
+ export function invalidInput(): SupportPassportError {
27
+ return new SupportPassportError("invalid_input", "The support card request is invalid.", 400);
28
+ }
29
+
30
+ export function isStorageConflict(error: unknown): error is SupportPassportError {
31
+ return error instanceof SupportPassportError && error.code === "storage_conflict";
32
+ }
33
+
34
+ export function once(callback: (() => void) | undefined): () => void {
35
+ let called = false;
36
+ return () => {
37
+ if (called) return;
38
+ called = true;
39
+ callback?.();
40
+ };
41
+ }
42
+
43
+ export function validateOwnerScope(owner: SupportPassportOwnerScope, principal: string): SupportPassportOwnerScope {
44
+ const requestedPrincipal = SupportPassportListCardsInputSchema.safeParse({ principal });
45
+ const namespace = SupportPassportNamespaceSchema.safeParse(owner.namespace);
46
+ const ownerPrincipal = SupportPassportListCardsInputSchema.safeParse({ principal: owner.principal });
47
+ if (
48
+ !requestedPrincipal.success ||
49
+ !namespace.success ||
50
+ !ownerPrincipal.success ||
51
+ ownerPrincipal.data.principal !== requestedPrincipal.data.principal
52
+ ) {
53
+ throw new SupportPassportError("card_data_invalid", "The support passport owner scope is invalid.", 500);
54
+ }
55
+ return { ...owner, principal: ownerPrincipal.data.principal, namespace: namespace.data };
56
+ }
57
+
58
+ export const MAX_OWNER_VISIBLE_CARDS = 100;
59
+
60
+ const OWNER_VISIBLE_STATUSES = new Set(["pending_review", "active"]);
61
+
62
+ export function revisionFor(
63
+ card: SupportPassportCard,
64
+ status: SupportPassportCard["status"],
65
+ updatedAt: string
66
+ ): string {
67
+ return computeSupportPassportCardRevision({
68
+ cardId: card.cardId,
69
+ title: card.title,
70
+ statement: card.statement,
71
+ category: card.category,
72
+ status,
73
+ updatedAt,
74
+ reviewBy: card.reviewBy,
75
+ });
76
+ }
77
+
78
+ export function projectRequiredCard(
79
+ memory: MemoryFile,
80
+ namespace: string,
81
+ principal: string
82
+ ): StoredSupportPassportCard {
83
+ const card = projectSupportPassportCard(memory);
84
+ if (!card) throw new SupportPassportError("card_data_invalid", "The support card data is invalid.", 500);
85
+ if (card.namespace !== namespace || card.owner !== computeSupportPassportOwnerKey(principal)) {
86
+ throw new SupportPassportError("card_not_found", "The support card was not found.", 404);
87
+ }
88
+ return card;
89
+ }
90
+
91
+ export function projectOwnedCard(
92
+ memory: MemoryFile,
93
+ namespace: string,
94
+ principal: string
95
+ ): StoredSupportPassportCard | null {
96
+ const card = projectSupportPassportCard(memory);
97
+ return card?.namespace === namespace && card.owner === computeSupportPassportOwnerKey(principal) ? card : null;
98
+ }
99
+
100
+ export function ownsMemory(memory: MemoryFile, namespace: string, principal: string): boolean {
101
+ const attributes = memory.frontmatter.structuredAttributes;
102
+ return (
103
+ attributes !== undefined &&
104
+ decodeSupportPassportNamespaceAttributes(attributes) === namespace &&
105
+ attributes[SUPPORT_PASSPORT_ATTRIBUTE_KEYS.owner] === computeSupportPassportOwnerKey(principal)
106
+ );
107
+ }
108
+
109
+ export function requireRevision(card: StoredSupportPassportCard, expectedRevision: string): void {
110
+ if (card.card.revision !== expectedRevision) {
111
+ throw new SupportPassportError("revision_conflict", "The support card changed after it was loaded.", 409);
112
+ }
113
+ }
114
+
115
+ export function requireStatus(card: StoredSupportPassportCard, status: SupportPassportCard["status"]): void {
116
+ if (card.card.status !== status) {
117
+ throw new SupportPassportError("invalid_card_status", `The support card must have status ${status}.`, 409);
118
+ }
119
+ }
120
+
121
+ export function ownerVisibleCards(storedCards: StoredSupportPassportCard[]): StoredSupportPassportCard[] {
122
+ const visibleCards = storedCards.filter(
123
+ (item) => OWNER_VISIBLE_STATUSES.has(item.card.status) && !item.draftReplacementPrepared
124
+ );
125
+ if (visibleCards.length <= MAX_OWNER_VISIBLE_CARDS) return visibleCards;
126
+ const cardsWithPendingReplacements = new Set(
127
+ visibleCards
128
+ .filter((item) => item.card.status === "pending_review")
129
+ .map((item) => item.memory.frontmatter.supersedes)
130
+ .filter((cardId): cardId is string => typeof cardId === "string")
131
+ );
132
+ return visibleCards.filter(
133
+ (item) => item.card.status !== "active" || !cardsWithPendingReplacements.has(item.card.cardId)
134
+ );
135
+ }
136
+
137
+ export function ownerListCards(storedCards: StoredSupportPassportCard[]): StoredSupportPassportCard[] {
138
+ const visibleCards = ownerVisibleCards(storedCards);
139
+ const byId = new Map(storedCards.map((item) => [item.card.cardId, item]));
140
+ const activeReplacementPredecessors = activeSupportPassportReplacementPredecessorIds(visibleCards);
141
+ const replacedDraftIds = new Set(
142
+ visibleCards
143
+ .filter(
144
+ (item) =>
145
+ item.card.status === "pending_review" &&
146
+ item.replacesDraftId !== undefined &&
147
+ byId.get(item.replacesDraftId)?.card.status === "pending_review"
148
+ )
149
+ .map((item) => item.replacesDraftId as string)
150
+ );
151
+ return visibleCards.filter((item) => {
152
+ if (activeReplacementPredecessors.has(item.card.cardId)) return false;
153
+ if (replacedDraftIds.has(item.card.cardId)) return false;
154
+ if (!item.replacesDraftId) return true;
155
+ const replacedStatus = byId.get(item.replacesDraftId)?.card.status;
156
+ return replacedStatus === "pending_review" || replacedStatus === "rejected";
157
+ });
158
+ }
@@ -0,0 +1,37 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ import { parseConfig } from "../config.js";
5
+
6
+ function withOpenaiBaseUrl(value: string, run: () => void): void {
7
+ const original = process.env.OPENAI_BASE_URL;
8
+ process.env.OPENAI_BASE_URL = value;
9
+ try {
10
+ run();
11
+ } finally {
12
+ if (original === undefined) delete process.env.OPENAI_BASE_URL;
13
+ else process.env.OPENAI_BASE_URL = original;
14
+ }
15
+ }
16
+
17
+ test("disabled direct models ignore an ambient OpenAI endpoint", () => {
18
+ withOpenaiBaseUrl("not-an-absolute-url", () => {
19
+ const config = parseConfig({
20
+ openaiApiKey: false,
21
+ localLlmEnabled: true,
22
+ });
23
+
24
+ assert.equal(config.openaiApiKey, undefined);
25
+ assert.equal(config.openaiBaseUrl, undefined);
26
+ assert.equal(config.localLlmEnabled, true);
27
+ });
28
+ });
29
+
30
+ test("direct models still validate an ambient OpenAI endpoint", () => {
31
+ withOpenaiBaseUrl("not-an-absolute-url", () => {
32
+ assert.throws(
33
+ () => parseConfig({ openaiApiKey: "fixture-key" }),
34
+ /OPENAI_BASE_URL must be an absolute HTTP or HTTPS URL/,
35
+ );
36
+ });
37
+ });
@@ -0,0 +1,34 @@
1
+ import assert from "node:assert/strict";
2
+ import { test } from "node:test";
3
+
4
+ import { parseConfig } from "../config.js";
5
+
6
+ test("support passport config defaults off and accepts an explicit opt-in", () => {
7
+ assert.deepEqual(parseConfig({}).supportPassport, { enabled: false, trustedProxyAddresses: [] });
8
+ assert.deepEqual(parseConfig({ supportPassport: { enabled: true } }).supportPassport, {
9
+ enabled: true,
10
+ trustedProxyAddresses: [],
11
+ });
12
+ assert.deepEqual(
13
+ parseConfig({
14
+ supportPassport: { enabled: "true", trustedProxyAddresses: ["127.0.0.1", "::1"] },
15
+ }).supportPassport,
16
+ { enabled: true, trustedProxyAddresses: ["127.0.0.1", "::1"] }
17
+ );
18
+ for (const enabled of ["false", "0", "no", "off"]) {
19
+ assert.deepEqual(parseConfig({ supportPassport: { enabled } }).supportPassport, {
20
+ enabled: false,
21
+ trustedProxyAddresses: [],
22
+ });
23
+ }
24
+ });
25
+
26
+ test("support passport config rejects malformed and unknown fields", () => {
27
+ assert.throws(() => parseConfig({ supportPassport: true }), /supportPassport/);
28
+ assert.throws(() => parseConfig({ supportPassport: { enabled: "maybe" } }), /supportPassport/);
29
+ assert.throws(
30
+ () => parseConfig({ supportPassport: { trustedProxyAddresses: ["not-an-address"] } }),
31
+ /supportPassport/
32
+ );
33
+ assert.throws(() => parseConfig({ supportPassport: { enabled: true, extra: true } }), /supportPassport/);
34
+ });
@@ -0,0 +1,41 @@
1
+ import { isIP } from "node:net";
2
+
3
+ import { z } from "zod";
4
+
5
+ import { coerceBool } from "../connectors/coerce.js";
6
+ import type { SupportPassportConfig } from "../types.js";
7
+
8
+ export const DEFAULT_SUPPORT_PASSPORT_CONFIG: SupportPassportConfig = {
9
+ enabled: false,
10
+ trustedProxyAddresses: [],
11
+ };
12
+
13
+ export function parseSupportPassportConfig(raw: unknown): SupportPassportConfig {
14
+ if (raw === undefined) {
15
+ return {
16
+ ...DEFAULT_SUPPORT_PASSPORT_CONFIG,
17
+ trustedProxyAddresses: [...DEFAULT_SUPPORT_PASSPORT_CONFIG.trustedProxyAddresses],
18
+ };
19
+ }
20
+ const schema = z
21
+ .object({
22
+ enabled: z
23
+ .preprocess((value) => {
24
+ if (value === undefined) return false;
25
+ return coerceBool(value) ?? value;
26
+ }, z.boolean())
27
+ .default(false),
28
+ trustedProxyAddresses: z
29
+ .array(z.string().trim().refine((value) => isIP(value) !== 0, "must contain IP addresses"))
30
+ .max(32)
31
+ .default([]),
32
+ })
33
+ .strict();
34
+ const parsed = schema.safeParse(raw);
35
+ if (!parsed.success) {
36
+ throw new Error(
37
+ "supportPassport must contain only enabled and up to 32 trustedProxyAddresses IP addresses"
38
+ );
39
+ }
40
+ return parsed.data;
41
+ }
@@ -0,0 +1,156 @@
1
+ import assert from "node:assert/strict";
2
+ import { test } from "node:test";
3
+
4
+ import {
5
+ SupportPassportCardListSchema,
6
+ SupportPassportCardSchema,
7
+ SupportPassportManualDraftInputSchema,
8
+ SupportPassportNamespaceSchema,
9
+ SupportPassportReplaceCardInputSchema,
10
+ SupportPassportSourceMemoryIdSchema,
11
+ computeSupportPassportCardRevision,
12
+ } from "./contracts.js";
13
+
14
+ function makeCard(cardId: string) {
15
+ const fields = {
16
+ cardId,
17
+ title: "Quiet space",
18
+ statement: "Offer me a quiet place and time.",
19
+ category: "environment" as const,
20
+ status: "active" as const,
21
+ updatedAt: "2026-08-11T12:00:00.000Z",
22
+ reviewBy: "2027-02-07T12:00:00.000Z",
23
+ };
24
+ return { ...fields, revision: computeSupportPassportCardRevision(fields) };
25
+ }
26
+
27
+ test("the public support card contract rejects unknown fields", () => {
28
+ assert.equal(SupportPassportCardSchema.safeParse({ ...makeCard("card-1"), note: "private" }).success, false);
29
+ });
30
+
31
+ test("the support card list contract rejects duplicate card IDs", () => {
32
+ const card = makeCard("card-1");
33
+ assert.equal(SupportPassportCardListSchema.safeParse([card, card]).success, false);
34
+ });
35
+
36
+ test("manual and replacement drafts require the owner's review date", () => {
37
+ const draft = {
38
+ principal: "owner:alice",
39
+ title: "Quiet space",
40
+ statement: "Offer me a quiet place and time.",
41
+ category: "environment",
42
+ };
43
+ assert.equal(SupportPassportManualDraftInputSchema.safeParse(draft).success, false);
44
+ assert.equal(
45
+ SupportPassportReplaceCardInputSchema.safeParse({
46
+ ...draft,
47
+ cardId: "card-1",
48
+ expectedRevision: "a".repeat(64),
49
+ }).success,
50
+ false
51
+ );
52
+ });
53
+
54
+ test("support card dates reject invalid calendar values and timezone offsets", () => {
55
+ for (const reviewBy of ["2027-02-31T12:00:00Z", "2027-01-01T00:00:00+25:00"]) {
56
+ const draft = {
57
+ principal: "owner:alice",
58
+ title: "Quiet space",
59
+ statement: "Offer me a quiet place and time.",
60
+ category: "environment",
61
+ reviewBy,
62
+ };
63
+ assert.equal(SupportPassportManualDraftInputSchema.safeParse(draft).success, false);
64
+ assert.equal(
65
+ SupportPassportReplaceCardInputSchema.safeParse({
66
+ ...draft,
67
+ cardId: "card-1",
68
+ expectedRevision: "a".repeat(64),
69
+ }).success,
70
+ false
71
+ );
72
+ assert.equal(SupportPassportCardSchema.safeParse({ ...makeCard("card-1"), reviewBy }).success, false);
73
+ }
74
+ });
75
+
76
+ test("support card titles reject attribute delimiters and line breaks", () => {
77
+ for (const title of ["Quiet ] space", "Quiet\nspace", "Quiet\rspace"]) {
78
+ const manualDraft = {
79
+ principal: "owner:alice",
80
+ title,
81
+ statement: "Offer me a quiet place and time.",
82
+ category: "environment",
83
+ reviewBy: "2027-02-07T12:00:00.000Z",
84
+ };
85
+ assert.equal(SupportPassportManualDraftInputSchema.safeParse(manualDraft).success, false);
86
+ assert.equal(
87
+ SupportPassportReplaceCardInputSchema.safeParse({
88
+ ...manualDraft,
89
+ cardId: "card-1",
90
+ expectedRevision: "a".repeat(64),
91
+ }).success,
92
+ false
93
+ );
94
+ assert.equal(SupportPassportCardSchema.safeParse({ ...makeCard("card-1"), title }).success, false);
95
+ }
96
+ });
97
+
98
+ test("support passport namespaces preserve configured default identities", () => {
99
+ for (const namespace of ["alice/bob", "alice\\bob", "alice]bob", "alice..bob", "alice\nbob", "alice\0bob"]) {
100
+ assert.equal(SupportPassportNamespaceSchema.safeParse(namespace).success, true);
101
+ }
102
+ for (const namespace of ["", " team", "team "]) {
103
+ assert.equal(SupportPassportNamespaceSchema.safeParse(namespace).success, false);
104
+ }
105
+ for (const namespace of [
106
+ "team.alpha-1",
107
+ "team support:primary",
108
+ "tenant/default",
109
+ "alice\\bob",
110
+ "alice]bob",
111
+ "alice..bob",
112
+ "alice\nbob",
113
+ "alice\0bob",
114
+ "n".repeat(4096),
115
+ ]) {
116
+ assert.equal(SupportPassportNamespaceSchema.safeParse(namespace).success, true);
117
+ }
118
+ });
119
+
120
+ test("source memory IDs use the core opaque ID contract", () => {
121
+ for (const memoryId of ["Imported memory / café 1", "team,care]note", "記憶 1"]) {
122
+ assert.equal(SupportPassportSourceMemoryIdSchema.safeParse(memoryId).success, true);
123
+ }
124
+ assert.equal(SupportPassportSourceMemoryIdSchema.safeParse(" ").success, false);
125
+ assert.equal(SupportPassportSourceMemoryIdSchema.safeParse("m".repeat(513)).success, false);
126
+ assert.equal(SupportPassportCardSchema.safeParse({ ...makeCard("card/one"), cardId: "card/one" }).success, false);
127
+ });
128
+
129
+ test("support card revisions change when any public field changes", () => {
130
+ const initial = makeCard("card-1");
131
+ const changed = computeSupportPassportCardRevision({
132
+ cardId: initial.cardId,
133
+ title: initial.title,
134
+ statement: "Offer me a quiet room and time.",
135
+ category: initial.category,
136
+ status: initial.status,
137
+ updatedAt: initial.updatedAt,
138
+ reviewBy: initial.reviewBy,
139
+ });
140
+ assert.notEqual(changed, initial.revision);
141
+ });
142
+
143
+ test("support card revisions ignore object key insertion order", () => {
144
+ const initial = makeCard("card-1");
145
+ const reordered = {
146
+ reviewBy: initial.reviewBy,
147
+ updatedAt: initial.updatedAt,
148
+ status: initial.status,
149
+ category: initial.category,
150
+ statement: initial.statement,
151
+ title: initial.title,
152
+ cardId: initial.cardId,
153
+ };
154
+
155
+ assert.equal(computeSupportPassportCardRevision(reordered), initial.revision);
156
+ });
@@ -0,0 +1,149 @@
1
+ import { createHash } from "node:crypto";
2
+ import { z } from "zod";
3
+
4
+ import { normalizeNamespaceIdentity } from "../namespaces/identity.js";
5
+ import { parseIsoOffsetTimestamp } from "../utils/iso-timestamp.js";
6
+
7
+ export const SUPPORT_PASSPORT_CARD_CATEGORIES = [
8
+ "communication",
9
+ "environment",
10
+ "transitions",
11
+ "sensory",
12
+ "regulation",
13
+ "interests",
14
+ "other",
15
+ ] as const;
16
+
17
+ export const SUPPORT_PASSPORT_CARD_STATUSES = [
18
+ "pending_review",
19
+ "active",
20
+ "rejected",
21
+ "superseded",
22
+ "archived",
23
+ ] as const;
24
+
25
+ export const SupportPassportCardCategorySchema = z.enum(SUPPORT_PASSPORT_CARD_CATEGORIES);
26
+ export const SupportPassportCardStatusSchema = z.enum(SUPPORT_PASSPORT_CARD_STATUSES);
27
+ export const SupportPassportCardTitleSchema = z
28
+ .string()
29
+ .trim()
30
+ .min(1)
31
+ .max(80)
32
+ .refine((title) => !title.includes("]") && !title.includes("\n") && !title.includes("\r"), {
33
+ message: "card titles cannot contain closing brackets or line breaks",
34
+ });
35
+
36
+ const IsoTimestampSchema = z
37
+ .string()
38
+ .datetime({ offset: true })
39
+ .refine((value) => parseIsoOffsetTimestamp(value) !== null, {
40
+ message: "timestamps must be valid ISO 8601 values",
41
+ });
42
+ export const SupportPassportNamespaceSchema = z
43
+ .string()
44
+ .min(1)
45
+ .refine((namespace) => namespace === normalizeNamespaceIdentity(namespace), {
46
+ message: "namespaces must be canonical",
47
+ });
48
+ export const SupportPassportMemoryIdSchema = z
49
+ .string()
50
+ .trim()
51
+ .min(1)
52
+ .max(128)
53
+ .regex(/^[A-Za-z0-9._:-]+$/);
54
+ export const SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH = 512;
55
+ export const SupportPassportSourceMemoryIdSchema = z
56
+ .string()
57
+ .trim()
58
+ .min(1)
59
+ .max(SUPPORT_PASSPORT_SOURCE_MEMORY_ID_MAX_LENGTH);
60
+
61
+ export const SupportPassportCardSchema = z
62
+ .object({
63
+ cardId: SupportPassportMemoryIdSchema,
64
+ title: SupportPassportCardTitleSchema,
65
+ statement: z.string().trim().min(1).max(500),
66
+ category: SupportPassportCardCategorySchema,
67
+ status: SupportPassportCardStatusSchema,
68
+ updatedAt: IsoTimestampSchema,
69
+ reviewBy: IsoTimestampSchema,
70
+ revision: z.string().regex(/^[a-f0-9]{64}$/),
71
+ })
72
+ .strict();
73
+
74
+ export const SupportPassportCardListSchema = z
75
+ .array(SupportPassportCardSchema)
76
+ .max(100)
77
+ .superRefine((cards, ctx) => {
78
+ const seen = new Set<string>();
79
+ for (const [index, card] of cards.entries()) {
80
+ if (seen.has(card.cardId)) {
81
+ ctx.addIssue({
82
+ code: z.ZodIssueCode.custom,
83
+ message: "card IDs must be unique",
84
+ path: [index, "cardId"],
85
+ });
86
+ }
87
+ seen.add(card.cardId);
88
+ }
89
+ });
90
+
91
+ export const SupportPassportListCardsInputSchema = z
92
+ .object({
93
+ principal: z.string().trim().min(1).max(512),
94
+ })
95
+ .strict();
96
+
97
+ export const SupportPassportManualDraftInputSchema = z
98
+ .object({
99
+ principal: z.string().trim().min(1).max(512),
100
+ title: SupportPassportCardTitleSchema,
101
+ statement: z.string().trim().min(1).max(500),
102
+ category: SupportPassportCardCategorySchema,
103
+ reviewBy: IsoTimestampSchema,
104
+ })
105
+ .strict();
106
+
107
+ export const SupportPassportCardMutationInputSchema = z
108
+ .object({
109
+ principal: z.string().trim().min(1).max(512),
110
+ cardId: SupportPassportMemoryIdSchema,
111
+ expectedRevision: z.string().regex(/^[a-f0-9]{64}$/),
112
+ reasonCode: z
113
+ .string()
114
+ .trim()
115
+ .min(1)
116
+ .max(64)
117
+ .regex(/^[a-z0-9-]+$/)
118
+ .optional(),
119
+ })
120
+ .strict();
121
+
122
+ export const SupportPassportReplaceCardInputSchema = SupportPassportCardMutationInputSchema.extend({
123
+ title: SupportPassportCardTitleSchema,
124
+ statement: z.string().trim().min(1).max(500),
125
+ category: SupportPassportCardCategorySchema,
126
+ reviewBy: IsoTimestampSchema,
127
+ }).strict();
128
+
129
+ export type SupportPassportCard = z.infer<typeof SupportPassportCardSchema>;
130
+ export type SupportPassportCardCategory = z.infer<typeof SupportPassportCardCategorySchema>;
131
+ export type SupportPassportCardStatus = z.infer<typeof SupportPassportCardStatusSchema>;
132
+ export type SupportPassportManualDraftInput = z.input<typeof SupportPassportManualDraftInputSchema>;
133
+ export type SupportPassportCardMutationInput = z.input<typeof SupportPassportCardMutationInputSchema>;
134
+ export type SupportPassportReplaceCardInput = z.input<typeof SupportPassportReplaceCardInputSchema>;
135
+
136
+ type RevisionFields = Omit<SupportPassportCard, "revision">;
137
+
138
+ export function computeSupportPassportCardRevision(fields: RevisionFields): string {
139
+ const canonicalFields = {
140
+ cardId: fields.cardId,
141
+ category: fields.category,
142
+ reviewBy: fields.reviewBy,
143
+ statement: fields.statement,
144
+ status: fields.status,
145
+ title: fields.title,
146
+ updatedAt: fields.updatedAt,
147
+ };
148
+ return createHash("sha256").update(JSON.stringify(canonicalFields)).digest("hex");
149
+ }
@@ -0,0 +1,30 @@
1
+ export type SupportPassportErrorCode =
2
+ | "card_data_invalid"
3
+ | "card_not_found"
4
+ | "consent_required"
5
+ | "feature_disabled"
6
+ | "forbidden"
7
+ | "grant_expired"
8
+ | "grant_gone"
9
+ | "grant_not_found"
10
+ | "grant_stale"
11
+ | "invalid_card_status"
12
+ | "invalid_input"
13
+ | "model_output_invalid"
14
+ | "provider_unavailable"
15
+ | "rate_limited"
16
+ | "revision_conflict"
17
+ | "state_conflict"
18
+ | "storage_conflict";
19
+
20
+ export class SupportPassportError extends Error {
21
+ readonly code: SupportPassportErrorCode;
22
+ readonly status: number;
23
+
24
+ constructor(code: SupportPassportErrorCode, message: string, status: number) {
25
+ super(message);
26
+ this.name = "SupportPassportError";
27
+ this.code = code;
28
+ this.status = status;
29
+ }
30
+ }