@nxuss/lemma 1.17.0 → 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 +97 -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 +40 -21
- package/dist/cjs/mcp/tools.js.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.d.ts +43 -7
- package/dist/cjs/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/cjs/subconscious/TheBrainV2.js +86 -57
- 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/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 +87 -69
- 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 +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/GitIngest.d.ts +1 -1
- package/dist/esm/subconscious/GitIngest.js +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 +43 -7
- package/dist/esm/subconscious/TheBrainV2.d.ts.map +1 -1
- package/dist/esm/subconscious/TheBrainV2.js +87 -58
- 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 +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,8 +275,9 @@ 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 |
|
|
@@ -376,6 +382,49 @@ function configureClaudeCode() {
|
|
|
376
382
|
return true;
|
|
377
383
|
}
|
|
378
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
|
+
|
|
379
428
|
const LEMMA_RULES_CONTENT = `# Lemma MCP — Autonomous Behaviors
|
|
380
429
|
|
|
381
430
|
> ⚠️ MANDATORY RULES — Follow without exception.
|
|
@@ -532,10 +581,26 @@ function installProxyDaemon() {
|
|
|
532
581
|
const isMac = process.platform === 'darwin';
|
|
533
582
|
const isLinux = process.platform === 'linux';
|
|
534
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
|
+
|
|
535
592
|
if (isMac) {
|
|
536
593
|
const plistDir = path.join(os.homedir(), 'Library', 'LaunchAgents');
|
|
537
594
|
ensureDir(plistDir);
|
|
538
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');
|
|
539
604
|
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
540
605
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
541
606
|
<plist version="1.0">
|
|
@@ -545,6 +610,7 @@ function installProxyDaemon() {
|
|
|
545
610
|
<array>
|
|
546
611
|
<string>${process.execPath}</string>
|
|
547
612
|
<string>${PROXY_PATH}</string>
|
|
613
|
+
${argEntries}
|
|
548
614
|
</array>
|
|
549
615
|
<key>RunAtLoad</key><true/>
|
|
550
616
|
<key>KeepAlive</key><true/>
|
|
@@ -553,12 +619,12 @@ function installProxyDaemon() {
|
|
|
553
619
|
<key>StandardErrorPath</key><string>${LEMMA_CACHE}/proxy-daemon.log</string>
|
|
554
620
|
<key>EnvironmentVariables</key>
|
|
555
621
|
<dict>
|
|
556
|
-
|
|
557
|
-
<key>LEMMA_CACHE_DIR</key><string>${LEMMA_CACHE}</string>
|
|
622
|
+
${envEntries}
|
|
558
623
|
</dict>
|
|
559
624
|
</dict>
|
|
560
625
|
</plist>`;
|
|
561
626
|
fs.writeFileSync(plistPath, plist, 'utf8');
|
|
627
|
+
try { execSync('launchctl unload ' + plistPath, { stdio: 'ignore' }); } catch {}
|
|
562
628
|
try { execSync('launchctl load ' + plistPath, { stdio: 'ignore' }); } catch {}
|
|
563
629
|
return true;
|
|
564
630
|
}
|
|
@@ -566,23 +632,29 @@ function installProxyDaemon() {
|
|
|
566
632
|
if (isLinux) {
|
|
567
633
|
const svcDir = path.join(os.homedir(), '.config', 'systemd', 'user');
|
|
568
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');
|
|
569
642
|
const svc = `[Unit]
|
|
570
643
|
Description=Lemma Cache Proxy
|
|
571
644
|
After=network.target
|
|
572
645
|
|
|
573
646
|
[Service]
|
|
574
|
-
ExecStart=${process.execPath} ${PROXY_PATH}
|
|
647
|
+
ExecStart=${process.execPath} ${PROXY_PATH} ${proxyArgs.join(' ')}
|
|
575
648
|
Restart=always
|
|
576
649
|
RestartSec=3
|
|
577
|
-
|
|
578
|
-
Environment=LEMMA_CACHE_DIR=${LEMMA_CACHE}
|
|
650
|
+
${envLines}
|
|
579
651
|
|
|
580
652
|
[Install]
|
|
581
653
|
WantedBy=default.target
|
|
582
654
|
`;
|
|
583
655
|
const svcPath = path.join(svcDir, 'lemma-cache-proxy.service');
|
|
584
656
|
fs.writeFileSync(svcPath, svc, 'utf8');
|
|
585
|
-
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 {}
|
|
586
658
|
return true;
|
|
587
659
|
}
|
|
588
660
|
|
|
@@ -671,6 +743,19 @@ async function main() {
|
|
|
671
743
|
configureClaudeCode();
|
|
672
744
|
ok('Claude Code / CLI configured (CLAUDE.md + .claude/settings.local.json)');
|
|
673
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
|
+
|
|
674
759
|
updateAgentsMd();
|
|
675
760
|
ok('AGENTS.md configured (Codex CLI, Gemini CLI, OpenAI Agents, any AGENTS.md-aware tool)');
|
|
676
761
|
|
|
@@ -716,8 +801,8 @@ async function main() {
|
|
|
716
801
|
else skip('Windsurf not detected');
|
|
717
802
|
|
|
718
803
|
const daemonOk = installProxyDaemon();
|
|
719
|
-
if (daemonOk) ok('Cache proxy daemon installed & started');
|
|
720
|
-
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');
|
|
721
806
|
|
|
722
807
|
const envFile = createEnvFile();
|
|
723
808
|
ok(`Env file created: ${envFile}`);
|
|
@@ -733,6 +818,7 @@ async function main() {
|
|
|
733
818
|
process.stderr.write(` ${GREEN}●${RESET} Dashboard active ${DIM}(lemma stats)${RESET}\n`);
|
|
734
819
|
process.stderr.write(` ${GREEN}●${RESET} New terminals: env vars auto-loaded\n`);
|
|
735
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`);
|
|
736
822
|
process.stderr.write(` ${DIM}──────────────────────────────────────${RESET}\n`);
|
|
737
823
|
process.stderr.write(` ${YELLOW}Para activar en ESTA terminal:${RESET}\n`);
|
|
738
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 = {};
|