@cerebriline/core 4.100.240 → 4.100.241

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/assets/skills/README.md +14 -0
  2. package/assets/skills/build-project/SKILL.md +103 -0
  3. package/assets/skills/docker-compose-deploy/SKILL.md +239 -0
  4. package/assets/skills/librarian/SKILL.md +177 -0
  5. package/assets/skills/mandatory-qa-prompt-and-issue-resolution/SKILL.md +58 -0
  6. package/assets/skills/run-project/SKILL.md +103 -0
  7. package/assets/skills/sdd-discuss/SKILL.md +129 -0
  8. package/assets/skills/sdd-execute/SKILL.md +146 -0
  9. package/assets/skills/sdd-plan/SKILL.md +140 -0
  10. package/assets/skills/sdd-quick/SKILL.md +40 -0
  11. package/assets/skills/sdd-status/SKILL.md +75 -0
  12. package/assets/skills/sdd-verify/SKILL.md +122 -0
  13. package/assets/skills/sdd-wizard/SKILL.md +105 -0
  14. package/assets/skills/tdd-coverage/SKILL.md +88 -0
  15. package/assets/skills/tdd-gen/SKILL.md +82 -0
  16. package/assets/skills/tdd-test/SKILL.md +61 -0
  17. package/assets/skills/tdd-wizard/SKILL.md +162 -0
  18. package/dist/extensions/config/bundled-skills.d.ts +24 -0
  19. package/dist/extensions/config/index.d.ts +2 -1
  20. package/dist/extensions/config/unified-config-file-watcher.d.ts +15 -0
  21. package/dist/extensions/config/user-instruction-config-loader.d.ts +15 -0
  22. package/dist/extensions/tools/executors/document/ebook.d.ts +10 -0
  23. package/dist/extensions/tools/executors/document/formats.d.ts +25 -0
  24. package/dist/extensions/tools/executors/document/ocr.d.ts +3 -0
  25. package/dist/extensions/tools/executors/document/recognition.d.ts +16 -0
  26. package/dist/extensions/tools/executors/document-extract.d.ts +91 -0
  27. package/dist/extensions/tools/librarian-tools.d.ts +35 -0
  28. package/dist/extensions/tools/library-import-run.d.ts +79 -0
  29. package/dist/extensions/tools/library-tools.d.ts +88 -0
  30. package/dist/extensions/tools/memory-tools.d.ts +41 -0
  31. package/dist/extensions/tools/sdd-tool.d.ts +215 -0
  32. package/dist/extensions/tools/team/create-agent-tool.d.ts +5 -4
  33. package/dist/hub/daemon/entry.js +547 -545
  34. package/dist/hub/index.js +531 -529
  35. package/dist/index.d.ts +17 -1
  36. package/dist/index.js +1070 -689
  37. package/dist/services/global-settings.d.ts +9 -0
  38. package/dist/services/llms/provider-settings.d.ts +15 -15
  39. package/dist/services/retrieval/catalogue.d.ts +370 -0
  40. package/dist/services/retrieval/chunker.d.ts +44 -0
  41. package/dist/services/retrieval/embedding-client.d.ts +78 -0
  42. package/dist/services/retrieval/fingerprint.d.ts +21 -0
  43. package/dist/services/retrieval/firecrawl.d.ts +77 -0
  44. package/dist/services/retrieval/lancedb-runtime.d.ts +84 -0
  45. package/dist/services/retrieval/lancedb-runtime.manifest.d.ts +17 -0
  46. package/dist/services/retrieval/library-store.d.ts +148 -0
  47. package/dist/services/retrieval/library.d.ts +139 -0
  48. package/dist/services/retrieval/memory-recall.d.ts +97 -0
  49. package/dist/services/retrieval/memory.d.ts +184 -0
  50. package/dist/services/retrieval/retrieve.d.ts +85 -0
  51. package/dist/services/retrieval/tar-extract.d.ts +14 -0
  52. package/dist/services/retrieval/tar-write.d.ts +20 -0
  53. package/dist/services/retrieval/vector-index.d.ts +82 -0
  54. package/dist/services/sdd/sdd-engine.d.ts +248 -0
  55. package/dist/services/telemetry/index.js +1 -1
  56. package/dist/types/config.d.ts +7 -0
  57. package/dist/types/session.d.ts +2 -0
  58. package/package.json +4 -4
  59. package/dist/extensions/tools/code-intel.d.ts +0 -131
@@ -1 +1 @@
1
- import{existsSync as N,mkdirSync as G,readFileSync as v,writeFileSync as u}from"node:fs";import{resolve as g}from"node:path";import{resolveSessionDataDir as S}from"@cerebriline/shared/storage";import{nanoid as b}from"nanoid";import*as c from"node-machine-id";var m="machine-id",C,h=!1;function R(){if(!h)C=w(),h=!0;return C??q()}function X(f){let P=f?.trim();if(P)return P;let A=w();if(A)return A;return q()}function d(){let f=c;return f.machineIdSync??f.default?.machineIdSync}function w(){try{let f=d();if(!f)return;return f().trim()||void 0}catch{return}}function q(){let f=S(),P=g(f,m);try{if(N(P)){let O=v(P,"utf8").trim();if(O.length>0)return O}}catch{}let A=`cl-${b()}`;try{G(f,{recursive:!0}),u(P,A,"utf8")}catch{}return A}class Y{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,P){if(!this.isEnabled())return;this.emitLog(f,P,!1)}emitRequired(f,P){this.emitLog(f,P,!0)}recordCounter(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.counters.get(f);if(!H)H=this.meter.createCounter(f,O?{description:O}:void 0),this.counters.set(f,H);H.add(P,this.flattenProperties(this.buildAttributes(A)))}recordHistogram(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.histograms.get(f);if(!H)H=this.meter.createHistogram(f,O?{description:O}:void 0),this.histograms.set(f,H);H.record(P,this.flattenProperties(this.buildAttributes(A)))}recordGauge(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.buildAttributes(A),$=JSON.stringify(H),K=this.gaugeValues.get(f);if(P===null){if(K){if(K.delete($),K.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let T=K;if(!T)T=new Map,this.gaugeValues.set(f,T);if(!this.gauges.has(f)){let J=this.meter.createObservableGauge(f,O?{description:O}:void 0);J.addCallback((B)=>{for(let M of this.snapshotGaugeSeries(f))B.observe(M.value,this.flattenProperties(M.attributes))}),this.gauges.set(f,J)}T.set($,{value:P,attributes:H})}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,P,A){if(!this.logger)return;let O=this.flattenProperties(this.buildAttributes(P,A));this.logger.emit({severityText:"INFO",body:f,attributes:O})}buildAttributes(f,P=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...P?{_required:!0}:{}}}snapshotGaugeSeries(f){let P=this.gaugeValues.get(f);if(!P)return[];return Array.from(P.values(),(A)=>({value:A.value,attributes:A.attributes?{...A.attributes}:void 0}))}flattenProperties(f,P="",A=new WeakSet,O=0){if(!f)return{};let j={},H=100,$=10;for(let[K,T]of Object.entries(f)){if(K==="__proto__"||K==="constructor"||K==="prototype")continue;let J=P?`${P}.${K}`:K;if(T===null||T===void 0){j[J]=String(T);continue}if(Array.isArray(T)){let B=T.length>H?T.slice(0,H):T;try{j[J]=JSON.stringify(B)}catch{j[J]="[UnserializableArray]"}if(T.length>H)j[`${J}_truncated`]=!0,j[`${J}_original_length`]=T.length;continue}if(typeof T==="object"){if(T instanceof Date){j[J]=T.toISOString();continue}if(T instanceof Error){j[J]=T.message;continue}if(A.has(T)){j[J]="[Circular]";continue}if(O>=$){j[J]="[MaxDepthExceeded]";continue}A.add(T),Object.assign(j,this.flattenProperties(T,J,A,O+1));continue}if(r(T)){j[J]=T;continue}try{j[J]=JSON.stringify(T)}catch{j[J]=String(T)}}return j}}function r(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}import{metrics as Af,trace as Of}from"@opentelemetry/api";import{logs as jf}from"@opentelemetry/api-logs";import{OTLPLogExporter as Hf}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as Tf}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as $f}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Jf}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Wf,ConsoleLogRecordExporter as Kf,LoggerProvider as Xf}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Yf,MeterProvider as Zf,PeriodicExportingMetricReader as y}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Qf,ConsoleSpanExporter as Bf,SimpleSpanProcessor as Rf}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Ff}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Vf,ATTR_SERVICE_VERSION as Uf}from"@opentelemetry/semantic-conventions";import{mkdirSync as df,readFileSync as l,statSync as n,writeFileSync as rf}from"node:fs";import{CONFIGURABLE_MODEL_TOOL_NAMES as p}from"@cerebriline/shared";import{resolveGlobalSettingsPath as a}from"@cerebriline/shared/storage";import{z as W}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as zf,captureAgentUnexpectedReasoningTokens as Df,captureTaskLifecycleEvent as xf,SDK_ERROR_TELEMETRY_EVENT as Nf,TASK_CANCELLED_EVENT as Gf,TASK_FIRST_CHUNK_RECEIVED_EVENT as vf,TASK_PROVIDER_REQUEST_STARTED_EVENT as uf,TASK_PROVIDER_STREAM_FAILED_EVENT as gf,TASK_PROVIDER_STREAM_STARTED_EVENT as Sf}from"@cerebriline/shared";var F=W.preprocess((f)=>Array.isArray(f)?f.filter((P)=>typeof P==="string").map((P)=>P.trim()).filter(Boolean):void 0,W.array(W.string()).optional()).transform((f)=>{if(!f)return;let P=[...new Set(f)].sort((A,O)=>A.localeCompare(O));return P.length>0?P:void 0}),i=W.enum(["basic","agentic"]).catch("agentic"),s=W.partialRecord(W.enum(p),W.object({enabled:W.boolean()}).strip()).optional(),o=W.enum(["plan","act"]),E=W.object({telemetryOptOut:W.boolean().default(!1).catch(!1),autoUpdateEnabled:W.boolean().default(!0).catch(!0),compactionStrategy:i.optional(),compactionEnabled:W.boolean().optional().catch(void 0),planActMode:o.optional().catch(void 0),toolAutoApprove:W.boolean().optional().catch(void 0),tuiTheme:W.string().optional().catch(void 0),disabledTools:F.optional(),tools:s,disabledPlugins:F.optional(),disabledAgentPlugins:F.optional()}).strip().transform((f)=>{let P={autoUpdateEnabled:f.autoUpdateEnabled,telemetryOptOut:f.telemetryOptOut};if(f.compactionStrategy)P.compactionStrategy=f.compactionStrategy;if(f.compactionEnabled!==void 0)P.compactionEnabled=f.compactionEnabled;if(f.planActMode)P.planActMode=f.planActMode;if(f.toolAutoApprove!==void 0)P.toolAutoApprove=f.toolAutoApprove;if(f.tuiTheme?.trim())P.tuiTheme=f.tuiTheme.trim();if(f.disabledTools?.length)P.disabledTools=f.disabledTools;if(f.tools&&Object.keys(f.tools).length>0)P.tools=f.tools;if(f.disabledPlugins?.length)P.disabledPlugins=f.disabledPlugins;if(f.disabledAgentPlugins?.length)P.disabledAgentPlugins=f.disabledAgentPlugins;return P});function Z(){return E.parse({})}var V;function t(f){if(f.disabledTools)Object.freeze(f.disabledTools);if(f.tools){for(let P of Object.values(f.tools))Object.freeze(P);Object.freeze(f.tools)}if(f.disabledPlugins)Object.freeze(f.disabledPlugins);if(f.disabledAgentPlugins)Object.freeze(f.disabledAgentPlugins);return Object.freeze(f)}function e(f){let P;try{P=l(f,"utf8")}catch{return Z()}try{let A=E.safeParse(JSON.parse(P));return A.success?A.data:Z()}catch{return Z()}}function ff(){let f=a(),P=n(f,{throwIfNoEntry:!1}),A=P?.mtimeMs??0,O=P?.size??0,j=V;if(j&&j.path===f&&j.mtimeMs===A&&j.size===O)return j;let H=t(P?e(f):Z());return V={path:f,mtimeMs:A,size:O,value:H},V}function Pf(){return ff().value}function I(){return Pf().telemetryOptOut}class U{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,P){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:P})}emitRequired(f,P){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:P})}recordCounter(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:P,attributes:A,description:O,required:j===!0})}recordHistogram(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:P,attributes:A,description:O,required:j===!0})}recordGauge(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:P,attributes:A,description:O,required:j===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class Q{adapters;metadata;distinctId;deviceId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new U({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 P=this.buildAttributes(f.properties);for(let A of this.adapters)A.emit(f.event,P)}captureRequired(f,P){let A=this.buildAttributes(P);for(let O of this.adapters)O.emitRequired(f,A)}recordCounter(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let $ of this.adapters)$.recordCounter(f,P,H,O,j)}recordHistogram(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let $ of this.adapters)$.recordHistogram(f,P,H,O,j)}recordGauge(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let $ of this.adapters)$.recordGauge(f,P,H,O,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){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}class z{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,P){this.resolveProperties(P)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class L{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let P=Jf({[Vf]:f.serviceName??"cline",...f.serviceVersion?{[Uf]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(P),this.loggerProvider=this.createLoggerProvider(P),this.tracerProvider=this.createTracerProvider(P),this.meterProvider)Af.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)jf.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",P){return Of.getTracer(f,P??this.options.serviceVersion)}createAdapter(f){return new Y({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let P=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new Q({...f,adapters:[P],distinctId:X(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 P=_(this.options.metricsExporter);if(P.length===0)return null;let A=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),O=Math.min(30000,Math.floor(A*0.8)),j=P.map((H)=>Mf(H,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:A,timeout:O})).filter((H)=>H!==null);if(j.length===0)return null;return new Zf({resource:f,readers:j})}createTracerProvider(f){let P=_(this.options.tracesExporter);if(P.length===0)return null;let A=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,O=this.options.otlpTracesHeaders??this.options.otlpHeaders,j=[];for(let H of P){let $=kf(H,{endpoint:A,headers:O,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if($)j.push($)}if(j.length===0)return null;return new Ff({resource:f,spanProcessors:j})}createLoggerProvider(f){let P=_(this.options.logsExporter);if(P.length===0)return null;let A=P.map((O)=>{let j=Lf(O,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!j)return null;return new Wf(j,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((O)=>O!==null);if(A.length===0)return null;return new Xf({resource:f,processors:A})}}function D(f){let P=new L(f),A=P.createTelemetryService(f),O=()=>{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)O();return{provider:P,telemetry:A,emitProviderCreated:O}}function x(f){if(I())return{telemetry:new z(f)};if(f.enabled!==!0)return{telemetry:new Q({...f,distinctId:X(f.distinctId)})};return D(f)}function _f(f){let{telemetry:P,provider:A,emitProviderCreated:O}=x(f);return{telemetry:P,provider:A,flush:async()=>{let $=A;if($&&typeof $.forceFlush==="function")try{await $.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([P.dispose(),A?.dispose()])},...f.deferProviderCreatedEvent&&O?{emitProviderCreated:O}:{}}}function _(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((A)=>A.trim()).filter((A)=>A==="console"||A==="otlp")}function Lf(f,P){if(f==="console")return new Kf;if(!P.endpoint)return null;let A=k(P.endpoint,"/v1/logs");return new Hf({url:A,headers:P.headers})}function kf(f,P){if(f==="console")return new Rf(new Bf);if(!P.endpoint)return null;let A=k(P.endpoint,"/v1/traces");return new Qf(new $f({url:A,headers:P.headers}))}function Mf(f,P){if(f==="console")return new y({exporter:new Yf,exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout});if(!P.endpoint)return null;let A=k(P.endpoint,"/v1/metrics");return new y({exporter:new Tf({url:A,headers:P.headers}),exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout})}function k(f,P){let A=new URL(f),O=A.pathname.endsWith("/")?A.pathname.slice(0,-1):A.pathname;return A.pathname=O.endsWith(P)?O:`${O}${P}`,A.toString()}export{X as resolveCoreDistinctId,R as resolveCoreDeviceId,D as createOpenTelemetryTelemetryService,x as createConfiguredTelemetryService,_f as createConfiguredTelemetryHandle,L as OpenTelemetryProvider,Y as OpenTelemetryAdapter};
1
+ import{existsSync as N,mkdirSync as G,readFileSync as v,writeFileSync as u}from"node:fs";import{resolve as b}from"node:path";import{resolveSessionDataDir as S}from"@cerebriline/shared/storage";import{nanoid as g}from"nanoid";import*as c from"node-machine-id";var m="machine-id",C,w=!1;function B(){if(!w)C=h(),w=!0;return C??q()}function X(f){let P=f?.trim();if(P)return P;let A=h();if(A)return A;return q()}function d(){let f=c;return f.machineIdSync??f.default?.machineIdSync}function h(){try{let f=d();if(!f)return;return f().trim()||void 0}catch{return}}function q(){let f=S(),P=b(f,m);try{if(N(P)){let O=v(P,"utf8").trim();if(O.length>0)return O}}catch{}let A=`cl-${g()}`;try{G(f,{recursive:!0}),u(P,A,"utf8")}catch{}return A}class Y{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,P){if(!this.isEnabled())return;this.emitLog(f,P,!1)}emitRequired(f,P){this.emitLog(f,P,!0)}recordCounter(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.counters.get(f);if(!H)H=this.meter.createCounter(f,O?{description:O}:void 0),this.counters.set(f,H);H.add(P,this.flattenProperties(this.buildAttributes(A)))}recordHistogram(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.histograms.get(f);if(!H)H=this.meter.createHistogram(f,O?{description:O}:void 0),this.histograms.set(f,H);H.record(P,this.flattenProperties(this.buildAttributes(A)))}recordGauge(f,P,A,O,j=!1){if(!this.meter||!j&&!this.isEnabled())return;let H=this.buildAttributes(A),J=JSON.stringify(H),K=this.gaugeValues.get(f);if(P===null){if(K){if(K.delete(J),K.size===0)this.gaugeValues.delete(f),this.gauges.delete(f)}return}let T=K;if(!T)T=new Map,this.gaugeValues.set(f,T);if(!this.gauges.has(f)){let W=this.meter.createObservableGauge(f,O?{description:O}:void 0);W.addCallback((R)=>{for(let M of this.snapshotGaugeSeries(f))R.observe(M.value,this.flattenProperties(M.attributes))}),this.gauges.set(f,W)}T.set(J,{value:P,attributes:H})}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,P,A){if(!this.logger)return;let O=this.flattenProperties(this.buildAttributes(P,A));this.logger.emit({severityText:"INFO",body:f,attributes:O})}buildAttributes(f,P=!1){return{...this.commonProperties,...this.metadata,...f,...this.distinctId?{distinct_id:this.distinctId}:{},...P?{_required:!0}:{}}}snapshotGaugeSeries(f){let P=this.gaugeValues.get(f);if(!P)return[];return Array.from(P.values(),(A)=>({value:A.value,attributes:A.attributes?{...A.attributes}:void 0}))}flattenProperties(f,P="",A=new WeakSet,O=0){if(!f)return{};let j={},H=100,J=10;for(let[K,T]of Object.entries(f)){if(K==="__proto__"||K==="constructor"||K==="prototype")continue;let W=P?`${P}.${K}`:K;if(T===null||T===void 0){j[W]=String(T);continue}if(Array.isArray(T)){let R=T.length>H?T.slice(0,H):T;try{j[W]=JSON.stringify(R)}catch{j[W]="[UnserializableArray]"}if(T.length>H)j[`${W}_truncated`]=!0,j[`${W}_original_length`]=T.length;continue}if(typeof T==="object"){if(T instanceof Date){j[W]=T.toISOString();continue}if(T instanceof Error){j[W]=T.message;continue}if(A.has(T)){j[W]="[Circular]";continue}if(O>=J){j[W]="[MaxDepthExceeded]";continue}A.add(T),Object.assign(j,this.flattenProperties(T,W,A,O+1));continue}if(r(T)){j[W]=T;continue}try{j[W]=JSON.stringify(T)}catch{j[W]=String(T)}}return j}}function r(f){return typeof f==="string"||typeof f==="number"||typeof f==="boolean"}import{metrics as Of,trace as jf}from"@opentelemetry/api";import{logs as Hf}from"@opentelemetry/api-logs";import{OTLPLogExporter as Tf}from"@opentelemetry/exporter-logs-otlp-http";import{OTLPMetricExporter as $f}from"@opentelemetry/exporter-metrics-otlp-http";import{OTLPTraceExporter as Jf}from"@opentelemetry/exporter-trace-otlp-http";import{resourceFromAttributes as Wf}from"@opentelemetry/resources";import{BatchLogRecordProcessor as Kf,ConsoleLogRecordExporter as Xf,LoggerProvider as Yf}from"@opentelemetry/sdk-logs";import{ConsoleMetricExporter as Zf,MeterProvider as Qf,PeriodicExportingMetricReader as y}from"@opentelemetry/sdk-metrics";import{BatchSpanProcessor as Rf,ConsoleSpanExporter as Bf,SimpleSpanProcessor as Ff}from"@opentelemetry/sdk-trace-base";import{NodeTracerProvider as Vf}from"@opentelemetry/sdk-trace-node";import{ATTR_SERVICE_NAME as Uf,ATTR_SERVICE_VERSION as _f}from"@opentelemetry/semantic-conventions";import{mkdirSync as rf,readFileSync as l,statSync as n,writeFileSync as lf}from"node:fs";import{CONFIGURABLE_MODEL_TOOL_NAMES as p}from"@cerebriline/shared";import{resolveGlobalSettingsPath as a}from"@cerebriline/shared/storage";import{z as $}from"zod";import{AGENT_UNEXPECTED_REASONING_TOKENS_EVENT as zf,captureAgentUnexpectedReasoningTokens as xf,captureTaskLifecycleEvent as Nf,SDK_ERROR_TELEMETRY_EVENT as Gf,TASK_CANCELLED_EVENT as vf,TASK_FIRST_CHUNK_RECEIVED_EVENT as uf,TASK_PROVIDER_REQUEST_STARTED_EVENT as bf,TASK_PROVIDER_STREAM_FAILED_EVENT as Sf,TASK_PROVIDER_STREAM_STARTED_EVENT as gf}from"@cerebriline/shared";var F=$.preprocess((f)=>Array.isArray(f)?f.filter((P)=>typeof P==="string").map((P)=>P.trim()).filter(Boolean):void 0,$.array($.string()).optional()).transform((f)=>{if(!f)return;let P=[...new Set(f)].sort((A,O)=>A.localeCompare(O));return P.length>0?P:void 0}),i=$.enum(["basic","agentic"]).catch("agentic"),s=$.partialRecord($.enum(p),$.object({enabled:$.boolean()}).strip()).optional(),o=$.record($.string(),$.object({enabled:$.boolean()}).strip()).optional().catch(void 0),t=$.enum(["plan","act"]),E=$.object({telemetryOptOut:$.boolean().default(!1).catch(!1),autoUpdateEnabled:$.boolean().default(!0).catch(!0),compactionStrategy:i.optional(),compactionEnabled:$.boolean().optional().catch(void 0),planActMode:t.optional().catch(void 0),toolAutoApprove:$.boolean().optional().catch(void 0),tuiTheme:$.string().optional().catch(void 0),disabledTools:F.optional(),tools:s,disabledPlugins:F.optional(),disabledAgentPlugins:F.optional(),bundledSkills:o}).strip().transform((f)=>{let P={autoUpdateEnabled:f.autoUpdateEnabled,telemetryOptOut:f.telemetryOptOut};if(f.compactionStrategy)P.compactionStrategy=f.compactionStrategy;if(f.compactionEnabled!==void 0)P.compactionEnabled=f.compactionEnabled;if(f.planActMode)P.planActMode=f.planActMode;if(f.toolAutoApprove!==void 0)P.toolAutoApprove=f.toolAutoApprove;if(f.tuiTheme?.trim())P.tuiTheme=f.tuiTheme.trim();if(f.disabledTools?.length)P.disabledTools=f.disabledTools;if(f.tools&&Object.keys(f.tools).length>0)P.tools=f.tools;if(f.disabledPlugins?.length)P.disabledPlugins=f.disabledPlugins;if(f.disabledAgentPlugins?.length)P.disabledAgentPlugins=f.disabledAgentPlugins;if(f.bundledSkills&&Object.keys(f.bundledSkills).length>0)P.bundledSkills=f.bundledSkills;return P});function Z(){return E.parse({})}var V;function e(f){if(f.disabledTools)Object.freeze(f.disabledTools);if(f.tools){for(let P of Object.values(f.tools))Object.freeze(P);Object.freeze(f.tools)}if(f.disabledPlugins)Object.freeze(f.disabledPlugins);if(f.disabledAgentPlugins)Object.freeze(f.disabledAgentPlugins);return Object.freeze(f)}function ff(f){let P;try{P=l(f,"utf8")}catch{return Z()}try{let A=E.safeParse(JSON.parse(P));return A.success?A.data:Z()}catch{return Z()}}function Pf(){let f=a(),P=n(f,{throwIfNoEntry:!1}),A=P?.mtimeMs??0,O=P?.size??0,j=V;if(j&&j.path===f&&j.mtimeMs===A&&j.size===O)return j;let H=e(P?ff(f):Z());return V={path:f,mtimeMs:A,size:O,value:H},V}function Af(){return Pf().value}function I(){return Af().telemetryOptOut}class U{name;logger;enabled;constructor(f={}){this.name=f.name??"TelemetryLoggerSink",this.logger=f.logger,this.enabled=f.enabled??!0}emit(f,P){if(!this.isEnabled())return;this.logger?.log("telemetry.event",{telemetrySink:this.name,event:f,properties:P})}emitRequired(f,P){this.logger?.log("telemetry.required_event",{telemetrySink:this.name,severity:"warn",event:f,properties:P})}recordCounter(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"counter",name:f,value:P,attributes:A,description:O,required:j===!0})}recordHistogram(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"histogram",name:f,value:P,attributes:A,description:O,required:j===!0})}recordGauge(f,P,A,O,j){if(!j&&!this.isEnabled())return;this.logger?.debug("telemetry.metric",{telemetrySink:this.name,instrument:"gauge",name:f,value:P,attributes:A,description:O,required:j===!0})}isEnabled(){return typeof this.enabled==="function"?this.enabled():this.enabled}async flush(){}async dispose(){}}class Q{adapters;metadata;distinctId;deviceId;commonProperties;constructor(f={}){if(this.adapters=[...f.adapters??[]],f.logger)this.adapters.push(new U({logger:f.logger}));this.metadata={...f.metadata??{}},this.distinctId=f.distinctId,this.deviceId=f.deviceId??B(),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 P=this.buildAttributes(f.properties);for(let A of this.adapters)A.emit(f.event,P)}captureRequired(f,P){let A=this.buildAttributes(P);for(let O of this.adapters)O.emitRequired(f,A)}recordCounter(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let J of this.adapters)J.recordCounter(f,P,H,O,j)}recordHistogram(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let J of this.adapters)J.recordHistogram(f,P,H,O,j)}recordGauge(f,P,A,O,j=!1){let H=this.buildAttributes(A);for(let J of this.adapters)J.recordGauge(f,P,H,O,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){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{},device_id:this.deviceId}}}class D{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,P){this.resolveProperties(P)}recordCounter(){}recordHistogram(){}recordGauge(){}async flush(){}async dispose(){}resolveProperties(f){return{...this.commonProperties,...f,...this.metadata,...this.distinctId?{distinct_id:this.distinctId}:{}}}}class L{meterProvider;loggerProvider;tracerProvider;options;constructor(f={}){this.options=f;let P=Wf({[Uf]:f.serviceName??"cline",...f.serviceVersion?{[_f]:f.serviceVersion}:{}});if(this.meterProvider=this.createMeterProvider(P),this.loggerProvider=this.createLoggerProvider(P),this.tracerProvider=this.createTracerProvider(P),this.meterProvider)Of.setGlobalMeterProvider(this.meterProvider);if(this.loggerProvider)Hf.setGlobalLoggerProvider(this.loggerProvider);if(this.tracerProvider)this.tracerProvider.register()}getTracer(f="cline",P){return jf.getTracer(f,P??this.options.serviceVersion)}createAdapter(f){return new Y({...f,meterProvider:this.meterProvider,loggerProvider:this.loggerProvider})}createTelemetryService(f){let P=this.createAdapter({name:f.name,enabled:this.options.enabled,metadata:f.metadata});return new Q({...f,adapters:[P],distinctId:X(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 P=_(this.options.metricsExporter);if(P.length===0)return null;let A=Math.max(1000,this.options.metricExportIntervalMs??this.options.metricExportInterval??60000),O=Math.min(30000,Math.floor(A*0.8)),j=P.map((H)=>Cf(H,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json",interval:A,timeout:O})).filter((H)=>H!==null);if(j.length===0)return null;return new Qf({resource:f,readers:j})}createTracerProvider(f){let P=_(this.options.tracesExporter);if(P.length===0)return null;let A=this.options.otlpTracesEndpoint??this.options.otlpEndpoint,O=this.options.otlpTracesHeaders??this.options.otlpHeaders,j=[];for(let H of P){let J=Mf(H,{endpoint:A,headers:O,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(J)j.push(J)}if(j.length===0)return null;return new Vf({resource:f,spanProcessors:j})}createLoggerProvider(f){let P=_(this.options.logsExporter);if(P.length===0)return null;let A=P.map((O)=>{let j=kf(O,{endpoint:this.options.otlpEndpoint,headers:this.options.otlpHeaders,insecure:this.options.otlpInsecure??!1,protocol:"http/json"});if(!j)return null;return new Kf(j,{maxQueueSize:this.options.logMaxQueueSize??2048,maxExportBatchSize:this.options.logBatchSize??512,scheduledDelayMillis:this.options.logBatchTimeoutMs??this.options.logBatchTimeout??5000})}).filter((O)=>O!==null);if(A.length===0)return null;return new Yf({resource:f,processors:A})}}function z(f){let P=new L(f),A=P.createTelemetryService(f),O=()=>{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)O();return{provider:P,telemetry:A,emitProviderCreated:O}}function x(f){if(I())return{telemetry:new D(f)};if(f.enabled!==!0)return{telemetry:new Q({...f,distinctId:X(f.distinctId)})};return z(f)}function Lf(f){let{telemetry:P,provider:A,emitProviderCreated:O}=x(f);return{telemetry:P,provider:A,flush:async()=>{let J=A;if(J&&typeof J.forceFlush==="function")try{await J.forceFlush()}catch{}},dispose:async()=>{await Promise.allSettled([P.dispose(),A?.dispose()])},...f.deferProviderCreatedEvent&&O?{emitProviderCreated:O}:{}}}function _(f){if(!f)return[];return(Array.isArray(f)?f:f.split(",")).map((A)=>A.trim()).filter((A)=>A==="console"||A==="otlp")}function kf(f,P){if(f==="console")return new Xf;if(!P.endpoint)return null;let A=k(P.endpoint,"/v1/logs");return new Tf({url:A,headers:P.headers})}function Mf(f,P){if(f==="console")return new Ff(new Bf);if(!P.endpoint)return null;let A=k(P.endpoint,"/v1/traces");return new Rf(new Jf({url:A,headers:P.headers}))}function Cf(f,P){if(f==="console")return new y({exporter:new Zf,exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout});if(!P.endpoint)return null;let A=k(P.endpoint,"/v1/metrics");return new y({exporter:new $f({url:A,headers:P.headers}),exportIntervalMillis:P.interval,exportTimeoutMillis:P.timeout})}function k(f,P){let A=new URL(f),O=A.pathname.endsWith("/")?A.pathname.slice(0,-1):A.pathname;return A.pathname=O.endsWith(P)?O:`${O}${P}`,A.toString()}export{X as resolveCoreDistinctId,B as resolveCoreDeviceId,z as createOpenTelemetryTelemetryService,x as createConfiguredTelemetryService,Lf as createConfiguredTelemetryHandle,L as OpenTelemetryProvider,Y as OpenTelemetryAdapter};
@@ -741,6 +741,13 @@ export interface CoreSessionConfig extends CoreModelConfig, CoreRuntimeFeatures,
741
741
  describeImages?: AgentConfig["describeImages"];
742
742
  /** See `AgentConfig.alwaysDescribeImages`. */
743
743
  alwaysDescribeImages?: boolean;
744
+ /**
745
+ * Memory's automatic recall: asked with every message the user sends,
746
+ * and what it returns is put after the message. Absent: nothing is
747
+ * recalled for the model, which can still call `recall` itself. It never
748
+ * throws and never fails a turn. See `createMemoryRecaller`.
749
+ */
750
+ recallMemory?: import("../services/retrieval/memory-recall").MemoryRecaller;
744
751
  /**
745
752
  * Run subagents and teammates on this connection instead of the session's.
746
753
  *
@@ -129,6 +129,8 @@ export type PreparedTurnInput = {
129
129
  prompt: string;
130
130
  userImages?: string[];
131
131
  userFiles?: string[];
132
+ /** What Memory recalled for this message, to tell the user once the session is on record. */
133
+ recallSummary?: string;
132
134
  };
133
135
  export interface PersistedSessionUpdateInput {
134
136
  sessionId: string;
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.240",
4
+ "version": "4.100.241",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/mann1x/cline.git",
@@ -69,9 +69,9 @@
69
69
  "ws": "^8.20.0",
70
70
  "yaml": "^2.8.2",
71
71
  "zod": "^4.3.6",
72
- "@cerebriline/agents": "4.100.240",
73
- "@cerebriline/llms": "4.100.240",
74
- "@cerebriline/shared": "4.100.240"
72
+ "@cerebriline/agents": "4.100.241",
73
+ "@cerebriline/llms": "4.100.241",
74
+ "@cerebriline/shared": "4.100.241"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "posthog-node": "^5.8.0"
@@ -1,131 +0,0 @@
1
- import { type AgentTool } from "@cerebriline/shared";
2
- /**
3
- * Hand the model the workspace's language servers.
4
- *
5
- * VS Code already runs a language server for every language in the workspace,
6
- * and those servers already know what every symbol means: where it is defined,
7
- * everywhere it is used, what its type is, which classes implement it. None of
8
- * that reached the model. It had regex search — `search_codebase` — and a regex
9
- * cannot tell a definition from a mention, a method on this class from a method
10
- * with the same name on another, or a live reference from one inside a comment.
11
- *
12
- * So the model compensates by reading. It greps a name, gets forty hits, reads
13
- * six files to work out which one is the definition, and spends the turns on
14
- * work the editor had already done and would have answered instantly. This is
15
- * free capability that was sitting one `executeCommand` away.
16
- *
17
- * Position resolution is the part that makes it usable. Every LSP request is
18
- * addressed by line and character, and a model almost never has those — it has
19
- * a name it read in a file. So `symbol` is the primary way to ask, and the
20
- * position is found on the model's behalf; line/character are accepted too, for
21
- * when it does know.
22
- */
23
- export declare const CODE_INTEL_TOOL_NAME = "code_intel";
24
- export declare const CODE_INTEL_OPERATIONS: readonly ["definition", "references", "implementations", "type_definition", "hover", "document_symbols", "workspace_symbols", "callers"];
25
- export type CodeIntelOperation = (typeof CODE_INTEL_OPERATIONS)[number];
26
- export declare const CODE_INTEL_TOOL_DESCRIPTION = "Ask the language servers \u2014 the LSP \u2014 about a symbol. If you are reaching for an LSP tool or an MCP server that wraps one, this is it: the same protocol, already running against this workspace and its open files, with no server to start. This answers questions a text search cannot, because it understands the code: it distinguishes a definition from a mention, and this class's method from another class's method of the same name.\n\nUse this before falling back to `search_codebase` for anything about a symbol. It is faster, exact, and does not need you to read files to interpret the result.\n\nReach for it the moment you are about to do one of these by hand:\n- search for a name to find where it is defined -> `definition`\n- search for a name to find what uses it, or what would break -> `references` or `callers`\n- open a file just to read a signature, type or doc comment -> `hover`\n- scroll a file, or count brackets, to work out its structure -> `document_symbols`\n- grep the repo to find which file something lives in -> `workspace_symbols`\n\nOperations:\n- `definition` \u2014 where a symbol is defined.\n- `references` \u2014 every place it is actually used.\n- `implementations` \u2014 the classes or functions implementing an interface or abstract method.\n- `type_definition` \u2014 where the type of an expression is defined.\n- `hover` \u2014 the signature, type and documentation, as an editor shows on hover.\n- `document_symbols` \u2014 an outline of one file: its classes, functions and methods.\n- `workspace_symbols` \u2014 find a symbol by name across the whole project when you do not know which file it is in.\n- `callers` \u2014 what calls this function.\n\nHow to address a symbol:\n- Usually: `path` plus `symbol` \u2014 the name as it appears in that file.\n- If you know the exact position: `path`, `line` and `character` (both 1-based).\n- If you do not know the file: `symbol` alone, with `operation: \"workspace_symbols\"`.\n\nOutput: plain text, one result per line as `file:line:column` followed by that source line, so you can go straight to the one you want rather than reading each candidate. `hover` returns the signature and documentation as text instead, and `document_symbols` and `workspace_symbols` name each symbol's kind. No results is a definite answer \u2014 the language server understands this symbol and nothing matches \u2014 so do not fall back to a text search for the same question.";
27
- /** Exported for the same reason as `CHECK_FILE_TOOL_INPUT_SCHEMA`. */
28
- export declare const CODE_INTEL_TOOL_INPUT_SCHEMA: {
29
- readonly type: "object";
30
- readonly properties: {
31
- readonly operation: {
32
- readonly type: "string";
33
- readonly enum: readonly ["definition", "references", "implementations", "type_definition", "hover", "document_symbols", "workspace_symbols", "callers"];
34
- readonly description: "What to ask the language server.";
35
- };
36
- readonly path: {
37
- readonly type: "string";
38
- readonly description: "File the symbol appears in. Absolute, or relative to the working directory.";
39
- };
40
- readonly symbol: {
41
- readonly type: "string";
42
- readonly description: "The symbol's name, as written in that file. The usual way to address a symbol.";
43
- };
44
- readonly line: {
45
- readonly type: "number";
46
- readonly description: "1-based line, if you know the exact position.";
47
- };
48
- readonly character: {
49
- readonly type: "number";
50
- readonly description: "1-based column, if you know the exact position.";
51
- };
52
- };
53
- readonly required: readonly ["operation"];
54
- };
55
- /** A location in a file. Lines and characters are 0-based, as LSP has them. */
56
- export interface CodeIntelLocation {
57
- filePath: string;
58
- line: number;
59
- character: number;
60
- }
61
- export interface CodeIntelSymbol {
62
- name: string;
63
- /** "class", "function", "method", … — whatever the server calls it. */
64
- kind: string;
65
- location: CodeIntelLocation;
66
- /** The class or module the symbol sits in, when the server says. */
67
- containerName?: string;
68
- }
69
- /**
70
- * Everything this tool needs from the editor.
71
- *
72
- * An interface rather than direct `vscode` calls so the tool's behaviour — the
73
- * position resolution, the fallbacks, the rendering — is testable without an
74
- * extension host. `check-file-tool.ts` is built the same way.
75
- */
76
- export interface CodeIntelProvider {
77
- /** Locate a name inside one file, for the position-addressed requests. */
78
- findSymbolPosition(filePath: string, symbol: string): Promise<CodeIntelLocation | undefined>;
79
- definitions(at: CodeIntelLocation): Promise<CodeIntelLocation[]>;
80
- typeDefinitions(at: CodeIntelLocation): Promise<CodeIntelLocation[]>;
81
- implementations(at: CodeIntelLocation): Promise<CodeIntelLocation[]>;
82
- references(at: CodeIntelLocation): Promise<CodeIntelLocation[]>;
83
- hover(at: CodeIntelLocation): Promise<string | undefined>;
84
- documentSymbols(filePath: string): Promise<CodeIntelSymbol[]>;
85
- workspaceSymbols(query: string): Promise<CodeIntelSymbol[]>;
86
- callers(at: CodeIntelLocation): Promise<CodeIntelSymbol[]>;
87
- /** The source line, so a result is readable without opening the file. */
88
- readLine(filePath: string, line: number): Promise<string | undefined>;
89
- }
90
- export interface CodeIntelToolOptions {
91
- cwd: string;
92
- provider: CodeIntelProvider;
93
- /**
94
- * Where a failed request goes. Injected rather than imported: this tool is
95
- * shared by the extension and the CLI, and each has its own logger.
96
- */
97
- onError?: (message: string, error: unknown) => void;
98
- }
99
- interface CodeIntelInput {
100
- operation?: unknown;
101
- path?: unknown;
102
- symbol?: unknown;
103
- /**
104
- * Accepted as a spelling of `symbol`. `search_codebase` sits next to this
105
- * tool and takes `queries`, so a model reaching for a name-search here
106
- * reasonably guesses `query` -- observed doing exactly that, which cost a
107
- * turn and a fall back to a text search for a question the language server
108
- * had already been asked.
109
- */
110
- query?: unknown;
111
- line?: unknown;
112
- character?: unknown;
113
- }
114
- export interface ParsedCodeIntelRequest {
115
- operation: CodeIntelOperation;
116
- filePath?: string;
117
- symbol?: string;
118
- /** 0-based, converted from the 1-based numbers the description asks for. */
119
- line?: number;
120
- character?: number;
121
- }
122
- /**
123
- * Read a request, or say what is missing from it.
124
- *
125
- * Returns a message rather than throwing: an unusable call should cost the
126
- * model one sentence telling it what to send, not a tool error it has to
127
- * interpret.
128
- */
129
- export declare function parseCodeIntelRequest(input: CodeIntelInput | undefined): ParsedCodeIntelRequest | string;
130
- export declare function createCodeIntelTool(options: CodeIntelToolOptions): AgentTool;
131
- export {};