@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.
- package/bin/init.js +101 -11
- package/dist/cjs/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/cjs/cli/lemma-proxy.js +19 -11
- package/dist/cjs/cli/lemma-proxy.js.map +1 -1
- package/dist/cjs/cloud/TenantCache.d.ts.map +1 -1
- package/dist/cjs/cloud/TenantCache.js +0 -4
- package/dist/cjs/cloud/TenantCache.js.map +1 -1
- package/dist/cjs/cloud/identity/ApiKey.d.ts +32 -0
- package/dist/cjs/cloud/identity/ApiKey.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/ApiKey.js +59 -0
- package/dist/cjs/cloud/identity/ApiKey.js.map +1 -0
- package/dist/cjs/cloud/identity/PlanPolicy.d.ts +79 -0
- package/dist/cjs/cloud/identity/PlanPolicy.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/PlanPolicy.js +135 -0
- package/dist/cjs/cloud/identity/PlanPolicy.js.map +1 -0
- package/dist/cjs/cloud/identity/RateLimiter.d.ts +49 -0
- package/dist/cjs/cloud/identity/RateLimiter.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/RateLimiter.js +75 -0
- package/dist/cjs/cloud/identity/RateLimiter.js.map +1 -0
- package/dist/cjs/cloud/identity/TenantResolver.d.ts +19 -0
- package/dist/cjs/cloud/identity/TenantResolver.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/TenantResolver.js +40 -0
- package/dist/cjs/cloud/identity/TenantResolver.js.map +1 -0
- package/dist/cjs/cloud/identity/authenticateV2.d.ts +48 -0
- package/dist/cjs/cloud/identity/authenticateV2.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/authenticateV2.js +66 -0
- package/dist/cjs/cloud/identity/authenticateV2.js.map +1 -0
- package/dist/cjs/cloud/identity/identityStore.d.ts +56 -0
- package/dist/cjs/cloud/identity/identityStore.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/identityStore.js +99 -0
- package/dist/cjs/cloud/identity/identityStore.js.map +1 -0
- package/dist/cjs/cloud/identity/index.d.ts +14 -0
- package/dist/cjs/cloud/identity/index.d.ts.map +1 -0
- package/dist/cjs/cloud/identity/index.js +30 -0
- package/dist/cjs/cloud/identity/index.js.map +1 -0
- package/dist/cjs/cloud/metering/TokenCounter.d.ts +26 -0
- package/dist/cjs/cloud/metering/TokenCounter.d.ts.map +1 -0
- package/dist/cjs/cloud/metering/TokenCounter.js +80 -0
- package/dist/cjs/cloud/metering/TokenCounter.js.map +1 -0
- package/dist/cjs/cloud/metering/UsageLedger.d.ts +68 -0
- package/dist/cjs/cloud/metering/UsageLedger.d.ts.map +1 -0
- package/dist/cjs/cloud/metering/UsageLedger.js +106 -0
- package/dist/cjs/cloud/metering/UsageLedger.js.map +1 -0
- package/dist/cjs/cloud/metering/index.d.ts +12 -0
- package/dist/cjs/cloud/metering/index.d.ts.map +1 -0
- package/dist/cjs/cloud/metering/index.js +28 -0
- package/dist/cjs/cloud/metering/index.js.map +1 -0
- package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts +53 -0
- package/dist/cjs/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
- package/dist/cjs/cloud/scrub/StatelessScrubber.js +203 -0
- package/dist/cjs/cloud/scrub/StatelessScrubber.js.map +1 -0
- package/dist/cjs/cloud/scrub/index.d.ts +5 -0
- package/dist/cjs/cloud/scrub/index.d.ts.map +1 -0
- package/dist/cjs/cloud/scrub/index.js +21 -0
- package/dist/cjs/cloud/scrub/index.js.map +1 -0
- package/dist/cjs/cloud/store/FileBrainStore.d.ts +26 -0
- package/dist/cjs/cloud/store/FileBrainStore.d.ts.map +1 -0
- package/dist/cjs/cloud/store/FileBrainStore.js +219 -0
- package/dist/cjs/cloud/store/FileBrainStore.js.map +1 -0
- package/dist/cjs/cloud/store/PostgresBrainStore.d.ts +50 -0
- package/dist/cjs/cloud/store/PostgresBrainStore.d.ts.map +1 -0
- package/dist/cjs/cloud/store/PostgresBrainStore.js +181 -0
- package/dist/cjs/cloud/store/PostgresBrainStore.js.map +1 -0
- package/dist/cjs/cloud/store/index.d.ts +6 -0
- package/dist/cjs/cloud/store/index.d.ts.map +1 -0
- package/dist/cjs/cloud/store/index.js +22 -0
- package/dist/cjs/cloud/store/index.js.map +1 -0
- package/dist/cjs/cloud/types.d.ts +0 -4
- package/dist/cjs/cloud/types.d.ts.map +1 -1
- package/dist/cjs/cloud/types.js +1 -3
- package/dist/cjs/cloud/types.js.map +1 -1
- package/dist/cjs/cloud/v2/app.d.ts +15 -0
- package/dist/cjs/cloud/v2/app.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/app.js +63 -0
- package/dist/cjs/cloud/v2/app.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/index.d.ts +24 -0
- package/dist/cjs/cloud/v2/routes/index.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/index.js +35 -0
- package/dist/cjs/cloud/v2/routes/index.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/memories.d.ts +83 -0
- package/dist/cjs/cloud/v2/routes/memories.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/memories.js +249 -0
- package/dist/cjs/cloud/v2/routes/memories.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/recall.d.ts +33 -0
- package/dist/cjs/cloud/v2/routes/recall.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/recall.js +51 -0
- package/dist/cjs/cloud/v2/routes/recall.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/scrub.d.ts +13 -0
- package/dist/cjs/cloud/v2/routes/scrub.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/scrub.js +82 -0
- package/dist/cjs/cloud/v2/routes/scrub.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/usage.d.ts +18 -0
- package/dist/cjs/cloud/v2/routes/usage.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/usage.js +18 -0
- package/dist/cjs/cloud/v2/routes/usage.js.map +1 -0
- package/dist/cjs/cloud/v2/routes/verify.d.ts +35 -0
- package/dist/cjs/cloud/v2/routes/verify.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/routes/verify.js +43 -0
- package/dist/cjs/cloud/v2/routes/verify.js.map +1 -0
- package/dist/cjs/cloud/v2/server.d.ts +27 -0
- package/dist/cjs/cloud/v2/server.d.ts.map +1 -0
- package/dist/cjs/cloud/v2/server.js +47 -0
- package/dist/cjs/cloud/v2/server.js.map +1 -0
- package/dist/cjs/contracts/api-v2.types.d.ts +103 -0
- package/dist/cjs/contracts/api-v2.types.d.ts.map +1 -0
- package/dist/cjs/contracts/api-v2.types.js +3 -0
- package/dist/cjs/contracts/api-v2.types.js.map +1 -0
- package/dist/cjs/contracts/errors.d.ts +40 -0
- package/dist/cjs/contracts/errors.d.ts.map +1 -0
- package/dist/cjs/contracts/errors.js +50 -0
- package/dist/cjs/contracts/errors.js.map +1 -0
- package/dist/cjs/contracts/evidence.d.ts +49 -0
- package/dist/cjs/contracts/evidence.d.ts.map +1 -0
- package/dist/cjs/contracts/evidence.js +12 -0
- package/dist/cjs/contracts/evidence.js.map +1 -0
- package/dist/cjs/contracts/index.d.ts +10 -0
- package/dist/cjs/contracts/index.d.ts.map +1 -0
- package/dist/cjs/contracts/index.js +26 -0
- package/dist/cjs/contracts/index.js.map +1 -0
- package/dist/cjs/contracts/store.d.ts +30 -0
- package/dist/cjs/contracts/store.d.ts.map +1 -0
- package/dist/cjs/contracts/store.js +3 -0
- package/dist/cjs/contracts/store.js.map +1 -0
- package/dist/cjs/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/cjs/mcp/tool-profiles.js +46 -1
- package/dist/cjs/mcp/tool-profiles.js.map +1 -1
- package/dist/cjs/mcp/tools.d.ts +2 -0
- package/dist/cjs/mcp/tools.d.ts.map +1 -1
- package/dist/cjs/mcp/tools.js +319 -30
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/pr-review/bridge/BrainBridge.js +1 -1
- package/dist/cjs/pr-review/bridge/BrainBridge.js.map +1 -1
- package/dist/cjs/subconscious/BrainEmbeddings.d.ts +59 -0
- package/dist/cjs/subconscious/BrainEmbeddings.d.ts.map +1 -0
- package/dist/cjs/subconscious/BrainEmbeddings.js +222 -0
- package/dist/cjs/subconscious/BrainEmbeddings.js.map +1 -0
- package/dist/cjs/subconscious/GitIngest.js +2 -2
- package/dist/cjs/subconscious/GitIngest.js.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts +327 -9
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +952 -98
- package/dist/cjs/subconscious/TheBrainV2.js.map +1 -1
- package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts +16 -0
- package/dist/cjs/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
- package/dist/cjs/subconscious/freshness/LocalFsResolver.js +74 -0
- package/dist/cjs/subconscious/freshness/LocalFsResolver.js.map +1 -0
- package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
- package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
- package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js +24 -0
- package/dist/cjs/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
- package/dist/cjs/subconscious/freshness/index.d.ts +10 -0
- package/dist/cjs/subconscious/freshness/index.d.ts.map +1 -0
- package/dist/cjs/subconscious/freshness/index.js +26 -0
- package/dist/cjs/subconscious/freshness/index.js.map +1 -0
- package/dist/cjs/utils/ConversationCheckpoint.js +1 -1
- package/dist/cjs/utils/ConversationCheckpoint.js.map +1 -1
- package/dist/cjs/utils/ProjectIdentity.d.ts +12 -0
- package/dist/cjs/utils/ProjectIdentity.d.ts.map +1 -0
- package/dist/cjs/utils/ProjectIdentity.js +44 -0
- package/dist/cjs/utils/ProjectIdentity.js.map +1 -0
- package/dist/cjs/utils/PromptPatternCache.d.ts.map +1 -1
- package/dist/cjs/utils/PromptPatternCache.js +12 -2
- package/dist/cjs/utils/PromptPatternCache.js.map +1 -1
- package/dist/cjs/utils/RepeatGuard.d.ts.map +1 -1
- package/dist/cjs/utils/RepeatGuard.js +10 -2
- package/dist/cjs/utils/RepeatGuard.js.map +1 -1
- package/dist/cjs/utils/StateHashCache.d.ts +5 -0
- package/dist/cjs/utils/StateHashCache.d.ts.map +1 -1
- package/dist/cjs/utils/StateHashCache.js +40 -16
- package/dist/cjs/utils/StateHashCache.js.map +1 -1
- package/dist/esm/api/dashboardRoutes.d.ts +3 -3
- package/dist/esm/api/dashboardRoutes.js +1 -1
- package/dist/esm/api/server.d.ts +4 -4
- package/dist/esm/api/server.js +3 -3
- package/dist/esm/autopilot/AutopilotWatcher.js +3 -3
- package/dist/esm/autopilot/Notifier.d.ts +1 -1
- package/dist/esm/cli/lemma-proxy.d.ts.map +1 -1
- package/dist/esm/cli/lemma-proxy.js +33 -25
- package/dist/esm/cli/lemma-proxy.js.map +1 -1
- package/dist/esm/cli/stack.d.ts +4 -4
- package/dist/esm/cli/stack.js +5 -5
- package/dist/esm/cloud/KeyManager.d.ts +1 -1
- package/dist/esm/cloud/KeyManager.js +1 -1
- package/dist/esm/cloud/TenantCache.d.ts +1 -1
- package/dist/esm/cloud/TenantCache.d.ts.map +1 -1
- package/dist/esm/cloud/TenantCache.js +0 -4
- package/dist/esm/cloud/TenantCache.js.map +1 -1
- package/dist/esm/cloud/identity/ApiKey.d.ts +32 -0
- package/dist/esm/cloud/identity/ApiKey.d.ts.map +1 -0
- package/dist/esm/cloud/identity/ApiKey.js +49 -0
- package/dist/esm/cloud/identity/ApiKey.js.map +1 -0
- package/dist/esm/cloud/identity/PlanPolicy.d.ts +79 -0
- package/dist/esm/cloud/identity/PlanPolicy.d.ts.map +1 -0
- package/dist/esm/cloud/identity/PlanPolicy.js +129 -0
- package/dist/esm/cloud/identity/PlanPolicy.js.map +1 -0
- package/dist/esm/cloud/identity/RateLimiter.d.ts +49 -0
- package/dist/esm/cloud/identity/RateLimiter.d.ts.map +1 -0
- package/dist/esm/cloud/identity/RateLimiter.js +69 -0
- package/dist/esm/cloud/identity/RateLimiter.js.map +1 -0
- package/dist/esm/cloud/identity/TenantResolver.d.ts +19 -0
- package/dist/esm/cloud/identity/TenantResolver.d.ts.map +1 -0
- package/dist/esm/cloud/identity/TenantResolver.js +36 -0
- package/dist/esm/cloud/identity/TenantResolver.js.map +1 -0
- package/dist/esm/cloud/identity/authenticateV2.d.ts +48 -0
- package/dist/esm/cloud/identity/authenticateV2.d.ts.map +1 -0
- package/dist/esm/cloud/identity/authenticateV2.js +62 -0
- package/dist/esm/cloud/identity/authenticateV2.js.map +1 -0
- package/dist/esm/cloud/identity/identityStore.d.ts +56 -0
- package/dist/esm/cloud/identity/identityStore.d.ts.map +1 -0
- package/dist/esm/cloud/identity/identityStore.js +94 -0
- package/dist/esm/cloud/identity/identityStore.js.map +1 -0
- package/dist/esm/cloud/identity/index.d.ts +14 -0
- package/dist/esm/cloud/identity/index.d.ts.map +1 -0
- package/dist/esm/cloud/identity/index.js +14 -0
- package/dist/esm/cloud/identity/index.js.map +1 -0
- package/dist/esm/cloud/index.d.ts +3 -3
- package/dist/esm/cloud/index.js +3 -3
- package/dist/esm/cloud/metering/TokenCounter.d.ts +26 -0
- package/dist/esm/cloud/metering/TokenCounter.d.ts.map +1 -0
- package/dist/esm/cloud/metering/TokenCounter.js +76 -0
- package/dist/esm/cloud/metering/TokenCounter.js.map +1 -0
- package/dist/esm/cloud/metering/UsageLedger.d.ts +68 -0
- package/dist/esm/cloud/metering/UsageLedger.d.ts.map +1 -0
- package/dist/esm/cloud/metering/UsageLedger.js +98 -0
- package/dist/esm/cloud/metering/UsageLedger.js.map +1 -0
- package/dist/esm/cloud/metering/index.d.ts +12 -0
- package/dist/esm/cloud/metering/index.d.ts.map +1 -0
- package/dist/esm/cloud/metering/index.js +12 -0
- package/dist/esm/cloud/metering/index.js.map +1 -0
- package/dist/esm/cloud/scrub/StatelessScrubber.d.ts +53 -0
- package/dist/esm/cloud/scrub/StatelessScrubber.d.ts.map +1 -0
- package/dist/esm/cloud/scrub/StatelessScrubber.js +199 -0
- package/dist/esm/cloud/scrub/StatelessScrubber.js.map +1 -0
- package/dist/esm/cloud/scrub/index.d.ts +5 -0
- package/dist/esm/cloud/scrub/index.d.ts.map +1 -0
- package/dist/esm/cloud/scrub/index.js +5 -0
- package/dist/esm/cloud/scrub/index.js.map +1 -0
- package/dist/esm/cloud/server.d.ts +3 -3
- package/dist/esm/cloud/server.js +5 -5
- package/dist/esm/cloud/store/FileBrainStore.d.ts +26 -0
- package/dist/esm/cloud/store/FileBrainStore.d.ts.map +1 -0
- package/dist/esm/cloud/store/FileBrainStore.js +212 -0
- package/dist/esm/cloud/store/FileBrainStore.js.map +1 -0
- package/dist/esm/cloud/store/PostgresBrainStore.d.ts +50 -0
- package/dist/esm/cloud/store/PostgresBrainStore.d.ts.map +1 -0
- package/dist/esm/cloud/store/PostgresBrainStore.js +176 -0
- package/dist/esm/cloud/store/PostgresBrainStore.js.map +1 -0
- package/dist/esm/cloud/store/index.d.ts +6 -0
- package/dist/esm/cloud/store/index.d.ts.map +1 -0
- package/dist/esm/cloud/store/index.js +6 -0
- package/dist/esm/cloud/store/index.js.map +1 -0
- package/dist/esm/cloud/types.d.ts +0 -4
- package/dist/esm/cloud/types.d.ts.map +1 -1
- package/dist/esm/cloud/types.js +0 -2
- package/dist/esm/cloud/types.js.map +1 -1
- package/dist/esm/cloud/v2/app.d.ts +15 -0
- package/dist/esm/cloud/v2/app.d.ts.map +1 -0
- package/dist/esm/cloud/v2/app.js +57 -0
- package/dist/esm/cloud/v2/app.js.map +1 -0
- package/dist/esm/cloud/v2/routes/index.d.ts +24 -0
- package/dist/esm/cloud/v2/routes/index.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/index.js +32 -0
- package/dist/esm/cloud/v2/routes/index.js.map +1 -0
- package/dist/esm/cloud/v2/routes/memories.d.ts +83 -0
- package/dist/esm/cloud/v2/routes/memories.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/memories.js +238 -0
- package/dist/esm/cloud/v2/routes/memories.js.map +1 -0
- package/dist/esm/cloud/v2/routes/recall.d.ts +33 -0
- package/dist/esm/cloud/v2/routes/recall.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/recall.js +47 -0
- package/dist/esm/cloud/v2/routes/recall.js.map +1 -0
- package/dist/esm/cloud/v2/routes/scrub.d.ts +13 -0
- package/dist/esm/cloud/v2/routes/scrub.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/scrub.js +79 -0
- package/dist/esm/cloud/v2/routes/scrub.js.map +1 -0
- package/dist/esm/cloud/v2/routes/usage.d.ts +18 -0
- package/dist/esm/cloud/v2/routes/usage.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/usage.js +15 -0
- package/dist/esm/cloud/v2/routes/usage.js.map +1 -0
- package/dist/esm/cloud/v2/routes/verify.d.ts +35 -0
- package/dist/esm/cloud/v2/routes/verify.d.ts.map +1 -0
- package/dist/esm/cloud/v2/routes/verify.js +39 -0
- package/dist/esm/cloud/v2/routes/verify.js.map +1 -0
- package/dist/esm/cloud/v2/server.d.ts +27 -0
- package/dist/esm/cloud/v2/server.d.ts.map +1 -0
- package/dist/esm/cloud/v2/server.js +44 -0
- package/dist/esm/cloud/v2/server.js.map +1 -0
- package/dist/esm/config/index.d.ts +1 -1
- package/dist/esm/config/index.js +1 -1
- package/dist/esm/consensus/index.d.ts +2 -2
- package/dist/esm/consensus/index.js +2 -2
- package/dist/esm/contracts/api-v2.types.d.ts +103 -0
- package/dist/esm/contracts/api-v2.types.d.ts.map +1 -0
- package/dist/esm/contracts/api-v2.types.js +2 -0
- package/dist/esm/contracts/api-v2.types.js.map +1 -0
- package/dist/esm/contracts/errors.d.ts +40 -0
- package/dist/esm/contracts/errors.d.ts.map +1 -0
- package/dist/esm/contracts/errors.js +45 -0
- package/dist/esm/contracts/errors.js.map +1 -0
- package/dist/esm/contracts/evidence.d.ts +49 -0
- package/dist/esm/contracts/evidence.d.ts.map +1 -0
- package/dist/esm/contracts/evidence.js +11 -0
- package/dist/esm/contracts/evidence.js.map +1 -0
- package/dist/esm/contracts/index.d.ts +10 -0
- package/dist/esm/contracts/index.d.ts.map +1 -0
- package/dist/esm/contracts/index.js +10 -0
- package/dist/esm/contracts/index.js.map +1 -0
- package/dist/esm/contracts/store.d.ts +30 -0
- package/dist/esm/contracts/store.d.ts.map +1 -0
- package/dist/esm/contracts/store.js +2 -0
- package/dist/esm/contracts/store.js.map +1 -0
- package/dist/esm/core/AgentRegistry.d.ts +1 -1
- package/dist/esm/core/AgentRegistry.js +1 -1
- package/dist/esm/core/DashboardBroadcaster.d.ts +3 -3
- package/dist/esm/core/DashboardBroadcaster.js +2 -2
- package/dist/esm/core/DashboardWebSocketServer.d.ts +1 -1
- package/dist/esm/core/DashboardWebSocketServer.js +1 -1
- package/dist/esm/core/GhostAlchemist.js +1 -1
- package/dist/esm/core/GhostListener.js +2 -2
- package/dist/esm/core/OrchestrationEngine.d.ts +3 -3
- package/dist/esm/core/OrchestrationEngine.js +2 -2
- package/dist/esm/core/SubconsciousEngine.d.ts +1 -1
- package/dist/esm/core/SubconsciousEngine.js +2 -2
- package/dist/esm/core/WebSocketServer.d.ts +2 -2
- package/dist/esm/core/WebSocketServer.js +1 -1
- package/dist/esm/core/index.d.ts +6 -6
- package/dist/esm/core/index.js +6 -6
- package/dist/esm/core/router.d.ts +3 -3
- package/dist/esm/core/router.js +1 -1
- package/dist/esm/db/database.js +1 -1
- package/dist/esm/embed.d.ts +2 -2
- package/dist/esm/embed.js +2 -2
- package/dist/esm/examples/basic-usage.js +1 -1
- package/dist/esm/index.d.ts +14 -14
- package/dist/esm/index.js +14 -14
- package/dist/esm/infra/analyzers/DriftDetector.d.ts +1 -1
- package/dist/esm/infra/analyzers/InfraAnalyzer.d.ts +1 -1
- package/dist/esm/infra/analyzers/MonolithAnalyzer.d.ts +1 -1
- package/dist/esm/infra/analyzers/index.d.ts +3 -3
- package/dist/esm/infra/analyzers/index.js +3 -3
- package/dist/esm/infra/cli.js +2 -2
- package/dist/esm/infra/config.d.ts +1 -1
- package/dist/esm/infra/index.d.ts +5 -5
- package/dist/esm/infra/index.js +5 -5
- package/dist/esm/infra/mcp-tools.js +5 -5
- package/dist/esm/infra/providers/InfraProvider.d.ts +1 -1
- package/dist/esm/infra/providers/JenkinsProvider.d.ts +2 -2
- package/dist/esm/infra/providers/OKDProvider.d.ts +2 -2
- package/dist/esm/infra/providers/TerraformProvider.d.ts +2 -2
- package/dist/esm/infra/providers/index.d.ts +5 -5
- package/dist/esm/infra/providers/index.js +3 -3
- package/dist/esm/mcp/index.js +5 -5
- package/dist/esm/mcp/prompts.js +1 -1
- package/dist/esm/mcp/resources.js +2 -2
- package/dist/esm/mcp/tasks.js +1 -1
- package/dist/esm/mcp/tool-profiles.d.ts.map +1 -1
- package/dist/esm/mcp/tool-profiles.js +47 -2
- package/dist/esm/mcp/tool-profiles.js.map +1 -1
- package/dist/esm/mcp/tools.d.ts +2 -0
- package/dist/esm/mcp/tools.d.ts.map +1 -1
- package/dist/esm/mcp/tools.js +366 -78
- package/dist/esm/mcp/tools.js.map +1 -1
- package/dist/esm/observability/IdeContextSync.d.ts +1 -1
- package/dist/esm/observability/IdeContextSync.js +5 -5
- package/dist/esm/pr-review/PRReviewEngine.d.ts +1 -1
- package/dist/esm/pr-review/PRReviewEngine.js +4 -4
- package/dist/esm/pr-review/ReviewStore.d.ts +1 -1
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.d.ts +2 -2
- package/dist/esm/pr-review/adapters/AzureDevOpsAdapter.js +1 -1
- package/dist/esm/pr-review/adapters/GitHubAdapter.d.ts +2 -2
- package/dist/esm/pr-review/adapters/GitHubAdapter.js +1 -1
- package/dist/esm/pr-review/adapters/GitLabAdapter.d.ts +2 -2
- package/dist/esm/pr-review/adapters/GitLabAdapter.js +1 -1
- package/dist/esm/pr-review/adapters/GitPlatformAdapter.d.ts +1 -1
- package/dist/esm/pr-review/adapters/index.d.ts +4 -4
- package/dist/esm/pr-review/adapters/index.js +3 -3
- package/dist/esm/pr-review/analyzers/QualityGrader.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/RegressionDetector.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/SecurityScanner.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/StaticAnalyzer.d.ts +1 -1
- package/dist/esm/pr-review/analyzers/index.d.ts +8 -8
- package/dist/esm/pr-review/analyzers/index.js +4 -4
- package/dist/esm/pr-review/bridge/BrainBridge.d.ts +1 -1
- package/dist/esm/pr-review/bridge/BrainBridge.js +2 -2
- package/dist/esm/pr-review/bridge/BrainBridge.js.map +1 -1
- package/dist/esm/pr-review/bridge/index.d.ts +1 -1
- package/dist/esm/pr-review/bridge/index.js +1 -1
- package/dist/esm/pr-review/index.d.ts +4 -4
- package/dist/esm/pr-review/index.js +2 -2
- package/dist/esm/pr-review/reviewRunner.d.ts +2 -2
- package/dist/esm/pr-review/reviewRunner.js +6 -6
- package/dist/esm/pr-review/webhook/WebhookServer.js +1 -1
- package/dist/esm/pr-review/webhook/index.d.ts +1 -1
- package/dist/esm/pr-review/webhook/index.js +1 -1
- package/dist/esm/protocol/flows.d.ts +1 -1
- package/dist/esm/protocol/flows.js +1 -1
- package/dist/esm/protocol/index.d.ts +4 -4
- package/dist/esm/protocol/index.js +4 -4
- package/dist/esm/protocol/utils.d.ts +1 -1
- package/dist/esm/protocol/utils.js +2 -2
- package/dist/esm/protocol/validators.d.ts +1 -1
- package/dist/esm/protocol/validators.js +1 -1
- package/dist/esm/proxy/ContextInjector.d.ts +1 -1
- package/dist/esm/proxy/Gatekeeper.d.ts +1 -1
- package/dist/esm/security/SecurityMiddleware.d.ts +1 -1
- package/dist/esm/security/SecurityMiddleware.js +3 -3
- package/dist/esm/security/index.d.ts +4 -4
- package/dist/esm/security/index.js +4 -4
- package/dist/esm/speculative/SpeculativeCache.d.ts +2 -2
- package/dist/esm/speculative/SpeculativeEngine.d.ts +2 -2
- package/dist/esm/speculative/SpeculativeEngine.js +3 -3
- package/dist/esm/speculative/WorkerPool.d.ts +1 -1
- package/dist/esm/speculative/index.d.ts +4 -4
- package/dist/esm/speculative/index.js +4 -4
- package/dist/esm/subconscious/BrainEmbeddings.d.ts +59 -0
- package/dist/esm/subconscious/BrainEmbeddings.d.ts.map +1 -0
- package/dist/esm/subconscious/BrainEmbeddings.js +211 -0
- package/dist/esm/subconscious/BrainEmbeddings.js.map +1 -0
- package/dist/esm/subconscious/GitIngest.d.ts +1 -1
- package/dist/esm/subconscious/GitIngest.js +3 -3
- package/dist/esm/subconscious/GitIngest.js.map +1 -1
- package/dist/esm/subconscious/SemanticCache.d.ts +2 -2
- package/dist/esm/subconscious/SemanticCache.js +2 -2
- package/dist/esm/subconscious/SubconsciousEngine.d.ts +1 -1
- package/dist/esm/subconscious/SubconsciousEngine.js +3 -3
- package/dist/esm/subconscious/TheBrainV2.d.ts +327 -9
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +947 -98
- package/dist/esm/subconscious/TheBrainV2.js.map +1 -1
- package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts +16 -0
- package/dist/esm/subconscious/freshness/LocalFsResolver.d.ts.map +1 -0
- package/dist/esm/subconscious/freshness/LocalFsResolver.js +67 -0
- package/dist/esm/subconscious/freshness/LocalFsResolver.js.map +1 -0
- package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts +23 -0
- package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.d.ts.map +1 -0
- package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js +20 -0
- package/dist/esm/subconscious/freshness/SuppliedEvidenceResolver.js.map +1 -0
- package/dist/esm/subconscious/freshness/index.d.ts +10 -0
- package/dist/esm/subconscious/freshness/index.d.ts.map +1 -0
- package/dist/esm/subconscious/freshness/index.js +10 -0
- package/dist/esm/subconscious/freshness/index.js.map +1 -0
- package/dist/esm/subconscious/index.d.ts +4 -4
- package/dist/esm/subconscious/index.js +4 -4
- package/dist/esm/utils/AffectedTests.js +1 -1
- package/dist/esm/utils/AutoContextBundle.d.ts +1 -1
- package/dist/esm/utils/AutoContextBundle.js +4 -4
- package/dist/esm/utils/BulkFileDigest.js +2 -2
- package/dist/esm/utils/ClipboardWatcher.js +2 -2
- package/dist/esm/utils/ContextCollapser.js +1 -1
- package/dist/esm/utils/ConversationCheckpoint.js +2 -2
- package/dist/esm/utils/ConversationCheckpoint.js.map +1 -1
- package/dist/esm/utils/ExecutiveReport.js +1 -1
- package/dist/esm/utils/OutputLedger.js +2 -2
- package/dist/esm/utils/ProjectIdentity.d.ts +12 -0
- package/dist/esm/utils/ProjectIdentity.d.ts.map +1 -0
- package/dist/esm/utils/ProjectIdentity.js +37 -0
- package/dist/esm/utils/ProjectIdentity.js.map +1 -0
- package/dist/esm/utils/PromptPatternCache.d.ts.map +1 -1
- package/dist/esm/utils/PromptPatternCache.js +12 -2
- package/dist/esm/utils/PromptPatternCache.js.map +1 -1
- package/dist/esm/utils/ReadWorkspaceCache.js +1 -1
- package/dist/esm/utils/RepeatGuard.d.ts.map +1 -1
- package/dist/esm/utils/RepeatGuard.js +10 -2
- package/dist/esm/utils/RepeatGuard.js.map +1 -1
- package/dist/esm/utils/SpeculativeWarmer.d.ts +1 -1
- package/dist/esm/utils/SpeculativeWarmer.js +2 -2
- package/dist/esm/utils/StateHashCache.d.ts +5 -0
- package/dist/esm/utils/StateHashCache.d.ts.map +1 -1
- package/dist/esm/utils/StateHashCache.js +40 -16
- package/dist/esm/utils/StateHashCache.js.map +1 -1
- package/dist/esm/utils/StructuralSearch.d.ts +1 -1
- package/dist/esm/utils/SurgicalASTInsert.js +1 -1
- package/dist/esm/utils/SymbolSurgicalContext.js +1 -1
- package/dist/esm/utils/TestAutofixInterceptor.js +1 -1
- package/dist/esm/utils/WorkspaceSearch.js +0 -0
- package/dist/esm/utils/logger.js +1 -1
- package/dist/esm/utils/reportSavings.js +1 -1
- package/package.json +1 -1
- package/sdks/crewai/README.md +25 -0
- package/dist/cjs/package.json +0 -3
- package/dist/esm/package.json +0 -3
- package/sdks/crewai/dist/index.d.ts +0 -130
- 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":"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"}
|
|
@@ -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"}
|