@nxuss/lemma 1.16.1 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/bin/init.js +101 -11
  2. package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
  3. package/dist/cjs/cli/lemma-proxy.js +19 -11
  4. package/dist/cjs/cli/lemma-proxy.js.map +1 -1
  5. package/dist/cjs/cloud/TenantCache.d.ts.map +1 -1
  6. package/dist/cjs/cloud/TenantCache.js +0 -4
  7. package/dist/cjs/cloud/TenantCache.js.map +1 -1
  8. package/dist/cjs/cloud/identity/ApiKey.d.ts +32 -0
  9. package/dist/cjs/cloud/identity/ApiKey.d.ts.map +1 -0
  10. package/dist/cjs/cloud/identity/ApiKey.js +59 -0
  11. package/dist/cjs/cloud/identity/ApiKey.js.map +1 -0
  12. package/dist/cjs/cloud/identity/PlanPolicy.d.ts +79 -0
  13. package/dist/cjs/cloud/identity/PlanPolicy.d.ts.map +1 -0
  14. package/dist/cjs/cloud/identity/PlanPolicy.js +135 -0
  15. package/dist/cjs/cloud/identity/PlanPolicy.js.map +1 -0
  16. package/dist/cjs/cloud/identity/RateLimiter.d.ts +49 -0
  17. package/dist/cjs/cloud/identity/RateLimiter.d.ts.map +1 -0
  18. package/dist/cjs/cloud/identity/RateLimiter.js +75 -0
  19. package/dist/cjs/cloud/identity/RateLimiter.js.map +1 -0
  20. package/dist/cjs/cloud/identity/TenantResolver.d.ts +19 -0
  21. package/dist/cjs/cloud/identity/TenantResolver.d.ts.map +1 -0
  22. package/dist/cjs/cloud/identity/TenantResolver.js +40 -0
  23. package/dist/cjs/cloud/identity/TenantResolver.js.map +1 -0
  24. package/dist/cjs/cloud/identity/authenticateV2.d.ts +48 -0
  25. package/dist/cjs/cloud/identity/authenticateV2.d.ts.map +1 -0
  26. package/dist/cjs/cloud/identity/authenticateV2.js +66 -0
  27. package/dist/cjs/cloud/identity/authenticateV2.js.map +1 -0
  28. package/dist/cjs/cloud/identity/identityStore.d.ts +56 -0
  29. package/dist/cjs/cloud/identity/identityStore.d.ts.map +1 -0
  30. package/dist/cjs/cloud/identity/identityStore.js +99 -0
  31. package/dist/cjs/cloud/identity/identityStore.js.map +1 -0
  32. package/dist/cjs/cloud/identity/index.d.ts +14 -0
  33. package/dist/cjs/cloud/identity/index.d.ts.map +1 -0
  34. package/dist/cjs/cloud/identity/index.js +30 -0
  35. package/dist/cjs/cloud/identity/index.js.map +1 -0
  36. package/dist/cjs/cloud/metering/TokenCounter.d.ts +26 -0
  37. package/dist/cjs/cloud/metering/TokenCounter.d.ts.map +1 -0
  38. package/dist/cjs/cloud/metering/TokenCounter.js +80 -0
  39. package/dist/cjs/cloud/metering/TokenCounter.js.map +1 -0
  40. package/dist/cjs/cloud/metering/UsageLedger.d.ts +68 -0
  41. package/dist/cjs/cloud/metering/UsageLedger.d.ts.map +1 -0
  42. package/dist/cjs/cloud/metering/UsageLedger.js +106 -0
  43. package/dist/cjs/cloud/metering/UsageLedger.js.map +1 -0
  44. package/dist/cjs/cloud/metering/index.d.ts +12 -0
  45. package/dist/cjs/cloud/metering/index.d.ts.map +1 -0
  46. package/dist/cjs/cloud/metering/index.js +28 -0
  47. package/dist/cjs/cloud/metering/index.js.map +1 -0
  48. package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts +53 -0
  49. package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
  50. package/dist/cjs/cloud/scrub/StatelessScrubber.js +203 -0
  51. package/dist/cjs/cloud/scrub/StatelessScrubber.js.map +1 -0
  52. package/dist/cjs/cloud/scrub/index.d.ts +5 -0
  53. package/dist/cjs/cloud/scrub/index.d.ts.map +1 -0
  54. package/dist/cjs/cloud/scrub/index.js +21 -0
  55. package/dist/cjs/cloud/scrub/index.js.map +1 -0
  56. package/dist/cjs/cloud/store/FileBrainStore.d.ts +26 -0
  57. package/dist/cjs/cloud/store/FileBrainStore.d.ts.map +1 -0
  58. package/dist/cjs/cloud/store/FileBrainStore.js +219 -0
  59. package/dist/cjs/cloud/store/FileBrainStore.js.map +1 -0
  60. package/dist/cjs/cloud/store/PostgresBrainStore.d.ts +50 -0
  61. package/dist/cjs/cloud/store/PostgresBrainStore.d.ts.map +1 -0
  62. package/dist/cjs/cloud/store/PostgresBrainStore.js +181 -0
  63. package/dist/cjs/cloud/store/PostgresBrainStore.js.map +1 -0
  64. package/dist/cjs/cloud/store/index.d.ts +6 -0
  65. package/dist/cjs/cloud/store/index.d.ts.map +1 -0
  66. package/dist/cjs/cloud/store/index.js +22 -0
  67. package/dist/cjs/cloud/store/index.js.map +1 -0
  68. package/dist/cjs/cloud/types.d.ts +0 -4
  69. package/dist/cjs/cloud/types.d.ts.map +1 -1
  70. package/dist/cjs/cloud/types.js +1 -3
  71. package/dist/cjs/cloud/types.js.map +1 -1
  72. package/dist/cjs/cloud/v2/app.d.ts +15 -0
  73. package/dist/cjs/cloud/v2/app.d.ts.map +1 -0
  74. package/dist/cjs/cloud/v2/app.js +63 -0
  75. package/dist/cjs/cloud/v2/app.js.map +1 -0
  76. package/dist/cjs/cloud/v2/routes/index.d.ts +24 -0
  77. package/dist/cjs/cloud/v2/routes/index.d.ts.map +1 -0
  78. package/dist/cjs/cloud/v2/routes/index.js +35 -0
  79. package/dist/cjs/cloud/v2/routes/index.js.map +1 -0
  80. package/dist/cjs/cloud/v2/routes/memories.d.ts +83 -0
  81. package/dist/cjs/cloud/v2/routes/memories.d.ts.map +1 -0
  82. package/dist/cjs/cloud/v2/routes/memories.js +249 -0
  83. package/dist/cjs/cloud/v2/routes/memories.js.map +1 -0
  84. package/dist/cjs/cloud/v2/routes/recall.d.ts +33 -0
  85. package/dist/cjs/cloud/v2/routes/recall.d.ts.map +1 -0
  86. package/dist/cjs/cloud/v2/routes/recall.js +51 -0
  87. package/dist/cjs/cloud/v2/routes/recall.js.map +1 -0
  88. package/dist/cjs/cloud/v2/routes/scrub.d.ts +13 -0
  89. package/dist/cjs/cloud/v2/routes/scrub.d.ts.map +1 -0
  90. package/dist/cjs/cloud/v2/routes/scrub.js +82 -0
  91. package/dist/cjs/cloud/v2/routes/scrub.js.map +1 -0
  92. package/dist/cjs/cloud/v2/routes/usage.d.ts +18 -0
  93. package/dist/cjs/cloud/v2/routes/usage.d.ts.map +1 -0
  94. package/dist/cjs/cloud/v2/routes/usage.js +18 -0
  95. package/dist/cjs/cloud/v2/routes/usage.js.map +1 -0
  96. package/dist/cjs/cloud/v2/routes/verify.d.ts +35 -0
  97. package/dist/cjs/cloud/v2/routes/verify.d.ts.map +1 -0
  98. package/dist/cjs/cloud/v2/routes/verify.js +43 -0
  99. package/dist/cjs/cloud/v2/routes/verify.js.map +1 -0
  100. package/dist/cjs/cloud/v2/server.d.ts +27 -0
  101. package/dist/cjs/cloud/v2/server.d.ts.map +1 -0
  102. package/dist/cjs/cloud/v2/server.js +47 -0
  103. package/dist/cjs/cloud/v2/server.js.map +1 -0
  104. package/dist/cjs/contracts/api-v2.types.d.ts +103 -0
  105. package/dist/cjs/contracts/api-v2.types.d.ts.map +1 -0
  106. package/dist/cjs/contracts/api-v2.types.js +3 -0
  107. package/dist/cjs/contracts/api-v2.types.js.map +1 -0
  108. package/dist/cjs/contracts/errors.d.ts +40 -0
  109. package/dist/cjs/contracts/errors.d.ts.map +1 -0
  110. package/dist/cjs/contracts/errors.js +50 -0
  111. package/dist/cjs/contracts/errors.js.map +1 -0
  112. package/dist/cjs/contracts/evidence.d.ts +49 -0
  113. package/dist/cjs/contracts/evidence.d.ts.map +1 -0
  114. package/dist/cjs/contracts/evidence.js +12 -0
  115. package/dist/cjs/contracts/evidence.js.map +1 -0
  116. package/dist/cjs/contracts/index.d.ts +10 -0
  117. package/dist/cjs/contracts/index.d.ts.map +1 -0
  118. package/dist/cjs/contracts/index.js +26 -0
  119. package/dist/cjs/contracts/index.js.map +1 -0
  120. package/dist/cjs/contracts/store.d.ts +30 -0
  121. package/dist/cjs/contracts/store.d.ts.map +1 -0
  122. package/dist/cjs/contracts/store.js +3 -0
  123. package/dist/cjs/contracts/store.js.map +1 -0
  124. package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
  125. package/dist/cjs/mcp/tool-profiles.js +46 -1
  126. package/dist/cjs/mcp/tool-profiles.js.map +1 -1
  127. package/dist/cjs/mcp/tools.d.ts +2 -0
  128. package/dist/cjs/mcp/tools.d.ts.map +1 -1
  129. package/dist/cjs/mcp/tools.js +319 -30
  130. package/dist/cjs/mcp/tools.js.map +1 -1
  131. package/dist/cjs/pr-review/bridge/BrainBridge.js +1 -1
  132. package/dist/cjs/pr-review/bridge/BrainBridge.js.map +1 -1
  133. package/dist/cjs/subconscious/BrainEmbeddings.d.ts +59 -0
  134. package/dist/cjs/subconscious/BrainEmbeddings.d.ts.map +1 -0
  135. package/dist/cjs/subconscious/BrainEmbeddings.js +222 -0
  136. package/dist/cjs/subconscious/BrainEmbeddings.js.map +1 -0
  137. package/dist/cjs/subconscious/GitIngest.js +2 -2
  138. package/dist/cjs/subconscious/GitIngest.js.map +1 -1
  139. package/dist/cjs/subconscious/TheBrainV2.d.ts +327 -9
  140. package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
  141. package/dist/cjs/subconscious/TheBrainV2.js +952 -98
  142. package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
  143. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +16 -0
  144. package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
  145. package/dist/cjs/subconscious/freshness/LocalFsResolver.js +74 -0
  146. package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -0
  147. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
  148. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
  149. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js +24 -0
  150. package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
  151. package/dist/cjs/subconscious/freshness/index.d.ts +10 -0
  152. package/dist/cjs/subconscious/freshness/index.d.ts.map +1 -0
  153. package/dist/cjs/subconscious/freshness/index.js +26 -0
  154. package/dist/cjs/subconscious/freshness/index.js.map +1 -0
  155. package/dist/cjs/utils/ConversationCheckpoint.js +1 -1
  156. package/dist/cjs/utils/ConversationCheckpoint.js.map +1 -1
  157. package/dist/cjs/utils/ProjectIdentity.d.ts +12 -0
  158. package/dist/cjs/utils/ProjectIdentity.d.ts.map +1 -0
  159. package/dist/cjs/utils/ProjectIdentity.js +44 -0
  160. package/dist/cjs/utils/ProjectIdentity.js.map +1 -0
  161. package/dist/cjs/utils/PromptPatternCache.d.ts.map +1 -1
  162. package/dist/cjs/utils/PromptPatternCache.js +12 -2
  163. package/dist/cjs/utils/PromptPatternCache.js.map +1 -1
  164. package/dist/cjs/utils/RepeatGuard.d.ts.map +1 -1
  165. package/dist/cjs/utils/RepeatGuard.js +10 -2
  166. package/dist/cjs/utils/RepeatGuard.js.map +1 -1
  167. package/dist/cjs/utils/StateHashCache.d.ts +5 -0
  168. package/dist/cjs/utils/StateHashCache.d.ts.map +1 -1
  169. package/dist/cjs/utils/StateHashCache.js +40 -16
  170. package/dist/cjs/utils/StateHashCache.js.map +1 -1
  171. package/dist/esm/api/dashboardRoutes.d.ts +3 -3
  172. package/dist/esm/api/dashboardRoutes.js +1 -1
  173. package/dist/esm/api/server.d.ts +4 -4
  174. package/dist/esm/api/server.js +3 -3
  175. package/dist/esm/autopilot/AutopilotWatcher.js +3 -3
  176. package/dist/esm/autopilot/Notifier.d.ts +1 -1
  177. package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
  178. package/dist/esm/cli/lemma-proxy.js +33 -25
  179. package/dist/esm/cli/lemma-proxy.js.map +1 -1
  180. package/dist/esm/cli/stack.d.ts +4 -4
  181. package/dist/esm/cli/stack.js +5 -5
  182. package/dist/esm/cloud/KeyManager.d.ts +1 -1
  183. package/dist/esm/cloud/KeyManager.js +1 -1
  184. package/dist/esm/cloud/TenantCache.d.ts +1 -1
  185. package/dist/esm/cloud/TenantCache.d.ts.map +1 -1
  186. package/dist/esm/cloud/TenantCache.js +0 -4
  187. package/dist/esm/cloud/TenantCache.js.map +1 -1
  188. package/dist/esm/cloud/identity/ApiKey.d.ts +32 -0
  189. package/dist/esm/cloud/identity/ApiKey.d.ts.map +1 -0
  190. package/dist/esm/cloud/identity/ApiKey.js +49 -0
  191. package/dist/esm/cloud/identity/ApiKey.js.map +1 -0
  192. package/dist/esm/cloud/identity/PlanPolicy.d.ts +79 -0
  193. package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -0
  194. package/dist/esm/cloud/identity/PlanPolicy.js +129 -0
  195. package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -0
  196. package/dist/esm/cloud/identity/RateLimiter.d.ts +49 -0
  197. package/dist/esm/cloud/identity/RateLimiter.d.ts.map +1 -0
  198. package/dist/esm/cloud/identity/RateLimiter.js +69 -0
  199. package/dist/esm/cloud/identity/RateLimiter.js.map +1 -0
  200. package/dist/esm/cloud/identity/TenantResolver.d.ts +19 -0
  201. package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -0
  202. package/dist/esm/cloud/identity/TenantResolver.js +36 -0
  203. package/dist/esm/cloud/identity/TenantResolver.js.map +1 -0
  204. package/dist/esm/cloud/identity/authenticateV2.d.ts +48 -0
  205. package/dist/esm/cloud/identity/authenticateV2.d.ts.map +1 -0
  206. package/dist/esm/cloud/identity/authenticateV2.js +62 -0
  207. package/dist/esm/cloud/identity/authenticateV2.js.map +1 -0
  208. package/dist/esm/cloud/identity/identityStore.d.ts +56 -0
  209. package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -0
  210. package/dist/esm/cloud/identity/identityStore.js +94 -0
  211. package/dist/esm/cloud/identity/identityStore.js.map +1 -0
  212. package/dist/esm/cloud/identity/index.d.ts +14 -0
  213. package/dist/esm/cloud/identity/index.d.ts.map +1 -0
  214. package/dist/esm/cloud/identity/index.js +14 -0
  215. package/dist/esm/cloud/identity/index.js.map +1 -0
  216. package/dist/esm/cloud/index.d.ts +3 -3
  217. package/dist/esm/cloud/index.js +3 -3
  218. package/dist/esm/cloud/metering/TokenCounter.d.ts +26 -0
  219. package/dist/esm/cloud/metering/TokenCounter.d.ts.map +1 -0
  220. package/dist/esm/cloud/metering/TokenCounter.js +76 -0
  221. package/dist/esm/cloud/metering/TokenCounter.js.map +1 -0
  222. package/dist/esm/cloud/metering/UsageLedger.d.ts +68 -0
  223. package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -0
  224. package/dist/esm/cloud/metering/UsageLedger.js +98 -0
  225. package/dist/esm/cloud/metering/UsageLedger.js.map +1 -0
  226. package/dist/esm/cloud/metering/index.d.ts +12 -0
  227. package/dist/esm/cloud/metering/index.d.ts.map +1 -0
  228. package/dist/esm/cloud/metering/index.js +12 -0
  229. package/dist/esm/cloud/metering/index.js.map +1 -0
  230. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts +53 -0
  231. package/dist/esm/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
  232. package/dist/esm/cloud/scrub/StatelessScrubber.js +199 -0
  233. package/dist/esm/cloud/scrub/StatelessScrubber.js.map +1 -0
  234. package/dist/esm/cloud/scrub/index.d.ts +5 -0
  235. package/dist/esm/cloud/scrub/index.d.ts.map +1 -0
  236. package/dist/esm/cloud/scrub/index.js +5 -0
  237. package/dist/esm/cloud/scrub/index.js.map +1 -0
  238. package/dist/esm/cloud/server.d.ts +3 -3
  239. package/dist/esm/cloud/server.js +5 -5
  240. package/dist/esm/cloud/store/FileBrainStore.d.ts +26 -0
  241. package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -0
  242. package/dist/esm/cloud/store/FileBrainStore.js +212 -0
  243. package/dist/esm/cloud/store/FileBrainStore.js.map +1 -0
  244. package/dist/esm/cloud/store/PostgresBrainStore.d.ts +50 -0
  245. package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -0
  246. package/dist/esm/cloud/store/PostgresBrainStore.js +176 -0
  247. package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -0
  248. package/dist/esm/cloud/store/index.d.ts +6 -0
  249. package/dist/esm/cloud/store/index.d.ts.map +1 -0
  250. package/dist/esm/cloud/store/index.js +6 -0
  251. package/dist/esm/cloud/store/index.js.map +1 -0
  252. package/dist/esm/cloud/types.d.ts +0 -4
  253. package/dist/esm/cloud/types.d.ts.map +1 -1
  254. package/dist/esm/cloud/types.js +0 -2
  255. package/dist/esm/cloud/types.js.map +1 -1
  256. package/dist/esm/cloud/v2/app.d.ts +15 -0
  257. package/dist/esm/cloud/v2/app.d.ts.map +1 -0
  258. package/dist/esm/cloud/v2/app.js +57 -0
  259. package/dist/esm/cloud/v2/app.js.map +1 -0
  260. package/dist/esm/cloud/v2/routes/index.d.ts +24 -0
  261. package/dist/esm/cloud/v2/routes/index.d.ts.map +1 -0
  262. package/dist/esm/cloud/v2/routes/index.js +32 -0
  263. package/dist/esm/cloud/v2/routes/index.js.map +1 -0
  264. package/dist/esm/cloud/v2/routes/memories.d.ts +83 -0
  265. package/dist/esm/cloud/v2/routes/memories.d.ts.map +1 -0
  266. package/dist/esm/cloud/v2/routes/memories.js +238 -0
  267. package/dist/esm/cloud/v2/routes/memories.js.map +1 -0
  268. package/dist/esm/cloud/v2/routes/recall.d.ts +33 -0
  269. package/dist/esm/cloud/v2/routes/recall.d.ts.map +1 -0
  270. package/dist/esm/cloud/v2/routes/recall.js +47 -0
  271. package/dist/esm/cloud/v2/routes/recall.js.map +1 -0
  272. package/dist/esm/cloud/v2/routes/scrub.d.ts +13 -0
  273. package/dist/esm/cloud/v2/routes/scrub.d.ts.map +1 -0
  274. package/dist/esm/cloud/v2/routes/scrub.js +79 -0
  275. package/dist/esm/cloud/v2/routes/scrub.js.map +1 -0
  276. package/dist/esm/cloud/v2/routes/usage.d.ts +18 -0
  277. package/dist/esm/cloud/v2/routes/usage.d.ts.map +1 -0
  278. package/dist/esm/cloud/v2/routes/usage.js +15 -0
  279. package/dist/esm/cloud/v2/routes/usage.js.map +1 -0
  280. package/dist/esm/cloud/v2/routes/verify.d.ts +35 -0
  281. package/dist/esm/cloud/v2/routes/verify.d.ts.map +1 -0
  282. package/dist/esm/cloud/v2/routes/verify.js +39 -0
  283. package/dist/esm/cloud/v2/routes/verify.js.map +1 -0
  284. package/dist/esm/cloud/v2/server.d.ts +27 -0
  285. package/dist/esm/cloud/v2/server.d.ts.map +1 -0
  286. package/dist/esm/cloud/v2/server.js +44 -0
  287. package/dist/esm/cloud/v2/server.js.map +1 -0
  288. package/dist/esm/config/index.d.ts +1 -1
  289. package/dist/esm/config/index.js +1 -1
  290. package/dist/esm/consensus/index.d.ts +2 -2
  291. package/dist/esm/consensus/index.js +2 -2
  292. package/dist/esm/contracts/api-v2.types.d.ts +103 -0
  293. package/dist/esm/contracts/api-v2.types.d.ts.map +1 -0
  294. package/dist/esm/contracts/api-v2.types.js +2 -0
  295. package/dist/esm/contracts/api-v2.types.js.map +1 -0
  296. package/dist/esm/contracts/errors.d.ts +40 -0
  297. package/dist/esm/contracts/errors.d.ts.map +1 -0
  298. package/dist/esm/contracts/errors.js +45 -0
  299. package/dist/esm/contracts/errors.js.map +1 -0
  300. package/dist/esm/contracts/evidence.d.ts +49 -0
  301. package/dist/esm/contracts/evidence.d.ts.map +1 -0
  302. package/dist/esm/contracts/evidence.js +11 -0
  303. package/dist/esm/contracts/evidence.js.map +1 -0
  304. package/dist/esm/contracts/index.d.ts +10 -0
  305. package/dist/esm/contracts/index.d.ts.map +1 -0
  306. package/dist/esm/contracts/index.js +10 -0
  307. package/dist/esm/contracts/index.js.map +1 -0
  308. package/dist/esm/contracts/store.d.ts +30 -0
  309. package/dist/esm/contracts/store.d.ts.map +1 -0
  310. package/dist/esm/contracts/store.js +2 -0
  311. package/dist/esm/contracts/store.js.map +1 -0
  312. package/dist/esm/core/AgentRegistry.d.ts +1 -1
  313. package/dist/esm/core/AgentRegistry.js +1 -1
  314. package/dist/esm/core/DashboardBroadcaster.d.ts +3 -3
  315. package/dist/esm/core/DashboardBroadcaster.js +2 -2
  316. package/dist/esm/core/DashboardWebSocketServer.d.ts +1 -1
  317. package/dist/esm/core/DashboardWebSocketServer.js +1 -1
  318. package/dist/esm/core/GhostAlchemist.js +1 -1
  319. package/dist/esm/core/GhostListener.js +2 -2
  320. package/dist/esm/core/OrchestrationEngine.d.ts +3 -3
  321. package/dist/esm/core/OrchestrationEngine.js +2 -2
  322. package/dist/esm/core/SubconsciousEngine.d.ts +1 -1
  323. package/dist/esm/core/SubconsciousEngine.js +2 -2
  324. package/dist/esm/core/WebSocketServer.d.ts +2 -2
  325. package/dist/esm/core/WebSocketServer.js +1 -1
  326. package/dist/esm/core/index.d.ts +6 -6
  327. package/dist/esm/core/index.js +6 -6
  328. package/dist/esm/core/router.d.ts +3 -3
  329. package/dist/esm/core/router.js +1 -1
  330. package/dist/esm/db/database.js +1 -1
  331. package/dist/esm/embed.d.ts +2 -2
  332. package/dist/esm/embed.js +2 -2
  333. package/dist/esm/examples/basic-usage.js +1 -1
  334. package/dist/esm/index.d.ts +14 -14
  335. package/dist/esm/index.js +14 -14
  336. package/dist/esm/infra/analyzers/DriftDetector.d.ts +1 -1
  337. package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +1 -1
  338. package/dist/esm/infra/analyzers/MonolithAnalyzer.d.ts +1 -1
  339. package/dist/esm/infra/analyzers/index.d.ts +3 -3
  340. package/dist/esm/infra/analyzers/index.js +3 -3
  341. package/dist/esm/infra/cli.js +2 -2
  342. package/dist/esm/infra/config.d.ts +1 -1
  343. package/dist/esm/infra/index.d.ts +5 -5
  344. package/dist/esm/infra/index.js +5 -5
  345. package/dist/esm/infra/mcp-tools.js +5 -5
  346. package/dist/esm/infra/providers/InfraProvider.d.ts +1 -1
  347. package/dist/esm/infra/providers/JenkinsProvider.d.ts +2 -2
  348. package/dist/esm/infra/providers/OKDProvider.d.ts +2 -2
  349. package/dist/esm/infra/providers/TerraformProvider.d.ts +2 -2
  350. package/dist/esm/infra/providers/index.d.ts +5 -5
  351. package/dist/esm/infra/providers/index.js +3 -3
  352. package/dist/esm/mcp/index.js +5 -5
  353. package/dist/esm/mcp/prompts.js +1 -1
  354. package/dist/esm/mcp/resources.js +2 -2
  355. package/dist/esm/mcp/tasks.js +1 -1
  356. package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
  357. package/dist/esm/mcp/tool-profiles.js +47 -2
  358. package/dist/esm/mcp/tool-profiles.js.map +1 -1
  359. package/dist/esm/mcp/tools.d.ts +2 -0
  360. package/dist/esm/mcp/tools.d.ts.map +1 -1
  361. package/dist/esm/mcp/tools.js +366 -78
  362. package/dist/esm/mcp/tools.js.map +1 -1
  363. package/dist/esm/observability/IdeContextSync.d.ts +1 -1
  364. package/dist/esm/observability/IdeContextSync.js +5 -5
  365. package/dist/esm/pr-review/PRReviewEngine.d.ts +1 -1
  366. package/dist/esm/pr-review/PRReviewEngine.js +4 -4
  367. package/dist/esm/pr-review/ReviewStore.d.ts +1 -1
  368. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts +2 -2
  369. package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js +1 -1
  370. package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts +2 -2
  371. package/dist/esm/pr-review/adapters/GitHubAdapter.js +1 -1
  372. package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts +2 -2
  373. package/dist/esm/pr-review/adapters/GitLabAdapter.js +1 -1
  374. package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts +1 -1
  375. package/dist/esm/pr-review/adapters/index.d.ts +4 -4
  376. package/dist/esm/pr-review/adapters/index.js +3 -3
  377. package/dist/esm/pr-review/analyzers/QualityGrader.d.ts +1 -1
  378. package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts +1 -1
  379. package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts +1 -1
  380. package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts +1 -1
  381. package/dist/esm/pr-review/analyzers/index.d.ts +8 -8
  382. package/dist/esm/pr-review/analyzers/index.js +4 -4
  383. package/dist/esm/pr-review/bridge/BrainBridge.d.ts +1 -1
  384. package/dist/esm/pr-review/bridge/BrainBridge.js +2 -2
  385. package/dist/esm/pr-review/bridge/BrainBridge.js.map +1 -1
  386. package/dist/esm/pr-review/bridge/index.d.ts +1 -1
  387. package/dist/esm/pr-review/bridge/index.js +1 -1
  388. package/dist/esm/pr-review/index.d.ts +4 -4
  389. package/dist/esm/pr-review/index.js +2 -2
  390. package/dist/esm/pr-review/reviewRunner.d.ts +2 -2
  391. package/dist/esm/pr-review/reviewRunner.js +6 -6
  392. package/dist/esm/pr-review/webhook/WebhookServer.js +1 -1
  393. package/dist/esm/pr-review/webhook/index.d.ts +1 -1
  394. package/dist/esm/pr-review/webhook/index.js +1 -1
  395. package/dist/esm/protocol/flows.d.ts +1 -1
  396. package/dist/esm/protocol/flows.js +1 -1
  397. package/dist/esm/protocol/index.d.ts +4 -4
  398. package/dist/esm/protocol/index.js +4 -4
  399. package/dist/esm/protocol/utils.d.ts +1 -1
  400. package/dist/esm/protocol/utils.js +2 -2
  401. package/dist/esm/protocol/validators.d.ts +1 -1
  402. package/dist/esm/protocol/validators.js +1 -1
  403. package/dist/esm/proxy/ContextInjector.d.ts +1 -1
  404. package/dist/esm/proxy/Gatekeeper.d.ts +1 -1
  405. package/dist/esm/security/SecurityMiddleware.d.ts +1 -1
  406. package/dist/esm/security/SecurityMiddleware.js +3 -3
  407. package/dist/esm/security/index.d.ts +4 -4
  408. package/dist/esm/security/index.js +4 -4
  409. package/dist/esm/speculative/SpeculativeCache.d.ts +2 -2
  410. package/dist/esm/speculative/SpeculativeEngine.d.ts +2 -2
  411. package/dist/esm/speculative/SpeculativeEngine.js +3 -3
  412. package/dist/esm/speculative/WorkerPool.d.ts +1 -1
  413. package/dist/esm/speculative/index.d.ts +4 -4
  414. package/dist/esm/speculative/index.js +4 -4
  415. package/dist/esm/subconscious/BrainEmbeddings.d.ts +59 -0
  416. package/dist/esm/subconscious/BrainEmbeddings.d.ts.map +1 -0
  417. package/dist/esm/subconscious/BrainEmbeddings.js +211 -0
  418. package/dist/esm/subconscious/BrainEmbeddings.js.map +1 -0
  419. package/dist/esm/subconscious/GitIngest.d.ts +1 -1
  420. package/dist/esm/subconscious/GitIngest.js +3 -3
  421. package/dist/esm/subconscious/GitIngest.js.map +1 -1
  422. package/dist/esm/subconscious/SemanticCache.d.ts +2 -2
  423. package/dist/esm/subconscious/SemanticCache.js +2 -2
  424. package/dist/esm/subconscious/SubconsciousEngine.d.ts +1 -1
  425. package/dist/esm/subconscious/SubconsciousEngine.js +3 -3
  426. package/dist/esm/subconscious/TheBrainV2.d.ts +327 -9
  427. package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
  428. package/dist/esm/subconscious/TheBrainV2.js +947 -98
  429. package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
  430. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +16 -0
  431. package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
  432. package/dist/esm/subconscious/freshness/LocalFsResolver.js +67 -0
  433. package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -0
  434. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
  435. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
  436. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js +20 -0
  437. package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
  438. package/dist/esm/subconscious/freshness/index.d.ts +10 -0
  439. package/dist/esm/subconscious/freshness/index.d.ts.map +1 -0
  440. package/dist/esm/subconscious/freshness/index.js +10 -0
  441. package/dist/esm/subconscious/freshness/index.js.map +1 -0
  442. package/dist/esm/subconscious/index.d.ts +4 -4
  443. package/dist/esm/subconscious/index.js +4 -4
  444. package/dist/esm/utils/AffectedTests.js +1 -1
  445. package/dist/esm/utils/AutoContextBundle.d.ts +1 -1
  446. package/dist/esm/utils/AutoContextBundle.js +4 -4
  447. package/dist/esm/utils/BulkFileDigest.js +2 -2
  448. package/dist/esm/utils/ClipboardWatcher.js +2 -2
  449. package/dist/esm/utils/ContextCollapser.js +1 -1
  450. package/dist/esm/utils/ConversationCheckpoint.js +2 -2
  451. package/dist/esm/utils/ConversationCheckpoint.js.map +1 -1
  452. package/dist/esm/utils/ExecutiveReport.js +1 -1
  453. package/dist/esm/utils/OutputLedger.js +2 -2
  454. package/dist/esm/utils/ProjectIdentity.d.ts +12 -0
  455. package/dist/esm/utils/ProjectIdentity.d.ts.map +1 -0
  456. package/dist/esm/utils/ProjectIdentity.js +37 -0
  457. package/dist/esm/utils/ProjectIdentity.js.map +1 -0
  458. package/dist/esm/utils/PromptPatternCache.d.ts.map +1 -1
  459. package/dist/esm/utils/PromptPatternCache.js +12 -2
  460. package/dist/esm/utils/PromptPatternCache.js.map +1 -1
  461. package/dist/esm/utils/ReadWorkspaceCache.js +1 -1
  462. package/dist/esm/utils/RepeatGuard.d.ts.map +1 -1
  463. package/dist/esm/utils/RepeatGuard.js +10 -2
  464. package/dist/esm/utils/RepeatGuard.js.map +1 -1
  465. package/dist/esm/utils/SpeculativeWarmer.d.ts +1 -1
  466. package/dist/esm/utils/SpeculativeWarmer.js +2 -2
  467. package/dist/esm/utils/StateHashCache.d.ts +5 -0
  468. package/dist/esm/utils/StateHashCache.d.ts.map +1 -1
  469. package/dist/esm/utils/StateHashCache.js +40 -16
  470. package/dist/esm/utils/StateHashCache.js.map +1 -1
  471. package/dist/esm/utils/StructuralSearch.d.ts +1 -1
  472. package/dist/esm/utils/SurgicalASTInsert.js +1 -1
  473. package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
  474. package/dist/esm/utils/TestAutofixInterceptor.js +1 -1
  475. package/dist/esm/utils/WorkspaceSearch.js +0 -0
  476. package/dist/esm/utils/logger.js +1 -1
  477. package/dist/esm/utils/reportSavings.js +1 -1
  478. package/package.json +1 -1
  479. package/sdks/crewai/README.md +25 -0
  480. package/dist/cjs/package.json +0 -3
  481. package/dist/esm/package.json +0 -3
  482. package/sdks/crewai/dist/index.d.ts +0 -130
  483. package/sdks/crewai/dist/index.js +0 -308
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authenticateV2.js","sourceRoot":"","sources":["../../../../src/cloud/identity/authenticateV2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Lemma API v2 — identity store (Lane D)
3
+ *
4
+ * Persistence behind TenantResolver. Keys are stored as SHA-256 hashes only:
5
+ * `key_hash` is the sole column that ever touches key material, and every write
6
+ * is a parameterized insert that receives the hash, never the plaintext value.
7
+ *
8
+ * `InMemoryIdentityStore` powers unit tests and local/dev defaults.
9
+ * `PostgresIdentityStore` is the production implementation over `pg`.
10
+ */
11
+ import type { Pool } from 'pg';
12
+ import type { KeyPrefix } from './ApiKey';
13
+ import type { PlanId } from './PlanPolicy';
14
+ export interface NewKeyInput {
15
+ tenantId: string;
16
+ name: string;
17
+ plan: PlanId;
18
+ /** The persisted key derivation — sha256 of the plaintext. NEVER the key itself. */
19
+ hash: string;
20
+ prefix: KeyPrefix;
21
+ }
22
+ export interface KeyRecord {
23
+ id: string;
24
+ tenantId: string;
25
+ name: string;
26
+ plan: PlanId;
27
+ prefix: KeyPrefix;
28
+ active: boolean;
29
+ createdAt: number;
30
+ expiresAt: number | null;
31
+ revokedAt: number | null;
32
+ }
33
+ export interface IdentityStore {
34
+ /** Look up a key by its hash. The ONLY read path — plaintext never enters a query. */
35
+ findKeyByHash(hash: string): Promise<KeyRecord | null>;
36
+ /** Persist a new key. Callers pass the hash; `key_hash` is the only secret column. */
37
+ createKey(input: NewKeyInput): Promise<KeyRecord>;
38
+ /** Soft-revoke: the key dies on the NEXT lookup. No 24h cache can survive this. */
39
+ revokeKey(keyId: string): Promise<boolean>;
40
+ }
41
+ /** In-memory store. Records carry the hash only — same invariant as Postgres. */
42
+ export declare class InMemoryIdentityStore implements IdentityStore {
43
+ readonly records: Map<string, KeyRecord>;
44
+ findKeyByHash(hash: string): Promise<KeyRecord | null>;
45
+ createKey(input: NewKeyInput): Promise<KeyRecord>;
46
+ revokeKey(keyId: string): Promise<boolean>;
47
+ }
48
+ /** Production store. All queries parameterized; key material appears only as hashed params. */
49
+ export declare class PostgresIdentityStore implements IdentityStore {
50
+ private readonly pool;
51
+ constructor(pool: Pool);
52
+ findKeyByHash(hash: string): Promise<KeyRecord | null>;
53
+ createKey(input: NewKeyInput): Promise<KeyRecord>;
54
+ revokeKey(keyId: string): Promise<boolean>;
55
+ }
56
+ //# sourceMappingURL=identityStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identityStore.d.ts","sourceRoot":"","sources":["../../../../src/cloud/identity/identityStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,sFAAsF;IACtF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACvD,sFAAsF;IACtF,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,mFAAmF;IACnF,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED,iFAAiF;AACjF,qBAAa,qBAAsB,YAAW,aAAa;IACzD,QAAQ,CAAC,OAAO,yBAAgC;IAE1C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAItD,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IAgBjD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAWjD;AAED,+FAA+F;AAC/F,qBAAa,qBAAsB,YAAW,aAAa;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,IAAI;IAEjC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAwBtD,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IA6BjD,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CASjD"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostgresIdentityStore = exports.InMemoryIdentityStore = void 0;
4
+ /** In-memory store. Records carry the hash only — same invariant as Postgres. */
5
+ class InMemoryIdentityStore {
6
+ constructor() {
7
+ this.records = new Map();
8
+ }
9
+ async findKeyByHash(hash) {
10
+ return this.records.get(hash) ?? null;
11
+ }
12
+ async createKey(input) {
13
+ const record = {
14
+ id: 'key_' + Math.random().toString(16).slice(2, 14),
15
+ tenantId: input.tenantId,
16
+ name: input.name,
17
+ plan: input.plan,
18
+ prefix: input.prefix,
19
+ active: true,
20
+ createdAt: Date.now(),
21
+ expiresAt: null,
22
+ revokedAt: null,
23
+ };
24
+ this.records.set(input.hash, record);
25
+ return record;
26
+ }
27
+ async revokeKey(keyId) {
28
+ let found = false;
29
+ for (const record of this.records.values()) {
30
+ if (record.id === keyId) {
31
+ record.active = false;
32
+ record.revokedAt = Date.now();
33
+ found = true;
34
+ }
35
+ }
36
+ return found;
37
+ }
38
+ }
39
+ exports.InMemoryIdentityStore = InMemoryIdentityStore;
40
+ /** Production store. All queries parameterized; key material appears only as hashed params. */
41
+ class PostgresIdentityStore {
42
+ constructor(pool) {
43
+ this.pool = pool;
44
+ }
45
+ async findKeyByHash(hash) {
46
+ const { rows } = await this.pool.query(`SELECT k.id, k.tenant_id, t.plan, k.name, k.prefix, k.active,
47
+ k.created_at, k.expires_at, k.revoked_at
48
+ FROM api_keys k
49
+ JOIN tenants t ON t.id = k.tenant_id
50
+ WHERE k.key_hash = $1`, [hash]);
51
+ if (!rows.length)
52
+ return null;
53
+ const r = rows[0];
54
+ return {
55
+ id: r.id,
56
+ tenantId: r.tenant_id,
57
+ plan: r.plan,
58
+ name: r.name ?? '',
59
+ prefix: r.prefix,
60
+ active: r.active,
61
+ createdAt: new Date(r.created_at).getTime(),
62
+ expiresAt: r.expires_at ? new Date(r.expires_at).getTime() : null,
63
+ revokedAt: r.revoked_at ? new Date(r.revoked_at).getTime() : null,
64
+ };
65
+ }
66
+ async createKey(input) {
67
+ const { rows } = await this.pool.query(`INSERT INTO api_keys (id, tenant_id, name, key_hash, prefix, plan, active)
68
+ VALUES ($1, $2, $3, $4, $5, $6, $7)
69
+ RETURNING id, name, prefix, active, created_at, expires_at, revoked_at`, [
70
+ 'key_' + input.hash.slice(0, 12),
71
+ input.tenantId,
72
+ input.name,
73
+ input.hash,
74
+ input.prefix,
75
+ input.plan,
76
+ true,
77
+ ]);
78
+ const r = rows[0];
79
+ return {
80
+ id: r.id,
81
+ tenantId: input.tenantId,
82
+ name: r.name ?? '',
83
+ plan: input.plan,
84
+ prefix: r.prefix,
85
+ active: r.active,
86
+ createdAt: new Date(r.created_at).getTime(),
87
+ expiresAt: r.expires_at ? new Date(r.expires_at).getTime() : null,
88
+ revokedAt: null,
89
+ };
90
+ }
91
+ async revokeKey(keyId) {
92
+ const { rowCount } = await this.pool.query(`UPDATE api_keys
93
+ SET active = FALSE, revoked_at = CURRENT_TIMESTAMP
94
+ WHERE id = $1 AND active = TRUE`, [keyId]);
95
+ return (rowCount ?? 0) > 0;
96
+ }
97
+ }
98
+ exports.PostgresIdentityStore = PostgresIdentityStore;
99
+ //# sourceMappingURL=identityStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identityStore.js","sourceRoot":"","sources":["../../../../src/cloud/identity/identityStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Lemma API v2 — identity & tenancy (Lane D)
3
+ *
4
+ * Keys hashed at rest, resolution without cache (revocation is immediate),
5
+ * per-plan ceilings without Infinity, and per-tenant rate limiting with
6
+ * Retry-After.
7
+ */
8
+ export * from './ApiKey';
9
+ export * from './identityStore';
10
+ export * from './PlanPolicy';
11
+ export * from './RateLimiter';
12
+ export * from './TenantResolver';
13
+ export * from './authenticateV2';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cloud/identity/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * Lemma API v2 — identity & tenancy (Lane D)
19
+ *
20
+ * Keys hashed at rest, resolution without cache (revocation is immediate),
21
+ * per-plan ceilings without Infinity, and per-tenant rate limiting with
22
+ * Retry-After.
23
+ */
24
+ __exportStar(require("./ApiKey"), exports);
25
+ __exportStar(require("./identityStore"), exports);
26
+ __exportStar(require("./PlanPolicy"), exports);
27
+ __exportStar(require("./RateLimiter"), exports);
28
+ __exportStar(require("./TenantResolver"), exports);
29
+ __exportStar(require("./authenticateV2"), exports);
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cloud/identity/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;GAMG;AACH,2CAAyB;AACzB,kDAAgC;AAChC,+CAA6B;AAC7B,gDAA8B;AAC9B,mDAAiC;AACjC,mDAAiC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Lemma API v2 — TokenCounter (Lane E)
3
+ *
4
+ * Real token counting of a payload. The count is determined by the actual content
5
+ * of the payload, never by an average-per-request constant. When a count cannot be
6
+ * produced reliably the method returns `null` and the caller omits the event from
7
+ * reports rather than estimating (the `excludedEvents` counter in UsageResponse).
8
+ *
9
+ * This is a best-effort, dependency-free tokenizer. It is deterministic and fully
10
+ * reproducible from the payload, which is what the product's auditability requires.
11
+ * No library is loaded here — `package.json` is frozen for this lane.
12
+ */
13
+ export declare class TokenCounter {
14
+ readonly lane = "E";
15
+ /**
16
+ * Measure the token count of a payload.
17
+ *
18
+ * Returns:
19
+ * - a `number` >= 0 when the payload is measurable (counted from its content).
20
+ * - `null` when the payload cannot be reliably measured (missing, not a string,
21
+ * or otherwise unmeasurable) — the caller must omit the event, not estimate.
22
+ */
23
+ count(payload: string): number | null;
24
+ }
25
+ export default TokenCounter;
26
+ //# sourceMappingURL=TokenCounter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenCounter.d.ts","sourceRoot":"","sources":["../../../../src/cloud/metering/TokenCounter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qBAAa,YAAY;IACvB,QAAQ,CAAC,IAAI,OAAO;IAEpB;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAkCtC;AAyBD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Lemma API v2 — TokenCounter (Lane E)
4
+ *
5
+ * Real token counting of a payload. The count is determined by the actual content
6
+ * of the payload, never by an average-per-request constant. When a count cannot be
7
+ * produced reliably the method returns `null` and the caller omits the event from
8
+ * reports rather than estimating (the `excludedEvents` counter in UsageResponse).
9
+ *
10
+ * This is a best-effort, dependency-free tokenizer. It is deterministic and fully
11
+ * reproducible from the payload, which is what the product's auditability requires.
12
+ * No library is loaded here — `package.json` is frozen for this lane.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.TokenCounter = void 0;
16
+ class TokenCounter {
17
+ constructor() {
18
+ this.lane = 'E';
19
+ }
20
+ /**
21
+ * Measure the token count of a payload.
22
+ *
23
+ * Returns:
24
+ * - a `number` >= 0 when the payload is measurable (counted from its content).
25
+ * - `null` when the payload cannot be reliably measured (missing, not a string,
26
+ * or otherwise unmeasurable) — the caller must omit the event, not estimate.
27
+ */
28
+ count(payload) {
29
+ if (typeof payload !== 'string')
30
+ return null;
31
+ const trimmed = payload.trim();
32
+ if (trimmed.length === 0)
33
+ return 0;
34
+ let tokens = 0;
35
+ let i = 0;
36
+ const n = trimmed.length;
37
+ // Latin/CJK-aware scanning: a run of word characters is one token, a CJK
38
+ // character counts as a single token (the dominant case for dense scripts).
39
+ while (i < n) {
40
+ const code = trimmed.charCodeAt(i);
41
+ if (isCjk(code)) {
42
+ tokens += 1;
43
+ i += 1;
44
+ continue;
45
+ }
46
+ if (isWordChar(code)) {
47
+ while (i < n && isWordChar(trimmed.charCodeAt(i)))
48
+ i += 1;
49
+ tokens += 1;
50
+ continue;
51
+ }
52
+ // Punctuation/symbol run collapses into a single token.
53
+ while (i < n && isPunct(trimmed.charCodeAt(i)))
54
+ i += 1;
55
+ tokens += 1;
56
+ }
57
+ return tokens;
58
+ }
59
+ }
60
+ exports.TokenCounter = TokenCounter;
61
+ function isWordChar(code) {
62
+ return ((code >= 0x41 && code <= 0x5a) || // A-Z
63
+ (code >= 0x61 && code <= 0x7a) || // a-z
64
+ (code >= 0x30 && code <= 0x39) || // 0-9
65
+ code === 0x5f || // _
66
+ code >= 0x80 // non-ASCII word characters (accents, etc.)
67
+ );
68
+ }
69
+ function isCjk(code) {
70
+ return ((code >= 0x4e00 && code <= 0x9fff) || // CJK Unified Ideographs
71
+ (code >= 0x3040 && code <= 0x30ff) || // Hiragana + Katakana
72
+ (code >= 0xac00 && code <= 0xd7af) || // Hangul syllables
73
+ (code >= 0x3400 && code <= 0x4dbf) // CJK Extension A
74
+ );
75
+ }
76
+ function isPunct(code) {
77
+ return !isWordChar(code);
78
+ }
79
+ exports.default = TokenCounter;
80
+ //# sourceMappingURL=TokenCounter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenCounter.js","sourceRoot":"","sources":["../../../../src/cloud/metering/TokenCounter.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,MAAa,YAAY;IAAzB;QACW,SAAI,GAAG,GAAG,CAAC;IA4CtB,CAAC;IA1CC;;;;;;;OAOG;IACH,KAAK,CAAC,OAAe;QACnB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEnC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QAEzB,yEAAyE;QACzE,4EAA4E;QAC5E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACb,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAEnC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,CAAC;gBACZ,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YAED,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;oBAAE,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM,IAAI,CAAC,CAAC;gBACZ,SAAS;YACX,CAAC;YAED,wDAAwD;YACxD,OAAO,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAAE,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA7CD,oCA6CC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,CACL,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM;QACxC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM;QACxC,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM;QACxC,IAAI,KAAK,IAAI,IAAI,IAAI;QACrB,IAAI,IAAI,IAAI,CAAC,4CAA4C;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,OAAO,CACL,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,yBAAyB;QAC/D,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,sBAAsB;QAC5D,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,mBAAmB;QACzD,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,kBAAkB;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,kBAAe,YAAY,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { UsageResponse } from '../../contracts/api-v2.types';
2
+ /** Append-only backing store. Implementations must expose reads over the rows and
3
+ * have no mutating surface beyond `append` (no update/delete). */
4
+ export interface AppendOnlyStore {
5
+ append(row: LedgerEvent): Promise<void> | void;
6
+ rows(): LedgerEvent[] | Promise<LedgerEvent[]>;
7
+ }
8
+ /** In-memory append-only store (the default backing). Only ever grows. */
9
+ export declare class InMemoryLedgerStore implements AppendOnlyStore {
10
+ private readonly ledger;
11
+ append(row: LedgerEvent): void;
12
+ rows(): LedgerEvent[];
13
+ /** Test seam: reset the ledger. Never used by production paths. */
14
+ clear(): void;
15
+ }
16
+ export interface LedgerEvent {
17
+ id: string;
18
+ tenantId: string;
19
+ kind: string;
20
+ /** Measured token count, or `null` when no reliable count could be produced. */
21
+ tokens: number | null;
22
+ /** Milliseconds since epoch. */
23
+ at: number;
24
+ }
25
+ export interface AppendEvent {
26
+ tenantId: string;
27
+ kind: string;
28
+ /** Measured tokens, or `null` when the count was unreliable. */
29
+ tokens: number | null;
30
+ id?: string;
31
+ at?: number;
32
+ }
33
+ export interface UsageQuery {
34
+ /** Restrict the computation to one tenant (and the global total) — optional. */
35
+ tenantId?: string;
36
+ /** Only include rows appended at or after this timestamp (ms epoch). */
37
+ since?: number;
38
+ }
39
+ export interface UsageLedgerOptions {
40
+ backend?: AppendOnlyStore;
41
+ now?: () => number;
42
+ /** Test seam: deterministic id generator. Defaults to a random hex ulid-ish id. */
43
+ getId?: () => string;
44
+ }
45
+ export declare class UsageLedger {
46
+ readonly lane = "E";
47
+ private readonly backend;
48
+ private readonly now;
49
+ private readonly getId;
50
+ constructor(backing?: unknown, options?: UsageLedgerOptions);
51
+ /**
52
+ * Append one billable event to the ledger. Append-only by construction: the row
53
+ * is pushed and never mutated or removed.
54
+ */
55
+ append(event: AppendEvent): Promise<LedgerEvent>;
56
+ /**
57
+ * Compute the auditable usage report for GET /v2/usage.
58
+ *
59
+ * Every metric is derived by summing measured ledger rows and carries
60
+ * `measurement: "counted"`. A metric with nothing to measure is omitted from the
61
+ * response — it is never filled with an estimate. Rows whose token count was
62
+ * unreliable (`tokens: null`) are excluded from every sum and reported in
63
+ * `excludedEvents`.
64
+ */
65
+ computeUsage(query?: UsageQuery): Promise<UsageResponse>;
66
+ }
67
+ export default UsageLedger;
68
+ //# sourceMappingURL=UsageLedger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsageLedger.d.ts","sourceRoot":"","sources":["../../../../src/cloud/metering/UsageLedger.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAElE;mEACmE;AACnE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/C,IAAI,IAAI,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CAChD;AAED,0EAA0E;AAC1E,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAE5C,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAI9B,IAAI,IAAI,WAAW,EAAE;IAIrB,mEAAmE;IACnE,KAAK,IAAI,IAAI;CAGd;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;CACtB;AAID,qBAAa,WAAW;IACtB,QAAQ,CAAC,IAAI,OAAO;IAEpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;gBAEzB,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAS3D;;;OAGG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAYtD;;;;;;;;OAQG;IACG,YAAY,CAAC,KAAK,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,CAAC;CAkCnE;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UsageLedger = exports.InMemoryLedgerStore = void 0;
7
+ /**
8
+ * Lemma API v2 — UsageLedger (Lane E)
9
+ *
10
+ * Append-only ledger: exactly one row per billable event, holding the MEASURED
11
+ * token count of the real payload. There is no UPDATE and no DELETE over the
12
+ * ledger — rows are only ever appended. Every number exposed by /v2/usage is
13
+ * reproduced by summing these rows, so the reported usage is auditable end to end.
14
+ *
15
+ * An event whose token count could not be reliably measured is still recorded
16
+ * (with `tokens: null`) but is excluded from every metric sum and instead counted
17
+ * in `excludedEvents` on the response. A measurement is never estimated.
18
+ *
19
+ * Ownership: Lane E.
20
+ */
21
+ const crypto_1 = __importDefault(require("crypto"));
22
+ /** In-memory append-only store (the default backing). Only ever grows. */
23
+ class InMemoryLedgerStore {
24
+ constructor() {
25
+ this.ledger = [];
26
+ }
27
+ append(row) {
28
+ this.ledger.push(row);
29
+ }
30
+ rows() {
31
+ return this.ledger;
32
+ }
33
+ /** Test seam: reset the ledger. Never used by production paths. */
34
+ clear() {
35
+ this.ledger.length = 0;
36
+ }
37
+ }
38
+ exports.InMemoryLedgerStore = InMemoryLedgerStore;
39
+ const defaultId = () => crypto_1.default.randomBytes(16).toString('hex');
40
+ class UsageLedger {
41
+ constructor(backing, options) {
42
+ this.lane = 'E';
43
+ const opts = backing && typeof backing === 'object' && 'rows' in backing
44
+ ? backing
45
+ : options ?? {};
46
+ this.backend = opts.backend ?? new InMemoryLedgerStore();
47
+ this.now = opts.now ?? Date.now;
48
+ this.getId = opts.getId ?? defaultId;
49
+ }
50
+ /**
51
+ * Append one billable event to the ledger. Append-only by construction: the row
52
+ * is pushed and never mutated or removed.
53
+ */
54
+ async append(event) {
55
+ const row = {
56
+ id: event.id ?? this.getId(),
57
+ tenantId: event.tenantId,
58
+ kind: event.kind,
59
+ tokens: typeof event.tokens === 'number' ? event.tokens : null,
60
+ at: event.at ?? this.now(),
61
+ };
62
+ await this.backend.append(row);
63
+ return row;
64
+ }
65
+ /**
66
+ * Compute the auditable usage report for GET /v2/usage.
67
+ *
68
+ * Every metric is derived by summing measured ledger rows and carries
69
+ * `measurement: "counted"`. A metric with nothing to measure is omitted from the
70
+ * response — it is never filled with an estimate. Rows whose token count was
71
+ * unreliable (`tokens: null`) are excluded from every sum and reported in
72
+ * `excludedEvents`.
73
+ */
74
+ async computeUsage(query = {}) {
75
+ const rows = await this.backend.rows();
76
+ const byKind = new Map();
77
+ let totalTokens = 0;
78
+ let excludedEvents = 0;
79
+ for (const row of rows) {
80
+ if (query.tenantId !== undefined && row.tenantId !== query.tenantId)
81
+ continue;
82
+ if (query.since !== undefined && row.at < query.since)
83
+ continue;
84
+ if (row.tokens === null) {
85
+ excludedEvents += 1;
86
+ continue;
87
+ }
88
+ totalTokens += row.tokens;
89
+ byKind.set(row.kind, (byKind.get(row.kind) ?? 0) + row.tokens);
90
+ }
91
+ const metrics = {};
92
+ // Total measured tokens across all billable events in scope.
93
+ metrics.tokensSaved = { measurement: 'counted', value: totalTokens };
94
+ // Per-kind measured token totals — each equally reproducible by summing rows.
95
+ for (const [kind, value] of byKind) {
96
+ metrics[`tokensSaved.${kind}`] = { measurement: 'counted', value };
97
+ }
98
+ return {
99
+ metrics,
100
+ excludedEvents,
101
+ };
102
+ }
103
+ }
104
+ exports.UsageLedger = UsageLedger;
105
+ exports.default = UsageLedger;
106
+ //# sourceMappingURL=UsageLedger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UsageLedger.js","sourceRoot":"","sources":["../../../../src/cloud/metering/UsageLedger.ts"],"names":[],"mappings":";;;;;;AAAA;;;;;;;;;;;;;GAaG;AACH,oDAA4B;AAU5B,0EAA0E;AAC1E,MAAa,mBAAmB;IAAhC;QACmB,WAAM,GAAkB,EAAE,CAAC;IAc9C,CAAC;IAZC,MAAM,CAAC,GAAgB;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,mEAAmE;IACnE,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAfD,kDAeC;AAmCD,MAAM,SAAS,GAAG,GAAW,EAAE,CAAC,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAa,WAAW;IAOtB,YAAY,OAAiB,EAAE,OAA4B;QANlD,SAAI,GAAG,GAAG,CAAC;QAOlB,MAAM,IAAI,GAAuB,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,IAAK,OAA2B;YAC/G,CAAC,CAAE,OAA8B;YACjC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,mBAAmB,EAAE,CAAC;QACzD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,MAAM,GAAG,GAAgB;YACvB,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YAC9D,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE;SAC3B,CAAC;QACF,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,QAAoB,EAAE;QACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;gBAAE,SAAS;YAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK;gBAAE,SAAS;YAEhE,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACxB,cAAc,IAAI,CAAC,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,WAAW,IAAI,GAAG,CAAC,MAAM,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,OAAO,GAA6B,EAAE,CAAC;QAE7C,6DAA6D;QAC7D,OAAO,CAAC,WAAW,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAErE,8EAA8E;QAC9E,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,OAAO,CAAC,eAAe,IAAI,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACrE,CAAC;QAED,OAAO;YACL,OAAO;YACP,cAAc;SACf,CAAC;IACJ,CAAC;CACF;AA3ED,kCA2EC;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Lemma API v2 — real metering (Lane E)
3
+ *
4
+ * UsageLedger: the append-only, measured-only ledger powering /v2/usage.
5
+ * TokenCounter: real token counting of a payload; returns null (omit the event)
6
+ * when a count cannot be reliably measured. No estimates, ever.
7
+ *
8
+ * Ownership: Lane E.
9
+ */
10
+ export * from './UsageLedger';
11
+ export * from './TokenCounter';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cloud/metering/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ /**
18
+ * Lemma API v2 — real metering (Lane E)
19
+ *
20
+ * UsageLedger: the append-only, measured-only ledger powering /v2/usage.
21
+ * TokenCounter: real token counting of a payload; returns null (omit the event)
22
+ * when a count cannot be reliably measured. No estimates, ever.
23
+ *
24
+ * Ownership: Lane E.
25
+ */
26
+ __exportStar(require("./UsageLedger"), exports);
27
+ __exportStar(require("./TokenCounter"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cloud/metering/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;;;;;GAQG;AACH,gDAA8B;AAC9B,iDAA+B"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Lemma API v2 — StatelessScrubber (Lane F)
3
+ *
4
+ * Stateless privacy firewall over raw text and serialized agent tool-call JSON.
5
+ *
6
+ * Contract (src/contracts/api-v2.types.ts):
7
+ * scrubText(text, mode) -> { text, findings } text input
8
+ * scrubToolCallJson(raw, mode) -> { toolCallJson, findings }
9
+ *
10
+ * Invariants:
11
+ * - DETECTED VALUES ARE NEVER RETURNED. The response carries only the masked
12
+ * text and an inventory of `{ type, offset, length }` findings. Nothing the
13
+ * caller passed in is echoed back except by design.
14
+ * - STATELESS: the constructor does NO I/O (unlike SemanticScrubber, whose
15
+ * constructor reads lemma.config.json from cwd). Fresh RegExps are compiled
16
+ * per call so `lastIndex` never leaks across concurrent requests. Nothing is
17
+ * persisted.
18
+ * - No `console.*` logging of the payload.
19
+ *
20
+ * This is the lane's adapted "wrap" of SemanticScrubber (which we cannot reuse
21
+ * verbatim: it exposes no per-finding offsets, has no DSN coverage, and loads
22
+ * config from cwd at construct time). See lane-notes/F.md ## decisions.
23
+ *
24
+ * Ownership: Lane F.
25
+ */
26
+ import type { ScrubFinding } from "../../contracts/api-v2.types";
27
+ export type ScrubMode = "mask" | "detect";
28
+ export declare class StatelessScrubber {
29
+ readonly lane = "F";
30
+ /** Scrub a raw text string. Offsets in findings are relative to `text`. */
31
+ scrubText(text: string, mode?: ScrubMode): {
32
+ text: string;
33
+ findings: ScrubFinding[];
34
+ };
35
+ /**
36
+ * Scrub a serialized agent tool-call JSON string. The JSON structure is
37
+ * preserved (always valid JSON on output). Each string leaf's text content is
38
+ * scrubbed in-place; findings offsets are relative to the ORIGINAL `raw`
39
+ * string the client sent. In detect mode the original string is returned
40
+ * byte-for-byte untouched (findings only).
41
+ */
42
+ scrubToolCallJson(raw: string, mode?: ScrubMode): {
43
+ toolCallJson: string;
44
+ findings: ScrubFinding[];
45
+ };
46
+ /** Backwards-compatible alias: scrubText. */
47
+ scrub(text: string, mode?: ScrubMode): {
48
+ text: string;
49
+ findings: ScrubFinding[];
50
+ };
51
+ }
52
+ export default StatelessScrubber;
53
+ //# sourceMappingURL=StatelessScrubber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatelessScrubber.d.ts","sourceRoot":"","sources":["../../../../src/cloud/scrub/StatelessScrubber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAwJ1C,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,IAAI,OAAO;IAEpB,2EAA2E;IAC3E,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,SAAkB,GACvB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE;IAc7C;;;;;;OAMG;IACH,iBAAiB,CACf,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,SAAkB,GACvB;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE;IAqCrD,6CAA6C;IAC7C,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,SAAkB,GACvB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE;CAG9C;AAED,eAAe,iBAAiB,CAAC"}