@cerebriline/core 4.100.251 → 4.100.252
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/dist/cloud/index.js +17 -17
- package/dist/document-reader-child.js +24 -24
- package/dist/extensions/plugin-sandbox-bootstrap.js +1 -1
- package/dist/extensions/tools/task-progress.d.ts +15 -0
- package/dist/hub/daemon/entry.js +775 -776
- package/dist/hub/index.js +764 -765
- package/dist/index.js +1062 -1063
- package/dist/remote/remote-helper-entry.js +4 -4
- package/dist/remote/remote-helper.js +4 -4
- package/dist/services/feature-flags/posthog.js +1 -1
- package/dist/services/llms/provider-settings.d.ts +20 -0
- package/dist/services/llms/session-budget.d.ts +10 -3
- package/dist/services/telemetry/index.js +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
import{existsSync as g,mkdirSync as u,readFileSync as c,writeFileSync as m}from"node:fs";import{resolve as d}from"node:path";import{resolveSessionDataDir as l}from"@cerebriline/shared/storage";import{nanoid as p}from"nanoid";import*as r from"node-machine-id";var a="machine-id",q,h=!1;function R(){if(!h)q=E(),h=!0;return q??z()}function Y(f){let j=f?.trim();if(j)return j;let $=E();if($)return $;return z()}function n(){let f=r;return f.machineIdSync??f.default?.machineIdSync}function E(){try{let f=n();if(!f)return;return f().trim()||void 0}catch{return}}function z(){let f=l(),j=d(f,a);try{if(g(j)){let A=c(j,"utf8").trim();if(A.length>0)return A}}catch{}let $=`cl-${p()}`;try{u(f,{recursive:!0}),m(j,$,"utf8")}catch{}return $}class B{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(f){this.name=f.name??"OpenTelemetryAdapter",this.metadata={...f.metadata},this.meterProvider=f.meterProvider,this.loggerProvider=f.loggerProvider,this.meter=f.meterProvider?.getMeter("cline")??null,this.logger=f.loggerProvider?.getLogger("cline")??null,this.enabled=f.enabled??!0,this.distinctId=f.distinctId,this.commonProperties=f.commonProperties?{...f.commonProperties}:{}}emit(f,j){if(!this.isEnabled())return;this.emitLog(f,j,!1)}emitRequired(f,j){this.emitLog(f,j,!0)}recordCounter(f,j,$,A,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.counters.get(f);if(!W)W=this.meter.createCounter(f,A?{description:A}:void 0),this.counters.set(f,W);W.add(j,this.flattenProperties(this.buildAttributes($)))}recordHistogram(f,j,$,A,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.histograms.get(f);if(!W)W=this.meter.createHistogram(f,A?{description:A}:void 0),this.histograms.set(f,W);W.record(j,this.flattenProperties(this.buildAttributes($)))}recordGauge(f,j,$,A,J=!1){if(!this.meter||!J&&!this.isEnabled())return;let W=this.buildAttributes($),H=JSON.stringify(W),X=this.gaugeValues.get(f);if(j===null){if(X){if(X.delete(H),X.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let O=X;if(!O)O=new Map,this.gaugeValues.set(f,O);if(!this.gauges.has(f)){let Z=this.meter.createObservableGauge(f,A?{description:A}:void 0);Z.addCallback((Q)=>{for(let w of this.snapshotGaugeSeries(f))Q.observe(w.value,this.flattenProperties(w.attributes))}),this.gauges.set(f,Z)}O.set(H,{value:j,attributes:W})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(f){this.distinctId=f}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(f,j,$){if(!this.logger)return;let A=this.flattenProperties(this.buildAttributes(j,$));this.logger.emit({severityText:"INFO",body:f,attributes:A})}buildAttributes(f,j=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...j?{_required:!0}:{}}}snapshotGaugeSeries(f){let j=this.gaugeValues.get(f);if(!j)return[];return Array.from(j.values(),($)=>({value:$.value,attributes:$.attributes?{...$.attributes}:void 0}))}flattenProperties(f,j="",$=new WeakSet,A=0){if(!f)return{};let J={},W=100,H=10;for(let[X,O]of Object.entries(f)){if(X==="__proto__"||X==="constructor"||X==="prototype")continue;let Z=j?`${j}.${X}`:X;if(O===null||O===void 0){J[Z]=String(O);continue}if(Array.isArray(O)){let Q=O.length>W?O.slice(0,W):O;try{J[Z]=JSON.stringify(Q)}catch{J[Z]="[UnserializableArray]"}if(O.length>W)J[`${Z}_truncated`]=!0,J[`${Z}_original_length`]=O.length;continue}if(typeof O==="object"){if(O instanceof Date){J[Z]=O.toISOString();continue}if(O instanceof Error){J[Z]=O.message;continue}if($.has(O)){J[Z]="[Circular]";continue}if(A>=H){J[Z]="[MaxDepthExceeded]";continue}$.add(O),Object.assign(J,this.flattenProperties(O,Z,$,A+1));continue}if(s(O)){J[Z]=O;continue}try{J[Z]=JSON.stringify(O)}catch{J[Z]=String(O)}}return J}}function s(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}import{LangfuseAttributesSpanProcessor as Xf}from"@cerebriline/llms";import{markOtlpTraceRelayProvider as Zf}from"@cerebriline/shared";import{metrics as Kf,trace as Pf}from"@opentelemetry/api";import{logs as Qf}from"@opentelemetry/api-logs";import{OTLPLogExporter as Tf}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Yf}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Bf}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Ff}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Vf,ConsoleLogRecordExporter as Rf,LoggerProvider as Uf}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Lf,MeterProvider as kf,PeriodicExportingMetricReader as G}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Cf,ConsoleSpanExporter as _f,SimpleSpanProcessor as Mf}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as wf}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as qf,ATTR_SERVICE_VERSION as hf}from"@opentelemetry/semantic-conventions";import{mkdirSync as f0,readFileSync as i,statSync as o,writeFileSync as j0}from"node:fs";import{CONFIGURABLE_MODEL_TOOL_NAMES as t}from"@cerebriline/shared";import{resolveGlobalSettingsPath as e}from"@cerebriline/shared/storage";import{z as K}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as uf,captureAgentUnexpectedReasoningTokens as cf,captureTaskLifecycleEvent as mf,SDK_ERROR_TELEMETRY_EVENT as df,TASK_CANCELLED_EVENT as lf,TASK_FIRST_CHUNK_RECEIVED_EVENT as pf,TASK_MAX_TOKENS_RECOVERY_EVENT as rf,TASK_PROVIDER_REQUEST_STARTED_EVENT as af,TASK_PROVIDER_STREAM_FAILED_EVENT as nf,TASK_PROVIDER_STREAM_STARTED_EVENT as sf}from"@cerebriline/shared";var U=K.preprocess((f)=>Array.isArray(f)?f.filter((j)=>typeof j==="string").map((j)=>j.trim()).filter(Boolean):void 0,K.array(K.string()).optional()).transform((f)=>{if(!f)return;let j=[...new Set(f)].sort(($,A)=>$.localeCompare(A));return j.length>0?j:void 0}),ff=K.enum(["basic","agentic"]).catch("agentic"),jf=K.partialRecord(K.enum(t),K.object({enabled:K.boolean()}).strip()).optional(),$f=K.record(K.string(),K.object({enabled:K.boolean()}).strip()).optional().catch(void 0),Af=K.enum(["plan","act"]),D=K.object({telemetryOptOut:K.boolean().default(!1).catch(!1),autoUpdateEnabled:K.boolean().default(!0).catch(!0),compactionStrategy:ff.optional(),compactionEnabled:K.boolean().optional().catch(void 0),planActMode:Af.optional().catch(void 0),toolAutoApprove:K.boolean().optional().catch(void 0),tuiTheme:K.string().optional().catch(void 0),disabledTools:U.optional(),tools:jf,disabledPlugins:U.optional(),disabledAgentPlugins:U.optional(),bundledSkills:$f}).strip().transform((f)=>{let j={autoUpdateEnabled:f.autoUpdateEnabled,telemetryOptOut:f.telemetryOptOut};if(f.compactionStrategy)j.compactionStrategy=f.compactionStrategy;if(f.compactionEnabled!==void 0)j.compactionEnabled=f.compactionEnabled;if(f.planActMode)j.planActMode=f.planActMode;if(f.toolAutoApprove!==void 0)j.toolAutoApprove=f.toolAutoApprove;if(f.tuiTheme?.trim())j.tuiTheme=f.tuiTheme.trim();if(f.disabledTools?.length)j.disabledTools=f.disabledTools;if(f.tools&&Object.keys(f.tools).length>0)j.tools=f.tools;if(f.disabledPlugins?.length)j.disabledPlugins=f.disabledPlugins;if(f.disabledAgentPlugins?.length)j.disabledAgentPlugins=f.disabledAgentPlugins;if(f.bundledSkills&&Object.keys(f.bundledSkills).length>0)j.bundledSkills=f.bundledSkills;return j});function F(){return D.parse({})}var L;function Jf(f){if(f.disabledTools)Object.freeze(f.disabledTools);if(f.tools){for(let j of Object.values(f.tools))Object.freeze(j);Object.freeze(f.tools)}if(f.disabledPlugins)Object.freeze(f.disabledPlugins);if(f.disabledAgentPlugins)Object.freeze(f.disabledAgentPlugins);return Object.freeze(f)}function Hf(f){let j;try{j=i(f,"utf8")}catch{return{value:F(),loadFailed:!0}}try{let $=D.safeParse(JSON.parse(j));return $.success?{value:$.data,loadFailed:!1}:{value:F(),loadFailed:!0}}catch{return{value:F(),loadFailed:!0}}}function Wf(){let f=e(),j=o(f,{throwIfNoEntry:!1}),$=j?.mtimeMs??0,A=j?.size??0,J=L;if(J&&J.path===f&&J.mtimeMs===$&&J.size===A)return J;let W=j?Hf(f):{value:F(),loadFailed:!1},H=Jf(W.value);return L={path:f,mtimeMs:$,size:A,value:H,loadFailed:W.loadFailed},L}function Of(){return Wf().value}function I(){return Of().telemetryOptOut}class k{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,j){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:j})}emitRequired(f,j){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:j})}recordCounter(f,j,$,A,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:j,attributes:$,description:A,required:J===!0})}recordHistogram(f,j,$,A,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:j,attributes:$,description:A,required:J===!0})}recordGauge(f,j,$,A,J){if(!J&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:j,attributes:$,description:A,required:J===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class V{adapters;metadata;distinctId;deviceId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new k({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.deviceId=f.deviceId??R(),this.commonProperties={...f.commonProperties??{}}}addAdapter(f){this.adapters.push(f)}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return this.adapters.some((f)=>f.isEnabled())}capture(f){let j=this.buildAttributes(f.properties);for(let $ of this.adapters)$.emit(f.event,j)}captureRequired(f,j){let $=this.buildAttributes(j);for(let A of this.adapters)A.emitRequired(f,$)}recordCounter(f,j,$,A,J=!1){let W=this.buildAttributes($);for(let H of this.adapters)H.recordCounter(f,j,W,A,J)}recordHistogram(f,j,$,A,J=!1){let W=this.buildAttributes($);for(let H of this.adapters)H.recordHistogram(f,j,W,A,J)}recordGauge(f,j,$,A,J=!1){let W=this.buildAttributes($);for(let H of this.adapters)H.recordGauge(f,j,W,A,J)}async flush(){await Promise.all(this.adapters.map((f)=>f.flush()))}async dispose(){await Promise.all(this.adapters.map((f)=>f.dispose()))}buildAttributes(f){let j=typeof f?.distinct_id==="string"&&f.distinct_id.trim()?f.distinct_id.trim():this.distinctId,$={...this.commonProperties,...this.metadata,...f,...j?{distinct_id:j}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))}}class x{distinctId;metadata;commonProperties;constructor(f={}){this.distinctId=f.distinctId,this.metadata={...f.metadata??{}},this.commonProperties={...f.commonProperties??{}}}setDistinctId(f){this.distinctId=f}setMetadata(f){this.metadata={...f}}updateMetadata(f){this.metadata={...this.metadata,...f}}setCommonProperties(f){this.commonProperties={...f}}updateCommonProperties(f){this.commonProperties={...this.commonProperties,...f}}isEnabled(){return!1}capture(f){this.resolveProperties(f.properties)}captureRequired(f,j){this.resolveProperties(j)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){let j=typeof f?.distinct_id==="string"&&f.distinct_id.trim()?f.distinct_id.trim():this.distinctId,$={...this.commonProperties,...this.metadata,...f,...j?{distinct_id:j}:{}};return Object.fromEntries(Object.entries($).filter(([,A])=>A!==void 0))}}class _{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let j=Ff({[qf]:f.serviceName??"cline",...f.serviceVersion?{[hf]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(j),this.loggerProvider=this.createLoggerProvider(j),this.tracerProvider=this.createTracerProvider(j),this.meterProvider)Kf.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Qf.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",j){return Pf.getTracer(f,j??this.options.serviceVersion)}createAdapter(f){return new B({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let j=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new V({...f,adapters:[j],distinctId:Y(f.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(f){let j=C(this.options.metricsExporter);if(j.length===0)return null;let $=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),A=Math.min(30000,Math.floor($*0.8)),J=j.map((W)=>If(W,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:$,timeout:A})).filter((W)=>W!==null);if(J.length===0)return null;return new kf({resource:f,readers:J})}createTracerProvider(f){let j=C(this.options.tracesExporter);if(j.length===0)return null;let $=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,A=this.options.otlpTracesHeaders??this.options.otlpHeaders,J=[],W=!1;for(let X of j){let O=Df(X,{endpoint:$,headers:A,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(O){if(J.push(O),X!=="console")W=!0}}if(J.length===0)return null;let H=new wf({resource:f,spanProcessors:W?[new Xf,...J]:J});if(W)Zf(H);return H}createLoggerProvider(f){let j=C(this.options.logsExporter);if(j.length===0)return null;let $=j.map((A)=>{let J=zf(A,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!J)return null;return new Vf(J,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((A)=>A!==null);if($.length===0)return null;return new Uf({resource:f,processors:$})}}function N(f){let j=new _(f),$=j.createTelemetryService(f),A=()=>{$.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:f.enabled??!0,logsExporter:Array.isArray(f.logsExporter)?f.logsExporter.join(","):f.logsExporter,metricsExporter:Array.isArray(f.metricsExporter)?f.metricsExporter.join(","):f.metricsExporter,tracesExporter:Array.isArray(f.tracesExporter)?f.tracesExporter.join(","):f.tracesExporter,otlpProtocol:f.otlpProtocol,hasOtlpEndpoint:Boolean(f.otlpEndpoint),serviceName:f.serviceName,serviceVersion:f.serviceVersion})};if(!f.deferProviderCreatedEvent)A();return{provider:j,telemetry:$,emitProviderCreated:A}}function y(f){if(I())return{telemetry:new x(f)};if(f.enabled!==!0)return{telemetry:new V({...f,distinctId:Y(f.distinctId)})};return N(f)}function Ef(f){let{telemetry:j,provider:$,emitProviderCreated:A}=y(f);return{telemetry:j,provider:$,flush:async()=>{let H=$;if(H&&typeof H.forceFlush==="function")try{await H.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([j.dispose(),$?.dispose()])},...f.deferProviderCreatedEvent&&A?{emitProviderCreated:A}:{}}}function C(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map(($)=>$.trim()).filter(($)=>$==="console"||$==="otlp")}function zf(f,j){if(f==="console")return new Rf;if(!j.endpoint)return null;let $=M(j.endpoint,"/v1/logs");return new Tf({url:$,headers:j.headers})}function Df(f,j){if(f==="console")return new Mf(new _f);if(!j.endpoint)return null;let $=M(j.endpoint,"/v1/traces");return new Cf(new Bf({url:$,headers:j.headers}))}function If(f,j){if(f==="console")return new G({exporter:new Lf,exportIntervalMillis:j.interval,exportTimeoutMillis:j.timeout});if(!j.endpoint)return null;let $=M(j.endpoint,"/v1/metrics");return new G({exporter:new Yf({url:$,headers:j.headers}),exportIntervalMillis:j.interval,exportTimeoutMillis:j.timeout})}function M(f,j){let $=new URL(f),A=$.pathname.endsWith("/")?$.pathname.slice(0,-1):$.pathname;return $.pathname=A.endsWith(j)?A:`${A}${j}`,$.toString()}import{SESSION_STATUS_VALUES as D0}from"@cerebriline/shared";var T={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function b(f){let j=[f?.name,f?.platform].filter(($)=>typeof $==="string").join(" ").toLowerCase();if(!j)return;if(j.includes("vscode")||j.includes("visual studio code"))return T.VSCODE;if(j.includes("jetbrains")||j.includes("webstorm")||j.includes("intellij")||j.includes("pycharm")||j.includes("goland")||j.includes("clion")||j.includes("rider")||j.includes("android studio"))return T.JETBRAINS;if(j.includes("neovim"))return T.NEOVIM;if(j.includes("kanban"))return T.KANBAN;if(j.includes("desktop"))return T.DESKTOP;if(j.includes("cline-platform"))return T.WEB;if(j.includes("cline-cli")||j.includes("cline-acp"))return T.CLI;if(j.includes("cline-sdk")||j.includes("cline-core"))return T.CORE;return}function P(f){let j=f?.trim();return j?j:void 0}function S(f){let j=f.client,$=b(j)??P(f.source),A=P(j.version),J=P(j.platform)??P(j.name),W=P(j.platformVersion)??A,H={cline_type:$,extension_version:A,platform:J,platform_version:W};if(f.user?.accountId===void 0)return H;let X=typeof f.user.accountId==="string"?P(f.user.accountId):void 0;return{...H,distinct_id:X??P(f.user.distinctId),user_id:X,account_id:X,account_email:X?P(f.user.email):void 0,organization_id:X?P(f.user.organizationId):void 0}}function v(f,j){let $={},A={},J,W=(H)=>({...j,...A,...$,...H,...J?{distinct_id:J}:{}});return{setDistinctId(H){J=P(H)},setMetadata(H){$={...H}},updateMetadata(H){$={...$,...H}},setCommonProperties(H){A={...H}},updateCommonProperties(H){A={...A,...H}},isEnabled:()=>f.isEnabled(),capture:(H)=>f.capture({event:H.event,properties:W(H.properties)}),captureRequired:(H,X)=>f.captureRequired(H,W(X)),recordCounter:(H,X,O,Z,Q)=>f.recordCounter(H,X,W(O),Z,Q),recordHistogram:(H,X,O,Z,Q)=>f.recordHistogram(H,X,W(O),Z,Q),recordGauge:(H,X,O,Z,Q)=>f.recordGauge(H,X,W(O),Z,Q),flush:()=>f.flush(),dispose:async()=>{}}}function Gf(f,j){return v(f,S(j))}export{Y as resolveCoreDistinctId,R as resolveCoreDeviceId,S as resolveClientTelemetryProperties,v as createScopedTelemetryService,N as createOpenTelemetryTelemetryService,y as createConfiguredTelemetryService,Ef as createConfiguredTelemetryHandle,Gf as createClientScopedTelemetryService,_ as OpenTelemetryProvider,B as OpenTelemetryAdapter};
|
|
1
|
+
import{existsSync as K,mkdirSync as H,readFileSync as F,writeFileSync as V}from"node:fs";import{resolve as z}from"node:path";import{resolveSessionDataDir as B}from"@cerebriline/shared/storage";import{nanoid as j}from"nanoid";import*as W from"node-machine-id";var q="machine-id",A,O=!1;function S(){if(!O)A=C(),O=!0;return A??x()}function g(e){let t=e?.trim();if(t)return t;let r=C();if(r)return r;return x()}function Y(){let e=W;return e.machineIdSync??e.default?.machineIdSync}function C(){try{let e=Y();if(!e)return;return e().trim()||void 0}catch{return}}function x(){let e=B(),t=z(e,q);try{if(K(t)){let i=F(t,"utf8").trim();if(i.length>0)return i}}catch{}let r=`cl-${j()}`;try{H(e,{recursive:!0}),V(t,r,"utf8")}catch{}return r}class f{name;metadata;meter;logger;enabled;distinctId;commonProperties;counters=new Map;histograms=new Map;gauges=new Map;gaugeValues=new Map;meterProvider;loggerProvider;constructor(e){this.name=e.name??"OpenTelemetryAdapter",this.metadata={...e.metadata},this.meterProvider=e.meterProvider,this.loggerProvider=e.loggerProvider,this.meter=e.meterProvider?.getMeter("cline")??null,this.logger=e.loggerProvider?.getLogger("cline")??null,this.enabled=e.enabled??!0,this.distinctId=e.distinctId,this.commonProperties=e.commonProperties?{...e.commonProperties}:{}}emit(e,t){if(!this.isEnabled())return;this.emitLog(e,t,!1)}emitRequired(e,t){this.emitLog(e,t,!0)}recordCounter(e,t,r,i,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.counters.get(e);if(!s)s=this.meter.createCounter(e,i?{description:i}:void 0),this.counters.set(e,s);s.add(t,this.flattenProperties(this.buildAttributes(r)))}recordHistogram(e,t,r,i,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.histograms.get(e);if(!s)s=this.meter.createHistogram(e,i?{description:i}:void 0),this.histograms.set(e,s);s.record(t,this.flattenProperties(this.buildAttributes(r)))}recordGauge(e,t,r,i,o=!1){if(!this.meter||!o&&!this.isEnabled())return;let s=this.buildAttributes(r),n=JSON.stringify(s),d=this.gaugeValues.get(e);if(t===null){if(d){if(d.delete(n),d.size===0)this.gaugeValues.delete(e),this.gauges.delete(e)}return}let a=d;if(!a)a=new Map,this.gaugeValues.set(e,a);if(!this.gauges.has(e)){let l=this.meter.createObservableGauge(e,i?{description:i}:void 0);l.addCallback((m)=>{for(let I of this.snapshotGaugeSeries(e))m.observe(I.value,this.flattenProperties(I.attributes))}),this.gauges.set(e,l)}a.set(n,{value:t,attributes:s})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}setDistinctId(e){this.distinctId=e}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}async flush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.()])}emitLog(e,t,r){if(!this.logger)return;let i=this.flattenProperties(this.buildAttributes(t,r));this.logger.emit({severityText:"INFO",body:e,attributes:i})}buildAttributes(e,t=!1){return{...this.commonProperties,...this.metadata,...e,...this.distinctId?{distinct_id:this.distinctId}:{},...t?{_required:!0}:{}}}snapshotGaugeSeries(e){let t=this.gaugeValues.get(e);if(!t)return[];return Array.from(t.values(),(r)=>({value:r.value,attributes:r.attributes?{...r.attributes}:void 0}))}flattenProperties(e,t="",r=new WeakSet,i=0){if(!e)return{};let o={},s=100,n=10;for(let[d,a]of Object.entries(e)){if(d==="__proto__"||d==="constructor"||d==="prototype")continue;let l=t?`${t}.${d}`:d;if(a===null||a===void 0){o[l]=String(a);continue}if(Array.isArray(a)){let m=a.length>s?a.slice(0,s):a;try{o[l]=JSON.stringify(m)}catch{o[l]="[UnserializableArray]"}if(a.length>s)o[`${l}_truncated`]=!0,o[`${l}_original_length`]=a.length;continue}if(typeof a==="object"){if(a instanceof Date){o[l]=a.toISOString();continue}if(a instanceof Error){o[l]=a.message;continue}if(r.has(a)){o[l]="[Circular]";continue}if(i>=n){o[l]="[MaxDepthExceeded]";continue}r.add(a),Object.assign(o,this.flattenProperties(a,l,r,i+1));continue}if(X(a)){o[l]=a;continue}try{o[l]=JSON.stringify(a)}catch{o[l]=String(a)}}return o}}function X(e){return typeof e==="string"||typeof e==="number"||typeof e==="boolean"}import{LangfuseAttributesSpanProcessor as le}from"@cerebriline/llms";import{markOtlpTraceRelayProvider as ce}from"@cerebriline/shared";import{metrics as ue,trace as me}from"@opentelemetry/api";import{logs as pe}from"@opentelemetry/api-logs";import{OTLPLogExporter as ge}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as fe}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as ye}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Te}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Se,ConsoleLogRecordExporter as ve,LoggerProvider as be}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Ee,MeterProvider as he,PeriodicExportingMetricReader as D}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Pe,ConsoleSpanExporter as _e,SimpleSpanProcessor as Ie}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Ae}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Oe,ATTR_SERVICE_VERSION as Ce}from"@opentelemetry/semantic-conventions";import{mkdirSync as et,readFileSync as J,statSync as Q,writeFileSync as tt}from"node:fs";import{CONFIGURABLE_MODEL_TOOL_NAMES as Z}from"@cerebriline/shared";import{resolveGlobalSettingsPath as ee}from"@cerebriline/shared/storage";import{z as c}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as Fe,captureAgentUnexpectedReasoningTokens as Ve,captureTaskLifecycleEvent as ze,SDK_ERROR_TELEMETRY_EVENT as Be,TASK_CANCELLED_EVENT as je,TASK_FIRST_CHUNK_RECEIVED_EVENT as We,TASK_MAX_TOKENS_RECOVERY_EVENT as qe,TASK_PROVIDER_REQUEST_STARTED_EVENT as Ye,TASK_PROVIDER_STREAM_FAILED_EVENT as Xe,TASK_PROVIDER_STREAM_STARTED_EVENT as $e}from"@cerebriline/shared";var v=c.preprocess((e)=>Array.isArray(e)?e.filter((t)=>typeof t==="string").map((t)=>t.trim()).filter(Boolean):void 0,c.array(c.string()).optional()).transform((e)=>{if(!e)return;let t=[...new Set(e)].sort((r,i)=>r.localeCompare(i));return t.length>0?t:void 0}),te=c.enum(["basic","agentic"]).catch("agentic"),re=c.partialRecord(c.enum(Z),c.object({enabled:c.boolean()}).strip()).optional(),ie=c.record(c.string(),c.object({enabled:c.boolean()}).strip()).optional().catch(void 0),oe=c.enum(["plan","act"]),R=c.object({telemetryOptOut:c.boolean().default(!1).catch(!1),autoUpdateEnabled:c.boolean().default(!0).catch(!0),compactionStrategy:te.optional(),compactionEnabled:c.boolean().optional().catch(void 0),planActMode:oe.optional().catch(void 0),toolAutoApprove:c.boolean().optional().catch(void 0),tuiTheme:c.string().optional().catch(void 0),disabledTools:v.optional(),tools:re,disabledPlugins:v.optional(),disabledAgentPlugins:v.optional(),bundledSkills:ie}).strip().transform((e)=>{let t={autoUpdateEnabled:e.autoUpdateEnabled,telemetryOptOut:e.telemetryOptOut};if(e.compactionStrategy)t.compactionStrategy=e.compactionStrategy;if(e.compactionEnabled!==void 0)t.compactionEnabled=e.compactionEnabled;if(e.planActMode)t.planActMode=e.planActMode;if(e.toolAutoApprove!==void 0)t.toolAutoApprove=e.toolAutoApprove;if(e.tuiTheme?.trim())t.tuiTheme=e.tuiTheme.trim();if(e.disabledTools?.length)t.disabledTools=e.disabledTools;if(e.tools&&Object.keys(e.tools).length>0)t.tools=e.tools;if(e.disabledPlugins?.length)t.disabledPlugins=e.disabledPlugins;if(e.disabledAgentPlugins?.length)t.disabledAgentPlugins=e.disabledAgentPlugins;if(e.bundledSkills&&Object.keys(e.bundledSkills).length>0)t.bundledSkills=e.bundledSkills;return t});function y(){return R.parse({})}var b;function ne(e){if(e.disabledTools)Object.freeze(e.disabledTools);if(e.tools){for(let t of Object.values(e.tools))Object.freeze(t);Object.freeze(e.tools)}if(e.disabledPlugins)Object.freeze(e.disabledPlugins);if(e.disabledAgentPlugins)Object.freeze(e.disabledAgentPlugins);return Object.freeze(e)}function se(e){let t;try{t=J(e,"utf8")}catch{return{value:y(),loadFailed:!0}}try{let r=R.safeParse(JSON.parse(t));return r.success?{value:r.data,loadFailed:!1}:{value:y(),loadFailed:!0}}catch{return{value:y(),loadFailed:!0}}}function ae(){let e=ee(),t=Q(e,{throwIfNoEntry:!1}),r=t?.mtimeMs??0,i=t?.size??0,o=b;if(o&&o.path===e&&o.mtimeMs===r&&o.size===i)return o;let s=t?se(e):{value:y(),loadFailed:!1},n=ne(s.value);return b={path:e,mtimeMs:r,size:i,value:n,loadFailed:s.loadFailed},b}function de(){return ae().value}function M(){return de().telemetryOptOut}class E{name;logger;enabled;constructor(e={}){this.name=e.name??"TelemetryLoggerSink",this.logger=e.logger,this.enabled=e.enabled??!0}emit(e,t){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:e,properties:t})}emitRequired(e,t){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:e,properties:t})}recordCounter(e,t,r,i,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:e,value:t,attributes:r,description:i,required:o===!0})}recordHistogram(e,t,r,i,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:e,value:t,attributes:r,description:i,required:o===!0})}recordGauge(e,t,r,i,o){if(!o&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:e,value:t,attributes:r,description:i,required:o===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class T{adapters;metadata;distinctId;deviceId;commonProperties;constructor(e={}){if(this.adapters=[...e.adapters??[]],e.logger)this.adapters.push(new E({logger:e.logger}));this.metadata={...e.metadata??{}},this.distinctId=e.distinctId,this.deviceId=e.deviceId??S(),this.commonProperties={...e.commonProperties??{}}}addAdapter(e){this.adapters.push(e)}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return this.adapters.some((e)=>e.isEnabled())}capture(e){let t=this.buildAttributes(e.properties);for(let r of this.adapters)r.emit(e.event,t)}captureRequired(e,t){let r=this.buildAttributes(t);for(let i of this.adapters)i.emitRequired(e,r)}recordCounter(e,t,r,i,o=!1){let s=this.buildAttributes(r);for(let n of this.adapters)n.recordCounter(e,t,s,i,o)}recordHistogram(e,t,r,i,o=!1){let s=this.buildAttributes(r);for(let n of this.adapters)n.recordHistogram(e,t,s,i,o)}recordGauge(e,t,r,i,o=!1){let s=this.buildAttributes(r);for(let n of this.adapters)n.recordGauge(e,t,s,i,o)}async flush(){await Promise.all(this.adapters.map((e)=>e.flush()))}async dispose(){await Promise.all(this.adapters.map((e)=>e.dispose()))}buildAttributes(e){let t=typeof e?.distinct_id==="string"&&e.distinct_id.trim()?e.distinct_id.trim():this.distinctId,r={...this.commonProperties,...this.metadata,...e,...t?{distinct_id:t}:{},device_id:this.deviceId};return Object.fromEntries(Object.entries(r).filter(([,i])=>i!==void 0))}}class k{distinctId;metadata;commonProperties;constructor(e={}){this.distinctId=e.distinctId,this.metadata={...e.metadata??{}},this.commonProperties={...e.commonProperties??{}}}setDistinctId(e){this.distinctId=e}setMetadata(e){this.metadata={...e}}updateMetadata(e){this.metadata={...this.metadata,...e}}setCommonProperties(e){this.commonProperties={...e}}updateCommonProperties(e){this.commonProperties={...this.commonProperties,...e}}isEnabled(){return!1}capture(e){this.resolveProperties(e.properties)}captureRequired(e,t){this.resolveProperties(t)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(e){let t=typeof e?.distinct_id==="string"&&e.distinct_id.trim()?e.distinct_id.trim():this.distinctId,r={...this.commonProperties,...this.metadata,...e,...t?{distinct_id:t}:{}};return Object.fromEntries(Object.entries(r).filter(([,i])=>i!==void 0))}}class P{meterProvider;loggerProvider;tracerProvider;options;constructor(e={}){this.options=e;let t=Te({[Oe]:e.serviceName??"cline",...e.serviceVersion?{[Ce]:e.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(t),this.loggerProvider=this.createLoggerProvider(t),this.tracerProvider=this.createTracerProvider(t),this.meterProvider)ue.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)pe.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(e="cline",t){return me.getTracer(e,t??this.options.serviceVersion)}createAdapter(e){return new f({...e,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(e){let t=this.createAdapter({name:e.name,enabled:this.options.enabled,metadata:e.metadata});return new T({...e,adapters:[t],distinctId:g(e.distinctId)})}async forceFlush(){await Promise.all([this.meterProvider?.forceFlush?.(),this.loggerProvider?.forceFlush?.(),this.tracerProvider?.forceFlush?.()])}async dispose(){await Promise.all([this.meterProvider?.shutdown?.(),this.loggerProvider?.shutdown?.(),this.tracerProvider?.shutdown?.()])}createMeterProvider(e){let t=h(this.options.metricsExporter);if(t.length===0)return null;let r=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),i=Math.min(30000,Math.floor(r*0.8)),o=t.map((s)=>De(s,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:r,timeout:i})).filter((s)=>s!==null);if(o.length===0)return null;return new he({resource:e,readers:o})}createTracerProvider(e){let t=h(this.options.tracesExporter);if(t.length===0)return null;let r=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,i=this.options.otlpTracesHeaders??this.options.otlpHeaders,o=[],s=!1;for(let d of t){let a=Me(d,{endpoint:r,headers:i,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(a){if(o.push(a),d!=="console")s=!0}}if(o.length===0)return null;let n=new Ae({resource:e,spanProcessors:s?[new le,...o]:o});if(s)ce(n);return n}createLoggerProvider(e){let t=h(this.options.logsExporter);if(t.length===0)return null;let r=t.map((i)=>{let o=Re(i,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!o)return null;return new Se(o,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((i)=>i!==null);if(r.length===0)return null;return new be({resource:e,processors:r})}}function N(e){let t=new P(e),r=t.createTelemetryService(e),i=()=>{r.captureRequired("telemetry.provider_created",{provider:"opentelemetry",enabled:e.enabled??!0,logsExporter:Array.isArray(e.logsExporter)?e.logsExporter.join(","):e.logsExporter,metricsExporter:Array.isArray(e.metricsExporter)?e.metricsExporter.join(","):e.metricsExporter,tracesExporter:Array.isArray(e.tracesExporter)?e.tracesExporter.join(","):e.tracesExporter,otlpProtocol:e.otlpProtocol,hasOtlpEndpoint:Boolean(e.otlpEndpoint),serviceName:e.serviceName,serviceVersion:e.serviceVersion})};if(!e.deferProviderCreatedEvent)i();return{provider:t,telemetry:r,emitProviderCreated:i}}function L(e){if(M())return{telemetry:new k(e)};if(e.enabled!==!0)return{telemetry:new T({...e,distinctId:g(e.distinctId)})};return N(e)}function xe(e){let{telemetry:t,provider:r,emitProviderCreated:i}=L(e);return{telemetry:t,provider:r,flush:async()=>{let n=r;if(n&&typeof n.forceFlush==="function")try{await n.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([t.dispose(),r?.dispose()])},...e.deferProviderCreatedEvent&&i?{emitProviderCreated:i}:{}}}function h(e){if(!e)return[];return(Array.isArray(e)?e:e.split(",")).map((r)=>r.trim()).filter((r)=>r==="console"||r==="otlp")}function Re(e,t){if(e==="console")return new ve;if(!t.endpoint)return null;let r=_(t.endpoint,"/v1/logs");return new ge({url:r,headers:t.headers})}function Me(e,t){if(e==="console")return new Ie(new _e);if(!t.endpoint)return null;let r=_(t.endpoint,"/v1/traces");return new Pe(new ye({url:r,headers:t.headers}))}function De(e,t){if(e==="console")return new D({exporter:new Ee,exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout});if(!t.endpoint)return null;let r=_(t.endpoint,"/v1/metrics");return new D({exporter:new fe({url:r,headers:t.headers}),exportIntervalMillis:t.interval,exportTimeoutMillis:t.timeout})}function _(e,t){let r=new URL(e),i=r.pathname.endsWith("/")?r.pathname.slice(0,-1):r.pathname;return r.pathname=i.endsWith(t)?i:`${i}${t}`,r.toString()}import{SESSION_STATUS_VALUES as Rt}from"@cerebriline/shared";var p={CORE:"core",CLI:"cli",SUBAGENT:"subagent",DESKTOP:"desktop",KANBAN:"kanban",API:"api",WEB:"web",VSCODE:"vscode",ENTERPRISE:"enterprise",IDE:"ide",JETBRAINS:"jetbrains",NEOVIM:"neovim",UNKNOWN:"unknown"};function w(e){let t=[e?.name,e?.platform].filter((r)=>typeof r==="string").join(" ").toLowerCase();if(!t)return;if(t.includes("vscode")||t.includes("visual studio code"))return p.VSCODE;if(t.includes("jetbrains")||t.includes("webstorm")||t.includes("intellij")||t.includes("pycharm")||t.includes("goland")||t.includes("clion")||t.includes("rider")||t.includes("android studio"))return p.JETBRAINS;if(t.includes("neovim"))return p.NEOVIM;if(t.includes("kanban"))return p.KANBAN;if(t.includes("desktop"))return p.DESKTOP;if(t.includes("cline-platform"))return p.WEB;if(t.includes("cline-cli")||t.includes("cline-acp"))return p.CLI;if(t.includes("cline-sdk")||t.includes("cline-core"))return p.CORE;return}function u(e){let t=e?.trim();return t?t:void 0}function G(e){let t=e.client,r=w(t)??u(e.source),i=u(t.version),o=u(t.platform)??u(t.name),s=u(t.platformVersion)??i,n={cline_type:r,extension_version:i,platform:o,platform_version:s};if(e.user?.accountId===void 0)return n;let d=typeof e.user.accountId==="string"?u(e.user.accountId):void 0;return{...n,distinct_id:d??u(e.user.distinctId),user_id:d,account_id:d,account_email:d?u(e.user.email):void 0,organization_id:d?u(e.user.organizationId):void 0}}function U(e,t){let r={},i={},o,s=(n)=>({...t,...i,...r,...n,...o?{distinct_id:o}:{}});return{setDistinctId(n){o=u(n)},setMetadata(n){r={...n}},updateMetadata(n){r={...r,...n}},setCommonProperties(n){i={...n}},updateCommonProperties(n){i={...i,...n}},isEnabled:()=>e.isEnabled(),capture:(n)=>e.capture({event:n.event,properties:s(n.properties)}),captureRequired:(n,d)=>e.captureRequired(n,s(d)),recordCounter:(n,d,a,l,m)=>e.recordCounter(n,d,s(a),l,m),recordHistogram:(n,d,a,l,m)=>e.recordHistogram(n,d,s(a),l,m),recordGauge:(n,d,a,l,m)=>e.recordGauge(n,d,s(a),l,m),flush:()=>e.flush(),dispose:async()=>{}}}function ke(e,t){return U(e,G(t))}export{f as OpenTelemetryAdapter,P as OpenTelemetryProvider,ke as createClientScopedTelemetryService,xe as createConfiguredTelemetryHandle,L as createConfiguredTelemetryService,N as createOpenTelemetryTelemetryService,U as createScopedTelemetryService,G as resolveClientTelemetryProperties,S as resolveCoreDeviceId,g as resolveCoreDistinctId};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cerebriline/core",
|
|
3
3
|
"description": "Cerebriline Core SDK for Node Runtime",
|
|
4
|
-
"version": "4.100.
|
|
4
|
+
"version": "4.100.252",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/mann1x/cline.git",
|
|
@@ -80,9 +80,9 @@
|
|
|
80
80
|
"ws": "^8.20.0",
|
|
81
81
|
"yaml": "^2.8.2",
|
|
82
82
|
"zod": "4.4.3",
|
|
83
|
-
"@cerebriline/agents": "4.100.
|
|
84
|
-
"@cerebriline/llms": "4.100.
|
|
85
|
-
"@cerebriline/shared": "4.100.
|
|
83
|
+
"@cerebriline/agents": "4.100.252",
|
|
84
|
+
"@cerebriline/llms": "4.100.252",
|
|
85
|
+
"@cerebriline/shared": "4.100.252"
|
|
86
86
|
},
|
|
87
87
|
"peerDependencies": {
|
|
88
88
|
"posthog-node": "^5.8.0"
|