@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
package/bin/init.js
CHANGED
|
@@ -10,8 +10,13 @@ const LEMMA_CACHE = path.join(os.homedir(), '.lemma-cache');
|
|
|
10
10
|
const BRAIN_FILE = path.join(LEMMA_CACHE, 'lemma_brain.json');
|
|
11
11
|
const ENV_FILE = path.join(LEMMA_CACHE, 'env');
|
|
12
12
|
const MCP_SERVER_PATH = path.join(__dirname, '..', 'dist', 'cjs', 'mcp', 'index.js');
|
|
13
|
-
const PROXY_PATH = path.join(__dirname, '..', '
|
|
13
|
+
const PROXY_PATH = path.join(__dirname, '..', 'dist', 'cjs', 'cli', 'lemma-proxy.js');
|
|
14
14
|
const PORT = '8081';
|
|
15
|
+
// Static local placeholder — the proxy never validates the client's bearer token (it
|
|
16
|
+
// always signs upstream requests with its OWN server-side ANTHROPIC_API_KEY / OPENAI_API_KEY),
|
|
17
|
+
// and only binds to 127.0.0.1 by default. This just satisfies Claude Code's "auth token
|
|
18
|
+
// must be present" check; it is not a real credential.
|
|
19
|
+
const LEMMA_GATEWAY_TOKEN = 'sk-lemma-local-gateway';
|
|
15
20
|
const CYAN = '\x1b[36m', GREEN = '\x1b[32m', YELLOW = '\x1b[33m', DIM = '\x1b[2m', RESET = '\x1b[0m', BOLD = '\x1b[1m';
|
|
16
21
|
|
|
17
22
|
function ensureDir(p) { try { fs.mkdirSync(p, { recursive: true }); } catch {} }
|
|
@@ -270,13 +275,18 @@ tokens sale más cara que los tokens que ahorra.
|
|
|
270
275
|
| Tarea | Tool de Lemma | Por qué |
|
|
271
276
|
|---|---|---|
|
|
272
277
|
| Leer/listar/buscar en el workspace | \`mcp__lemma__read_workspace_file\`, \`list_workspace_dir\`, \`search_workspace\` | Auto-scrubbing de secretos y compresión de contexto sin perder el archivo real |
|
|
273
|
-
| Pregunta
|
|
274
|
-
|
|
|
278
|
+
| Pregunta puntual, de una sola sesión, atada a archivos concretos | \`mcp__lemma__state_hash_cache\` (action="lookup" antes de razonar, "store" después) | Hit solo si el hash exacto de esos archivos no cambió — invalidación exacta, no una adivinanza por similitud. Match de texto exacto en la query: no sirve para "¿algo así ya se resolvió?", solo para "esta misma pregunta, ¿estos archivos siguen igual?" |
|
|
279
|
+
| Conocimiento que debe sobrevivir sesiones, con seguimiento por símbolo (no todo el archivo) | \`mcp__lemma__search_memory\` / \`store_memory\` | Motor con más garantías: invalida por símbolo específico (no por archivo completo), distingue cambio de código real vs. cambio de branch, y sigue cadenas de memorias derivadas — no solo "sin dependencia de archivos", también rastrea archivos con más precisión que state_hash_cache |
|
|
280
|
+
| Pregunta general, sin dependencia de archivos ni necesidad de sobrevivir sesiones | \`mcp__lemma__smarter_cache\` | Cache semántico difuso; si hay hit, dilo explícitamente ("esto viene de una respuesta cacheada") en vez de presentarlo como recién razonado |
|
|
275
281
|
| Tarea mecánica/trivial y quieres saber si conviene un modelo más barato | \`mcp__lemma__get_routing_advice\` | Evita gastar presupuesto de modelo grande en algo mecánico |
|
|
276
282
|
| Agregar un método/función a un archivo existente | \`mcp__lemma__surgical_ast_insert\` | Patch quirúrgico en vez de reescribir el archivo completo |
|
|
277
283
|
| Antes de aplicar un patch generado | \`mcp__lemma__validate_patch_sandbox\` | Valídalo antes de escribirlo, no después |
|
|
278
284
|
| "¿Cuánto ahorramos de verdad?" | \`mcp__lemma__token_receipt\` | Bitácora auditable real, no una cifra inventada |
|
|
279
285
|
| Guardar una solución para el futuro | \`mcp__lemma__store_memory\` | Solo después de verificarla (tests pasaron, el usuario confirmó) — una solución mala guardada se vuelve un cache hit falso más adelante |
|
|
286
|
+
| Una memoria salió STALE pero la verificaste y sigue siendo correcta | \`mcp__lemma__refresh_memory\` | Re-ancla la evidencia conservando id, hits y las aristas \`derivedFrom\`; guardar un casi-duplicado pierde las tres (y el dedup suele rechazarlo) |
|
|
287
|
+
| Una memoria está simplemente mal, no solo mal encajada | \`mcp__lemma__forget_memory\` | Borrado real. Para "no era lo que buscaba en esta consulta" usa \`downvote_memory\`: esa memoria puede ser la correcta para otra pregunta |
|
|
288
|
+
|
|
289
|
+
Ambas están en el toolbox (\`action="call"\`), no en la lista anunciada.
|
|
280
290
|
|
|
281
291
|
## No todas las tools de Lemma están en tu lista
|
|
282
292
|
|
|
@@ -372,6 +382,49 @@ function configureClaudeCode() {
|
|
|
372
382
|
return true;
|
|
373
383
|
}
|
|
374
384
|
|
|
385
|
+
// ─── Claude Code gateway (routes real LLM traffic, not just MCP tools) ────────────
|
|
386
|
+
//
|
|
387
|
+
// Claude Code (CLI + VS Code/JetBrains extension) never picks up the OPENAI_*/CODEX_*
|
|
388
|
+
// vars other tools use — it isn't OpenAI-compatible. It respects ANTHROPIC_BASE_URL /
|
|
389
|
+
// ANTHROPIC_AUTH_TOKEN instead, and critically: the IDE extensions only read those from
|
|
390
|
+
// the user's GLOBAL ~/.claude/settings.json ("env" block) or managed settings — never
|
|
391
|
+
// from a project-local settings file. Without this, Lemma's MCP tools work but the
|
|
392
|
+
// actual model traffic (the thing that produces cache hits / real $ savings) never
|
|
393
|
+
// touches the proxy.
|
|
394
|
+
//
|
|
395
|
+
// This intentionally does NOT reuse KeyManager/Gatekeeper — those govern the Lemma Pro
|
|
396
|
+
// license tier (semantic cache vs. exact-match cache), which has nothing to do with
|
|
397
|
+
// gateway credentials. The proxy (lemma-proxy.ts) never validates whatever token the
|
|
398
|
+
// client sends anyway: it always signs upstream requests with its OWN server-side
|
|
399
|
+
// ANTHROPIC_API_KEY (see installProxyDaemon). So ANTHROPIC_AUTH_TOKEN here is just a
|
|
400
|
+
// fixed local placeholder to satisfy Claude Code's "a token is present" check.
|
|
401
|
+
function configureClaudeCodeGateway(anthropicApiKey) {
|
|
402
|
+
if (!anthropicApiKey) {
|
|
403
|
+
// Setting ANTHROPIC_BASE_URL alone would still redirect traffic away from
|
|
404
|
+
// api.anthropic.com, but a subscription (OAuth `claude login`) session's credentials
|
|
405
|
+
// would keep going out over that redirected connection with no server-side key to
|
|
406
|
+
// answer them — the proxy has nothing to sign upstream requests with and silently
|
|
407
|
+
// falls back to local Ollama. Refuse to flip this on until there's a real key.
|
|
408
|
+
return { activated: false, reason: 'no-anthropic-api-key' };
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
const claudeSettingsPath = path.join(os.homedir(), '.claude', 'settings.json');
|
|
412
|
+
ensureDir(path.dirname(claudeSettingsPath));
|
|
413
|
+
let settings = {};
|
|
414
|
+
try {
|
|
415
|
+
if (fs.existsSync(claudeSettingsPath)) {
|
|
416
|
+
settings = JSON.parse(fs.readFileSync(claudeSettingsPath, 'utf8'));
|
|
417
|
+
}
|
|
418
|
+
} catch {}
|
|
419
|
+
|
|
420
|
+
if (!settings.env || typeof settings.env !== 'object') settings.env = {};
|
|
421
|
+
settings.env.ANTHROPIC_BASE_URL = `http://localhost:${PORT}`;
|
|
422
|
+
settings.env.ANTHROPIC_AUTH_TOKEN = LEMMA_GATEWAY_TOKEN;
|
|
423
|
+
|
|
424
|
+
fs.writeFileSync(claudeSettingsPath, JSON.stringify(settings, null, 2), 'utf8');
|
|
425
|
+
return { activated: true, settingsPath: claudeSettingsPath };
|
|
426
|
+
}
|
|
427
|
+
|
|
375
428
|
const LEMMA_RULES_CONTENT = `# Lemma MCP — Autonomous Behaviors
|
|
376
429
|
|
|
377
430
|
> ⚠️ MANDATORY RULES — Follow without exception.
|
|
@@ -528,10 +581,26 @@ function installProxyDaemon() {
|
|
|
528
581
|
const isMac = process.platform === 'darwin';
|
|
529
582
|
const isLinux = process.platform === 'linux';
|
|
530
583
|
|
|
584
|
+
// The full proxy server (lemma-proxy.ts) needs its own server-side credentials to sign
|
|
585
|
+
// upstream requests — it never trusts whatever token the calling client sends. A launchd/
|
|
586
|
+
// systemd service does not inherit the shell's exported env, so these must be baked into
|
|
587
|
+
// the unit definition at install time or the daemon silently falls back to local Ollama.
|
|
588
|
+
const anthropicApiKey = process.env.ANTHROPIC_API_KEY || '';
|
|
589
|
+
const openaiApiKey = process.env.OPENAI_API_KEY || '';
|
|
590
|
+
const proxyArgs = ['start', '--port', PORT, '--no-configure', '--no-clipboard'];
|
|
591
|
+
|
|
531
592
|
if (isMac) {
|
|
532
593
|
const plistDir = path.join(os.homedir(), 'Library', 'LaunchAgents');
|
|
533
594
|
ensureDir(plistDir);
|
|
534
595
|
const plistPath = path.join(plistDir, 'com.lemma.cache-proxy.plist');
|
|
596
|
+
const argEntries = proxyArgs.map((a) => ` <string>${a}</string>`).join('\n');
|
|
597
|
+
const envEntries = [
|
|
598
|
+
` <key>LEMMA_PROXY_PORT</key><string>${PORT}</string>`,
|
|
599
|
+
` <key>LEMMA_CACHE_DIR</key><string>${LEMMA_CACHE}</string>`,
|
|
600
|
+
` <key>LEMMA_DISABLE_CLIPBOARD</key><string>true</string>`,
|
|
601
|
+
anthropicApiKey ? ` <key>ANTHROPIC_API_KEY</key><string>${anthropicApiKey}</string>` : '',
|
|
602
|
+
openaiApiKey ? ` <key>OPENAI_API_KEY</key><string>${openaiApiKey}</string>` : '',
|
|
603
|
+
].filter(Boolean).join('\n');
|
|
535
604
|
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
536
605
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
537
606
|
<plist version="1.0">
|
|
@@ -541,6 +610,7 @@ function installProxyDaemon() {
|
|
|
541
610
|
<array>
|
|
542
611
|
<string>${process.execPath}</string>
|
|
543
612
|
<string>${PROXY_PATH}</string>
|
|
613
|
+
${argEntries}
|
|
544
614
|
</array>
|
|
545
615
|
<key>RunAtLoad</key><true/>
|
|
546
616
|
<key>KeepAlive</key><true/>
|
|
@@ -549,12 +619,12 @@ function installProxyDaemon() {
|
|
|
549
619
|
<key>StandardErrorPath</key><string>${LEMMA_CACHE}/proxy-daemon.log</string>
|
|
550
620
|
<key>EnvironmentVariables</key>
|
|
551
621
|
<dict>
|
|
552
|
-
|
|
553
|
-
<key>LEMMA_CACHE_DIR</key><string>${LEMMA_CACHE}</string>
|
|
622
|
+
${envEntries}
|
|
554
623
|
</dict>
|
|
555
624
|
</dict>
|
|
556
625
|
</plist>`;
|
|
557
626
|
fs.writeFileSync(plistPath, plist, 'utf8');
|
|
627
|
+
try { execSync('launchctl unload ' + plistPath, { stdio: 'ignore' }); } catch {}
|
|
558
628
|
try { execSync('launchctl load ' + plistPath, { stdio: 'ignore' }); } catch {}
|
|
559
629
|
return true;
|
|
560
630
|
}
|
|
@@ -562,23 +632,29 @@ function installProxyDaemon() {
|
|
|
562
632
|
if (isLinux) {
|
|
563
633
|
const svcDir = path.join(os.homedir(), '.config', 'systemd', 'user');
|
|
564
634
|
ensureDir(svcDir);
|
|
635
|
+
const envLines = [
|
|
636
|
+
`Environment=LEMMA_PROXY_PORT=${PORT}`,
|
|
637
|
+
`Environment=LEMMA_CACHE_DIR=${LEMMA_CACHE}`,
|
|
638
|
+
`Environment=LEMMA_DISABLE_CLIPBOARD=true`,
|
|
639
|
+
anthropicApiKey ? `Environment=ANTHROPIC_API_KEY=${anthropicApiKey}` : '',
|
|
640
|
+
openaiApiKey ? `Environment=OPENAI_API_KEY=${openaiApiKey}` : '',
|
|
641
|
+
].filter(Boolean).join('\n');
|
|
565
642
|
const svc = `[Unit]
|
|
566
643
|
Description=Lemma Cache Proxy
|
|
567
644
|
After=network.target
|
|
568
645
|
|
|
569
646
|
[Service]
|
|
570
|
-
ExecStart=${process.execPath} ${PROXY_PATH}
|
|
647
|
+
ExecStart=${process.execPath} ${PROXY_PATH} ${proxyArgs.join(' ')}
|
|
571
648
|
Restart=always
|
|
572
649
|
RestartSec=3
|
|
573
|
-
|
|
574
|
-
Environment=LEMMA_CACHE_DIR=${LEMMA_CACHE}
|
|
650
|
+
${envLines}
|
|
575
651
|
|
|
576
652
|
[Install]
|
|
577
653
|
WantedBy=default.target
|
|
578
654
|
`;
|
|
579
655
|
const svcPath = path.join(svcDir, 'lemma-cache-proxy.service');
|
|
580
656
|
fs.writeFileSync(svcPath, svc, 'utf8');
|
|
581
|
-
try { execSync('systemctl --user daemon-reload && systemctl --user enable lemma-cache-proxy && systemctl --user
|
|
657
|
+
try { execSync('systemctl --user daemon-reload && systemctl --user enable lemma-cache-proxy && systemctl --user restart lemma-cache-proxy', { stdio: 'ignore' }); } catch {}
|
|
582
658
|
return true;
|
|
583
659
|
}
|
|
584
660
|
|
|
@@ -667,6 +743,19 @@ async function main() {
|
|
|
667
743
|
configureClaudeCode();
|
|
668
744
|
ok('Claude Code / CLI configured (CLAUDE.md + .claude/settings.local.json)');
|
|
669
745
|
|
|
746
|
+
const anthropicApiKey = process.env.ANTHROPIC_API_KEY || '';
|
|
747
|
+
const gatewayResult = configureClaudeCodeGateway(anthropicApiKey);
|
|
748
|
+
if (gatewayResult.activated) {
|
|
749
|
+
ok(`Claude Code gateway activated (~/.claude/settings.json → ANTHROPIC_BASE_URL=http://localhost:${PORT})`);
|
|
750
|
+
} else {
|
|
751
|
+
warn('Claude Code gateway NOT activated — no ANTHROPIC_API_KEY in this environment.');
|
|
752
|
+
warn(` Model traffic keeps going directly to Anthropic (subscription/OAuth or your own key, unchanged).`);
|
|
753
|
+
warn(` Only Lemma's MCP tools are active for Claude Code — no cache savings on the model traffic itself.`);
|
|
754
|
+
warn(` To enable it: export ANTHROPIC_API_KEY=sk-ant-... and re-run \`lemma init\`.`);
|
|
755
|
+
warn(` This SWITCHES Claude Code off your subscription/OAuth session for LLM calls — they'll be`);
|
|
756
|
+
warn(` signed by the proxy's own ANTHROPIC_API_KEY instead, and billed/rate-limited as API usage.`);
|
|
757
|
+
}
|
|
758
|
+
|
|
670
759
|
updateAgentsMd();
|
|
671
760
|
ok('AGENTS.md configured (Codex CLI, Gemini CLI, OpenAI Agents, any AGENTS.md-aware tool)');
|
|
672
761
|
|
|
@@ -712,8 +801,8 @@ async function main() {
|
|
|
712
801
|
else skip('Windsurf not detected');
|
|
713
802
|
|
|
714
803
|
const daemonOk = installProxyDaemon();
|
|
715
|
-
if (daemonOk) ok('Cache proxy daemon installed & started');
|
|
716
|
-
else warn('Could not install daemon — run `lemma proxy` manually');
|
|
804
|
+
if (daemonOk) ok('Cache proxy daemon installed & started (OpenAI + Anthropic /v1/messages, streaming)');
|
|
805
|
+
else warn('Could not install daemon — run `lemma proxy start` manually');
|
|
717
806
|
|
|
718
807
|
const envFile = createEnvFile();
|
|
719
808
|
ok(`Env file created: ${envFile}`);
|
|
@@ -729,6 +818,7 @@ async function main() {
|
|
|
729
818
|
process.stderr.write(` ${GREEN}●${RESET} Dashboard active ${DIM}(lemma stats)${RESET}\n`);
|
|
730
819
|
process.stderr.write(` ${GREEN}●${RESET} New terminals: env vars auto-loaded\n`);
|
|
731
820
|
process.stderr.write(` ${GREEN}●${RESET} Todos los IDE/CLI nuevos ya apuntan al proxy\n`);
|
|
821
|
+
process.stderr.write(` ${gatewayResult.activated ? GREEN + '●' : YELLOW + '○'}${RESET} Claude Code gateway: ${gatewayResult.activated ? 'ACTIVE (model traffic cached)' : 'inactive (MCP tools only)'}\n`);
|
|
732
822
|
process.stderr.write(` ${DIM}──────────────────────────────────────${RESET}\n`);
|
|
733
823
|
process.stderr.write(` ${YELLOW}Para activar en ESTA terminal:${RESET}\n`);
|
|
734
824
|
process.stderr.write(` ${BOLD}source ${ENV_FILE}${RESET}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"lemma-proxy.d.ts","sourceRoot":"","sources":["../../../src/cli/lemma-proxy.ts"],"names":[],"mappings":";AA0cA,wBAAgB,+BAA+B,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CA4DvF;AA4nED,wBAAsB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA8KhL"}
|
|
@@ -50,6 +50,7 @@ const AgentMultiplexer_1 = require("../proxy/AgentMultiplexer");
|
|
|
50
50
|
const SseRelay_1 = require("../proxy/SseRelay");
|
|
51
51
|
const KeyManager_1 = require("../proxy/KeyManager");
|
|
52
52
|
const Gatekeeper_1 = require("../proxy/Gatekeeper");
|
|
53
|
+
const ProjectIdentity_1 = require("../utils/ProjectIdentity");
|
|
53
54
|
const ProjectRegistry_1 = require("../proxy/ProjectRegistry");
|
|
54
55
|
const ContextInjector_1 = require("../proxy/ContextInjector");
|
|
55
56
|
const SavingsLedger_1 = require("../utils/SavingsLedger");
|
|
@@ -100,18 +101,13 @@ function writeJson(filePath, data) {
|
|
|
100
101
|
function getCollectionName(projectName) {
|
|
101
102
|
return `lemma-cache-${projectName}`;
|
|
102
103
|
}
|
|
104
|
+
// detectProject/isProjectMismatch live in ../utils/ProjectIdentity — a side-effect-free
|
|
105
|
+
// module shared with src/mcp/tools.ts, so the client and this daemon can never define
|
|
106
|
+
// "project name" two different ways again, and so a test can import the comparison logic
|
|
107
|
+
// without pulling in this whole CLI (which parses process.argv on import — see bottom of
|
|
108
|
+
// this file).
|
|
103
109
|
function detectProject() {
|
|
104
|
-
|
|
105
|
-
const pkgPath = path_1.default.join(cwd, 'package.json');
|
|
106
|
-
if (fs_1.default.existsSync(pkgPath)) {
|
|
107
|
-
try {
|
|
108
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(pkgPath, 'utf8'));
|
|
109
|
-
if (pkg.name)
|
|
110
|
-
return pkg.name;
|
|
111
|
-
}
|
|
112
|
-
catch { }
|
|
113
|
-
}
|
|
114
|
-
return path_1.default.basename(cwd);
|
|
110
|
+
return (0, ProjectIdentity_1.detectProjectName)(process.cwd());
|
|
115
111
|
}
|
|
116
112
|
function ensureProjectDir(projectName) {
|
|
117
113
|
const hash = crypto_1.default.createHash('sha1').update(projectName).digest('hex').slice(0, 12);
|
|
@@ -1351,6 +1347,18 @@ class LemmaServer {
|
|
|
1351
1347
|
// Dynamic Zero-Shot Onboarding mental model builder
|
|
1352
1348
|
this.app.get('/api/project/onboarding', async (req, res) => {
|
|
1353
1349
|
try {
|
|
1350
|
+
// This daemon is one shared process per machine — its project identity was fixed
|
|
1351
|
+
// at `lemma start` time to whatever cwd it was launched from, not to whichever
|
|
1352
|
+
// project's MCP client happens to be asking. A caller from a DIFFERENT project
|
|
1353
|
+
// still resolves the same global proxy.port and would otherwise get served this
|
|
1354
|
+
// daemon's stack/files/architecture memories as if they were its own. When the
|
|
1355
|
+
// caller tells us what project it expects (see detectExpectedProjectName in
|
|
1356
|
+
// src/mcp/tools.ts) and it doesn't match, decline rather than answer wrong —
|
|
1357
|
+
// the caller falls back to its own local (correctly-scoped) generator.
|
|
1358
|
+
const expectedProject = typeof req.query.expectedProject === 'string' ? req.query.expectedProject : null;
|
|
1359
|
+
if ((0, ProjectIdentity_1.isProjectMismatch)(expectedProject, this.projectName)) {
|
|
1360
|
+
return res.json({ success: false, mismatch: true, servingProject: this.projectName });
|
|
1361
|
+
}
|
|
1354
1362
|
const cwd = process.cwd();
|
|
1355
1363
|
// 1. Parse package.json
|
|
1356
1364
|
let pkg = {};
|